Ë
    7^(h�k  ã                  óJ  — d dl mZ d dlmZ d dlmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZ d d	lmZmZ d d
lmZ d dlmZmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d,d„Z, G d„ de«      Z- e)e-e«      d„ «       Z. e)e-e-«      d„ «       Z.d„ Z/ e/e«      g e/e	«      gdœej`                  e-<   d-d„Z1d„ Z2 G d„ de«      Z3 G d„ de-«      Z4d „ Z5 G d!„ d"«      Z6d#„ Z7d$d%l8m9Z9 d$d&l:m;Z; d$d'l<m=Z= d$d(l>m?Z? d$d)l@mAZA d$d*lBmCZCmDZD d$d+lEmFZF y).é    )Ú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                ó   ‡— ˆfd„}|S )Nc                ó2   •‡ — t        ‰ «      ˆ ˆfd„«       }|S )Nc                óP   •— 	 t        |«      } ‰| |«      S # t        $ r ‰cY S w xY w©N)r   r   )ÚaÚbÚfuncÚretvals     €€ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/matrices/expressions/matexpr.pyÚ__sympifyit_wrapperz5_sympifyit.<locals>.deco.<locals>.__sympifyit_wrapper   s1   ø€ ðÜ˜Q“K�Ù˜A˜q“zÐ!øÜò Ø’ðús   ƒ —%¤%r   )r%   r(   r&   s   ` €r'   Údecoz_sympifyit.<locals>.deco   s!   ù€ Ü	ˆt‹ô	ó 
ð	ð #Ð"ó    © )Úargr&   r)   s    ` r'   Ú
_sympifyitr-      s   ø€ ô	#ð €Kr*   c                  ó‚  ‡ — e Zd ZU dZdZded<   dZdZdZded	<   dZ	ded
<   dZ
ded<   dZdZdZdZdZdZdZdZdZ e«       Zded<   d„ ZedRd„«       Zed„ «       Zed„ «       Zd„ Zd„ Z ede«       ed«      d„ «       «       Z  ede«       ed«      d„ «       «       Z! ede«       ed«      d„ «       «       Z" ede«       ed«      d„ «       «       Z# ede«       ed«      d „ «       «       Z$ ede«       ed«      d!„ «       «       Z% ede«       ed"«      d#„ «       «       Z& ede«       ed"«      d$„ «       «       Z' ede«       ed%«      d&„ «       «       Z( ede«       ed'«      d(„ «       «       Z) ede«       ed)«      d*„ «       «       Z* ede«       ed+«      d,„ «       «       Z+ed-„ «       Z,ed.„ «       Z-edSd/„«       Z.d0„ Z/dTd1„Z0d2„ Z1d3„ Z2d4„ Z3d5„ Z4d6„ Z5d7„ Z6d8„ Z7d9„ Z8d:„ Z9ˆ fd;„Z:e;d<„ «       Z<d=„ Z=d>„ Z>dUd?„Z?d@„ Z@dA„ ZAedB„ «       ZBdC„ ZCdD„ ZDdE„ ZEedF„ «       ZFdG„ ZGdH„ ZHdVdI„ZIdJ„ ZJdK„ ZKeLdfdL„ZMdM„ ZNdN„ ZOdO„ ZPeQdWdP„«       ZRdQ„ ZSˆ xZTS )XÚ
MatrixExpra�  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                óT   — t        t        |«      }t        j                  | g|¢­i |¤ŽS r"   )Úmapr   r   Ú__new__)ÚclsÚargsÚkwargss      r'   r8   zMatrixExpr.__new__Q   s'   € Ü”8˜TÓ"ˆÜ�}‰}˜SÐ2 4Ò2¨6Ñ2Ð2r*   c                ó   — t         ‚r"   ©ÚNotImplementedError©Úselfs    r'   ÚshapezMatrixExpr.shapeW   s   € ä!Ð!r*   c                ó   — t         S r"   ©ÚMatAddr?   s    r'   Ú_add_handlerzMatrixExpr._add_handler[   ó   € äˆr*   c                ó   — t         S r"   ©ÚMatMulr?   s    r'   Ú_mul_handlerzMatrixExpr._mul_handler_   rF   r*   c                óR   — t        t        j                  | «      j                  «       S r"   )rI   r   ÚNegativeOneÚdoitr?   s    r'   Ú__neg__zMatrixExpr.__neg__c   s   € Ü”a—m‘m TÓ*×/Ñ/Ó1Ð1r*   c                ó   — t         ‚r"   r=   r?   s    r'   Ú__abs__zMatrixExpr.__abs__f   s   € Ü!Ð!r*   ÚotherÚ__radd__c                ó6   — t        | |«      j                  «       S r"   ©rD   rM   ©r@   rQ   s     r'   Ú__add__zMatrixExpr.__add__i   ó   € ô �d˜EÓ"×'Ñ'Ó)Ð)r*   rV   c                ó6   — t        || «      j                  «       S r"   rT   rU   s     r'   rR   zMatrixExpr.__radd__n   ó   € ô �e˜TÓ"×'Ñ'Ó)Ð)r*   Ú__rsub__c                ó8   — t        | | «      j                  «       S r"   rT   rU   s     r'   Ú__sub__zMatrixExpr.__sub__s   s   € ô �d˜U˜FÓ#×(Ñ(Ó*Ð*r*   r\   c                ó8   — t        ||  «      j                  «       S r"   rT   rU   s     r'   rZ   zMatrixExpr.__rsub__x   s   € ô �e˜d˜UÓ#×(Ñ(Ó*Ð*r*   Ú__rmul__c                ó6   — t        | |«      j                  «       S r"   ©rI   rM   rU   s     r'   Ú__mul__zMatrixExpr.__mul__}   rW   r*   c                ó6   — t        | |«      j                  «       S r"   r`   rU   s     r'   Ú
__matmul__zMatrixExpr.__matmul__‚   rW   r*   ra   c                ó6   — t        || «      j                  «       S r"   r`   rU   s     r'   r^   zMatrixExpr.__rmul__‡   rY   r*   c                ó6   — t        || «      j                  «       S r"   r`   rU   s     r'   Ú__rmatmul__zMatrixExpr.__rmatmul__Œ   rY   r*   Ú__rpow__c                ó6   — t        | |«      j                  «       S r"   )ÚMatPowrM   rU   s     r'   Ú__pow__zMatrixExpr.__pow__‘   rW   r*   rj   c                ó   — t        d«      ‚)NzMatrix Power not definedr=   rU   s     r'   rg   zMatrixExpr.__rpow__–   s   € ô "Ð"<Ó=Ð=r*   Ú__rtruediv__c                ó.   — | |t         j                  z  z  S r"   )r   rL   rU   s     r'   Ú__truediv__zMatrixExpr.__truediv__›   s   € ð �eœQŸ]™]Ñ*Ñ*Ð*r*   rn   c                ó   — t        «       ‚r"   r=   rU   s     r'   rl   zMatrixExpr.__rtruediv__    s   € ô "Ó#Ð#r*   c                ó    — | j                   d   S ©Nr   ©rA   r?   s    r'   ÚrowszMatrixExpr.rows¦   ó   € à�z‰z˜!‰}Ðr*   c                ó    — | j                   d   S ©Né   rr   r?   s    r'   ÚcolszMatrixExpr.colsª   rt   r*   c                óx   — | j                   \  }}t        |t        «      rt        |t        «      r||k(  S ||k(  ryy ©NT)rA   Ú
isinstancer   )r@   rs   rx   s      r'   Ú	is_squarezMatrixExpr.is_square®   s9   € à—Z‘Z‰
ˆˆdÜ�dœGÔ$¬°D¼'Ô)BØ˜4‘<ÐØ�4Š<ØØr*   c                ó0   — ddl m}  |t        | «      «      S ©Nr   )ÚAdjoint)Ú"sympy.matrices.expressions.adjointr   Ú	Transpose©r@   r   s     r'   Ú_eval_conjugatezMatrixExpr._eval_conjugate·   s   € Ý>Ù”y “Ó'Ð'r*   c                ó"   — | j                  «       S r"   )Ú_eval_as_real_imag)r@   ÚdeepÚhintss      r'   Úas_real_imagzMatrixExpr.as_real_imag»   s   € Ø×&Ñ&Ó(Ð(r*   c                ó    — t         j                  | | j                  «       z   z  }| | j                  «       z
  dt         j                  z  z  }||fS ©Né   )r   ÚHalfrƒ   ÚImaginaryUnit)r@   ÚrealÚims      r'   r…   zMatrixExpr._eval_as_real_imag¾   sI   € Ü�v‰v˜ × 4Ñ 4Ó 6Ñ6Ñ7ˆØ�T×)Ñ)Ó+Ñ+¨a´·±Ñ.?Ñ@ˆØ�bˆzÐr*   c                ó   — t        | «      S r"   ©ÚInverser?   s    r'   Ú_eval_inversezMatrixExpr._eval_inverseÃ   ó   € Ü�t‹}Ðr*   c                ó   — t        | «      S r"   ©ÚDeterminantr?   s    r'   Ú_eval_determinantzMatrixExpr._eval_determinantÆ   s   € Ü˜4Ó Ð r*   c                ó   — t        | «      S r"   ©r�   r?   s    r'   Ú_eval_transposezMatrixExpr._eval_transposeÉ   ó   € Ü˜‹Ðr*   c                 ó   — y r"   r+   r?   s    r'   Ú_eval_tracezMatrixExpr._eval_traceÌ   s   € Ør*   c                ó   — t        | |«      S )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.
        ©ri   )r@   Úexps     r'   Ú_eval_powerzMatrixExpr._eval_powerÏ   s   € ô
 �d˜CÓ Ð r*   c           
     ó�   — | j                   r| S ddlm}  | j                  | j                  D �cg c]  } ||fi |¤Ž‘Œ c}Ž S c c}w )Nr   )Úsimplify)Úis_AtomÚsympy.simplifyr¤   r%   r:   )r@   r;   r¤   Úxs       r'   Ú_eval_simplifyzMatrixExpr._eval_simplifyÖ   s>   € Ø�<Š<ØˆKå/Ø�4—9‘9¸d¿i¹iÖH¸™x¨Ñ4¨VÓ4ÒHÐIÐIùÒHs   ¯Ac                ó   — ddl m}  || «      S r~   )r€   r   r‚   s     r'   Ú_eval_adjointzMatrixExpr._eval_adjointÝ   s   € Ý>Ù�t‹}Ðr*   c                ó0   — t        j                  | ||«      S r"   )r   Ú_eval_derivative_n_times)r@   r§   Úns      r'   r¬   z#MatrixExpr._eval_derivative_n_timesá   s   € Ü×-Ñ-¨d°A°qÓ9Ð9r*   c                óh   •— | j                  |«      rt        ‰| �	  |«      S t        | j                  Ž S r"   )ÚhasÚsuperÚ_eval_derivativeÚ
ZeroMatrixrA   )r@   r§   Ú	__class__s     €r'   r±   zMatrixExpr._eval_derivativeä   s-   ø€ à�8‰8�AŒ;ä‘7Ñ+¨AÓ.Ð.ä˜tŸz™zÐ*Ð*r*   c                óz   — |j                    xr t        |dd¬«      }|du rt        dj                  |«      «      ‚y)z2Helper function to check invalid matrix dimensionsT)ÚintegerÚnonnegativeFz?The dimension specification {} should be a nonnegative integer.N)Úis_Floatr   Ú
ValueErrorÚformat)r9   ÚdimÚoks      r'   Ú
_check_dimzMatrixExpr._check_dimì   sK   € ð —‘Ðò 1Ô"3Ø˜¨4ô#1ˆà�‰;Üð)ß)/©°«ó6ð 6ð r*   c                óF   — t        d| j                  j                  z  «      ‚)NzIndexing not implemented for %s)r>   r³   Ú__name__©r@   ÚiÚjr;   s       r'   Ú_entryzMatrixExpr._entry÷   s#   € Ü!Ø-°·±×0GÑ0GÑGóIð 	Ir*   c                ó   — t        | «      S r"   )r   r?   s    r'   r   zMatrixExpr.adjointû   r”   r*   c                ó&   — t         j                  | fS )z1Efficiently extract the coefficient of a product.)r   ÚOne)r@   Úrationals     r'   Úas_coeff_MulzMatrixExpr.as_coeff_Mulþ   s   € ä�u‰u�dˆ{Ðr*   c                ó   — t        | «      S r"   )r   r?   s    r'   r   zMatrixExpr.conjugate  rœ   r*   c                ó   — ddl m}  || «      S )Nr   ©Ú	transpose)Ú$sympy.matrices.expressions.transposerË   )r@   rË   s     r'   rË   zMatrixExpr.transpose  s   € ÝBÙ˜‹Ðr*   c                ó"   — | j                  «       S )zMatrix transpositionrÊ   r?   s    r'   ÚTzMatrixExpr.T	  s   € ð �~‰~ÓÐr*   c                óT   — | j                   du rt        d«      ‚| j                  «       S )NFzInverse of non-square matrix)r|   r   r“   r?   s    r'   ÚinversezMatrixExpr.inverse  s)   € Ø�>‰>˜UÑ"Ü&Ð'EÓFÐFØ×!Ñ!Ó#Ð#r*   c                ó"   — | j                  «       S r"   ©rÐ   r?   s    r'   ÚinvzMatrixExpr.inv  s   € Ø�|‰|‹~Ðr*   c                ó   — ddl m}  || «      S )Nr   )Údet)Ú&sympy.matrices.expressions.determinantrÕ   )r@   rÕ   s     r'   rÕ   zMatrixExpr.det  s   € Ý>Ù�4‹yÐr*   c                ó"   — | j                  «       S r"   rÒ   r?   s    r'   ÚIzMatrixExpr.I  s   € à�|‰|‹~Ðr*   c                óð   — d„ } ||«      xrj  ||«      xr` | j                   d u xs' || j                    k\  dk7  xr || j                   k  dk7  xr' || j                   k\  dk7  xr || j                  k  dk7  S )Nc                óB   — t        | t        t        t        t        f«      S r"   )r{   Úintr   r   r   )Úidxs    r'   Úis_validz(MatrixExpr.valid_index.<locals>.is_valid  s   € Ü˜c¤C¬´&¼$Ð#?Ó@Ð@r*   F)rs   rx   )r@   rÀ   rÁ   rÝ   s       r'   Úvalid_indexzMatrixExpr.valid_index  s�   € ò	Aá˜“ò H¡¨£ò HØ—‘˜dÐ"ò HØ�t—y‘y�j‘ UÑ*ÒG°°D·I±I±À%Ñ/GòHð �t—y‘y�j‘ UÑ*òHð 12°D·I±I±À%Ñ/Gð	Ir*   c                ó<  — t        |t        «      s t        |t        «      rddlm}  || |d«      S t        |t        «      r’t        |«      dk(  r„|\  }}t        |t        «      st        |t        «      rddlm}  || ||«      S t        |«      t        |«      }}| j                  ||«      dk7  r| j                  ||«      S t        d|›d|›d�«      ‚t        |t        t        f«      r}| j                  \  }}t        |t        «      st        t        d	«      «      ‚t        |«      }||z  }||z  }| j                  ||«      dk7  r| j                  ||«      S t        d
|z  «      ‚t        |t        t        f«      rt        t        d«      «      ‚t        d| z  «      ‚)Nr   )ÚMatrixSlice)r   Nrw   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   rA   r   r   r   )r@   Úkeyrà   rÀ   rÁ   rs   rx   s          r'   Ú__getitem__zMatrixExpr.__getitem__&  s}  € Ü˜#œuÔ%¬*°S¼%Ô*@ÝDÙ˜t S¨,Ó7Ð7Ü�cœ5Ô!¤c¨#£h°!¢mØ‰DˆAˆqÜ˜!œUÔ#¤z°!´UÔ';ÝHÙ" 4¨¨AÓ.Ð.Ü˜A“;¤¨£ˆqˆAØ×Ñ  1Ó%¨Ò.Ø—{‘{ 1 aÓ(Ð(å ºqÂ!Ð!DÓEÐEÜ˜œj¬'Ð2Ô3àŸ™‰JˆD�$ä˜d¤GÔ,Ü ¤ð -,ó "-ó .ð .ô ˜3“-ˆCØ�t‘ˆAØ�d‘
ˆAØ×Ñ  1Ó%¨Ò.Ø—{‘{ 1 aÓ(Ð(ä Ð!3°cÑ!9Ó:Ð:Ü˜œf¤d˜^Ô,ÜœZð )(ó )ó *ð *ô Ð8¸4Ñ?Ó@Ð@r*   c                óŠ   — t        | j                  t        t        f«       xs! t        | j                  t        t        f«       S r"   )r{   rs   r   r   rx   r?   s    r'   Ú_is_shape_symboliczMatrixExpr._is_shape_symbolicI  s:   € Ü˜tŸy™y¬:´wÐ*?Ó@Ð@ò @Ü˜dŸi™i¬*´gÐ)>Ó?Ð?ð	Ar*   c                óü   — | j                  «       rt        d«      ‚ddlm}  |t	        | j
                  «      D ��cg c]*  }t	        | j                  «      D �cg c]	  }| ||f   ‘Œ c}‘Œ, c}}«      S c c}w c c}}w )aÀ  
        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í   Úrangers   rx   )r@   rí   rÀ   rÁ   s       r'   Úas_explicitzMatrixExpr.as_explicitM  s‚   € ð0 ×"Ñ"Ô$Üð4ó5ð 5õ 	BÙ#ä%*¨4¯9©9Ó%5÷%7à !ô &+¨4¯9©9Ó%5ö&7Ø !ð '+¨1¨a¨4£jô &7ó %7ó 8ð 	8ùò &7ùó %7s   ¼A8
