
    Pi>                         d dl ZddlT d dlmZ  G d d          Z G d de          Z G d	 d
e          Z G d de          Z	 G d de          Z
d Zd Zd Zd Zed             ZdS )    N   )*)partialc                       e Zd Zd efdZd efdZd efdZd efdZd efdZd efdZ	d efdZ
d efdZd efd	Zd efd
Zd efdZd efdZdd efdZd ZdS )opc                 ,     t            fd            }|S )Nc                 r    |t          |           k    r| S t          | |gt          |          d          S )Nreshapeargsoutput	signature	get_shapeapplyTensortensorshaper   s     f/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/tracer/tensor.pyr
   zop.reshape.<locals>.reshape   s=    	&))))RvuofUmmW`aaaa    trace)r   r
   s   ` r   r
   z
op.reshape   s2    		b 	b 	b 	b 
	b r   c                 ,     t            fd            }|S )Nc                      t          |          t          t           j                            k    r S t           fd|D                       }t	           |gt          |          d          S )Nc              3   2   K   | ]}j         |         V  d S Nr   .0ir   s     r   	<genexpr>z2op.transpose.<locals>.transpose.<locals>.<genexpr>   s)      <<!fl1o<<<<<<r   	transposer   )listrangendimtupler   r   )r   permr   r   s   `  r   r#   zop.transpose.<locals>.transpose   sp    DzzT%"4"45555<<<<t<<<<<RvtnVE]]Vabbbbr   r   )r   r#   s   ` r   r#   zop.transpose   s3    		c 	c 	c 	c 
	c r   c                 ,     t            fd            }|S )Nc                 r    t          |           |k    r| S t          | |gt          |          d          S )Nbroadcast_tor   r   r   s     r   r+   z%op.broadcast_to.<locals>.broadcast_to   sE      E))fe_VE]]n   r   r   )r   r+   s   ` r   r+   zop.broadcast_to   s.    		 	 	 	 
	 r   c                 ,     t            fd            }|S )Nc           
         |                      d          d                              d          }t          |          t          |          k    r/t          dt          |           dt          |                     i t          t	          ||                    D ]\  }\  }}|                                                    dd          }t          |          t          |j                  k    r8t          dt          |           dt          |j                   d	| d
          t	          ||j                  D ]9\  }}|v r+|         |k    rt          d| d|          d|           4||<   :|                      d          d                                                             dd          }	t          fd|	D                       }
t          | g||t          |
                    S )Nz->r   ,z	Expected z tensors, got   z axes, got z for z-th (zero-based) input tensorz Got conflicting values for axis z: z and c              3   (   K   | ]}|         V  d S r    )r    axisvaluess     r   r"   z,op.einsum.<locals>.einsum.<locals>.<genexpr>?   s'      @@tfTl@@@@@@r   r   kwargsr   )splitlen
ValueError	enumeratezipstripreplacer   r'   r   r   )eqtensorsr7   exprsr!   exprr   r4   valueexpr_out	shape_outr5   r   s              @r   einsumzop.einsum.<locals>.einsum)   s   HHTNN1%++C00E5zzS\\)) !USZZ!U!Us7||!U!UVVVF%.s5'/B/B%C%C - -!>D&zz||++C44t99FL 1 111$4CII 4 4#fl:K:K 4 4RS 4 4 4   $'tV\#:#: - -KD%v~~!$<500", e4 e e6RV< e e^c e e# #  1
 (-t- xx~~b)//1199#rBBH@@@@x@@@@@I2..yHYHYZZZZr   r   )r   rF   s   ` r   rF   z	op.einsum(   s2    		[ 	[ 	[ 	[ 
	[0 r   c                 .     t           d fd	            }|S )Nint32c                 L    t          | gd|it          | f                    S Ndtyper6   r   r   )nrK   r   s     r   arangezop.arange.<locals>.arangeE   s)    1#w.>vqd||TTTTr   )rH   r   )r   rN   s   ` r   rN   z	op.arangeD   s8    		U 	U 	U 	U 	U 
	U r   c                 .     t           d fd	            }|S )Nr   c                    |dk     r t          | d         j                  |z   dz   }t          | d         j                  }|                    |t          |                      t	          | gd|it          |                    S )Nr   r   r4   r6   )r9   r   r$   insertr   r   r@   r4   r   r   s      r   stackzop.stack.<locals>.stackL   s|    axx71:+,,t3a7)**ELLs7||,,,7)VTN6RW==YYYYr   r   r   )r   rS   s   ` r   rS   zop.stackK   s8    		Z 	Z 	Z 	Z 	Z 
	Z r   c                 .     t           d fd	            }|S )Nr   c                     t          | d         j                  }t          fd| D                       |<   t          | gdit	          |                    S )Nr   c              3   2   K   | ]}|j                  V  d S r   r   )r    r   r4   s     r   r"   z6op.concatenate.<locals>.concatenate.<locals>.<genexpr>Z   s*      GGVfl40GGGGGGr   r4   r6   )r$   r   sumr   r   rR   s    ` r   concatenatez#op.concatenate.<locals>.concatenateW   sb    )**EGGGGwGGGGGE$K7)VTN6RW==YYYYr   rT   r   )r   rY   s   ` r   rY   zop.concatenateV   s9    		Z 	Z 	Z 	Z 	Z 
	Z
 r   c                 .     t           d fd	            }|S )Nfloat32c                 J    t          | gd|it          |                     S rJ   rL   )r   rK   r   s     r   fill_constantz'op.fill_constant.<locals>.fill_constant`   s(    5'7E2B6RW==YYYYr   )r[   r   )r   rC   r]   s   `  r   r]   zop.fill_constant_   s9    		Z 	Z 	Z 	Z 	Z 
	Z r   c                 ,     t            fd            }|S )Nc                     d }| D ]}dt          |          v r||j        }|j        }t          |          t          |          k     r%d|z   }t          |          t          |          k     %t          |          t          |          k     r%d|z   }t          |          t          |          k     %t          j        ||          }|J t          | |t          |                    S )Nr   )r   r6   )dirr   r9   npmaximumr   r   )r   r7   r   ashape2r   s        r   elementwisez#op.elementwise.<locals>.elementwiseg   s    E 
: 
:c!ff$$} !!"!%jj3v;;66$(5LE "%jj3v;;66!&kkCJJ66%)F]F "&kkCJJ66 "
5& 9 9}}}$vfUmmLLLLr   r   )r   re   s   ` r   re   zop.elementwisef   s3    		M 	M 	M 	M 
	M" r   c                 ,     t            fd            }|S )Nc            	      Z    t          | |t          | d         j                            S )Nr   r6   )r   r   r   )r   r7   r   s     r   
