§
    OŠtjð[  ã                   ó¼  — 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=dS )é    )Ú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_        dS )Ú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/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/matrices/matrices.pyÚ_eval_det_bareissz#MatrixDeterminant._eval_det_bareiss3   s   € Ý˜D¨ZÐ8Ñ8Ô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ÑFÔ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ŒzÐr:   Ú	berkowitzc                 ó$   — t          | |¬¦  «        S ©N©Úmethod)r   ©r7   rO   s     r8   ÚadjugatezMatrixDeterminant.adjugateE   s   € Ý˜ fÐ-Ñ-Ô-Ð-r:   Úlambdac                 ó&   — t          | ||¬¦  «        S )N)ÚxÚsimplify)r   ©r7   rT   rU   s      r8   ÚcharpolyzMatrixDeterminant.charpolyH   s   € Ý˜ ¨XÐ6Ñ6Ô6Ð6r:   c                 ó(   — t          | |||¬¦  «        S rM   )r   ©r7   ÚiÚjrO   s       r8   ÚcofactorzMatrixDeterminant.cofactorK   s   € Ý˜˜q !¨FÐ3Ñ3Ô3Ð3r:   c                 ó$   — t          | |¬¦  «        S rM   )r   rP   s     r8   Úcofactor_matrixz!MatrixDeterminant.cofactor_matrixN   s   € Ý ¨VÐ4Ñ4Ô4Ð4r:   Úbareissc                 ó&   — t          | ||¬¦  «        S )N)rO   r5   rH   )r7   rO   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 rM   )r   rY   s       r8   ÚminorzMatrixDeterminant.minorW   s   € Ý�d˜A˜q¨Ð0Ñ0Ô0Ð0r:   c                 ó$   — t          | ||¦  «        S r<   )r   ©r7   rZ   r[   s      r8   Úminor_submatrixz!MatrixDeterminant.minor_submatrixZ   s   € Ý  a¨Ñ+Ô+Ð+r:   ©rK   )r_   N)$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r9   r>   r   rA   rC   rE   rI   rQ   r
   rW   r\   r^   ra   rc   re   rh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   © r:   r8   r3   r3   /   sã  € € € € € ðCð Cð ,Eð 9ð 9ð 9ð 9ð$ð $ð $ð '.¸ð Gð Gð Gð Gðð ð ð"ð "ð "ðð ð ð.ð .ð .ð .ð "¨Ið 7ð 7ð 7ð 7ð4ð 4ð 4ð 4ð5ð 5ð 5ð 5ð@ð @ð @ð @ðð ð ð1ð 1ð 1ð 1ð,ð ,ð ,ð ,BÔ+IÐÔ"Ø+GÔ+OÐ Ô(Ø+7Ô+?ÐÔØ+9Ô+AÐÔØ(1Ô(9€NÔØ+7Ô+?ÐÔØ+2¬?€LÔØ+/¬<ÐÔØ+4Ô+<€HÔØ+4Ô+<€HÔØ+4Ô+<€HÔØ+;Ô+C€OÔØ+/¬<€C„KØ+/¬<€C„KØ+1¬>€E„MØ+;Ô+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dS )Ú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   rU   Úwith_pivots)r   )r7   r5   rU   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   rU   )r   )r7   r5   rU   s      r8   ÚrankzMatrixReductions.rank{   s   € Ý�T j¸8ÐDÑDÔDÐDr:   c                 óÎ   — t          |                      | |                      | 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~   sf   € õ" �T—[’[  t§x¢x°´	Ñ':Ô':¸CÑ@Ô@ÑAÔA‰ˆˆ1Ø����J�T”Y�J�Ô  1 1 1 s¤x i j j =Ô!1Ð1Ð1r:   Tc                 ó*   — t          | ||||¬¦  «        S )N)r5   rU   ÚpivotsÚnormalize_last)r   )r7   r5   rU   r‚   rƒ   s        r8   ÚrrefzMatrixReductions.rref’   s$   € å�T j¸8Ø¨.ð:ñ :ô :ð 	:r:   Úcolc                 óô  — |dvr#t          d                     ||¦  «        ¦  «        ‚|dk    r| j        n| j        }|dk    r`|�|n|}|�|€"t          d                     |¦  «        ¦  «        ‚d|cxk    r|k     s%n t          d                     ||¦  «        ¦  «        ‚�nÑ|d	k    rå||||h                     dg¦  «        }t          |¦  «        d