ÁA3Á&A8
Á3A8
c                ó>   — | j                  «       j                  «       S )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_mutabler?   s    r'   rò   zMatrixExpr.as_mutablen  s   € ð. ×ÑÓ!×,Ñ,Ó.Ð.r*   c                óà   — |�|st        d«      ‚ddlm}  || j                  t        ¬«      }t        | j                  «      D ](  }t        | j                  «      D ]  }| ||f   |||f<   Œ Œ* |S )Nz=Cannot implement copy=False when converting Matrix to ndarrayr   )Úempty)Údtype)Ú	TypeErrorÚnumpyrô   rA   Úobjectrï   rs   rx   )r@   rõ   Úcopyrô   r#   rÀ   rÁ   s          r'   Ú	__array__zMatrixExpr.__array__‡  su   € ØÐ¡DÜÐ[Ó\Ð\ÝÙ�$—*‘*¤FÔ+ˆÜ�t—y‘yÓ!ò 	%ˆAÜ˜4Ÿ9™9Ó%ò %�Ø˜q !˜t™*��!�Q�$’ñ%ð	%ð ˆr*   c                ó@   — | j                  «       j                  |«      S )zÅ
        Test elementwise equality between matrices, potentially of different
        types

        >>> from sympy import Identity, eye
        >>> Identity(3).equals(eye(3))
        True
        )rð   ÚequalsrU   s     r'   rü   zMatrixExpr.equals‘  s   € ð ×ÑÓ!×(Ñ(¨Ó/Ð/r*   c                ó   — | S r"   r+   r?   s    r'   ÚcanonicalizezMatrixExpr.canonicalizeœ  ó   € Øˆr*   c                ó8   — t         j                  t        | «      fS r"   )r   rÅ   rI   r?   s    r'   Úas_coeff_mmulzMatrixExpr.as_coeff_mmulŸ  s   € Ü�u‰u”f˜T“lÐ"Ð"r*   c                óŽ   — ddl m} ddlm} g }|�|j	                  |«       |�|j	                  |«        || |¬«      } ||«      S )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_summationzMatrixExpr.from_index_summation¢  sP   € õT 	bÝ_ØˆØÐ"Ø× Ñ  Ô-ØÐ!Ø× Ñ  Ô,Ù& t¸=ÔIˆÙ& sÓ+Ð+r*   c                ó    — ddl m}  ||| «      S )Nrw   )ÚElementwiseApplyFunction)Ú	applyfuncr  )r@   r%   r  s      r'   r  zMatrixExpr.applyfuncÖ  s   € Ý7Ù'¨¨dÓ3Ð3r*   )Úreturnztuple[Expr, Expr])r  zbool | None)T©F)r  r1   )NNN)Ur¾   Ú