keep_shapez!op.keep_shape.<locals>.keep_shape|   s(    $vfT!W]>S>STTTTr   r   )r   rh   s   ` r   rh   zop.keep_shape{   s3    		U 	U 	U 	U 
	U r   c                 .     t           d fd	            }|S )Nc                 0   |                     dd          }|d}nZt          |t                    r|gn|}t          | j                  }|r|D ]}d||<   nt          |d          D ]}||= i |d|i}t          | g|t          |                    S )	NkeepdimsFr3   r   T)reverser4   r6   )get
isinstanceintr$   r   sortedr   r   )r   r4   r7   rk   r   axesrc   r   s          r   reducezop.reduce.<locals>.reduce   s    zz*e44H|!+D#!6!6@vvDV\** %! % %#$a% $D$777 % %!!HH5F5vtn56(6&--PPPPr   r   r   )r   rr   s   ` r   rr   z	op.reduce   s8    		Q 	Q 	Q 	Q 	Q 
	Q  r   c                 ,     t            fd            }|S )Nc                     t          |t                    s|fn|}t          d |D                       t           j                  k    r$t	          dt           j                             d t          fd|D                       rt          |          t           j                  k     r8|t          d           fz   }t          |          t           j                  k     8g }g }d}d}t           j                  D ]h}|r4t          ||         t                    r|	                    |           5d}8t          ||         t                    r|	                    |           id d	 |D             t          d
 D                       dk    rt	          d          t          j                  fdt          j        d                   D             }t           fd|D             |z    fd|D             z             }ng } j        }	|D ]}
