Ë
    7^(hð[  ã                   ó–  — 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	m
Z
mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZm Z  dd	l!m"Z"m#Z#m$Z$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddgiZ7 G d„ de«      Z8 G d„ de8«      Z9 G d„ de9«      Z: G d„ de:«      Z; G d„ de«      Z< G d„ de«      Z=y)é    )ÚBasic)ÚDummyé   )ÚMatrixCommon)ÚNonSquareMatrixError)Ú_iszeroÚ_is_zero_after_expand_mulÚ	_simplify)Ú_find_reasonable_pivotÚ_find_reasonable_pivot_naiveÚ	_adjugateÚ	_charpolyÚ	_cofactorÚ_cofactor_matrixÚ_perÚ_detÚ_det_bareissÚ_det_berkowitzÚ	_det_birdÚ_det_laplaceÚ_det_LUÚ_minorÚ_minor_submatrix)Ú_is_echelonÚ_echelon_formÚ_rankÚ_rref)Ú_columnspaceÚ
_nullspaceÚ	_rowspaceÚ_orthogonalize)Ú
_eigenvalsÚ_eigenvectsÚ_bidiagonalizeÚ_bidiagonal_decompositionÚ_is_diagonalizableÚ_diagonalizeÚ_is_positive_definiteÚ_is_positive_semidefiniteÚ_is_negative_definiteÚ_is_negative_semidefiniteÚ_is_indefiniteÚ_jordan_formÚ_left_eigenvectsÚ_singular_values)Ú
MatrixBase)zMatrixEigen.is_indefinitez MatrixEigen.is_negative_definitez$MatrixEigen.is_negative_semidefinitez MatrixEigen.is_positive_definitez$MatrixEigen.is_positive_semidefiniteÚ
matplotlibc                   óž  — e Zd ZdZefd„Zd„ Zedfd„Zd„ Z	d„ Z
d„ Zdd	„Zd
efd„Zdd„Zdd„Zdd„Zd„ Zdd„Zd„ Zej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e	_        ej                  e
_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        e j                  e_        ej                  e_        e!j                  e_        e"j                  e_        e#j                  e_        y)ÚMatrixDeterminantzˆProvides basic matrix determinant operations. Should not be instantiated
    directly. See ``determinant.py`` for their implementations.c                 ó   — t        | |¬«      S )N)Ú
iszerofunc©r   )Úselfr5   s     úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/matrices/matrices.pyÚ_eval_det_bareissz#MatrixDeterminant._eval_det_bareiss3   s   € Ü˜D¨ZÔ8Ð8ó    c                 ó   — t        | «      S ©N)r   ©r7   s    r8   Ú_eval_det_berkowitzz%MatrixDeterminant._eval_det_berkowitz6   s   € Ü˜dÓ#Ð#r:   Nc                 ó   — t        | ||¬«      S )N)r5   Úsimpfunc)r   )r7   r5   r@   s      r8   Ú_eval_det_luzMatrixDeterminant._eval_det_lu9   s   € Ü�t¨
¸XÔFÐFr:   c                 ó   — t        | «      S r<   )r   r=   s    r8   Ú_eval_det_birdz MatrixDeterminant._eval_det_bird<   s   € Ü˜‹Ðr:   c                 ó   — t        | «      S r<   )r   r=   s    r8   Ú_eval_det_laplacez#MatrixDeterminant._eval_det_laplace?   ó   € Ü˜DÓ!Ð!r:   c                 ó   — t        | «      S r<   ©r   r=   s    r8   Ú_eval_determinantz#MatrixDeterminant._eval_determinantB   ó   € Ü�D‹zÐr:   c                 ó   — t        | |¬«      S ©N©Úmethod)r   ©r7   rN   s     r8   ÚadjugatezMatrixDeterminant.adjugateE   s   € Ü˜ fÔ-Ð-r:   Úlambdac                 ó   — t        | ||¬«      S )N)ÚxÚsimplify)r   ©r7   rS   rT   s      r8   ÚcharpolyzMatrixDeterminant.charpolyH   s   € Ü˜ ¨XÔ6Ð6r:   c                 ó    — t        | |||¬«      S rL   )r   ©r7   ÚiÚjrN   s       r8   ÚcofactorzMatrixDeterminant.cofactorK   s   € Ü˜˜q !¨FÔ3Ð3r:   c                 ó   — t        | |¬«      S rL   )r   rO   s     r8   Úcofactor_matrixz!MatrixDeterminant.cofactor_matrixN   s   € Ü ¨VÔ4Ð4r:   c                 ó   — t        | ||¬«      S )N)rN   r5   rH   )r7   rN   r5   s      r8   ÚdetzMatrixDeterminant.detQ   s   € Ü�D °JÔ?Ð?r:   c                 ó   — t        | «      S r<   )r   r=   s    r8   ÚperzMatrixDeterminant.perT   rJ   r:   c                 ó    — t        | |||¬«      S rL   )r   rX   s       r8   ÚminorzMatrixDeterminant.minorW   s   € Ü�d˜A˜q¨Ô0Ð0r:   c                 ó   — t        | ||«      S r<   )r   ©r7   rY   rZ   s      r8   Úminor_submatrixz!MatrixDeterminant.minor_submatrixZ   s   € Ü  a¨Ó+Ð+r:   ©Ú	berkowitz)ÚbareissN)$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r9   r>   r   rA   rC   rE   rI   rP   r
   rV   r[   r]   r_   ra   rc   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   © r:   r8   r3   r3   /   s@  „ ñCð ,Eó 9ò$ð '.¸ó Gòò"òó.ð "¨Ió 7ó4ó5ó@òó1ò,ð ,B×+IÑ+IÐÔ"Ø+G×+OÑ+OÐ Ô(Ø+7×+?Ñ+?ÐÔØ+9×+AÑ+AÐÔØ(1×(9Ñ(9€NÔØ+7×+?Ñ+?ÐÔØ+2¯?©?€LÔØ+/¯<©<ÐÔØ+4×+<Ñ+<€HÔØ+4×+<Ñ+<€HÔØ+4×+<Ñ+<€HÔØ+;×+CÑ+C€OÔØ+/¯<©<€C„KØ+/¯<©<€C„KØ+1¯>©>€E„MØ+;×+CÑ+C€OÕr:   r3   c                   ó  — e Zd ZdZeddfd„Zed„ «       Zedfd„Zd„ Z	edddfd„Z
