§
    �Åj•  ã                   ó‚   — 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dS )
é    N)ÚListÚOptionalÚSetÚTupleÚUnion)ÚEinopsErroru   â€¦Ú	_ellipsisc                   ó$   — e Zd ZdZdefd„Zd„ ZdS )ÚAnonymousAxiszHImportant thing: all instances of this class are not equal to each otherÚvaluec                 ó¦   — t          |¦  «        | _        | j        dk    r1| j        dk    rt          d¦  «        ‚t          d| j        › �¦  «        ‚d S )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:\Projects\Historical\venv\Lib\site-packages\einops/parsing.pyÚ__init__zAnonymousAxis.__init__   sV   € Ý˜‘Z”ZˆŒ
ØŒ:˜Š?ˆ?ØŒz˜QŠˆÝ!Ð"iÑjÔjÐjå!Ð"aÐUYÔU_Ð"aÐ"aÑbÔbÐbð	 ˆ?ó    c                 ó0   — t          | j        ¦  «        › d�S )Nz-axis)Ústrr   )r   s    r   Ú__repr__zAnonymousAxis.__repr__   s   € Ý�d”j‘/”/Ð(Ð(Ð(Ð(r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   © r   r   r   r   
   sI   € € € € € ØRÐRðc˜cð cð 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dS )Ú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 r‚d|vrt          d¦  «        ‚t                               |d¦  «        dk    st                               |d¦  «        dk    rt          d¦  «        ‚| 	                    dt          ¦  «        }d‰ _         d Šˆˆˆˆ fd	„}d }|D ]¥}|d
v r]|� ||¦  «         d }|dk    r‰�t          d¦  «        ‚g ŠŒ/|dk    r-‰€t          d¦  «        ‚‰ j                             ‰¦  «         d ŠŒct                               |¦  «        s|dt          fv r|€|}Œ�||z  }Œ“t          d|› d�¦  «        ‚‰�t          d|› d�¦  «        ‚|� ||¦  «         d S d S )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    rl‰j                              t          ¦  «         ‰€(‰j                             t          ¦  «         d‰_        d S ‰                     t          ¦  «         d‰_        d S t                               | ¦  «        }|r3t          | ¦  «        dk    r ‰€‰j                             g ¦  «         n	 d S ‰ 
                    | ‰¬¦  «        \  }}|s|st          d| › d	|› �¦  «        ‚|rt          | ¦  «        } ‰j                              | ¦  «         |rd‰_        ‰€‰j                             | g¦  «         d S ‰                     | ¦  «         d S )
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   sÇ  ø€ Ø�DÔ$Ð$Ð$Ø(ð a¨Q°#ªX¨XÐ?O¨XÝ%Ð&_Ð[\Ð&_Ð&_Ð&_Ñ`Ô`Ð`Ø•IŠ~ˆ~ØÔ ×$Ò$¥YÑ/Ô/Ð/Ø Ð(ØÔ$×+Ò+­IÑ6Ô6Ð6Ø6;�DÔ3Ð3Ð3à!×(Ò(­Ñ3Ô3Ð3Ø6:�DÔ3Ð3Ð3åŸMšM¨!Ñ,Ô,�	Øð ¥ Q¡¤¨1¢ à$Ð,ØÔ(×/Ò/°Ñ3Ô3Ð3Ð3àØ�FØ'+×'IÒ'IÈ!Ð^nÐ'IÑ'oÔ'oÑ$�˜fØ!ð Q \ð QÝ%Ð&OÀ!Ð&OÐ&OÀvÐ&OÐ&OÑPÔPÐPØð )Ý% aÑ(Ô(�AØÔ ×$Ò$ QÑ'Ô'Ð'Øð ?Ø:>�DÔ7Ø Ð(ØÔ$×+Ò+¨Q¨CÑ0Ô0Ð0Ð0Ð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¤UˆÔà49ˆÔ+à8:ˆÔØ�*ÐÐØ˜JÐ&Ð&Ý!Ð"ZÑ[Ô[Ð[Ý�yŠy˜ UÑ+Ô+¨qÒ0Ð0µC·I²I¸jÈ#Ñ4NÔ4NÐRSÒ4SÐ4SÝ!Økñô ð ð $×+Ò+¨Eµ9Ñ=Ô=ˆJØ $ˆDÔà-1ˆð 	,ð  	,ð  	,ð  	,ð  	,ð  	,ð  	,ð  	,ðD "ÐØð 	Að 	AˆDØ�uˆ}ˆ}Ø%Ð1Ø!�MÐ"4Ñ5Ô5Ð5Ø%)Ð"Ø˜3’;�;Ø$Ð0Ý)Ð*pÑqÔqÐqØ$&�M�MØ˜S’[�[Ø$Ð,Ý)Ð*EÑFÔFÐFØÔ$×+Ò+¨MÑ:Ô:Ð:Ø$(�MøÝ—’˜TÑ"Ô"ð A d¨sµIÐ.>Ð&>Ð&>Ø%Ð-Ø)-Ð&Ð&à&¨$Ñ.Ð&Ð&å!Ð"?¸Ð"?Ð"?Ð"?Ñ@Ô@Ð@àÐ$ÝÐUÈ
ÐUÐUÐUÑVÔVÐVØÐ)ØˆMÐ,Ñ-Ô-Ð-Ð-Ð-ð *Ð)r   Úreturnc                 ó�   — g }| j         D ];}t          |t          ¦  «        s
J d¦   «         ‚|D ]}|                     |¦  «         ŒŒ<|S )Nzdoes not work with ellipsis)r*   Ú
isinstanceÚlistr+   )r   ÚresultÚcomposed_axisÚaxiss       r   Úflat_axes_orderz ParsedExpression.flat_axes_orderq   sf   € ØˆØ!Ô-ð 	$ð 	$ˆMÝ˜m­TÑ2Ô2ÐQÐQÐ4QÑQÔQÐ2Ø%ð $ð $�Ø—’˜dÑ#Ô#Ð#Ð#ð$àˆr   c                 óp   — | j         D ]-}t          |t          ¦  «        rt          |¦  «        dk    r dS Œ.dS )Nr   TF)r*   rB   rC   Úlen)r   Úaxess     r   Úhas_composed_axesz"ParsedExpression.has_composed_axesy   sA   € àÔ$ð 	ð 	ˆDÝ˜$¥Ñ%Ô%ð ­#¨d©)¬)°aª-¨-Ø�t�tøØˆur   Únamec                 ó,  — t                                | ¦  «        sdS | d         dk    s| d         dk    r| dk    r|rdS dS t          j        | ¦  «        rt	          j        d| › �t          d¬	¦  «         | d
v rt	          j        dt          d¬	¦  «         dS )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Ð9Ø�!ŒW˜Š^ˆ^˜t Bœx¨3š˜Ø�sŠ{ˆ{Ð/ˆ{Ø�xØTÐTåÔ  Ñ&Ô&ð Ý”ØTÈdÐTÐTÝ"Ø ðñ ô ð ð
 �xÐÐÝ”ØgÝ!Ø ðñ ô ð ð
 �8r   c                 ó@   — t                                | ¦  «        \  }}|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Ô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.ð P.ð P. 3ð P.¸Tð P.Ð]að P.ð P.ð P.ð 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      sÉ   ðØ €€€€Ø €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à Ð Ð Ð Ð Ð à€	ˆ3Ð Ð Ñ ð)ð )ð )ð )ð )ñ )ô )ð )ðEð Eð Eð Eð Eñ Eô Eð Eð Eð Er   