
    Pit                         d dl Z d dlZd dlZd dlZd dlmZ d Zd Z ej	                    Z
d Zd Z G d d          Z G d	 d
          ZdS )    N)opc                 6     t           j         fd            }|S )Nc                  J    | d         }| dd          D ]} ||          }|S )Nr       )argsxy	binary_ops      e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/backend/base.pynary_opz+associative_binary_to_nary.<locals>.nary_op	   s9    Gabb 	  	 A	!QAA    )einxtrace)r   r   s   ` r   associative_binary_to_naryr      s/    	Z    Z Nr   c                 $    t          t          t          f          rt          t          t          f          st          d          d  fd}ddt	                     v r j        nt                      d|_        d d d	 |S )
Nz8in_axes and out_axes must be tuples or lists of integersc                 8     t          j        fd          |  S )Nc                 2    |                      |          S Naxis)stack)backendxsr   s     r   <lambda>z-vmap_forloop.<locals>.stack.<locals>.<lambda>   s    W]]2D]-I-I r   )r   jit)r   r   s    `r   r   zvmap_forloop.<locals>.stack   s$    JtxIIIIJJBOOr   c            	         t          |           t                    k    r/t          dt                     dt          |                      d t          |           D             }t          |          dk    rt          d|           |                                }g gt          	          z  }t	          |          D ] fdt          |           D              }t          |          t          	          k    r/t          dt          	           dt          |                     t          ||          D ]\  }}|                    |           t          
fdt          	|          D                       }|S )	Nz	Expected z arguments, got c                 2    h | ]\  }}||j         |         S Nshape).0argr   s      r   	<setcomp>z.vmap_forloop.<locals>.inner.<locals>.<setcomp>   s'    YYYYS$HX4HXHXHXr   r   z>Expected all arguments to have same size along vmap axis, got c                 X    g | ]&\  }}||t          d           f|z  fz            n|'S r   )slice)r"   r#   r   is      r   
<listcomp>z/vmap_forloop.<locals>.inner.<locals>.<listcomp>%   sP       C 6:5EU4[[NT)QD0113  r   z& arguments from vmapped function, got c              3   8   K   | ]\  }} ||           V  dS )r   Nr   )r"   out_axisxs_stackr   s      r   	<genexpr>z.vmap_forloop.<locals>.inner.<locals>.<genexpr>/   sG       
 
/AxEE(***
 
 
 
 
 
r   )len
ValueErrorzippoprangeappendtuple)r   value	xs_stacksr   r+   r	   r'   in_axesr   out_axesr   s         @r   innerzvmap_forloop.<locals>.inner   s   t99G$$RWRRs4yyRRSSSYY#dG2D2DYYYu::??XQVXX   		D3x==(	u 
	# 
	#A    !$T7!3!3   B 2ww#h--'' ^H^^UXY[U\U\^^    #9b11 # #!""""# 
 
 
 
EHS\E]E]
 
 
 
 
 	r   zvmap(__name__z, zin_axes=z, out_axes=))
isinstancer3   listr.   dirr9   str)r   r6   r7   r   r8   r   s   ```  @r   vmap_forloopr?      s    gt}-- UZ5RV-5X5X USTTTP P P       4 SJ#b'',A,AR[[s2wwRRREN.w..8....Lr   c                  \    t          t          d          sg t          _        t          j        S )Nbackend_stack)hasattr_thread_localrA   r   r   r   _get_backend_stackrD   =   s%    =/22 )&(#&&r   c                  l    t          t                                dk    rt                      d         S d S )Nr   )r-   rD   r   r   r   get_defaultrG   C   s2    
  1$$!##B''tr   c                   (   e Zd ZdZg Zd Zd Zed             Ze	e
j        dd                        Ze	e
j        dd                        Ze	e
j        d	                         Ze	e
j        dd
                        Ze	e
j        dd                        Ze	e
j        dd                        Ze	e
j        dd                        Ze	e
j        dd                        Ze	e
j        dd                        Ze	e
j        dd                        Ze	e
j        d                         Ze	e
j        d                         Ze	e
j        d                         Ze	e
j        d                         Z ej         e
j        d                     ZdS )BackendNc                 H    t                                          |            | S r   )rD   r2   )r   s    r   	__enter__zBackend.__enter__N   s!    ##G,,,r   c                 v    t                      d         | u sJ t                                                       d S NrF   )rD   r0   )r   r   s     r   __exit__zBackend.__exit__R   s<    !##B'72222  """""r   c                     | S r   r   )fs    r   _decorate_construct_graphz!Backend._decorate_construct_graphV   s    r   Fc                 0      fdfd|D             S )Nc                     t          | t          j        j                  s!r:t          j                            |           r                    | | j                  } | S r   )r;   r   tracerTensorRequiringConversion	is_scalar	to_tensorr!   )tensorr   convert_scalarss    r   rW   z(Backend.all_to_tensor.<locals>.to_tensor]   s[    &$+"GHH AA$(K$9$9&$A$AA !**66<@@Mr   c                 &    g | ]} |          S r   r   )r"   rX   rW   s     r   r(   z)Backend.all_to_tensor.<locals>.<listcomp>d   s#    888f		&!!888r   r   )r   tensorsrY   rW   s   ` `@r   all_to_tensorzBackend.all_to_tensorZ   s?    	 	 	 	 	 	 98888888r   r   c                 v    t          d           f|z  dz   |                     fd|D             |          S )Nr   c                      g | ]
}|         S r   r   )r"   rX   ss     r   r(   z!Backend.stack.<locals>.<listcomp>j   s    #D#D#D&F1I#D#D#Dr   r   )r&   concatenate)r   r[   r   r_   s      @r   r   zBackend.stackf   sJ     4[[NT!G+""#D#D#D#DG#D#D#D4"PPPr   c           	      ~    |                      ||                     |                     ||          |                    S r   )subtractmultiplyfloor_divide)r   r	   r
   s      r   modzBackend.modl   s;     7#3#3G4H4HA4N4NPQ#R#RSSSr   c           	         t          t                    rf|                     |d          }|                     |          }|                     |t          fdt          |j                  D                                 }|                     | 	                    | 
                    ||z
            d                    |z   S )NTr   keepdimsc              3   *   K   | ]\  }}|v	|V  d S r   r   )r"   r'   r_   r   s      r   r,   z$Backend.logsumexp.<locals>.<genexpr>z   s+      QQ11D==!====QQr   F)r;   intmaxstop_gradientreshaper3   	enumerater!   logsumexp)r   r	   r   x_max_keepdimsx_max_dropdimss     `  r   	logsumexpzBackend.logsumexpq   s     dC   	7D QTDAA ..~>> QQQQ	.*> ? ?QQQQQ
 

 KKGKKN0B$C$C$Y^__``	
