
    Pi!                     V    d dl Z d dlZd dlZddZd ZdddZd Zd Zd	 Z	d
 Z
d ZdS )    Nc           	      P   |g }| D ]}t           j        j                            |          }t           j        j                            |          }t          d |D                       rd t          |          D             d         \  }t          t          j	                            D ]Nt           j        j        
                    |fd          }|                    t          |g                     O|                    |           |S |J t          |           t          |          k    rt          d          g }g }t          | |          D ]\  }}t           j        j                            |          }t           j        j                            |          }|                    ||j                  }t          d |D                       rd t          |          D             d         \  }t%          j        dgd j	        D             z             }	t          t          j	                            D ]t)          d           f|z  t)          |	         |	d	z                      fz   }
||
         }t           j        j        
                    |fd
          }t          |g|g|          \  }}|                    |           |                    |           |                    |           |                    |           ||fS )Nc              3   ^   K   | ](}t          |t          j        j        j                  V  )d S N
isinstanceeinxexprstage3Concatenation.0es     `/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/einx/op/util.py	<genexpr>zflatten.<locals>.<genexpr>   4      OOQ:a!1!?@@OOOOOO    c                 d    g | ]-\  }}t          |t          j        j        j                  )||f.S  r   r   ir   s      r   
<listcomp>zflatten.<locals>.<listcomp>   H     - - -1!!TY%5%CDD-F- - -r   r   c                     t          |           t                    k    r| j                                                 nd S r   idchildren__deepcopy__r	   concat_exprr   s    r   <lambda>zflatten.<locals>.<lambda>   =    d88r+66 &*]1%5%B%B%D%D%D! r   z/Got different number of expressions and tensorsc              3   ^   K   | ](}t          |t          j        j        j                  V  )d S r   r   r   s     r   r   zflatten.<locals>.<genexpr>,   r   r   c                 d    g | ]-\  }}t          |t          j        j        j                  )||f.S r   r   r   s      r   r   zflatten.<locals>.<listcomp>-   r   r   c                 (    g | ]}|j         d          S r   )shape)r   cs     r   r   zflatten.<locals>.<listcomp>2   s    )S)S)S!'!*)S)S)Sr      c                     t          |           t                    k    r| j                                                 nd S r   r   r   s    r   r    zflatten.<locals>.<lambda><   r!   r   )r   r	   r
   	decomposeremove_unnamed_trivial_axesany	enumeraterangelenr   replaceextendflattenappend
ValueErrorzipreshaper&   npcumsumslice)exprstensorsbackend	exprs_outr	   concat_indexsubexprtensors_outtensorsplitss	subtensorflattened_subexprsflattened_subtensorsr   r   s                 @@r   r2   r2      s   	 	' 	'D9#--d33D9#??EEDOO$OOOOO '- - )$- - - 	-)k
 s;#78899 	9 	9A"i.66" " " " " G $$WgY%7%78888	9   &&&&"""u::W%%NOOO	w// !	+ !	+LD&9#--d33D9#??EED__VTZ88FOO$OOOOO +- - )$- - - 	-)k
 A3)S)Sk>R)S)S)S#STTs;#78899 = =At5vay&QRUVQV-9X9X8ZZA &q	I #i.66" " " " " G @G 	I;@ @<&(< $$%7888&&';<<<<#=&   &&&""6****+%%r   c                 P   t          |           t          |          k    rt          d          d | D             }d |D             }t          j        t          |          t          |           ft                    }t          |          D ]8\  }}t          |          D ]#\  }}|                    |          rdnd|||f<   $9d	fd	 |          \  }	}
|	t          d          t          j        |	t          j	        t          |                    k              sJ |
S )
Nz4Got different number of input and output expressionsc                 j    g | ]0}d  t           j        j                            |          D             1S )c                     h | ]	}|j         
S r   namer   as     r   	<setcomp>z(assignment.<locals>.<listcomp>.<setcomp>P   s    III1IIIr   r   r	   r
   get_named_axes)r   expr_ins     r   r   zassignment.<locals>.<listcomp>P   s:    bbbgII	 0 ? ? H HIIIbbbr   c                 j    g | ]0}d  t           j        j                            |          D             1S )c                     h | ]	}|j         
S r   rJ   rL   s     r   rN   z(assignment.<locals>.<listcomp>.<setcomp>R   s    CCCACCCr   rO   )r   expr_outs     r   r   zassignment.<locals>.<listcomp>Q   sG       HPCC)88BBCCC  r   dtyper   r(   c                    || j         d         k    rg g fS t          | j         d                   D ]X}| ||f         dk    rH|                                 }d||d d f<   d|d d |f<    ||dz             \  }}||g|z   |g|z   fc S YdS )Nr   r(   NN)r&   r.   copy)cost_matrixrr'   cost_matrix2rowscolsassignment_solvers         r   r_   z%assignment.<locals>.assignment_solver[   s    !!$$$r6M {(+,, 	2 	2A1a4 A%%*//11%&QT"%&QQQT"..|QUCC
d#3:sTz1111zr   z>Failed to find assignment between input and output expressionsr%   )
r/   r4   r7   onesintr-   issubsetRuntimeErrorallarange)exprs_inr=   axes_inaxes_outrZ   r   a_outja_inrow_indcol_indr_   s              @r   
assignmentrn   M   si   
8}}I&&OPPPbbYabbbG T]  H '3y>>3x==9EEEKh'' A A5 )) 	A 	AGAt%)]]5%9%9 @qK1	A      )(55GWL
 
 	
 6'RYs9~~66677777Nr   T)	broadcastc                  	
 t           j        j                            |           r$t           j        j                            |          sJ d|  d| d            d t           j        j                            |           D             	d t           j        j                            |          D             }	fd|D             }	fd|D             
t          |          t          	          k    rt          d          	fd	|D             }|                    |t          |                    }t          
          d
k    rpt          
fdt           j        j                            |          D                       }|
                    ||          }|r|                    ||j                  }|s0t           j        j                            	fd|D                       }||fS )N'z' and 'z' must be flatc                     g | ]	}|j         
S r   rJ   rL   s     r   r   z'transpose_broadcast.<locals>.<listcomp>z   s    BBB!qvBBBr   c                     g | ]	}|j         
S r   rJ   rL   s     r   r   z'transpose_broadcast.<locals>.<listcomp>{   s    DDD1DDDr   c                     g | ]}|v |	S r   r   r   rM   in_axess     r   r   z'transpose_broadcast.<locals>.<listcomp>|   s    >>>g!r   c                     g | ]}|v|	S r   r   ru   s     r   r   z'transpose_broadcast.<locals>.<listcomp>}   s#    BBB'1A1A!1A1A1Ar   z2Found input axes that are not in output expressionc                 :    g | ]}                     |          S r   )index)r   out_axisrv   s     r   r   z'transpose_broadcast.<locals>.<listcomp>   s%    GGGGMM(##GGGr   r   c              3   <   K   | ]}|j         v rd n|j        V  dS )r(   N)rK   value)r   rM   out_axes_broadcasts     r   r   z&transpose_broadcast.<locals>.<genexpr>   sJ       $
 $
 ---AA17$
 $
 $
 $
 $
 $
r   c                 p    g | ]2}|j         v r|n$t          j        j                            d d          3S )Nr(   )rK   r   r	   r
   Axis)r   axisrv   s     r   r   z'transpose_broadcast.<locals>.<listcomp>   sK     *
 *
 *
SWTY'))TTty/?/D/DT1/M/M*
 *
 *
r   )r   r	   r
   is_flatget_axessetrc   	transposetupler/   r6   broadcast_tor&   List)rQ   rA   rT   r<   ro   out_axesout_axes_intersectpermpre_broadcast_shaperv   r}   s            @@r   transpose_broadcastr   t   s3   9##G,, 41A1I1I2 2 4 4373383334 4 
 CBty/88AABBBGDD	 0 9 9( C CDDDH>>>>X>>>BBBBXBBB
#g,,..OPPPGGGG4FGGGDvuT{{33F ""# $
 $
 $
 $
Y%..x88$
 $
 $
 
 
 )<== 	B))&(.AAF 9#(( *
 *
 *
 *
[c*
 *
 *
   8r   c                    t           j        j                            |          }t           j        j                            |          }t          d |D                       rd t          |          D             d         \  }g }t          t          j	                            D ]Rt           j        j        
                    |fd          }t          | |||          }|                    |           S|                    ||          }	nt          |           }
t           j        j                            t           j        j                            |                    t           j        j                            t           j        j                            |
                    k    sJ t          |          }	|                    |	|j                  }	|	S )Nc              3   ^   K   | ](}t          |t          j        j        j                  V  )d S r   r   r   s     r   r   z_unflatten.<locals>.<genexpr>   s4      
P
PQ:a)788
P
P
P
P
P
Pr   c                 d    g | ]-\  }}t          |t          j        j        j                  )||f.S r   r   r   s      r   r   z_unflatten.<locals>.<listcomp>   sH     %
 %
 %
1!TY-;<<%
F%
 %
 %
r   r   c                     t          |           t                    k    r| j                                                 nd S r   r   r   s    r   r    z_unflatten.<locals>.<lambda>   s=    d88r+.. "]1-::<<< r   )r   )r   r	   r
   r*   r+   r,   r-   r.   r/   r   r0   
_unflattenr3   concatenatenextr6   r&   )rf   
tensors_inrT   r<   expr_out_flatr>   r@   r?   rD   
tensor_outnext_expr_inr   r   s              @@r   r   r      s   I$..x88MI$@@OOM

P
P-
P
P
PPP &%
 %
!-00%
 %
 %
 	%!k s;/0011 	* 	*Ai&..     G #8Z'JJIy))))((<(HH

H~~y;;I&&x00
 
Y99$):J:T:TUa:b:bccd d d d *%%
X^<<Jr   c                X   t          |           t          |          k    rt          d          |J t          |           }t          |          }g }|D ]S}t          ||||          }t          j                            |          |j        k    sJ |                    |           T|S )Nz5Got different number of input expressions and tensors)	r/   r4   iterr   r   tracer	get_shaper&   r3   )	rf   r   r=   r<   iter_exprs_initer_tensors_inr@   rT   ts	            r   	unflattenr      s    
8}}J''PQQQNNM:&&OK  }oxII{$$Q''8>99991r   c                 L   |dk    s|g k    r t          j        |t           j                  S 	 t          j        |          }n(# t          $ r}t	          d|  d|           |d }~ww xY wt          j        |j        t           j                  st	          d|  d|           |S )Nr   rU   zGot invalid parameter =)r7   asarrayint64	Exceptionr4   
issubdtyperV   integer)kvr   s      r   _clean_parameterr      s    Bww!r''z!28,,,,BJqMM B B B9!99a99::AB="*-- ;9!99a99:::Hs   A 
A(A##A(c                     d t           j        j                            |                                           D             fd|                                D             }| |fS )Nc                 d    h | ]-}t          |t          j        j        j                  &|j        .S r   )r   r   r	   stage1	NamedAxisrK   )r   r   s     r   rN   z4_clean_description_and_parameters.<locals>.<setcomp>   sB       dDI,677	  r   c                 @    i | ]\  }}|v 	|t          ||          S r   )r   )r   r   r   
axis_namess      r   
<dictcomp>z5_clean_description_and_parameters.<locals>.<dictcomp>   s0    ^^^1aS]oo!%a++ooor   )r   r	   r   parse_oprd   items)description
parametersr   s     @r   !_clean_description_and_parametersr      ss     I$--k::>>@@  J
 _^^^
8H8H8J8J^^^J
""r   c                 P    dt          |           v r| j        S t          |           S )N__name__)dirr   str)ops    r   
_op_to_strr      s&    SWW{2wwr   rX   )r   sysnumpyr7   r2   rn   r   r   r   r   r   r   r   r   r   <module>r      s     



    D& D& D& D&N$ $ $N JN     B$ $ $N   	 	 		# 	# 	#    r   