
    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 dd lmc m}  t	          j        dd          t	          j        dd          d  G fddt                    } |            S )Nr   
tensorflowtfztensorflow.experimental.numpytnpc                     t          |           t          |          k    r't          d t          | |          D                       sJ t          d t          | |          D                       S )Nc              3   @   K   | ]\  }}||k    p|d k    p|d k    V  dS r   N .0s1s2s      l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/backend/_tensorflow.py	<genexpr>z:create.<locals>._broadcast_static_shape.<locals>.<genexpr>   sM       2
 2
/5r2B"H*a*272
 2
 2
 2
 2
 2
    c              3   <   K   | ]\  }}t          ||          V  d S N)maxr   s      r   r   z:create.<locals>._broadcast_static_shape.<locals>.<genexpr>   s.      CCVRSR[[CCCCCCr   )lenallziptuple)shape1shape2s     r   _broadcast_static_shapez'create.<locals>._broadcast_static_shape   s    6{{c&kk))c 2
 2
9<VV9L9L2
 2
 2
 /
 /
)) 
 CCs66/B/BCCCCCCr   c                   >
   e Zd ZdZj        g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
j        j                  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                  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%        j-                  Z- e
j%        j.                  Z. e
j%        j/                  Z/ e
j%        j0        j1                  Z2 e
j        j3                  Z3 e
j        j4                  Z4 e
j        j5                  Z5 e
j        j0        j6                  Z6 e
j        j7                  Z7e8ej        fd                        Z9e8ej         fd                        Z:e8ej        fd                        Z;e8ej        fd                        Z<e8e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        fd                        ZA e
jB        j0        j5                  Z5 e
jB        j0        j6                  Z6 e
jB        j7                  Z7 e
jB        jC                  ZCefd            ZD G fdd          ZEdS )create.<locals>.tensorflowr   c                     t           j                            j        | gt           j                            |                    S Nargsoutput)einxtracerapplyconvert_to_tensorTensor)tensorshapettfs     r   	to_tensorz$create.<locals>.tensorflow.to_tensor   sB     ;$$%X{))%00 %   r   c                 J     t          j        j                  | g|R ddiS )Noptimizeoptimal)r   einsum)equationtensorsttnps     r   r3   z!create.<locals>.tensorflow.einsum&   s1     *29T[))(QWQQQyQQQr   c                 T   |                      |d           \  }}t          |t                    r%|d         j        }                    |d          }n|j        d d         }t
          j                            j        ||gt
          j        	                    |                    S )Nr   axisr$   )
_prepare_coordinates_and_update
isinstancer   r-   stackr'   r(   r)   	gather_ndr+   )backendr,   coordinates_	out_shaper.   s        r   get_atz!create.<locals>.tensorflow.get_atT   s     %DD[RVWWNK+u-- 3'N0	!ii"i=='-crc2	;$$k*{)))44 %   r   c                     |!t          |t          j        j                  sJ t          |t                    rmt          d |D                       sJ |d         j        |dd          D ]} |j                   fd|D             }                     |d          }nMt          |t          j        j                  sJ |t          d           f|j	        dz
  z  dz            }|d         }||j	        dz   |j	        k    sJ ||j        d d         n |j        |j        d d                    
                    ||j        dd          z             }| 
                    |          }||fS )	Nc              3   T   K   | ]#}t          |t          j        j                  V  $d S r   )r<   r'   r(   r+   )r   cs     r   r   zMcreate.<locals>.tensorflow._prepare_coordinates_and_update.<locals>.<genexpr>h   s1      RR:a);<<RRRRRRr   r   r   c                 <    g | ]}                     |          S r   )broadcast_to)r   rF   r?   r-   s     r   