k    r|||h                     dg¦  «        }t          |¦  «        d
k    r"t          d                     |¦  «        ¦  «        ‚|\  }}d|cxk    r|k     s%n t          d                     ||¦  «        ¦  «        ‚d|cxk    r|k     s%n t          d                     ||¦  «        ¦  «        ‚næ|dk    rÁ|€|n|}|€|n|}|�|�|€"t          d                     |¦  «        ¦  «        ‚||k    r"t          d                     |¦  «        ¦  «        ‚d|cxk    r|k     s%n t          d                     ||¦  «        ¦  «        ‚d|cxk    r|k     s%n t          d                     ||¦  «        ¦  «        ‚n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'r…   r‡   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œ   s1  € ð Ð2Ð2Ð2Ýð ?ß?EºvÀiÐQSÑ?TÔ?TñVô Vð Vð "+¨eÒ!3Ð!3�D”I�I¸¼ˆ	ð �Š=ˆ=Ø˜�#�#¨dˆCØˆ{˜a˜iÝ ð "8ß8>º¸yÑ8IÔ8IñKô Kð Kà˜Ð'Ð'Ò'Ð'˜iÒ'Ð'Ð'Ð'Ý Ð!F×!MÒ!MÈiÐY\Ñ!]Ô!]Ñ^Ô^Ð^ñ (ð �7Š]ˆ]ð ˜˜D $Ð'×2Ò2°D°6Ñ:Ô:ˆDÝ�4‰yŒy˜1Š}ˆ}à˜T 4Ð(×3Ò3°T°FÑ;Ô;�Ý�4‰yŒy˜AŠ~ˆ~Ý ð "<ß<BºFÀ9Ñ<MÔ<MñOô Oð Oà‰JˆD�$Ø˜Ð(Ð(Ò(Ð(˜yÒ(Ð(Ð(Ð(Ý Ð!F×!MÒ!MÈiÐY]Ñ!^Ô!^Ñ_Ô_Ð_Ø˜Ð(Ð(Ò(Ð(˜yÒ(Ð(Ð(Ð(Ý Ð!F×!MÒ!MÈiÐY]Ñ!^Ô!^Ñ_Ô_Ð_ð )ð �9Š_ˆ_Ø˜+�$�$¨3ˆCØ˜<�4�4¨TˆDØˆ{˜d˜l¨a¨iÝ ð "AßAGÂÈ	ÑARÔARñTô Tð Tà�dŠ{ˆ{Ý ð "1ß17²¸	Ñ1BÔ1BñDô Dð Dà˜Ð'Ð'Ò'Ð'˜iÒ'Ð'Ð'Ð'Ý Ð!F×!MÒ!MÈiÐY\Ñ!]Ô!]Ñ^Ô^Ð^Ø˜Ð(Ð(Ò(Ð(˜yÒ(Ð(Ð(Ð(Ý Ð!F×!MÒ!MÈiÐY]Ñ!^Ô!^Ñ_Ô_Ð_ð )õ Ð3µd¸2±h´hÑ>Ñ?Ô?Ð?à�3˜˜4 Ð%Ð%r:   c                 óX   ‡ ‡‡— ˆˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )Nc                 ó>   •— |‰k    r‰‰| |f         z  S ‰| |f         S r<   rn   )rZ   r[   r…   r‘   r7   s     €€€r8   ÚentryzBMatrixReductions._eval_col_op_multiply_col_by_const.<locals>.entryÔ   ó,   ø€ Ø�CŠxˆ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Ó   óD   øøø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð �yŠy˜œ D¤I¨uÑ5Ô5Ð5r:   c                 óX   ‡ ‡‡— ˆˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )Nc                 óX   •— |‰k    r
‰| ‰f         S |‰k    r
‰| ‰f         S ‰| |f         S r<   rn   )rZ   r[   r’   r“   r7   s     €€€r8   r™   z1MatrixReductions._eval_col_op_swap.<locals>.entryÛ   s?   ø€ Ø�DŠyˆ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Ú   óD   øøø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð �yŠy˜œ D¤I¨uÑ5Ô5Ð5r:   c                 ó\   ‡ ‡‡‡— ˆˆˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )Nc                 óT   •— |‰k    r‰| |f         ‰‰| ‰f         z  z   S ‰| |f         S r<   rn   )rZ   r[   r…   r“   r‘   r7   s     €€€€r8   r™   zFMatrixReductions._eval_col_op_add_multiple_to_other_col.<locals>.entryä   s:   ø€ Ø�CŠxˆ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ã   óJ   øøøø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð �yŠy˜œ D¤I¨uÑ5Ô5Ð5r:   c                 óX   ‡ ‡‡— ˆˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )Nc                 óX   •— | ‰k    r
‰‰|f         S | ‰k    r
‰‰|f         S ‰| |f         S r<   rn   )rZ   r[   Úrow1Úrow2r7   s     €€€r8   r™   z1MatrixReductions._eval_row_op_swap.<locals>.entryë   s?   ø€ Ø�DŠyˆ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                 óX   ‡ ‡‡— ˆˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )Nc                 ó>   •— | ‰k    r‰‰| |f         z  S ‰| |f         S r<   rn   )rZ   r[   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                 ó\   ‡ ‡‡‡— ˆˆˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )Nc                 óT   •— | ‰k    r‰| |f         ‰‰‰|f         z  z   S ‰| |f         S r<   rn   )rZ   r[   r‘   r®   rª   r7   s     €€€€r8   r™   zFMatrixReductions._eval_row_op_add_multiple_to_other_row.<locals>.entryû   s:   ø€ Ø�CŠxˆ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:   r‡   Nc                 óð   — |                       |||||d¦  «        \  }}}}}|dk    r|                      ||¦  «        S |dk    r|                      ||¦  «        S |dk    r|                      |||¦  «        S dS )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Ô!WÑˆˆC��D˜$ð �Š=ˆ=Ø×:Ò:¸3ÀÑBÔBÐBØ�Š=ˆ=Ø×)Ò)¨$°Ñ5Ô5Ð5Ø�Š?ˆ?Ø×>Ò>¸sÀAÀtÑLÔLÐLð ˆ?r:   c                 óð   — |                       |||||d¦  «        \  }}}}}|dk    r|                      ||¦  «        S |dk    r|                      ||¦  «        S |dk    r|                      |||¦  «        S dS )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   sq  € € € € € ðJð Jð '.¸È5ð )ð )ð )ð )ð ð!ð !ñ „Xð!ð &°ð Eð Eð Eð Eð2ð 2ð 2ð( &°¸dØð:ð :ð :ð :ð
 )Ô0€LÔØ&Ô.€JÔØ œ=€D„LØ œ=€D„Lð5&ð 5&ð 5&ð 5&ðn6ð 6ð 6ð6ð 6ð 6ð6ð 6ð 6ð6ð 6ð 6ð6ð 6ð 6ð6ð 6ð 6ðMð Mð Mð Mð<Mð Mð Mð Mð 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dS )	Ú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)rU   )r   ©r7   rU   s     r8   ÚcolumnspacezMatrixSubspaces.columnspaceC  s   € Ý˜D¨8Ð4Ñ4Ô4Ð4r:   c                 ó&   — t          | ||¬¦  «        S )N)rU   r5   )r   )r7   rU   r5   s      r8   Ú	nullspacezMatrixSubspaces.nullspaceF  s   € Ý˜$¨¸jÐIÑIÔIÐIr:   c                 ó$   — t          | |¬¦  «        S r¼   )r    r½   s     r8   ÚrowspacezMatrixSubspaces.rowspaceI  s   € Ý˜¨Ð1Ñ1Ô1Ð1r:   c                 ó"   — t          | g|¢R i |¤ŽS r<   )r!   )ÚclsÚvecsÚkwargss      r8   ÚorthogonalizezMatrixSubspaces.orthogonalizeO  s    € Ý˜cÐ3 DÐ3Ð3Ð3¨FÐ3Ð3Ð3r:   N©F)rj   rk   rl   rm   r¾   r   rÀ   rÂ   rÇ   r   r   r    r!   Úclassmethodrn   r:   r8   rº   rº   >  s«   € € € € € ðð ð5ð 5ð 5ð 5ð "'°7ð Jð Jð Jð Jð2ð 2ð 2ð 2ð4ð 4ð 4ð )Ô0€KÔØ&Ô.€IÔØ%Ô-€HÔØ*Ô2€MÔà'˜K¨Ñ6Ô6€M€M€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
