
    Pi_$                        d dl Z d dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZ e j                            d          Zd Z G d d          ZddZ G d	 d
ej                  Z G d dej                  Z G d dej                  ZdS )    N)partial)OptionalCallableAnyjaxc                     |t          | j                  v r5t          | j                  |         t          | j                  |         }n) || j        ||          x}t          | j                  |<   |S N)varsmodulerng)concretenameshapedtypeinittensors         c/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/nn/equinox.pycreate_or_retriever      so    tHO$$$$ho)>)>t)D)Pho&&t,/3tHL%/O/OOho&&t,M    c                       e Zd Z G d dej        j        j                  Z G d dej        j        j                  Z G d dej        j	                  Z
dS )ParamFactoryc                       e Zd Zd Zd ZdS )ParamFactory.Concretec                     || _         || _        || _        |t          |d          r|j        }nd}|| _        || _        d S )Nr   float32)r   r   r   hasattrr   r   )selfr   r   r   r   r   s         r   __init__zParamFactory.Concrete.__init__   sN     DKDIDI}67++ &"LEE%EDJDHHHr   c                 \    | t                               | j        | j        | j                  fS r	   )r   CacheKeyr   r   r   r   s    r   to_value_and_keyz&ParamFactory.Concrete.to_value_and_key%   s%    ..ty$)TZPPPPr   N)__name__
__module____qualname__r   r"    r   r   Concreter      s7        	 	 		Q 	Q 	Q 	Q 	Qr   r'   c                   &    e Zd Zd Zd Zd Zd ZdS )ParamFactory.CacheKeyc                 0    || _         || _        || _        d S r	   r   r   r   r   r   r   r   s       r   r   zParamFactory.CacheKey.__init__)       DIDIDJJJr   c                 D    t          | j        | j        | j        f          S r	   )hashr   r   r   r!   s    r   __hash__zParamFactory.CacheKey.__hash__.   s    DItz:;;;r   c                     t          |t          j                  o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r	   )
isinstancer   r    r   r   r   )r   others     r   __eq__zParamFactory.CacheKey.__eq__1   sL    5,"788 .I+.I+. J%+-	r   c                 `    t                               | j        | j        | j                  }||fS r	   )r   Tracerr   r   r   )r   backendvirtual_argxs       r   	to_tracerzParamFactory.CacheKey.to_tracer9   s(    ##DIty$*EEAa4Kr   N)r#   r$   r%   r   r0   r4   r:   r&   r   r   r    r)   (   sP        	 	 	
	< 	< 	<	 	 		 	 	 	 	r   r    c                       e Zd Zd Zd ZdS )ParamFactory.Tracerc                 0    || _         || _        || _        d S r	   r+   r,   s       r   r   zParamFactory.Tracer.__init__>   r-   r   c                    | j         | j         n|                    dd           }| j        | j        n|                    dd           }| j        | j        n|                    dd           }|t	          d          |t	          d          t          |t                    r|dk    s|dk    r&t          j        j	        
                    d	          }n|d
k    r't          j        j	                            d|          }n|dk    r't          j        j	                            d|          }n|dk    r9t          j        j	                            |d         |d         |d                   }nUt	          d| d          t          |t          t          f          r&t          j        j	                            ||          }t          j                            t$          | ||||gt          j                            |                    S )Nr   r   r   z/Must specify name for tensor factory eqx.Modulez/Must specify init for tensor factory eqx.Moduleget_at	rearrangeg{Gz?)stddevaddg        )r   multiplyg      ?dotin_axisout_axis
batch_axisz3Don't know which initializer to use for operation '')argsoutput)r   getr   r   
ValueErrorr2   strtjaxnninitializersnormalconstantlecun_normalintfloateinxtracerapplyr   Tensor)r   r   kwargsr   r   r   s         r   __call__zParamFactory.Tracer.__call__C   s   $(I$54996::fd;S;SD$(I$54996::fd;S;SD&*j&8DJJfjjRV>W>WE| !RSSS| !RSSSD#&& H8##t{':':7/66d6CCDDU]]7/88E8JJDDZ''7/88E8JJDDU]]7/<<y)6*+=vl?S DD %%b[_%b%b%bcccD3,// Hw+44T4GG;$$"D%5{))%00 %   r   N)r#   r$   r%   r   r[   r&   r   r   r6   r<   =   s2        	 	 	
	 	 	 	 	r   r6   N)r#   r$   r%   rV   rW   inputInputr'   r    TensorFactoryr6   r&   r   r   r   r      s        Q Q Q Q Q4;$* Q Q Q$    4;$-   *$ $ $ $ $* $ $ $ $ $r   r   c                 >    t                               | ||||          S )a  Create a tensor factory for Equinox parameters.

    Args:
        module: The module to create the parameter in. Must be an instance of ``eqx.Module``.
        name: Name of the parameter. If ``None``, uses a default name determined from the calling
            operation. Defaults to ``None``.
        init: Initializer for the parameter. If ``None``, uses a default init method determined
            from the calling operation. Defaults to ``None``.
        dtype: Data type of the parameter. If ``None``, uses the ``dtype`` member of the calling
            module or ``float32`` if it does not exist. Defaults to ``None``.

    Returns:
        A tensor factory with the given default parameters.
    )r   r'   )r   r   r   r   r   s        r   paramr`   d   s        tUC@@@r   c                   *   e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   eej	                 ed<   eej	                 ed	<   ee
         ed
<   e
ed<   eed<   eed<   eed<   	 	 	 	 	 	 	 	 	 ddededededed	ed
ee
         de