<listcomp>zNcreate.<locals>.tensorflow._prepare_coordinates_and_update.<locals>.<listcomp>l   s)    SSS!w33Au==SSSr   r8   r9   r   ).N)r<   r'   r(   r+   r   r   r-   r=   slicendimrH   )r?   r@   updatesrF   r-   r   s   `   @r   r;   z:create.<locals>.tensorflow._prepare_coordinates_and_updatec   s    ?j$+:L&M&M??M+u-- 
5RRkRRRRRRRR#A,$QRR D DA33E17CCEESSSSS{SSS%mmKbmAA!+t{/ABBBBB)5;;.K<Lq<P*QT[*[\))4?glQ&6+:J&J&J&JJ #)#2#.//{?PQTRTQT?UVV!..{EKDUVXVYVYDZ<Z[[K"!..w>>''r   c                     |                      ||          \  }}t          j                            j        |||gt          j                            |j                            S r#   )r;   r'   r(   r)   tensor_scatter_nd_updater+   r-   r?   r,   r@   rL   r.   s       r   set_atz!create.<locals>.tensorflow.set_at   sd     $+#J#J;X_#`#` K;$$,k73{))&,77 %   r   c                     |                      ||          \  }}t          j                            j        |||gt          j                            |j                            S r#   )r;   r'   r(   r)   tensor_scatter_nd_addr+   r-   rO   s       r   add_atz!create.<locals>.tensorflow.add_at   d     $+#J#J;X_#`#` K;$$)k73{))&,77 %   r   c                     |                      ||          \  }}t          j                            j        |||gt          j                            |j                            S r#   )r;   r'   r(   r)   tensor_scatter_nd_subr+   r-   rO   s       r   subtract_atz&create.<locals>.tensorflow.subtract_at   rT   r   c                 z    t          |t                    r|g} t          j        j                  | |          S r   )r<   intr   
keep_shapereversexr:   r.   s     r   flipzcreate.<locals>.tensorflow.flip   s<     $$$ v-2=--a666r   c                     t          |t                    r|g}t          |t                    r|g} t          j        j                  | t          |          t          |                    S )Nr9   )r<   rY   r   rZ   rollr   )r]   r:   shiftr.   s      r   r`   zcreate.<locals>.tensorflow.roll   sf     $$$ v%%%  *2=**1eElltMMMMr   c                    t          |t          t          f          r;t          |          dk    r t	          dt          |           d          |d         } t          j        j        j                  | |          S )Nr   z:Tensorflow only supports softmax along a single axis, got  axesr   r9   )	r<   listr   r   
ValueErrorr   rZ   nnsoftmaxr\   s     r   rg   z"create.<locals>.tensorflow.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                  | |          S )Nr   z>Tensorflow only supports log_softmax along a single axis, got rc   r   r9   )	r<   rd   r   r   re   r   rZ   rf   log_softmaxr\   s     r   ri   z&create.<locals>.tensorflow.log_softmax   s     $u.. t99>>$0"4yy0 0 0   Aw42=!344QTBBBBr   c                 J     t           j         fd            }|S )Nc                  8   t          |           t                    k    r/t          dt                     dt          |                      d t          |           D             }t          |          dk    rt          d|           |                                }g }t          |           D ]\  }jdk    rcgfdt	          t          |j                            D             z   }t          j        j        	                    j	                  ||          }n|j
                 }|                    |           t          j        fdd	 |D             g
          }t          j                            j        ||gd 
D                       }t          |          t          	          k    r/t          dt          	           dt          |                     fdt          |	          D             }t          |          S )Nz	Expected z arguments, got c                 2    h | ]\  }}||j         |         S r   )r-   )r   argr:   s      r   	<setcomp>zAcreate.<locals>.tensorflow.vmap.<locals>.inner.<locals>.<setcomp>   s(    aaaYS$PTP`4P`P`P`r   r   z>Expected all arguments to have same size along vmap axis, got r   c                      g | ]
}|k    |S r   r   )r   ar:   s     r   rI   zBcreate.<locals>.tensorflow.vmap.<locals>.inner.<locals>.<listcomp>   s%    ,[,[,[1QRVZQZQZQQZQZQZr   c                      |  S r   r   )xsr   s    r   <lambda>z@create.<locals>.tensorflow.vmap.<locals>.inner.<locals>.<lambda>   s    rr2w r   c                 f    g | ].}t           j                            |j        d d                   /S r   )r'   r(   r+   r-   )r   r]   s     r   rI   zBcreate.<locals>.tensorflow.vmap.<locals>.inner.<locals>.<listcomp>   s3    .[.[.[STt{/A/A!'!""+/N/N.[.[.[r   )r%   c                 L    g | ]!}t           j                            |          "S r   )r'   r(   r+   )r   r-   s     r   rI   zBcreate.<locals>.tensorflow.vmap.<locals>.inner.<locals>.<listcomp>   s(    QQQ%DK..u55QQQr   r$   z& arguments from vmapped function, got c                     g | ]b\  }t          j        j                            j                  |fd t	          t          |j                            D                       cS )c                 :    g | ]}|k     r|d z   n	|k    rdn|S )r   r   r   )r   rp   out_axiss     r   rI   zMcreate.<locals>.tensorflow.vmap.<locals>.inner.<locals>.<listcomp>.<listcomp>   sF        ! '((llQUUa8mmQR  r   )r'   r(   r   	transposeranger   r-   )r   r]   rx   r6   s     @r   rI   zBcreate.<locals>.tensorflow.vmap.<locals>.inner.<locals>.<listcomp>   s     	 	 	 $8 KN,,T^<<   %*3qw<<%8%8   	 	 	r   )r   re   r   poprz   r-   r'   r(   r   ry   newaxisappendtracer)   vectorized_mapr   )r%   valuerr   rm   permop2r:   in_axesr   out_axesoutput_shapesr	   r.   r6   s         @r   innerz.create.<locals>.tensorflow.vmap.<locals>.inner   sJ   
 t99G,,$%ZW%Z%ZsSWyy%Z%Z[[[aa#dG:L:Laaau::??$`Y^``   		 !$T7!3!3 # #IC'199$(6,[,[,[,[c#)nn8M8M,[,[,[#[D"&+.":":4>"J"J3PT"U"UC!"*oIIcNNNNj&&&&.[.[XZ.[.[.[-\   [&&&rQQ=QQQ '   r77c(mm++$bCMMbbY\]_Y`Y`bb  
	 	 	 	 (+2x'8'8	 	 	 Ryy r   )r'   r~   )	r   r   r   input_shapesr   r   r	   r.   r6   s	   ``` ` r   vmapzcreate.<locals>.tensorflow.vmap   sR    Z3! 3! 3! 3! 3! 3! 3! 3! 3! 3! Z3!j Lr   c                   4    e Zd Zej         fd            ZdS )!create.<locals>.tensorflow.randomc           	          t           j                            j        j        |gddd| dt           j                            |                    |k    S )Ng        g      ?float32)minvalmaxvaldtypeseed)r%   kwargsr&   )r'   r(   r)   randomuniformr+   )rngpr-   r.   s      r   	bernoulliz+create.<locals>.tensorflow.random.bernoulli  s^     K%%