ej                  e_        ej                  e_        ej                  e_        ej                  e
_        dd	„Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zy)ÚMatrixReductionszŽProvides basic matrix row/column operations. Should not be instantiated
    directly. See ``reductions.py`` for some of their implementations.Fc                 ó    — t        | |||¬«      S )N)r5   rT   Úwith_pivots)r   )r7   r5   rT   rr   s       r8   Úechelon_formzMatrixReductions.echelon_forms   s   € Ü˜T¨jÀ8Ø'ô)ð 	)r:   c                 ó   — t        | «      S r<   )r   r=   s    r8   Ú
is_echelonzMatrixReductions.is_echelonw   s   € ä˜4Ó Ð r:   c                 ó   — t        | ||¬«      S )N)r5   rT   )r   )r7   r5   rT   s      r8   ÚrankzMatrixReductions.rank{   s   € Ü�T j¸8ÔDÐDr:   c                 óÈ   — t        | j                  | | j                  | j                  «      |«      «      \  }}|dd…d| j                  …f   |dd…|j                   d…f   fS )aÅ  Return reduced row-echelon form of matrix, matrix showing
        rhs after reduction steps. ``rhs`` must have the same number
        of rows as ``self``.

        Examples
        ========

        >>> from sympy import Matrix, symbols
        >>> r1, r2 = symbols('r1 r2')
        >>> Matrix([[1, 1], [2, 1]]).rref_rhs(Matrix([r1, r2]))
        (Matrix([
        [1, 0],
        [0, 1]]), Matrix([
        [ -r1 + r2],
        [2*r1 - r2]]))
        N)r   ÚhstackÚeyeÚrowsÚcols)r7   ÚrhsÚrÚ_s       r8   Úrref_rhszMatrixReductions.rref_rhs~   sY   € ô" �T—[‘[  t§x¡x°·	±	Ó':¸CÓ@ÓA‰ˆˆ1Ø’�J�T—Y‘Y�J�Ñ ¢1 s§x¡x i¡j =Ñ!1Ð1Ð1r:   Tc                 ó"   — t        | ||||¬«      S )N)r5   rT   ÚpivotsÚnormalize_last)r   )r7   r5   rT   r‚   rƒ   s        r8   ÚrrefzMatrixReductions.rref’   s   € ä�T j¸8Ø¨.ô:ð 	:r:   c                 ó  — |dvrt        dj                  ||«      «      ‚|dk(  r| j                  n| j                  }|dk(  rM|�|n|}|�|€t        dj                  |«      «      ‚d|cxk  r|k  �s�n t        dj                  ||«      «      ‚|d	k(  r¶||||hj	                  dg«      }t        |«      d
kD  r|||hj	                  dg«      }t        |«      d
k7  rt        dj                  |«      «      ‚|\  }}d|cxk  r|k  sn t        dj                  ||«      «      ‚d|cxk  r|k  sÔn t        dj                  ||«      «      ‚|dk(  r›|€|n|}|€|n|}|�|�|€t        dj                  |«      «      ‚||k(  rt        dj                  |«      «      ‚d|cxk  r|k  sn t        dj                  ||«      «      ‚d|cxk  r|k  s4n t        dj                  ||«      «      ‚t        dt        |«      z  «      ‚|||||fS )z�Validate the arguments for a row/column operation.  ``error_str``
        can be one of "row" or "col" depending on the arguments being parsed.)ún->knún<->mún->n+kmzOUnknown {} operation '{}'. Valid col operations are 'n->kn', 'n<->m', 'n->n+km'Úcolr†   NzEFor a {0} operation 'n->kn' you must provide the kwargs `{0}` and `k`r   z#This matrix does not have a {} '{}'r‡   é   zIFor a {0} operation 'n<->m' you must provide the kwargs `{0}1` and `{0}2`rˆ   zPFor a {0} operation 'n->n+km' you must provide the kwargs `{0}`, `k`, and `{0}2`zAFor a {0} operation 'n->n+km' `{0}` and `{0}2` must be different.zinvalid operation %s)Ú