__module__Ú__qualname__Ú__doc__r0   Ú__annotations__Ú	_iterableÚ_op_priorityr2   r3   r4   Ú
is_InverseÚis_TransposeÚis_ZeroMatrixÚ	is_MatAddÚ	is_MatMulÚis_commutativeÚ	is_numberÚ	is_symbolÚ	is_scalarr   r5   r8   ÚpropertyrA   rE   rJ   rN   rP   r-   ÚNotImplementedr   rV   rR   r\   rZ   ra   rc   r^   rf   rj   rg   rn   rl   rs   rx   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ú   rü   rþ   r  Ústaticmethodr  r  Ú__classcell__)r³   s   @r'   r/   r/   %   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4r*   r/   c                 ó   — y)NFr+   ©ÚlhsÚrhss     r'   Ú_eval_is_eqr-  Û  s   € àr*   c                óX   — | j                   |j                   k7  ry| |z
  j                  ryy )NFT)rA   r  r*  s     r'   r-  r-  ß  s*   € à
‡y�y�C—I‘IÒØØˆc‰	× Ò Øð !r*   c                ó   ‡ — ˆ fd„}|S )Nc                ó„  •— t         t        t        t        i‰   }g }g }| j                  D ]5  }t        |t        «      r|j                  |«       Œ%|j                  |«       Œ7 |s‰j                  |«      S |r„‰t         k(  rSt        t        |«      «      D ];  }||   j                  rŒ||   j                  ‰j                  |«      «      ||<   g } n* n(‰j                  | ||Ž j                  d¬«      gz   «      S |t        k(  r ||Ž j                  d¬«      S  |‰j                  |«      g|¢­Ž j                  d¬«      S )NF)r†   )r	   rI   r
   rD   r:   r{   r/   r	  Ú
_from_argsrï   rå   r3   ra   rM   )r
  Ú	mat_classÚnonmatricesÚmatricesÚtermrÀ   r9   s         €r'   Ú_postprocessorz)get_postprocessor.<locals>._postprocessorç  s:  ø€ äœ&¤#¤vÐ.¨sÑ3ˆ	ØˆØˆØ—I‘Iò 	)ˆDÜ˜$¤
