
    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 t          d j                            d          d d         D                       } | dk     r-d}j         d t	          d|            t          |          S t          j        dfd		            dfd
	d}t          j	        d          dd l d fd		
dt                    v rj        j        }nt          j	        dd          dd lm} dd lm} dt          |j                  v rd|j        _         G 	
f	ddt"                    }t          j                            |j                    |            S )Nr   c              3   4   K   | ]}t          |          V  d S N)int).0is     g/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/backend/_torch.py	<genexpr>zcreate.<locals>.<genexpr>   s(      FFqCFFFFFFFF    .   )r   r   z;einx with PyTorch requires PyTorch version >= 2, but found z*. einx functions are disabled for PyTorch.z	WARNING: c                    d | D ]I}t          |t          j        j                  r(t          |t          j        j                  s	|j         nJt          d          fdfdt          |           D             S )Nz>Failed to determine the PyTorch device placement of parametersc                     t           j                            |          rN| v rHt           j                            j        |gdit           j                            d                    S |S )Ndevice argskwargsoutput)einxtracer	is_scalarapplyasarrayTensor)r   xr   scalar_indicesttorchs     r   	to_tensorz9create.<locals>.move_scalars_to_device.<locals>.to_tensor   su    {$$Q'' ^-CqNGZGZ{((N$f-;--b11	 )    r   c                 .    g | ]\  }} ||          S r   r   )r   r   argr#   s      r   
<listcomp>z:create.<locals>.move_scalars_to_device.<locals>.<listcomp>'   s)    @@@fa		!S!!@@@r   )
isinstancer   r   r   Scalarr   
ValueError	enumerate)r   r!   r%   r   r#   r"   s    ` @@r   move_scalars_to_devicez&create.<locals>.move_scalars_to_device   s     	 	C#t{122 :c4;K];^;^ >]^^^		 		 		 		 		 		 		 A@@@	$@@@@r   c                 ~     t           j        t                                          fd                        }|S )Nc                  ,     |           }  | i |S r	   r   )r   r   r+   r   r!   s     r   wrapperzFcreate.<locals>.move_scalars_to_device_in_elementwise.<locals>.wrapper*   s,     *)$??D2t&v&&&r   )r   trace	functoolswraps)r   r!   r.   r+   s   `` r   %move_scalars_to_device_in_elementwisez5create.<locals>.move_scalars_to_device_in_elementwise)   sR    					' 	' 	' 	' 	' 	' 
	 
	' r    __einx_decorated_construct_graphtorchc                 .   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)r'   tuplelistnpndarraytolistr)   typer    s    r   to_tuplezcreate.<locals>.to_tuple7   s    a 	CH4   	C88O2:&& 	C$$$AtAwwAAABBBr   c                 \    t          | t                    rt                    |          S | S r	   )r'   strvars)r    torch_s    r   to_dtypezcreate.<locals>.to_dtypeC   s*    a 	<<?"Hr   compilerztorch._dynamo_dynamocapture_func_transformsTc                   N  	 e Zd ZdZj        gZdZ e          Z e          Z	ee