ValueErrorÚformatr|   r{   Ú
differenceÚlenÚrepr)	r7   Úopr‰   ÚkÚcol1Úcol2Ú	error_strÚ	self_colsr|   s	            r8   Ú_normalize_op_argsz#MatrixReductions._normalize_op_argsœ   sT  € ð Ð2Ñ2Üð ?ß?E¹vÀiÐQSÓ?TóVð Vð "+¨eÒ!3�D—I’I¸¿¹ˆ	ð �Š=Ø˜‘#¨dˆCØˆ{˜a˜iÜ ð "8ß8>¹¸yÓ8IóKð Kà˜Ô'˜iÕ'Ü Ð!F×!MÑ!MÈiÐY\Ó!]Ó^Ð^à�7Š]ð ˜˜D $Ð'×2Ñ2°D°6Ó:ˆDÜ�4‹y˜1Š}à˜T 4Ð(×3Ñ3°T°FÓ;�Ü�4‹y˜AŠ~Ü ð "<ß<B¹FÀ9Ó<MóOð Oà‰JˆD�$Ø˜Ô(˜yÔ(Ü Ð!F×!MÑ!MÈiÐY]Ó!^Ó_Ð_Ø˜Ô(˜yÔ(Ü Ð!F×!MÑ!MÈiÐY]Ó!^Ó_Ð_à�9Š_Ø˜+‘$¨3ˆCØ˜<‘4¨TˆDØˆ{˜d˜l¨a¨iÜ ð "AßAGÁÈ	ÓARóTð Tà�dŠ{Ü ð "1ß17±¸	Ó1BóDð Dà˜Ô'˜iÔ'Ü Ð!F×!MÑ!MÈiÐY\Ó!]Ó^Ð^Ø˜Ô(˜yÔ(Ü Ð!F×!MÑ!MÈiÐY]Ó!^Ó_Ð_ô Ð3´d¸2³hÑ>Ó?Ð?à�3˜˜4 Ð%Ð%r:   c                 ód   ‡ ‡‡— ˆˆˆ fd„}‰ j                  ‰ j                  ‰ j                  |«      S )Nc                 ó0   •— |‰k(  r
‰‰| |f   z  S ‰| |f   S r<   rn   )rY   rZ   r‰   r‘   r7   s     €€€r8   ÚentryzBMatrixReductions._eval_col_op_multiply_col_by_const.<locals>.entryÔ   ó*   ø€ Ø�CŠxØ˜4  1 ™:‘~Ð%Ø˜˜1˜‘:Ðr:   ©Ú_newr{   r|   )r7   r‰   r‘   r™   s   ``` r8   Ú"_eval_col_op_multiply_col_by_constz3MatrixReductions._eval_col_op_multiply_col_by_constÓ   ó%   ú€ ö	ð �y‰y˜Ÿ™ D§I¡I¨uÓ5Ð5r:   c                 ód   ‡ ‡‡— ˆˆˆ fd„}‰ j                  ‰ j                  ‰ j                  |«      S )Nc                 óB   •— |‰k(  r‰| ‰f   S |‰k(  r‰| ‰f   S ‰| |f   S r<   rn   )rY   rZ   r’   r“   r7   s     €€€r8   r™   z1MatrixReductions._eval_col_op_swap.<locals>.entryÛ   s;   ø€ Ø�DŠyØ˜A˜t˜G‘}Ð$Ø�d’Ø˜A˜t˜G‘}Ð$Ø˜˜1˜‘:Ðr:   r›   )r7   r’   r“   r™   s   ``` r8   Ú_eval_col_op_swapz"MatrixReductions._eval_col_op_swapÚ   ó%   ú€ ö	ð �y‰y˜Ÿ™ D§I¡I¨uÓ5Ð5r:   c                 óh   ‡ ‡‡‡— ˆˆˆˆ fd„}‰ j                  ‰ j                  ‰ j                  |«      S )Nc                 ó@   •— |‰k(  r‰| |f   ‰‰| ‰f   z  z   S ‰| |f   S r<   rn   )rY   rZ   r‰   r“   r‘   r7   s     €€€€r8   r™   zFMatrixReductions._eval_col_op_add_multiple_to_other_col.<locals>.entryä   s8   ø€ Ø�CŠxØ˜A˜q˜D‘z A¨¨Q°¨W©Ñ$5Ñ5Ð5Ø˜˜1˜‘:Ðr:   r›   )r7   r‰   r‘   r“   r™   s   ```` r8   Ú&_eval_col_op_add_multiple_to_other_colz7MatrixReductions._eval_col_op_add_multiple_to_other_colã   ó%   û€ ÷	ð �y‰y˜Ÿ™ D§I¡I¨uÓ5Ð5r:   c                 ód   ‡ ‡‡— ˆˆˆ fd„}‰ j                  ‰ j                  ‰ j                  |«      S )Nc                 óB   •— | ‰k(  r‰‰|f   S | ‰k(  r‰‰|f   S ‰| |f   S r<   rn   )rY   rZ   Úrow1Úrow2r7   s     €€€r8   r™   z1MatrixReductions._eval_row_op_swap.<locals>.entryë   s;   ø€ Ø�DŠyØ˜D !˜G‘}Ð$Ø�d’Ø˜D !˜G‘}Ð$Ø˜˜1˜‘:Ðr:   r›   )r7   r©   rª   r™   s   ``` r8   Ú_eval_row_op_swapz"MatrixReductions._eval_row_op_swapê   r¢   r:   c                 ód   ‡ ‡‡— ˆˆˆ fd„}‰ j                  ‰ j                  ‰ j                  |«      S )Nc                 ó0   •— | ‰k(  r
‰‰| |f   z  S ‰| |f   S r<   rn   )rY   rZ   r‘   Úrowr7   s     €€€r8   r™   zBMatrixReductions._eval_row_op_multiply_row_by_const.<locals>.entryô   rš   r:   r›   )r7   r®   r‘   r™   s   ``` r8   Ú"_eval_row_op_multiply_row_by_constz3MatrixReductions._eval_row_op_multiply_row_by_constó   rž   r:   c                 óh   ‡ ‡‡‡— ˆˆˆˆ fd„}‰ j                  ‰ j                  ‰ j                  |«      S )Nc                 ó@   •— | ‰k(  r‰| |f   ‰‰‰|f   z  z   S ‰| |f   S r<   rn   )rY   rZ   r‘   r®   rª   r7   s     €€€€r8   r™   zFMatrixReductions._eval_row_op_add_multiple_to_other_row.<locals>.entryû   s8   ø€ Ø�CŠxØ˜A˜q˜D‘z A¨¨T°1¨W©Ñ$5Ñ5Ð5Ø˜˜1˜‘:Ðr:   r›   )r7   r®   r‘   rª   r™   s   ```` r8   Ú&_eval_row_op_add_multiple_to_other_rowz7MatrixReductions._eval_row_op_add_multiple_to_other_rowú   r¦   r:   Nc                 óÈ   — | j                  |||||d«      \  }}}}}|dk(  r| j                  ||«      S |dk(  r| j                  ||«      S |dk(  r| j                  |||«      S y)ad  Performs the elementary column operation `op`.

        `op` may be one of

            * ``"n->kn"`` (column n goes to k*n)
            * ``"n<->m"`` (swap column n and column m)
            * ``"n->n+km"`` (column n goes to column n + k*column m)

        Parameters
        ==========

        op : string; the elementary row operation
        col : the column to apply the column operation
        k : the multiple to apply in the column operation
        col1 : one column of a column swap
        col2 : second column of a column swap or column "m" in the column operation
               "n->n+km"
        r‰   r†   r‡   rˆ   N)r–   r�   r¡   r¥   )r7   r�   r‰   r‘   r’   r“   s         r8   Úelementary_col_opz"MatrixReductions.elementary_col_op  ó�   € ð( "&×!8Ñ!8¸¸SÀ!ÀTÈ4ÐQVÓ!WÑˆˆC��D˜$ð �Š=Ø×:Ñ:¸3ÀÓBÐBØ�Š=Ø×)Ñ)¨$°Ó5Ð5Ø�Š?Ø×>Ñ>¸sÀAÀtÓLÐLð r:   c                 óÈ   — | j                  |||||d«      \  }}}}}|dk(  r| j                  ||«      S |dk(  r| j                  ||«      S |dk(  r| j                  |||«      S y)a4  Performs the elementary row operation `op`.

        `op` may be one of

            * ``"n->kn"`` (row n goes to k*n)
            * ``"n<->m"`` (swap row n and row m)
            * ``"n->n+km"`` (row n goes to row n + k*row m)

        Parameters
        ==========

        op : string; the elementary row operation
        row : the row to apply the row operation
        k : the multiple to apply in the row operation
        row1 : one row of a row swap
        row2 : second row of a row swap or row "m" in the row operation
               "n->n+km"
        r®   r†   r‡   rˆ   N)r–   r¯   r«   r²   )r7   r�   r®   r‘   r©   rª   s         r8   Úelementary_row_opz"MatrixReductions.elementary_row_op  rµ   r:   )r‰   )r†   NNNN)rj   rk   rl   rm   r   rs   Úpropertyru   rw   r€   r„   r   r   r   r   r–   r�   r¡   r¥   r«   r¯   r²   r´   r·   rn   r:   r8   rp   rp   o   s±   „ ñJð '.¸È5ó )ð ñ!ó ð!ð &°ó Eò2ð( &°¸dØó:ð
 )×0Ñ0€LÔØ&×.Ñ.€JÔØ Ÿ=™=€D„LØ Ÿ=™=€D„Ló5&òn6ò6ò6ò6ò6ò6óMô<Mr:   rp   c                   óÊ   — e Zd ZdZdd„Zdefd„Zdd„Zd„ Ze	j                  e_        e
j                  e_        ej                  e_        ej                  e_         ee«      Zy)	ÚMatrixSubspacesz Provides methods relating to the fundamental subspaces of a matrix.
    Should not be instantiated directly. See ``subspaces.py`` for their
    implementations.Fc                 ó   — t        | |¬«      S ©N)rT   )r   ©r7   rT   s     r8   ÚcolumnspacezMatrixSubspaces.columnspaceC  s   € Ü˜D¨8Ô4Ð4r:   c                 ó   — t        | ||¬«      S )N)rT   r5   )r   )r7   rT   r5   s      r8   Ú	nullspacezMatrixSubspaces.nullspaceF  s   € Ü˜$¨¸jÔIÐIr:   c                 ó   — t        | |¬«      S r¼   )r    r½   s     r8   ÚrowspacezMatrixSubspaces.rowspaceI  s   € Ü˜¨Ô1Ð1r:   c                 ó    — t        | g|¢­i |¤ŽS r<   )r!   )ÚclsÚvecsÚkwargss      r8   ÚorthogonalizezMatrixSubspaces.orthogonalizeO  s   € Ü˜cÐ3 DÒ3¨FÑ3Ð3r:   N©F)rj   rk   rl   rm   r¾   r   rÀ   rÂ   rÇ   r   r   r    r!   Úclassmethodrn   r:   r8   rº   rº   >  sg   „ ñó5ð "'°7ó Jó2ò4ð )×0Ñ0€KÔØ&×.Ñ.€IÔØ%×-Ñ-€HÔØ*×2Ñ2€MÔá'¨Ó6�Mr:   rº   c                   ó„  — e Zd ZdZdd„Zdefd„Zdd„Zdd„Zdd„Z	dd„Z
ed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zdd„Zd„ Zd„ Zej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        ej                  e_        e j                  e	_        e!j                  e
_        y)ÚMatrixEigenzŒProvides basic matrix eigenvalue/vector operations.
    Should not be instantiated directly. See ``eigen.py`` for their
    implementations.Tc                 ó   — t        | fd|i|¤ŽS )NÚerror_when_incomplete)r"   )r7   rÍ   Úflagss      r8   Ú	eigenvalszMatrixEigen.eigenvals_  s   € Ü˜$ÑUÐ6KÐUÈuÑUÐUr:   c                 ó    — t        | f||dœ|¤ŽS )N)rÍ   r5   )r#   )r7   rÍ   r5   rÎ   s       r8   Ú
eigenvectszMatrixEigen.eigenvectsb  s$   € Ü˜4ð 0Ð7LØ%ñ0Ø).ñ0ð 	0r:   c                 ó   — t        | fd|i|¤ŽS )NÚ
reals_only)r&   )r7   rÓ   rÆ   s      r8   Úis_diagonalizablezMatrixEigen.is_diagonalizablef  s   € Ü! $ÑH°:ÐHÀÑHÐHr:   c                 ó    — t        | |||¬«      S )N)rÓ   ÚsortÚ	normalize)r'   )r7   rÓ   rÖ   r×   s       r8   ÚdiagonalizezMatrixEigen.diagonalizei  s   € Ü˜D¨Z¸dØ#ô%ð 	%r:   c                 ó   — t        | |¬«      S ©N)Úupper)r$   ©r7   rÛ   s     r8   ÚbidiagonalizezMatrixEigen.bidiagonalizem  s   € Ü˜d¨%Ô0Ð0r:   c                 ó   — t        | |¬«      S rÚ   )r%   rÜ   s     r8   Úbidiagonal_decompositionz$MatrixEigen.bidiagonal_decompositionp  s   € Ü(¨°UÔ;Ð;r:   c                 ó   — t        | «      S r<   )r(   r=   s    r8   Úis_positive_definitez MatrixEigen.is_positive_definites  ó   € ä$ TÓ*Ð*r:   c                 ó   — t        | «      S r<   )r)   r=   s    r8   Úis_positive_semidefinitez$MatrixEigen.is_positive_semidefinitew  ó   € ä(¨Ó.Ð.r:   c                 ó   — t        | «      S r<   )r*   r=   s    r8   Úis_negative_definitez MatrixEigen.is_negative_definite{  râ   r:   c                 ó   — t        | «      S r<   )r+   r=   s    r8   Úis_negative_semidefinitez$MatrixEigen.is_negative_semidefinite  rå   r:   c                 ó   — t        | «      S r<   )r,   r=   s    r8   Úis_indefinitezMatrixEigen.is_indefiniteƒ  s   € ä˜dÓ#Ð#r:   c                 ó   — t        | fd|i|¤ŽS )NÚcalc_transform)r-   )r7   rí   rÆ   s      r8   Újordan_formzMatrixEigen.jordan_form‡  s   € Ü˜DÑJ°ÐJÀ6ÑJÐJr:   c                 ó   — t        | fi |¤ŽS r<   )r.   ©r7   rÎ   s     r8   Úleft_eigenvectszMatrixEigen.left_eigenvectsŠ  s   € Ü Ñ.¨Ñ.Ð.r:   c                 ó   — t        | «      S r<   )r/   r=   s    r8   Úsingular_valueszMatrixEigen.singular_values�  s   € Ü Ó%Ð%r:   N©TrÈ   )FFF)"rj   rk   rl   rm   rÏ   r   rÑ   rÔ   rØ   rÝ   rß   r¸   rá   rä   rç   ré   rë   rî   rñ   ró   r"   r#   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r$   r%   rn   r:   r8   rË   rË   Z  sn  „ ñóVð 04Àó 0óIó%ó1ó<ð ñ+ó ð+ð ñ/ó ð/ð ñ+ó ð+ð ñ/ó ð/ð ñ$ó ð$óKò/ò&ð *4×);Ñ);€IÔØ)4×)<Ñ)<€JÔØ);×)CÑ)CÐÔØ)5×)=Ñ)=€KÔØ)>×)FÑ)FÐÔ Ø)B×)JÑ)JÐÔ$Ø)>×)FÑ)FÐÔ Ø)B×)JÑ)JÐÔ$Ø)7×)?Ñ)?€MÔØ)5×)=Ñ)=€KÔØ)9×)AÑ)A€OÔØ)9×)AÑ)A€OÔØ)7×)?Ñ)?€MÔØ)B×)JÑ)JÐÕ$r:   rË   c                   ó4   — e Zd ZdZddœd„Zd„ Zd„ Zd„ Zd„ Zy	)
ÚMatrixCalculusz,Provides calculus-related matrix operations.T)Úevaluatec                ón   — ddl m}  || g|¢­d|iŽ}t        | t        «      s|r|j	                  «       S |S )ae  Calculate the derivative of each element in the matrix.

        Examples
        ========

        >>> from sympy import Matrix
        >>> from sympy.abc import x, y
        >>> M = Matrix([[x, y], [1, 0]])
        >>> M.diff(x)
        Matrix([
        [1, 0],
        [0, 0]])

        See Also
        ========

        integrate
        limit
        r   )ÚArrayDerivativer÷   )Ú$sympy.tensor.array.array_derivativesrù   Ú
isinstancer   Ú
as_mutable)r7   r÷   ÚargsrÆ   rù   Úderivs         r8   ÚdiffzMatrixCalculus.diff£  s<   € õ* 	IÙ Ð? tÒ?°hÑ?ˆä˜$¤Ô&©8Ø×#Ñ#Ó%Ð%Øˆr:   c                 ó,   ‡— | j                  ˆfd„«      S )Nc                 ó&   •— | j                  ‰«      S r<   ©rÿ   )rS   Úargs    €r8   ú<lambda>z1MatrixCalculus._eval_derivative.<locals>.<lambda>À  s   ø€ ¨¯©¨s«€ r:   ©Ú	applyfunc)r7   r  s    `r8   Ú_eval_derivativezMatrixCalculus._eval_derivative¿  s   ø€ Ø�~‰~Ó3Ó4Ð4r:   c                 ó0   ‡‡— | j                  ˆˆfd„«      S )aþ  Integrate each element of the matrix.  ``args`` will
        be passed to the ``integrate`` function.

        Examples
        ========

        >>> from sympy import Matrix
        >>> from sympy.abc import x, y
        >>> M = Matrix([[x, y], [1, 0]])
        >>> M.integrate((x, ))
        Matrix([
        [x**2/2, x*y],
        [     x,   0]])
        >>> M.integrate((x, 0, 2))
        Matrix([
        [2, 2*y],
        [2,   0]])

        See Also
        ========

        limit
        diff
        c                 ó(   •—  | j                   ‰i ‰¤ŽS r<   )Ú	integrate)rS   rý   rÆ   s    €€r8   r  z*MatrixCalculus.integrate.<locals>.<lambda>Û  s   ø€ ¨¨¯©°TÐ(D¸VÑ(D€ r:   r  )r7   rý   rÆ   s    ``r8   r
  zMatrixCalculus.integrateÂ  s   ù€ ð2 �~‰~ÔDÓEÐEr:   c                 ó²  ‡ ‡— t        ‰t        «      s‰ j                  ‰«      Š‰ j                  d   dk(  r‰ j                  d   }n-‰ j                  d   dk(  r‰ j                  d   }nt	        d«      ‚‰j                  d   dk(  r‰j                  d   }n-‰j                  d   dk(  r‰j                  d   }nt	        d«      ‚‰ j                  ||ˆˆ fd„«      S )aæ  Calculates the Jacobian matrix (derivative of a vector-valued function).

        Parameters
        ==========

        ``self`` : vector of expressions representing functions f_i(x_1, ..., x_n).
        X : set of x_i's in order, it can be a list or a Matrix

        Both ``self`` and X can be a row or a column matrix in any order
        (i.e., jacobian() should always work).

        Examples
        ========

        >>> from sympy import sin, cos, Matrix
        >>> from sympy.abc import rho, phi
        >>> X = Matrix([rho*cos(phi), rho*sin(phi), rho**2])
        >>> Y = Matrix([rho, phi])
        >>> X.jacobian(Y)
        Matrix([
        [cos(phi), -rho*sin(phi)],
        [sin(phi),  rho*cos(phi)],
        [   2*rho,             0]])
        >>> X = Matrix([rho*cos(phi), rho*sin(phi)])
        >>> X.jacobian(Y)
        Matrix([
        [cos(phi), -rho*sin(phi)],
        [sin(phi),  rho*cos(phi)]])

        See Also
        ========

        hessian
        wronskian
        r   r   z)``self`` must be a row or a column matrixz"X must be a row or a column matrixc                 ó2   •— ‰|    j                  ‰|   «      S r<   r  )rZ   rY   ÚXr7   s     €€r8   r  z)MatrixCalculus.jacobian.<locals>.<lambda>  s   ø€ ¨D°©G¯L©L¸¸1¹Ó,>€ r:   )rû   r0   rœ   ÚshapeÚ	TypeError)r7   r  ÚmÚns   ``  r8   ÚjacobianzMatrixCalculus.jacobianÝ  s¿   ù€ ôH ˜!œZÔ(Ø—	‘	˜!“ˆAð �:‰:�a‰=˜AÒØ—
