Ë
    øÿæi•  ã                   ót   — U d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	 dZ
eed<    G d„ d«      Z G d„ d	«      Zy)
é    N)ÚListÚOptionalÚSetÚTupleÚUnion)ÚEinopsErroru   â€¦Ú	_ellipsisc                   ó"   — e Zd ZdZdefd„Zd„ Zy)ÚAnonymousAxiszHImportant thing: all instances of this class are not equal to each otherÚvaluec                 ó¦   — t        |«      | _        | j                  dk  r2| j                  dk(  rt        d«      ‚t        d| j                  › �«      ‚y )Né   zENo need to create anonymous axis of length 1. Report this as an issuez0Anonymous axis should have positive length, not )Úintr   r   )Úselfr   s     úc/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/einops/parsing.pyÚ__init__zAnonymousAxis.__init__   sO   € Ü˜“ZˆŒ
Ø�:‰:˜Š?Ø�z‰z˜QŠÜ!Ð"iÓjÐjä!Ð$TÐUY×U_ÑU_ÐT`Ð"aÓbÐbð	 ó    c                 ó2   — t        | j                  «      › d�S )Nz-axis)Ústrr   )r   s    r   Ú__repr__zAnonymousAxis.__repr__   s   € Ü�d—j‘j“/Ð" %Ð(Ð(r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   © r   r   r   r   
   s   „ ÙRðc˜có có)r   r   c            
       óˆ   — e Zd ZdZdddœdededefd„Zdefd	„Zdefd
„Z	e
ddededeeef   fd„«       Ze
dedefd„«       Zy)ÚParsedExpressionz¡
    non-mutable structure that contains information about one side of expression (e.g. 'b c (h w)')
    and keeps some information important for downstream
    F)Úallow_underscoreÚallow_duplicatesÚ