t          |
t          t          j        f          r|	dd          }	.t          |
t                    rE|
                    |	d                   \  }}}|	                    ||z
  |z             |	dd          }	|
|	                    d           t          |
t                    r|
j        dk    r|	dd          }	t!          dt#          |
                     t          |          t          |	          z   }t%           |gt          |                    S )Nc                     g | ]}||S r   r3   r    cs     r   
<listcomp>z-op.get_at.<locals>.get_at.<locals>.<listcomp>   s    ===!q}A}}}r   z)Too many indices for tensor of dimension c                     | 't          | t          t          t          j        f          rdS t          | t
                    rdS | j        dk    S )NFTr   )rn   slicero   ra   integerr$   r&   )rw   s    r   is_multidimz.op.get_at.<locals>.get_at.<locals>.is_multidim   sF    9
1uc2:.F G G9 54(( &46A:%r   c              3   .   K   | ]} |          V  d S r   r3   )r    rw   r|   s     r   r"   z,op.get_at.<locals>.get_at.<locals>.<genexpr>   s+      88a;;q>>888888r   r   TFc                 N   t          j        t          d | D                                 } t          j        | dk              sJ t	          |           dk    s+t	          |           dk    r't          j        |           dk    rt          d          t          j        |           S )Nc                 ,    h | ]}t          |          S r3   ro   r    r!   s     r   	<setcomp>z?op.get_at.<locals>.get_at.<locals>.broadcast.<locals>.<setcomp>   s    +A+A+AqCFF+A+A+Ar   r      r   zCannot broadcast coordinates)ra   asarrayr$   allr9   aminr:   amax)dimss    r   	broadcastz,op.get_at.<locals>.get_at.<locals>.broadcast   s    :d+A+AD+A+A+A&B&BCCD6$(+++++4yy1}}D		Q274==1;L;L()GHHH74==(r   c                 F    g | ]}t          |t                    |j        S r3   )rn   rz   r   rv   s     r   rx   z-op.get_at.<locals>.get_at.<locals>.<listcomp>   s)    TTTaz!U?S?ST!'TTTr   c                 ,    h | ]}t          |          S r3   )r9   )r    ss     r   r   z,op.get_at.<locals>.get_at.<locals>.<setcomp>   s    ///1A///r   r   z:Expected all coordinates to have same number of dimensionsc                 :    g | ]} d d |f                   S r   r3   )r    r!   r   shapess     r   rx   z-op.get_at.<locals>.get_at.<locals>.<listcomp>   s/    QQQQ6!!!Q$<00QQQr   c                 *    g | ]}j         |         S r3   r   r   s     r   rx   z-op.get_at.<locals>.get_at.<locals>.<listcomp>   s    ;;;V\!_;;;r   c                 *    g | ]}j         |         S r3   r   r   s     r   rx   z-op.get_at.<locals>.get_at.<locals>.<listcomp>   s    <<<1v|A<<<r   zInvalid coordinate type: )r   r   )rn   r'   r9   r   r:   anyrz   r%   r&   appendra   r   ro   r{   indicesr   	TypeErrortyper   )r   coordinatescoordinates2front_slicesback_slicesr!   is_frontr   output_shapeinput_shaper   startstopstepr   r|   r   r   s   `             @@@r   get_atzop.get_at.<locals>.get_at   s   1;K1O1O`K>>U`L==|===>>V\ARARRR !`SQWQ]M^M^!`!`aaa& & & 8888<88888 8A,''#fl*;*;;;#/5;;.#@L ,''#fl*;*;;;  " v{++ 2 2A 2%l1ou== -(//2222',HH%l1ou== 2'..q111) ) ) UT<TTT/////00A55$%abbbF++QQQQQ%Q:P:PQQQ ;;;;l;;;<<<<<<<=   "$l% O OA!!c2:%677 O&1!""o#Au-- 	O,-IIk!n,E,E)tT$++TE\d,BCCC&1!""o$++A....#Av.. O16Q;;&1!""o'(MDGG(M(MNNNl++eK.@.@@6;"7uNNNNr   r   )r   r   s   ` r   r   z	op.get_at   s8    	G	O G	O G	O G	O 
G	OR r   NFc                       *t          t          j        j        j        j                  S t           fd            }|S )Ninplacec                 f    t          | j                  }t          | ||g|r| |fgng           S )N)r   r   inplace_updates)r   r   r   )r   r   updater   r   r   s       r   	update_atzop.update_at.<locals>.update_at   sN    FL))Fk626= E&&!1 2 22	   r   )r   einxtracerr   r   r   r   )r   r   r   s   `` r   r   zop.update_at   sW    :4;-0:GLLLL		 	 	 	 	 
	 r   c                 ,     t            fd            }|S )Nc           
      d    t          | g||ddt          d |D                                 S )N)in_axesout_axesvmapc                 ,    g | ]}t          |          S r3   )r   )r    r   s     r   rx   z;op.vmap.<locals>.vmap_with_output_types.<locals>.<listcomp>   s    'Q'Q'Q%u'Q'Q'Qr   )r   )r   r7   r   r   )r   Function)r   r   r   input_shapesoutput_shapesr   s        r   vmap_with_output_typesz'op.vmap.<locals>.vmap_with_output_types   sM    T#*AA 'Q'Q='Q'Q'QRRR   r   r   )r   r   s   ` r   r   zop.vmap   s.    		 	 	 	 
	 &%r   )NF)__name__
__module____qualname__Tracerr
   r#   r+   rF   rN   rS   rY   r]   re   rh   rr   r   r   r   r3   r   r   r   r      s       F    	f 	 	 	 	
 
 
 
 
6    86    	& 	 	 	 	    &        *v    6    (K6 K K K KZ f     & & & & &r   r   c                       e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d S )!r   c                 T   t                               |            t          |t          j                  r=|j        dk    rt          d|           t          d |D                       | _        d S 	 t          d |D                       | _        d S #  t          d|           xY w)Nr   zInvalid shape: c              3   4   K   | ]}t          |          V  d S r   r   r   s     r   r"   z"Tensor.__init__.<locals>.<genexpr>  s(      55!s1vv555555r   c              3   4   K   | ]}t          |          V  d S r   r   r   s     r   r"   z"Tensor.__init__.<locals>.<genexpr>  s(      "9"9a3q66"9"9"9"9"9"9r   )	r   __init__rn   ra   ndarrayr&   r:   r'   r   selfr   s     r   r   zTensor.__init__  s    eRZ(( 	<zQ !:5!:!:;;;55u55555DJJJ<""9"95"9"9"999


< !:5!:!:;;;s   3B B'c                 *    t          | j                  S r   )r9   r   r   s    r   r&   zTensor.ndim  s    4:r   c                 ^    t          |           t          k    sJ t          | j                  S r   )r   r   r   r   s    r   __copy__zTensor.__copy__  s)    DzzV####dj!!!r   c                 `    t                              t                                | |          S r   )r   r   GetAt)r   keys     r   __getitem__zTensor.__getitem__  s"    yy!!$,,,r   c                 (   |j         Yt          |j         j        t                    r:|j         j        dk    r*|j         j        d         | u r|j         j        d         |u r|S t                              t          d          d          | ||          S )N=r   r   Tr   )originrn   r   AssignAtr   r   )r   r   rC   s      r   __setitem__zTensor.__setitem__  s    $5<?H55 %3&&!!$,,!!$++ L||HSMM4|88sEJJJr   c                    t          | j        j        t                    st	          d          t                              t          d          d          | j        j        d         | j        j        d         |          S )N2Inplace operator only supported for get_at outputsz+=Tr   r   r   rn   r   r   r   r:   r   r   r   r   rC   s     r   __iadd__zTensor.__iadd__+  k    $+.%00 	SQRRR||HTNND|99KQ!1!!4e
 
 	
r   c                    t          | j        j        t                    st	          d          t                              t          d          d          | j        j        d         | j        j        d         |          S )Nr   z-=Tr   r   r   r   r   s     r   __isub__zTensor.__isub__2  r   r   c                    t          | j        j        t                    st	          d          t                              t          d          d          | j        j        d         | j        j        d         |          S )Nr   z*=Tr   r   r   r   r   s     r   __imul__zTensor.__imul__9  r   r   c                    t          | j        j        t                    st	          d          t                              t          d          d          | j        j        d         | j        j        d         |          S )Nr   z/=Tr   r   r   r   r   s     r   __itruediv__zTensor.__itruediv__@  r   r   c                    t          | j        j        t                    st	          d          t                              t          d          d          | j        j        d         | j        j        d         |          S )Nr   z//=Tr   r   r   r   r   s     r   __ifloordiv__zTensor.__ifloordiv__G  sk    $+.%00 	SQRRR||HUOOT|::KQ!1!!4e
 
 	
r   c                 b    t                              t          d                    | |          S N+r   re   Operatorr   others     r   __add__zTensor.__add__N  $    ~~hsmm,,T5999r   c                 b    t                              t          d                    ||           S r   r   r   s     r   __radd__zTensor.__radd__Q  $    ~~hsmm,,UD999r   c                 `    t                              t          d                    |           S N-r   r   s    r   __neg__zTensor.__neg__T  s"    ~~hsmm,,T222r   c                 b    t                              t          d                    | |          S r   r   r   s     r   __sub__zTensor.__sub__W  r   r   c                 b    t                              t          d                    ||           S r   r   r   s     r   __rsub__zTensor.__rsub__Z  r   r   c                 b    t                              t          d                    | |          S Nr   r   r   s     r   __mul__zTensor.__mul__]  r   r   c                 b    t                              t          d                    ||           S r   r   r   s     r   __rmul__zTensor.__rmul__`  r   r   c                 b    t                              t          d                    | |          S N/r   r   s     r   __truediv__zTensor.__truediv__c  r   r   c                 b    t                              t          d                    ||           S r   r   r   s     r   __rtruediv__zTensor.__rtruediv__f  r   r   c                 b    t                              t          d                    | |          S Nz//r   r   s     r   __floordiv__zTensor.__floordiv__i  $    ~~htnn--dE:::r   c                 b    t                              t          d                    ||           S r   r   r   s     r   __rfloordiv__zTensor.__rfloordiv__l  s$    ~~htnn--eT:::r   c                 b    t                              t          d                    | |          S r   r   r   s     r   __div__zTensor.__div__o  r   r   c                 b    t                              t          d                    ||           S r   r   r   s     r   __rdiv__zTensor.__rdiv__r  r   r   c                 b    t                              t          d                    | |          S N%r   r   s     r   __mod__zTensor.__mod__u  r   r   c                 b    t                              t          d                    ||           S r  r   r   s     r   __rmod__zTensor.__rmod__x  r   r   c                 b    t                              t          d                    | |          S )N<r   r   s     r   __lt__zTensor.__lt__{  r   r   c                 b    t                              t          d                    | |          S )Nz<=r   r   s     r   __le__zTensor.__le__~  r   r   c                 b    t                              t          d                    | |          S )N>r   r   s     r   __gt__zTensor.__gt__  r   r   c                 b    t                              t          d                    | |          S )Nz>=r   r   s     r   __ge__zTensor.__ge__  r   r   c                 b    t                              t          d                    | |          S )Nz==r   r   s     r   __eq__zTensor.__eq__  r   r   c                 b    t                              t          d                    | |          S )Nz!=r   r   s     r   __ne__zTensor.__ne__  r   r   N)#r   r   r   r   propertyr&   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  r  r  r  r  r  r3   r   r   r   r     s       < < <   X" " "- - -K K K"
 
 

 
 

 
 

 
 

 
 
