
    Pi0                     P    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dlZd Z	dS )   )*    N)op)partialc                     	 t          j        dd          t          j        dd          ddlmm fddfd		d
 fd} | 	 G 	fddt
                    } |            S )NTensortinygrad)from_dtypesr   )r   r   c                     t          | t          j        j        t          t
          f          r@t          j                            | gt          j                            g                     S | S N)argsoutput)
isinstanceeinxtracerScalarfloatintapplyr   )xtTensors    j/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/backend/_tinygrad.pyscalar_to_tensorz create.<locals>.scalar_to_tensor   sb    a$+,eS9:: 	;$$S{))"-- %    H    Fc                 r     t           j        t          j                    fd                        }|S )Nc                      rfd| D             } n d | D             }  | d                   | d<    t          j                  |  S )Nc                 &    g | ]} |          S  r   ).0ar   s     r   
<listcomp>z>create.<locals>.elementwise.<locals>.outer.<locals>.<listcomp>   s%    :::((++:::r   c                     g | ]}|S r   r   )r    r!   s     r   r"   z>create.<locals>.elementwise.<locals>.outer.<locals>.<listcomp>   s    (((a(((r   r   )r   elementwise)r   convert_all_to_tensorfuncr   s    r   outerz*create.<locals>.elementwise.<locals>.outer   sj     % 4::::T:::((4(((**4733Q'2>$''..r   r   trace	functoolswraps)r&   r%   r'   r   s   `` r   r$   zcreate.<locals>.elementwise   sP    					/ 	/ 	/ 	/ 	/ 	/ 
	 
	/ r   c                 l     t           j        t          j                   d fd	                        }|S )Nc                 |   |                     dd          }|d}nZt          |t                    r|gn|}t          | j                  }|r|D ]}d||<   nt          |d          D ]}||= i |d|i}d|v r|                    d          |d<   t          j        | g|t          j	        |          	          S )
NkeepdimsFr   r   T)reverseaxiskeepdimr   kwargsr   )
getr   r   listshapesortedpopr   r   r   )tensorr0   r3   r.   r6   axesr!   r&   s          r   reducez&create.<locals>.reduce.<locals>.reduce&   s     zz*e44H|!+D#!6!6@vvDV\** %! % %#$a% $D$777 % %!!HH5F5vtn5V##$*JJz$:$:y!<F8F6=Y^K_K_````r   Nr(   )r&   r;   s   ` r   r;   zcreate.<locals>.reduce%   sO    					a 	a 	a 	a 	a 
	 
	a$ r   c                 R    t          | t                    rt          |           S | S r<   )r   strgetattr)r   r   s    r   to_dtypezcreate.<locals>.to_dtype<   s*    a 	61%%%Hr   c                       e Zd ZdZ gZ e          Zeej        fd                        Z	 e
j        j                  Z e
j        j                  Z e
j        j                  Zeej        fd                        Zeej        dfd	                        Zeej        dfd	                        Z e j                            Z j                  Z e j                            Z j                  Z  ej        d	                    Z j                  Z e j                            Z e j                            Z  j!                  Z!  e"j#        d
                    Z$  e"j#        d                    Z%  e"j#        d                    Z&  e"j#        d                    Z'  e"j#        d                    Z(  e"j#        d                    Z) e j*                            Z* e j+                            Z+ j,                  Z, j-                  Z- j.                  Z. j/                  Z/ j,                  Z0 j1                  Z1 j2                  Z2 e
j3        j4                  Z4 e
j3        j5                  Z5 e
j3        j6                  Z6 e
j3        j7                  Z7 e
j3        j8                  Z8eej        d                         Z9eej        d                         Z:eej        d                         Z;eej        d                         Z< e
j=        j>                  Z> e
j=        j?                  Z? e
j=        j@                  Z@eej        d                         ZAeej        d                         ZB G fdd          ZCdS )create.<locals>.tinygradr	   c                     t           j                            | gt           j                            |                    S r   )r   r   r   r   )r9   r6   r   s     r   	to_tensorz"create.<locals>.tinygrad.to_tensorJ   s?     ;$$X{))%00 %   r   c                 "   |                     d          }t          |          dk    rt          d          |\  }}|                     d          }t          |          t          |          k    rt          d          d |D             }d |D             }g }t          t	          t          |                              d d d         D ]}t          ||                   dk    t          ||         j                  dk    k    rt          d          t          ||                   dk    rE|                    ||                    |                    |           |                    |           t          |          d	k    r<d                    |          dz   |z   } t          j
        	j
                  |g|R  }n.t          |          d	k    r	|d         }n|d         }|d	d          }|D ]}|                     ||          }|S )