expressionr   r   c                ó¶  ‡ ‡‡‡— d‰ _         d ‰ _        t        «       ‰ _        d‰ _        g ‰ _        d|v rid|vrt        d«      ‚t        j                  |d«      dk7  st        j                  |d«      dk7  rt        d«      ‚|j                  dt        «      }d‰ _         d Šˆˆˆˆ fd	„}d }|D ]�  }|d
v rR|� ||«       d }|dk(  r‰�t        d«      ‚g ŠŒ(|dk(  sŒ.‰€t        d«      ‚‰ j
                  j                  ‰«       d ŠŒYt        j                  |«      s
|dt        fv r|€|}Œ}||z  }Œƒt        d|› d�«      ‚ ‰�t        d|› d�«      ‚|�	 ||«       y y )NFÚ.z...z6Expression may contain dots only inside ellipsis (...)r   é   zUExpression may contain dots only inside ellipsis (...); only one ellipsis for tensor Tc                 óÐ  •— | ‰j                   v r‰r| dk(  s‰st        d| › d�«      ‚| t        k(  re‰j                   j                  t        «       ‰€'‰j                  j                  t        «       d‰_        y ‰j                  t        «       d‰_        y t        j                  | «      }|r.t        | «      dk(  r ‰€‰j                  j                  g «       y 	 y ‰j                  | ‰¬«      \  }}|s|st        d| › d	|› �«      ‚|rt        | «      } ‰j                   j                  | «       |rd‰_        ‰€‰j                  j                  | g«       y ‰j                  | «       y )
NÚ_z2Indexing expression contains duplicate dimension "Ú"FTr   )r   zInvalid axis identifier: Ú
)Úidentifiersr   r	   ÚaddÚcompositionÚappendÚhas_ellipsis_parenthesizedr   Ú	isdecimalr   Úcheck_axis_name_return_reasonr   Úhas_non_unitary_anonymous_axes)ÚxÚ	is_numberÚis_axis_nameÚreasonr   r   Úbracket_groupr   s       €€€€r   Úadd_axis_namez0ParsedExpression.__init__.<locals>.add_axis_name3   sY  ø€ Ø�D×$Ñ$Ñ$Ù(¨Q°#ªXÑ?OÜ%Ð(ZÐ[\ÐZ]Ð]^Ð&_Ó`Ð`Ø”IŠ~Ø× Ñ ×$Ñ$¤YÔ/Ø Ð(Ø×$Ñ$×+Ñ+¬IÔ6Ø6;�DÕ3à!×(Ñ(¬Ô3Ø6:�DÕ3äŸM™M¨!Ó,�	Ù¤ Q£¨1¢à$Ð,Ø×(Ñ(×/Ñ/°Ô3ð ð ØØ'+×'IÑ'IÈ!Ð^nÐ'IÓ'oÑ$�˜fÙ!¡\Ü%Ð(AÀ!ÀÀBÀvÀhÐ&OÓPÐPÙÜ% aÓ(�AØ× Ñ ×$Ñ$ QÔ'ÙØ:>�DÔ7Ø Ð(Ø×$Ñ$×+Ñ+¨Q¨CÕ0à!×(Ñ(¨Õ+r   z() Ú(zDAxis composition is one-level (brackets inside brackets not allowed)Ú)zBrackets are not balancedr%   zUnknown character 'Ú'z'Imbalanced parentheses in expression: "r&   )Úhas_ellipsisr,   Úsetr(   r/   r*   r   r   ÚcountÚreplacer	   r+   Úisalnum)r   r    r   r   r5   Úcurrent_identifierÚcharr4   s   ` ``   @r   r   zParsedExpression.__init__   sš  û€ Ø"'ˆÔØ:>ˆÔ'Ü%(£UˆÔà49ˆÔ+à8:ˆÔØ�*ÑØ˜JÑ&Ü!Ð"ZÓ[Ð[Ü�y‰y˜ UÓ+¨qÒ0´C·I±I¸jÈ#Ó4NÐRSÒ4SÜ!Økóð ð $×+Ñ+¨E´9Ó=ˆJØ $ˆDÔà-1ˆ÷ 	,ðD "ÐÛˆDØ�u‰}Ø%Ð1Ù!Ð"4Ô5Ø%)Ð"Ø˜3’;Ø$Ð0Ü)Ð*pÓqÐqØ$&‘MØ˜S“[Ø$Ð,Ü)Ð*EÓFÐFØ×$Ñ$×+Ñ+¨MÔ:Ø$(‘MÜ—‘˜TÔ" d¨s´IÐ.>Ñ&>Ø%Ð-Ø)-Ñ&à&¨$Ñ.Ñ&ä!Ð$7¸°v¸QÐ"?Ó@Ð@ð) ð, Ð$ÜÐ GÈ
À|ÐSTÐUÓVÐVØÐ)ÙÐ,Õ-ð *r   Úreturnc                 óŠ   — g }| j                   D ]1  }t        |t        «      sJ d«       ‚|D ]  }|j                  |«       Œ Œ3 |S )Nzdoes not work with ellipsis)r*   Ú
isinstanceÚlistr+   )r   ÚresultÚcomposed_axisÚaxiss       r   Úflat_axes_orderz ParsedExpression.flat_axes_orderq   sJ   € ØˆØ!×-Ô-ˆMÜ˜m¬TÔ2ÐQÐ4QÓQÐ2Û%�Ø—‘˜dÕ#ñ &ð .ð ˆr   c                 óh   — | j                   D ]#  }t        |t        «      sŒt        |«      dkD  sŒ# y y)Nr   TF)r*   rB   rC   Úlen)r   Úaxess     r   Úhas_composed_axesz"ParsedExpression.has_composed_axesy   s.   € à×$Ô$ˆDÜ˜$¤Õ%¬#¨d«)°a«-Ùð %ð r   Únamec                 ó
  — t         j                  | «      sy| d   dk(  s| d   dk(  r	| dk(  r|ryyt        j                  | «      rt	        j
                  d| › �t        d¬	«       | d
v rt	        j
                  dt        d¬	«       y)N)Fznot a valid python identifierr   r%   éÿÿÿÿ)TÚ )Fz8axis name should should not start or end with underscorez7It is discouraged to use axes names that are keywords: é   )Ú
stacklevel)rF   zQIt is discouraged to use 'axis' as an axis name and will raise an error in future)r   ÚisidentifierÚkeywordÚ	iskeywordÚwarningsÚwarnÚRuntimeWarningÚFutureWarning)rL   r   s     r   r.   z.ParsedExpression.check_axis_name_return_reason€   s†   € ä×Ñ Ô%Ø9Ø�!‰W˜Š^˜t B™x¨3šØ�sŠ{Ñ/ØØTä× Ñ  Ô&Ü—‘ØMÈdÈVÐTÜ"Ø õð
 �xÑÜ—‘ØgÜ!Ø õð
 r   c                 ó6   — t         j                  | «      \  }}|S )z‹
        Valid axes names are python identifiers except keywords,
        and additionally should not start or end with underscore
        )r   r.   )rL   Úis_validÚ_reasons      r   Úcheck_axis_namez ParsedExpression.check_axis_name—   s   € ô -×JÑJÈ4ÓPÑˆ�'Øˆr   N)F)r   r   r   r   r   Úboolr   r   rG   rK   Ústaticmethodr   r.   r\   r   r   r   r   r      s¡   „ ñð
 EJÐdiò P. 3ð P.¸Tð P.Ð]aó P.ðd ó ð 4ó ð ñ¨Cð À4ð ÐTYÐZ^Ð`cÐZcÑTdò ó ðð, ð˜cð  dò ó ñr   r   )rS   rU   Útypingr   r   r   r   r   Úeinopsr   r	   r   Ú__annotations__r   r   r   r   r   Ú<module>rb      s4   ðÜ Û ß 4Õ 4å à€	ˆ3Ó ÷)ñ )÷Eò Er   