
    3je	                        S SK JrJrJr  S SKrS SKJr  SSKJrJ	r	  SSK
Jr  Sr " S S	\\R                  R                  5      r " S
 S\	\R                  R                  5      r " S S\\R                  R                  5      rg)    )DictOptionalcastN)apply_for_scriptable_torch   )RearrangeMixinReduceMixin)_EinmixMixinzAlex Rogozhnikovc                        \ rS rSrS rS rSrg)	Rearrange   c                 ^    U R                   UR                     n[        X!SU R                  S9$ )N	rearrangereduction_type	axes_dims)_multirecipendimr   _axes_lengthsselfinputrecipes      M/home/wildlama/miniconda3/lib/python3.13/site-packages/einops/layers/torch.pyforwardRearrange.forward   s,    ""5::.)&_c_q_qrr    c                     g N r   xs     r   _apply_recipeRearrange._apply_recipe       r   r    N__name__
__module____qualname____firstlineno__r   r#   __static_attributes__r    r   r   r   r      s    sr   r   c                        \ rS rSrS rS rSrg)Reduce   c                 r    U R                   UR                     n[        X!U R                  U R                  S9$ )Nr   )r   r   r   	reductionr   r   s      r   r   Reduce.forward   s0    ""5::.)&bfbtbtuur   c                     g r   r    r!   s     r   r#   Reduce._apply_recipe   r%   r   r    Nr&   r    r   r   r-   r-      s    vr   r-   c            	       R    \ rS rSrS rS\\   S\\   S\\   S\\   4S jrS r	S	r
g
)EinMix!   c                 :   [         R                  R                  [         R                  " U5      R	                  U* U5      SS9U l        UbI  [         R                  R                  [         R                  " U5      R	                  U* U5      SS9U l        g S U l        g )NT)requires_grad)torchnn	Parameterzerosuniform_weightbias)r   weight_shapeweight_bound
bias_shape
bias_bounds        r   _create_parametersEinMix._create_parameters"   s    hh((KK%..}lK[_ ) 
 !**J'00*jIY] + DI DIr   pre_reshape_patternpre_reshape_lengthspost_reshape_patternpost_reshape_lengthsc                     S U l         Ub  [        U40 [        [        U5      D6U l         S U l        Ub   [        U40 [        [        U5      D6U l        g g r   )pre_rearranger   r   dictpost_rearrange)r   rF   rG   rH   rI   s        r   _create_rearrange_layersEinMix._create_rearrange_layers-   s[     "*!*+>!b$tM`Ba!bD"+"+,@"eDOcDd"eD ,r   c                 
   U R                   b  U R                  U5      n[        R                  " U R                  XR                  5      nU R
                  b  X R
                  -  nU R                  b  U R                  U5      nU$ r   )rK   r9   einsumeinsum_patternr>   r?   rM   )r   r   results      r   r   EinMix.forward<   so    )&&u-Ed115++F99 iiF*((0Fr   )r?   rM   rK   r>   N)r'   r(   r)   r*   rD   r   strr   rN   r   r+   r    r   r   r5   r5   !   sL    	f%c]f &d^f 'sm	f
 'tnfr   r5   )typingr   r   r   r9   einops._torch_specificr    r   r	   _einmixr
   
__author__r:   Moduler   r-   r5   r    r   r   <module>r\      s^    ' '  = ) !
 [%((// #\588?? #r   