r   c                 X    |                      |                     |||                    S )Nrg   )sqrtvar)r   r	   r   rh   s       r   stdzBackend.std   s(     ||GKKxKHHIIIr   c                     |                      |          }|                     ||          }|                     |          }|S r   )ro   rp   rq   r   rX   r   s      r   prodzBackend.prod   s@     V$$V$//V$$r   c                 8    |                      ||          dk    S )Nr   r   )count_nonzerorz   s      r   anyzBackend.any   s"     $$V$$77!;;r   c                     |t          j        j                  }nCt          |t                    rj        |         }n t          j        fd|D                       }|                     |          |k    S )Nc                 *    g | ]}j         |         S r   r    )r"   r'   rX   s     r   r(   zBackend.all.<locals>.<listcomp>   s     ? ? ?Qa ? ? ?r   r   )npr{   r!   r;   rj   r}   )r   rX   r   	total_nums    `  r   allzBackend.all   s     <--IIc"" 	AT*II ? ? ? ?$ ? ? ?@@I$$V$$779DDr   c                     |                      ||d          }|                     |          }||z
  }|                     |          |                     |                     |          |d          z  S NTrg   )rk   rl   rq   rp   r   r	   r   x_maxs       r   softmaxzBackend.softmax   si     AD488%%e,,I{{1~~GKKNNPT U UUUr   c                     |                      ||d          }|                     |          }||z
  }||                     |                     |                     |          |d                    z
  S r   )rk   rl   ro   rp   rq   r   s       r   log_softmaxzBackend.log_softmax   sj     AD488%%e,,I7;;w{{7;;q>>t{TTUUUUr   c                     t          |t                    r|f}|D ]0}t          d           f|z  t          d d d          fz   }||         }1|S rM   )r;   rj   r&   )r   rX   r   cs       r   flipzBackend.flip   sb     dC   	7D 	 	Dt%tT2)>)>(@@AAYFFr   c                    t          |t                    r|f}t          |t                    r|f}t          |          t          |          k    r/t          dt          |           dt          |                     t	          ||          D ]h\  }}|                     |j        |                   }|                     ||z
  |j        |                   }t          d           f|z  |fz   }||         }i|S )NzGot z shifts, expected )	r;   rj   r-   r.   r/   aranger!   re   r&   )r   rX   shiftr   indicesr   s         r   rollzBackend.roll   s     dC   	7DeS!! 	HEt99E

""MCJJMM#d))MMNNNud++ 	 	KE4nnV\$%788Gkk'E/6<3EFFGt%
2AAYFFr   c                 2    d|                      |          z  S )Ng      ?)rv   )r   r	   s     r   rsqrtzBackend.rsqrt   s     W\\!__$$r   c                 x    t           j                            d          j                            | |||          S )Nr   )r6   r7   )r   rT   import_r   r?   )r   r   r6   r7   s       r   vmapzBackend.vmap   s>     {""6**2??R8 @ 
 
 	
r   c                     | S r   r   )r	   s    r   r   zBackend.<lambda>   s    q r   )F)r   r   )NF)r9   
__module____qualname__function_name
decoratorsrK   rN   staticmethodrQ   classmethodr   r   r\   r   re   rt   rx   r{   r~   r   r   r   r   r   r   r   r   
keep_shaperl   r   r   r   rI   rI   J   s       MJ  # # #   \ 	Z9 9 9 Z [9 	ZQ Q Q Z [Q 	ZT T Z [T 	Z
 
 
 Z [
 	ZJ J J Z [J 	Z   Z [ 	Z< < < Z [< 	ZE E E Z [E 	ZV V V Z [V 	ZV V V Z [V 	Z  Z [ 	Z  Z [ 	Z% % Z [% 	Z
 
 Z [

 "BM*$*[["9"9::MMMr   rI   c                       e Zd Zd Zd ZdS )ErrorBackendc                     || _         d S r   )message)selfr   s     r   __init__zErrorBackend.__init__   s    r   c                 *    t          | j                  r   )RuntimeErrorr   )r   names     r   __getattr__zErrorBackend.__getattr__   s    4<(((r   N)r9   r   r   r   r   r   r   r   r   r      s2          ) ) ) ) )r   r   )r   	functools	threadingnumpyr   einx.tracer.tensorr   r   r?   localrC   rD   rG   rI   r   r   r   r   <module>r      s                 ! ! ! ! ! !  $ $ $N  	!!' ' '  J; J; J; J; J; J; J; J;Z) ) ) ) ) ) ) ) ) )r   