‘
˜1‘‰AØ�Z‰Z˜‰]˜aÒØ—
‘
˜1‘‰AäÐGÓHÐHØ�7‰7�1‰:˜Š?Ø—‘˜‘
‰AØ�W‰W�Q‰Z˜1Š_Ø—‘˜‘
‰AäÐ@ÓAÐAð �y‰y˜˜AÔ>Ó?Ð?r:   c                 ó,   ‡— | j                  ˆfd„«      S )až  Calculate the limit of each element in the matrix.
        ``args`` will be passed to the ``limit`` function.

        Examples
        ========

        >>> from sympy import Matrix
        >>> from sympy.abc import x, y
        >>> M = Matrix([[x, y], [1, 0]])
        >>> M.limit(x, 2)
        Matrix([
        [2, y],
        [1, 0]])

        See Also
        ========

        integrate
        diff
        c                 ó"   •—  | j                   ‰Ž S r<   )Úlimit)rS   rý   s    €r8   r  z&MatrixCalculus.limit.<locals>.<lambda>+  s   ø€ ¨¨¯©°¨€ r:   r  )r7   rý   s    `r8   r  zMatrixCalculus.limit  s   ø€ ð* �~‰~Ó6Ó7Ð7r:   N)	rj   rk   rl   rm   rÿ   r  r
  r  r  rn   r:   r8   rö   rö      s$   „ Ù6à#'ô ò85òFò67@ór8r:   rö   c                   ó|   — e Zd ZdZ ed«      efd„Zd„ Zd„ Zd„ Z	d„ Z
