Ë
    7^(hc  ã                   ó|   — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zdedefd„Zy)é    N)Údefaultdict)ÚPermutation)ÚTuple)ÚIntegerc                 ól   — i }d}t        | «      D ]!  \  }}t        |«      D ]  }||f||<   |dz  }Œ Œ# |S )Nr   é   )Ú	enumerateÚrange)ÚsubranksÚmappingÚcounterÚiÚrankÚjs         úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/tensor/array/expressions/utils.pyÚ_get_mapping_from_subranksr   	   sU   € Ø€GØ€GÜ˜XÓ&ò ‰ˆˆ4Ü�t“ò 	ˆAØ ! 1˜vˆG�GÑØ�q‰L‰Gñ	ðð €Nó    c           	      ó  — t        |«      }|D ��cg c]  }|D �cg c]  }||   ‘Œ	 c}‘Œ }}}t        t        «      }|D ]0  }t        |«      dk(  sŒ|\  \  }	}
\  }}||f||	   |
<   |	|
f||   |<   Œ2 | t        |«      fS c c}w c c}}w )Né   )r   r   ÚdictÚlen)Úargsr   Úcontraction_indicesr   r   r   Úcontraction_tuplesÚdlinksÚlinksÚarg1Úpos1Úarg2Úpos2s                r   Ú_get_contraction_linksr!      s¥   € Ü(¨Ó2€GØ;N×O°a¨qÖ1¨!˜7 1›:Ô1ÐOÐÑOÜœÓ€FØ#ò ˆÜˆu‹:˜‹?Ø).Ñ&‰LˆT�4™,˜4 Ø"&¨ ˆF�4‰L˜ÑØ"&¨ ˆF�4‰L˜ÑØðð ”�f“ÐÐùò 2ùÓOs   ‘	BšA?¦BÁ?Bc                 ór   — | D �cg c]  }t        t        |«      Ž ‘Œ } }| j                  d„ ¬«       | S c c}w )Nc                 ó   — t        | «      S ©N)Úmin)Úxs    r   ú<lambda>z+_sort_contraction_indices.<locals>.<lambda>#   s
   € ¤s¨1£v€ r   ©Úkey)r   ÚsortedÚsort)Úpairing_indicesr   s     r   Ú_sort_contraction_indicesr-   !   s<   € Ø2AÖB¨Q”uœf Q›iÒ(ÐB€OÐBØ×ÑÑ-ÐÔ.ØÐùò Cs   …4c                 óè  ‡ — t        t        «      }t        ‰ «      D ]0  \  }}t        |t        t
        f«      rŒ||   j                  |«       Œ2 |j                  «       D ��ci c]  \  }}t        |«      dkD  sŒ||“Œ }}}‰ D �cg c]	  }||vsŒ|‘Œ }}t        |«      }|j                  ˆ fd„¬«       |D �cg c]  }t        ||   «      ‘Œ }}||z  }t        |«      }||fS c c}}w c c}w c c}w )Nr   c                 ó&   •— ‰j                  | «      S r$   )Úindex)r&   Úflattened_indicess    €r   r'   z'_get_diagonal_indices.<locals>.<lambda>2   s   ø€ Ð$5×$;Ñ$;¸AÓ$>€ r   r(   )r   Úlistr	   Ú