Ô+Ø—‘ Õ%à×"Ñ" 4Õ(ð		)ñ Ø—>‘> +Ó.Ð.áØ”cŠzÜœs 8›}Ó-ò �AØ# A™;×4Ó4ð '/¨q¡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+   )r9   r6  s   ` r'   Úget_postprocessorr7  æ  s   ø€ ô"RðF Ðr*   )r	   r
   c                ó¼   — t        | t        «      st        |t        «      rd}|rt        | |«      S ddlm} ddlm} ddlm}  || «      } |||«      } ||«      }|S )NTr   )Úconvert_matrix_to_array)Úarray_deriver  )	r{   r   Ú _matrix_derivative_old_algorithmÚ3sympy.tensor.array.expressions.from_matrix_to_arrayr9  Ú4sympy.tensor.array.expressions.arrayexpr_derivativesr:  r  r  )	r
  r§   Úold_algorithmr9  r:  r  Ú
array_exprÚdiff_array_exprÚdiff_matrix_exprs	            r'   Ú_matrix_derivativerB    sZ   € ä�$œ
Ô#¤z°!´ZÔ'@àˆáÜ/°°aÓ8Ð8å[ÝQÝ[á(¨Ó.€JÙ" :¨qÓ1€OÙ.¨Ó?ÐØÐr*   c           
     ó®  ‡— ddl m} | j                  |«      }|D �cg c]  }|j                  «       ‘Œ }}ddlm} |D ��cg c]  }|D �cg c]
  } ||«      ‘Œ c}‘Œ }}}d„ Šˆfd„}|D �cg c]
  } ||«      ‘Œ }	}|	d   }