: : :: : :3 3 3: : :: : :: : :: : :: : :: : :; ; ;; ; ;: : :: : :: : :: : :: : :; ; ;: : :; ; ;; ; ;; ; ; ; ;r   r   c                       e Zd Zd ZdS )Scalarc                 <    t                               | d           d S )Nr3   r   r   r   s    r   r   zScalar.__init__  s    b!!!!!r   Nr   r   r   r   r3   r   r   r  r    s#        " " " " "r   r  c                       e Zd Zd ZdS )TensorRequiringConversionc                 <    t                               | |           d S r   r  r   s     r   r   z"TensorRequiringConversion.__init__  s    e$$$$$r   Nr  r3   r   r   r  r    s#        % % % % %r   r  c                       e Zd Zd Zd ZdS )TensorFactoryc                     || _         d S r   params)r   r%  s     r   r   zTensorFactory.__init__  s    r   c                      t          d  j        D                       rn  fd|                                D             }t           |g|t	          |                    S )Nc              3   @   K   | ]}|                     d           V  dS )z**N)
startswith)r    params     r   r"   z)TensorFactory.__call__.<locals>.<genexpr>  s0      ??%u%%??????r   c                 .    i | ]\  }}|j         v ||S r3   r$  )r    kvr   s      r   
<dictcomp>z*TensorFactory.__call__.<locals>.<dictcomp>  s+    JJJtq!dk9I9Ia9I9I9Ir   r6   )r   r%  itemsr   r   )r   r   r7   s   `  r   __call__zTensorFactory.__call__  sh    ??4;????? 	KJJJJv||~~JJJFTve}}MMMMr   N)r   r   r   r   r/  r3   r   r   r"  r"    s7          N N N N Nr   r"  c           
          t          | t          t          t          t          j        t          j        t          j        t          f          S r   )	rn   ro   floatboolra   r{   floatingbool_r  xs    r   	is_scalarr7    '    a#udBJRXvVWWWr   c           
          t          | t          t          t          t          j        t          j        t          j        t          f          S r   )	rn   ro   r1  r2  ra   r{   r3  r4  r   r5  s    r   	is_tensorr:    r8  r   c                 $   t          | t          t          f          rUd | D             }t          |          dk    rt	          d          |                                }t          |           f|z   S t          |           rdS t	          d          )Nc                 ,    h | ]}t          |          S r3   )_get_list_shape)r    ys     r   r   z"_get_list_shape.<locals>.<setcomp>  s     333A_Q''333r   r   z)Failed to determine shape of input tensorr3   )rn   r'   r$   r9   r:   popr7  )r6  	subshapessubshapes      r   r=  r=    s    !eT]## 	F33333	y>>QHIII==??Ay8##	1 FrDEEEr   c                     t          | t          t          f          rt          |           S t	          |           rdS 	 t          d | j        D                       S #  Y d S xY w)Nr3   c              3   4   K   | ]}t          |          V  d S r   r   r   s     r   r"   zget_shape.<locals>.<genexpr>  s(      --SVV------r   )rn   r'   r$   r=  r7  r   r5  s    r   r   r     sm    !eT]## q!!!	1 r--QW------tts   A A!c                     t          |           r| S t          | t                    r | ||          S J t          |                        )N)r7   )r:  rn   r"  r   )r6  r   backendr7   s       r   call_factoryrF    sQ    || #	A}	%	% #qv&&&&"al""ur   )numpyra   r   	functoolsr   r   r   r   r  r  r"  r7  r:  r=  r   r   rF  r3   r   r   <module>rI     s                x& x& x& x& x& x& x& x&vJ; J; J; J; J;V J; J; J;Z" " " " "V " " "
% % % % % % % %
N N N N NF N N NX X XX X X
F 
F 
F   # # # # #r   