j        d                         Zee
j        d!fd	                        Zee
j        fd                        Zee
j        fd                        Zee
j        fd                        Zee
j         f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 ej        j                                      Z  e ej        j                                      Z  ej        j                   dg          Z  ej        e
j!        "                    d                    Z# ej        e
j!        "                    d                    Z$ ej        e
j!        "                    d                    Z% ej        e
j!        "                    d                    Z& ej        e
j!        "                    d                    Z' ej        e
j!        "                    d                    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+        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                  Z7 ej        j8                  Z8 ej        j9                  Z9 ej        j:                  Z: ej        j;                  Z;ee
j        d                         Z<ee
j        d                         Z=ee
j        d                         Z>ee
j        d                         Z?ee
j        fd                        Z@ee
j        fd                        ZAee
j        fd                        ZBee
j        fd                        ZCee
j        d                         ZDee
j        fd                        ZE G fdd          ZFd S )#create.<locals>.torchr4   
_call_implc                     J r	   r   )r%   shapes     r   r#   zcreate.<locals>.torch.to_tensorb   s	     5r   Fc                     d | D ]-}t          |          t          j        j        k    r	|j         n.                    d          fdfd| D             } | S )Ncpuc                 "   t          | t          j        j                  s!rlt          j                            |           rMt          j                            j        | gdit          j                            | j                            S | S )Nr   r   )	r'   r   r   TensorRequiringConversionr   r   r   r   rJ   )tensorconvert_scalarsr   r"   s    r   r#   z6create.<locals>.torch.all_to_tensor.<locals>.to_tensorr   s    fdk&KLL 
"#
"(,(=(=f(E(E
"  ;,,$X (&1#{11&,??	 -    "Mr   c                 &    g | ]} |          S r   r   )r   rO   r#   s     r   r&   z7create.<locals>.torch.all_to_tensor.<locals>.<listcomp>   s#    ???Vyy((???r   )r;   r   r   r   r   )tensorsrP   rO   r   r#   r"   s    ` @@r   all_to_tensorz#create.<locals>.torch.all_to_tensorg   s     F!  <<4;#555#]FE 6 ~u--" " " " " " " @???w???GNr   c                     t           j                            |           |k    r| S  t          j        j                  |  |                    S r	   )r   r   	get_shaper   reshaperO   rJ   r=   r"   s     r   rV   zcreate.<locals>.torch.reshape   sK     {$$V,,551rz&.11&((5//JJJr   c                 \     t          j        j                  |  |                    S r	   )r   	transposepermute)rO   permr=   r"   s     r   rY   zcreate.<locals>.torch.transpose   s+     02<//GGGr   c                 \     t          j        j                  |  |                    S r	   )r   broadcast_torW   s     r   r]   z"create.<locals>.torch.broadcast_to   s,     82?6#677PPPr   c                 Z     |          } t          j        j                  | g|R  S r	   )r   einsum)equationrR   r+   r"   s     r   r_   zcreate.<locals>.torch.einsum   s9     -,W55G+29V]++H?w????r   int32c                 ^     t          j        j                  |  |                    S )N)dtype)r   arange)nrc   rB   r"   s     r   rd   zcreate.<locals>.torch.arange   s.     ,29V]++AXXe__EEEEr   r   )r!   <z<=>z>=z==z!=c                    t          |t                    rWt          d |D                       s|d         j        dk    r| |         S | t          d |D                                d         S t          |t          t
          t          j        j        f          s|j        dk    r| |         S | |d                   d         S )Nc              3   n   K   | ]0}t          |t          t          t          j        j        f          V  1d S r	   r'   slicer
   r   r   r(   r   cs     r   r   z/create.<locals>.torch.get_at.<locals>.<genexpr>   8      ]]A
1uc4;3E&FGG]]]]]]r   r   c              3   &   K   | ]}|d          V  d S r	   r   rl   s     r   r   z/create.<locals>.torch.get_at.<locals>.<genexpr>   &      'E'EA$'E'E'E'E'E'Er   )	r'   r6   anyndimrk   r
   r   r   r(   )rO   coordinatess     r   get_atzcreate.<locals>.torch.get_at   s     +u-- 8]]Q\]]]]]J"1~*Q..!+.. "%'E'E'E'E'E"E"EFqII {UC9K,LMM8"'!++!+.. "+d"34Q77r   c                     t          |t                    rwt          d |D                       s|d         j        dk    r|                     ||          S t          d |D                       }|d          }|                     ||          S t          |t
          t          t          j        j	        f          s|j        dk    r|                     ||          S |d          }|d          }|                     ||          S )Nc              3   n   K   | ]0}t          |t          t          t          j        j        f          V  1d S r	   rj   rl   s     r   r   z/create.<locals>.torch.set_at.<locals>.<genexpr>   rn   r   r   c              3   &   K   | ]}|d          V  d S r	   r   rl   s     r   r   z/create.<locals>.torch.set_at.<locals>.<genexpr>   rp   r   )
