§
    PŠtjc  ã                   ó~   — 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dS )é    N)Údefaultdict)ÚPermutation)ÚTuple)ÚIntegerc                 ót   — i }d}t          | ¦  «        D ]#\  }}t          |¦  «        D ]}||f||<   |dz  }ŒŒ$|S )Nr   é   )Ú	enumerateÚrange)ÚsubranksÚmappingÚcounterÚiÚrankÚjs         úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/tensor/array/expressions/utils.pyÚ_get_mapping_from_subranksr   	   sa   € Ø€GØ€GÝ˜XÑ&Ô&ð ð ‰ˆˆ4Ý�t‘”ð 	ð 	ˆAØ ! 1˜vˆG�GÑØ�q‰LˆGˆGð	ð €Nó    c                 ó  ‡
— t          |¦  «        Š
ˆ
fd„|D ¦   «         }t          t          ¦  «        }|D ];}t          |¦  «        dk    r&|\  \  }}\  }}	||	f||         |<   ||f||         |	<   Œ;Œ<| t          |¦  «        fS )Nc                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó    •— g | ]
}‰|         ‘ŒS © r   )Ú.0r   r   s     €r   ú
<listcomp>z5_get_contraction_links.<locals>.<listcomp>.<listcomp>   s   ø€ Ð1Ð1Ð1¨!˜7 1œ:Ð1Ð1Ð1r   r   )r   r   r   s     €r   r   z*_get_contraction_links.<locals>.<listcomp>   s.   ø€ ÐOÐOÐO°aÐ1Ð1Ð1Ð1¨qÐ1Ñ1Ô1ÐOÐOÐOr   é   )r   r   ÚdictÚlen)Úargsr   Úcontraction_indicesÚcontraction_tuplesÚdlinksÚlinksÚarg1Úpos1Úarg2Úpos2r   s             @r   Ú_get_contraction_linksr&      s§   ø€ Ý(¨Ñ2Ô2€GØOÐOÐOÐOÐ;NÐOÑOÔOÐÝ�ÑÔ€FØ#ð ð ˆÝˆu‰:Œ:˜Š?ˆ?Ø).Ñ&‰LˆT�4™,˜4 Ø"&¨ ˆF�4ŒL˜ÑØ"&¨ ˆF�4ŒL˜ÑØð	 ð •�f‘”ÐÐr   c                 óL   — d„ | D ¦   «         } |                       d„ ¬¦  «         | S )Nc                 ó:   — g | ]}t          t          |¦  «        Ž ‘ŒS r   )r   Úsorted©r   r   s     r   r   z-_sort_contraction_indices.<locals>.<listcomp>"   s#   € ÐBÐBÐB¨Q•u�f Q™iœiÐ(ÐBÐBÐBr   c                 ó    — t          | ¦  «        S ©N)Úmin)Úxs    r   ú<lambda>z+_sort_contraction_indices.<locals>.<lambda>#   s   € ¥s¨1¡v¤v€ r   ©Úkey)Úsort)Úpairing_indicess    r   Ú_sort_contraction_indicesr4   !   s6   € ØBÐB°/ÐBÑBÔB€OØ×ÒÐ-Ð-ÐÑ.Ô.Ð.ØÐr   c                 ó¼  ‡ ‡— t          t          ¦  «        Št          ‰ ¦  «        D ]=\  }}t          |t          t
          f¦  «        rŒ"‰|                              |¦  «         Œ>d„ ‰                     ¦   «         D ¦   «         Šˆfd„‰ D ¦   «         }t          ‰¦  «        }|                     ˆ fd„¬¦  «         ˆfd„|D ¦   «         }||z  }t          |¦  «        }||fS )Nc                 ó@   — i | ]\  }}t          |¦  «        d k    ¯||“ŒS )r   ©r   )r   ÚkÚvs      r   ú
<dictcomp>z)_get_diagonal_indices.<locals>.<dictcomp>.   s)   € ÐPÐPÐP¡  AÅSÈÁVÄVÈaÂZÀZ˜˜1ÀZÀZÀZr   c                 ó   •— g | ]}|‰v¯|‘Œ	S r   r   ©r   r   Úaxes_contractions     €r   r   z)_get_diagonal_indices.<locals>.<listcomp>0   s$   ø€ ÐMÐMÐM˜°1Ð<LÐ3LÐ3L�1Ð3LÐ3LÐ3Lr   c                 ó.   •— ‰                      | ¦  «        S r,   )Úindex)r.   Úflattened_indicess    €r   r/   z'_get_diagonal_indices.<locals>.<lambda>2   s   ø€ Ð$5×$;Ò$;¸AÑ$>Ô$>€ r   r0   c                 ó:   •— g | ]}t          ‰|         ¦  «        ‘ŒS r   )Útupler<   s     €r   r   z)_get_diagonal_indices.<locals>.<listcomp>3   s'   ø€ ÐIÐIÐI°q�Ð.¨qÔ1Ñ2Ô2ÐIÐIÐIr   )
r   Úlistr	   Ú
isinstanceÚintr   ÚappendÚitemsr2   rB   )r@   r   ÚindÚret_indicesÚdiag_indicesÚdiagonal_indicesr=   s   `     @r   Ú_get_diagonal_indicesrL   '   s	  øø€ Ý"¥4Ñ(Ô(ÐÝÐ-Ñ.Ô.ð (ð (‰ˆˆ3Ý�c�C¥˜>Ñ*Ô*ð 	àØ˜Ô×$Ò$ QÑ'Ô'Ð'Ð'ØPÐPÐ)9×)?Ò)?Ñ)AÔ)AÐPÑPÔPÐàMÐMÐMÐMÐ/ÐMÑMÔM€KÝÐ(Ñ)Ô)€LØ×ÒÐ>Ð>Ð>Ð>ÐÑ?Ô?Ð?ØIÐIÐIÐI¸LÐIÑIÔIÐØ�<Ñ€KÝ˜Ñ$Ô$€KØ˜[Ð(Ð(r   c                 ó°   — t          | ¦  «        D ]3\  }}||k    r|c S t          |t          t          f¦  «        r||v r|c S Œ4t	          |›d| ›�¦  «        ‚)Nz not found in )r	   rD   ÚsetÚ	frozensetÚ
IndexError)Ú
subindicesrH   r   Úsinds       r   Ú_get_argindexrS   9   sq   € Ý˜ZÑ(Ô(ð ð ‰ˆˆ4Ø�$Š;ˆ;ØˆHˆHˆHÝ�d�S¥)Ð,Ñ-Ô-ð 	°#¸°+°+ØˆHˆHˆHøÝ
¨S¨S¨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   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r,   ©Ú$_apply_recursively_over_nested_lists©r   r   Úfuncs     €r   ú	<genexpr>z7_apply_recursively_over_nested_lists.<locals>.<genexpr>D   s.   øè è € ÐPÐPÀqÕ9¸$ÀÑBÔBÐPÐPÐPÐPÐPÐPr   c              3   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r,   rV   rX   s     €r   rZ   z7_apply_recursively_over_nested_lists.<locals>.<genexpr>F   s/   øè è € ÐYÐYÐPQÕBÀ4ÈÑKÔKÐYÐYÐYÐYÐYÐYr   )rD   rB   rC   r   Úfromiter)rY   Úarrs   ` r   rW   rW   B   s…   ø€ Ý�#��t¥UÐ+Ñ,Ô,ð ÝÐPÐPÐPÐPÈCÐPÑPÔPÑPÔPÐPÝ	�C�Ñ	Ô	ð ÝŒ~ÐYÐYÐYÐYÐUXÐYÑYÔYÑYÔYÐYàˆt�C‰yŒyÐr   c                 ó†  ‡ ‡‡‡— ddiŠd}d}|t          ‰ ¦  «        k     rtd}||z   t          ‰ ¦  «        k     r4‰ |         |z   ‰ ||z            k    rn|dz  }||z   t          ‰ ¦  «        k     °4||z  }|‰‰ |         <   ||z  }|t          ‰ ¦  «        k     °tt          ‰                     ¦   «         ¦  «        Šˆˆfd„Šˆ ˆfd„}|S )Nr   r   c                 óL   •— ‰‰t          j        ‰| ¦  «        dz
                    S )Nr   )ÚbisectÚbisect_right)ÚidxÚ
