
    !Sh	                         d dl mZ d dlmZmZmZ d dl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j                  Z G d
 dej                  Z G d dej        e          ZdS )    )field)OptionalDictcastN   )RearrangeMixinReduceMixin)_EinmixMixinzAlex Rogozhnikovc                   T    e Zd ZU eed<   eed<    ed           Zeed<   d Zd Z	dS )	Reducepattern	reductionc                      i S N r       X/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/einops/layers/flax.py<lambda>zReduce.<lambda>        r   default_factorysizesc                 J    t          | j        | j        fi | j        | _        d S r   )r	   r   r   r   reducerselfs    r   setupzReduce.setup   s%    "4<NN4:NNr   c                 6    | j                             |          S r   )r   _apply_reciper   inputs     r   __call__zReduce.__call__   s    |))%000r   N
__name__
__module____qualname__str__annotations__r   r   dictr   r"   r   r   r   r   r      sh         LLLNNN%

333E4333O O O1 1 1 1 1r   r   c                   J    e Zd ZU eed<    ed           Zeed<   d Zd Z	dS )	Rearranger   c                      i S r   r   r   r   r   r   zRearrange.<lambda>   r   r   r   r   c                 >    t          | j        fi | j        | _        d S r   )r   r   r   
rearrangerr   s    r   r   zRearrange.setup   s!    (DDDDr   c                 6    | j                             |          S r   )r.   r   r    s     r   r"   zRearrange.__call__!   s    ,,U333r   Nr#   r   r   r   r+   r+      s_         LLL%

333E4333E E E4 4 4 4 4r   r+   c            	           e Zd ZU eed<   eed<   dZee         ed<    ed           Ze	ed<   d Z
d	 Zd
ee         dee         dee         dee         fdZd ZdS )EinMixr   weight_shapeN
bias_shapec                      i S r   r   r   r   r   r   zEinMix.<lambda>)   r   r   r   r   c                 `    |                      | j        | j        | j        | j                   d S )N)r   r2   r3   axes_lengths)initialize_einmixr   r2   r3   r   r   s    r   r   zEinMix.setup+   s>    L*	 	 	
 	
 	
 	
 	
r   c                    |                      dt          j        j                            |          |          | _        |@|                      dt          j        j                            |          |          | _        d S d | _        d S )Nweightbias)paramjaxnninitializersuniformr9   r:   )r   r2   weight_boundr3   
bias_bounds        r   _create_parameterszEinMix._create_parameters3   sm    jj36+>+F+F|+T+TVbcc!

636+>+F+Fz+R+RT^__DIIIDIIIr   pre_reshape_patternpre_reshape_lengthspost_reshape_patternpost_reshape_lengthsc                     d | _         |)t          |t          t          |                    | _         d | _        |+t          |t          t          |                    | _        d S d S )N)r   )pre_rearranger+   r   r)   post_rearrange)r   rC   rD   rE   rF   s        r   _create_rearrange_layerszEinMix._create_rearrange_layers;   sp     "*!*+>d4QdFeFe!f!f!fD"+"+,@TSgHhHh"i"i"iD ,+r   c                     | j         |                      |          }t          j        | j        || j                  }| j        
|| j        z  }| j        |                     |          }|S r   )rH   jnpeinsumeinsum_patternr9   r:   rI   )r   r!   results      r   r"   zEinMix.__call__J   sk    )&&u--ED/DD9 diF*((00Fr   )r$   r%   r&   r'   r(   r3   r   r   r   r)   r   rB   r   rJ   r"   r   r   r   r1   r1   %   s         LLL $J$$$%

333E4333
 
 
  j%c]j &d^j 'sm	j
 'tnj j j j    r   r1   )dataclassesr   typingr   r   r   
flax.linenlinenr=   r<   	jax.numpynumpyrL    r   r	   _einmixr
   
__author__Moduler   r+   r1   r   r   r   <module>rZ      s!         ' ' ' ' ' ' ' ' ' '       



       ) ) ) ) ) ) ) ) ! ! ! ! ! !
	1 	1 	1 	1 	1RY 	1 	1 	14 4 4 4 4	 4 4 4- - - - -RY - - - - -r   