Nz->   zInvalid equation,c                 ^    g | ]*}|                                                     d d          +S )  )stripreplace)r    r   s     r   r"   z3create.<locals>.tinygrad.einsum.<locals>.<listcomp>a   s0    AAAQaggii''R00AAAr   c                     g | ]}|S r   r   )r    ts     r   r"   z3create.<locals>.tinygrad.einsum.<locals>.<listcomp>b   s    ***Qq***r   r   r   )splitlen
ValueErrorr5   ranger6   appendr8   joinr   einsummultiply)
backendequationtensorsr   inputsr   scalarsiscalarr   s
            r   rV   zcreate.<locals>.tinygrad.einsumW   s    t$$A1vv{{ !3444NFF\\#&&F6{{c'll** !3444AA&AAAF**'***GG%F,,--ddd3 # #q	NNQ&C
0@,A,AA,EFF$%7888vay>>Q&&NN71:...JJqMMMKKNNN7||a88F++d2V;-BIgn--hAAAAW""AJAJ!!""+! 0 0$$Q//Hr   int32c                     t          |t                    rt          |          } t          j        j                  | |          S )N)dtype)r   r>   r?   r   arange)nra   r   tdtypess     r   rb   zcreate.<locals>.tinygrad.arangez   sG     %%% 0//,29W^,,Qe<<<<r   r   c                     t          | d         j                  }t          fd| D                       |<   t          j        j        g | dit          j        |                    S )Nr   c              3   2   K   | ]}|j                  V  d S r<   )r6   )r    r9   r0   s     r   	<genexpr>z7create.<locals>.tinygrad.concatenate.<locals>.<genexpr>   s*      GGVfl40GGGGGGr   dimr2   )r5   r6   sumr   r   catr   )rZ   r0   r6   r   s    ` r   concatenatez$create.<locals>.tinygrad.concatenate   sw     )**EGGGGwGGGGGE$K<*G*eT]6=Y^K_K_   r   F)upcast<z<=>z>=z==z!=c                     t                      r<   NotImplementedError)r9   coordinatess     r   get_atzcreate.<locals>.tinygrad.get_at        &'''r   c                     t                      r<   rp   r9   rr   updatess      r   set_atzcreate.<locals>.tinygrad.set_at   rt   r   c                     t                      r<   rp   rv   s      r   add_atzcreate.<locals>.tinygrad.add_at   rt   r   c                     t                      r<   rp   rv   s      r   subtract_atz$create.<locals>.tinygrad.subtract_at   rt   r   c                     | S r<   r   )r9   s    r   stop_gradientz&create.<locals>.tinygrad.stop_gradient   s	     Mr   c                      t          d          )NzDFunctions relying on vmap are not supported for the tinygrad backendrp   )r   in_axesout_axesinput_shapesoutput_shapess        r   vmapzcreate.<locals>.tinygrad.vmap   s     &V  r   c                   4    e Zd Zej         fd            ZdS )create.<locals>.tinygrad.randomc                     t           j                            j        g |t           j                            |                    |k    S r   )r   r   r   randr   )rngpr6   r   s      r   	bernoulliz)create.<locals>.tinygrad.random.bernoulli   sM     K%%%uX#{11%88 &  
 r   N)__name__
__module____qualname__r   r)   r   )r   s   r   randomr      s:        Z    Z  r   r   N)r_   )r   )Dr   r   r   nametensor_typesstaticmethodr@   r   r)   rD   r   reshape	transposepermutebroadcast_toexpandclassmethodrV   rb   rk   associative_binary_to_naryaddsubsubtractmulrW   divtrue_divider   floor_dividedividelogical_and
logical_orwherer   Operatorless
less_equalgreatergreater_equalequal	not_equalmaximumminimumri   meanvarstdcount_nonzerominmaxr$   logexpsqrtrsqrtsquarers   rx   rz   r|   
keep_shapeflipsoftmaxlog_softmaxr~   r   r   )r   r$   r;   r   rd   	to_dtype2s   r   r	   rB   D   s       x<	**			 	 	 	 
 
	 "*W_-- BL11	&rw~66			 	 	 	 
 
	B 
		= 	= 	= 	= 	= 	= 
 
	=
 
		 	 	 	 	 
 
	 )(W[)A)ABB;w{++--kk'+.F.FGG!k'+.."{777;u#E#E#EFFW[))00W[1I1IJJ//GK0H0HII
GM**{?6?3//00 [!6!677
+ofoc2233#OFOD$9$9::OFOD1122K 5 566	,,[[-I-IJJ,,[[-I-IJJfW[!!vgl##fW[!!fW[!!w{++fW[!!fW[!!
 bnW[))bnW[))r~gl++w}--//			( 	( 
 
	( 
		( 	( 
 
	( 
		( 	( 
 
	( 
		( 	( 
 
	( r}W\**"-00#bmG$788			 	 
 
	 
		 	 
 
	

	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	r   )F)r   import_r	   r   r   Backend)
r@   r	   r   r   r$   r;   r   r   rd   r   s
     @@@@@@@@r   creater   	   s   nXZ888GnXZ888G''''''''           .     IX X X X X X X X X X X X7 X X Xt 8::r   )
baseeinx.tracerr   einx.tracer.tensorr   r   typesr*   r   r   r   r   r   <module>r      s              ! ! ! ! ! !                  U U U U Ur   