shift_keysÚshiftss    €€r   rY   z8_build_push_indices_up_func_transformation.<locals>.funcZ   s%   ø€ Ø�j¥Ô!4°ZÀÑ!EÔ!EÀaÑ!GÔHÔIÐIr   c                 ó,   •— | ‰v rd S |  ‰| ¦  «        z
  S r,   r   )r   Úflattened_contraction_indicesrY   s    €€r   Ú	transformz=_build_push_indices_up_func_transformation.<locals>.transform]   s&   ø€ ØÐ-Ð-Ð-Ø�4à�t�t˜A‘w”w‘;Ðr   )r   r)   Úkeys)rf   r   Ú
cumulativer   rg   rY   rc   rd   s   `    @@@r   Ú*_build_push_indices_up_func_transformationrj   K   s-  øøøø€ Ø�ˆV€FØ	€AØ€JØ
�cÐ/Ñ0Ô0Ò
0Ð
0ØˆØ�‰c•CÐ5Ñ6Ô6Ò6Ð6Ø,¨QÔ/°!Ñ3Ð7TÐUVÐWXÑUXÔ7YÒYÐYØØ�‰FˆAð �‰c•CÐ5Ñ6Ô6Ò6Ð6ð 	�a‰ˆ
Ø3=ˆÐ,¨QÔ/Ñ0Ø	ˆQ‰ˆð �cÐ/Ñ0Ô0Ò
0Ð
0õ ˜Ÿš™œÑ&Ô&€JðJð Jð Jð Jð Jð Jðð ð ð ð ð ð Ðr   c                 ó`   ‡ ‡— ‰ d         dz   }ˆ fd„t          |¦  «        D ¦   «         Šˆfd„}|S )Néÿÿÿÿr   c                 ó   •— g | ]}|‰v¯|‘Œ	S r   r   )r   r   rf   s     €r   r   z@_build_push_indices_down_func_transformation.<locals>.<listcomp>i   s$   ø€ ÐLÐLÐL�A QÐ.KÐ%KÐ%KˆaÐ%KÐ%KÐ%Kr   c                 óv   •— | t          ‰¦  «        k     r‰|          S | ‰d         z   t          ‰¦  «        z
  dz   S )Nrl   r   r7   )r   rd   s    €r   rg   z?_build_push_indices_down_func_transformation.<locals>.transformk   s:   ø€ Ø�s�6‰{Œ{Š?ˆ?Ø˜!”9Ðà�v˜b”z‘>¥C¨¡K¤KÑ/°!Ñ3Ð3r   )r
   )rf   ÚNrg   rd   s   `  @r   Ú,_build_push_indices_down_func_transformationrp   f   sS   øø€ Ø% bÔ)¨!Ñ+€AàLÐLÐLÐL�˜q™œÐLÑLÔL€Fð4ð 4ð 4ð 4ð 4ð Ðr   ÚpermÚtarget_listc                 óˆ   — d„ t          | j        ¦  «        D ¦   «         }t          |¦  «        D ]\  }}|| | |¦  «        <   Œ|S )z<
    Permute a list according to the given permutation.
    c                 ó   — g | ]}d ‘ŒS r,   r   r*   s     r   r   z._apply_permutation_to_list.<locals>.<listcomp>x   s   € Ð/Ð/Ð/˜�Ð/Ð/Ð/r   )r
   Úsizer	   )rq   rr   Únew_listr   Úes        r   Ú_apply_permutation_to_listrx   t   sV   € ð 0Ð/�e D¤IÑ.Ô.Ð/Ñ/Ô/€HÝ˜+Ñ&Ô&ð ð ‰ˆˆ1Øˆ���a‘”ÑÐØ€Or   )r`   Úcollectionsr   Úsympy.combinatoricsr   Úsympy.core.containersr   Úsympy.core.numbersr   r   r&   r4   rL   rS   rW   rj   rp   rC   rx   r   r   r   ú<module>r}      sú   ðØ €€€Ø #Ð #Ð #Ð #Ð #Ð #à +Ð +Ð +Ð +Ð +Ð +Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ðð ð ðð ð ð)ð )ð )ð$?ð ?ð ?ðð ð ðð ð ð6ð ð ð [ð ¸tð ð ð ð ð ð r   