d„ }|
dk  r)t        j                  |D �cg c]
  } ||«      ‘Œ c}«      S  || |«      S c c}w c c}w c c}}w c c}w c c}w )Nr   )ÚArrayDerivativer  c                ó<   — t        | t        «      r| j                  S y)N©rw   rw   ©r{   r/   rA   ©Úelems    r'   Ú
_get_shapez4_matrix_derivative_old_algorithm.<locals>._get_shape0  s   € Ü�dœJÔ'Ø—:‘:ÐØr*   c                ó,   •— t        ˆfd„| D «       «      S )Nc              3  ó@   •K  — | ]  } ‰|«      D ]  }|d v–— Œ
 Œ y­w)©rw   NNr+   )Ú.0rÀ   rÁ   rJ  s      €r'   ú	<genexpr>zE_matrix_derivative_old_algorithm.<locals>.get_rank.<locals>.<genexpr>6  s'   øè ø€ ÒL¨!¹jÈ»mÒL¸�1˜IÔ%ÐLÐ%ÑLùs   ƒ)Úsum)ÚpartsrJ  s    €r'   Úget_rankz2_matrix_derivative_old_algorithm.<locals>.get_rank5  s   ø€ ÜÓL¨uÔLÓLÐLr*   c                ó:  — t        | «      dk(  r| d   S | d d \  }}|j                  r|j                  }|t        d«      k(  r|}n|t        d«      k(  r|}n||z  }t        | «      dk(  r|S |j                  rt	        d«      ‚|t        j                  | dd  «      z  S )Nrw   r   r‹   Ú )rå   r2   rÎ   ÚIdentityr¸   r	   Úfromiter)rQ  Úp1Úp2Úpbases       r'   Úcontract_one_dimsz;_matrix_derivative_old_algorithm.<locals>.contract_one_dims;  s›   € Üˆu‹:˜Š?Ø˜‘8ˆOà˜2˜A�Y‰FˆB�Ø�|Š|Ø—T‘T�Ø”X˜a“[Ò Ø‘Ø”x “{Ò"Ø‘à˜2™�Ü�5‹z˜QŠØ�à—?’?Ü$ R›.Ð(ØœSŸ\™\¨%°°¨)Ó4Ñ4Ð4r*   r‹   )Ú$sympy.tensor.array.array_derivativesrD  Ú_eval_derivative_matrix_linesÚbuildr  r  r
   rV  )r
  r§   rD  ÚlinesrÀ   rQ  r  rÁ   rR  ÚranksÚrankrZ  rJ  s               @r'   r;  r;  &  s×   ø€ ÝDØ×.Ñ.¨qÓ1€Eà %Ö&˜1ˆQ�W‰W�YÐ&€EÐ&å[à>C×D¸°!Ö4¨QÑ% aÕ(Ô4ÐD€EÑDòô
Mð #(Ö(˜Q‰X�a�[Ð(€EÐ(Ø�‰8€Dò5ð( ˆq‚yÜ�|‰|¸5ÖA°aÑ.¨qÕ1ÒAÓBÐBá˜4 Ó#Ð#ùòQ 'ùò 5ùÓDùò )ùò0 Bs)   �B=Á	CÁ
CÁCÁ-CÂCÃCc                  ó€   — e Zd Z ed„ «      Z ed„ «      Z ed„ «      ZdZdZdZ	d„ Z
ed„ «       Zd„ Zed„ «       Zd	„ Zy
)ÚMatrixElementc                ó    — | j                   d   S rq   ©r:   r?   s    r'   ú<lambda>zMatrixElement.<lambda>V  s   €  4§9¡9¨Q¡<€ r*   c                ó    — | j                   d   S rv   rd  r?   s    r'   re  zMatrixElement.<lambda>W  ó   € ˜dŸi™i¨™l€ r*   c                ó    — | j                   d   S rŠ   rd  r?   s    r'   re  zMatrixElement.<lambda>X  rg  r*   Tc                ó®  — t        t        ||f«      \  }}t        |t        «      rt	        |«      }n‹t        |t
        «      r+|j                  r|j                  r|||f   S t        |«      }n0t        |«      }t        |j                  t        «      st        d«      ‚ t        |dd„ «      ||«      st        d«      ‚t        j                  | |||«      }|S )Nz2First argument of MatrixElement should be a matrixrÞ   c                 ó   — yrz   r+   )r­   Úms     r'   re  z'MatrixElement.__new__.<locals>.<lambda>j  s   � r*   zindices out of range)r7   r   r{   Ústrr   r   Ú
is_Integerr5   r   rö   Úgetattrræ   r   r8   ©r9   Únamer­   rk  Úobjs        r'   r8   zMatrixElement.__new__]  sµ   € Ü”8˜a ˜VÓ$‰ˆˆ1Ü�dœCÔ Ü˜$“<‰Dä˜$¤
Ô+Ø—<’< A§L¢LØ  1 ™:Ð%Ü “~‘ä “~�Ü! $§)¡)¬ZÔ8Ü#Ð$XÓYÐYØB”7˜4 Ñ0AÓBÀ1ÀaÔHÜ Ð!7Ó8Ð8Ü�l‰l˜3  a¨Ó+ˆØˆ
r*   c                ó    — | j                   d   S rq   rd  r?   s    r'   ÚsymbolzMatrixElement.symbolo  s   € à�y‰y˜‰|Ðr*   c                óÀ   — |j                  dd«      }|r*| j                  D �cg c]  } |j                  di |¤Ž‘Œ }}n| j                  }|d   |d   |d   f   S c c}w )Nr†   Tr   rw   r‹   r+   )Úgetr:   rM   )r@   r‡   r†   r,   r:   s        r'   rM   zMatrixElement.doits  sd   € Ø�y‰y˜ Ó&ˆÙØ15·±Ö;¨#�H�C—H‘HÑ%˜uÓ%Ð;ˆDÑ;à—9‘9ˆDØ�A‰w�t˜A‘w  Q¡Ð'Ñ(Ð(ùò <s   £Ac                ó    — | j                   dd  S rv   rd  r?   s    r'   ÚindiceszMatrixElement.indices{  s   € à�y‰y˜˜ˆ}Ðr*   c                ó8  — t        |t        «      s4| j                  j                  |«      | j                  | j
                  f   S | j                  d   }| j                  j                  \  }}||j                  d   k(  rYt        | j                  d   |j                  d   d|dz
  f«      t        | j                  d   |j                  d   d|dz
  f«      z  S t        |t        «      r…ddl
m} | j                  dd  \  }}t        dt        ¬«      \  }}	|j                  d   }
|
j                  \  }} ||||f   |
||	f   j                  |«      z  ||	|f   z  |d|dz
  f|	d|dz
  f«       S | j                  |j                  d   «      ry t        j                   S )Nr   rw   r‹   )ÚSumzz1, z2)r9   )r{   rb  ÚparentÚdiffrÀ   rÁ   r:   rA   r   r’   Úsympy.concrete.summationsry  r   r   r¯   r   ÚZero)r@   ÚvÚMrk  r­   ry  rÀ   rÁ   Úi1Úi2ÚYÚr1Úr2s                r'   r±   zMatrixElement._eval_derivative  sv  € ä˜!œ]Ô+Ø—;‘;×#Ñ# AÓ& t§v¡v¨t¯v©v ~Ñ6Ð6à�I‰I�a‰Lˆà�{‰{× Ñ ‰ˆˆ1à�—‘�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ˆqÜ˜X¬5Ô1‰FˆB�Ø—‘�q‘	ˆAØ—W‘W‰FˆB�Ù˜˜!˜R˜%™  2 r 6¡§¡°Ó!2Ñ2°1°R¸°U±8Ñ;¸bÀ!ÀRÈÁT¸]ÈRÐQRÐTVÐWXÑTXÈMÓZÐZÐZà�8‰8�A—F‘F˜1‘IÔØä�v‰vˆr*   N)r¾   r  r  r$  rz  rÀ   rÁ   Ú	_diff_wrtr"  r   r8   rs  rM   rw  r±   r+   r*   r'   rb  rb  U  si   „ ÙÑ/Ó0€FÙÑ*Ó+€AÙÑ*Ó+€AØ€IØ€IØ€Nòð$ ñó ðò)ð ñó ðór*   rb  c                  ój   — e Zd ZdZdZdZdZd„ Zed„ «       Z	ed„ «       Z