dd„Zd	„ Zd
„ Zd„ Zdd„Zdd„Zd„ Zd„ Zd„ Zy)ÚMatrixDeprecatedz+A class to house deprecated matrix methods.rQ   c                 ó&   — | j                  |¬«      S )N)rS   )rV   rU   s      r8   Úberkowitz_charpolyz#MatrixDeprecated.berkowitz_charpoly1  s   € Ø�}‰}˜qˆ}Ó!Ð!r:   c                 ó&   — | j                  d¬«      S )zwComputes determinant using Berkowitz method.

        See Also
        ========

        det
        berkowitz
        rh   rM   ©r_   r=   s    r8   Úberkowitz_detzMatrixDeprecated.berkowitz_det4  s   € ð �x‰x˜{ˆxÓ+Ð+r:   c                 ó&   —  | j                   di |¤ŽS )zwComputes eigenvalues of a Matrix using Berkowitz method.

        See Also
        ========

        berkowitz
        rn   )rÏ   rð   s     r8   Úberkowitz_eigenvalsz$MatrixDeprecated.berkowitz_eigenvals?  s   € ð ˆt�~‰~Ñ& Ñ&Ð&r:   c                 ó’   — | j                   g }}| j                  «       D ]  }|j                  ||d   z  «       | }Œ t        |«      S )zpComputes principal minors using Berkowitz method.

        See Also
        ========

        berkowitz
        éÿÿÿÿ)Úonerh   ÚappendÚtuple)r7   ÚsignÚminorsÚpolys       r8   Úberkowitz_minorsz!MatrixDeprecated.berkowitz_minorsI  sN   € ð —x‘x ˆfˆà—N‘NÓ$ò 	ˆDØ�M‰M˜$  b¡™/Ô*Ø�5‰Dð	ô �V‹}Ðr:   c                 óä  — ddl m} d}| s|S | j                  s
