
    1;jiZ                         U d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	 dZ
eed<    G d de          Z G d d	          ZdS )
    )EinopsErrorN)ListOptionalSetTupleUnionu   …	_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    rA| 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 issuez2Anonymous axis should have positive length, not {})intr   r   format)selfr   s     H/root/voice-cloning/.venv/lib/python3.11/site-packages/einops/parsing.py__init__zAnonymousAxis.__init__   s\    ZZ
:??zQ!"ijjj!"V"]"]^b^h"i"ijjj	 ?    c                 P    d                     t          | j                            S )Nz{}-axis)r   strr   )r   s    r   __repr__zAnonymousAxis.__repr__   s    DJ000r   N)__name__
__module____qualname____doc__r   r   r    r   r   r   r   	   sI        RRkc k k k k1 1 1 1 1r   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 _         d  _        t                       _        d _        g  _        d|v rd|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                    |                    "t          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                 P   | j         v r,r| dk    s$s"t          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                    | |                    |rt          |           } j                             |            |rd_        j                            | g           d S                     |            d S )N_z5Indexing expression contains duplicate dimension "{}"FTr   )r   zInvalid axis identifier: {}
{})identifiersr   r   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_name2   s   D$$$( iQ#XX?OX%&]&d&def&g&ghhhI~~ $$Y/// ($++I6666;D333!((3336:D333MM!,,	 Q1$,(//3333F'+'I'I!^n'I'o'o$f! [\ [%&G&N&NqRX&Y&YZZZ )%a((A $$Q''' ?:>D7 ($++QC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: "{}")has_ellipsisr+   setr'   r.   r)   r   r   countreplacer	   r*   isalnumr   )r   r!   r   r    r4   current_identifiercharr3   s   ` ``   @r   r   zParsedExpression.__init__   s1   "':>'%(UU49+8:*J&&!"Z[[[yyU++q00CIIj#4N4NRS4S4S!k   $++E9==J $D-1 	,  	,  	,  	,  	,  	,  	,  	,D " 	I 	IDu}}%1!M"4555%)"3;;$0)*pqqq$&MMS[[$,)*EFFF$++M:::$(MT"" IdsI.>&>&>%-)-&&&$.&&!":"A"A$"G"GHHH$JQQR\]]^^^)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_orderp   sf    !- 	$ 	$MmT22QQ4QQQ2% $ $d####$r   c                 p    | j         D ]-}t          |t                    rt          |          dk    r dS .dS )Nr   TF)r)   r@   rA   len)r   axess     r   has_composed_axesz"ParsedExpression.has_composed_axesx   sA    $ 	 	D$%% #d))a--ttur   namec                 D   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v rt	          j        d	t                     dS )
N)Fznot a valid python identifierr   r&   )T )Fz8axis name should should not start or end with underscorez9It is discouraged to use axes names that are keywords: {})rD   zQIt is discouraged to use 'axis' as an axis name and will raise an error in future)	r   isidentifierkeyword	iskeywordwarningswarnr   RuntimeWarningFutureWarning)rJ   r   s     r   r-   z.ParsedExpression.check_axis_name_return_reason   s    %% 	99!W^^tBx3s{{/{xTT && xY``aeffhvwwwxj!   8r   c                 @    t                               |           \  }}|S )z
        Valid axes names are python identifiers except keywords,
        and additionally should not start or end with underscore
        )r   r-   )rJ   is_valid_reasons      r   check_axis_namez ParsedExpression.check_axis_name   s!     -JJ4PP'r   N)F)r   r   r   r   r   boolr   r   rE   rI   staticmethodr   r-   rX   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 TYZ^`cZcTd    \" c d    \  r   r   )einopsr   rO   rQ   typingr   r   r   r   r   r	   r   __annotations__objectr   r   r   r   r   <module>r_      s             4 4 4 4 4 4 4 4 4 4 4 4 4 4	3   1 1 1 1 1F 1 1 1@ @ @ @ @ @ @ @ @ @r   