ó
    ‰*£h�k  ã                  óN  • S SK Jr  S SKJr  S SKJrJrJrJrJ	r	  S SK
Jr  S SKJr  S SKJrJr  S SKJr  S SKJrJrJrJr  S S	KJrJr  S S
KJr  S SKJrJr  S SK J!r!  S SK"J#r#  S SK$J%r%  S SK&J'r'  S SK(J)r)  S SK*J+r+  S,S jr, " S S\5      r-\)" \-\5      S 5       r.\)" \-\-5      S 5       r.S r/\/" \5      /\/" \	5      /S.\R`                  \-'   S-S jr1S r2 " S S\5      r3 " S S\-5      r4S  r5 " S! S"5      r6S# r7S$S%K8J9r9  S$S&K:J;r;  S$S'K<J=r=  S$S(K>J?r?  S$S)K@JArA  S$S*KBJCrCJDrD  S$S+KEJFrF  g).é    )Úannotations©Úwraps)ÚSÚIntegerÚBasicÚMulÚAdd)Úcheck_assumptions)Úcall_highest_priority)ÚExprÚExprBuilder)Ú	FuzzyBool)ÚStrÚDummyÚsymbolsÚSymbol)ÚSympifyErrorÚ_sympify)Ú
SYMPY_INTS)Ú	conjugateÚadjoint)ÚKroneckerDelta)ÚNonSquareMatrixError)Ú
MatrixKind)Ú
MatrixBase)Údispatch)Ú
filldedentNc                ó   ^• U4S jnU$ )Nc                ó4   >^ • [        T 5      U U4S j5       nU$ )Nc                óP   >•  [        U5      nT" X5      $ ! [         a    Ts $ f = f©N)r   r   )ÚaÚbÚfuncÚretvals     €€Ú_/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/matrices/expressions/matexpr.pyÚ__sympifyit_wrapperÚ5_sympifyit.<locals>.deco.<locals>.__sympifyit_wrapper   s/   ø€ ðÜ˜Q“K�Ù˜A“zÐ!øÜó Ø’ðús   ƒ –%¤%r   )r%   r(   r&   s   ` €r'   ÚdecoÚ_sympifyit.<locals>.deco   s!   ù€ Ü	ˆt‹õ	ó 
ð	ð #Ð"ó    © )Úargr&   r*   s    ` r'   Ú
_sympifyitr/      s   ø€ õ	#ð €Kr,   c                  óš  ^ • \ rS rSr% SrSrS\S'   SrSrSr	S	\S
'   Sr
S	\S'   SrS\S'   SrSrSrSrSrSrSrSrSr\" 5       rS\S'   S r\SSS j5       r\S 5       r\S 5       rS rS r\" S\5      \ " S5      S 5       5       r!\" S\5      \ " S5      S 5       5       r"\" S\5      \ " S5      S 5       5       r#\" S\5      \ " S5      S 5       5       r$\" S\5      \ " S 5      S! 5       5       r%\" S\5      \ " S 5      S" 5       5       r&\" S\5      \ " S#5      S$ 5       5       r'\" S\5      \ " S#5      S% 5       5       r(\" S\5      \ " S&5      S' 5       5       r)\" S\5      \ " S(5      S) 5       5       r*\" S\5      \ " S*5      S+ 5       5       r+\" S\5      \ " S,5      S- 5       5       r,\S. 5       r-\S/ 5       r.\STS0 j5       r/S1 r0SUS2 jr1S3 r2S4 r3S5 r4S6 r5S7 r6S8 r7S9 r8S: r9S; r:U 4S< jr;\<S= 5       r=S> r>S? r?SVS@ jr@SA rASB rB\SC 5       rCSD rDSE rESF rF\SG 5       rGSH rHSI rISWSJ jrJSK rKSL rL\MS4SM jrNSN rOSO rPSP rQ\RSXSQ j5       rSSR rTSrUU =rV$ )YÚ
MatrixExpré%   a`  Superclass for Matrix Expressions

MatrixExprs represent abstract matrices, linear transformations represented
within a particular basis.

Examples
========

>>> from sympy import MatrixSymbol
>>> A = MatrixSymbol('A', 3, 3)
>>> y = MatrixSymbol('y', 3, 1)
>>> x = (A.T*A).I * A * y

See Also
========

MatrixSymbol, MatAdd, MatMul, Transpose, Inverse
r-   ztuple[str, ...]Ú	__slots__Fg      &@TÚboolÚ	is_MatrixÚis_MatrixExprNr   Úis_Identityr   Úkindc                óV   • [        [        U5      n[        R                  " U /UQ70 UD6$ r"   )Úmapr   r   Ú__new__)ÚclsÚargsÚkwargss      r'   r;   ÚMatrixExpr.__new__Q   s'   € Ü”8˜TÓ"ˆÜ�}Š}˜SÐ2 4Ò2¨6Ñ2Ð2r,   c                ó   • [         er"   ©ÚNotImplementedError©Úselfs    r'   ÚshapeÚMatrixExpr.shapeW   s   € ä!Ð!r,   c                ó   • [         $ r"   ©ÚMatAddrC   s    r'   Ú_add_handlerÚMatrixExpr._add_handler[   ó   € äˆr,   c                ó   • [         $ r"   ©ÚMatMulrC   s    r'   Ú_mul_handlerÚMatrixExpr._mul_handler_   rL   r,   c                óR   • [        [        R                  U 5      R                  5       $ r"   )rO   r   ÚNegativeOneÚdoitrC   s    r'   Ú__neg__ÚMatrixExpr.__neg__c   s   € Ü”a—m‘m TÓ*×/Ñ/Ó1Ð1r,   c                ó   • [         er"   rA   rC   s    r'   Ú__abs__ÚMatrixExpr.__abs__f   s   € Ü!Ð!r,   ÚotherÚ__radd__c                ó4   • [        X5      R                  5       $ r"   ©rI   rT   ©rD   rZ   s     r'   Ú__add__ÚMatrixExpr.__add__i   ó   € ô �dÓ"×'Ñ'Ó)Ð)r,   r_   c                ó4   • [        X5      R                  5       $ r"   r]   r^   s     r'   r[   ÚMatrixExpr.__radd__n   ó   € ô �eÓ"×'Ñ'Ó)Ð)r,   Ú__rsub__c                ó6   • [        X* 5      R                  5       $ r"   r]   r^   s     r'   Ú__sub__ÚMatrixExpr.__sub__s   s   € ô �d˜FÓ#×(Ñ(Ó*Ð*r,   rg   c                ó6   • [        X* 5      R                  5       $ r"   r]   r^   s     r'   re   ÚMatrixExpr.__rsub__x   s   € ô �e˜UÓ#×(Ñ(Ó*Ð*r,   Ú__rmul__c                ó4   • [        X5      R                  5       $ r"   ©rO   rT   r^   s     r'   Ú__mul__ÚMatrixExpr.__mul__}   ra   r,   c                ó4   • [        X5      R                  5       $ r"   rm   r^   s     r'   Ú
__matmul__ÚMatrixExpr.__matmul__‚   ra   r,   rn   c                ó4   • [        X5      R                  5       $ r"   rm   r^   s     r'   rk   ÚMatrixExpr.__rmul__‡   rd   r,   c                ó4   • [        X5      R                  5       $ r"   rm   r^   s     r'   Ú__rmatmul__ÚMatrixExpr.__rmatmul__Œ   rd   r,   Ú__rpow__c                ó4   • [        X5      R                  5       $ r"   )ÚMatPowrT   r^   s     r'   Ú__pow__ÚMatrixExpr.__pow__‘   ra   r,   r{   c                ó   • [        S5      e)NzMatrix Power not definedrA   r^   s     r'   rx   ÚMatrixExpr.__rpow__–   s   € ô "Ð"<Ó=Ð=r,   Ú__rtruediv__c                ó,   • X[         R                  -  -  $ r"   )r   rS   r^   s     r'   Ú__truediv__ÚMatrixExpr.__truediv__›   s   € ð œQŸ]™]Ñ*Ñ*Ð*r,   r�   c                ó   • [        5       er"   rA   r^   s     r'   r   ÚMatrixExpr.__rtruediv__    s   € ô "Ó#Ð#r,   c                ó    • U R                   S   $ ©Nr   ©rE   rC   s    r'   ÚrowsÚMatrixExpr.rows¦   ó   € à�z‰z˜!‰}Ðr,   c                ó    • U R                   S   $ ©Né   r‡   rC   s    r'   ÚcolsÚMatrixExpr.colsª   rŠ   r,   c                óˆ   • U R                   u  p[        U[        5      (       a  [        U[        5      (       a  X:H  $ X:X  a  gg ©NT)rE   Ú
isinstancer   )rD   rˆ   rŽ   s      r'   Ú	is_squareÚMatrixExpr.is_square®   s9   € à—Z‘Z‰
ˆÜ�dœG×$Ñ$¬°D¼'×)BÑ)BØ‘<ÐØ‹<ØØr,   c                ó0   • SSK Jn  U" [        U 5      5      $ ©Nr   )ÚAdjoint)Ú"sympy.matrices.expressions.adjointr—   Ú	Transpose©rD   r—   s     r'   Ú_eval_conjugateÚMatrixExpr._eval_conjugate·   s   € Ý>Ù”y “Ó'Ð'r,   c                ó"   • U R                  5       $ r"   )Ú_eval_as_real_imag)rD   ÚdeepÚhintss      r'   Úas_real_imagÚMatrixExpr.as_real_imag»   s   € Ø×&Ñ&Ó(Ð(r,   c                óš   • [         R                  X R                  5       -   -  nX R                  5       -
  S[         R                  -  -  nX4$ ©Né   )r   ÚHalfr›   ÚImaginaryUnit)rD   ÚrealÚims      r'   rž   ÚMatrixExpr._eval_as_real_imag¾   sC   € Ü�v‰v˜× 4Ñ 4Ó 6Ñ6Ñ7ˆØ×)Ñ)Ó+Ñ+¨a´·±Ñ.?Ñ@ˆØˆzÐr,   c                ó   • [        U 5      $ r"   ©ÚInverserC   s    r'   Ú_eval_inverseÚMatrixExpr._eval_inverseÃ   ó   € Ü�t‹}Ðr,   c                ó   • [        U 5      $ r"   ©ÚDeterminantrC   s    r'   Ú_eval_determinantÚMatrixExpr._eval_determinantÆ   s   € Ü˜4Ó Ð r,   c                ó   • [        U 5      $ r"   ©r™   rC   s    r'   Ú_eval_transposeÚMatrixExpr._eval_transposeÉ   ó   € Ü˜‹Ðr,   c                ó   • g r"   r-   rC   s    r'   Ú_eval_traceÚMatrixExpr._eval_traceÌ   s   € Ør,   c                ó   • [        X5      $ )zÁ
Override this in sub-classes to implement simplification of powers.  The cases where the exponent
is -1, 0, 1 are already covered in MatPow.doit(), so implementations can exclude these cases.
©rz   )rD   Úexps     r'   Ú_eval_powerÚMatrixExpr._eval_powerÏ   s   € ô
 �dÓ Ð r,   c           
     óž   • U R                   (       a  U $ SSKJn  U R                  " U R                   Vs/ s H  o2" U40 UD6PM     sn6 $ s  snf )Nr   )Úsimplify)Úis_AtomÚsympy.simplifyrÄ   r%   r=   )rD   r>   rÄ   Úxs       r'   Ú_eval_simplifyÚMatrixExpr._eval_simplifyÖ   s@   € Ø�<�<ØˆKå/Ø—9’9¸d¿iºiÓHºi¸˜x¨Ñ4¨VÔ4¹iÑHÐIÐIùÒHs   ´A
c                ó   • SSK Jn  U" U 5      $ r–   )r˜   r—   rš   s     r'   Ú_eval_adjointÚMatrixExpr._eval_adjointÝ   s   € Ý>Ù�t‹}Ðr,   c                ó0   • [         R                  " XU5      $ r"   )r   Ú_eval_derivative_n_times)rD   rÇ   Úns      r'   rÎ   Ú#MatrixExpr._eval_derivative_n_timesá   s   € Ü×-Ò-¨d°qÓ9Ð9r,   c                ór   >• U R                  U5      (       a  [        TU ]	  U5      $ [        U R                  6 $ r"   )ÚhasÚsuperÚ_eval_derivativeÚ
ZeroMatrixrE   )rD   rÇ   Ú	__class__s     €r'   rÔ   ÚMatrixExpr._eval_derivativeä   s/   ø€ à�8‰8�A�;‰;ä‘7Ñ+¨AÓ.Ð.ä˜tŸz™zÐ*Ð*r,   c                óˆ   • UR                   (       + =(       a    [        USSS9nUSL a  [        SR                  U5      5      eg)z2Helper function to check invalid matrix dimensionsT)ÚintegerÚnonnegativeFz?The dimension specification {} should be a nonnegative integer.N)Úis_Floatr   Ú
ValueErrorÚformat)r<   ÚdimÚoks      r'   Ú
_check_dimÚMatrixExpr._check_dimì   sK   € ð —‘Ô÷ 1Ô"3Ø˜¨4ñ#1ˆà�Š;Üð)ß)/©°«ó6ð 6ð r,   c                óF   • [        SU R                  R                  -  5      e)NzIndexing not implemented for %s)rB   rÖ   Ú__name__©rD   ÚiÚjr>   s       r'   Ú_entryÚMatrixExpr._entry÷   s#   € Ü!Ø-°·±×0GÑ0GÑGóIð 	Ir,   c                ó   • [        U 5      $ r"   )r   rC   s    r'   r   ÚMatrixExpr.adjointû   r°   r,   c                ó&   • [         R                  U 4$ )z1Efficiently extract the coefficient of a product.)r   ÚOne)rD   Úrationals     r'   Úas_coeff_MulÚMatrixExpr.as_coeff_Mulþ   s   € ä�u‰u�dˆ{Ðr,   c                ó   • [        U 5      $ r"   )r   rC   s    r'   r   ÚMatrixExpr.conjugate  rº   r,   c                ó   • SSK Jn  U" U 5      $ )Nr   ©Ú	transpose)Ú$sympy.matrices.expressions.transposerô   )rD   rô   s     r'   rô   ÚMatrixExpr.transpose  s   € ÝBÙ˜‹Ðr,   c                ó"   • U R                  5       $ )zMatrix transpositionró   rC   s    r'   ÚTÚMatrixExpr.T	  s   € ð �~‰~ÓÐr,   c                óV   • U R                   SL a  [        S5      eU R                  5       $ )NFzInverse of non-square matrix)r“   r   r®   rC   s    r'   ÚinverseÚMatrixExpr.inverse  s)   € Ø�>‰>˜UÒ"Ü&Ð'EÓFÐFØ×!Ñ!Ó#Ð#r,   c                ó"   • U R                  5       $ r"   ©rû   rC   s    r'   ÚinvÚMatrixExpr.inv  s   € Ø�|‰|‹~Ðr,   c                ó   • SSK Jn  U" U 5      $ )Nr   )Údet)Ú&sympy.matrices.expressions.determinantr  )rD   r  s     r'   r  ÚMatrixExpr.det  s   € Ý>Ù�4‹yÐr,   c                ó"   • U R                  5       $ r"   rþ   rC   s    r'   ÚIÚMatrixExpr.I  s   € à�|‰|‹~Ðr,   c                ó$  • S nU" U5      =(       a    U" U5      =(       ap    U R                   S L =(       d*    XR                   * :¬  S:g  =(       a    XR                   :  S:g  =(       a*    X R                  * :¬  S:g  =(       a    X R                  :  S:g  $ )Nc                óB   • [        U [        [        [        [        45      $ r"   )r’   Úintr   r   r   )Úidxs    r'   Úis_validÚ(MatrixExpr.valid_index.<locals>.is_valid  s   € Ü˜c¤C¬´&¼$Ð#?Ó@Ð@r,   F)rˆ   rŽ   )rD   rå   ræ   r  s       r'   Úvalid_indexÚMatrixExpr.valid_index  s‡   € ò	Aá˜“÷ H¡¨£÷ HØ—‘˜dÐ"÷ HØ—y‘y�j‘ UÑ*×G°·I±I±À%Ñ/G÷Hð —y‘y�j‘ UÑ*÷Hð 12·I±I±À%Ñ/Gð	Ir,   c                ó€  • [        U[        5      (       d$  [        U[        5      (       a  SSKJn  U" XS5      $ [        U[        5      (       a›  [        U5      S:X  aŒ  Uu  p4[        U[        5      (       d  [        U[        5      (       a  SSKJn  U" XU5      $ [        U5      [        U5      pCU R                  X45      S:w  a  U R                  X45      $ [        SU< SU< S35      e[        U[        [        45      (       a~  U R                  u  pV[        U[        5      (       d  [        [        S	5      5      e[        U5      nX-  nX-  nU R                  X45      S:w  a  U R                  X45      $ [        S
U-  5      e[        U[        [        45      (       a  [        [        S5      5      e[        SU -  5      e)Nr   )ÚMatrixSlice)r   Nr�   r¥   FzInvalid indices (z, Ú)zo
                    Single indexing is only supported when the number
                    of columns is known.zInvalid index %szj
                Only integers may be used when addressing the matrix
                with a single index.zInvalid index, wanted %s[i,j])r’   ÚtupleÚsliceÚ sympy.matrices.expressions.slicer  Úlenr   r  rç   Ú
IndexErrorr   r   rE   r   r   r   )rD   Úkeyr  rå   ræ   rˆ   rŽ   s          r'   Ú__getitem__ÚMatrixExpr.__getitem__&  s  € Ü˜#œu×%Ñ%¬*°S¼%×*@Ñ*@ÝDÙ˜t¨,Ó7Ð7Ü�cœ5×!Ñ!¤c¨#£h°!£mØ‰DˆAÜ˜!œU×#Ñ#¤z°!´U×';Ñ';ÝHÙ" 4¨AÓ.Ð.Ü˜A“;¤¨£ˆqØ×Ñ Ó%¨Ó.Ø—{‘{ 1Ó(Ð(å »qÃ!Ð!DÓEÐEÜ˜œj¬'Ð2×3Ñ3àŸ™‰JˆDä˜d¤G×,Ñ,Ü ¤ð -,ó "-ó .ð .ô ˜3“-ˆCØ‘ˆAØ‘
ˆAØ×Ñ Ó%¨Ó.Ø—{‘{ 1Ó(Ð(ä Ð!3°cÑ!9Ó:Ð:Ü˜œf¤d˜^×,Ñ,ÜœZð )(ó )ó *ð *ô Ð8¸4Ñ?Ó@Ð@r,   c                ó¤   • [        U R                  [        [        45      (       + =(       d%    [        U R                  [        [        45      (       + $ r"   )r’   rˆ   r   r   rŽ   rC   s    r'   Ú_is_shape_symbolicÚMatrixExpr._is_shape_symbolicI  s:   € Ü˜tŸy™y¬:´wÐ*?Ó@Ô@÷ @Ü˜dŸi™i¬*´gÐ)>Ó?Ô?ð	Ar,   c                ó  • U R                  5       (       a  [        S5      eSSKJn  U" [	        U R
                  5       VVs/ s H-  n[	        U R                  5       Vs/ s H	  nXU4   PM     snPM/     snn5      $ s  snf s  snnf )a8  
Returns a dense Matrix with elements represented explicitly

Returns an object of type ImmutableDenseMatrix.

Examples
========

>>> from sympy import Identity
>>> I = Identity(3)
>>> I
I
>>> I.as_explicit()
Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])

See Also
========
as_mutable: returns mutable Matrix type

z<Matrix with symbolic shape cannot be represented explicitly.r   ©ÚImmutableDenseMatrix)r  rÜ   Úsympy.matrices.immutabler   Úrangerˆ   rŽ   )rD   r   rå   ræ   s       r'   Úas_explicitÚMatrixExpr.as_explicitM  s�   € ð0 ×"Ñ"×$Ñ$Üð4ó5ð 5õ 	BÙ#ä%*¨4¯9©9Ô%5ô%7â%5 ô &+¨4¯9©9Ô%5ó&7Ú%5 ð '+¨a¨4¤jÙ%5ô&7á%5ò%7ó 8ð 	8ùò &7ùó %7s   ÁB
ÁA=Á.B
Á=B
c                ó>   • U R                  5       R                  5       $ )a#  
Returns a dense, mutable matrix with elements represented explicitly

Examples
========

>>> from sympy import Identity
>>> I = Identity(3)
>>> I
I
>>> I.shape
(3, 3)
>>> I.as_mutable()
Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])

See Also
========
as_explicit: returns ImmutableDenseMatrix
)r#  Ú
as_mutablerC   s    r'   r&  ÚMatrixExpr.as_mutablen  s   € ð. ×ÑÓ!×,Ñ,Ó.Ð.r,   c                óê   • Ub  U(       d  [        S5      eSSKJn  U" U R                  [        S9n[        U R                  5       H)  n[        U R                  5       H  nXU4   XEU4'   M     M+     U$ )Nz=Cannot implement copy=False when converting Matrix to ndarrayr   )Úempty)Údtype)Ú	TypeErrorÚnumpyr)  rE   Úobjectr"  rˆ   rŽ   )rD   r*  Úcopyr)  r#   rå   ræ   s          r'   Ú	__array__ÚMatrixExpr.__array__‡  sg   € ØÑ¦DÜÐ[Ó\Ð\ÝÙ�$—*‘*¤FÑ+ˆÜ�t—y‘yÖ!ˆAÜ˜4Ÿ9™9Ö%�Ø !˜t™*��Q�$“ó &ñ "ð ˆr,   c                ó@   • U R                  5       R                  U5      $ )z•
Test elementwise equality between matrices, potentially of different
types

>>> from sympy import Identity, eye
>>> Identity(3).equals(eye(3))
True
)r#  Úequalsr^   s     r'   r2  ÚMatrixExpr.equals‘  s   € ð ×ÑÓ!×(Ñ(¨Ó/Ð/r,   c                ó   • U $ r"   r-   rC   s    r'   ÚcanonicalizeÚMatrixExpr.canonicalizeœ  ó   € Øˆr,   c                ó8   • [         R                  [        U 5      4$ r"   )r   rì   rO   rC   s    r'   Úas_coeff_mmulÚMatrixExpr.as_coeff_mmulŸ  s   € Ü�u‰u”f˜T“lÐ"Ð"r,   c                óŠ   • SSK Jn  SSKJn  / nUb  UR	                  U5        Ub  UR	                  U5        U" XS9nU" U5      $ )aî  
Parse expression of matrices with explicitly summed indices into a
matrix expression without indices, if possible.

This transformation expressed in mathematical notation:

`\sum_{j=0}^{N-1} A_{i,j} B_{j,k} \Longrightarrow \mathbf{A}\cdot \mathbf{B}`

Optional parameter ``first_index``: specify which free index to use as
the index starting the expression.

Examples
========

>>> from sympy import MatrixSymbol, MatrixExpr, Sum
>>> from sympy.abc import i, j, k, l, N
>>> A = MatrixSymbol("A", N, N)
>>> B = MatrixSymbol("B", N, N)
>>> expr = Sum(A[i, j]*B[j, k], (j, 0, N-1))
>>> MatrixExpr.from_index_summation(expr)
A*B

Transposition is detected:

>>> expr = Sum(A[j, i]*B[j, k], (j, 0, N-1))
>>> MatrixExpr.from_index_summation(expr)
A.T*B

Detect the trace:

>>> expr = Sum(A[i, i], (i, 0, N-1))
>>> MatrixExpr.from_index_summation(expr)
Trace(A)

More complicated expressions:

>>> expr = Sum(A[i, j]*B[k, j]*A[l, k], (j, 0, N-1), (k, 0, N-1))
>>> MatrixExpr.from_index_summation(expr)
A*B.T*A.T
r   )Úconvert_indexed_to_array©Úconvert_array_to_matrix)Úfirst_indices)Ú4sympy.tensor.array.expressions.from_indexed_to_arrayr<  Ú3sympy.tensor.array.expressions.from_array_to_matrixr>  Úappend)ÚexprÚfirst_indexÚ
last_indexÚ
dimensionsr<  r>  r?  Úarrs           r'   Úfrom_index_summationÚMatrixExpr.from_index_summation¢  sN   € õT 	bÝ_ØˆØÑ"Ø× Ñ  Ô-ØÑ!Ø× Ñ  Ô,Ù& tÑIˆÙ& sÓ+Ð+r,   c                ó   • SSK Jn  U" X5      $ )Nr�   )ÚElementwiseApplyFunction)Ú	applyfuncrK  )rD   r%   rK  s      r'   rL  ÚMatrixExpr.applyfuncÖ  s   € Ý7Ù'¨Ó3Ð3r,   )Úreturnztuple[Expr, Expr])rN  zbool | None)T©F)rN  r4   )NNN)Wrã   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r3   Ú__annotations__Ú	_iterableÚ_op_priorityr5   r6   r7   Ú
is_InverseÚis_TransposeÚis_ZeroMatrixÚ	is_MatAddÚ	is_MatMulÚis_commutativeÚ	is_numberÚ	is_symbolÚ	is_scalarr   r8   r;   ÚpropertyrE   rJ   rP   rU   rX   r/   ÚNotImplementedr   r_   r[   rg   re   rn   rq   rk   rv   r{   rx   r�   r   rˆ   rŽ   r“   r›   r¡   rž   r®   r´   r¸   r¼   rÁ   rÈ   rË   rÎ   rÔ   Úclassmethodrà   rç   r   rî   r   rô   rø   rû   rÿ   r  r  r  r  r  r#  r&  r-  r/  r2  r5  r9  ÚstaticmethodrH  rL  Ú__static_attributes__Ú__classcell__)rÖ   s   @r'   r1   r1   %   sØ  ø‡ ñð$ "$€IˆÓ#ð
 €Ià€Là€IˆtÓØ€M�4ÓØ!€K�Ó!Ø€JØ€LØ€MØ€IØ€Ià€NØ€IØ€IØ€Iá!“|€Dˆ*Ó#ò3ð ó"ó ð"ð ñó ðð ñó ðò2ò"ñ �˜Ó(Ù˜:Ó&ñ*ó 'ó )ð*ñ �˜Ó(Ù˜9Ó%ñ*ó &ó )ð*ñ �˜Ó(Ù˜:Ó&ñ+ó 'ó )ð+ñ �˜Ó(Ù˜9Ó%ñ+ó &ó )ð+ñ �˜Ó(Ù˜:Ó&ñ*ó 'ó )ð*ñ �˜Ó(Ù˜:Ó&ñ*ó 'ó )ð*ñ �˜Ó(Ù˜9Ó%ñ*ó &ó )ð*ñ �˜Ó(Ù˜9Ó%ñ*ó &ó )ð*ñ �˜Ó(Ù˜:Ó&ñ*ó 'ó )ð*ñ �˜Ó(Ù˜9Ó%ñ>ó &ó )ð>ñ �˜Ó(Ù˜>Ó*ñ+ó +ó )ð+ñ �˜Ó(Ù˜=Ó)ñ$ó *ó )ð$ð ñó ðð ñó ðð óó ðò(ô)òò
ò!òòò!òJòò:õ+ð ñ6ó ð6òIòôòòð ñ ó ð ò$ò
òð ñó ðòIò!AôFAò8òB/ð2 %¨4ô ò	0òò#ð ó1,ó ð1,÷f4ð 4r,   r1   c                ó   • g)NFr-   ©ÚlhsÚrhss     r'   Ú_eval_is_eqrj  Û  s   € àr,   c                ób   • U R                   UR                   :w  a  gX-
  R                  (       a  gg )NFT)rE   rY  rg  s     r'   rj  rj  ß  s(   € à
‡y�y�C—I‘IÓØØ‰	× × Øð !r,   c                ó   ^ • U 4S jnU$ )Nc                ó   >• [         [        [        [        0T   n/ n/ nU R                   H<  n[        U[        5      (       a  UR                  U5        M+  UR                  U5        M>     U(       d  TR                  U5      $ U(       a…  T[         :X  aW  [        [        U5      5       H>  nX5   R                  (       a  M  X5   R                  TR                  U5      5      X5'   / n  O'   O$TR                  X!" U6 R                  SS9/-   5      $ U[        :X  a  U" U6 R                  SS9$ U" TR                  U5      /UQ76 R                  SS9$ )NF)rŸ   )r	   rO   r
   rI   r=   r’   r1   rB  Ú
_from_argsr"  r  r6   rn   rT   )rC  Ú	mat_classÚnonmatricesÚmatricesÚtermrå   r<   s         €r'   Ú_postprocessorÚ)get_postprocessor.<locals>._postprocessorç  s0  ø€ äœ&¤#¤vÐ.¨sÑ3ˆ	ØˆØˆØ—I”IˆDÜ˜$¤
×+Ñ+Ø—‘ Ö%à×"Ñ" 4Ö(ñ	 ö Ø—>‘> +Ó.Ð.æØ”c‹zÜœs 8›}Ö-�AØ#™;×4×4Ñ4ð '/¡k×&9Ñ&9¸#¿.¹.ÈÓ:UÓ&V˜™Ø&(˜Ùò .ð —~‘~ k°YÀÐ5I×5NÑ5NÐTYÐ5NÐ5ZÐ4[Ñ&[Ó\Ð\àœÓÙ˜hÐ'×,Ñ,°%Ð,Ð8Ð8Ù˜Ÿ™¨Ó4Ð@°xÒ@×EÑEÈ5ÐEÐQÐQr,   r-   )r<   rs  s   ` r'   Úget_postprocessorru  æ  s   ø€ õ"RðF Ðr,   )r	   r
   c                óÖ   • [        U [        5      (       d  [        U[        5      (       a  SnU(       a  [        X5      $ SSKJn  SSKJn  SSKJn  U" U 5      nU" Xa5      nU" U5      nU$ )NTr   )Úconvert_matrix_to_array)Úarray_deriver=  )	r’   r   Ú _matrix_derivative_old_algorithmÚ3sympy.tensor.array.expressions.from_matrix_to_arrayrw  Ú4sympy.tensor.array.expressions.arrayexpr_derivativesrx  rA  r>  )	rC  rÇ   Úold_algorithmrw  rx  r>  Ú
array_exprÚdiff_array_exprÚdiff_matrix_exprs	            r'   Ú_matrix_derivativer€    s\   € ä�$œ
×#Ñ#¤z°!´Z×'@Ñ'@àˆæÜ/°Ó8Ð8å[ÝQÝ[á(¨Ó.€JÙ" :Ó1€OÙ.¨Ó?ÐØÐr,   c           
     óÆ  ^• SSK Jn  U R                  U5      nU Vs/ s H  oDR                  5       PM     nnSSKJn  U VVs/ s H  oD Vs/ s H
  ov" U5      PM     snPM     nnnS mU4S jnU Vs/ s H
  oH" U5      PM     n	nU	S   n
S nU
S::  a,  [        R                  " U Vs/ s H
  oK" U5      PM     sn5      $ U" X5      $ s  snf s  snf s  snnf s  snf s  snf )Nr   )ÚArrayDerivativer=  c                óF   • [        U [        5      (       a  U R                  $ g)N©r�   r�   ©r’   r1   rE   ©Úelems    r'   Ú
_get_shapeÚ4_matrix_derivative_old_algorithm.<locals>._get_shape0  s   € Ü�dœJ×'Ñ'Ø—:‘:ÐØr,   c                ó.   >• [        U4S jU  5       5      $ )Nc              3  óL   >#   • U  H  nT" U5        H	  o"S ;  v •  M     M     g7f)©r�   NNr-   )Ú.0rå   ræ   rˆ  s      €r'   Ú	<genexpr>ÚE_matrix_derivative_old_algorithm.<locals>.get_rank.<locals>.<genexpr>6  s!   øé € ÐLªu¨!¹jÈ¿m¸˜IÖ%¹mÑ%ªuùs   ƒ!$)Úsum)Úpartsrˆ  s    €r'   Úget_rankÚ2_matrix_derivative_old_algorithm.<locals>.get_rank5  s   ø€ ÜÔL©uÓLÓLÐLr,   c                óT  • [        U 5      S:X  a  U S   $ U S S u  pUR                  (       a  UR                  nU[        S5      :X  a  UnOU[        S5      :X  a  UnOX-  n[        U 5      S:X  a  U$ UR                  (       a  [	        S5      eU[
        R                  " U SS  5      -  $ )Nr�   r   r¥   Ú )r  r5   rø   ÚIdentityrÜ   r	   Úfromiter)r‘  Úp1Úp2Úpbases       r'   Úcontract_one_dimsÚ;_matrix_derivative_old_algorithm.<locals>.contract_one_dims;  s—   € Üˆu‹:˜‹?Ø˜‘8ˆOà˜2˜A�Y‰FˆBØ�|�|Ø—T‘T�Ø”X˜a“[Ó Ø‘Ø”x “{Ó"Ø‘à™�Ü�5‹z˜Q‹Ø�à—?—?Ü$ R›.Ð(ØœSŸ\š\¨%°°¨)Ó4Ñ4Ð4r,   r¥   )Ú$sympy.tensor.array.array_derivativesr‚  Ú_eval_derivative_matrix_linesÚbuildrA  r>  r
   r—  )rC  rÇ   r‚  Úlinesrå   r‘  r>  ræ   r’  ÚranksÚrankr›  rˆ  s               @r'   ry  ry  &  sÞ   ø€ ÝDØ×.Ñ.¨qÓ1€Eá %Ó&¢˜1�W‰WŽY¡€EÐ&å[á>CÔDºe¸°!Ó4²!¨QÐ% aÖ(±!Ô4¹e€EÑDòõ
Mñ #(Ó(¢%˜QˆX�aŽ[¡%€EÐ(Ø�‰8€Dò5ð( ˆqƒyÜ�|Š|¹5ÓAº5°aÐ.¨qÖ1¹5ÑAÓBÐBá˜4Ó#Ð#ùòQ 'ùò 5ùÓDùò )ùò0 Bs)   �C	Á	CÁCÁCÁ4CÂ)CÃCc                  óˆ   • \ rS rSr\" S 5      r\" S 5      r\" S 5      rSrSr	Sr
S r\S 5       rS r\S	 5       rS
 rSrg)ÚMatrixElementiU  c                ó    • U R                   S   $ r†   ©r=   rC   s    r'   Ú<lambda>ÚMatrixElement.<lambda>V  s   €  4§9¡9¨Q¢<r,   c                ó    • U R                   S   $ rŒ   r¦  rC   s    r'   r§  r¨  W  ó   € ˜dŸi™i¨šlr,   c                ó    • U R                   S   $ r¤   r¦  rC   s    r'   r§  r¨  X  rª  r,   Tc                óà  • [        [        X#45      u  p#[        U[        5      (       a  [	        U5      nO¢[        U[
        5      (       a4  UR                  (       a  UR                  (       a  XU4   $ [        U5      nO5[        U5      n[        UR                  [        5      (       d  [        S5      e[        USS 5      " X#5      (       d  [        S5      e[        R                  " XX#5      nU$ )Nz2First argument of MatrixElement should be a matrixr  c                ó   • gr‘   r-   )rÏ   Úms     r'   r§  Ú'MatrixElement.__new__.<locals>.<lambda>j  s   € ¸Tr,   zindices out of range)r:   r   r’   Ústrr   r   Ú
is_Integerr8   r   r+  Úgetattrr  r   r;   ©r<   ÚnamerÏ   r®  Úobjs        r'   r;   ÚMatrixElement.__new__]  s³   € Ü”8˜a˜VÓ$‰ˆÜ�dœC× Ñ Ü˜$“<‰Dä˜$¤
×+Ñ+Ø—<—< A§L§LØ 1 ™:Ð%Ü “~‘ä “~�Ü! $§)¡)¬Z×8Ñ8Ü#Ð$XÓYÐYÜ˜4 Ñ0AÔBÀ1×HÑHÜ Ð!7Ó8Ð8Ü�lŠl˜3 aÓ+ˆØˆ
r,   c                ó    • U R                   S   $ r†   r¦  rC   s    r'   ÚsymbolÚMatrixElement.symbolo  s   € à�y‰y˜‰|Ðr,   c                óÎ   • UR                  SS5      nU(       a,  U R                   Vs/ s H  o3R                  " S0 UD6PM     nnOU R                  nUS   US   US   4   $ s  snf )NrŸ   Tr   r�   r¥   r-   )Úgetr=   rT   )rD   r    rŸ   r.   r=   s        r'   rT   ÚMatrixElement.doits  sc   € Ø�y‰y˜ Ó&ˆÞØ15·²Ó;²¨#—H’HÑ%˜uÔ%±ˆDÐ;ˆDà—9‘9ˆDØ�A‰w�t˜A‘w  Q¡Ð'Ñ(Ð(ùò <s   ¨A"c                ó    • U R                   SS  $ rŒ   r¦  rC   s    r'   ÚindicesÚMatrixElement.indices{  s   € à�y‰y˜˜ˆ}Ðr,   c                óB  • [        U[        5      (       d4  U R                  R                  U5      U R                  U R
                  4   $ U R                  S   nU R                  R                  u  p4X!R                  S   :X  aY  [        U R                  S   UR                  S   SUS-
  45      [        U R                  S   UR                  S   SUS-
  45      -  $ [        U[        5      (       a|  SSK
Jn  U R                  SS  u  pg[        S[        S9u  p‰UR                  S   n
U
R                  u  p¼U" X&U4   X¨U	4   R                  U5      -  X)U4   -  USUS-
  4U	SUS-
  45      * $ U R                  UR                  S   5      (       a  g [        R                   $ )Nr   r�   r¥   )ÚSumzz1, z2)r<   )r’   r¤  ÚparentÚdiffrå   ræ   r=   rE   r   r­   Úsympy.concrete.summationsrÁ  r   r   rÒ   r   ÚZero)rD   ÚvÚMr®  rÏ   rÁ  rå   ræ   Úi1Úi2ÚYÚr1Úr2s                r'   rÔ   ÚMatrixElement._eval_derivative  so  € ä˜!œ]×+Ñ+Ø—;‘;×#Ñ# AÓ& t§v¡v¨t¯v©v ~Ñ6Ð6à�I‰I�a‰Lˆà�{‰{× Ñ ‰ˆà—‘�q‘	‹>Ü! $§)¡)¨A¡,°·±°q±	¸A¸qÀ¹s¸8ÓDÜ! $§)¡)¨A¡,°·±°q±	¸A¸qÀ¹s¸8ÓDñEð Eô �aœ×!Ñ!Ý5Ø—9‘9˜Q˜R�=‰DˆAÜ˜X¬5Ñ1‰FˆBØ—‘�q‘	ˆAØ—W‘W‰FˆBÙ˜˜R˜%™  r 6¡§¡°Ó!2Ñ2°1¸°U±8Ñ;¸bÀ!ÀRÈÁT¸]ÈRÐQRÐTVÐWXÑTXÈMÓZÐZÐZà�8‰8�A—F‘F˜1‘I×ÑØä�v‰vˆr,   r-   N)rã   rP  rQ  rR  r`  rÂ  rå   ræ   Ú	_diff_wrtr^  r\  r;   r¸  rT   r¾  rÔ   rd  r-   r,   r'   r¤  r¤  U  si   † ÙÑ/Ó0€FÙÑ*Ó+€AÙÑ*Ó+€AØ€IØ€IØ€Nòð$ ñó ðò)ð ñó ðõr,   r¤  c                  ór   • \ rS rSrSrSrSrSrS r\	S 5       r
\	S 5       rS r\	S	 5       rS
 rS rS rSrg)ÚMatrixSymboliš  av  Symbolic representation of a Matrix object

Creates a SymPy Symbol to represent a Matrix. This matrix has a shape and
can be included in Matrix Expressions

Examples
========

>>> from sympy import MatrixSymbol, Identity
>>> A = MatrixSymbol('A', 3, 4) # A 3 by 4 Matrix
>>> B = MatrixSymbol('B', 4, 3) # A 4 by 3 Matrix
>>> A.shape
(3, 4)
>>> 2*A*B + Identity(3)
I + 2*A*B
FTc                óâ   • [        U5      [        U5      p2U R                  U5        U R                  U5        [        U[        5      (       a  [	        U5      n[
        R                  " XX#5      nU$ r"   )r   rà   r’   r°  r   r   r;   r³  s        r'   r;   ÚMatrixSymbol.__new__¯  sT   € Ü˜‹{œH Q›Kˆ1à�‰�qÔØ�‰�qÔä�dœC× Ñ Ü�t“9ˆDÜ�mŠm˜C qÓ,ˆØˆ
r,   c                ó>   • U R                   S   U R                   S   4$ )Nr�   r¥   r¦  rC   s    r'   rE   ÚMatrixSymbol.shapeº  s   € à�y‰y˜‰|˜TŸY™Y q™\Ð)Ð)r,   c                ó4   • U R                   S   R                  $ r†   )r=   r´  rC   s    r'   r´  ÚMatrixSymbol.name¾  s   € à�y‰y˜‰|× Ñ Ð r,   c                ó   • [        XU5      $ r"   )r¤  rä   s       r'   rç   ÚMatrixSymbol._entryÂ  s   € Ü˜T aÓ(Ð(r,   c                ó   • U 1$ r"   r-   rC   s    r'   Úfree_symbolsÚMatrixSymbol.free_symbolsÅ  s	   € àˆvˆr,   c                ó   • U $ r"   r-   )rD   r>   s     r'   rÈ   ÚMatrixSymbol._eval_simplifyÉ  r7  r,   c                óN   • [        U R                  S   U R                  S   5      $ ©Nr   r�   )rÕ   rE   )rD   rÇ   s     r'   rÔ   ÚMatrixSymbol._eval_derivativeÌ  s   € ä˜$Ÿ*™* Q™-¨¯©°A©Ó7Ð7r,   c                óP  • X:w  aŸ  U R                   S   S:w  a&  [        UR                   S   U R                   S   5      O[        R                  nU R                   S   S:w  a&  [        UR                   S   U R                   S   5      O[        R                  n[	        X#/5      /$ U R                   S   S:w  a  [        U R                   S   5      O[        R                  nU R                   S   S:w  a  [        U R                   S   5      O[        R                  n[	        X#/5      /$ rß  )rE   rÕ   r   rÅ  Ú_LeftRightArgsr–  rì   )rD   rÇ   ÚfirstÚseconds       r'   rž  Ú*MatrixSymbol._eval_derivative_matrix_linesÐ  sí   € Ø‹9Ø=A¿Z¹ZÈ¹]ÈaÓ=O”J˜qŸw™w q™z¨4¯:©:°a©=Ô9ÔUV×U[ÑU[ˆEØ>B¿j¹jÈ¹mÈqÓ>P”Z §¡¨¡
¨D¯J©J°q©MÔ:ÔVW×V\ÑV\ˆFÜ"Ø�óð ð ð 04¯z©z¸!©}ÀÓ/A”H˜TŸZ™Z¨™]Ô+ÄqÇuÁuˆEØ04·
±
¸1±ÀÓ0B”X˜dŸj™j¨™mÔ,ÌÏÉˆFÜ"Ø�óð ð r,   r-   N)rã   rP  rQ  rR  rS  r\  r^  rÎ  r;   r`  rE   r´  rç   rÚ  rÈ   rÔ   rž  rd  r-   r,   r'   rÐ  rÐ  š  sm   † ñð  €NØ€IØ€Iò	ð ñ*ó ð*ð ñ!ó ð!ò)ð ñó ðòò8õr,   rÐ  c                ój   • U R                    Vs/ s H  oR                  (       d  M  UPM     sn$ s  snf r"   )rÚ  r5   )rC  Úsyms     r'   Úmatrix_symbolsrè  ß  s&   € Ø×,Ò,Ó>Ò,�C·µ�CÑ,Ñ>Ð>ùÒ>s   �0§0c                  óà   • \ rS rSrSr\R                  4S jr\S 5       r	\	R                  S 5       r	\S 5       r\R                  S 5       rS rS	 r\S
 5       rS rS rS rS rS rS rSrg)râ  iã  aq  
Helper class to compute matrix derivatives.

The logic: when an expression is derived by a matrix `X_{mn}`, two lines of
matrix multiplications are created: the one contracted to `m` (first line),
and the one contracted to `n` (second line).

Transposition flips the side by which new matrices are connected to the
lines.

The trace connects the end of the two lines.
c                ó¬   • [        U5      U l        U R                  U l        SU l        SU l        U R                  U l        SU l        SU l        X l        g rß  )	ÚlistÚ_linesÚ_first_pointer_parentÚ_first_pointer_indexÚ_first_line_indexÚ_second_pointer_parentÚ_second_pointer_indexÚ_second_line_indexÚhigher)rD   r   ró  s      r'   Ú__init__Ú_LeftRightArgs.__init__ñ  sJ   € Ü˜5“kˆŒØ%)§[¡[ˆÔ"Ø$%ˆÔ!Ø!"ˆÔØ&*§k¡kˆÔ#Ø%&ˆÔ"Ø"#ˆÔØ�r,   c                ó4   • U R                   U R                     $ r"   ©rí  rî  rC   s    r'   Úfirst_pointerÚ_LeftRightArgs.first_pointerû  s   € à×)Ñ)¨$×*CÑ*CÑDÐDr,   c                ó4   • XR                   U R                  '   g r"   r÷  ©rD   Úvalues     r'   rø  rù  ÿ  s   € à@E×"Ñ" 4×#<Ñ#<Ò=r,   c                ó4   • U R                   U R                     $ r"   ©rð  rñ  rC   s    r'   Úsecond_pointerÚ_LeftRightArgs.second_pointer  s   € à×*Ñ*¨4×+EÑ+EÑFÐFr,   c                ó4   • XR                   U R                  '   g r"   rþ  rû  s     r'   rÿ  r     s   € àBG×#Ñ# D×$>Ñ$>Ò?r,   c                óŠ   • U R                    Vs/ s H  oR                  U5      PM     nnSU< SU R                  < S3$ s  snf )Nz_LeftRightArgs(lines=z	, higher=r  )rì  Ú_buildró  )rD   rå   Úbuilts      r'   Ú__repr__Ú_LeftRightArgs.__repr__  s;   € Ø)-¯ªÓ5ª A—‘˜Q–©ˆÐ5ˆãØ�KŒKð
ð 	
ùò 6s   �A c                óØ   • U R                   U R                  sU l        U l         U R                  U R                  sU l        U l        U R                  U R
                  sU l        U l        U $ r"   )rð  rí  rñ  rî  rò  rï  rC   s    r'   rô   Ú_LeftRightArgs.transpose  sd   € ØBF×B]ÑB]Ð_c×_yÑ_yÐ?ˆÔ" DÔ$?Ø@D×@ZÑ@ZÐ\`×\uÑ\uÐ=ˆÔ! 4Ô#=Ø:>×:QÑ:QÐSW×SiÑSiÐ7ˆÔ Ô 7Øˆr,   c                ó
  • [        U [        5      (       a  U R                  5       $ [        U [        5      (       aC  [	        U 5      S:X  a  U S   $ U S   " U S    Vs/ s H  n[
        R                  U5      PM     sn6 $ U $ s  snf )Nr�   r   )r’   r   rŸ  rë  r  râ  r  )rC  rå   s     r'   r  Ú_LeftRightArgs._build  st   € ä�dœK×(Ñ(Ø—:‘:“<ÐÜ�dœD×!Ñ!Ü�4‹y˜A‹~Ø˜A‘w�à˜A’wÀ4ÈÂ7Ó KÂ7¸a¤×!6Ñ!6°qÖ!9Á7Ñ KÐLÐLàˆKùò !Ls   ÁB c                óÖ   • U R                    Vs/ s H  oR                  U5      PM     nnU R                  S:w  a  X R                  U R                  5      /-  n[        U5      nU$ s  snf rŒ   )rì  r  ró  rë  )rD   rå   Údatas      r'   rŸ  Ú_LeftRightArgs.build$  sW   € Ø(,¯ªÓ4ª 1—‘˜A–©ˆÐ4Ø�;‰;˜!ÓØ—[‘[ §¡Ó-Ð.Ñ.ˆDÜ�D‹zˆØˆùò	 5s   �A&c                ó&  • U R                   S:w  a  U R                  S:w  a  [        S5      eS nU" U R                   5      S   U" U R                  5      S   :w  ay  U" U R                  5      S:X  a  U R                   U R                  S   -  $ U" U R                   5      S:X  a&  U R                   S   U R                  R                  -  $ [        S5      eU R                   S:w  a#  U R                   U R                  R                  -  $ U R                  $ )Nr�   z.higher dimensional array cannot be representedc                óF   • [        U [        5      (       a  U R                  $ g)N)NNr…  r†  s    r'   rˆ  Ú._LeftRightArgs.matrix_form.<locals>._get_shape/  s   € Ü˜$¤
×+Ñ+Ø—z‘zÐ!Ør,   r„  )r   r   zincompatible shapes)rã  ró  rÜ   rä  rø   )rD   rˆ  s     r'   Úmatrix_formÚ_LeftRightArgs.matrix_form+  sß   € Ø�:‰:˜‹?˜tŸ{™{¨aÓ/ÜÐMÓNÐNò	 ñ
 �d—j‘jÓ! !Ñ$©
°4·;±;Ó(?ÀÑ(BÓBñ ˜$Ÿ+™+Ó&¨&Ó0Ø—z‘z $§+¡+¨dÑ"3Ñ3Ð3Ù˜$Ÿ*™*Ó%¨Ó/Ø—z‘z $Ñ'¨¯©¯©Ñ5Ð5ÜÐ2Ó3Ð3Ø�:‰:˜‹?Ø—:‘:˜dŸk™kŸm™mÑ+Ð+à—;‘;Ðr,   c                ó  • SnU R                   S:w  a)  U[        S U R                   R                   5       5      -  nU R                  S:w  a)  U[        S U R                  R                   5       5      -  nU R                  S:w  a  US-  nU$ )zT
Number of dimensions different from trivial (warning: not related to
matrix rank).
r   r�   c              3  ó*   #   • U  H	  oS :g  v •  M     g7frŒ  r-   ©r�  rå   s     r'   rŽ  Ú&_LeftRightArgs.rank.<locals>.<genexpr>H  s   é € Ð9Ò(8 1˜QžÒ(8ùó   ‚c              3  ó*   #   • U  H	  oS :g  v •  M     g7frŒ  r-   r  s     r'   rŽ  r  J  s   é € Ð:Ò(9 1˜QžÒ(9ùr  r¥   )rã  r�  rE   rä  ró  )rD   r¢  s     r'   r¢  Ú_LeftRightArgs.rankA  sx   € ð
 ˆØ�:‰:˜‹?Ø”CÑ9¨¯
©
×(8Ò(8Ó9Ó9Ñ9ˆDØ�;‰;˜!ÓØ”CÑ:¨¯©×(9Ò(9Ó:Ó:Ñ:ˆDØ�;‰;˜!ÓØ�A‰IˆDØˆr,   c                ód   • SSK Jn  SSK Jn  [        U[        UUU/5      S/UR                  S9nU$ )Né   )ÚArrayTensorProduct)ÚArrayContraction)r�   r¥   )Ú	validator)Ú*tensor.array.expressions.array_expressionsr  r  r   Ú	_validate)rD   ÚpointerrZ   r  r  Úsubexprs         r'   Ú_multiply_pointerÚ _LeftRightArgs._multiply_pointerO  sG   € ÝTÝRäØäØ&àØðóð ð	ð '×0Ñ0ñ
ˆð ˆr,   c                ó.   • U =R                   U-  sl         g r"   )rø  r^   s     r'   Úappend_firstÚ_LeftRightArgs.append_firstd  s   € Ø×Ò˜eÑ#Ör,   c                ó.   • U =R                   U-  sl         g r"   )rÿ  r^   s     r'   Úappend_secondÚ_LeftRightArgs.append_secondg  s   € Ø×Ò˜uÑ$Ör,   )rï  rî  rí  rì  rò  rñ  rð  ró  N)rã   rP  rQ  rR  rS  r   rì   rô  r`  rø  Úsetterrÿ  r  rô   rc  r  rŸ  r  r¢  r#  r&  r)  rd  r-   r,   r'   râ  râ  ã  sµ   † ñð &'§U¡Uô ð ñEó ðEð ×ÑñFó ðFð ñGó ðGð ×ÑñHó ðHò
òð ñ	ó ð	òòò,òò*$õ%r,   râ  c                óP   • SSK Jn  [        U [        5      (       a  U $ U" U //5      $ )Nr   r  )r!  r   r’   r1   )rÇ   r   s     r'   Ú_make_matrixr-  k  s&   € Ý=Ü�!”Z× Ñ ØˆÙ !  Ó&Ð&r,   r�   rN   rH   r¿   r·   r¬   )rÕ   r–  r²   r"   rO  )GÚ
__future__r   Ú	functoolsr   Ú
sympy.corer   r   r   r	   r
   Úsympy.core.assumptionsr   Úsympy.core.decoratorsr   Úsympy.core.exprr   r   Úsympy.core.logicr   Úsympy.core.symbolr   r   r   r   Úsympy.core.sympifyr   r   Úsympy.external.gmpyr   Úsympy.functionsr   r   Ú(sympy.functions.special.tensor_functionsr   Úsympy.matrices.exceptionsr   Úsympy.matrices.kindr   Úsympy.matrices.matrixbaser   Úsympy.multipledispatchr   Úsympy.utilities.miscr   r/   r1   rj  ru  Ú"_constructor_postprocessor_mappingr€  ry  r¤  rÐ  rè  râ  r-  ÚmatmulrO   ÚmataddrI   Úmatpowrz   rô   r™   rû   r­   ÚspecialrÕ   r–  Údeterminantr³   r-   r,   r'   Ú<module>rE     s  ðÝ "Ý ç 2Õ 2Ý 4Ý 7ß -Ý &ß 9Ó 9ß 5Ý *ß .Ý CÝ :Ý *Ý 0Ý +Ý +ôô s4�ô s4ñl 
ˆ*�dÓñó ðñ 
ˆ*�jÓ!ñó "ðò$ñP ˜cÓ"Ð#Ù˜cÓ"Ð#ñ8€× (Ñ (¨Ñ 4ôò&,$ô^B�Dô BôJB�:ô BòJ?÷E%ñ E%òP'õ Ý Ý Ý  Ý ß )Þ $r,   