r'   r6   rq   rr   __setitem__rk   r
   r   r   r(   rO   rs   updatess      r   set_atzcreate.<locals>.torch.set_at   s    +u-- D]]Q\]]]]]	D"1~*Q..!--k7CCC #('E'E'E'E'E"E"EK%dmG!--k7CCC {UC9K,LMM	D"'!++!--k7CCC #.d"3K%dmG!--k7CCCr   c                 0   t          |t                    rt          d |D                       s|d         j        dk    r<|                     ||                     |                              |                    S t          d |D                       }|d          }|                     ||                     |                              |                    S t          |t          t          t          j
        j        f          s|j        dk    r<|                     ||                     |                              |                    S |d          }|d          }|                     ||                     |                              |                    S )Nc              3   n   K   | ]0}t          |t          t          t          j        j        f          V  1d S r	   rj   rl   s     r   r   z/create.<locals>.torch.add_at.<locals>.<genexpr>  rn   r   r   c              3   &   K   | ]}|d          V  d S r	   r   rl   s     r   r   z/create.<locals>.torch.add_at.<locals>.<genexpr>  rp   r   )r'   r6   rq   rr   rx   __getitem____iadd__rk   r
   r   r   r(   ry   s      r   add_atzcreate.<locals>.torch.add_at      +u-- ]]Q\]]]]]"1~*Q..!--#V%7%7%D%D%M%Mg%V%V  
 #('E'E'E'E'E"E"EK%dmG!--#V%7%7%D%D%M%Mg%V%V  
 {UC9K,LMM"'!++!--#V%7%7%D%D%M%Mg%V%V  
 #.d"3K%dmG!--#V%7%7%D%D%M%Mg%V%V  r   c                 0   t          |t                    rt          d |D                       s|d         j        dk    r<|                     ||                     |                              |                    S t          d |D                       }|d          }|                     ||                     |                              |                    S t          |t          t          t          j
        j        f          s|j        dk    r<|                     ||                     |                              |                    S |d          }|d          }|                     ||                     |                              |                    S )Nc              3   n   K   | ]0}t          |t          t          t          j        j        f          V  1d S r	   rj   rl   s     r   r   z4create.<locals>.torch.subtract_at.<locals>.<genexpr>/  rn   r   r   c              3   &   K   | ]}|d          V  d S r	   r   rl   s     r   r   z4create.<locals>.torch.subtract_at.<locals>.<genexpr>7  rp   r   )r'   r6   rq   rr   rx   r   __isub__rk   r
   r   r   r(   ry   s      r   subtract_atz!create.<locals>.torch.subtract_at*  r   r   c                 z    t          |t                    r|g} t          j        j                  | |          S r	   )r'   r
   r   
keep_shapefliprO   axisr"   s     r   r   zcreate.<locals>.torch.flipN  s<     $$$ v-2=--fd;;;r   c                 |    t          |t                    r|g} t          j        j                  | ||          S r	   )r'   r
   r   r   roll)rO   shiftr   r"   s      r   r   zcreate.<locals>.torch.rollU  s>     $$$ v-2=--feTBBBr   c                     t          |t          t          f          r;t          |          dk    r t	          dt          |           d          |d         } t          j        j                  | |          S )Nr   z7PyTorch only supports softmax along a single axis, got  axesr   )r'   r7   r6   lenr)   r   r   softmaxr   s     r   r   zcreate.<locals>.torch.softmax\  s     $u.. t99>>$0"4yy0 0 0   Aw02=00>>>r   c                    t          |t          t          f          r;t          |          dk    r t	          dt          |           d          |d         } t          j        j        j        j	                  | |          S )Nr   z;PyTorch only supports log_softmax along a single axis, got r   r   )
r'   r7   r6   r   r)   r   r   nn
functionallog_softmaxr   s     r   r   z!create.<locals>.torch.log_softmaxh  s     $u.. t99>>$0"4yy0 0 0   AwB2=!5!ABB64PPPr   c                      t          d          )Nz6stop_gradient is currently not implemented for PyTorch)NotImplementedErrorr<   s    r   stop_gradientz#create.<locals>.torch.stop_gradientt  s     &&^___r   c           
         t           j                            j        | gt	          |t
                    rt          |          n|t	          |t
                    rt          |          n|ddt           j                            d |D                                 } t           j                            j        | gd          } | S )N)in_dimsout_dimsvmapc                 L    g | ]!}t           j                            |          "S r   )r   r   r   )r   rJ   s     r   r&   z.create.<locals>.torch.vmap.<locals>.<listcomp>  s(    QQQ%DK..u55QQQr   )r   )r   r   	signaturer   z>Workaround for https://github.com/pytorch/pytorch/issues/94674)r   comment)	r   r   r   r   r'   r7   r6   Functionallow_in_graph)r   in_axesout_axesinput_shapesoutput_shapes	tcompilerr"   s        r   r   zcreate.<locals>.torch.vmapy  s     ""T1;GT1J1JWuW~~~PW3=h3M3M [hS[  !{++QQ=QQQ ,   #  B ""(TX #  B
 Ir   c                   6    e Zd Zej         fd            ZdS )create.<locals>.torch.randomc                     t           j                            j                             |          |          gd| it           j                            |                    dk    S )N	generatorr   g      ?)r   r   r   	bernoullifullr   )rngprJ   r=   r"   s      r   r   z&create.<locals>.torch.random.bernoulli  sk     K%%($kk((5//1==> +S1#{11%88	 &   r   N)__name__
