
    Pi)                        d dl Z d dlZd dlZd dlZd dlmZmZmZ  e	d e j
                            d          dd         D                       Zedk     r ede j
                   ej                            d          Zd	 Z G d
 d          Z	 	 	 	 dde j        j        dee         dee         dee         def
dZd Z G d de j        j                  Z G d de          Z G d de          Z G d de          ZdS )    N)AnyCallableOptionalc              #   4   K   | ]}t          |          V  d S N)int).0is     a/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/nn/keras.py	<genexpr>r      s(      BBAQBBBBBB    .   )   r   z5einx.nn.keras requires Keras version >= 3, but found kerasc                     |t          |           v rt          |           |         }n,|                     |||||          x}t          |           |<   |S )N)shapedtypeinitializername	trainable)vars
add_weight)layerr   r   r   initr   tensors          r   create_or_retriever      sg    tE{{eT"%*%5%5 &6 &
 &
 	
eT" Mr   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    DJDIDI}5'** &!KEE%EDJ&DNNNr   c                 r    | j         t                              | j        | j        | j        | j                  fS r   )r   r   CacheKeyr   r   r   r   r%   s    r   to_value_and_keyz&ParamFactory.Concrete.to_value_and_key-   s4    :|44	49dj$.     r   N)__name__
__module____qualname__r&   r*    r   r   Concreter!      s2        	' 	' 	'	 	 	 	 	r   r/   c                   &    e Zd Zd Zd Zd Zd ZdS )ParamFactory.CacheKeyc                 >    || _         || _        || _        || _        d S r   r   r   r   r   r%   r   r   r   r   s        r   r&   zParamFactory.CacheKey.__init__3   "    DIDIDJ&DNNNr   c                 P    t          | j        | j        | j        | j        f          S r   )hashr   r   r   r   r)   s    r   __hash__zParamFactory.CacheKey.__hash__9   s!    DItz4>JKKKr   c                     t          |t          j                  o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )
isinstancer   r(   r   r   r   r   )r%   others     r   __eq__zParamFactory.CacheKey.__eq__<   s_    5,"788 6I+6I+6 J%+-6 Neo5r   c                 l    t                               | j        | j        | j        | j                  }||fS r   )r   Tracerr   r   r   r   )r%   backendvirtual_argxs       r   	to_tracerzParamFactory.CacheKey.to_tracerE   s,    ##DIty$*dnUUAa4Kr   N)r+   r,   r-   r&   r8   r<   rB   r.   r   r   r(   r1   2   sS        	' 	' 	'	L 	L 	L	 	 		 	 	 	 	r   r(   c                       e Zd Zd Zd ZdS )ParamFactory.Tracerc                 >    || _         || _        || _        || _        d S r   r3   r4   s        r   r&   zParamFactory.Tracer.__init__J   r5   r   c           	      H   | 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        	                    d	          }n|d
k    r t          j        
                    d          }n|dk    r t          j        
                    d          }n|dk    rbt          j        fd|d         D                       }t          j        d|z            dz  }t          j        	                    d|          }nNt	          d| d          t          |t          t          f          rt          j        
                    |          }t           j                            t&          | |||| j        gt           j                                                S )Nr   r   r   z7Must specify name for tensor factory keras.layers.Layerz7Must specify init for tensor factory keras.layers.Layerget_at	rearrangeg{Gz?)stddevaddg        multiplyg      ?dotc                      g | ]
}|         S r.   r.   )r	   r
   r   s     r   
<listcomp>z0ParamFactory.Tracer.__call__.<locals>.<listcomp>b   s    %J%J%J1eAh%J%J%Jr   in_axisg۶%?)meanrI   z3Don't know which initializer to use for operation '')argsoutput)r   getr   r   
ValueErrorr:   strtkerasinitializersTruncatedNormalConstantnpprodsqrtr   floateinxtracerapplyr   r   Tensor)r%   r   kwargsr   r   r   fan_instds    `      r   __call__zParamFactory.Tracer.__call__P   s	   $(I$54996::fd;S;SD$(I$54996::fd;S;SD&*j&8DJJfjjRV>W>WE| !Z[[[| !Z[[[D#&& :8##t{':':!.>>d>KKDDU]]!.77<<DDZ''!.77<<DDU]]W%J%J%J%Jy8I%J%J%JKKF'#,//2EEC!.>>CPS>TTDD$%b[_%b%b%bcccD3,// :*33D99;$$"D%dnE{))%00 %   r   N)r+   r,   r-   r&   rf   r.   r   r   r>   rD   I   s2        	' 	' 	'	 	 	 	 	r   r>   N)r+   r,   r-   r_   r`   inputInputr/   r(   TensorFactoryr>   r.   r   r   r   r      s            4;$*   (    4;$-   .% % % % %* % % % % %r   r   Tr   r   r   r   r   c                 >    t                               | ||||          S )a  Create a tensor factory for Keras parameters.

    Args:
        layer: The layer to create the parameter in. Must be an instance of ``keras.layers.Layer``.
        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``.
        trainable: Whether the parameter is trainable. Defaults to ``True``.

    Returns:
        A tensor factory with the given default parameters.
    )r   r/   )r   r   r   r   r   s        r   paramrk   q   s     ,   dE9EEEr   c                 ^    t          | t                    ot          d | D                       S )Nc              3   @   K   | ]}t          |t                    V  d S r   )r:   r   )r	   ys     r   r   zis_leaf.<locals>.<genexpr>   s,      'F'Fq