d„ Zed„ «       Zd	„ Zd
„ Zd„ Zy)ÚMatrixSymbola¦  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                óÜ   — t        |«      t        |«      }}| j                  |«       | j                  |«       t        |t        «      rt	        |«      }t        j                  | |||«      }|S r"   )r   r¼   r{   rl  r   r   r8   ro  s        r'   r8   zMatrixSymbol.__new__¯  sW   € Ü˜‹{œH Q›Kˆ1ˆà�‰�qÔØ�‰�qÔä�dœCÔ Ü�t“9ˆDÜ�m‰m˜C  q¨!Ó,ˆØˆ
r*   c                ó>   — | j                   d   | j                   d   fS )Nrw   r‹   rd  r?   s    r'   rA   zMatrixSymbol.shapeº  s   € à�y‰y˜‰|˜TŸY™Y q™\Ð)Ð)r*   c                ó4   — | j                   d   j                  S rq   )r:   rp  r?   s    r'   rp  zMatrixSymbol.name¾  s   € à�y‰y˜‰|× Ñ Ð r*   c                ó   — t        | ||«      S r"   )rb  r¿   s       r'   rÂ   zMatrixSymbol._entryÂ  s   € Ü˜T 1 aÓ(Ð(r*   c                ó   — | hS r"   r+   r?   s    r'   Úfree_symbolszMatrixSymbol.free_symbolsÅ  s	   € àˆvˆr*   c                ó   — | S r"   r+   )r@   r;   s     r'   r¨   zMatrixSymbol._eval_simplifyÉ  rÿ   r*   c                óN   — t        | j                  d   | j                  d   «      S ©Nr   rw   )r²   rA   )r@   r§   s     r'   r±   zMatrixSymbol._eval_derivativeÌ  s   € ä˜$Ÿ*™* Q™-¨¯©°A©Ó7Ð7r*   c                óL  — | |k7  rž| j                   d   dk7  r&t        |j                   d   | j                   d   «      nt        j                  }| j                   d   dk7  r&t        |j                   d   | j                   d   «      nt        j                  }t	        ||g«      gS | j                   d   dk7  rt        | j                   d   «      nt        j                  }| j                   d   dk7  rt        | j                   d   «      nt        j                  }t	        ||g«      gS r�  )rA   r²   r   r}  Ú_LeftRightArgsrU  rÅ   )r@   r§   ÚfirstÚseconds       r'   r\  z*MatrixSymbol._eval_derivative_matrix_linesÐ  só   € Ø�1Š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*   N)r¾   r  r  r  r   r"  r…  r8   r$  rA   rp  rÂ   r�  r¨   r±   r\  r+   r*   r'   r‡  r‡  š  sm   „ ñð  €NØ€IØ€Iò	ð ñ*ó ð*ð ñ!ó ð!ò)ð ñó ðòò8ór*   r‡  c                óZ   — | j                   D �cg c]  }|j                  sŒ|‘Œ c}S c c}w r"   )r�  r2   )r
  Úsyms     r'   Úmatrix_symbolsr—  ß  s"   € Ø×,Ñ,Ö>�C°·³ŠCÒ>Ð>ùÒ>s   �(¡(c                  óÖ   — e Zd ZdZej
                  fd„Zed„ «       Zej                  d„ «       Zed„ «       Z
