
    Pi                     H    d dl T ddlmZ ddlmZ ddlZddlZddlmZ d Z	dS )   )*    N)op)partialc                      dd l m t          j        dd          d fd G fddt                    }  |             S )Nr   zmlx.coremxc                 .   t          | t                    r| S t          | t                    rt          |           S t          | t          j                  r!t          |                                           S t          dt          |            d          )NzCannot convert z	 to tuple)
isinstancetuplelistnpndarraytolist
ValueErrortype)xs    e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/backend/_mlx.pyto_tuplezcreate.<locals>.to_tuple   s    a 	CH4   	C88O2:&& 	C$$$AtAwwAAABBB    c                 v    t          | t                    r"| dk    rj        S t                    |          S | S )Nbool)r
   strbool_vars)r   r   s    r   to_dtypezcreate.<locals>.to_dtype   s:    a 	F{{xBxx{"Hr   c                      e Zd ZdZ j        gZ e          Zeej	        fd                        Z
eej	        fd                        Z ej        j                  Z ej        j                  Zeej	        d                         Zeej	        dfd	                        Z ej        j                  Z ej        j                  Z e ej        j                            Z ej        j                  Z e ej        j                            Z ej        j                  Z ej        j                  Z ej        j                  Z ej        j                  Z e ej        j                            Z e ej        j                            Z ej        j                  Z ej        j                   Z  ej        j!                  Z! ej        j"                  Z" ej        j#                  Z# ej        j$                  Z$ ej        j%                  Z% e ej        j&                            Z& e ej        j'                            Z' ej(        j)                  Z) ej(        j*                  Z* ej(        j+                  Z+ ej(        j,                  Z, ej(        j-                  Z- ej(        j.                  Z. ej(        j/                  Z/ ej(        j0                  Z0 ej(        j1                  Z1 ej(        j2                  Z2 ej        j3                  Z3 ej        j4                  Z4 ej        j5                  Z5 ej        j6                  Z6 ej        j7                  Z7eej	        d                         Z8eej	        d	                         Z9eej	        d
                         Z:eej	        d                         Z; ej<        j=                  Z= ej<        j>                  Z>edd            Z?j5        Z5j6        Z6j7        Z7 G fdd          Z@dS )create.<locals>.mlxmlxc                     t           j                            j        | gt           j                            |                    S N)argsoutput)einxtracerapplyarrayTensor)tensorshapetmxs     r   	to_tensorzcreate.<locals>.mlx.to_tensor(   sA     ;$$	X{))%00 %   r   c           	      $   t           j                            |           r                    |           } t           j                            j        | t           |                    gt           j                            |                    S r    )r#   r$   	is_scalarr&   r%   reshaper   r'   )r(   r)   r*   r   s     r   r.   zcreate.<locals>.mlx.reshape1   s|     {$$V,, +6**;$$64+@+@"A$+J\J\]bJcJc %   r   c                      t          d          )Nzmlx does not support einsum yetNotImplementedError)equationtensorss     r   einsumzcreate.<locals>.mlx.einsum=   s     &&GHHHr   Nint32c                     | g}||                     |           ||                     |            t          j        j                  |d |          iS )Ndtype)appendr   arange)startstopstepr7   r!   r*   r   s        r   r9   zcreate.<locals>.mlx.arangeB   se     7DD!!!D!!!(29SZ(($FhhuooFFFr   c                     | |         S )N )r(   coordinatess     r   get_atzcreate.<locals>.mlx.get_ats   s     +&&r   c                     t           j                            | j        |         j        |gt           j                            | j                            S r    )r#   r$   r%   atsetr'   r)   r(   r?   updatess      r   set_atzcreate.<locals>.mlx.set_atx   J     ;$$	+&*'4;CUCUV\VbCcCc %   r   c                     t           j                            | j        |         j        |gt           j                            | j                            S r    r#   r$   r%   rB   addr'   r)   rD   s      r   add_atzcreate.<locals>.mlx.add_at   rG   r   c                     t           j                            | j        |         j        | gt           j                            | j                            S r    rI   rD   s      r   subtract_atzcreate.<locals>.mlx.subtract_at   sL     ;$$	+&*7(DKDVDVW]WcDdDd %   r   c                      t          d          )Nz#mlx does not fully support vmap yetr0   )r   in_axesout_axesinput_shapesoutput_shapess        r   vmapzcreate.<locals>.mlx.vmap   s    %&KLLLr   c                   4    e Zd Zej         fd            ZdS )create.<locals>.mlx.randomc                     t           j                            j        j        ||| gt           j                            |                     d S r    )r#   r$   r%   random	bernoullir'   )rngpr)   r*   s      r   rX   z$create.<locals>.mlx.random.bernoulli   sP    !!J(UC;--e44 "     r   N)__name__
__module____qualname__r#   tracerX   )r*   s   r   rW   rU      s:        Z    Z  r   rW   )NNr5   )NN)Ar[   r\   r]   namer&   tensor_typesstaticmethodr   r#   r^   r+   r.   r   	transposebroadcast_tor4   r9   stackconcatenateassociative_binary_to_naryelementwiserJ   subtractmultiplydividetrue_dividefloor_divide	remaindermodlogical_and
logical_orwhereless
less_equalgreatergreater_equalequal	not_equalmaximumminimumreducesummeanvarprodcount_nonzeroanyallminmax	logsumexplogexpsqrtrsqrtsquarer@   rF   rK   rM   
keep_shapesoftmaxstop_gradientrS   rW   )r   r*   r   	to_dtype2r   s   r   r   r   "   s:       z<	**			 	 	 	 
 
	 
		 	 	 	 	 
 
	 !BL//	&rs'788			I 	I 
 
	I 
		G 	G 	G 	G 	G 	G 
 
	G ##$bnS_55(()@)@AA!2>#,//--nbnS\.J.JKK$bnSZ00%r~c&677
++bnS]++001P1PQQ//s~0N0NOO
sy))r~ch''#R^CN33
 ".--&s'899sy))"BN3=11	,,^R^CK-H-HII,,^R^CK-H-HIIbi  ry""bi  ry""!	#"344bi  bi  bi  bi  BIcm,,	bnSW%%bnSW%%r~ch''sy))
++			' 	' 
 
	' 
		 	 
 
	
 
		 	 
 
	
 
		 	 
 
	
  "-,,%c&788 
	M 	M 	M 
	M x		 	 	 	 	 	 	 	 	 	 	 	r   r   )mlx.corecorer$   import_Backend)r   r   r*   r   r   r   s    @@@@@r   creater      s    
.T
*
*CC C C     I          g   B 355Lr   )
baseeinx.tracerr$   einx.tracer.tensorr   r#   types	functoolsr   r   r>   r   r   <module>r      s}              ! ! ! ! ! !              [ [ [ [ [r   