1c(:(:'F'F'F'F'F'Fr   )r:   tupleall)rA   s    r   is_leafrq      s.    aFC'F'FA'F'F'F$F$FFr   c                   $     e Zd Z fdZd Z xZS )Layerc                 :     t                      j        |i | d S r   )superr&   )r%   rR   rc   	__class__s      r   r&   zLayer.__init__   s%    $)&)))))r   c                     t           j                            d |t                    }dt	          j        | j                  j        v r|                     |d           d S |                     |           d S )Nc                 D    t           j                            | d          S )Nr#   r   )r   opszeros)r   s    r   <lambda>zLayer.build.<locals>.<lambda>   s    %)//%y/AA r   )rq   is_initializingT)r}   )r_   	tree_utiltree_maprq   inspect	signaturecall
parameters)r%   inputs_shapetracerss      r   buildzLayer.build   sz    .))AA<Y` * 
 
  1$) < < GGGIIgtI44444IIgr   )r+   r,   r-   r&   r   __classcell__rv   s   @r   rs   rs      sG        * * * * *      r   rs   c                   x     e Zd ZdZ	 	 	 	 	 	 	 	 	 ddeded	ed
ededededededee         def fdZ	ddZ
 xZ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``.
    b... [c]Th㈵>r#   NstatsparamsrP   varscalebiasepsilonfastvarr   
decay_raterc   c                     t                                          |	           || _        || _        || _        || _        || _        || _        || _        || _	        |
| _
        || _        d S Nry   )ru   r&   r   r   use_meanuse_var	use_scaleuse_biasr   r   r   rc   )r%   r   r   rP   r   r   r   r   r   r   r   rc   rv   s               r   r&   zNorm.__init__   sj     	u%%%
$r   Fc                 V   | j         d uo| p|}t          j        j        || j        | j        f|r| j        rt          | dd          n| j        |r| j        rt          | dd          n| j        | j	        rt          | dd          nd | j
        rt          | dd          nd | j        | j        d| j        | j        ni \  }}}| j         d uo|o| }|r| j        rb| j                            t           j                            | j         | j        j        z  d	| j         z
  |z  z   | j        j                             | j        rb| j                            t           j                            | j         | j        j        z  d	| j         z
  |z  z   | j        j                             |S )
NrP   F)r   r   r   r   Tr   )rP   r   r   r   r   r      )r   r_   nnnormr   r   r   rk   r   r   r   r   r   rc   rP   assignr   rz   castvaluer   r   )r%   rA   trainingr}   use_emarP   r   
update_emas           r   r   z	Norm.call   s   /-Sx<3R?w|JK

 =t&E::::<d%8888?C~W%7d;;;;SW=A]Tt&D9999PTLL
 
 #k5t{{2
 
4" _D0UXUoBU
 	} 	  INN$)/9Q=PTX<XX	    | INN$(.8A<OSV;VV    r   )	r   TTTTr   Tr#   N)NF)r+   r,   r-   __doc__rV   boolr^   r   r   r&   r   r   r   s   @r   r   r      s         . !&*   	
       UO      4$ $ $ $ $ $ $ $r   r   c            	       <     e Zd ZdZd
dedededef fdZd	 Z xZ	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``.
    Tr#   exprr   r   rc   c                 v    t                                          |           || _        || _        || _        d S r   )ru   r&   r   r   rc   )r%   r   r   r   rc   rv   s        r   r&   zLinear.__init__   s7    u%%%	r   c                     t          j        j        || j        f| j        rt          | d          nd t          | d          d| j        S )Nr   )r   weight)r   r   )r_   r   linearr   r   rk   rc   )r%   rA   s     r   r   zLinear.call  sd    w~I
 .2]Dt&))))H---	
 

 k
 
 	
r   )Tr#   )
r+   r,   r-   r   rV   r   r   r&   r   r   r   s   @r   r   r      sx          S  C WZ      
 
 
 
 
 
 
r   r   c                   8     e Zd ZdZdededef fdZddZ xZ	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.
        **kwargs: Additional parameters that specify values for single axes, e.g. ``a=4``.
    r   	drop_raterc   c                 r    t                                                       || _        || _        || _        d S r   )ru   r&   r   r   rc   )r%   r   r   rc   rv   s       r   r&   zDropout.__init__  s2    	"r   Nc                 \    |r)t          j        j        || j        fd| j        i| j        S |S )Nr   )r_   r   dropoutr   r   rc   )r%   rA   r   s      r   r   zDropout.call   sL     	7?	  . +	   Hr   r   )
r+   r,   r-   r   rV   r^   r   r&   r   r   r   s   @r   r   r     sp         S U c      	 	 	 	 	 	 	 	r   r   )NNNT)r   r_   r   numpyr[   typingr   r   r   ro   __version__split_versionImportErrorr`   import_rW   r   r   layersrs   rV   r   rk   rq   r   r   r   r.   r   r   <module>r      sB          * * * * * * * * * *5BB!2!8!8!=!=bqb!ABBBBBf
+aeN_aa
b
bb 
		W	%	%  Q Q Q Q Q Q Q Ql F F<F
3-F 3-F C=	F
 F F F F2G G G    EL   S S S S S5 S S Sl
 
 
 
 
U 
 
 
8    e     r   