_        dS )Ú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ÐUÐ6KÐUÈ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Ø).ð0ð 0ð 	0r:   Fc                 ó    — t          | fd|i|¤ŽS )NÚ
reals_only)r&   )r7   rÓ   rÆ   s      r8   Úis_diagonalizablezMatrixEigen.is_diagonalizablef  s   € Ý! $ÐHÐH°:Ð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Ñ0Ô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°ÐJÀ6ÐJÐ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  s   € € € € € ðð ðVð Vð Vð Vð 04Àð 0ð 0ð 0ð 0ðIð Ið Ið Ið%ð %ð %ð %ð1ð 1ð 1ð 1ð<ð <ð <ð <ð ð+ð +ñ „Xð+ð ð/ð /ñ „Xð/ð ð+ð +ñ „Xð+ð ð/ð /ñ „Xð/ð ð$ð $ñ „Xð$ðKð Kð Kð Kð/ð /ð /ð&ð &ð &ð *4Ô);€IÔØ)4Ô)<€JÔØ);Ô)CÐÔØ)5Ô)=€KÔØ)>Ô)FÐÔ Ø)BÔ)JÐÔ$Ø)>Ô)FÐÔ Ø)BÔ)JÐÔ$Ø)7Ô)?€MÔØ)5Ô)=€KÔØ)9Ô)A€OÔØ)9Ô)A€OÔØ)7Ô)?€MÔØ)BÔ)JÐÔ$Ð$Ð$r:   rË   c                   ó6   — e Zd ZdZddœd„Zd„ Zd„ Zd„ Zd„ Zd	S )
ÚMatrixCalculusz,Provides calculus-related matrix operations.T)Úevaluatec                ó€   — ddl m}  || g|¢R d|iŽ}t          | t          ¦  «        s|r|                     ¦   «         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£  sf   € ð* 	IÐHÐHÐHÐHÐHØ� Ð? tÐ?Ð?Ð?°hÐ?Ð?ˆå˜$¥Ñ&Ô&ð 	&¨8ð 	&Ø×#Ò#Ñ%Ô%Ð%Øˆr:   c                 ó4   ‡— |                       ˆfd„¦  «        S )Nc                 ó.   •— |                       ‰¦  «        S r<   ©rÿ   )rT   Úargs    €r8   ú<lambda>z1MatrixCalculus._eval_derivative.<locals>.<lambda>À  s   ø€ ¨¯ª¨s©¬€ r:   ©Ú	applyfunc)r7   r  s    `r8   Ú_eval_derivativezMatrixCalculus._eval_derivative¿  s   ø€ Ø�~Š~Ð3Ð3Ð3Ð3Ñ4Ô4Ð4r:   c                 ó8   ‡‡— |                       ˆˆ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)rT   rý   rÆ   s    €€r8   r  z*MatrixCalculus.integrate.<locals>.<lambda>Û  s   ø€ ¨¨¬°TÐ(D¸VÐ(DÐ(D€ r:   r  )r7   rý   rÆ   s    ``r8   r
  zMatrixCalculus.integrateÂ  s%   øø€ ð2 �~Š~ÐDÐDÐDÐDÐDÑEÔEÐEr:   c                 óÄ  ‡ ‡— t          ‰t          ¦  «        s‰                      ‰¦  «        Š‰ 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¦  «        ‚‰                      ||ˆˆ 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                 óF   •— ‰|                                ‰|         ¦  «        S r<   r  )r[   rZ   Ú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ˆAØŒZ˜Œ]˜aÒÐØ”