e
j                  d„ «       Z
d„ Zd„ Zed	„ «       Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)r’  a‘  
    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                ó®   — t        |«      | _        | j                  | _        d| _        d| _        | j                  | _        d| _        d| _        || _        y r�  )	ÚlistÚ_linesÚ_first_pointer_parentÚ_first_pointer_indexÚ_first_line_indexÚ_second_pointer_parentÚ_second_pointer_indexÚ_second_line_indexÚhigher)r@   r^  r¢  s      r'   Ú__init__z_LeftRightArgs.__init__ñ  sL   € Ü˜5“kˆŒØ%)§[¡[ˆÔ"Ø$%ˆÔ!Ø!"ˆÔØ&*§k¡kˆÔ#Ø%&ˆÔ"Ø"#ˆÔØˆ�r*   c                ó4   — | j                   | j                     S r"   ©rœ  r�  r?   s    r'   Úfirst_pointerz_LeftRightArgs.first_pointerû  s   € à×)Ñ)¨$×*CÑ*CÑDÐDr*   c                ó6   — || j                   | j                  <   y r"   r¥  ©r@   Úvalues     r'   r¦  z_LeftRightArgs.first_pointerÿ  s   € à@Eˆ×"Ñ" 4×#<Ñ#<Ò=r*   c                ó4   — | j                   | j                     S r"   ©rŸ  r   r?   s    r'   Úsecond_pointerz_LeftRightArgs.second_pointer  s   € à×*Ñ*¨4×+EÑ+EÑFÐFr*   c                ó6   — || j                   | j                  <   y r"   r«  r¨  s     r'   r¬  z_LeftRightArgs.second_pointer  s   € àBGˆ×#Ñ# D×$>Ñ$>Ò?r*   c                ó‚   — | j                   D �cg c]  }| j                  |«      ‘Œ }}d|›d| j                  ›d�S c c}w )Nz_LeftRightArgs(lines=z	, higher=rá   )r›  Ú_buildr¢  )r@   rÀ   Úbuilts      r'   Ú__repr__z_LeftRightArgs.__repr__  s:   € Ø)-¯©Ö5 A�—‘˜Q•Ð5ˆÑ5âØ�K‹Kð
