
    \hc                     ~    S SK r S SKJr  S SKJr  S SKJr  S SKJr  S r	S r
S rS	 rS
 rS rS rS rS\S\4S jrg)    N)defaultdict)Permutation)Tuple)Integerc                 n    0 nSn[        U 5       H!  u  p4[        U5       H  nX54X'   US-  nM     M#     U$ )Nr      )	enumeraterange)subranksmappingcounterirankjs         \/var/www/auris/envauris/lib/python3.13/site-packages/sympy/tensor/array/expressions/utils.py_get_mapping_from_subranksr   	   sE    GGX&tA !vGqLG  ' N    c           	         [        U5      nU VVs/ s H  oD Vs/ s H  oSU   PM	     snPM     nnn[        [        5      nU H-  n[        U5      S:X  d  M  Uu  u  pu  pX4Xy   U
'   X4X{   U'   M/     U [        U5      4$ s  snf s  snnf )N   )r   r   dictlen)argsr   contraction_indicesr   r   r   contraction_tuplesdlinkslinksarg1pos1arg2pos2s                r   _get_contraction_linksr!      s    (2G;NO;Naq1q!1:q1;NOF#u:?).&LT,4"&FL"&FL $ f 2Os   	BBBBc                 r    U  Vs/ s H  n[        [        U5      6 PM     n nU R                  S S9  U $ s  snf )Nc                     [        U 5      $ N)min)xs    r   <lambda>+_sort_contraction_indices.<locals>.<lambda>#   s    s1vr   key)r   sortedsort)pairing_indicesr   s     r   _sort_contraction_indicesr.   !   s=    2AB/QufQi(/OB-. Cs   4c                    ^  [        [        5      n[        T 5       H5  u  p#[        U[        [
        45      (       a  M"  X   R                  U5        M7     UR                  5        VVs0 s H  u  pE[        U5      S:  d  M  XE_M     nnnT  Vs/ s H  o"U;  d  M
  UPM     nn[        U5      nUR                  U 4S jS9  U Vs/ s H  n[        X   5      PM     nnXg-  n[        U5      nX4$ s  snnf s  snf s  snf )Nr   c                 &   > TR                  U 5      $ r$   )index)r&   flattened_indicess    r   r'   '_get_diagonal_indices.<locals>.<lambda>2   s    $5$;$;A$>r   r)   )r   listr	   
isinstanceintr   appenditemsr   r,   tuple)	r2   axes_contractionr   indkvret_indicesdiag_indicesdiagonal_indicess	   `        r   _get_diagonal_indicesrA   '   s    "4(-.cC>**$$Q'	 /
 *:)?)?)AP)ASVaZ)AP/M/<L3L1/KM()L>?<HILq.12LIK$K(( QM Js   (C0C0	C6C6C;c                     [        U 5       H4  u  p#X:X  a  Us  $ [        U[        [        45      (       d  M+  X;   d  M2  Us  $    [	        U< SU < 35      e)Nz not found in )r	   r5   set	frozenset
IndexError)
subindicesr;   r   sinds       r   _get_argindexrH   9   sJ    Z(;HdS),--#+H	 )
 S*=
>>r   c                    ^  [        U[        [        [        45      (       a  [        U 4S jU 5       5      $ [        U[        5      (       a   [        R                  " U 4S jU 5       5      $ T " U5      $ )Nc              3   <   >#    U  H  n[        TU5      v   M     g 7fr$   $_apply_recursively_over_nested_lists.0r   funcs     r   	<genexpr>7_apply_recursively_over_nested_lists.<locals>.<genexpr>D   s     PCq9$BBC   c              3   <   >#    U  H  n[        TU5      v   M     g 7fr$   rK   rM   s     r   rP   rQ   F   s     YUXPQB4KKUXrR   )r5   r9   r4   r   fromiter)rO   arrs   ` r   rL   rL   B   sU    #tU+,,PCPPP	C		~~YUXYYYCyr   c                 F  ^ ^^^ SS0mSnSnU[        T 5      :  a^  SnX-   [        T 5      :  a*  T U   U-   T X-      :w  a  OUS-  nX-   [        T 5      :  a  M*  X#-  nUTT U   '   X-  nU[        T 5      :  a  M^  [        TR                  5       5      mUU4S jmU U4S jnU$ )Nr   r   c                 D   > TT[         R                  " TU 5      S-
        $ )Nr   )bisectbisect_right)idx
shift_keysshiftss    r   rO   8_build_push_indices_up_func_transformation.<locals>.funcZ   s%    j!4!4Z!Ea!GHIIr   c                 (   > U T;   a  g U T" U 5      -
  $ r$    )r   flattened_contraction_indicesrO   s    r   	transform=_build_push_indices_up_func_transformation.<locals>.transform]   s    --tAw;r   )r   r+   keys)r`   r   
cumulativer   ra   rO   r[   r\   s   `    @@@r   *_build_push_indices_up_func_transformationre   K   s    VF	AJ
c/0
0cC566,Q/!37TUVUX7YYFA cC566 	
3=,Q/0	 c/0
0 &JJ r   c                 t   ^ U S   S-   n[        U5       Vs/ s H  o"U ;  d  M
  UPM     snmU4S jnU$ s  snf )Nr   c                 Z   > U [        T5      :  a  TU    $ U TS   -   [        T5      -
  S-   $ )Nrg   r   )r   )r   r\   s    r   ra   ?_build_push_indices_down_func_transformation.<locals>.transformk   s4    s6{?!9vbz>CK/!33r   )r
   )r`   Nr   ra   r\   s       @r   ,_build_push_indices_down_func_transformationrk   f   sC    %b)!+AqLA.K%KaLF4  Ms   	55permtarget_listc                     [        U R                  5       Vs/ s H  nSPM     nn[        U5       H  u  p$XCU " U5      '   M     U$ s  snf )z4
Permute a list according to the given permutation.
N)r
   sizer	   )rl   rm   r   new_listes        r   _apply_permutation_to_listrr   t   sJ     $DII./..H/+&a 'O 0s   A)rX   collectionsr   sympy.combinatoricsr   sympy.core.containersr   sympy.core.numbersr   r   r!   r.   rA   rH   rL   re   rk   r4   rr   r_   r   r   <module>rw      sO     # + ' &)$?6[ t r   