
    Pi                         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     b/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einops/parsing.py__init__zAnonymousAxis.__init__   sV    ZZ
:??zQ!"ijjj!"aUYU_"a"abbb	 ?    c                 0    t          | j                   dS )Nz-axis)strr   )r   s    r   __repr__zAnonymousAxis.__repr__   s    dj//((((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 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| 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#XX?OX%&_[\&_&_&_```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! Q\ Q%&O!&O&Ov&O&OPPP )%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: "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*   "':>'%(UU49+8:*J&&!"Z[[[yyU++q00CIIj#4N4NRS4S4S!k   $++E9==J $D-1 	,  	,  	,  	,  	,  	,  	,  	,D " 	A 	ADu}}%1!M"4555%)"3;;$0)*pqqq$&MMS[[$,)*EFFF$++M:::$(MT"" AdsI.>&>&>%-)-&&&$.&&!"?"?"?"?@@@$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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*   rB   rC   len)r   axess     r   has_composed_axesz"ParsedExpression.has_composed_axesy   sA    $ 	 	D$%% #d))a--tt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^^tBx3s{{/{xTT && Td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J4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 TYZ^`cZcTd    \, 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   