dededefdZddZdS )Norma  Normalization layer.

    Args:
        stats: Einstein string determining the axes along which mean and variance are computed.
            Will be passed to ``einx.reduce``.
        params: Einstein string determining the axes along which learnable parameters are applied.
            Will be passed to ``einx.elementwise``. Defaults to ``"b... [c]"``.
        mean: Whether to apply mean normalization. Defaults to ``True``.
        var: Whether to apply variance normalization. Defaults to ``True``.
        scale: Whether to apply a learnable scale according to ``params``. Defaults to ``True``.
        bias: Whether to apply a learnable bias according to ``params``. Defaults to ``True``.
        epsilon: A small float added to the variance to avoid division by zero. Defaults
            to ``1e-5``.
        fastvar: Whether to use a fast variance computation. Defaults to ``True``.
        dtype: Data type of the weights. Defaults to ``"float32"``.
        decay_rate: Decay rate for exponential moving average of mean and variance. If ``None``,
            no moving average is applied. Defaults to ``None``.
        **kwargs: Additional parameters that specify values for single axes, e.g. ``a=4``.
    statsparamsmeanvar	use_scaleuse_biasscalebias
decay_rateepsilonfastvarr   rZ   b... [c]TNh㈵>r   c                     |t          d          || _        || _        || _        || _        || _        || _        d | _        d | _        || _	        || _
        |	| _        |
| _        || _        d S )Nz6Stateful layers are currently not supported in Equinox)rL   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   r   rZ   )r   rc   rd   re   rf   ri   rj   rk   rl   rm   r   rZ   s               r   r   zNorm.__init__   sx     !UVVV
	
	$
r   c                     t          j        j        || j        | j        f| j        | j        | j        rt          | d|          nd | j	        rt          | d|          nd | j
        | j        d| j        \  }}}|S )Nri   r   r   rj   )re   rf   ri   rj   rl   rm   )rV   rO   normrc   rd   re   rf   rg   r`   rh   rl   rm   rZ   )r   r9   r   _mean_vars        r   r[   zNorm.__call__   s    JK
 8<P%74444D6:mMt&c2222LL
 
 k
 
5$ r   )	rn   TTTTNro   Tr   r	   )r#   r$   r%   __doc__rM   __annotations__boolr   r   ArrayrU   dictr   r   r[   r&   r   r   rb   rb   v   sl         ( JJJKKK
JJJ	IIIOOONNNCI
39
NNNMMMJJJLLL
 !&*   	
    UO       <     r   rb   c            	           e Zd ZU dZeed<   ej        ed<   eej                 ed<   e	ed<   e
ed<   ddede	d	edefd
ZddZdS )Lineara  Linear layer.

    Args:
        expr: Einstein string determining the axes along which the weight matrix is multiplied.
            Will be passed to ``einx.dot``.
        bias: Whether to apply a learnable bias. Defaults to ``True``.
        dtype: Data type of the weights. Defaults to ``"float32"``.
        **kwargs: Additional parameters that specify values for single axes, e.g. ``a=4``.
    exprweightrj   rh   rZ   Tr   r   c                 L    || _         || _        d | _        d | _        || _        d S r	   )r}   rh   r~   rj   rZ   )r   r}   rj   r   rZ   s        r   r   zLinear.__init__   s)    		r   Nc           	          t          j        j        || j        f| j        t          | d|          nd t          | d|          d| j        S )Nrj   rr   r~   )rj   r~   )rV   rO   linearr}   rh   r`   rZ   r   r9   r   s      r   r[   zLinear.__call__   si    w~I
 7;m6Ot&c2222UYH#666	
 

 k
 
 	
r   )Tr   r	   )r#   r$   r%   rv   rM   rw   r   ry   r   rx   rz   r   r   r[   r&   r   r   r|   r|      s           IIII
39
NNNLLL S  C WZ    
 
 
 
 
 
r   r|   c            	       \    e Zd ZU dZeed<   eed<   eed<   eed<   d
dededede	fdZ
d Zd	S )Dropouta  Dropout layer.

    Args:
        expr: Einstein string determining the axes along which dropout is applied. Will be
            passed to ``einx.elementwise``.
        drop_rate: Drop rate.
        inference: Whether the layer is used in inference mode (i.e. not apply dropout). Defaults
            to ``False``.
        **kwargs: Additional parameters that specify values for single axes, e.g. ``a=4``.
    r}   	drop_raterZ   	inferenceFc                 >    || _         || _        || _        || _        d S r	   )r}   r   rZ   r   )r   r}   r   r   rZ   s        r   r   zDropout.__init__   s"    	""r   c                 h    | j         s*t          j        j        || j        f| j        |d| j        S |S )N)r   r   )r   rV   rO   dropoutr}   r   rZ   r   s      r   r[   zDropout.__call__   sQ    ~ 		7?	 .	 
 +   Hr   N)F)r#   r$   r%   rv   rM   rw   rU   rz   rx   r   r   r[   r&   r   r   r   r      s         	 	 IIILLLOOO# #S #U #t #WZ # # # #
 
 
 
 
r   r   )NNNN)rV   r   equinoxeqx	functoolsr   	jax.numpynumpyjnptypingr   r   r   rW   import_rN   r   r   r`   Modulerb   r|   r   r&   r   r   <module>r      sl    



                 * * * * * * * * * * {5!!  L L L L L L L L^A A A A$N N N N N3: N N Nb
 
 
 
 
SZ 
 
 
D! ! ! ! !cj ! ! ! ! !r   