˜1”ˆAˆAåÐGÑHÔHÐHØŒ7�1Œ:˜Š?ˆ?Ø”˜”
ˆAˆAØŒW�QŒZ˜1Š_ˆ_Ø”˜”
ˆAˆAåÐ@ÑAÔAÐAð �yŠy˜˜AÐ>Ð>Ð>Ð>Ð>Ñ?Ô?Ð?r:   c                 ó4   ‡— |                       ˆ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)rT   rý   s    €r8   r  z&MatrixCalculus.limit.<locals>.<lambda>+  s   ø€ ¨¨¬°¨€ r:   r  )r7   rý   s    `r8   r  zMatrixCalculus.limit  s!   ø€ ð* �~Š~Ð6Ð6Ð6Ð6Ñ7Ô7Ð7r:   N)	rj   rk   rl   rm   rÿ   r  r
  r  r  rn   r:   r8   rö   rö      sy   € € € € € Ø6Ð6à#'ð ð ð ð ð ð85ð 5ð 5ðFð Fð Fð67@ð 7@ð 7@ðr8ð 8ð 8ð 8ð 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dS )ÚMatrixDeprecatedz+A class to house deprecated matrix methods.rR   c                 ó.   — |                       |¬¦  «        S )N)rT   )rW   rV   s      r8   Úberkowitz_charpolyz#MatrixDeprecated.berkowitz_charpoly1  s   € Ø�}Š}˜qˆ}Ñ!Ô!Ð!r:   c                 ó.   — |                       d¬¦  «        S )zwComputes determinant using Berkowitz method.

        See Also
        ========

        det
        berkowitz
        rK   rN   ©ra   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 }}|                      ¦   «         D ]#}|                     ||d         z  ¦  «         | }Œ$t          |¦  «        S )zpComputes principal minors using Berkowitz method.

        See Also
        ========

        berkowitz
        éÿÿÿÿ)ÚonerK   ÚappendÚtuple)r7   ÚsignÚminorsÚpolys       r8   Úberkowitz_minorsz!MatrixDeprecated.berkowitz_minorsI  sW   € ð ”x ˆfˆà—N’NÑ$Ô$ð 	ð 	ˆDØ�MŠM˜$  b¤™/Ñ*Ô*Ð*Ø�5ˆDˆDå�V‰}Œ}Ðr:   c                 óB  — 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 ] }|                     |||         z  ¦  «         Œ!t          |¦  «        D ]\  }}|	|z  d         ||<   Œ| j        |g|z   }t          |¦  «        D ]}|d ||z
  dz   …         ||d …|f<   Œ|||dz
  <   Œà|  	                    | j        |d          g¦  «        g}t          |¦  «        D ]#\  }}|                     |||         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ÚitemsrZ   ÚBÚpolyss                   r8   rK   zMatrixDeprecated.berkowitzY  s  € Ø(Ð(Ð(Ð(Ð(Ð(ØˆØð 	ØˆKàŒ~ð 	)Ý&Ñ(Ô(Ð(à�T”Yˆ1ˆØ�S˜A ™E‘]ˆ
å�q˜!˜R‘”ð 	"ð 	"ˆAØ�5˜˜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˜q�M EÑ)ˆEå˜1‘X”Xð -ð -�Ø   ! a¡%¨!¡) Ô,��!�"�"�a�%‘�à !ˆJ�q˜1‘uÑÐà—’˜DœH q¨¤w hÐ/Ñ0Ô0Ð1ˆå˜jÑ)Ô)ð 	'ð 	'‰DˆAˆqØ�LŠL˜˜U 1œX™Ñ&Ô&Ð&Ð&à•e�C¥ uÑ-Ô-Ñ.Ô.Ñ.Ð.r:   rK   c                 ó.   — |                       |¬¦  «        S rM   )r^   rP   s     r8   ÚcofactorMatrixzMatrixDeprecated.cofactorMatrix�  s   € Ø×#Ò#¨6Ð#Ñ2Ô2Ð2r:   c                 ó    — t          | ¦  «        S r<   r6   r=   s    r8   Ú
det_bareiszMatrixDeprecated.det_bareis„  rF   r:   c                 ó.   — |                       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
        ÚlurN   r  r=   s    r8   Údet_LU_decompositionz%MatrixDeprecated.det_LU_decomposition‡  s   € ð& �xŠx˜tˆxÑ$Ô$Ð$r:   c                 ó0   — |                       ||¬¦  «        S )N)ÚsizeÚ
eigenvalue)Újordan_block)r7   Úeigenvalr  s      r8   Újordan_cellzMatrixDeprecated.jordan_cellœ  s   € Ø× Ò  a°HÐ Ñ=Ô=Ð=r:   Tc                 ó\   — |                       ¦   «         \  }}||                     ¦   «         fS r<   )rî   Úget_diag_blocks)r7   Úcalc_transformationÚPÚJs       r8   Újordan_cellszMatrixDeprecated.jordan_cellsŸ  s.   € Ø×ÒÑ!Ô!‰ˆˆ1Ø�!×#Ò#Ñ%Ô%Ð%Ð%r:   c                 ó2   — |                       |||¬¦  «        S rM   )re   rY   s       r8   Ú
minorEntryzMatrixDeprecated.minorEntry£  s   € Ø�zŠz˜!˜Q vˆzÑ.Ô.Ð.r:   c                 ó.   — |                       ||¦  «        S r<   )rh   rg   s      r8   ÚminorMatrixzMatrixDeprecated.minorMatrix¦  s   € Ø×#Ò# A qÑ)Ô)Ð)r:   c                 ó0   — |                       |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                 ó0   — |                       |d¬¦  «        S )z:Permute the rows of the matrix with the given permutation.ÚforwardrS  rU  rW  s     r8   Ú
permuteFwdzMatrixDeprecated.permuteFwd­  s   € à× Ò  °Ð Ñ;Ô;Ð;r:   Nri   rô   )rj   rk   rl   rm   r   r
   r  r  r  r'  rK   r;  r=  r@  rF  rL  rN  rP  rY  r\  rn   r:   r8   r  r  /  s  € € € € € Ø5Ð5Ø#( 5¨¡?¤?¸Yð "ð "ð "ð "ð	,ð 	,ð 	,ð'ð 'ð 'ðð ð ð &/ð &/ð &/ðP3ð 3ð 3ð 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     sp  ðð
 #Ð "Ð "Ð "Ð "Ð "Ø #Ð #Ð #Ð #Ð #Ð #à  Ð  Ð  Ð  Ð  Ð  à ,Ð ,Ð ,Ð ,Ð ,Ð ,à DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jð6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð #Ð "Ð "Ð "Ð "Ð "ð-ð 0<¨nðÐ ð=Dð =Dð =Dð =Dð =D˜ñ =Dô =Dð =Dð@LMð LMð LMð LMð LMÐ(ñ LMô LMð LMð^7ð 7ð 7ð 7ð 7Ð&ñ 7ô 7ð 7ð8CKð CKð CKð CKð CK�/ñ CKô CKð CKðLK8ð K8ð K8ð K8ð K8�\ñ K8ô K8ð K8ð^@<ð @<ð @<ð @<ð @<�|ñ @<ô @<ð @<ð @<ð @<r:   