ó
    £3jy  ã                   ód   • S r SSKJrJr  SSKJr  SSKJrJrJ	r	J
r
   " S S5      r " S S5      rg	)
zAlex Rogozhnikové    )ÚAnyÚDict)ÚEinopsError)ÚTransformRecipeÚ_apply_recipeÚ_prepare_recipes_for_all_dimsÚget_backendc                   ót   ^ • \ rS rSrSrS\S\SS4U 4S jjrS\4S jrS\	\
\4   4S	 jrS
 rS rS rSrU =r$ )ÚRearrangeMixiné	   zÛ
Rearrange layer behaves identically to einops.rearrange operation.

:param pattern: str, rearrangement pattern
:param axes_lengths: any additional specification of dimensions

See einops.rearrange for source_examples.
ÚpatternÚaxes_lengthsÚreturnNc                 ó´   >• [         TU ]  5         Xl        X l        U R	                  5       U l        [        U R                  R                  5       5      U l        g ©N)	ÚsuperÚ__init__r   r   ÚmultirecipeÚ_multirecipeÚtupleÚitemsÚ_axes_lengths)Úselfr   r   Ú	__class__s      €ÚP/home/wildlama/miniconda3/lib/python3.13/site-packages/einops/layers/__init__.pyr   ÚRearrangeMixin.__init__   sF   ø€ Ü‰ÑÔØŒØ(Ôà ×,Ñ,Ó.ˆÔÜ" 4×#4Ñ#4×#:Ñ#:Ó#<Ó=ˆÕó    c                 óÀ   • [        U R                  5      nU R                  R                  5        H  u  p#USU SU 3-  nM     U R                  R
                   SU S3$ ©Nz, Ú=Ú(Ú))Úreprr   r   r   r   Ú__name__©r   ÚparamsÚaxisÚlengths       r   Ú__repr__ÚRearrangeMixin.__repr__   s`   € Üd—l‘lÓ#ˆØ ×-Ñ-×3Ñ3Ö5‰LˆDØ˜˜4˜&  & Ð*Ñ*ŠFñ 6à—.‘.×)Ñ)Ð*¨!¨F¨8°1Ð5Ð5r   c                 óž   •  [        U R                  S[        U R                  5      S9$ ! [         a  n[	        SU < SU 35      S eS nAff = f)NÚ	rearrange©Ú	operationÚ
axes_namesú Error while preparing ú
 )r   r   r   r   r   ©r   Úes     r   r   ÚRearrangeMixin.multirecipe!   sZ   € ð	RÜ0Ø—‘¨ÄÀd×FWÑFWÓ@Xñð øô ó 	RÜÐ 7¸±x¸sÀ1À#ÐFÓGÈTÐQûð	Rús   ‚'* ª
A´AÁAc                 ó†   • [        U5      n[        UU R                  [        UR                  5         USU R
                  S9$ )Nr,   ©ÚbackendÚrecipeÚtensorÚreduction_typer   )r	   r   r   ÚlenÚshaper   ©r   Úxr7   s      r   r   ÚRearrangeMixin._apply_recipe)   s@   € Ü˜a“.ˆÜØØ×$Ñ$¤S¨¯©£\Ñ2ØØ&Ø×+Ñ+ñ
ð 	
r   c                 ó4   • U R                   U R                  S.$ )N©r   r   rA   ©r   s    r   Ú__getstate__ÚRearrangeMixin.__getstate__3   s   € ØŸ<™<¸×9JÑ9JÑKÐKr   c                 ó8   • U R                   " SSUS   0US   D6  g )Nr   r   © ©r   ©r   Ústates     r   Ú__setstate__ÚRearrangeMixin.__setstate__6   s    € ØŠÑH˜e IÑ.ÐH°%¸Ñ2GÓHr   )r   r   r   r   ©r$   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústrr   r   r)   r   Úintr   r   r   rC   rJ   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r   	   s]   ø† ñð> ð >°Sð >¸T÷ >ð6˜#ô 6ðR˜T # Ð"6Ñ7ô Rò
òL÷Ið Ir   r   c                   ól   ^ • \ rS rSrSrS\S\S\4U 4S jjrS rS\	\
\4   4S	 jrS
 rS rS rSrU =r$ )ÚReduceMixiné:   a6  
Reduce layer behaves identically to einops.reduce operation.

:param pattern: str, rearrangement pattern
:param reduction: one of available reductions ('min', 'max', 'sum', 'mean', 'prod'), case-sensitive
:param axes_lengths: any additional specification of dimensions

See einops.reduce for source_examples.
r   Ú	reductionr   c                 óÀ   >• [         TU ]  5         Xl        X l        X0l        U R                  5       U l        [        U R                  R                  5       5      U l	        g r   )
r   r   r   rY   r   r   r   r   r   r   )r   r   rY   r   r   s       €r   r   ÚReduceMixin.__init__E   sK   ø€ Ü‰ÑÔØŒØ"ŒØ(ÔØ ×,Ñ,Ó.ˆÔÜ" 4×#4Ñ#4×#:Ñ#:Ó#<Ó=ˆÕr   c                 óÐ   • U R                   < SU R                  < 3nU R                  R                  5        H  u  p#USU SU 3-  nM     U R                  R
                   SU S3$ r   )r   rY   r   r   r   r$   r%   s       r   r)   ÚReduceMixin.__repr__M   sl   € Ø—L‘LÑ# 2 d§n¡nÑ%7Ð8ˆØ ×-Ñ-×3Ñ3Ö5‰LˆDØ˜˜4˜&  & Ð*Ñ*ŠFñ 6à—.‘.×)Ñ)Ð*¨!¨F¨8°1Ð5Ð5r   r   c                 ó²   •  [        U R                  U R                  [        U R                  5      S9$ ! [
         a  n[        SU < SU 35      S eS nAff = f)Nr-   r0   r1   )r   r   rY   r   r   r   r2   s     r   r   ÚReduceMixin.multirecipeS   s^   € ð	RÜ0Ø—‘¨¯©Ä5È×IZÑIZÓC[ñð øô ó 	RÜÐ 7¸±x¸sÀ1À#ÐFÓGÈTÐQûð	Rús   ‚14 ´
A¾AÁAc                 óš   • [        U5      n[        UU R                  [        UR                  5         UU R
                  U R                  S9$ )Nr6   )r	   r   r   r;   r<   rY   r   r=   s      r   r   ÚReduceMixin._apply_recipe[   sD   € Ü˜a“.ˆÜØØ×$Ñ$¤S¨¯©£\Ñ2ØØŸ>™>Ø×+Ñ+ñ
ð 	
r   c                 óJ   • U R                   U R                  U R                  S.$ )N©r   rY   r   rc   rB   s    r   rC   ÚReduceMixin.__getstate__e   s   € ØŸ<™<°d·n±nÐVZ×VgÑVgÑhÐhr   c                 ó@   • U R                   " SUS   US   S.US   D6  g )Nr   rY   )r   rY   r   rF   rG   rH   s     r   rJ   ÚReduceMixin.__setstate__h   s)   € ØŠÐf˜e IÑ.¸%ÀÑ:LÑfÐPUÐVdÑPeÓfr   )r   r   r   r   rY   rL   rU   s   @r   rW   rW   :   sV   ø† ñð> ð >°ð >ÀS÷ >ò6ðR˜T # Ð"6Ñ7ô Rò
òi÷gð gr   rW   N)Ú
__author__Útypingr   r   Úeinopsr   Úeinops.einopsr   r   r   r	   r   rW   rF   r   r   Ú<module>rk      s/   ðØ€
ç å ß dÓ d÷.Iñ .I÷b/gò /gr   