t        «       ‚| | j                  }}dg|dz
  z  }t        |dd«      D ]À  } ||dz   |«      |dz
  }}||d |…f    |d |…|f   }
}	|d |…d |…f   |||f    }}|
g}t        d|dz
  «      D ]  }|j                  |||   z  «       Œ t        |«      D ]  \  }}|	|z  d   ||<   Œ | j                  |g|z   }t        |«      D ]  }|d ||z
  dz    ||d …|f<   Œ |||dz
  <   ŒÂ | j                  | j                  |d    g«      g}t        |«      D ]  \  }}|j                  |||   z  «       Œ |t        t        t        |«      «      z   S )Nr   )Úzeros))r   r   r   rŠ   )r   r   )Úsympy.matricesr)  Ú	is_squarer   r{   Úranger"  Ú	enumerater!  rœ   r#  Úmap)r7   r)  ÚberkÚAÚNÚ
transformsr  ÚTr‘   ÚRÚCÚaÚitemsrY   ÚBÚpolyss                   r8   rh   zMatrixDeprecated.berkowitzY  sÍ  € Ý(ØˆÙØˆKà�~Š~Ü&Ó(Ð(à�T—Y‘Yˆ1ˆØ�S˜A ™E‘]ˆ
ä�q˜!˜R“ò 	"ˆAÙ˜˜Q™ “? A¨¡EˆqˆAà�a˜˜!˜�e‘H�9˜a    A ™hˆqˆAØ�R�a�R˜˜!˜�V‘9˜q  A ™w˜hˆqˆAà�CˆEä˜1˜a !™e“_ò +�Ø—‘˜Q  q¡™\Õ*ð+ô " %Ó(ò )‘��1Ø ™E 4™=��a’ð)ð —X‘X˜q�M EÑ)ˆEä˜1“Xò -�Ø   ! a¡%¨!¡)Ð,��!‘"�a�%’ð-ð !"ˆJ�q˜1‘uÒð'	"ð* —‘˜DŸH™H q¨¡w hÐ/Ó0Ð1ˆä˜jÓ)ò 	'‰DˆAˆqØ�L‰L˜˜U 1™X™Õ&ð	'ð ”eœC¤ uÓ-Ó.Ñ.Ð.r:   c                 ó&   — | j                  |¬«      S rL   )r]   rO   s     r8   ÚcofactorMatrixzMatrixDeprecated.cofactorMatrix�  s   € Ø×#Ñ#¨6Ð#Ó2Ð2r:   c                 ó   — t        | «      S r<   r6   r=   s    r8   Ú
det_bareiszMatrixDeprecated.det_bareis„  rF   r:   c                 ó&   — | j                  d¬«      S )a´  Compute matrix determinant using LU decomposition.


        Note that this method fails if the LU decomposition itself
        fails. In particular, if the matrix has no inverse this method
        will fail.

        TODO: Implement algorithm for sparse matrices (SFF),
        https://www.eecis.udel.edu/~saunders/papers/sffge/it5.ps

        See Also
        ========


        det
        det_bareiss
        berkowitz_det
        ÚlurM   r  r=   s    r8   Údet_LU_decompositionz%MatrixDeprecated.det_LU_decomposition‡  s   € ð& �x‰x˜tˆxÓ$Ð$r:   c                 ó(   — | j                  ||¬«      S )N)ÚsizeÚ