isinstanceÚintr   ÚappendÚitemsr   r+   Útuple)	r1   Úaxes_contractionr   ÚindÚkÚvÚret_indicesÚdiag_indicesÚdiagonal_indicess	   `        r   Ú_get_diagonal_indicesr?   '   s  ø€ Ü"¤4Ó(ÐÜÐ-Ó.ò (‰ˆˆ3Ü�cœC¤˜>Ô*àØ˜Ñ×$Ñ$ QÕ'ð	(ð
 *:×)?Ñ)?Ó)A×P¡  AÄSÈÃVÈaÃZ˜˜1™ÐPÐÑPà/ÖM˜°1Ð<LÒ3L’1ÐM€KÐMÜÐ(Ó)€LØ×ÑÓ>ÐÔ?Ø<HÖI°qœÐ.¨qÑ1Õ2ÐIÐÐIØ�<Ñ€KÜ˜Ó$€KØ˜[Ð(Ð(ùó QùâMùò Js   Á"C$Á9C$Â	C*ÂC*Â9C/c                 ó˜   — t        | «      D ]-  \  }}||k(  r|c S t        |t        t        f«      sŒ&||v sŒ+|c S  t	        |›d| ›�«      ‚)Nz not found in )r	   r3   ÚsetÚ	frozensetÚ
IndexError)Ú
subindicesr9   r   Úsinds       r   Ú_get_argindexrF   9   sR   € Ü˜ZÓ(ò ‰ˆˆ4Ø�$Š;ØŠHÜ�dœS¤)Ð,Õ-°#¸²+ØŠHð	ô
 ªS±*Ð=Ó
>Ð>r   c                 óÎ   ‡ — t        |t        t        t        f«      rt        ˆ fd„|D «       «      S t        |t        «      rt        j                  ˆ fd„|D «       «      S  ‰ |«      S )Nc              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr$   ©Ú$_apply_recursively_over_nested_lists©Ú.0r   Úfuncs     €r   ú	<genexpr>z7_apply_recursively_over_nested_lists.<locals>.<genexpr>D   s   øè ø€ ÒPÀqÔ9¸$À×BÑPùó   ƒc              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr$   rI   rK   s     €r   rN   z7_apply_recursively_over_nested_lists.<locals>.<genexpr>F   s   øè ø€ ÒYÐPQÔBÀ4È×KÑYùrO   )r3   r7   r2   r   Úfromiter)rM   Úarrs   ` r   rJ   rJ   B   sO   ø€ Ü�#œœt¤UÐ+Ô,ÜÓPÈCÔPÓPÐPÜ	�CœÔ	Ü�~‰~ÓYÐUXÔYÓYÐYá�C‹yÐr   c                 ó>  ‡ ‡‡‡— ddiŠd}d}|t        ‰ «      k  r]d}||z   t        ‰ «      k  r)‰ |   |z   ‰ ||z      k7  rn|dz  }||z   t        ‰ «      k  rŒ)||z  }|‰‰ |   <   ||z  }|t        ‰ «      k  rŒ]t        ‰j                  «       «      Šˆˆfd„Šˆ ˆfd„}|S )Nr   r   c                 óB   •— ‰‰t        j                  ‰| «      dz
        S )Nr   )ÚbisectÚbisect_right)ÚidxÚ
shift_keysÚshiftss    €€r   rM   z8_build_push_indices_up_func_transformation.<locals>.funcZ   s%   ø€ Ø�j¤×!4Ñ!4°ZÀÓ!EÀaÑ!GÑHÑIÐIr   c                 ó$   •— | ‰v ry |  ‰| «      z
  S r$   © )r   Úflattened_contraction_indicesrM   s    €€r   Ú	transformz=_build_push_indices_up_func_transformation.<locals>.transform]   s   ø€ ØÐ-Ñ-Øà‘t˜A“w‘;Ðr   )r   r*   Úkeys)r\   r   Ú
cumulativer   r]   rM   rX   rY   s   `    @@@r   Ú*_build_push_indices_up_func_transformationr`   K   sÓ   û€ Ø�ˆV€FØ	€AØ€JØ
ŒcÐ/Ó0Ò
0ØˆØ�‰c”CÐ5Ó6Ò6Ø,¨QÑ/°!Ñ3Ð7TÐUVÐWXÑUXÑ7YÒYØØ�‰FˆAð �‰c”CÐ5Ó6Ó6ð 	�a‰ˆ
Ø3=ˆÐ,¨QÑ/Ñ0Ø	ˆQ‰ˆð ŒcÐ/Ó0Ó
0ô ˜Ÿ™›Ó&€JõJõð Ðr   c                 óh   ‡— | d   dz   }t        |«      D �cg c]	  }|| vsŒ|‘Œ c}Šˆfd„}|S c c}w )Néÿÿÿÿr   c                 óX   •— | t        ‰«      k  r‰|    S | ‰d   z   t        ‰«      z
  dz   S )Nrb   r   )r   )r   rY   s    €r   r]   z?_build_push_indices_down_func_transformation.<locals>.transformk   s4   ø€ ØŒs�6‹{Š?Ø˜!‘9Ðà�v˜b‘z‘>¤C¨£KÑ/°!Ñ3Ð3r   )r
   )r\   ÚNr   r]   rY   s       @r   Ú,_build_push_indices_down_func_transformationre   f   sA   ø€ Ø% bÑ)¨!Ñ+€Aä˜q›ÖL�A QÐ.KÒ%KŠaÒL€Fô4ð Ðùò Ms   —	/¡/ÚpermÚtarget_listc                 ó�   — t        | j                  «      D �cg c]  }d‘Œ }}t        |«      D ]  \  }}|| | |«      <   Œ |S c c}w )z<
    Permute a list according to the given permutation.
    N)r
   Úsizer	   )rf   rg   r   Únew_listÚes        r   Ú_apply_permutation_to_listrl   t   sP   € ô $ D§I¡IÓ.Ö/˜’Ð/€HÐ/Ü˜+Ó&ò ‰ˆˆ1Øˆ‘�a“Òðà€Oùò 0s   ˜	A)rU   Úcollectionsr   Úsympy.combinatoricsr   Úsympy.core.containersr   Úsympy.core.numbersr   r   r!   r-   r?   rF   rJ   r`   re   r2   rl   r[   r   r   ú<module>rq      sO   ðÛ Ý #å +Ý 'Ý &òòòò)ò$?òòò6ð [ð ¸tô r   