
    !Sh                         d Z ddlmZmZmZ ddlZddlmZ ddl	m
Z
mZ ddlmZ dZ G d	 d
e
e          Z G d dee          Z G d dee          ZdS )aj  
Comment about tensorflow layers:
unfortunately instructions on creation of TF layers change constantly,
and changed way too many times at this point to remember what-compatible-where.

Layers in einops==0.7.0 (and several prior versions)
 are compatible with TF 2.13

Layers in einops==0.8.0 were re-implemented
 according to official instructions for TF 2.16

    )OptionalDictcastN)Layer   )RearrangeMixinReduceMixin)_EinmixMixinzAlex Rogozhnikovc                        e Zd Zd Zd Zd ZdS )	Rearrangec                     d S N selfinput_shapes     ^/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/einops/layers/tensorflow.pybuildzRearrange.build           c                 ,    |                      |          S r   _apply_reciper   inputss     r   callzRearrange.call       !!&)))r   c                 "    d| j         i| j        S )Npattern)r   axes_lengthsr   s    r   
get_configzRearrange.get_config"   s    4<=4+<==r   N__name__
__module____qualname__r   r   r"   r   r   r   r   r      sA          * * *> > > > >r   r   c                        e Zd Zd Zd Zd ZdS )Reducec                     d S r   r   r   s     r   r   zReduce.build'   r   r   c                 ,    |                      |          S r   r   r   s     r   r   zReduce.call*   r   r   c                 .    | j         | j        d| j        S )N)r   	reduction)r   r,   r    r!   s    r   r"   zReduce.get_config-   s    <dnZZHYZZr   Nr#   r   r   r   r(   r(   &   sF          * * *[ [ [ [ [r   r(   c            	       n    e Zd Zd Zdee         dee         dee         dee         fdZd Zd Z	d	 Z
d
S )EinMixc                     ||||g| _         d S r   )_params)r   weight_shapeweight_bound
bias_shape
bias_bounds        r   _create_parameterszEinMix._create_parameters2   s     %lJ
Kr   pre_reshape_patternpre_reshape_lengthspost_reshape_patternpost_reshape_lengthsc                     d | _         |%t          |fi t          t          |          | _         d | _        |'t          |fi t          t          |          | _        d S d S r   )pre_rearranger   r   dictpost_rearrange)r   r6   r7   r8   r9   s        r   _create_rearrange_layerszEinMix._create_rearrange_layers7   sv     "*!*+>!b!b$tM`BaBa!b!bD"+"+,@"e"eDOcDdDd"e"eD ,+r   c                     | j         \  }}}}|                     |t          j        | |          d          | _        |3|                     |t          j        | |          d          | _        d S d | _        d S )NT)shapeinitializer	trainable)r0   
add_weighttfrandom_uniform_initializerweightbias)r   r   r1   r2   r3   r4   s         r   r   zEinMix.buildF   s    ?C|<|Zoo5|m\RR & 
 
 ! 9:+zRR (  DIII DIIIr   c                     | j         |                      |          }t          j        | j        || j                  }| j        
|| j        z   }| j        |                     |          }|S r   )r;   rD   einsumeinsum_patternrF   rG   r=   )r   r   results      r   r   zEinMix.callW   sk    )''//F4.DD9 di'F*((00Fr   c                 :    | j         | j        | j        d| j        S )N)r   r1   r3   )r   r1   r3   r    r!   s    r   r"   zEinMix.get_configa   s.    | -/
 
 	
 	
r   N)r$   r%   r&   r5   r   strr   r>   r   r   r"   r   r   r   r.   r.   1   s        L L L
f%c]f &d^f 'sm	f
 'tnf f f f  "  
 
 
 
 
r   r.   )__doc__typingr   r   r   
tensorflowrD   tensorflow.keras.layersr    r   r	   _einmixr
   
__author__r   r(   r.   r   r   r   <module>rU      s    ( ' ' ' ' ' ' ' ' '     ) ) ) ) ) ) * ) ) ) ) ) ) ) ! ! ! ! ! !  
> > > > > > > >[ [ [ [ [[% [ [ [6
 6
 6
 6
 6
\5 6
 6
 6
 6
 6
r   