ð 	
ùò 6s   �<c                óØ   — | j                   | j                  c| _        | _         | j                  | j                  c| _        | _        | j                  | j
                  c| _        | _        | S r"   )rŸ  rœ  r   r�  r¡  rž  r?   s    r'   rË   z_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                óî   — t        | t        «      r| j                  «       S t        | t        «      r?t	        | «      dk(  r| d   S  | d   | d   D �cg c]  }t
        j                  |«      ‘Œ c}Ž S | S c c}w )Nrw   r   )r{   r   r]  rš  rå   r’  r¯  )r
  rÀ   s     r'   r¯  z_LeftRightArgs._build  sl   € ä�dœKÔ(Ø—:‘:“<ÐÜ�dœDÔ!Ü�4‹y˜AŠ~Ø˜A‘w�à�t˜A‘wÀ4ÈÁ7Ö K¸a¤×!6Ñ!6°qÕ!9Ò KÐLÐLàˆKùò !Ls   ÁA2c                óÒ   — | j                   D �cg c]  }| j                  |«      ‘Œ }}| j                  dk7  r|| j                  | j                  «      gz  }t        |«      }|S c c}w rv   )r›  r¯  r¢  rš  )r@   rÀ   Údatas      r'   r]  z_LeftRightArgs.build$  sZ   € Ø(,¯©Ö4 1�—‘˜A•Ð4ˆÐ4Ø�;‰;˜!ÒØ�T—[‘[ §¡Ó-Ð.Ñ.ˆDÜ�D‹zˆØˆùò	 5s   �A$c                ó  — | j                   dk7  r| j                  dk7  rt        d«      ‚d„ } || j                   «      d    || j                  «      d   k7  rw || j                  «      dk(  r| j                   | j                  d   z  S  || j                   «      dk(  r&| j                   d   | j                  j                  z  S t        d«      ‚| j                   dk7  r#| j                   | j                  j                  z  S | j                  S )Nrw   z.higher dimensional array cannot be representedc                ó<   — t        | t        «      r| j                  S y)N)NNrG  rH  s    r'   rJ  z._LeftRightArgs.matrix_form.<locals>._get_shape/  s   € Ü˜$¤
Ô+Ø—z‘zÐ!Ør*   rF  )r   r   zincompatible shapes)r“  r¢  r¸   r”  rÎ   )r@   rJ  s     r'   Úmatrix_formz_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                ó  — d}| j                   dk7  r)|t        d„ | j                   j                  D «       «      z  }| j                  dk7  r)|t        d„ | j                  j                  D «       «      z  }| j                  dk7  r|dz  }|S )zl
        Number of dimensions different from trivial (warning: not related to
        matrix rank).
        r   rw   c              3  ó&   K  — | ]	  }|d k7  –— Œ y­wrM  r+   ©rN  rÀ   s     r'   rO  z&_LeftRightArgs.rank.<locals>.<genexpr>H  s   è ø€ Ò9 1˜˜Q�Ñ9ùó   ‚c              3  ó&   K  — | ]	  }|d k7  –— Œ y­wrM  r+   r»  s     r'   rO  z&_LeftRightArgs.rank.<locals>.<genexpr>J  s   è ø€ Ò: 1˜˜Q�Ñ:ùr¼  r‹   )r“  rP  rA   r”  r¢  )r@   r`  s     r'   r`  z_LeftRightArgs.rankA  sx   € ð
 ˆØ�:‰:˜Š?Ø”CÑ9¨¯
©
×(8Ñ(8Ô9Ó9Ñ9ˆDØ�;‰;˜!ÒØ”CÑ:¨¯©×(9Ñ(9Ô:Ó:Ñ:ˆDØ�;‰;˜!ÒØ�A‰IˆDØˆr*   c                ój   — ddl m} ddl m} t        |t        |||g«      dg|j                  ¬«      }|S )Né   )ÚArrayTensorProduct)ÚArrayContraction)rw   r‹   )Ú	validator)Ú*tensor.array.expressions.array_expressionsrÀ  rÁ  r   Ú	_validate)r@   ÚpointerrQ   rÀ  rÁ  Úsubexprs         r'   Ú_multiply_pointerz _LeftRightArgs._multiply_pointerO  sG   € ÝTÝRäØäØ&àØðóð ð	ð '×0Ñ0ô
ˆð ˆr*   c                ó.   — | xj                   |z  c_         y r"   )r¦  rU   s     r'   Úappend_firstz_LeftRightArgs.append_firstd  s   € Ø×Ò˜eÑ#Ör*   c                ó.   — | xj                   |z  c_         y r"   )r¬  rU   s     r'   Úappend_secondz_LeftRightArgs.append_secondg  s   € Ø×Ò˜uÑ$Ör*   N)r¾   r  r  r  r   rÅ   r£  r$  r¦  Úsetterr¬  r±  rË   r'  r¯  r]  r¸  r`  rÇ  rÉ  rË  r+   r*   r'   r’  r’  ã  sµ   „ ñð &'§U¡Uó ð ñEó ðEð ×ÑñFó ðFð ñGó ðGð ×ÑñHó ðHò
òð ñ	ó ð	òòò,òò*$ó%r*   r’  c                óF   — ddl m} t        | t        «      r| S  || gg«      S )Nr   rì   )rî   rí   r{   r/   )r§   rí   s     r'   Ú_make_matrixrÎ  k  s#   € Ý=Ü�!”ZÔ ØˆÙ !  Ó&Ð&r*   rw   rH   rC   r    rš   r‘   )r²   rU  r–   r"   r  )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-   r/   r-  r7  Ú"_constructor_postprocessor_mappingrB  r;  rb  r‡  r—  r’  rÎ  ÚmatmulrI   ÚmataddrD   Úmatpowri   rË   r�   rÐ   r’   Úspecialr²   rU  Údeterminantr—   r+   r*   r'   ú<module>ræ     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*   