__module____qualname__r   r/   r   )r=   r"   s   r   randomr     s?        Z	 	 	 	 	 Z	 	 	r   r   N)F)ra   )Gr   r   r   namer   tensor_typesfunction_namestaticmethodr=   rB   r   r/   r#   rS   rV   rY   r]   r_   rd   r   stackconcatenateassociative_binary_to_naryelementwiseaddsubtractmultiplytrue_dividefloor_dividedividelogical_and
logical_orwherer   Operatorless
less_equalgreatergreater_equalequal	not_equalmaximumminimumreducesummeanvarstdprodcount_nonzerorq   allminmax	logsumexplogexpsqrtrsqrtsquarert   r{   r   r   r   r   r   r   r   r   r   )	r+   r2   r   rB   	to_dtype2r=   	to_tuple2rA   r"   s	   r   r4   rG   X   sw        	  <	**<	**			 	 
 
	 
		 	 	 	 	 
 
	4 
		K 	K 	K 	K 	K 
 
	K 
		H 	H 	H 	H 	H 
 
	H 
		Q 	Q 	Q 	Q 	Q 
 
	Q 
		@ 	@ 	@ 	@ 	@ 
 
	@ 
		F 	F 	F 	F 	F 	F 
 
	F &&$bnV%788((
)C)CDD!2>&/22--nbnV_.M.MNN$bnV%788%r~f&9::..;;&&~r~f6H'I'IJJ
 
 ;:&&~r~f6G'H'HII
 

 65BN6<((!
 
 
 r~dk2237788#R^DK$8$8$>$>??
 ".!5!5c!:!:;;&t{';';D'A'ABBt{33D99::"BN4;#7#7#=#=>>	77&&~r~fn'E'EFF
 
 87&&~r~fn'E'EFF
 
 bi
##ry%%bi
##bi
##ry%%!	&"677bi
##bi
##bi
##bi
##BIf.//	bnVZ((bnVZ((r~fk**v|,,..			8 	8 
 
	82 
		D 	D 
 
	D0 
	 	  	 
 
 	D 
	 	  	 
 
 	D 
		< 	< 	< 	< 
 
	<
 
		C 	C 	C 	C 
 
	C
 
		? 	? 	? 	? 
 
	? 
		Q 	Q 	Q 	Q 
 
	Q 
		` 	` 
 
	` 
		 	 	 	 	 
 
	(	 	 	 	 	 	 	 	 	 	 	 	 	r   r	   )r4   r6   __version__splitprintErrorBackendr   r/   r   import_dirrC   torch._dynamorD   r@   configrE   Backendjitdecorate_traced_functionsr   )versionmessage MARKER_DECORATED_CONSTRUCT_GRAPHrC   rD   r4   r+   r2   r   rB   r   r=   r   rA   r"   s         @@@@@@@@@r   creater      sI   FFF$6$<$<S$A$A"1"$EFFFFFGOIIII#'##$$$G$$$	ZA A A A A ZA,      (J$^G$$FC C C I     IS[[  O	?N?I>>	((((((###### D$8$88815.B B B B B B B B B B B B B B B B B BH
 	H&&x'>???577Nr   )
baseeinx.tracerr   einx.tracer.tensorr   r   typesr0   r   r   r   r   r   <module>r      s}              ! ! ! ! ! !              V V V V Vr   