o
    gืi๐  ใ                   @   s   G d d dZ dS )c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )ฺExpressionIndicatorc                 C   s
   || _ d S )N)ฺtext)ฺselfr   ฉ r   ๚X/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/einx/_src/namedtensor/util.pyฺ__init__   s   
zExpressionIndicator.__init__c                    s4   d| j  dd d  fddtt| j D ก S )NzExpression: "z"
z             ฺ c                    s   g | ]
}| v r
d ndqS )๚^๚ r   )ฺ.0ฺiฉฺposr   r   ฺ
<listcomp>   s    z.ExpressionIndicator.create.<locals>.<listcomp>)r   ฺjoinฺrangeฺlen)r   r   r   r   r   ฺcreate   s   4zExpressionIndicator.createc                    sh   g }t t jD ]} j|d   |กr!| t ||t| ก q	t fdd|D s2J | |S )Nc                 3   ๓&    | ]}|d ko|t  jk V  qdS ฉ้    Nฉr   r   ฉr
   ฺpฉr   r   r   ฺ	<genexpr>   ๓   $ z:ExpressionIndicator.get_pos_for_literal.<locals>.<genexpr>)r   r   r   ฺ
startswithฺextendฺall)r   ฺliteralr   r   r   r   r   ฺget_pos_for_literal   s    z'ExpressionIndicator.get_pos_for_literalc                    sZ   t |ttB s
|g}g }|D ]}| t|j|jก qt fdd|D s+J | |S )Nc                 3   r   r   r   r   r   r   r   r      r   z8ExpressionIndicator.get_pos_for_exprs.<locals>.<genexpr>)ฺ
isinstanceฺtupleฺlistr   r   ฺ	begin_posฺend_posr   )r   ฺexprsr   ฺexprr   r   r   ฺget_pos_for_exprs   s    z%ExpressionIndicator.get_pos_for_exprsc                    sฆ   t |ttB s
|g}ddlm}m}m} g }|D ](}|d ur@| ก D ]}t ||j|jB |jB r?|j	|v r?| 
t|j|jก q"qt fdd|D sQJ | |S )N้   )ฺstage1ฺstage2ฺstage3c                 3   r   r   r   r   r   r   r   r   $   r   z<ExpressionIndicator.get_pos_for_axisnames.<locals>.<genexpr>)r!   r"   r#   r   r*   r+   r,   ฺnodesฺAxisฺnamer   r   r$   r%   r   )r   r&   ฺ	axisnamesr*   r+   r,   r   r'   r   r   r   ฺget_pos_for_axisnames   s   " z)ExpressionIndicator.get_pos_for_axisnamesc                    s   t |ttB s
|g}ddlm} g }|D ]$}|d ur8| ก D ]}t ||jr7|jdkr7| t	|j
d |j
ก qqt fdd|D sIJ | |S )Nr)   ฉr*   r   ้   c                 3   r   r   r   r   r   r   r   r   3   r   z;ExpressionIndicator.get_pos_for_ellipses.<locals>.<genexpr>)r!   r"   r#   r   r*   r-   ฺEllipsisr$   r   r   r%   r   ฉr   r&   r*   r   r'   r   r   r   ฺget_pos_for_ellipses'   s   
 z(ExpressionIndicator.get_pos_for_ellipsesc                    s   t |ttB s
|g}ddlm} g }|D ]"}|d ur6| ก D ]}t ||jr5|jdkr5| t	|j|j
ก qqt fdd|D sGJ | |S )Nr)   r2   r   c                 3   r   r   r   r   r   r   r   r   B   r   z9ExpressionIndicator.get_pos_for_concat.<locals>.<genexpr>)r!   r"   r#   r   r*   r-   ฺConcatenatedAxisr$   r   r   r%   r   r5   r   r   r   ฺget_pos_for_concat6   s   
 z&ExpressionIndicator.get_pos_for_concatc                    s   t |ttB s
|g}ddlm} g }|D ]#}|d ur7| ก D ]}t ||jr6|jdkr6| |j|j	d gก qqt
 fdd|D sHJ | |S )Nr)   r2   r   c                 3   r   r   r   r   r   r   r   r   Q   r   z;ExpressionIndicator.get_pos_for_brackets.<locals>.<genexpr>)r!   r"   r#   r   r*   r-   ฺBracketsr$   r   r%   r   r5   r   r   r   ฺget_pos_for_bracketsE   s   
 z(ExpressionIndicator.get_pos_for_bracketsN)ฺ__name__ฺ
__module__ฺ__qualname__r   r   r    r(   r1   r6   r8   r:   r   r   r   r   r      s    	r   N)r   r   r   r   r   ฺ<module>   s    