eigenvalue)Újordan_block)r7   Úeigenvalr  s      r8   Újordan_cellzMatrixDeprecated.jordan_cellœ  s   € Ø× Ñ  a°HÐ Ó=Ð=r:   c                 óL   — | j                  «       \  }}||j                  «       fS r<   )rî   Úget_diag_blocks)r7   Úcalc_transformationÚPÚJs       r8   Újordan_cellszMatrixDeprecated.jordan_cellsŸ  s(   € Ø×ÑÓ!‰ˆˆ1Ø�!×#Ñ#Ó%Ð%Ð%r:   c                 ó*   — | j                  |||¬«      S rL   )rc   rX   s       r8   Ú
minorEntryzMatrixDeprecated.minorEntry£  s   € Ø�z‰z˜!˜Q vˆzÓ.Ð.r:   c                 ó&   — | j                  ||«      S r<   )rf   re   s      r8   ÚminorMatrixzMatrixDeprecated.minorMatrix¦  s   € Ø×#Ñ# A qÓ)Ð)r:   c                 ó(   — | j                  |d¬«      S )zEPermute the rows of the matrix with the given permutation in reverse.Úbackward©Ú	direction©Úpermute_rows©r7   Úperms     r8   ÚpermuteBkwdzMatrixDeprecated.permuteBkwd©  s   € à× Ñ  °Ð Ó<Ð<r:   c                 ó(   — | j                  |d¬«      S )z:Permute the rows of the matrix with the given permutation.ÚforwardrS  rU  rW  s     r8   Ú
permuteFwdzMatrixDeprecated.permuteFwd­  s   € à× Ñ  °Ð Ó;Ð;r:   Nrg   rô   )rj   rk   rl   rm   r   r
   r  r  r  r'  rh   r;  r=  r@  rF  rL  rN  rP  rY  r\  rn   r:   r8   r  r  /  sU   „ Ù5Ù#(¨£?¸Yó "ò	,ò'òò &/óP3ò"ò%ò*>ó&ó/ò*ò=ó<r:   r  N)>Úsympy.core.basicr   Úsympy.core.symbolr   Úcommonr   Ú
exceptionsr   Ú	utilitiesr   r	   r
   Údeterminantr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú
reductionsr   r   r   r   Ú	subspacesr   r   r    r!   Úeigenr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   Ú
matrixbaser0   Ú__doctest_requires__r3   rp   rº   rË   rö   r  rn   r:   r8   ú<module>rh     sÊ   ðõ
 #Ý #å  å ,ç DÑ D÷÷ ÷ ÷ ñ ÷ AÓ @ß JÓ J÷6÷ 6÷ 6÷ 6õ #ð-ð 0<¨nðÐ ô=D˜ô =Dô@LMÐ(ô LMô^7Ð&ô 7ô8CK�/ô CKôLK8�\ô K8ô^@<�|õ @<r:   