
    'i	                         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y)    )field)DictOptionalcastN   )RearrangeMixinReduceMixin)_EinmixMixinzAlex Rogozhnikovc                   J    e Zd ZU eed<   eed<    ee      Zeed<   d Zd Z	y)Reducepattern	reductiondefault_factorysizesc                 d    t        | j                  | j                  fi | j                  | _        y N)r	   r   r   r   reducerselfs    L/var/www/stems/demucs_env/lib/python3.12/site-packages/einops/layers/flax.pysetupzReduce.setup   s!    "4<<N4::N    c                 8    | j                   j                  |      S r   )r   _apply_reciper   inputs     r   __call__zReduce.__call__   s    ||))%00r   N
__name__
__module____qualname__str__annotations__r   dictr   r   r    r   r   r   r      s&    LN-E4-O1r   r   c                   @    e Zd ZU eed<    ee      Zeed<   d Zd Z	y)	Rearranger   r   r   c                 N    t        | j                  fi | j                  | _        y r   )r   r   r   
rearrangerr   s    r   r   zRearrange.setup   s    (DDr   c                 8    | j                   j                  |      S r   )r*   r   r   s     r   r   zRearrange.__call__!   s    ,,U33r   Nr   r&   r   r   r(   r(      s!    L-E4-E4r   r(   c            	           e Zd ZU eed<   eed<   dZee   ed<    ee      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y)EinMixr   weight_shapeN
bias_shaper   r   c                 ~    | j                  | j                  | j                  | j                  | j                         y )N)r   r.   r/   axes_lengths)initialize_einmixr   r.   r/   r   r   s    r   r   zEinMix.setup+   s3    LL**	 	 	
r   c                    | j                  dt        j                  j                  j	                  |      |      | _        |@| j                  dt        j                  j                  j	                  |      |      | _        y d | _        y )Nweightbias)paramjaxnninitializersuniformr4   r5   )r   r.   weight_boundr/   
bias_bounds        r   _create_parameterszEinMix._create_parameters3   sc    jj366+>+>+F+F|+TVbc!

6366+>+>+F+Fz+RT^_DIDIr   pre_reshape_patternpre_reshape_lengthspost_reshape_patternpost_reshape_lengthsc                     d | _         | t        |t        t        |            | _         d | _        |!t        |t        t        |            | _        y y )N)r   )pre_rearranger(   r   r%   post_rearrange)r   r>   r?   r@   rA   s        r   _create_rearrange_layerszEinMix._create_rearrange_layers;   sU     "*!*+>d4QdFe!fD"+"+,@TSgHh"iD ,r   c                    | j                   | j                  |      }t        j                  | j                  || j                        }| j
                  || j
                  z  }| j                  | j                  |      }|S r   )rC   jnpeinsumeinsum_patternr4   r5   rD   )r   r   results      r   r   zEinMix.__call__J   ss    )&&u-ED//D99 diiF*((0Fr   )r    r!   r"   r#   r$   r/   r   r   r%   r   r   r=   r   rE   r   r&   r   r   r-   r-   %   sy    L $J$-E4-
j%c]j &d^j 'sm	j
 'tnjr   r-   )dataclassesr   typingr   r   r   
flax.linenlinenr8   r7   	jax.numpynumpyrG    r   r	   _einmixr
   
__author__Moduler   r(   r-   r&   r   r   <module>rU      sT     ' '  
  ) !
	1RYY 	14		 4-RYY -r   