*#W*-yZ]^^#{11%88	 &   r   N)__name__
__module____qualname__r'   r~   r   )r.   s   r   r   r     s:        Z	 	 	 	 Z	 	 	r   r   N)Fr   r   r   namer+   tensor_typesstaticmethodr'   r~   r/   r   reshapery   rH   r3   aranger=   concatenateassociative_binary_to_naryelementwiseaddsubtractmultiplytrue_dividefloor_dividedividelogical_and
logical_orwhereless
less_equalgreatergreater_equalequal	not_equalmaximumminimumreducesummeanvarstdprodcount_nonzeroanyr   minr   mathreduce_logsumexp	logsumexplogexpsqrtrsqrtsquareclassmethodrC   r;   rP   rS   rW   r^   r`   rg   ri   rZ   stop_gradientr   r   )r   r	   r.   r6   s   r   r   r!      s1       	{			 	 	 	 
 
	 "*T\** BL00	&rt'899			R 	R 	R 	R 
 
	R 4;''$$$bnT%566(()A)ABB!2>$-00--nbnT].K.KLL$bnT%566%r~d&788,,00@P1Q1QRR//t0O0OPP
tz**r~di((#R^DO44
 "...&t'9::tz**"BN4>22	,,^R^DL-I-IJJ,,^R^DL-I-IJJbi!!ry##bi!!bi!!ry##!	$"455bi!!bi!!bi!!bi!!BIch788	bnTX&&bnTX&&r~di((sx~..,,			 	 	 	 
 
	 
		( 	( 	( 	( 
 
	(6 
		 	 	 	 
 
	 
		 	 	 	 
 
	 
		 	 	 	 
 
	 
		7 	7 	7 	7 
 
	7
 
		N 	N 	N 	N 
 
	N 
		? 	? 	? 	? 
 
	? 
		C 	C 	C 	C 
 
	C r}SX]++chn--t{++%c&788	7	 7	 7	 7	 7	 7	 
7	r	 	 	 	 	 	 	 	 	 	 	 	r   )r   tensorflow.experimental.numpyexperimentalnumpyr(   import_Backend)r
   r   r   r	   r.   r6   s     @@@@r   creater      s    /////////
.t
,
,C>95AADD D D| | | | | | | | | |W | | || :<<r   )
baseeinx.tracerr(   einx.tracer.tensorr   r'   types	functoolsr   r   r   r   r   <module>r      s}              ! ! ! ! ! !              K K K K Kr   