§
    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	 d dl
mZ d dlmZ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mZ d dlmZ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' d dl(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9m:Z: d dl;Z<d dlm=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlmDZD dd lEmFZFmGZH d d!lImJZJ d d"l>mKZKmLZL d d#lMmNZNmOZO d d$lPmQZQ d d%lRmSZSmTZT d d&lUmVZV d d'l>mWZW dd(lEmXZX dd)lYmZZZ dd*l[m\Z\m]Z]m^Z^m_Z_ dd+lEm`Z`maZa dd,lbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZq dd-lrmsZsmtZtmuZumvZv dd.lwmxZxmyZymzZzm{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ˆm‰Z‰mŠZŠm‹Z‹mŒZŒm�Z� dd0lŽm�Z�m�Z�m‘Z‘m’Z’ dd1l“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d2l¢m£Z£m¤Z¤m¥Z¥m¦Z¦m§Z§m¨Z¨m©Z©mªZªm«Z« dd3l¬m­Z­m®Z®m¯Z¯m°Z° d4d5giZ± G d6„ d7e2¦  «        Z²d8„ Z³d9„ Z´d:„ Zµd;„ Z¶d<„ Z·d=„ Z¸dAd>„Z¹ G d?„ d@eeW¦  «        ZºdS )Bé    )Úannotations)Údefaultdict)ÚIterable)Ú
isfunction)Úreduce©Úrefine)ÚSympifyErrorÚAdd)ÚAtomÚBasic)ÚUndefinedKind)ÚInteger©ÚMod)ÚSymbolÚDummy)ÚsympifyÚ_sympify©Údiff)Úcancel)ÚAbsÚreÚim©Ússtr)ÚMaxÚMinÚsqrt)ÚKroneckerDeltaÚ
LeviCivita)ÚS)Ú	Printable)Ú
StrPrinter)ÚexpÚlog)ÚbinomialÚ	factorialN)ÚCallable)Úreshape)ÚExpr)ÚPow)Úuniquely_named_symbolé   )Ú_dotprodsimpÚ	_simplify)ÚPoly)ÚflattenÚis_sequence)Úas_intÚ
filldedent)Úcall_highest_priority)Ú	fuzzy_andÚ	FuzzyBool)Ú	NDimArray)ÚNotIterable)Ú_get_intermediate_simp_bool)Ú
MatrixKind)ÚMatrixErrorÚ
ShapeErrorÚNonSquareMatrixErrorÚNonInvertibleMatrixError)Ú_iszeroÚ_is_zero_after_expand_mul)Ú_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)Ú_diagonal_solveÚ_lower_triangular_solveÚ_upper_triangular_solveÚ_cholesky_solveÚ	_LDLsolveÚ_LUsolveÚ_QRsolveÚ_gauss_jordan_solveÚ_pinv_solveÚ_cramer_solveÚ_solveÚ_solve_least_squares)	Ú_pinvÚ_inv_ADJÚ_inv_GEÚ_inv_LUÚ_inv_CHÚ_inv_LDLÚ_inv_QRÚ_invÚ
_inv_block)Ú_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)	Ú_rank_decompositionÚ	_choleskyÚ_LDLdecompositionÚ_LUdecompositionÚ_LUdecomposition_SimpleÚ_LUdecompositionFFÚ_singular_value_decompositionÚ_QRdecompositionÚ_upper_hessenberg_decomposition)Ú_connected_componentsÚ#_connected_components_decompositionÚ_strongly_connected_componentsÚ,_strongly_connected_components_decomposition)zMatrixBase.is_indefinitezMatrixBase.is_positive_definitez#MatrixBase.is_positive_semidefinitezMatrixBase.is_negative_definitez#MatrixBase.is_negative_semidefiniteÚ
matplotlibc                  óŽ  — e Zd ZU dZdZdZdZdZ ee	¦  «        Z
ej        Zej        ZdZded<   ded	<   ded
<   dZed„ ¦   «         Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"ed„ ¦   «         Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d „ Z)d!„ Z*d"„ Z+ed#„ ¦   «         Z,d$„ Z-d%„ Z.d&„ Z/d'„ Z0�dNd)„Z1d*„ Z2d+„ Z3ed,„ ¦   «         Z4d-„ Z5d.„ Z6d/„ Z7�dOd0„Z8ed1„ ¦   «         Z9ed2„ ¦   «         Z:ed3„ ¦   «         Z;e�dP�dQd6„¦   «         Z<ed7„ ¦   «         Z=ed8„ ¦   «         Z>ed9„ ¦   «         Z?ed:dddd;œd<„¦   «         Z@e�dRd=„¦   «         ZAe�dSd4d>œd?„¦   «         ZBe�dRd@„¦   «         ZCe�dRdA„¦   «         ZDedB„ ¦   «         ZEedC„ ¦   «         ZFdD„ ZGdE„ ZHdF„ ZIdG„ ZJdH„ ZKdI„ ZLdJ„ ZMdK„ ZNdL„ ZO�dTdO„ZPdP„ ZQdQ„ ZRdR„ ZSdS„ ZTdT„ ZUdU„ ZVdV„ ZWdW„ ZXdX„ ZYdY„ ZZedZ„ ¦   «         Z[d[„ Z\�dUd\„Z]d]„ Z^ed^„ ¦   «         Z_ed_„ ¦   «         Z`ed`„ ¦   «         Zae�dTda„¦   «         Zbedb„ ¦   «         Zcedc„ ¦   «         Zdedd„ ¦   «         Zede„ Zf�dUdf„Zgedg„ ¦   «         Zhedh„ ¦   «         Ziedi„ ¦   «         Zjdj„ Zkdk„ Zldl„ Zmdm„ Zndn„ Zodo„ Zpdp„ Zqdq„ Zrdr„ Zsds„ Ztdt„ Zudu„ Zvdv„ Zw�dUdw„Zxdx„ Zydy„ Zz�dVd|„Z{	 	 �dWd}„Z|ed~„ ¦   «         Z}�dXd€„Z~�dYd�„Z�dYd‚„Z€�dUdƒ„Z��dZd„„Z‚�d[d†„Zƒd‡„ Z„dˆ„ Z…d‰„ Z†dŠ„ Z‡ed‹„ ¦   «         ZˆedŒ„ ¦   «         Z‰d�„ ZŠdŽ„ Z‹d�„ ZŒd�„ Z��dNd‘„ZŽ�dNd’„Z�d“„ Z�d”„ Z‘d•„ Z’d–„ Z“d—„ Z”d˜„ Z•d™„ Z–�dRdš„Z—d›„ Z˜dœ„ Z™d�„ Zšdž„ Z› eœdŸ¦  «        d „ ¦   «         Z� eœd¡¦  «        d¢„ ¦   «         Zž eœd£¦  «        d¤„ ¦   «         ZŸd¥„ Z  eœd¦¦  «        d§„ ¦   «         Z¡�dRd¨„Z¢d©„ Z£dª„ Z¤ eœd«¦  «        d¬„ ¦   «         Z¥�dRd­„Z¦ eœd®¦  «        d¯„ ¦   «         Z§ eœd°¦  «        d±„ ¦   «         Z¨ eœd²¦  «        d³„ ¦   «         Z©�dRd´„Zª eœdµ¦  «        d¶„ ¦   «         Z« eœd·¦  «        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½_        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`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â�dUdÞ„Zçde°fdß„Zè�d`dà„Zé�dadá„Zê�dUdâ„Zë�dUdã„Zìedä„ ¦   «         Zíedå„ ¦   «         Zîedæ„ ¦   «         Zïedç„ ¦   «         Zðedè„ ¦   «         Zñ�dUdé„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dìœdí„�Zdî„ �Zdï„ �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�dUdû„�Z�d\dü„�Zdý„ �Zdþ„ �Zdÿ„ �Ze�db�d„¦   «         �Z�d„ �Z�edf�d„�Z�d„ �Z�d„ �Z�d„ �Z�dR�d„�Ze�d„ ¦   «         �Ze�d	„ ¦   «         �Z e�d
„ ¦   «         �Z!�d„ �Z"�d„ �Z#�d„ �Z$�d„ �Z%�d„ �Z&�d„ �Z'�d„ �Z(e�d„ ¦   «         �Z)�dS�d„�Z*�d„ �Z+�d„ �Z,�d„ �Z-�d„ �Z.�d„ �Z/�e0f�d„�Z1�d„ �Z2�d„ �Z3�d„ �Z4e°f�d„�Z5�dR�d„�Z6�dc�d „�Z7�d!„ �Z8	 	 �dd�d'„�Z9e°d:f�d(„�Z:�dU�d)„�Z;�dU�d*„�Z<e°dd:f�d+„�Z=e°dd:f�d,„�Z>�d-„ �Z?�d.„ �Z@�d/„ �ZA�d0„ �ZB�d1„ �ZC�d2„ �ZD�d3„ �ZE�d4„ �ZF�d5„ �ZGe°f�d6„�ZH�d7„ �ZI�d`�d8„�ZJ�dR�d9„�ZK�de�d;„�ZL�df�d=„�ZM�dg�d?„�ZN�dh�dA„�ZOe°f�dB„�ZPe°f�dC„�ZQe°f�dD„�ZRe°f�dE„�ZSe°f�dF„�ZTe°f�dG„�ZUe°f�dH„�ZVde°d:f�dI„�ZW�dJ„ �ZX�dK„ �ZY�dL„ �ZZ�dU�dM„�Z[�e\�j]        �Z]�e^j        �e:_        �e_j        �e;_        �e`j        �e<_        �eaj        �e=_        �ebj        �e>_        �ecj        �e?_        �edj        �e@_        �eej        �eA_        �efj        �eB_        �egj        �eC_        �ehj        �eD_        �eij        �eE_        �ejj        �eF_        �ekj        �eG_        �elj        �eH_        �emj        �eI_        �enj        �eJ_        �eoj        �eK_        �epj        �eL_        �eqj        �eM_        �erj        �eN_        �esj        �eO_        �etj        �eP_        �euj        �eR_        �evj        �eS_        �ewj        �eT_        �exj        �eU_        �eyj        �eV_        �ezj        �eQ_        �e{j        �eW_        �e|j        �eX_        �e}j        �eY_        �e~j        �eZ_        �ej        �e[_        dS (i  Ú
MatrixBasezsAll common matrix operations including basic arithmetic, shaping,
    and special matrices like `zeros`, and `eye`.g…ëQ¸$@é   Té   ÚboolÚ	_diff_wrtÚintÚrowsÚcolsNc                ó    — t          d¦  «        ‚)z†`_new` must, at minimum, be callable as
        `_new(rows, cols, mat) where mat is a flat list of the
        elements of the matrix.úSubclasses must implement this.©ÚNotImplementedError)ÚclsÚargsÚkwargss      úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/matrices/matrixbase.pyÚ_newzMatrixBase._neww   ó   € õ
 "Ð"CÑDÔDÐDó    c                ó    — t          d¦  «        ‚)Nr–   r—   ©ÚselfÚothers     rœ   Ú__eq__zMatrixBase.__eq__~   s   € Ý!Ð"CÑDÔDÐDrŸ   c                ó    — t          d¦  «        ‚)a  Implementations of __getitem__ should accept ints, in which
        case the matrix is indexed as a flat list, tuples (i,j) in which
        case the (i,j) entry is returned, slices, or mixed tuples (a,b)
        where a and b are any combination of slices and integers.r–   r—   ©r¢   Úkeys     rœ   Ú__getitem__zMatrixBase.__getitem__�   rž   rŸ   c                ó   — | j         | j        fS )a  The shape (dimensions) of the matrix as the 2-tuple (rows, cols).

        Examples
        ========

        >>> from sympy import zeros
        >>> M = zeros(2, 3)
        >>> M.shape
        (2, 3)
        >>> M.rows
        2
        >>> M.cols
        3
        ©r“   r”   ©r¢   s    rœ   ÚshapezMatrixBase.shapeˆ   s   € ð  ”	˜4œ9Ð%Ð%rŸ   c                óZ   ‡ ‡— ˆˆ fd„}‰                       ‰ j        ‰ j        dz
  |¦  «        S )Nc                ó>   •— |‰k     r
‰| |f         n‰| |dz   f         S ©Nr/   © )ÚiÚjÚcolr¢   s     €€rœ   Úentryz'MatrixBase._eval_col_del.<locals>.entry›   s)   ø€ Ø!" S¢ �4˜˜1˜”:�:¨d°1°a¸!±e°8¬nÐ<rŸ   r/   ©r�   r“   r”   )r¢   r³   r´   s   `` rœ   Ú_eval_col_delzMatrixBase._eval_col_delš   s@   øø€ ð	=ð 	=ð 	=ð 	=ð 	=ð 	=à�yŠy˜œ D¤I°¡M°5Ñ9Ô9Ð9rŸ   c                óh   ‡ ‡‡— ˆˆˆ fd„}‰                       ‰ j        ‰ j        ‰j        z   |¦  «        S )Nc                ó’   •— |‰k     r
‰| |f         S ‰|cxk    r‰‰j         z   k     rn n‰| |‰z
  f         S ‰| |‰j         z
  f         S ©N©r”   )r±   r²   r£   Úposr¢   s     €€€rœ   r´   z*MatrixBase._eval_col_insert.<locals>.entry¡   sl   ø€ Ø�3ŠwˆwØ˜A˜q˜D”zÐ!Ø˜Ð,Ð,Ò,Ð,˜C %¤*Ñ,Ò,Ð,Ð,Ð,Ð,Ø˜Q  C¡˜ZÔ(Ð(Ø˜˜1˜uœz™>Ð)Ô*Ð*rŸ   rµ   )r¢   r»   r£   r´   s   ``` rœ   Ú_eval_col_insertzMatrixBase._eval_col_insertŸ   sK   øøø€ ð	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð �yŠy˜œ D¤I°´
Ñ$:¸EÑBÔBÐBrŸ   c                ó’   ‡ ‡‡— ‰ j         Šˆˆˆ fd„}t          ‰ ‰¦  «                             ‰ j         ‰j         z   ‰ j        |¦  «        S )Nc                ó>   •— | ‰k     r
‰| |f         S ‰| ‰z
  |f         S r¹   r°   )r±   r²   r£   r“   r¢   s     €€€rœ   r´   z(MatrixBase._eval_col_join.<locals>.entry­   s-   ø€ Ø�4ŠxˆxØ˜A˜q˜D”zÐ!Ø˜˜T™ 1˜Ô%Ð%rŸ   )r“   Úclassofr�   r”   )r¢   r£   r´   r“   s   `` @rœ   Ú_eval_col_joinzMatrixBase._eval_col_joinª   se   øøø€ ØŒyˆð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&õ
 �t˜UÑ#Ô#×(Ò(¨¬°U´ZÑ)?ÀÄØ).ñ0ô 0ð 	0rŸ   c                óÌ   ‡‡‡— t          | ¦  «        Š| j        Šˆˆfd„|D ¦   «         }|                      t          |¦  «        t          ‰¦  «        ˆfd„|D ¦   «         ¦  «        S )Nc              3  ó2   •K  — | ]}‰D ]}|‰z  |z   V — ŒŒd S r¹   r°   )Ú.0r±   r²   r”   ÚcolsLists      €€rœ   ú	<genexpr>z+MatrixBase._eval_extract.<locals>.<genexpr>¸   s8   øè è € ÐDÐD A¸8ÐDÐD°a�1�t‘8˜a‘<ÐDÐDÐDÐDÐDÐDÐDrŸ   c                ó    •— g | ]
}‰|         ‘ŒS r°   r°   )rÃ   r±   Úmats     €rœ   ú
<listcomp>z,MatrixBase._eval_extract.<locals>.<listcomp>º   s   ø€ Ð2Ð2Ð2 Q˜#˜aœ&Ð2Ð2Ð2rŸ   )Úlistr”   r�   Úlen)r¢   ÚrowsListrÄ   Úindicesr”   rÇ   s     ` @@rœ   Ú_eval_extractzMatrixBase._eval_extractµ   sp   øøø€ Ý�4‰jŒjˆØŒyˆØDÐDÐDÐDÐD¨ÐDÑDÔDˆØ�yŠy�˜X™œ­¨H©¬Ø2Ð2Ð2Ð2¨'Ð2Ñ2Ô2ñ4ô 4ð 	4rŸ   c                ó0   ‡‡— g Šˆˆfd„Š ‰| ¦  «         ‰S )Nc                óª  •— t          d| j        d         dz   ¦  «        D ]²}|dk    r| d|d …f         }| |d …df         }n| d |…|d …f         }| |d …d |…f         }t          |¦  «        st          |¦  «        rŒ\‰                     | d |…d |…f         ¦  «         | j        | d |…d |…f         j        k    r ‰| |d …|d …f         ¦  «          d S d S )Nr/   r   )Úranger¬   ÚanyÚappend)ÚMr±   Úto_the_rightÚto_the_bottomÚrecurse_sub_blocksÚ
sub_blockss       €€rœ   rÖ   z<MatrixBase._eval_get_diag_blocks.<locals>.recurse_sub_blocks¿   s  ø€ Ý˜1˜aœg aœj¨1™nÑ-Ô-ð ð �Ø˜’6�6Ø#$ Q¨¨¨ U¤8�LØ$% a b b¨! e¤H�M�Mà#$ R a R¨¨¨ V¤9�LØ$% a b b¨"¨1¨" f¤I�MÝ�|Ñ$Ô$ð ­¨MÑ(:Ô(:ð ØØ×!Ò! ! B Q B¨¨¨ F¤)Ñ,Ô,Ð,Ø”7˜a    B Q B œiœoÒ-Ð-Ø&Ð& q¨¨¨¨Q¨R¨R¨¤yÑ1Ô1Ð1Ø��ðð rŸ   r°   )r¢   rÖ   r×   s    @@rœ   Ú_eval_get_diag_blocksz MatrixBase._eval_get_diag_blocks¼   s@   øø€ Øˆ
ð	ð 	ð 	ð 	ð 	ð 	ð 	Ð˜4Ñ Ô Ð ØÐrŸ   c                óZ   ‡ ‡— ˆˆ fd„}‰                       ‰ j        dz
  ‰ j        |¦  «        S )Nc                ó>   •— | ‰k     r
‰| |f         n‰| dz   |f         S r¯   r°   )r±   r²   Úrowr¢   s     €€rœ   r´   z'MatrixBase._eval_row_del.<locals>.entryÒ   s)   ø€ Ø!" S¢ �4˜˜1˜”:�:¨d°1°q±5¸!°8¬nÐ<rŸ   r/   rµ   )r¢   rÛ   r´   s   `` rœ   Ú_eval_row_delzMatrixBase._eval_row_delÑ   s@   øø€ ð	=ð 	=ð 	=ð 	=ð 	=ð 	=à�yŠy˜œ Q™¨¬	°5Ñ9Ô9Ð9rŸ   c                ó®   — t          | ¦  «        }|| j        z  }t          |¦  «        |||…<   |                      | j        |j        z   | j        |¦  «        S r¹   )rÉ   r”   r�   r“   )r¢   r»   r£   ÚentriesÚ
insert_poss        rœ   Ú_eval_row_insertzMatrixBase._eval_row_insertÖ   sN   € Ý�t‘*”*ˆØ˜4œ9‘_ˆ
Ý)-¨e©¬ˆ�
˜:Ð%Ñ&Ø�yŠy˜œ U¤ZÑ/°´¸GÑDÔDÐDrŸ   c                ó’   ‡ ‡‡— ‰ j         Šˆˆˆ fd„}t          ‰ ‰¦  «                             ‰ j        ‰ j         ‰j         z   |¦  «        S )Nc                ó>   •— |‰k     r
‰| |f         S ‰| |‰z
  f         S r¹   r°   )r±   r²   r”   r£   r¢   s     €€€rœ   r´   z(MatrixBase._eval_row_join.<locals>.entryß   s-   ø€ Ø�4ŠxˆxØ˜A˜q˜D”zÐ!Ø˜˜A ™H˜Ô%Ð%rŸ   )r”   r¿   r�   r“   )r¢   r£   r´   r”   s   `` @rœ   Ú_eval_row_joinzMatrixBase._eval_row_joinÜ   se   øøø€ ØŒyˆð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&õ
 �t˜UÑ#Ô#×(Ò(¨¬°D´IÀÄ
Ñ4JØ).ñ0ô 0ð 	0rŸ   c                óD   ‡ — ˆ fd„t          ‰ j        ¦  «        D ¦   «         S )Nc                óB   •— g | ]}t          ‰|d d …f         ¦  «        ‘ŒS r¹   )rÉ   ©rÃ   r±   r¢   s     €rœ   rÈ   z+MatrixBase._eval_tolist.<locals>.<listcomp>è   s+   ø€ Ð:Ð:Ð: A•�T˜!˜A˜A˜A˜#”Y‘”Ð:Ð:Ð:rŸ   ©rÐ   r“   r«   s   `rœ   Ú_eval_tolistzMatrixBase._eval_tolistç   s'   ø€ Ø:Ð:Ð:Ð:­¨t¬yÑ)9Ô)9Ð:Ñ:Ô:Ð:rŸ   c                óž   — i }| j         \  }}t          |¦  «        D ]0}t          |¦  «        D ]}| ||f         }|| j        k    r||||f<   ŒŒ1|S r¹   )r¬   rÐ   Úzero)r¢   Údokr“   r”   r±   r²   Úvals          rœ   Ú_eval_todokzMatrixBase._eval_todokê   sp   € ØˆØ”Z‰
ˆˆdÝ�t‘”ð 	$ð 	$ˆAÝ˜4‘[”[ð $ð $�Ø˜1˜a˜4”j�Ø˜$œ)Ò#Ð#Ø #�C˜˜1˜‘Iøð$ð ˆ
rŸ   c                óœ   — | j         g||z  z  }|                     ¦   «         D ]\  \  }}}||||z  |z   <   Œ|                      |||¦  «        S r¹   )rê   Úitemsr�   )r™   r“   r”   rë   Úout_flatr±   r²   rì   s           rœ   Ú_eval_from_dokzMatrixBase._eval_from_dokô   s^   € à”H�: ¨¡Ñ-ˆØŸ9š9™;œ;ð 	)ð 	)‰K‰FˆQ��CØ%(ˆH�Q˜‘X ‘\Ñ"Ð"Ø�xŠx˜˜d HÑ-Ô-Ð-rŸ   c                óh   ‡ ‡— ‰ j         Šˆˆ fd„}‰                      t          ‰ ¦  «        d|¦  «        S )Nc                ó2   •— | ‰z  }| |‰z  z
  }‰||f         S r¹   r°   )ÚnÚ_r²   r±   r“   r¢   s       €€rœ   r´   z#MatrixBase._eval_vec.<locals>.entryþ   s'   ø€ à�T‘	ˆAØ�A˜‘H‘ˆAØ˜˜1˜”:ÐrŸ   r/   )r“   r�   rÊ   )r¢   r´   r“   s   ` @rœ   Ú	_eval_veczMatrixBase._eval_vecû   sG   øø€ ØŒyˆð	ð 	ð 	ð 	ð 	ð 	ð �yŠy�˜T™œ A uÑ-Ô-Ð-rŸ   c                óp  — | j         }g }|rCt          |¦  «        D ]2}t          ||¦  «        D ]}|                     | ||f         ¦  «         Œ Œ3nEt          |¦  «        D ]5}t          |dz   |¦  «        D ]}|                     | ||f         ¦  «         Œ Œ6|                      t	          |¦  «        d|¦  «        S r¯   )r”   rÐ   rÒ   r�   rÊ   )r¢   ÚdiagonalÚcÚvr²   r±   s         rœ   Ú
_eval_vechzMatrixBase._eval_vech  sÙ   € ØŒIˆØˆØð 	)Ý˜1‘X”Xð )ð )�Ý˜q !™œð )ð )�AØ—H’H˜T ! Q $œZÑ(Ô(Ð(Ð(ð)ð)õ ˜1‘X”Xð )ð )�Ý˜q 1™u a™œð )ð )�AØ—H’H˜T ! Q $œZÑ(Ô(Ð(Ð(ð)à�yŠy�˜Q™œ  AÑ&Ô&Ð&rŸ   c                ó¸   — |dk     r
|| j         z  }d|cxk    r| j         k     s$n t          d                     |¦  «        ¦  «        ‚|                      |¦  «        S )zDelete the specified column.r   zColumn {} is out of range.)r”   Ú
IndexErrorÚformatr¶   )r¢   r³   s     rœ   Úcol_delzMatrixBase.col_del  si   € à�Š7ˆ7Ø�4”9ÑˆCØ�CÐ#Ð#Ò#Ð#˜$œ)Ò#Ð#Ð#Ð#ÝÐ9×@Ò@ÀÑEÔEÑFÔFÐFØ×!Ò! #Ñ&Ô&Ð&rŸ   c                óP  — | s t          | ¦  «        |¦  «        S t          |¦  «        }|dk     r
| j        |z   }|dk     rd}n|| j        k    r| j        }| j        |j        k    r-t	          d                     | j        |j        ¦  «        ¦  «        ‚|                      ||¦  «        S )ay  Insert one or more columns at the given column position.

        Examples
        ========

        >>> from sympy import zeros, ones
        >>> M = zeros(3)
        >>> V = ones(3, 1)
        >>> M.col_insert(1, V)
        Matrix([
        [0, 1, 0, 0],
        [0, 1, 0, 0],
        [0, 1, 0, 0]])

        See Also
        ========

        col
        row_insert
        r   ú9The matrices have incompatible number of rows ({} and {}))Útyper5   r”   r“   r?   rþ   r¼   ©r¢   r»   r£   s      rœ   Ú
col_insertzMatrixBase.col_insert  s²   € ð, ð 	%Ø•4˜‘:”:˜eÑ$Ô$Ð$å�S‰kŒkˆà�Š7ˆ7Ø”)˜c‘/ˆCØ�Š7ˆ7ØˆCˆCØ�4”9Š_ˆ_Ø”)ˆCàŒ9˜œ
Ò"Ð"ÝØKß’˜œ	 5¤:Ñ.Ô.ñ0ô 0ð 0ð ×$Ò$ S¨%Ñ0Ô0Ð0rŸ   c                ó:  — | j         dk    r?| j        |j        k    r/|                      d|j        g ¦  «                             |¦  «        S | j        |j        k    r-t	          d                     | j        |j        ¦  «        ¦  «        ‚|                      |¦  «        S )a†  Concatenates two matrices along self's last and other's first row.

        Examples
        ========

        >>> from sympy import zeros, ones
        >>> M = zeros(3)
        >>> V = ones(1, 3)
        >>> M.col_join(V)
        Matrix([
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [1, 1, 1]])

        See Also
        ========

        col
        row_join
        r   ú<The matrices have incompatible number of columns ({} and {}))r“   r”   r�   Úcol_joinr?   rþ   rÀ   r¡   s     rœ   r  zMatrixBase.col_joinD  s�   € ð. Œ9˜Š>ˆ>˜dœi¨5¬:Ò5Ð5Ø—9’9˜Q ¤
¨BÑ/Ô/×8Ò8¸Ñ?Ô?Ð?àŒ9˜œ
Ò"Ð"ÝØNß’˜œ	 5¤:Ñ.Ô.ñ0ô 0ð 0ð ×"Ò" 5Ñ)Ô)Ð)rŸ   c                ó   — | dd…|f         S )a  Elementary column selector.

        Examples
        ========

        >>> from sympy import eye
        >>> eye(2).col(0)
        Matrix([
        [1],
        [0]])

        See Also
        ========

        row
        col_del
        col_join
        col_insert
        Nr°   )r¢   r²   s     rœ   r³   zMatrixBase.cold  s   € ð( �A�A�A�q�DŒzÐrŸ   c                ó’  ‡ — t          |¦  «        rt          |¦  «        st          d¦  «        ‚|r2t          d„ |D ¦   «         ¦  «        rd„ t          |¦  «        D ¦   «         }|r2t          d„ |D ¦   «         ¦  «        rd„ t          |¦  «        D ¦   «         }ˆ fd„|D ¦   «         }ˆ fd„|D ¦   «         }‰                      ||¦  «        S )a„  Return a submatrix by specifying a list of rows and columns.
        Negative indices can be given. All indices must be in the range
        $-n \le i < n$ where $n$ is the number of rows or columns.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix(4, 3, range(12))
        >>> m
        Matrix([
        [0,  1,  2],
        [3,  4,  5],
        [6,  7,  8],
        [9, 10, 11]])
        >>> m.extract([0, 1, 3], [0, 1])
        Matrix([
        [0,  1],
        [3,  4],
        [9, 10]])

        Rows or columns can be repeated:

        >>> m.extract([0, 0, 1], [-1])
        Matrix([
        [2],
        [2],
        [5]])

        Every other row can be taken by using range to provide the indices:

        >>> m.extract(range(0, m.rows, 2), [-1])
        Matrix([
        [2],
        [8]])

        RowsList or colsList can also be a list of booleans, in which case
        the rows or columns corresponding to the True values will be selected:

        >>> m.extract([0, 1, 2, 3], [True, False, True])
        Matrix([
        [0,  2],
        [3,  5],
        [6,  8],
        [9, 11]])
        z&rowsList and colsList must be iterablec              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r¹   ©Ú
isinstancer�   ©rÃ   r±   s     rœ   rÅ   z%MatrixBase.extract.<locals>.<genexpr>­  ó,   è è € ÐBÐB°A�J q­$Ñ/Ô/ÐBÐBÐBÐBÐBÐBrŸ   c                ó   — g | ]	\  }}|¯|‘Œ
S r°   r°   ©rÃ   ÚindexÚitems      rœ   rÈ   z&MatrixBase.extract.<locals>.<listcomp>®  ó!   € ÐMÐMÐM¡+ %¨ÈÐM˜ÐMÐMÐMrŸ   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r¹   r  r  s     rœ   rÅ   z%MatrixBase.extract.<locals>.<genexpr>¯  r  rŸ   c                ó   — g | ]	\  }}|¯|‘Œ
S r°   r°   r  s      rœ   rÈ   z&MatrixBase.extract.<locals>.<listcomp>°  r  rŸ   c                ó:   •— g | ]}t          |‰j        ¦  «        ‘ŒS r°   )Úa2idxr“   ©rÃ   Úkr¢   s     €rœ   rÈ   z&MatrixBase.extract.<locals>.<listcomp>³  ó%   ø€ Ð:Ð:Ð:¨A•E˜!˜TœYÑ'Ô'Ð:Ð:Ð:rŸ   c                ó:   •— g | ]}t          |‰j        ¦  «        ‘ŒS r°   )r  r”   r  s     €rœ   rÈ   z&MatrixBase.extract.<locals>.<listcomp>´  r  rŸ   )r4   Ú	TypeErrorÚallÚ	enumeraterÍ   )r¢   rË   rÄ   s   `  rœ   ÚextractzMatrixBase.extractz  s  ø€ õ` ˜8Ñ$Ô$ð 	F­K¸Ñ,AÔ,Að 	FÝÐDÑEÔEÐEàð 	N�ÐBÐB¸ÐBÑBÔBÑBÔBð 	NØMÐMµ¸8Ñ1DÔ1DÐMÑMÔMˆHØð 	N�ÐBÐB¸ÐBÑBÔBÑBÔBð 	NØMÐMµ¸8Ñ1DÔ1DÐMÑMÔMˆHð ;Ð:Ð:Ð:°Ð:Ñ:Ô:ˆØ:Ð:Ð:Ð:°Ð:Ñ:Ô:ˆà×!Ò! (¨HÑ5Ô5Ð5rŸ   c                ó*   — |                       ¦   «         S )az  Obtains the square sub-matrices on the main diagonal of a square matrix.

        Useful for inverting symbolic matrices or solving systems of
        linear equations which may be decoupled by having a block diagonal
        structure.

        Examples
        ========

        >>> from sympy import Matrix
        >>> from sympy.abc import x, y, z
        >>> A = Matrix([[1, 3, 0, 0], [y, z*z, 0, 0], [0, 0, x, 0], [0, 0, 0, 0]])
        >>> a1, a2, a3 = A.get_diag_blocks()
        >>> a1
        Matrix([
        [1,    3],
        [y, z**2]])
        >>> a2
        Matrix([[x]])
        >>> a3
        Matrix([[0]])

        )rØ   r«   s    rœ   Úget_diag_blockszMatrixBase.get_diag_blocks¸  s   € ð0 ×)Ò)Ñ+Ô+Ð+rŸ   c                ó¤   — t          |¦  «        dk    r|                      ¦   «         S t          |d         ¦  «        }t          |j        |¦  «        S )a(  Return a matrix formed by joining args horizontally (i.e.
        by repeated application of row_join).

        Examples
        ========

        >>> from sympy import Matrix, eye
        >>> Matrix.hstack(eye(2), 2*eye(2))
        Matrix([
        [1, 0, 2, 0],
        [0, 1, 0, 2]])
        r   )rÊ   r�   r  r   Úrow_join©r™   rš   Úklss      rœ   ÚhstackzMatrixBase.hstackÒ  sB   € õ ˆt‰9Œ9˜Š>ˆ>Ø—8’8‘:”:Ðå�4˜”7‰mŒmˆÝ�c”l DÑ)Ô)Ð)rŸ   c                óî   ‡ ‡— ‰ j         ‰ j        z  |‰z  k    rt          d|‰fz  ¦  «        ‚ˆˆ fd„‰                      ¦   «                              ¦   «         D ¦   «         }‰                      |‰|¦  «        S )a§  Reshape the matrix. Total number of elements must remain the same.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix(2, 3, lambda i, j: 1)
        >>> m
        Matrix([
        [1, 1, 1],
        [1, 1, 1]])
        >>> m.reshape(1, 6)
        Matrix([[1, 1, 1, 1, 1, 1]])
        >>> m.reshape(3, 2)
        Matrix([
        [1, 1],
        [1, 1],
        [1, 1]])

        z Invalid reshape parameters %d %dc                óT   •— i | ]$\  \  }}}t          |‰j        z  |z   ‰¦  «        |“Œ%S r°   )Údivmodr”   )rÃ   r±   r²   rú   r”   r¢   s       €€rœ   ú
<dictcomp>z&MatrixBase.reshape.<locals>.<dictcomp>ý  sH   ø€ ð 5ð 5ð 5Ù‘&�1�a˜!õ �a˜œ	‘k A‘o tÑ,Ô,Øð5ð 5ð 5rŸ   )r“   r”   Ú
ValueErrorÚtodokrï   rñ   )r¢   r“   r”   rë   s   ` ` rœ   r+   zMatrixBase.reshapeæ  s�   øø€ ð* Œ9�t”yÑ  D¨4¡KÒ/Ð/ÝÐ?À4ÈÀ,ÑNÑOÔOÐOð5ð 5ð 5ð 5ð 5Ø#Ÿzšz™|œ|×1Ò1Ñ3Ô3ð5ñ 5ô 5ˆà×"Ò" 4¨¨sÑ3Ô3Ð3rŸ   c                ó¸   — |dk     r
|| j         z  }d|cxk    r| j         k     s$n t          d                     |¦  «        ¦  «        ‚|                      |¦  «        S )zDelete the specified row.r   zRow {} is out of range.)r“   rý   rþ   rÜ   )r¢   rÛ   s     rœ   Úrow_delzMatrixBase.row_del  si   € à�Š7ˆ7Ø�4”9ÑˆCØ�CÐ#Ð#Ò#Ð#˜$œ)Ò#Ð#Ð#Ð#ÝÐ6×=Ò=¸cÑBÔBÑCÔCÐCà×!Ò! #Ñ&Ô&Ð&rŸ   c                óJ  — | s|                       |¦  «        S t          |¦  «        }|dk     r
| j        |z   }|dk     rd}n|| j        k    r| j        }| j        |j        k    r-t	          d                     | j        |j        ¦  «        ¦  «        ‚|                      ||¦  «        S )a}  Insert one or more rows at the given row position.

        Examples
        ========

        >>> from sympy import zeros, ones
        >>> M = zeros(3)
        >>> V = ones(1, 3)
        >>> M.row_insert(1, V)
        Matrix([
        [0, 0, 0],
        [1, 1, 1],
        [0, 0, 0],
        [0, 0, 0]])

        See Also
        ========

        row
        col_insert
        r   r  )r�   r5   r“   r”   r?   rþ   rà   r  s      rœ   Ú
row_insertzMatrixBase.row_insert
  s®   € ð. ð 	$Ø—9’9˜UÑ#Ô#Ð#å�S‰kŒkˆà�Š7ˆ7Ø”)˜c‘/ˆCØ�Š7ˆ7ØˆCˆCØ�4”9Š_ˆ_Ø”)ˆCàŒ9˜œ
Ò"Ð"ÝØNß’˜œ	 5¤:Ñ.Ô.ñ0ô 0ð 0ð ×$Ò$ S¨%Ñ0Ô0Ð0rŸ   c                ó:  — | j         dk    r?| j        |j        k    r/|                      |j        dg ¦  «                             |¦  «        S | j        |j        k    r-t	          d                     | j        |j        ¦  «        ¦  «        ‚|                      |¦  «        S )a|  Concatenates two matrices along self's last and rhs's first column

        Examples
        ========

        >>> from sympy import zeros, ones
        >>> M = zeros(3)
        >>> V = ones(3, 1)
        >>> M.row_join(V)
        Matrix([
        [0, 0, 0, 1],
        [0, 0, 0, 1],
        [0, 0, 0, 1]])

        See Also
        ========

        row
        col_join
        r   r  )r”   r“   r�   r#  r?   rþ   rã   r¡   s     rœ   r#  zMatrixBase.row_join4  s�   € ð, Œ9˜Š>ˆ>˜dœi¨5¬:Ò5Ð5Ø—9’9˜UœZ¨¨BÑ/Ô/×8Ò8¸Ñ?Ô?Ð?àŒ9˜œ
Ò"Ð"ÝØKß’˜œ	 5¤:Ñ.Ô.ñ0ô 0ð 0ð ×"Ò" 5Ñ)Ô)Ð)rŸ   r   c                ó~  — g }t          |¦  «        }|dk    rdn| }|rdn|}	 || j        k    s|| j        k    rn(|                     | ||f         ¦  «         |dz  }|dz  }Œ?|s6t	          t          d|›dd| j        z
  ›d| j        dz
  ›d�¦  «        ¦  «        ‚|                      dt          |¦  «        |¦  «        S )a›  Returns the kth diagonal of self. The main diagonal
        corresponds to `k=0`; diagonals above and below correspond to
        `k > 0` and `k < 0`, respectively. The values of `self[i, j]`
        for which `j - i = k`, are returned in order of increasing
        `i + j`, starting with `i + j = |k|`.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix(3, 3, lambda i, j: j - i); m
        Matrix([
        [ 0,  1, 2],
        [-1,  0, 1],
        [-2, -1, 0]])
        >>> _.diagonal()
        Matrix([[0, 0, 0]])
        >>> m.diagonal(1)
        Matrix([[1, 1]])
        >>> m.diagonal(-2)
        Matrix([[-2]])

        Even though the diagonal is returned as a Matrix, the element
        retrieval can be done with a single index:

        >>> Matrix.diag(1, 2, 3).diagonal()[1]  # instead of [0, 1]
        2

        See Also
        ========

        diag
        r   Tr/   z
            The z diagonal is out of range [ú, ú])r5   r“   r”   rÒ   r+  r6   r�   rÊ   )r¢   r  ÚrvÚrrù   s        rœ   rø   zMatrixBase.diagonalS  sï   € ðD ˆÝ�1‰IŒIˆØ�Q’�ˆAˆA˜Q˜BˆØˆMˆAˆA˜ˆð	Ø�D”IŠ~ˆ~  d¤i¢ ØØ�IŠI�d˜1˜a˜4”jÑ!Ô!Ð!Ø�‰FˆAØ�‰FˆAð	ð ð 	/Ý�Z˜ZàˆAˆAˆq�4”9‰}ˆ}ˆ}˜dœi¨!™m˜m˜mð)-ñ .ô .ñ /ô /ð /ð �yŠy˜�C ™GœG RÑ(Ô(Ð(rŸ   c                ó   — | |dd…f         S )zþElementary row selector.

        Examples
        ========

        >>> from sympy import eye
        >>> eye(2).row(0)
        Matrix([[1, 0]])

        See Also
        ========

        col
        row_del
        row_join
        row_insert
        Nr°   )r¢   r±   s     rœ   rÛ   zMatrixBase.row…  s   € ð$ �A�q�q�q�DŒzÐrŸ   c                ó*   — |                       ¦   «         S )zØReturn the matrix as dictionary of keys.

        Examples
        ========

        >>> from sympy import Matrix
        >>> M = Matrix.eye(3)
        >>> M.todok()
        {(0, 0): 1, (1, 1): 1, (2, 2): 1}
        )rí   r«   s    rœ   r,  zMatrixBase.todok™  s   € ð ×ÒÑ!Ô!Ð!rŸ   c                ór   ‡ — ˆ fd„|                      ¦   «         D ¦   «         }‰                      |||¦  «        S )a  Create a matrix from a dictionary of keys.

        Examples
        ========

        >>> from sympy import Matrix
        >>> d = {(0, 0): 1, (1, 2): 3, (2, 1): 4}
        >>> Matrix.from_dok(3, 3, d)
        Matrix([
        [1, 0, 0],
        [0, 0, 3],
        [0, 4, 0]])
        c                óB   •— i | ]\  }}|‰                      |¦  «        “ŒS r°   ©r   )rÃ   Úijrì   r™   s      €rœ   r*  z'MatrixBase.from_dok.<locals>.<dictcomp>µ  s+   ø€ Ð@Ð@Ð@©¨¨Sˆr�3—<’< Ñ$Ô$Ð@Ð@Ð@rŸ   )rï   rñ   )r™   r“   r”   rë   s   `   rœ   Úfrom_dokzMatrixBase.from_dok¦  s?   ø€ ð AÐ@Ð@Ð@°C·I²I±K´KÐ@Ñ@Ô@ˆØ×!Ò! $¨¨cÑ2Ô2Ð2rŸ   c                ó†   — | j         sg S | j        sd„ t          | j         ¦  «        D ¦   «         S |                      ¦   «         S )a   Return the Matrix as a nested Python list.

        Examples
        ========

        >>> from sympy import Matrix, ones
        >>> m = Matrix(3, 3, range(9))
        >>> m
        Matrix([
        [0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])
        >>> m.tolist()
        [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
        >>> ones(3, 0).tolist()
        [[], [], []]

        When there are no rows then it will not be possible to tell how
        many columns were in the original matrix:

        >>> ones(0, 3).tolist()
        []

        c                ó   — g | ]}g ‘ŒS r°   r°   r  s     rœ   rÈ   z%MatrixBase.tolist.<locals>.<listcomp>Ô  s   € Ð1Ð1Ð1˜1�BÐ1Ð1Ð1rŸ   )r“   r”   rÐ   rè   r«   s    rœ   ÚtolistzMatrixBase.tolist¸  sM   € ð2 Œyð 	ØˆIØŒyð 	2Ø1Ð1¥ d¤iÑ 0Ô 0Ð1Ñ1Ô1Ð1Ø× Ò Ñ"Ô"Ð"rŸ   c                óœ   — i }|                       ¦   «         }t          |¦  «        D ]%\  }}d„ t          |¦  «        D ¦   «         }|r|||<   Œ&|S )a;  Returns matrix as dict of dicts containing non-zero elements of the Matrix

        Examples
        ========

        >>> from sympy import Matrix
        >>> A = Matrix([[0, 1],[0, 3]])
        >>> A
        Matrix([
        [0, 1],
        [0, 3]])
        >>> A.todod()
        {0: {1: 1}, 1: {1: 3}}


        c                ó   — i | ]
\  }}|¯||“ŒS r°   r°   )rÃ   r²   ÚMijs      rœ   r*  z$MatrixBase.todod.<locals>.<dictcomp>ë  s#   € Ð=Ð=Ð=™f˜a ¸Ð=�1�cÐ=Ð=Ð=rŸ   )r@  r  )rÓ   ÚrowsdictÚMlolr±   ÚMirÛ   s         rœ   ÚtododzMatrixBase.todod×  s_   € ð" ˆØ�xŠx‰zŒzˆÝ˜t‘_”_ð 	"ð 	"‰EˆAˆrØ=Ð=­	°"©¬Ð=Ñ=Ô=ˆCØð "Ø!�˜‘øØˆrŸ   c                ó*   — |                       ¦   «         S )aŒ  Return the Matrix converted into a one column matrix by stacking columns

        Examples
        ========

        >>> from sympy import Matrix
        >>> m=Matrix([[1, 3], [2, 4]])
        >>> m
        Matrix([
        [1, 3],
        [2, 4]])
        >>> m.vec()
        Matrix([
        [1],
        [2],
        [3],
        [4]])

        See Also
        ========

        vech
        )rö   r«   s    rœ   ÚveczMatrixBase.vecð  s   € ð0 �~Š~ÑÔÐrŸ   c                ó’   — | j         st          ‚|r#|                      ¦   «         st          d¦  «        ‚|                      |¦  «        S )a{  Reshapes the matrix into a column vector by stacking the
        elements in the lower triangle.

        Parameters
        ==========

        diagonal : bool, optional
            If ``True``, it includes the diagonal elements.

        check_symmetry : bool, optional
            If ``True``, it checks whether the matrix is symmetric.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m=Matrix([[1, 2], [2, 3]])
        >>> m
        Matrix([
        [1, 2],
        [2, 3]])
        >>> m.vech()
        Matrix([
        [1],
        [2],
        [3]])
        >>> m.vech(diagonal=False)
        Matrix([[2]])

        Notes
        =====

        This should work for symmetric matrices and ``vech`` can
        represent symmetric matrices in vector form with less size than
        ``vec``.

        See Also
        ========

        vec
        zThe matrix is not symmetric.)Ú	is_squarer@   Úis_symmetricr+  rû   )r¢   rø   Úcheck_symmetrys      rœ   ÚvechzMatrixBase.vech
  sQ   € ðT Œ~ð 	'Ý&Ð&àð 	= $×"3Ò"3Ñ"5Ô"5ð 	=ÝÐ;Ñ<Ô<Ð<à�Š˜xÑ(Ô(Ð(rŸ   c                ó¤   — t          |¦  «        dk    r|                      ¦   «         S t          |d         ¦  «        }t          |j        |¦  «        S )a:  Return a matrix formed by joining args vertically (i.e.
        by repeated application of col_join).

        Examples
        ========

        >>> from sympy import Matrix, eye
        >>> Matrix.vstack(eye(2), 2*eye(2))
        Matrix([
        [1, 0],
        [0, 1],
        [2, 0],
        [0, 2]])
        r   )rÊ   r�   r  r   r  r$  s      rœ   ÚvstackzMatrixBase.vstack<  sB   € õ  ˆt‰9Œ9˜Š>ˆ>Ø—8’8‘:”:Ðå�4˜”7‰mŒmˆÝ�c”l DÑ)Ô)Ð)rŸ   c                ó<   ‡— ˆfd„}|                       |||¦  «        S )zUdiag_dict is a defaultdict containing
        all the entries of the diagonal matrix.c                ó   •— ‰| |f         S r¹   r°   )r±   r²   Ú	diag_dicts     €rœ   r´   z$MatrixBase._eval_diag.<locals>.entryV  s   ø€ Ø˜a ˜VÔ$Ð$rŸ   ©r�   )r™   r“   r”   rS  r´   s      ` rœ   Ú
_eval_diagzMatrixBase._eval_diagR  s2   ø€ ð	%ð 	%ð 	%ð 	%ð 	%à�xŠx˜˜d EÑ*Ô*Ð*rŸ   c                ó”   — | j         g||z  z  }| j        gt          ||¦  «        z  |d d |dz   …<   |                      |||d¬¦  «        S )Nr/   F©Úcopy)rê   ÚoneÚminr�   )r™   r“   r”   Úvalss       rœ   Ú	_eval_eyezMatrixBase._eval_eyeZ  sR   € à”ˆz˜4 ™9Ñ%ˆØœ'˜¥3 t¨T¡?¤?Ñ2ˆˆXˆXˆt�A‰vˆX‰Ø�xŠx˜˜d D¨uˆxÑ5Ô5Ð5rŸ   ÚupperÚsizec                óZ   ‡ ‡— |dk    rˆ ˆfd„}nˆ ˆfd„}‰                       |||¦  «        S )NÚlowerc                óB   •— | |k    r‰S |dz   | k    r‰j         S ‰j        S r¯   ©rY  rê   ©r±   r²   r™   Ú
eigenvalues     €€rœ   r´   z,MatrixBase._eval_jordan_block.<locals>.entryc  ó-   ø€ Ø˜’6�6Ø%Ð%Ø˜‘U˜a’Z�ZØœ7�NØ”x�rŸ   c                óB   •— | |k    r‰S | dz   |k    r‰j         S ‰j        S r¯   rb  rc  s     €€rœ   r´   z,MatrixBase._eval_jordan_block.<locals>.entryj  re  rŸ   rT  )r™   r^  rd  Úbandr´   s   ` `  rœ   Ú_eval_jordan_blockzMatrixBase._eval_jordan_block`  sf   øø€ à�7Š?ˆ?ð ð  ð  ð  ð  ð  ð  ð ð  ð  ð  ð  ð  ð �xŠx˜˜d EÑ*Ô*Ð*rŸ   c                ó<   ‡ — ˆ fd„}‰                       |||¦  «        S )Nc                ó   •— ‰j         S r¹   ©rY  ©r±   r²   r™   s     €rœ   r´   z$MatrixBase._eval_ones.<locals>.entryt  s
   ø€ Ø”7ˆNrŸ   rT  )r™   r“   r”   r´   s   `   rœ   Ú
_eval_oneszMatrixBase._eval_onesr  s2   ø€ ð	ð 	ð 	ð 	ð 	à�xŠx˜˜d EÑ*Ô*Ð*rŸ   c                óL   — |                       ||| j        g||z  z  d¬¦  «        S )NFrW  )r�   rê   )r™   r“   r”   s      rœ   Ú_eval_zeroszMatrixBase._eval_zerosx  s)   € à�xŠx˜˜d S¤X J°°T±	Ñ$:ÀˆxÑGÔGÐGrŸ   c                óz  ‡ — ˆ fd„}‰                       d|z  dz   d|z  dz   |¦  «        }‰                      t          t          | |dz   ¦  «        ¦  «        d¬¦  «        |z   |j        z   }t          ‰                      t          t          | |dz   ¦  «        ¦  «        d¬¦  «        ¦  «        |z   |j        z   }||fS )Nc                ó2   •— | dz   |k    r‰j         n‰j        S r¯   rb  rl  s     €rœ   r´   z)MatrixBase._eval_wilkinson.<locals>.entry~  s   ø€ Ø !™e qšj˜j�3”7�7¨c¬hÐ6rŸ   é   r/   T)Úunpack)r�   ÚdiagrÉ   rÐ   ÚTÚabs)r™   rô   r´   ÚDÚwminusÚwpluss   `     rœ   Ú_eval_wilkinsonzMatrixBase._eval_wilkinson|  sÇ   ø€ ð	7ð 	7ð 	7ð 	7ð 	7ð �HŠH�Q�q‘S˜1‘W˜a ™c A™g uÑ-Ô-ˆà—’�$�u a R¨¨Q©Ñ/Ô/Ñ0Ô0¸�Ñ>Ô>ÀÑBÀQÄSÑHˆÝ�C—H’H�T¥%¨¨¨A°©EÑ"2Ô"2Ñ3Ô3¸D�HÑAÔAÑBÔBÀQÑFÈÌÑLˆà�uˆ}ÐrŸ   F)Ústrictrs  r“   r”   c          
     ó  — ddl m} ddlm} ddlm}	 |                     d| ¦  «        }
|rFt          |¦  «        dk    r3t          |d         ¦  «        rt          |d         |¦  «        s|d         }t          t          ¦  «        }dx}}|D �]}t          |t          ¦  «        rr|r* ||¦  «        }|j        \  }}|                     ¦   «         }n‡|	                     |¦  «        \  }}}|                     ¦   «         D ]\  \  }}}||||z   ||z   f<   Œg }nAt#          |d¦  «        r|j        \  }}|                     ¦   «         }n||||f<   |dz  }|dz  }ŒËt%          |¦  «        D ]'\  }}t%          |¦  «        D ]\  }}||||z   ||z   f<   ŒŒ(||z  }||z  }�Œ|€||}}|€||}}n|€|n|}||k     s||k     r2t'          t)          d	                     ||||¦  «        ¦  «        ¦  «        ‚|
                     |||¦  «        S )
aX
  Returns a matrix with the specified diagonal.
        If matrices are passed, a block-diagonal matrix
        is created (i.e. the "direct sum" of the matrices).

        kwargs
        ======

        rows : rows of the resulting matrix; computed if
               not given.

        cols : columns of the resulting matrix; computed if
               not given.

        cls : class for the resulting matrix

        unpack : bool which, when True (default), unpacks a single
        sequence rather than interpreting it as a Matrix.

        strict : bool which, when False (default), allows Matrices to
        have variable-length rows.

        Examples
        ========

        >>> from sympy import Matrix
        >>> Matrix.diag(1, 2, 3)
        Matrix([
        [1, 0, 0],
        [0, 2, 0],
        [0, 0, 3]])

        The current default is to unpack a single sequence. If this is
        not desired, set `unpack=False` and it will be interpreted as
        a matrix.

        >>> Matrix.diag([1, 2, 3]) == Matrix.diag(1, 2, 3)
        True

        When more than one element is passed, each is interpreted as
        something to put on the diagonal. Lists are converted to
        matrices. Filling of the diagonal always continues from
        the bottom right hand corner of the previous item: this
        will create a block-diagonal matrix whether the matrices
        are square or not.

        >>> col = [1, 2, 3]
        >>> row = [[4, 5]]
        >>> Matrix.diag(col, row)
        Matrix([
        [1, 0, 0],
        [2, 0, 0],
        [3, 0, 0],
        [0, 4, 5]])

        When `unpack` is False, elements within a list need not all be
        of the same length. Setting `strict` to True would raise a
        ValueError for the following:

        >>> Matrix.diag([[1, 2, 3], [4, 5], [6]], unpack=False)
        Matrix([
        [1, 2, 3],
        [4, 5, 0],
        [6, 0, 0]])

        The type of the returned matrix can be set with the ``cls``
        keyword.

        >>> from sympy import ImmutableMatrix
        >>> from sympy.utilities.misc import func_name
        >>> func_name(Matrix.diag(1, cls=ImmutableMatrix))
        'ImmutableDenseMatrix'

        A zero dimension matrix can be used to position the start of
        the filling at the start of an arbitrary row or column:

        >>> from sympy import ones
        >>> r2 = ones(0, 2)
        >>> Matrix.diag(r2, 1, 2)
        Matrix([
        [0, 0, 1, 0],
        [0, 0, 0, 2]])

        See Also
        ========
        eye
        diagonal
        .dense.diag
        .expressions.blockmatrix.BlockMatrix
        .sparsetools.banded
       r   ©r�   ©ÚMatrix©ÚSparseMatrixr™   r/   r¬   Nzg
                The constructed matrix is {} x {} but a size of {} x {}
                was specified.)Úsympy.matrices.matrixbaser�   Úsympy.matrices.denser  Úsympy.matricesr�  ÚgetrÊ   r4   r  r   r’   rÉ   r¬   r@  Ú_handle_creation_inputsrï   Úhasattrr  r+  r6   rþ   rU  )r%  r{  rs  r“   r”   rš   r›   r�   r  r�  ÚklassÚdiag_entriesÚrmaxÚcmaxÚmrõ   r6  rù   Úsmatr±   r²   Úmis                         rœ   rt  zMatrixBase.diagˆ  s™  € ðx 	9Ð8Ð8Ð8Ð8Ð8Ø/Ð/Ð/Ð/Ð/Ð/Ø/Ð/Ð/Ð/Ð/Ð/Ø—
’
˜5 #Ñ&Ô&ˆØð 	•c˜$‘i”i 1’n�n­°T¸!´WÑ)=Ô)=�nÝ˜t Aœw¨
Ñ3Ô3ð %à˜”7ˆDõ #¥3Ñ'Ô'ˆØˆˆˆtØð 	ñ 	ˆAÝ˜!�TÑ"Ô"ð Øð 	à˜˜q™	œ	�AØœ7‘D�A�qØŸš™
œ
�A�Aà!-×!EÒ!EÀaÑ!HÔ!H‘J�A�q˜$Ø%)§Z¢Z¡\¤\ð ?ð ?™	™˜˜A Ø=>˜ a¨$¡h°°D±Ð%9Ñ:Ð:Ø�A�AÝ˜˜GÑ$Ô$ð à”w‘��1Ø—H’H‘J”J��à-.�˜d D˜\Ñ*Ø˜‘	�Ø˜‘	�Øå" 1™œð ;ð ;‘��2Ý% b™MœMð ;ð ;‘D�A�qØ9:�L ! d¡(¨A°©HÐ!5Ñ6Ð6ð;à�A‰IˆDØ�A‰IˆD‰DØˆ<Ø˜t�$ˆDØˆ<Ø˜t�$ˆDˆDà˜<�4�4¨TˆDØ�$Š;ˆ;˜$ š+˜+Ý�Zð )"ç"(¢&¨¨t°T¸4Ñ"@Ô"@ñBô Bñ Cô Cð Cð ×Ò  d¨LÑ9Ô9Ð9rŸ   c                óü   — |€|}|dk     s|dk     r#t          d                     ||¦  «        ¦  «        ‚|                     d| ¦  «        }t          |¦  «        t          |¦  «        }}|                     ||¦  «        S )zïReturns an identity matrix.

        Parameters
        ==========

        rows : rows of the matrix
        cols : cols of the matrix (if None, cols=rows)

        kwargs
        ======
        cls : class of the returned matrix
        Nr   ú@Cannot create a {} x {} matrix. Both dimensions must be positiver™   )r+  rþ   r…  r5   r\  ©r%  r“   r”   r›   rˆ  s        rœ   ÚeyezMatrixBase.eye  s…   € ð ˆ<ØˆDØ�!Š8ˆ8�t˜a’x�xÝð @ß@FÂÀtÈTÑ@RÔ@RñTô Tð Tà—
’
˜5 #Ñ&Ô&ˆÝ˜D‘\”\¥6¨$¡<¤<ˆdˆà�Š˜t TÑ*Ô*Ð*rŸ   )rg  c               óT  — |                      d| ¦  «        }|                     dd¦  «        }|€|€t          d¦  «        ‚||k    r)d||fvr#t          d                     ||¦  «        ¦  «        ‚|�|}|€t          d¦  «        ‚t	          |¦  «        }|                     |||¦  «        S )a—  Returns a Jordan block

        Parameters
        ==========

        size : Integer, optional
            Specifies the shape of the Jordan block matrix.

        eigenvalue : Number or Symbol
            Specifies the value for the main diagonal of the matrix.

            .. note::
                The keyword ``eigenval`` is also specified as an alias
                of this keyword, but it is not recommended to use.

                We may deprecate the alias in later release.

        band : 'upper' or 'lower', optional
            Specifies the position of the off-diagonal to put `1` s on.

        cls : Matrix, optional
            Specifies the matrix class of the output form.

            If it is not specified, the class type where the method is
            being executed on will be returned.

        Returns
        =======

        Matrix
            A Jordan block matrix.

        Raises
        ======

        ValueError
            If insufficient arguments are given for matrix size
            specification, or no eigenvalue is given.

        Examples
        ========

        Creating a default Jordan block:

        >>> from sympy import Matrix
        >>> from sympy.abc import x
        >>> Matrix.jordan_block(4, x)
        Matrix([
        [x, 1, 0, 0],
        [0, x, 1, 0],
        [0, 0, x, 1],
        [0, 0, 0, x]])

        Creating an alternative Jordan block matrix where `1` is on
        lower off-diagonal:

        >>> Matrix.jordan_block(4, x, band='lower')
        Matrix([
        [x, 0, 0, 0],
        [1, x, 0, 0],
        [0, 1, x, 0],
        [0, 0, 1, x]])

        Creating a Jordan block with keyword arguments

        >>> Matrix.jordan_block(size=4, eigenvalue=x)
        Matrix([
        [x, 1, 0, 0],
        [0, x, 1, 0],
        [0, 0, x, 1],
        [0, 0, 0, x]])

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Jordan_matrix
        r™   ÚeigenvalNzMust supply an eigenvaluez=Inconsistent values are given: 'eigenval'={}, 'eigenvalue'={}zMust supply a matrix size)Úpopr…  r+  rþ   r5   rh  )r%  r^  rd  rg  r›   rˆ  r”  s          rœ   Újordan_blockzMatrixBase.jordan_block.  sÌ   € ð^ —
’
˜5 #Ñ&Ô&ˆà—:’:˜j¨$Ñ/Ô/ˆØÐ (Ð"2ÝÐ8Ñ9Ô9Ð9Ø˜8Ò#Ð#¨°X¸zÐ4JÐ(JÐ(JÝð"ß"(¢&¨°:Ñ">Ô">ñ@ô @ð @ð Ð#Ø%�
àˆ<ÝÐ8Ñ9Ô9Ð9å�d‰|Œ|ˆØ×'Ò'¨¨j¸$Ñ?Ô?Ð?rŸ   c                óž   — |€|}|                      d| ¦  «        }t          |¦  «        t          |¦  «        }}|                     ||¦  «        S )zíReturns a matrix of ones.

        Parameters
        ==========

        rows : rows of the matrix
        cols : cols of the matrix (if None, cols=rows)

        kwargs
        ======
        cls : class of the returned matrix
        Nr™   )r…  r5   rm  r‘  s        rœ   ÚoneszMatrixBase.ones�  sL   € ð ˆ<ØˆDØ—
’
˜5 #Ñ&Ô&ˆÝ˜D‘\”\¥6¨$¡<¤<ˆdˆà×Ò  dÑ+Ô+Ð+rŸ   c                óü   — |€|}|dk     s|dk     r#t          d                     ||¦  «        ¦  «        ‚|                     d| ¦  «        }t          |¦  «        t          |¦  «        }}|                     ||¦  «        S )zîReturns a matrix of zeros.

        Parameters
        ==========

        rows : rows of the matrix
        cols : cols of the matrix (if None, cols=rows)

        kwargs
        ======
        cls : class of the returned matrix
        Nr   r�  r™   )r+  rþ   r…  r5   ro  r‘  s        rœ   ÚzeroszMatrixBase.zeros¥  s‡   € ð ˆ<ØˆDØ�!Š8ˆ8�t˜a’x�xÝð @ß@FÂÀtÈTÑ@RÔ@RñTô Tð Tà—
’
˜5 #Ñ&Ô&ˆÝ˜D‘\”\¥6¨$¡<¤<ˆdˆà× Ò   tÑ,Ô,Ð,rŸ   c                ó   ‡ ‡‡— ‰                       |¦  «        }t          |t          ¦  «        s"t          d                     |¦  «        ¦  «        ‚|j        s"t          d                     |¦  «        ¦  «        ‚|j        s"t          d                     |¦  «        ¦  «        ‚|                     ¦   «         Š‰dk    s"t          d                     |¦  «        ¦  «        ‚|                     ¦   «         Šˆˆ ˆfd„}‰  	                    ‰‰|¦  «        S )aâ  Returns a companion matrix of a polynomial.

        Examples
        ========

        >>> from sympy import Matrix, Poly, Symbol, symbols
        >>> x = Symbol('x')
        >>> c0, c1, c2, c3, c4 = symbols('c0:5')
        >>> p = Poly(c0 + c1*x + c2*x**2 + c3*x**3 + c4*x**4 + x**5, x)
        >>> Matrix.companion(p)
        Matrix([
        [0, 0, 0, 0, -c0],
        [1, 0, 0, 0, -c1],
        [0, 1, 0, 0, -c2],
        [0, 0, 1, 0, -c3],
        [0, 0, 0, 1, -c4]])
        z{} must be a Poly instance.z{} must be a monic polynomial.z#{} must be a univariate polynomial.r/   z${} must have degree not less than 1.c                ó\   •— |‰dz
  k    r‰d| z
            S | |dz   k    r‰j         S ‰j        S )Nr/   éÿÿÿÿrb  )r±   r²   Úcoeffsr%  r^  s     €€€rœ   r´   z#MatrixBase.companion.<locals>.entryß  s;   ø€ Ø�D˜1‘HŠ}ˆ}Ø˜r A™vœ�Ð&Ø�a˜!‘e’�Ø”w�Ø”8ˆOrŸ   )
r   r  r2   r+  rþ   Úis_monicÚis_univariateÚdegreeÚ
all_coeffsr�   )r%  Úpolyr´   rž  r^  s   `  @@rœ   Ú	companionzMatrixBase.companion½  s,  øøø€ ð& �|Š|˜DÑ!Ô!ˆÝ˜$¥Ñ%Ô%ð 	IÝÐ:×AÒAÀ$ÑGÔGÑHÔHÐHØŒ}ð 	LÝÐ=×DÒDÀTÑJÔJÑKÔKÐKØÔ!ð 	DÝØ5×<Ò<¸TÑBÔBñDô Dð Dð �{Š{‰}Œ}ˆØ�qŠyˆyÝØ6×=Ò=¸dÑCÔCñEô Eð Eð —’Ñ"Ô"ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð �xŠx˜˜d EÑ*Ô*Ð*rŸ   c                óv   — |                      d| ¦  «        }t          |¦  «        }|                     |¦  «        S )aÝ  Returns two square Wilkinson Matrix of size 2*n + 1
        $W_{2n + 1}^-, W_{2n + 1}^+ =$ Wilkinson(n)

        Examples
        ========

        >>> from sympy import Matrix
        >>> wminus, wplus = Matrix.wilkinson(3)
        >>> wminus
        Matrix([
        [-3,  1,  0, 0, 0, 0, 0],
        [ 1, -2,  1, 0, 0, 0, 0],
        [ 0,  1, -1, 1, 0, 0, 0],
        [ 0,  0,  1, 0, 1, 0, 0],
        [ 0,  0,  0, 1, 1, 1, 0],
        [ 0,  0,  0, 0, 1, 2, 1],
        [ 0,  0,  0, 0, 0, 1, 3]])
        >>> wplus
        Matrix([
        [3, 1, 0, 0, 0, 0, 0],
        [1, 2, 1, 0, 0, 0, 0],
        [0, 1, 1, 1, 0, 0, 0],
        [0, 0, 1, 0, 1, 0, 0],
        [0, 0, 0, 1, 1, 1, 0],
        [0, 0, 0, 0, 1, 2, 1],
        [0, 0, 0, 0, 0, 1, 3]])

        References
        ==========

        .. [1] https://blogs.mathworks.com/cleve/2013/04/15/wilkinsons-matrices-2/
        .. [2] J. H. Wilkinson, The Algebraic Eigenvalue Problem, Claredon Press, Oxford, 1965, 662 pp.

        r™   )r…  r5   rz  )r%  rô   r›   rˆ  s       rœ   Ú	wilkinsonzMatrixBase.wilkinsonè  s7   € ðH —
’
˜5 #Ñ&Ô&ˆÝ�1‰IŒIˆØ×$Ò$ QÑ'Ô'Ð'rŸ   c                ó   — d„ | D ¦   «         S )Nc              3  ó6   K  — | ]}|t           j        u¯|V — Œd S r¹   )r#   ÚZeror  s     rœ   rÅ   z/MatrixBase._eval_iter_values.<locals>.<genexpr>  s(   è è € Ð3Ð3�a 1­A¬F ? ?� ? ? ? ?Ð3Ð3rŸ   r°   r«   s    rœ   Ú_eval_iter_valueszMatrixBase._eval_iter_values  s   € Ø3Ð3˜4Ð3Ñ3Ô3Ð3rŸ   c                óD   — t          |                      ¦   «         ¦  «        S r¹   )rÉ   Úiter_valuesr«   s    rœ   Ú_eval_valueszMatrixBase._eval_values  s   € Ý�D×$Ò$Ñ&Ô&Ñ'Ô'Ð'rŸ   c              #  óš   K  — t          | j        ¦  «        D ]3}t          | j        ¦  «        D ]}| ||f         r||f| ||f         fV — ŒŒ4d S r¹   )rÐ   r“   r”   ©r¢   r±   r²   s      rœ   Ú_eval_iter_itemszMatrixBase._eval_iter_items  su   è è € Ý�t”yÑ!Ô!ð 	-ð 	-ˆAÝ˜4œ9Ñ%Ô%ð -ð -�Ø˜˜1˜”:ð -Ø˜a˜& $ q¨! t¤*Ð,Ð,Ð,Ð,øð-ð	-ð 	-rŸ   c                ó  ‡— |                       ¦   «         }t          |¦  «        | j        | j        z  k     r(t	          t
          j        ‰¦  «        rt
          j        h}nt          ¦   «         } |j        ˆfd„|D ¦   «         Ž S )Nc                ó$   •— g | ]} |j         ‰Ž ‘ŒS r°   )Úatoms)rÃ   rú   Útypess     €rœ   rÈ   z*MatrixBase._eval_atoms.<locals>.<listcomp>%  s!   ø€ Ð9Ð9Ð9¨Q˜˜œ %˜Ð9Ð9Ð9rŸ   )	ÚvaluesrÊ   r“   r”   r  r#   r©  ÚsetÚunion)r¢   r´  rµ  Úss    `  rœ   Ú_eval_atomszMatrixBase._eval_atoms  ss   ø€ Ø—’‘”ˆÝˆv‰;Œ;˜œ T¤YÑ.Ò.Ð.µ:½a¼fÀeÑ3LÔ3LÐ.Ý”�ˆAˆAå‘”ˆAØˆqŒwÐ9Ð9Ð9Ð9°&Ð9Ñ9Ô9Ð:Ð:rŸ   c                ó€   —  t          ¦   «         j        d„ t          |                      ¦   «         ¦  «        D ¦   «         Ž S )Nc              3  ó$   K  — | ]}|j         V — Œd S r¹   )Úfree_symbolsr  s     rœ   rÅ   z0MatrixBase._eval_free_symbols.<locals>.<genexpr>(  s$   è è € ÐHÐH°˜Qœ^ÐHÐHÐHÐHÐHÐHrŸ   )r¶  r·  rµ  r«   s    rœ   Ú_eval_free_symbolszMatrixBase._eval_free_symbols'  s4   € Ø�s‰uŒuŒ{ÐHÐHµS¸¿º¹¼Ñ5GÔ5GÐHÑHÔHÐIÐIrŸ   c                ó^   ‡— t          ˆfd„|                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó,   •K  — | ]} |j         ‰Ž V — Œd S r¹   )Úhas)rÃ   ÚaÚpatternss     €rœ   rÅ   z'MatrixBase._eval_has.<locals>.<genexpr>+  s,   øè è € Ð@Ð@¨�5�1”5˜(Ð#Ð@Ð@Ð@Ð@Ð@Ð@rŸ   )rÑ   r¬  ©r¢   rÂ  s    `rœ   Ú	_eval_haszMatrixBase._eval_has*  s2   ø€ ÝÐ@Ð@Ð@Ð@¨T×-=Ò-=Ñ-?Ô-?Ð@Ñ@Ô@Ñ@Ô@Ð@rŸ   c                ó6   — |                       t          ¦  «        S r¹   )rÀ  r   r«   s    rœ   Ú_eval_is_symboliczMatrixBase._eval_is_symbolic-  s   € Ø�xŠx�ÑÔÐrŸ   c                ón   ‡ ‡‡— ˆ ˆfd„Št          ˆfd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc                ón   •—  ‰‰| |f         ‰|| f                               ¦   «         z
  ¦  «        j        S r¹   )ÚadjointÚis_zero©r±   r²   r¢   Úsimpfuncs     €€rœ   ú<lambda>z6MatrixBase._eval_is_matrix_hermitian.<locals>.<lambda>4  s5   ø€ ˜H˜H T¨!¨Q¨$¤Z°$°q¸!°t´*×2DÒ2DÑ2FÔ2FÑ%FÑGÔGÔO€ rŸ   c              3  ó<   •K  — | ]\  \  }}} ‰||¦  «        V — Œd S r¹   r°   )rÃ   r±   r²   rú   Úherms       €rœ   rÅ   z7MatrixBase._eval_is_matrix_hermitian.<locals>.<genexpr>5  ó5   øè è € ÐGÐG©	©¨¨A°˜˜˜a ™œÐGÐGÐGÐGÐGÐGrŸ   ©r8   Ú
iter_items)r¢   rÌ  rÏ  s   ``@rœ   Ú_eval_is_matrix_hermitianz$MatrixBase._eval_is_matrix_hermitian3  sC   øøø€ ØOÐOÐOÐOÐOˆÝÐGÐGÐGÐG°T·_²_Ñ5FÔ5FÐGÑGÔGÑGÔGÐGrŸ   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó$   K  — | ]}|j         V — Œd S r¹   ©rÊ  )rÃ   rú   s     rœ   rÅ   z2MatrixBase._eval_is_zero_matrix.<locals>.<genexpr>8  s$   è è € Ð?Ð? q˜œÐ?Ð?Ð?Ð?Ð?Ð?rŸ   )r8   r¬  r«   s    rœ   Ú_eval_is_zero_matrixzMatrixBase._eval_is_zero_matrix7  s+   € ÝÐ?Ð?¨D×,<Ò,<Ñ,>Ô,>Ð?Ñ?Ô?Ñ?Ô?Ð?rŸ   Úreturnr9   c                óŠ   ‡‡‡— | j         Š| j        Šˆˆfd„Št          ˆfd„|                      ¦   «         D ¦   «         ¦  «        S )Nc                ó    •— | |k    r|‰u n|‰u S r¹   r°   )r±   r²   rú   rY  rê   s      €€rœ   rÍ  z.MatrixBase._eval_is_Identity.<locals>.<lambda>=  s   ø€ ¨A°ªF¨F  S  ¸¸T¸	€ rŸ   c              3  ó>   •K  — | ]\  \  }}} ‰|||¦  «        V — Œd S r¹   r°   )rÃ   r±   r²   rú   Úidents       €rœ   rÅ   z/MatrixBase._eval_is_Identity.<locals>.<genexpr>>  s7   øè è € ÐEÐE¡i¡f q¨!¨a�5�5˜˜A˜q‘>”>ÐEÐEÐEÐEÐEÐErŸ   )rY  rê   r  rÒ  )r¢   rÜ  rY  rê   s    @@@rœ   Ú_eval_is_IdentityzMatrixBase._eval_is_Identity:  sQ   øøø€ ØŒhˆØŒyˆØAÐAÐAÐAÐAˆÝÐEÐEÐEÐE°4·?²?Ñ3DÔ3DÐEÑEÔEÑEÔEÐErŸ   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó<   K  — | ]\  \  }}}||k    ¯|j         V — Œd S r¹   rÖ  ©rÃ   r±   r²   rú   s       rœ   rÅ   z/MatrixBase._eval_is_diagonal.<locals>.<genexpr>A  s0   è è € ÐPÐP¡y¡v¨¨1¨qÈÈaÊÈ˜œÈÈÈÈÐPÐPrŸ   rÑ  r«   s    rœ   Ú_eval_is_diagonalzMatrixBase._eval_is_diagonal@  s)   € ÝÐPÐP°D·O²OÑ4EÔ4EÐPÑPÔPÑPÔPÐPrŸ   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó<   K  — | ]\  \  }}}||k     ¯|j         V — Œd S r¹   rÖ  rà  s       rœ   rÅ   z,MatrixBase._eval_is_lower.<locals>.<genexpr>D  ó0   è è € ÐIÐI¡¡ ! Q¨À1ÀqÂ5À5�1”9À5À5À5À5ÐIÐIrŸ   ©r  rÒ  r«   s    rœ   Ú_eval_is_lowerzMatrixBase._eval_is_lowerC  ó)   € ÝÐIÐI¨d¯oªoÑ.?Ô.?ÐIÑIÔIÑIÔIÐIrŸ   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  ó<   K  — | ]\  \  }}}||k    ¯|j         V — Œd S r¹   rÖ  rà  s       rœ   rÅ   z,MatrixBase._eval_is_upper.<locals>.<genexpr>G  rä  rŸ   rå  r«   s    rœ   Ú_eval_is_upperzMatrixBase._eval_is_upperF  rç  rŸ   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  óB   K  — | ]\  \  }}}|d z   |k     ¯|j         V — ŒdS ©r/   NrÖ  rà  s       rœ   rÅ   z7MatrixBase._eval_is_lower_hessenberg.<locals>.<genexpr>J  s4   è è € ÐMÐM¡¡ ! Q¨À1ÀqÁ5È1Â9À9�1”9À9À9À9À9ÐMÐMrŸ   rå  r«   s    rœ   Ú_eval_is_lower_hessenbergz$MatrixBase._eval_is_lower_hessenbergI  ó)   € ÝÐMÐM¨d¯oªoÑ.?Ô.?ÐMÑMÔMÑMÔMÐMrŸ   c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  óB   K  — | ]\  \  }}}||d z   k    ¯|j         V — ŒdS rí  rÖ  rà  s       rœ   rÅ   z7MatrixBase._eval_is_upper_hessenberg.<locals>.<genexpr>M  s4   è è € ÐMÐM¡¡ ! Q¨À1ÀqÈ1ÁuÂ9À9�1”9À9À9À9À9ÐMÐMrŸ   rå  r«   s    rœ   Ú_eval_is_upper_hessenbergz$MatrixBase._eval_is_upper_hessenbergL  rï  rŸ   c                ón   ‡ ‡‡— ˆ ˆfd„Št          ˆfd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc                óJ   •—  ‰‰| |f         ‰|| f         z
  ¦  «        j         S r¹   rÖ  rË  s     €€rœ   rÍ  z/MatrixBase._eval_is_symmetric.<locals>.<lambda>P  s)   ø€ ˜8˜8 D¨¨A¨¤J°°a¸°d´Ñ$;Ñ<Ô<ÔD€ rŸ   c              3  ó<   •K  — | ]\  \  }}} ‰||¦  «        V — Œd S r¹   r°   )rÃ   r±   r²   rú   Úsyms       €rœ   rÅ   z0MatrixBase._eval_is_symmetric.<locals>.<genexpr>Q  s5   øè è € ÐFÐF¡y¡v¨¨1¨q˜˜˜Q ™œÐFÐFÐFÐFÐFÐFrŸ   rÑ  )r¢   rÌ  rö  s   ``@rœ   Ú_eval_is_symmetriczMatrixBase._eval_is_symmetricO  sC   øøø€ ØDÐDÐDÐDÐDˆÝÐFÐFÐFÐF°D·O²OÑ4EÔ4EÐFÑFÔFÑFÔFÐFrŸ   c                ón   ‡ ‡‡— ˆ ˆfd„Št          ˆfd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc                óJ   •—  ‰‰| |f         ‰|| f         z   ¦  «        j         S r¹   rÖ  rË  s     €€rœ   rÍ  z4MatrixBase._eval_is_anti_symmetric.<locals>.<lambda>T  s)   ø€ ˜H˜H T¨!¨Q¨$¤Z°$°q¸!°t´*Ñ%<Ñ=Ô=ÔE€ rŸ   c              3  ó<   •K  — | ]\  \  }}} ‰||¦  «        V — Œd S r¹   r°   )rÃ   r±   r²   rú   Úantis       €rœ   rÅ   z5MatrixBase._eval_is_anti_symmetric.<locals>.<genexpr>U  rÐ  rŸ   rÑ  )r¢   rÌ  rû  s   ``@rœ   Ú_eval_is_anti_symmetricz"MatrixBase._eval_is_anti_symmetricS  sC   øøø€ ØEÐEÐEÐEÐEˆÝÐGÐGÐGÐG°T·_²_Ñ5FÔ5FÐGÑGÔGÑGÔGÐGrŸ   c                óv   ‡ — ˆ fd„t          ‰ j        ¦  «        D ¦   «         }t          d„ |D ¦   «         ¦  «        S )Nc              3  ó,   •K  — | ]}‰||f         V — Œd S r¹   r°   ræ   s     €rœ   rÅ   z5MatrixBase._has_positive_diagonals.<locals>.<genexpr>X  ó+   øè è € ÐAÐA¨1˜D  A œJÐAÐAÐAÐAÐAÐArŸ   c              3  ó$   K  — | ]}|j         V — Œd S r¹   )Úis_positive©rÃ   Úxs     rœ   rÅ   z5MatrixBase._has_positive_diagonals.<locals>.<genexpr>Y  s$   è è € ÐAÐA¨1˜œÐAÐAÐAÐAÐAÐArŸ   ©rÐ   r“   r8   ©r¢   Údiagonal_entriess   ` rœ   Ú_has_positive_diagonalsz"MatrixBase._has_positive_diagonalsW  sE   ø€ ØAÐAÐAÐAµ°d´iÑ0@Ô0@ÐAÑAÔAÐÝÐAÐAÐ0@ÐAÑAÔAÑAÔAÐArŸ   c                óv   ‡ — ˆ fd„t          ‰ j        ¦  «        D ¦   «         }t          d„ |D ¦   «         ¦  «        S )Nc              3  ó,   •K  — | ]}‰||f         V — Œd S r¹   r°   ræ   s     €rœ   rÅ   z8MatrixBase._has_nonnegative_diagonals.<locals>.<genexpr>\  rÿ  rŸ   c              3  ó$   K  — | ]}|j         V — Œd S r¹   )Úis_nonnegativer  s     rœ   rÅ   z8MatrixBase._has_nonnegative_diagonals.<locals>.<genexpr>]  s%   è è € ÐDÐD¨a˜Ô)ÐDÐDÐDÐDÐDÐDrŸ   r  r  s   ` rœ   Ú_has_nonnegative_diagonalsz%MatrixBase._has_nonnegative_diagonals[  sE   ø€ ØAÐAÐAÐAµ°d´iÑ0@Ô0@ÐAÑAÔAÐÝÐDÐDÐ3CÐDÑDÔDÑDÔDÐDrŸ   c                ó\   — t          d„ |D ¦   «         ¦  «        }|st          f} | j        |Ž S )av  Returns the atoms that form the current object.

        Examples
        ========

        >>> from sympy.abc import x, y
        >>> from sympy import Matrix
        >>> Matrix([[x]])
        Matrix([[x]])
        >>> _.atoms()
        {x}
        >>> Matrix([[x, y], [y, x]])
        Matrix([
        [x, y],
        [y, x]])
        >>> _.atoms()
        {x, y}
        c              3  ób   K  — | ]*}t          |t          ¦  «        r|nt          |¦  «        V — Œ+d S r¹   )r  r  )rÃ   Úts     rœ   rÅ   z#MatrixBase.atoms.<locals>.<genexpr>s  s;   è è € ÐKÐKÀ�: a­Ñ.Ô.Ð;�a�aµD¸±G´GÐKÐKÐKÐKÐKÐKrŸ   )Útupler   r¹  )r¢   r´  s     rœ   r³  zMatrixBase.atoms_  s?   € õ( ÐKÐKÀUÐKÑKÔKÑKÔKˆØð 	Ý�GˆEØˆtÔ Ð'Ð'rŸ   c                ó*   — |                       ¦   «         S )zÙReturns the free symbols within the matrix.

        Examples
        ========

        >>> from sympy.abc import x
        >>> from sympy import Matrix
        >>> Matrix([[x], [1]]).free_symbols
        {x}
        )r½  r«   s    rœ   r¼  zMatrixBase.free_symbolsx  s   € ð ×&Ò&Ñ(Ô(Ð(rŸ   c                ó   —  | j         |Ž S )aû  Test whether any subexpression matches any of the patterns.

        Examples
        ========

        >>> from sympy import Matrix, SparseMatrix, Float
        >>> from sympy.abc import x, y
        >>> A = Matrix(((1, x), (0.2, 3)))
        >>> B = SparseMatrix(((1, x), (0.2, 3)))
        >>> A.has(x)
        True
        >>> A.has(y)
        False
        >>> A.has(Float)
        True
        >>> B.has(x)
        True
        >>> B.has(y)
        False
        >>> B.has(Float)
        True
        )rÄ  rÃ  s     rœ   rÀ  zMatrixBase.has†  s   € ð. ˆtŒ~˜xÐ(Ð(rŸ   c                óx   — |}t          |¦  «        s|rt          nd„ }| j        sdS |                      |¦  «        S )a  Check if matrix M is an antisymmetric matrix,
        that is, M is a square matrix with all M[i, j] == -M[j, i].

        When ``simplify=True`` (default), the sum M[i, j] + M[j, i] is
        simplified before testing to see if it is zero. By default,
        the SymPy simplify function is used. To use a custom function
        set simplify to a function that accepts a single argument which
        returns a simplified expression. To skip simplification, set
        simplify to False but note that although this will be faster,
        it may induce false negatives.

        Examples
        ========

        >>> from sympy import Matrix, symbols
        >>> m = Matrix(2, 2, [0, 1, -1, 0])
        >>> m
        Matrix([
        [ 0, 1],
        [-1, 0]])
        >>> m.is_anti_symmetric()
        True
        >>> x, y = symbols('x y')
        >>> m = Matrix(2, 3, [0, 0, x, -y, 0, 0])
        >>> m
        Matrix([
        [ 0, 0, x],
        [-y, 0, 0]])
        >>> m.is_anti_symmetric()
        False

        >>> from sympy.abc import x, y
        >>> m = Matrix(3, 3, [0, x**2 + 2*x + 1, y,
        ...                   -(x + 1)**2, 0, x*y,
        ...                   -y, -x*y, 0])

        Simplification of matrix elements is done by default so even
        though two elements which should be equal and opposite would not
        pass an equality test, the matrix is still reported as
        anti-symmetric:

        >>> m[0, 1] == -m[1, 0]
        False
        >>> m.is_anti_symmetric()
        True

        If ``simplify=False`` is used for the case when a Matrix is already
        simplified, this will speed things up. Here, we see that without
        simplification the matrix does not appear anti-symmetric:

        >>> print(m.is_anti_symmetric(simplify=False))
        None

        But if the matrix were already expanded, then it would appear
        anti-symmetric and simplification in the is_anti_symmetric routine
        is not needed:

        >>> m = m.expand()
        >>> m.is_anti_symmetric(simplify=False)
        True
        c                ó   — | S r¹   r°   ©r  s    rœ   rÍ  z.MatrixBase.is_anti_symmetric.<locals>.<lambda>à  ó   € Àa€ rŸ   F)r   Ú_utilities_simplifyrK  rü  ©r¢   ÚsimplifyrÌ  s      rœ   Úis_anti_symmetriczMatrixBase.is_anti_symmetricŸ  sP   € ð~ ˆÝ˜(Ñ#Ô#ð 	HØ.6ÐGÕ*Ð*¸K¸KˆHàŒ~ð 	Ø�5Ø×+Ò+¨HÑ5Ô5Ð5rŸ   c                ó*   — |                       ¦   «         S )a,  Check if matrix is diagonal,
        that is matrix in which the entries outside the main diagonal are all zero.

        Examples
        ========

        >>> from sympy import Matrix, diag
        >>> m = Matrix(2, 2, [1, 0, 0, 2])
        >>> m
        Matrix([
        [1, 0],
        [0, 2]])
        >>> m.is_diagonal()
        True

        >>> m = Matrix(2, 2, [1, 1, 0, 2])
        >>> m
        Matrix([
        [1, 1],
        [0, 2]])
        >>> m.is_diagonal()
        False

        >>> m = diag(1, 2, 3)
        >>> m
        Matrix([
        [1, 0, 0],
        [0, 2, 0],
        [0, 0, 3]])
        >>> m.is_diagonal()
        True

        See Also
        ========

        is_lower
        is_upper
        sympy.matrices.matrixbase.MatrixBase.is_diagonalizable
        diagonalize
        )rá  r«   s    rœ   Úis_diagonalzMatrixBase.is_diagonalæ  s   € ðR ×%Ò%Ñ'Ô'Ð'rŸ   c                óŠ   ‡ ‡‡— ‰ j         sdS ‰ j        \  }Šˆˆ fd„Št          ˆfd„t          |¦  «        D ¦   «         ¦  «        S )a±  Tests if the matrix is row weakly diagonally dominant.

        Explanation
        ===========

        A $n, n$ matrix $A$ is row weakly diagonally dominant if

        .. math::
            \left|A_{i, i}\right| \ge \sum_{j = 0, j \neq i}^{n-1}
            \left|A_{i, j}\right| \quad {\text{for all }}
            i \in \{ 0, ..., n-1 \}

        Examples
        ========

        >>> from sympy import Matrix
        >>> A = Matrix([[3, -2, 1], [1, -3, 2], [-1, 2, 4]])
        >>> A.is_weakly_diagonally_dominant
        True

        >>> A = Matrix([[-2, 2, 1], [1, 3, 2], [1, -2, 0]])
        >>> A.is_weakly_diagonally_dominant
        False

        >>> A = Matrix([[-4, 2, 1], [1, 6, 2], [1, -2, 5]])
        >>> A.is_weakly_diagonally_dominant
        True

        Notes
        =====

        If you want to test whether a matrix is column diagonally
        dominant, you can apply the test after transposing the matrix.
        Fc                ó´   •— ‰j         }t          ‰¦  «        D ]"}| |k    r|t          ‰| |f         ¦  «        z  }Œ#t          ‰| | f         ¦  «        |z
  j        S r¹   )rê   rÐ   r   r  ©r±   Ú	summationr²   r”   r¢   s      €€rœ   Útest_rowz:MatrixBase.is_weakly_diagonally_dominant.<locals>.test_row:  s]   ø€ Øœ	ˆIÝ˜4‘[”[ð 1ð 1�Ø˜’6�6Ø¥ T¨!¨Q¨$¤Z¡¤Ñ0�IøÝ˜˜Q ˜Tœ
‘O”O iÑ/Ô?Ð?rŸ   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r¹   r°   ©rÃ   r±   r!  s     €rœ   rÅ   z;MatrixBase.is_weakly_diagonally_dominant.<locals>.<genexpr>A  ó+   øè è € Ð:Ð:¨˜˜ !™œÐ:Ð:Ð:Ð:Ð:Ð:rŸ   ©rK  r¬   r8   rÐ   ©r¢   r“   r”   r!  s   ` @@rœ   Úis_weakly_diagonally_dominantz(MatrixBase.is_weakly_diagonally_dominant  sq   øøø€ ðH Œ~ð 	Ø�5à”Z‰
ˆˆdð	@ð 	@ð 	@ð 	@ð 	@ð 	@õ Ð:Ð:Ð:Ð:­e°D©k¬kÐ:Ñ:Ô:Ñ:Ô:Ð:rŸ   c                óŠ   ‡ ‡‡— ‰ j         sdS ‰ j        \  }Šˆˆ fd„Št          ˆfd„t          |¦  «        D ¦   «         ¦  «        S )aº  Tests if the matrix is row strongly diagonally dominant.

        Explanation
        ===========

        A $n, n$ matrix $A$ is row strongly diagonally dominant if

        .. math::
            \left|A_{i, i}\right| > \sum_{j = 0, j \neq i}^{n-1}
            \left|A_{i, j}\right| \quad {\text{for all }}
            i \in \{ 0, ..., n-1 \}

        Examples
        ========

        >>> from sympy import Matrix
        >>> A = Matrix([[3, -2, 1], [1, -3, 2], [-1, 2, 4]])
        >>> A.is_strongly_diagonally_dominant
        False

        >>> A = Matrix([[-2, 2, 1], [1, 3, 2], [1, -2, 0]])
        >>> A.is_strongly_diagonally_dominant
        False

        >>> A = Matrix([[-4, 2, 1], [1, 6, 2], [1, -2, 5]])
        >>> A.is_strongly_diagonally_dominant
        True

        Notes
        =====

        If you want to test whether a matrix is column diagonally
        dominant, you can apply the test after transposing the matrix.
        Fc                ó´   •— ‰j         }t          ‰¦  «        D ]"}| |k    r|t          ‰| |f         ¦  «        z  }Œ#t          ‰| | f         ¦  «        |z
  j        S r¹   )rê   rÐ   r   r  r  s      €€rœ   r!  z<MatrixBase.is_strongly_diagonally_dominant.<locals>.test_rowl  s]   ø€ Øœ	ˆIÝ˜4‘[”[ð 1ð 1�Ø˜’6�6Ø¥ T¨!¨Q¨$¤Z¡¤Ñ0�IøÝ˜˜Q ˜Tœ
‘O”O iÑ/Ô<Ð<rŸ   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r¹   r°   r#  s     €rœ   rÅ   z=MatrixBase.is_strongly_diagonally_dominant.<locals>.<genexpr>s  r$  rŸ   r%  r&  s   ` @@rœ   Úis_strongly_diagonally_dominantz*MatrixBase.is_strongly_diagonally_dominantC  sk   øøø€ ðH Œ~ð 	Ø�5à”Z‰
ˆˆdð	=ð 	=ð 	=ð 	=ð 	=ð 	=õ Ð:Ð:Ð:Ð:­e°D©k¬kÐ:Ñ:Ô:Ñ:Ô:Ð:rŸ   c                óH   — | j         sdS |                      t          ¦  «        S )ag  Checks if the matrix is Hermitian.

        In a Hermitian matrix element i,j is the complex conjugate of
        element j,i.

        Examples
        ========

        >>> from sympy import Matrix
        >>> from sympy import I
        >>> from sympy.abc import x
        >>> a = Matrix([[1, I], [-I, 1]])
        >>> a
        Matrix([
        [ 1, I],
        [-I, 1]])
        >>> a.is_hermitian
        True
        >>> a[0, 0] = 2*I
        >>> a.is_hermitian
        False
        >>> a[0, 0] = x
        >>> a.is_hermitian
        >>> a[0, 1] = a[1, 0]*I
        >>> a.is_hermitian
        False
        F)rK  rÓ  r  r«   s    rœ   Úis_hermitianzMatrixBase.is_hermitianu  s(   € ð: Œ~ð 	Ø�5à×-Ò-Õ.AÑBÔBÐBrŸ   c                ó<   — | j         sdS |                      ¦   «         S )NF)rK  rÝ  r«   s    rœ   Úis_IdentityzMatrixBase.is_Identity—  s#   € àŒ~ð 	Ø�5Ø×%Ò%Ñ'Ô'Ð'rŸ   c                ó*   — |                       ¦   «         S )a-  Checks if the matrix is in the lower-Hessenberg form.

        The lower hessenberg matrix has zero entries
        above the first superdiagonal.

        Examples
        ========

        >>> from sympy import Matrix
        >>> a = Matrix([[1, 2, 0, 0], [5, 2, 3, 0], [3, 4, 3, 7], [5, 6, 1, 1]])
        >>> a
        Matrix([
        [1, 2, 0, 0],
        [5, 2, 3, 0],
        [3, 4, 3, 7],
        [5, 6, 1, 1]])
        >>> a.is_lower_hessenberg
        True

        See Also
        ========

        is_upper_hessenberg
        is_lower
        )rî  r«   s    rœ   Úis_lower_hessenbergzMatrixBase.is_lower_hessenberg�  ó   € ð6 ×-Ò-Ñ/Ô/Ð/rŸ   c                ó*   — |                       ¦   «         S )al  Check if matrix is a lower triangular matrix. True can be returned
        even if the matrix is not square.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix(2, 2, [1, 0, 0, 1])
        >>> m
        Matrix([
        [1, 0],
        [0, 1]])
        >>> m.is_lower
        True

        >>> m = Matrix(4, 3, [0, 0, 0, 2, 0, 0, 1, 4, 0, 6, 6, 5])
        >>> m
        Matrix([
        [0, 0, 0],
        [2, 0, 0],
        [1, 4, 0],
        [6, 6, 5]])
        >>> m.is_lower
        True

        >>> from sympy.abc import x, y
        >>> m = Matrix(2, 2, [x**2 + y, y**2 + x, 0, x + y])
        >>> m
        Matrix([
        [x**2 + y, x + y**2],
        [       0,    x + y]])
        >>> m.is_lower
        False

        See Also
        ========

        is_upper
        is_diagonal
        is_lower_hessenberg
        )ræ  r«   s    rœ   Úis_lowerzMatrixBase.is_lowerº  s   € ðV ×"Ò"Ñ$Ô$Ð$rŸ   c                ó"   — | j         | j        k    S )a/  Checks if a matrix is square.

        A matrix is square if the number of rows equals the number of columns.
        The empty matrix is square by definition, since the number of rows and
        the number of columns are both zero.

        Examples
        ========

        >>> from sympy import Matrix
        >>> a = Matrix([[1, 2, 3], [4, 5, 6]])
        >>> b = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        >>> c = Matrix([])
        >>> a.is_square
        False
        >>> b.is_square
        True
        >>> c.is_square
        True
        rª   r«   s    rœ   rK  zMatrixBase.is_squareç  s   € ð, Œy˜DœIÒ%Ð%rŸ   c                ó*   — |                       ¦   «         S )zóChecks if any elements contain Symbols.

        Examples
        ========

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

        )rÆ  r«   s    rœ   Úis_symboliczMatrixBase.is_symbolicÿ  s   € ð ×%Ò%Ñ'Ô'Ð'rŸ   c                óx   — |}t          |¦  «        s|rt          nd„ }| j        sdS |                      |¦  «        S )a�  Check if matrix is symmetric matrix,
        that is square matrix and is equal to its transpose.

        By default, simplifications occur before testing symmetry.
        They can be skipped using 'simplify=False'; while speeding things a bit,
        this may however induce false negatives.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix(2, 2, [0, 1, 1, 2])
        >>> m
        Matrix([
        [0, 1],
        [1, 2]])
        >>> m.is_symmetric()
        True

        >>> m = Matrix(2, 2, [0, 1, 2, 0])
        >>> m
        Matrix([
        [0, 1],
        [2, 0]])
        >>> m.is_symmetric()
        False

        >>> m = Matrix(2, 3, [0, 0, 0, 0, 0, 0])
        >>> m
        Matrix([
        [0, 0, 0],
        [0, 0, 0]])
        >>> m.is_symmetric()
        False

        >>> from sympy.abc import x, y
        >>> m = Matrix(3, 3, [1, x**2 + 2*x + 1, y, (x + 1)**2, 2, 0, y, 0, 3])
        >>> m
        Matrix([
        [         1, x**2 + 2*x + 1, y],
        [(x + 1)**2,              2, 0],
        [         y,              0, 3]])
        >>> m.is_symmetric()
        True

        If the matrix is already simplified, you may speed-up is_symmetric()
        test by using 'simplify=False'.

        >>> bool(m.is_symmetric(simplify=False))
        False
        >>> m1 = m.expand()
        >>> m1.is_symmetric(simplify=False)
        True
        c                ó   — | S r¹   r°   r  s    rœ   rÍ  z)MatrixBase.is_symmetric.<locals>.<lambda>G  r  rŸ   F)r   r  rK  r÷  r  s      rœ   rL  zMatrixBase.is_symmetric  sP   € ðn ˆÝ˜(Ñ#Ô#ð 	HØ.6ÐGÕ*Ð*¸K¸KˆHàŒ~ð 	Ø�5à×&Ò& xÑ0Ô0Ð0rŸ   c                ó*   — |                       ¦   «         S )a(  Checks if the matrix is the upper-Hessenberg form.

        The upper hessenberg matrix has zero entries
        below the first subdiagonal.

        Examples
        ========

        >>> from sympy import Matrix
        >>> a = Matrix([[1, 4, 2, 3], [3, 4, 1, 7], [0, 2, 3, 4], [0, 0, 1, 3]])
        >>> a
        Matrix([
        [1, 4, 2, 3],
        [3, 4, 1, 7],
        [0, 2, 3, 4],
        [0, 0, 1, 3]])
        >>> a.is_upper_hessenberg
        True

        See Also
        ========

        is_lower_hessenberg
        is_upper
        )rò  r«   s    rœ   Úis_upper_hessenbergzMatrixBase.is_upper_hessenbergN  r2  rŸ   c                ó*   — |                       ¦   «         S )a$  Check if matrix is an upper triangular matrix. True can be returned
        even if the matrix is not square.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix(2, 2, [1, 0, 0, 1])
        >>> m
        Matrix([
        [1, 0],
        [0, 1]])
        >>> m.is_upper
        True

        >>> m = Matrix(4, 3, [5, 1, 9, 0, 4, 6, 0, 0, 5, 0, 0, 0])
        >>> m
        Matrix([
        [5, 1, 9],
        [0, 4, 6],
        [0, 0, 5],
        [0, 0, 0]])
        >>> m.is_upper
        True

        >>> m = Matrix(2, 3, [4, 2, 5, 6, 1, 1])
        >>> m
        Matrix([
        [4, 2, 5],
        [6, 1, 1]])
        >>> m.is_upper
        False

        See Also
        ========

        is_lower
        is_diagonal
        is_upper_hessenberg
        )rê  r«   s    rœ   Úis_upperzMatrixBase.is_upperk  s   € ðT ×"Ò"Ñ$Ô$Ð$rŸ   c                ó*   — |                       ¦   «         S )a,  Checks if a matrix is a zero matrix.

        A matrix is zero if every element is zero.  A matrix need not be square
        to be considered zero.  The empty matrix is zero by the principle of
        vacuous truth.  For a matrix that may or may not be zero (e.g.
        contains a symbol), this will be None

        Examples
        ========

        >>> from sympy import Matrix, zeros
        >>> from sympy.abc import x
        >>> a = Matrix([[0, 0], [0, 0]])
        >>> b = zeros(3, 4)
        >>> c = Matrix([[0, 1], [0, 0]])
        >>> d = Matrix([])
        >>> e = Matrix([[x, 0], [0, 0]])
        >>> a.is_zero_matrix
        True
        >>> b.is_zero_matrix
        True
        >>> c.is_zero_matrix
        False
        >>> d.is_zero_matrix
        True
        >>> e.is_zero_matrix
        )r×  r«   s    rœ   Úis_zero_matrixzMatrixBase.is_zero_matrix—  s   € ð: ×(Ò(Ñ*Ô*Ð*rŸ   c                ó*   — |                       ¦   «         S )a  Return non-zero values of self.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix([[0, 1], [2, 3]])
        >>> m.values()
        [1, 2, 3]

        See Also
        ========

        iter_values
        tolist
        flat
        )r­  r«   s    rœ   rµ  zMatrixBase.values¶  s   € ð$ × Ò Ñ"Ô"Ð"rŸ   c                ó*   — |                       ¦   «         S )a  
        Iterate over non-zero values of self.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix([[0, 1], [2, 3]])
        >>> list(m.iter_values())
        [1, 2, 3]

        See Also
        ========

        values
        )rª  r«   s    rœ   r¬  zMatrixBase.iter_valuesÊ  s   € ð" ×%Ò%Ñ'Ô'Ð'rŸ   c                ó*   — |                       ¦   «         S )aC  Iterate over indices and values of nonzero items.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix([[0, 1], [2, 3]])
        >>> list(m.iter_items())
        [((0, 1), 1), ((1, 0), 2), ((1, 1), 3)]

        See Also
        ========

        iter_values
        todok
        )r°  r«   s    rœ   rÒ  zMatrixBase.iter_itemsÝ  s   € ð" ×$Ò$Ñ&Ô&Ð&rŸ   c                óR   — |                       ¦   «                              d„ ¦  «        S )Nc                ó*   — |                       ¦   «         S r¹   ©rÉ  r  s    rœ   rÍ  z*MatrixBase._eval_adjoint.<locals>.<lambda>ñ  s   € °A·I²I±K´K€ rŸ   )Ú	transposeÚ	applyfuncr«   s    rœ   Ú_eval_adjointzMatrixBase._eval_adjointð  s$   € Ø�~Š~ÑÔ×)Ò)Ð*?Ð*?Ñ@Ô@Ð@rŸ   c                ó8  ‡‡— | j         }| j        | j         z  }|                      ¦   «         }ˆfd„|                     ¦   «         D ¦   «         Št	          |¦  «        |k     ry ‰t
          j        ¦  «        x}t
          j        urV|g|z  }|                     ¦   «         D ]\  \  }}}	‰|	         |||z  |z   <   Œ|                      | j        | j         |¦  «        }
nAˆfd„|                     ¦   «         D ¦   «         }|  	                    | j        | j         |¦  «        }
|
S )Nc                ó(   •— i | ]}| ‰|¦  «        “ŒS r°   r°   )rÃ   rú   Úfs     €rœ   r*  z.MatrixBase._eval_applyfunc.<locals>.<dictcomp>ø  s#   ø€ Ð0Ð0Ð0˜a�!�Q�Q�q‘T”TÐ0Ð0Ð0rŸ   c                ó(   •— i | ]\  }}|‰|         “ŒS r°   r°   )rÃ   r<  rú   Úvalmaps      €rœ   r*  z.MatrixBase._eval_applyfunc.<locals>.<dictcomp>   s#   ø€ Ð;Ð;Ð;¡e b¨!�B˜˜qœ	Ð;Ð;Ð;rŸ   )
r”   r“   r,  rµ  rÊ   r#   r©  rï   r�   r=  )r¢   rK  r”   r^  rë   Úfzerorð   r±   r²   rú   ÚoutÚfdokrM  s    `          @rœ   Ú_eval_applyfunczMatrixBase._eval_applyfuncó  s  øø€ ØŒyˆØŒy˜œÑ"ˆà�jŠj‰lŒlˆØ0Ð0Ð0Ð0 3§:¢:¡<¤<Ð0Ñ0Ô0ˆåˆs‰8Œ8�dŠ?ˆ?¨!¨!­A¬F©)¬)Ð!3 ½A¼FÐ BÐ BØ�w˜t‘|ˆHØ ŸYšY™[œ[ð 1ð 1‘	‘��A˜Ø'-¨a¤y�˜˜4™ !™Ñ$Ð$Ø—)’)˜DœI t¤y°(Ñ;Ô;ˆCˆCà;Ð;Ð;Ð;¨s¯yªy©{¬{Ð;Ñ;Ô;ˆDØ—-’- ¤	¨4¬9°dÑ;Ô;ˆCàˆ
rŸ   c                ój   — |                       t          ¦  «        |                       t          ¦  «        fS r¹   )rG  r   r   r«   s    rœ   Ú_eval_as_real_imagzMatrixBase._eval_as_real_imag  s%   € Ø—’�rÑ"Ô" D§N¢Nµ2Ñ$6Ô$6Ð7Ð7rŸ   c                ó.   — |                       d„ ¦  «        S )Nc                ó*   — |                       ¦   «         S r¹   ©Ú	conjugater  s    rœ   rÍ  z,MatrixBase._eval_conjugate.<locals>.<lambda>	  s   € ¨¯ª©¬€ rŸ   ©rG  r«   s    rœ   Ú_eval_conjugatezMatrixBase._eval_conjugate  s   € Ø�~Š~Ð5Ð5Ñ6Ô6Ð6rŸ   c                ór   ‡ ‡— t          |¦  «        Šˆˆ fd„}‰                      ‰ j        ‰ j        |¦  «        S )Nc                ó$   •— ‰| ‰|         f         S r¹   r°   ©r±   r²   Úmappingr¢   s     €€rœ   r´   z,MatrixBase._eval_permute_cols.<locals>.entry  s   ø€ Ø˜˜7 1œ:˜Ô&Ð&rŸ   ©rÉ   r�   r“   r”   ©r¢   Úpermr´   r]  s   `  @rœ   Ú_eval_permute_colszMatrixBase._eval_permute_cols  óI   øø€ å�t‘*”*ˆð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð �yŠy˜œ D¤I¨uÑ5Ô5Ð5rŸ   c                ór   ‡ ‡— t          |¦  «        Šˆˆ fd„}‰                      ‰ j        ‰ j        |¦  «        S )Nc                ó$   •— ‰‰|          |f         S r¹   r°   r\  s     €€rœ   r´   z,MatrixBase._eval_permute_rows.<locals>.entry  s   ø€ Ø˜ œ
 A˜Ô&Ð&rŸ   r^  r_  s   `  @rœ   Ú_eval_permute_rowszMatrixBase._eval_permute_rows  rb  rŸ   c                ó^   ‡ — t          ˆ fd„t          ‰ j        ¦  «        D ¦   «         ¦  «        S )Nc              3  ó,   •K  — | ]}‰||f         V — Œd S r¹   r°   ræ   s     €rœ   rÅ   z)MatrixBase._eval_trace.<locals>.<genexpr>  s+   øè è € Ð8Ð8 !�4˜˜1˜”:Ð8Ð8Ð8Ð8Ð8Ð8rŸ   )ÚsumrÐ   r“   r«   s   `rœ   Ú_eval_tracezMatrixBase._eval_trace  s0   ø€ ÝÐ8Ð8Ð8Ð8¥u¨T¬YÑ'7Ô'7Ð8Ñ8Ô8Ñ8Ô8Ð8rŸ   c                óL   ‡ — ‰                       ‰ j        ‰ j        ˆ fd„¦  «        S )Nc                ó   •— ‰|| f         S r¹   r°   ©r±   r²   r¢   s     €rœ   rÍ  z,MatrixBase._eval_transpose.<locals>.<lambda>!  s   ø€ ¸DÀÀAÀ¼J€ rŸ   )r�   r”   r“   r«   s   `rœ   Ú_eval_transposezMatrixBase._eval_transpose   s'   ø€ Ø�yŠy˜œ D¤IÐ/FÐ/FÐ/FÐ/FÑGÔGÐGrŸ   c                ó*   — |                       ¦   «         S )z-Conjugate transpose or Hermitian conjugation.)rH  r«   s    rœ   rÉ  zMatrixBase.adjoint#  s   € à×!Ò!Ñ#Ô#Ð#rŸ   c                óh   — t          |¦  «        st          d¦  «        ‚|                      |¦  «        S )aL  Apply a function to each element of the matrix.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix(2, 2, lambda i, j: i*2+j)
        >>> m
        Matrix([
        [0, 1],
        [2, 3]])
        >>> m.applyfunc(lambda i: 2*i)
        Matrix([
        [0, 2],
        [4, 6]])

        z`f` must be callable.)Úcallabler  rQ  )r¢   rK  s     rœ   rG  zMatrixBase.applyfunc'  s5   € õ$ ˜‰{Œ{ð 	5ÝÐ3Ñ4Ô4Ð4à×#Ò# AÑ&Ô&Ð&rŸ   c                ó*   — |                       ¦   «         S )z@Returns a tuple containing the (real, imaginary) part of matrix.)rS  )r¢   ÚdeepÚhintss      rœ   Úas_real_imagzMatrixBase.as_real_imag>  s   € ð ×&Ò&Ñ(Ô(Ð(rŸ   c                ó*   — |                       ¦   «         S )a#  Return the by-element conjugation.

        Examples
        ========

        >>> from sympy import SparseMatrix, I
        >>> a = SparseMatrix(((1, 2 + I), (3, 4), (I, -I)))
        >>> a
        Matrix([
        [1, 2 + I],
        [3,     4],
        [I,    -I]])
        >>> a.C
        Matrix([
        [ 1, 2 - I],
        [ 3,     4],
        [-I,     I]])

        See Also
        ========

        transpose: Matrix transposition
        H: Hermite conjugation
        sympy.matrices.matrixbase.MatrixBase.D: Dirac conjugation
        )rY  r«   s    rœ   rW  zMatrixBase.conjugateC  s   € ð4 ×#Ò#Ñ%Ô%Ð%rŸ   c                ó4   ‡— |                       ˆfd„¦  «        S )Nc                ó   •—  | j         di ‰¤ŽS ©Nr°   )Údoit)r  rs  s    €rœ   rÍ  z!MatrixBase.doit.<locals>.<lambda>`  s   ø€ ¨¨¬¨¨°¨¨€ rŸ   rX  )r¢   rs  s    `rœ   ry  zMatrixBase.doit_  s   ø€ Ø�~Š~Ð7Ð7Ð7Ð7Ñ8Ô8Ð8rŸ   é   éd   c                óJ   ‡‡— ||||||dœŠ|                       ˆˆfd„¦  «        S )ú&Apply evalf() to each element of self.)ÚsubsÚmaxnÚchopr{  ÚquadÚverbosec                ó    •—  | j         ‰fi ‰¤ŽS r¹   ©Úevalf)r±   rô   Úoptionss    €€rœ   rÍ  z"MatrixBase.evalf.<locals>.<lambda>f  s   ø€ ¨¨¬°Ð(=Ð(=°WÐ(=Ð(=€ rŸ   rX  )	r¢   rô   r~  r  r€  r{  r�  r‚  r†  s	    `      @rœ   r…  zMatrixBase.evalfb  s=   øø€ à t°DÀ6Ø wð0ð 0ˆà�~Š~Ð=Ð=Ð=Ð=Ð=Ñ>Ô>Ð>rŸ   c	                óT   ‡‡‡‡‡‡‡‡‡	— |                       ˆˆˆ	ˆˆˆˆˆˆf	d„¦  «        S )a$  Apply core.function.expand to each entry of the matrix.

        Examples
        ========

        >>> from sympy.abc import x
        >>> from sympy import Matrix
        >>> Matrix(1, 1, [x*(x+1)])
        Matrix([[x*(x + 1)]])
        >>> _.expand()
        Matrix([[x**2 + x]])

        c           
     ó.   •	—  | j         ‰‰‰‰	‰‰‰‰fi ‰¤ŽS r¹   )Úexpand)
r  Úbasicrr  rs  r'   ÚmodulusÚmulÚmultinomialÚ
power_baseÚ	power_exps
    €€€€€€€€€rœ   rÍ  z#MatrixBase.expand.<locals>.<lambda>w  s3   ø€ ¨¨¬Ø�'˜: y°#°s¸KÈð)ð )àð)ð )€ rŸ   rX  )
r¢   rr  r‹  rŽ  r�  rŒ  r'   r�  rŠ  rs  s
    `````````rœ   r‰  zMatrixBase.expandh  s_   øøøøøøøøø€ ð �~Š~ð ð ð ð ð ð ð ð ð ð ð ð ñ ô ð 	rŸ   c                ó*   — |                       ¦   «         S )a¾  Return Hermite conjugate.

        Examples
        ========

        >>> from sympy import Matrix, I
        >>> m = Matrix((0, 1 + I, 2, 3))
        >>> m
        Matrix([
        [    0],
        [1 + I],
        [    2],
        [    3]])
        >>> m.H
        Matrix([[0, 1 - I, 2, 3]])

        See Also
        ========

        conjugate: By-element conjugation
        sympy.matrices.matrixbase.MatrixBase.D: Dirac conjugation
        rE  r«   s    rœ   ÚHzMatrixBase.H{  s   € ð0 �|Š|‰~Œ~ÐrŸ   Úforwardc                óJ  ‡— ddl m} |dk    rd}|dk    rd}|dk    rd}|d	vr"t          d
                     |¦  «        ¦  «        ‚|dvr"t          d                     |¦  «        ¦  «        ‚t	          ||t
          f¦  «        s"t          d                     |¦  «        ¦  «        ‚|dk    r| j        n| j        Št          ˆfd„t          t          |¦  «        ¦  «        D ¦   «         ¦  «        st          d¦  «        ‚|r^t	          ||¦  «        sNt	          |d         t
          ¦  «        r3|dk    rt          t          |¦  «        ¦  «        } ||‰dz   ¬¦  «        }n ||‰dz   ¬¦  «        }|dk    r|                      |¦  «        S |dk    r|                      |¦  «        S dS )a  Permute the rows or columns of a matrix by the given list of
        swaps.

        Parameters
        ==========

        perm : Permutation, list, or list of lists
            A representation for the permutation.

            If it is ``Permutation``, it is used directly with some
            resizing with respect to the matrix size.

            If it is specified as list of lists,
            (e.g., ``[[0, 1], [0, 2]]``), then the permutation is formed
            from applying the product of cycles. The direction how the
            cyclic product is applied is described in below.

            If it is specified as a list, the list should represent
            an array form of a permutation. (e.g., ``[1, 2, 0]``) which
            would would form the swapping function
            `0 \mapsto 1, 1 \mapsto 2, 2\mapsto 0`.

        orientation : 'rows', 'cols'
            A flag to control whether to permute the rows or the columns

        direction : 'forward', 'backward'
            A flag to control whether to apply the permutations from
            the start of the list first, or from the back of the list
            first.

            For example, if the permutation specification is
            ``[[0, 1], [0, 2]]``,

            If the flag is set to ``'forward'``, the cycle would be
            formed as `0 \mapsto 2, 2 \mapsto 1, 1 \mapsto 0`.

            If the flag is set to ``'backward'``, the cycle would be
            formed as `0 \mapsto 1, 1 \mapsto 2, 2 \mapsto 0`.

            If the argument ``perm`` is not in a form of list of lists,
            this flag takes no effect.

        Examples
        ========

        >>> from sympy import eye
        >>> M = eye(3)
        >>> M.permute([[0, 1], [0, 2]], orientation='rows', direction='forward')
        Matrix([
        [0, 0, 1],
        [1, 0, 0],
        [0, 1, 0]])

        >>> from sympy import eye
        >>> M = eye(3)
        >>> M.permute([[0, 1], [0, 2]], orientation='rows', direction='backward')
        Matrix([
        [0, 1, 0],
        [0, 0, 1],
        [1, 0, 0]])

        Notes
        =====

        If a bijective function
        `\sigma : \mathbb{N}_0 \rightarrow \mathbb{N}_0` denotes the
        permutation.

        If the matrix `A` is the matrix to permute, represented as
        a horizontal or a vertical stack of vectors:

        .. math::
            A =
            \begin{bmatrix}
            a_0 \\ a_1 \\ \vdots \\ a_{n-1}
            \end{bmatrix} =
            \begin{bmatrix}
            \alpha_0 & \alpha_1 & \cdots & \alpha_{n-1}
            \end{bmatrix}

        If the matrix `B` is the result, the permutation of matrix rows
        is defined as:

        .. math::
            B := \begin{bmatrix}
            a_{\sigma(0)} \\ a_{\sigma(1)} \\ \vdots \\ a_{\sigma(n-1)}
            \end{bmatrix}

        And the permutation of matrix columns is defined as:

        .. math::
            B := \begin{bmatrix}
            \alpha_{\sigma(0)} & \alpha_{\sigma(1)} &
            \cdots & \alpha_{\sigma(n-1)}
            \end{bmatrix}
        r   )ÚPermutationÚforwardsr’  Ú	backwardsÚbackwardÚcolumnsr”   )r’  r—  z?direction='{}' is an invalid kwarg. Try 'forward' or 'backward'rª   z:orientation='{}' is an invalid kwarg. Try 'rows' or 'cols'zB{} must be a list, a list of lists, or a SymPy permutation object.r“   c              3  ó8   •K  — | ]}d |cxk    o‰k    nc V — ŒdS ©r   Nr°   )rÃ   r  Ú	max_indexs     €rœ   rÅ   z%MatrixBase.permute.<locals>.<genexpr>	  s?   øè è € ÐDÐD¨1�1˜Ð&Ð&Ò&Ð&˜YÒ&Ð&Ð&Ð&ÐDÐDÐDÐDÐDÐDrŸ   z`swap` indices out of range.r/   )r^  N)Úsympy.combinatoricsr”  r  rþ   r  r   r+  r“   r”   r  r3   rÉ   rý   Úreversedre  ra  )r¢   r`  ÚorientationÚ	directionr”  r›  s        @rœ   ÚpermutezMatrixBase.permute•  s  ø€ ðB 	4Ð3Ð3Ð3Ð3Ð3ð ˜
Ò"Ð"Ø!ˆIØ˜Ò#Ð#Ø"ˆIØ˜)Ò#Ð#Ø ˆKàÐ3Ð3Ð3Ýð :ß:@º&ÀÑ:KÔ:KñMô Mð MàÐ.Ð.Ð.Ýð 3ß39²6¸+Ñ3FÔ3FñHô Hð Hõ ˜$ ­hÐ 7Ñ8Ô8ð 	?Ýð1ß17²¸±´ñ?ô ?ð ?ð
 "-°Ò!6Ð!6�D”I�I¸D¼Iˆ	ÝÐDÐDÐDÐDµ½¸T¹
¼
Ñ0CÔ0CÐDÑDÔDÑDÔDð 	=ÝÐ;Ñ<Ô<Ð<àð 	7�
 4¨Ñ5Ô5ð 	7Ý�t˜A”w¥Ñ)Ô)ð	7à˜IÒ%Ð%Ý�H T™NœNÑ+Ô+�Ø�;˜t¨)°A©+Ð6Ñ6Ô6ˆDˆDà�;˜t¨)°A©+Ð6Ñ6Ô6ˆDà˜&Ò Ð Ø×*Ò*¨4Ñ0Ô0Ð0Ø˜&Ò Ð Ø×*Ò*¨4Ñ0Ô0Ð0ð !Ð rŸ   c                ó2   — |                       |d|¬¦  «        S )z�Alias for
        ``self.permute(swaps, orientation='cols', direction=direction)``

        See Also
        ========

        permute
        r”   ©rž  rŸ  ©r   ©r¢   ÚswapsrŸ  s      rœ   Úpermute_colszMatrixBase.permute_cols	  ó   € ð �|Š|˜E¨vÀˆ|ÑKÔKÐKrŸ   c                ó2   — |                       |d|¬¦  «        S )z�Alias for
        ``self.permute(swaps, orientation='rows', direction=direction)``

        See Also
        ========

        permute
        r“   r¢  r£  r¤  s      rœ   Úpermute_rowszMatrixBase.permute_rows)	  r§  rŸ   c                ó4   ‡— |                       ˆfd„¦  «        S )a²  Apply refine to each element of the matrix.

        Examples
        ========

        >>> from sympy import Symbol, Matrix, Abs, sqrt, Q
        >>> x = Symbol('x')
        >>> Matrix([[Abs(x)**2, sqrt(x**2)],[sqrt(x**2), Abs(x)**2]])
        Matrix([
        [ Abs(x)**2, sqrt(x**2)],
        [sqrt(x**2),  Abs(x)**2]])
        >>> _.refine(Q.real(x))
        Matrix([
        [  x**2, Abs(x)],
        [Abs(x),   x**2]])

        c                ó$   •— t          | ‰¦  «        S r¹   r   )r  Úassumptionss    €rœ   rÍ  z#MatrixBase.refine.<locals>.<lambda>F	  s   ø€ ­¨q°+Ñ(>Ô(>€ rŸ   rX  )r¢   r¬  s    `rœ   r	   zMatrixBase.refine4	  s!   ø€ ð$ �~Š~Ð>Ð>Ð>Ð>Ñ?Ô?Ð?rŸ   c                ó”   ‡‡‡‡	— |||dœŠ	|r#i Šˆˆˆˆ	fd„}|                       |¦  «        }|‰fS |                       ˆˆˆ	fd„¦  «        S )a«  Replaces Function F in Matrix entries with Function G.

        Examples
        ========

        >>> from sympy import symbols, Function, Matrix
        >>> F, G = symbols('F, G', cls=Function)
        >>> M = Matrix(2, 2, lambda i, j: F(i+j)) ; M
        Matrix([
        [F(0), F(1)],
        [F(1), F(2)]])
        >>> N = M.replace(F,G)
        >>> N
        Matrix([
        [G(0), G(1)],
        [G(1), G(2)]])
        )ÚmapÚsimultaneousÚexactc                óV   •—  | j         ‰‰fi ‰¤Ž\  } }‰                     |¦  «         | S r¹   )ÚreplaceÚupdate)ÚeijÚdijÚFÚGÚdr›   s     €€€€rœ   Úfuncz MatrixBase.replace.<locals>.func_	  s6   ø€ Ø&˜3œ; q¨!Ð6Ð6¨vÐ6Ð6‘��SØ—’˜‘”�Ø�
rŸ   c                ó"   •—  | j         ‰‰fi ‰¤ŽS r¹   )r²  )r±   r¶  r·  r›   s    €€€rœ   rÍ  z$MatrixBase.replace.<locals>.<lambda>h	  s   ø€ ¨I¨A¬I°a¸Ð,EÐ,E¸fÐ,EÐ,E€ rŸ   rX  )
r¢   r¶  r·  r®  r¯  r°  r¹  rÓ   r¸  r›   s
    ``     @@rœ   r²  zMatrixBase.replaceH	  s�   øøøø€ ð$ ¨lÀUÐKÐKˆàð 	GàˆAðð ð ð ð ð ð ð ð
 —’˜tÑ$Ô$ˆAØ�a�4ˆKð —>’>Ð"EÐ"EÐ"EÐ"EÐ"EÐ"EÑFÔFÐFrŸ   r/   c                ó´   — |dz  }|dk    r| S |dk    r| ddd…dd…f         j         S |dk    r| ddd…ddd…f         S |dk    r| dd…ddd…f         j         S dS )a©  Rotates Matrix by 90 degrees

        Parameters
        ==========

        k : int
            Specifies how many times the matrix is rotated by 90 degrees
            (clockwise when positive, counter-clockwise when negative).

        Examples
        ========

        >>> from sympy import Matrix, symbols
        >>> A = Matrix(2, 2, symbols('a:d'))
        >>> A
        Matrix([
        [a, b],
        [c, d]])

        Rotating the matrix clockwise one time:

        >>> A.rot90(1)
        Matrix([
        [c, a],
        [d, b]])

        Rotating the matrix anticlockwise two times:

        >>> A.rot90(-2)
        Matrix([
        [d, c],
        [b, a]])
        é   r   r/   Nr�  rr  r�   ©ru  )r¢   r  Úmods      rœ   Úrot90zMatrixBase.rot90j	  s�   € ðF �‰cˆØ�!Š8ˆ8ØˆKØ�!Š8ˆ8Ø˜˜˜"˜˜b˜b˜b˜”>Ô#Ð#Ø�!Š8ˆ8Ø˜˜˜"˜˜d˜d ˜d˜
Ô#Ð#Ø�!Š8ˆ8Ø˜˜˜˜D˜D˜b˜D˜”>Ô#Ð#ð ˆ8rŸ   c                ó4   ‡— |                       ˆfd„¦  «        S )aO  Apply simplify to each element of the matrix.

        Examples
        ========

        >>> from sympy.abc import x, y
        >>> from sympy import SparseMatrix, sin, cos
        >>> SparseMatrix(1, 1, [x*sin(y)**2 + x*cos(y)**2])
        Matrix([[x*sin(y)**2 + x*cos(y)**2]])
        >>> _.simplify()
        Matrix([[x]])
        c                ó   •—  | j         di ‰¤ŽS rx  ©r  ©r  r›   s    €rœ   rÍ  z%MatrixBase.simplify.<locals>.<lambda>¤	  ó   ø€ ¨
¨¬
Ð(<Ð(<°VÐ(<Ð(<€ rŸ   rX  ©r¢   r›   s    `rœ   r  zMatrixBase.simplify—	  s!   ø€ ð �~Š~Ð<Ð<Ð<Ð<Ñ=Ô=Ð=rŸ   c                ó"  ‡‡— t          ‰¦  «        dk    rbt          ‰d         t          t          f¦  «        s@t	          ‰d         ¦  «        r+t          ‰d         ¦  «        st          ‰d         ¦  «        fŠ|                      ˆˆfd„¦  «        S )a[  Return a new matrix with subs applied to each entry.

        Examples
        ========

        >>> from sympy.abc import x, y
        >>> from sympy import SparseMatrix, Matrix
        >>> SparseMatrix(1, 1, [x])
        Matrix([[x]])
        >>> _.subs(x, y)
        Matrix([[y]])
        >>> Matrix(_).subs(y, x)
        Matrix([[x]])
        r/   r   c                ó   •—  | j         ‰i ‰¤ŽS r¹   )r~  ©r  rš   r›   s    €€rœ   rÍ  z!MatrixBase.subs.<locals>.<lambda>¹	  s   ø€ ¨¨¬°Ð(?¸Ð(?Ð(?€ rŸ   )rÊ   r  Údictr¶  Úiterr4   rÉ   rG  ©r¢   rš   r›   s    ``rœ   r~  zMatrixBase.subs¦	  s   øø€ õ  ˆt‰9Œ9˜Š>ˆ>¥:¨d°1¬g½½c°{Ñ#CÔ#Cˆ>ÍÈTÐRSÌWÉÌˆ>Õ^iÐjnÐopÔjqÑ^rÔ^rˆ>Ý˜˜aœ‘M”MÐ#ˆDà�~Š~Ð?Ð?Ð?Ð?Ð?Ñ@Ô@Ð@rŸ   c                óf   — | j         | j        k    rt          ¦   «         ‚|                      ¦   «         S )zú
        Returns the trace of a square matrix i.e. the sum of the
        diagonal elements.

        Examples
        ========

        >>> from sympy import Matrix
        >>> A = Matrix(2, 2, [1, 2, 3, 4])
        >>> A.trace()
        5

        )r“   r”   r@   ri  r«   s    rœ   ÚtracezMatrixBase.trace»	  s1   € ð Œ9˜œ	Ò!Ð!Ý&Ñ(Ô(Ð(Ø×ÒÑ!Ô!Ð!rŸ   c                ó*   — |                       ¦   «         S )aa  
        Returns the transpose of the matrix.

        Examples
        ========

        >>> from sympy import Matrix
        >>> A = Matrix(2, 2, [1, 2, 3, 4])
        >>> A.transpose()
        Matrix([
        [1, 3],
        [2, 4]])

        >>> from sympy import Matrix, I
        >>> m=Matrix(((1, 2+I), (3, 4)))
        >>> m
        Matrix([
        [1, 2 + I],
        [3,     4]])
        >>> m.transpose()
        Matrix([
        [    1, 3],
        [2 + I, 4]])
        >>> m.T == m.transpose()
        True

        See Also
        ========

        conjugate: By-element conjugation

        )rm  r«   s    rœ   rF  zMatrixBase.transposeÍ	  s   € ðB ×#Ò#Ñ%Ô%Ð%rŸ   c                ó*   — |                       ¦   «         S )zMatrix transposition)rF  r«   s    rœ   ru  zMatrixBase.Tð	  ó   € ð �~Š~ÑÔÐrŸ   c                ó*   — |                       ¦   «         S )zBy-element conjugationrV  r«   s    rœ   ÚCzMatrixBase.Cõ	  rÐ  rŸ   c                ó   —  | j         |i |¤ŽS )r}  r„  rË  s      rœ   rô   zMatrixBase.nú	  s   € àˆtŒz˜4Ð* 6Ð*Ð*Ð*rŸ   c                ó4   ‡— |                       ˆfd„¦  «        S )ak  Return a new matrix with xreplace applied to each entry.

        Examples
        ========

        >>> from sympy.abc import x, y
        >>> from sympy import SparseMatrix, Matrix
        >>> SparseMatrix(1, 1, [x])
        Matrix([[x]])
        >>> _.xreplace({x: y})
        Matrix([[y]])
        >>> Matrix(_).xreplace({y: x})
        Matrix([[x]])
        c                ó.   •— |                       ‰¦  «        S r¹   )Úxreplace)r  Úrules    €rœ   rÍ  z%MatrixBase.xreplace.<locals>.<lambda>
  s   ø€ ¨¯
ª
°4Ñ(8Ô(8€ rŸ   rX  )r¢   r×  s    `rœ   rÖ  zMatrixBase.xreplaceþ	  s!   ø€ ð �~Š~Ð8Ð8Ð8Ð8Ñ9Ô9Ð9rŸ   c                ó4   ‡— |                       ˆfd„¦  «        S )Nc                ó   •—  | j         di ‰¤ŽS rx  rÂ  rÃ  s    €rœ   rÍ  z+MatrixBase._eval_simplify.<locals>.<lambda>
  rÄ  rŸ   rX  rÅ  s    `rœ   Ú_eval_simplifyzMatrixBase._eval_simplify
  s!   ø€ ð �~Š~Ð<Ð<Ð<Ð<Ñ=Ô=Ð=rŸ   c                óD   ‡‡— ddl mŠ |                      ˆˆfd„¦  «        S )Nr   )Útrigsimpc                ó   •—  ‰| fi ‰¤ŽS r¹   r°   )r  ÚoptsrÜ  s    €€rœ   rÍ  z+MatrixBase._eval_trigsimp.<locals>.<lambda>
  s   ø€ ¨¨°Ð(;Ð(;°dÐ(;Ð(;€ rŸ   )Úsympy.simplify.trigsimprÜ  rG  )r¢   rÞ  rÜ  s    `@rœ   Ú_eval_trigsimpzMatrixBase._eval_trigsimp
  s5   øø€ Ø4Ð4Ð4Ð4Ð4Ð4Ø�~Š~Ð;Ð;Ð;Ð;Ð;Ñ<Ô<Ð<rŸ   c                óT   ‡ ‡— ˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )a¬  Return the elements on and above the kth diagonal of a matrix.
        If k is not specified then simply returns upper-triangular portion
        of a matrix

        Examples
        ========

        >>> from sympy import ones
        >>> A = ones(4)
        >>> A.upper_triangular()
        Matrix([
        [1, 1, 1, 1],
        [0, 1, 1, 1],
        [0, 0, 1, 1],
        [0, 0, 0, 1]])

        >>> A.upper_triangular(2)
        Matrix([
        [0, 0, 1, 1],
        [0, 0, 0, 1],
        [0, 0, 0, 0],
        [0, 0, 0, 0]])

        >>> A.upper_triangular(-1)
        Matrix([
        [1, 1, 1, 1],
        [1, 1, 1, 1],
        [0, 1, 1, 1],
        [0, 0, 1, 1]])

        c                ó8   •— | ‰z   |k    r
‰| |f         n‰j         S r¹   ©rê   ©r±   r²   r  r¢   s     €€rœ   r´   z*MatrixBase.upper_triangular.<locals>.entry9
  ó#   ø€ Ø!" Q¡¨!¢ �4˜˜1˜”:�:°´Ð:rŸ   rµ   ©r¢   r  r´   s   `` rœ   Úupper_triangularzMatrixBase.upper_triangular
  ó?   øø€ ðB	;ð 	;ð 	;ð 	;ð 	;ð 	;ð �yŠy˜œ D¤I¨uÑ5Ô5Ð5rŸ   c                óT   ‡ ‡— ˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )a¬  Return the elements on and below the kth diagonal of a matrix.
        If k is not specified then simply returns lower-triangular portion
        of a matrix

        Examples
        ========

        >>> from sympy import ones
        >>> A = ones(4)
        >>> A.lower_triangular()
        Matrix([
        [1, 0, 0, 0],
        [1, 1, 0, 0],
        [1, 1, 1, 0],
        [1, 1, 1, 1]])

        >>> A.lower_triangular(-2)
        Matrix([
        [0, 0, 0, 0],
        [0, 0, 0, 0],
        [1, 0, 0, 0],
        [1, 1, 0, 0]])

        >>> A.lower_triangular(1)
        Matrix([
        [1, 1, 0, 0],
        [1, 1, 1, 0],
        [1, 1, 1, 1],
        [1, 1, 1, 1]])

        c                ó8   •— | ‰z   |k    r
‰| |f         n‰j         S r¹   rã  rä  s     €€rœ   r´   z*MatrixBase.lower_triangular.<locals>.entry_
  rå  rŸ   rµ   ræ  s   `` rœ   Úlower_triangularzMatrixBase.lower_triangular>
  rè  rŸ   c                óL   ‡ — ‰                       ‰ j        ‰ j        ˆ fd„¦  «        S )Nc                ó2   •— t          ‰| |f         ¦  «        S r¹   )r   rl  s     €rœ   rÍ  z&MatrixBase._eval_Abs.<locals>.<lambda>e
  s   ø€ ½CÀÀQÈÀTÄ
¹O¼O€ rŸ   rµ   r«   s   `rœ   Ú	_eval_AbszMatrixBase._eval_Absd
  s'   ø€ Ø�yŠy˜œ D¤IÐ/KÐ/KÐ/KÐ/KÑLÔLÐLrŸ   c                óP   ‡ ‡— ‰                       ‰ j        ‰ j        ˆˆ fd„¦  «        S )Nc                ó.   •— ‰| |f         ‰| |f         z   S r¹   r°   ©r±   r²   r£   r¢   s     €€rœ   rÍ  z&MatrixBase._eval_add.<locals>.<lambda>i
  s   ø€  d¨1¨a¨4¤j°5¸¸A¸´;Ñ&>€ rŸ   rµ   r¡   s   ``rœ   Ú	_eval_addzMatrixBase._eval_addg
  s4   øø€ Ø�yŠy˜œ D¤IØ>Ð>Ð>Ð>Ð>ñ@ô @ð 	@rŸ   c                óT   ‡ ‡— ˆˆ fd„}‰                       ‰ j        ‰j        |¦  «        S )Nc                ó²   •‡ ‡— ˆ ˆˆˆfd„t          ‰j        ¦  «        D ¦   «         }	 t          |Ž S # t          t          f$ r t          d„ |¦  «        cY S w xY w)Nc                ó:   •— g | ]}‰‰|f         ‰|‰f         z  ‘ŒS r°   r°   ©rÃ   r  r±   r²   r£   r¢   s     €€€€rœ   rÈ   z>MatrixBase._eval_matrix_mul.<locals>.entry.<locals>.<listcomp>m
  s.   ø€ ÐBÐBÐB¨A�4˜˜!˜”9˜U 1 Q 3œZÑ'ÐBÐBÐBrŸ   c                ó   — | |z   S r¹   r°   )rÁ  Úbs     rœ   rÍ  z<MatrixBase._eval_matrix_mul.<locals>.entry.<locals>.<lambda>t
  s
   € ¨1¨q©5€ rŸ   )rÐ   r”   r   r  r
   r   )r±   r²   rI  r£   r¢   s   `` €€rœ   r´   z*MatrixBase._eval_matrix_mul.<locals>.entryl
  s|   øøø€ ØBÐBÐBÐBÐBÐBÐBµ°t´yÑ1AÔ1AÐBÑBÔBˆCð7Ý˜C�yÐ øÝ�|Ð,ð 7ð 7ð 7õ Ð0Ð0°#Ñ6Ô6Ð6Ð6Ð6ð	7øøøs   ¨1 ±"AÁArµ   ©r¢   r£   r´   s   `` rœ   Ú_eval_matrix_mulzMatrixBase._eval_matrix_mulk
  s>   øø€ ð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð �yŠy˜œ E¤J°Ñ6Ô6Ð6rŸ   c                óP   ‡ ‡— ‰                       ‰ j        ‰ j        ˆˆ fd„¦  «        S )Nc                ó.   •— ‰| |f         ‰| |f         z  S r¹   r°   rñ  s     €€rœ   rÍ  z9MatrixBase._eval_matrix_mul_elementwise.<locals>.<lambda>y
  s   ø€ ¸DÀÀ1À¼IÀeÈAÈaÈCÄjÑ<P€ rŸ   rµ   r¡   s   ``rœ   Ú_eval_matrix_mul_elementwisez'MatrixBase._eval_matrix_mul_elementwisex
  s+   øø€ Ø�yŠy˜œ D¤IÐ/PÐ/PÐ/PÐ/PÐ/PÑQÔQÐQrŸ   c                óT   ‡ ‡— ˆˆ fd„}‰                       ‰j        ‰ j        |¦  «        S )Nc                óh   •‡ ‡— t          ˆ ˆˆˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        S )Nc              3  óB   •K  — | ]}‰‰|f         ‰|‰f         z  V — Œd S r¹   r°   rö  s     €€€€rœ   rÅ   z>MatrixBase._eval_matrix_rmul.<locals>.entry.<locals>.<genexpr>}
  s8   øè è € ÐGÐG°�u˜Q˜q˜S”z $ q¨ s¤)Ñ+ÐGÐGÐGÐGÐGÐGrŸ   )rh  rÐ   r”   rñ  s   ``€€rœ   r´   z+MatrixBase._eval_matrix_rmul.<locals>.entry|
  s;   øøø€ ÝÐGÐGÐGÐGÐGÐGÐGµU¸5¼:Ñ5FÔ5FÐGÑGÔGÑGÔGÐGrŸ   rµ   rù  s   `` rœ   Ú_eval_matrix_rmulzMatrixBase._eval_matrix_rmul{
  sB   øø€ ð	Hð 	Hð 	Hð 	Hð 	Hð 	Hà�yŠy˜œ T¤Y°Ñ6Ô6Ð6rŸ   c                ó¸   — |dk    r| S |dz  dk    r| |                       |dz
  ¦  «        }}n|                       |dz  ¦  «        x}}|                     |¦  «        S )Nr/   rr  )Ú_eval_pow_by_recursionÚmultiply)r¢   ÚnumrÁ  rø  s       rœ   r  z!MatrixBase._eval_pow_by_recursion€
  sf   € Ø�!Š8ˆ8ØˆKà�‰7�aŠ<ˆ<Ø˜×4Ò4°S¸1±WÑ=Ô=ˆqˆAˆAà×/Ò/°°q±Ñ9Ô9Ð9ˆA�à�zŠz˜!‰}Œ}ÐrŸ   c                óD  — ddl m} | j        d         }|                      ¦   «         }|                      ¦   «         dd …         } |||¦  «        }|                      |¦  «        }|                      |¦  «        }t          |¦  «        D ]}|||         |z  z  }|| z  }Œ|S )Nr   )Úlinrec_coeffsr/   )Úsympy.discrete.recurrencesr  r¬   Úcharpolyr¢  r’  rš  rÐ   )	r¢   r&   r  rÛ   Úprž  Únew_matÚansr±   s	            rœ   Ú_eval_pow_by_cayleyzMatrixBase._eval_pow_by_cayley‹
  s­   € Ø<Ð<Ð<Ð<Ð<Ð<ØŒj˜ŒmˆØ�MŠM‰OŒOˆà�"—’Ñ"Ô" 1 2 2Ô&ˆØ�˜v sÑ+Ô+ˆØ—(’(˜3‘-”-ˆØ�jŠj˜‰oŒoˆå�s‘”ð 	ð 	ˆAØ�6˜!”9˜WÑ$Ñ$ˆCØ�t‰OˆGˆGàˆ
rŸ   c                óæ  — |€dgt          | ¦  «        z  }|dk    r| S |dz  dk    r| |                      |dz
  |¬¦  «        }}n|                      |dz  |¬¦  «        x}}|                     |d¬¦  «        }t          |¦  «        }d g|z  }t          |¦  «        D ]6}||         r!t	          ||         d¬¦  «        \  ||<   ||<   Œ+||         ||<   Œ7|                     |j        |j        |¦  «        S )NTr/   rr  )ÚprevsimpF©Údotprodsimp)Úwithsimp)rÊ   Ú"_eval_pow_by_recursion_dotprodsimpr  rÐ   r0   r�   r“   r”   )	r¢   r  r  rÁ  rø  rŒ  ÚlenmÚelemsr±   s	            rœ   r  z-MatrixBase._eval_pow_by_recursion_dotprodsimp›
  s'  € ØÐØ�v�c $™iœiÑ'ˆHà�!Š8ˆ8ØˆKà�‰7�aŠ<ˆ<Ø˜×@Ò@ÀÀqÁØ%ð Añ 'ô 'ˆqˆAˆAð ×;Ò;¸CÀ1¹HØ%ð <ñ 'ô 'ð 'ˆA�ð —
’
˜1¨%�
Ñ0Ô0ˆÝ�A‘”ˆØ��t‘ˆå�t‘”ð 	 ð 	 ˆAØ˜Œ{ð  Ý(4°Q°q´TÀDÐ(IÑ(IÔ(IÑ%��a‘˜( 1™+˜+à˜Qœ4��a‘�à�vŠv�a”f˜aœf eÑ,Ô,Ð,rŸ   c                óP   ‡ ‡— ‰                       ‰ j        ‰ j        ˆˆ fd„¦  «        S )Nc                ó   •— ‰| |f         ‰z  S r¹   r°   rñ  s     €€rœ   rÍ  z-MatrixBase._eval_scalar_mul.<locals>.<lambda>¶
  s   ø€ ¸DÀÀ1À¼IÀe¹O€ rŸ   rµ   r¡   s   ``rœ   Ú_eval_scalar_mulzMatrixBase._eval_scalar_mulµ
  ó+   øø€ Ø�yŠy˜œ D¤IÐ/KÐ/KÐ/KÐ/KÐ/KÑLÔLÐLrŸ   c                óP   ‡ ‡— ‰                       ‰ j        ‰ j        ˆˆ fd„¦  «        S )Nc                ó   •— ‰‰| |f         z  S r¹   r°   rñ  s     €€rœ   rÍ  z.MatrixBase._eval_scalar_rmul.<locals>.<lambda>¹
  s   ø€ ¸EÀ$ÀqÈÀsÄ)¹O€ rŸ   rµ   r¡   s   ``rœ   Ú_eval_scalar_rmulzMatrixBase._eval_scalar_rmul¸
  r  rŸ   c                óP   ‡ ‡— ‰                       ‰ j        ‰ j        ˆˆ fd„¦  «        S )Nc                ó4   •— t          ‰| |f         ‰¦  «        S r¹   r   rñ  s     €€rœ   rÍ  z&MatrixBase._eval_Mod.<locals>.<lambda>¼
  s   ø€ ½CÀÀQÈÀTÄ
ÈEÑ<RÔ<R€ rŸ   rµ   r¡   s   ``rœ   Ú	_eval_ModzMatrixBase._eval_Mod»
  s+   øø€ Ø�yŠy˜œ D¤IÐ/RÐ/RÐ/RÐ/RÐ/RÑSÔSÐSrŸ   c                ó*   — |                       ¦   «         S )z5Returns a new matrix with entry-wise absolute values.)rî  r«   s    rœ   Ú__abs__zMatrixBase.__abs__¿
  s   € à�~Š~ÑÔÐrŸ   Ú__radd__c                ó  — t          | |¦  «        \  }}|dk    rt          S | j        |j        k    r t          d| j        › d|j        › d�¦  «        ‚| |}}|j        t          ||¦  «        k    r||}}|                     |¦  «        S )z?Return self + other, raising ShapeError if shapes do not match.Ú	is_matrixúMatrix size mismatch: z + ú.)Ú_coerce_operandÚNotImplementedr¬   r?   Ú	__class__r¿   rò  )r¢   r£   ru  rÁ  rø  s        rœ   Ú__add__zMatrixBase.__add__Ã
  s–   € õ # 4¨Ñ/Ô/‰ˆˆqà�ÒÐÝ!Ð!àŒ:˜œÒ$Ð$ÝÐS°d´jÐSÐSÀUÄ[ÐSÐSÐSÑTÔTÐTð �Uˆ1ˆØŒ;�' ! Q™-œ-Ò'Ð'Ø�aˆqˆAà�{Š{˜1‰~Œ~ÐrŸ   Ú__rtruediv__c                ó   — | | j         |z  z  S r¹   rk  r¡   s     rœ   Ú__truediv__zMatrixBase.__truediv__Ö
  s   € à�t”x %Ñ'Ñ(Ð(rŸ   Ú__rmatmul__c                ón   — t          | |¦  «        \  } }}|dk    rt          S |                      |¦  «        S ©Nr$  )Ú_unify_with_otherr(  Ú__mul__©r¢   r£   ru  s      rœ   Ú
__matmul__zMatrixBase.__matmul__Ú
  s:   € å*¨4°Ñ7Ô7‰ˆˆe�Qà�ÒÐÝ!Ð!à�|Š|˜EÑ"Ô"Ð"rŸ   c                ó4   ‡— |                       ˆfd„¦  «        S )Nc                ó   •— | ‰z  S r¹   r°   )r  r£   s    €rœ   rÍ  z$MatrixBase.__mod__.<locals>.<lambda>ä
  s   ø€ ¨¨E©	€ rŸ   rX  r¡   s    `rœ   Ú__mod__zMatrixBase.__mod__ã
  s   ø€ Ø�~Š~Ð1Ð1Ð1Ð1Ñ2Ô2Ð2rŸ   Ú__rmul__c                ó,   — |                       |¦  «        S )av  Return self*other where other is either a scalar or a matrix
        of compatible dimensions.

        Examples
        ========

        >>> from sympy import Matrix
        >>> A = Matrix([[1, 2, 3], [4, 5, 6]])
        >>> 2*A == A*2 == Matrix([[2, 4, 6], [8, 10, 12]])
        True
        >>> B = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        >>> A*B
        Matrix([
        [30, 36, 42],
        [66, 81, 96]])
        >>> B*A
        Traceback (most recent call last):
        ...
        ShapeError: Matrices size mismatch.
        >>>

        See Also
        ========

        matrix_multiply_elementwise
        )r  r¡   s     rœ   r2  zMatrixBase.__mul__æ
  s   € ð: �}Š}˜UÑ#Ô#Ð#rŸ   c                óÊ  — t          d|¦  «        }t          | |¦  «        \  } }}|dk    r-	 |                      |¦  «        S # t          $ r
 t          cY S w xY w|dk    r€| j        d         |j        d         k    r t          d| j        › d|j        › d�¦  «        ‚|                      |¦  «        }|r+|                     |j	        |j
        d	„ |D ¦   «         ¦  «        }|S t          S )
a\  Same as __mul__() but with optional simplification.

        Parameters
        ==========

        dotprodsimp : bool, optional
            Specifies whether intermediate term algebraic simplification is used
            during matrix multiplications to control expression blowup and thus
            speed up calculation. Default is off.
        FÚpossible_scalarr$  r/   r   r%  z * r&  c                ó,   — g | ]}t          |¦  «        ‘ŒS r°   ©r0   ©rÃ   Úes     rœ   rÈ   z'MatrixBase.multiply.<locals>.<listcomp>#  s   € Ð+GÐ+GÐ+GÀ­L¸©O¬OÐ+GÐ+GÐ+GrŸ   )r<   r1  r  r  r(  r¬   r?   rú  r�   r“   r”   ©r¢   r£   r  Ú	isimpboolru  rŒ  s         rœ   r  zMatrixBase.multiply  s  € õ 0°°{ÑCÔCˆ	å*¨4°Ñ7Ô7‰ˆˆe�QàÐ!Ò!Ð!ð&Ø×,Ò,¨UÑ3Ô3Ð3øÝð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøð �+ÒÐàŒz˜!Œ} ¤¨A¤Ò.Ð.Ý Ð!W¸$¼*Ð!WÐ!WÈÌÐ!WÐ!WÐ!WÑXÔXÐXà×%Ò% eÑ,Ô,ˆAàð IØ—F’F˜1œ6 1¤6Ð+GÐ+GÀQÐ+GÑ+GÔ+GÑHÔH�àˆHõ "Ð!ó   ¬A ÁAÁAc                ó¦   — | j         |j         k    r-t          d                     | j         |j         ¦  «        ¦  «        ‚|                      |¦  «        S )aó  Return the Hadamard product (elementwise product) of A and B

        Examples
        ========

        >>> from sympy import Matrix
        >>> A = Matrix([[0, 1, 2], [3, 4, 5]])
        >>> B = Matrix([[1, 10, 100], [100, 10, 1]])
        >>> A.multiply_elementwise(B)
        Matrix([
        [  0, 10, 200],
        [300, 40,   5]])

        See Also
        ========

        sympy.matrices.matrixbase.MatrixBase.cross
        sympy.matrices.matrixbase.MatrixBase.dot
        multiply
        z!Matrix shapes must agree {} != {})r¬   r?   rþ   rý  r¡   s     rœ   Úmultiply_elementwisezMatrixBase.multiply_elementwise*  sL   € ð* Œ:˜œÒ$Ð$ÝÐ@×GÒGÈÌ
ÐTYÔT_Ñ`Ô`ÑaÔaÐaà×0Ò0°Ñ7Ô7Ð7rŸ   c                ó,   — |                       d¦  «        S )Nr�  )r  r«   s    rœ   Ú__neg__zMatrixBase.__neg__D  s   € Ø×$Ò$ RÑ(Ô(Ð(rŸ   Ú__rpow__c                ó,   — |                       |¦  «        S )z$Return self**exp a scalar or symbol.)Úpow)r¢   r&   s     rœ   Ú__pow__zMatrixBase.__pow__G  s   € ð �xŠx˜‰}Œ}ÐrŸ   c                ó®  ‡‡— |�|dvrt          d¦  «        ‚| j        | j        k    rt          ¦   «         ‚| Št	          ‰dd¦  «        }t          ‰¦  «        Š‰j        r"‰                     ‰j        ‰j        d„ ¦  «        S ‰dk    r‰S t	          ‰dd¦  «        }|�/ |¦   «         r%‰                     ‰j        ‰j        ˆˆfd„¦  «        S ‰j        rQ‰dz  d	k    rH‰j        dk    r ‰                     ‰d	         ‰z  gg¦  «        S ‰d	k     r‰ Š‰ 	                    ¦   «         Š|d
k    r$	  |‰¦  «        S # t          $ r |d
k    r‚ Y �nKw xY w|dk    r4‰j        r	‰dz  d	k    rt          d¦  «        ‚‰                     ‰¦  «        S |dk    r4‰j        r	‰dz  d	k    rt          d¦  «        ‚‰                     ‰¦  «        S |dk    r4‰j        r	‰dz  d	k    rt          d¦  «        ‚‰                     ‰¦  «        S |€—‰j        r�‰dz  d	k    r‡‰j        rt!          ‰¦  «        Š‰j        dk    r‰dk    r |‰¦  «        S t#          dd¦  «        r‰                     ‰¦  «        S ‰dk    r‰                     ‰¦  «        S ‰                     ‰¦  «        S |r/	  |‰¦  «        S # t$          $ r ‰j        du s	‰j        du r‚ Y nw xY wd	dlm}  |‰‰¦  «        S )aÛ  Return self**exp a scalar or symbol.

        Parameters
        ==========

        method : multiply, mulsimp, jordan, cayley
            If multiply then it returns exponentiation using recursion.
            If jordan then Jordan form exponentiation will be used.
            If cayley then the exponentiation is done using Cayley-Hamilton
            theorem.
            If mulsimp then the exponentiation is done using recursion
            with dotprodsimp. This specifies whether intermediate term
            algebraic simplification is used during naive matrix power to
            control expression blowup and thus speed up calculation.
            If None, then it heuristically decides which method to use.

        N)r  ÚmulsimpÚjordanÚcayleyzNo such methodÚ_matrix_pow_by_jordan_blocksc                ó(   — t          | |k    ¦  «        S r¹   )r’   )r±   r²   s     rœ   rÍ  z MatrixBase.pow.<locals>.<lambda>j  s   € µs¸1Àº6±{´{€ rŸ   r/   r  c                ó.   •— | |k    r‰| |f         ‰z  ndS )Nr   r°   )r±   r²   rÁ  r&   s     €€rœ   rÍ  z MatrixBase.pow.<locals>.<lambda>p  s    ø€ ÀaÈ1ÂfÀf°q¸¸1¸´v¸s±{°{ÐRS€ rŸ   r   rM  rN  z.cayley method is only valid for integer powersrL  z/mulsimp method is only valid for integer powersr  z0multiply method is only valid for integer powersrr  i † Ti'  F)ÚMatPow)r  r“   r”   r@   Úgetattrr   rÊ  r�   Ú	is_NumberÚinvr>   r+  r  r  r  Úis_Floatr   r<   rA   Ú
is_integerr  Úsympy.matrices.expressionsrR  )r¢   r&   ÚmethodÚ
jordan_powrø   rR  rÁ  s    `    @rœ   rI  zMatrixBase.powN  s‡  øø€ ð& Ð &Ð0[Ð"[Ð"[ÝÐ,Ñ-Ô-Ð-ØŒ9˜œ	Ò!Ð!Ý&Ñ(Ô(Ð(ØˆÝ˜QÐ >ÀÑEÔEˆ
Ý�c‰lŒlˆàŒ;ð 	DØ—6’6˜!œ& !¤&Ð*BÐ*BÑCÔCÐCØ�!Š8ˆ8ØˆHå˜1˜m¨TÑ2Ô2ˆØÐ H H¡J¤JÐØ—6’6˜!œ& !¤&Ð*SÐ*SÐ*SÐ*SÐ*SÑTÔTÐTàŒ=ð 	˜S 1™W¨š\˜\ØŒv˜Š{ˆ{Ø—v’v  !¤ c¡	˜{˜mÑ,Ô,Ð,Ø�QŠwˆwØ�d�Ø—E’E‘G”G�ð �XÒÐðØ!�z #‘”Ð&øÝð ð ð Ø˜XÒ%Ð%Øð &Ñ%ðøøøð �xÒÐØ”=ð S C¨!¡G¨q¢L LÝ Ð!QÑRÔRÐRØ×(Ò(¨Ñ-Ô-Ð-à�yÒ Ð Ø”=ð T C¨!¡G¨q¢L LÝ Ð!RÑSÔSÐSØ×7Ò7¸Ñ<Ô<Ð<à�zÒ!Ð!Ø”=ð U C¨!¡G¨q¢L LÝ Ð!SÑTÔTÐTØ×+Ò+¨CÑ0Ô0Ð0àˆ^ ¤ˆ^°#¸±'¸Q²,°,ØŒ|ð #Ý˜c‘l”l�àŒv˜Š{ˆ{˜s Vš|˜|Ø!�z #‘”Ð&Ý,¨T°4Ñ8Ô8ð 5Ø×;Ò;¸CÑ@Ô@Ð@Ø�u’�Ø×,Ò,¨SÑ1Ô1Ð1à×/Ò/°Ñ4Ô4Ð4àð 		ðØ!�z #‘”Ð&øÝ+ð ð ð ð
 ”> UÐ*Ð*¨cÔ.@ÀEÐ.IÐ.IØð /JÐ.Iðøøøð 	6Ð5Ð5Ð5Ð5Ð5Øˆv�a˜‰~Œ~Ðs$   Ä*
D5 Ä5E
Å	E
Ê
J" Ê"KËKr*  c                ó,   — |                       |¦  «        S r¹   )r*  r¡   s     rœ   r"  zMatrixBase.__radd__¬  s   € à�|Š|˜EÑ"Ô"Ð"rŸ   r4  c                ón   — t          | |¦  «        \  } }}|dk    rt          S |                      |¦  «        S r0  )r1  r(  r8  r3  s      rœ   r.  zMatrixBase.__rmatmul__°  s:   € å*¨4°Ñ7Ô7‰ˆˆe�Qà�ÒÐÝ!Ð!à�}Š}˜UÑ#Ô#Ð#rŸ   r2  c                ó,   — |                       |¦  «        S r¹   )Ú	rmultiplyr¡   s     rœ   r8  zMatrixBase.__rmul__¹  s   € à�~Š~˜eÑ$Ô$Ð$rŸ   c                ó¨  — t          d|¦  «        }t          | |¦  «        \  } }}|dk    r-	 |                      |¦  «        S # t          $ r
 t          cY S w xY w|dk    ro| j        d         |j        d         k    rt          d¦  «        ‚|                      |¦  «        }|r+|                     |j	        |j
        d„ |D ¦   «         ¦  «        S |S t          S )a]  Same as __rmul__() but with optional simplification.

        Parameters
        ==========

        dotprodsimp : bool, optional
            Specifies whether intermediate term algebraic simplification is used
            during matrix multiplications to control expression blowup and thus
            speed up calculation. Default is off.
        Fr;  r$  r   r/   zMatrix size mismatch.c                ó,   — g | ]}t          |¦  «        ‘ŒS r°   r=  r>  s     rœ   rÈ   z(MatrixBase.rmultiply.<locals>.<listcomp>Ø  s   € Ð.JÐ.JÐ.JÀ1­|¸A©¬Ð.JÐ.JÐ.JrŸ   )r<   r1  r  r  r(  r¬   r?   r  r�   r“   r”   r@  s         rœ   r^  zMatrixBase.rmultiply½  sù   € õ 0°°{ÑCÔCˆ	Ý*¨4°Ñ7Ô7‰ˆˆe�QàÐ!Ò!Ð!ð&Ø×-Ò-¨eÑ4Ô4Ð4øÝð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøð �+ÒÐØŒz˜!Œ} ¤¨A¤Ò.Ð.Ý Ð!8Ñ9Ô9Ð9à×&Ò& uÑ-Ô-ˆAàð LØ—v’v˜aœf a¤fÐ.JÐ.JÈÐ.JÑ.JÔ.JÑKÔKÐKàˆHõ "Ð!rB  Ú__sub__c                ó   — |  |z   S r¹   r°   ©r¢   rÁ  s     rœ   Ú__rsub__zMatrixBase.__rsub__ß  s   € à�˜‰{ÐrŸ   rd  c                ó   — | | z   S r¹   r°   rc  s     rœ   ra  zMatrixBase.__sub__ã  s   € à˜�r‰{ÐrŸ   c                ó$   — t          | |¬¦  «        S ©N)Ú
iszerofunc©rL   ©r¢   rh  s     rœ   Ú_eval_det_bareisszMatrixBase._eval_det_bareissç  s   € Ý˜D¨ZÐ8Ñ8Ô8Ð8rŸ   c                ó    — t          | ¦  «        S r¹   )rM   r«   s    rœ   Ú_eval_det_berkowitzzMatrixBase._eval_det_berkowitzê  s   € Ý˜dÑ#Ô#Ð#rŸ   c                ó&   — t          | ||¬¦  «        S )N)rh  rÌ  )rP   )r¢   rh  rÌ  s      rœ   Ú_eval_det_luzMatrixBase._eval_det_luí  s   € Ý�t¨
¸XÐFÑFÔFÐFrŸ   c                ó    — t          | ¦  «        S r¹   )rN   r«   s    rœ   Ú_eval_det_birdzMatrixBase._eval_det_birdð  s   € Ý˜‰ŒÐrŸ   c                ó    — t          | ¦  «        S r¹   )rO   r«   s    rœ   Ú_eval_det_laplacezMatrixBase._eval_det_laplaceó  ó   € Ý˜DÑ!Ô!Ð!rŸ   c                ó    — t          | ¦  «        S r¹   ©rK   r«   s    rœ   Ú_eval_determinantzMatrixBase._eval_determinantö  ó   € Ý�D‰zŒzÐrŸ   Ú	berkowitzc                ó$   — t          | |¬¦  «        S ©N©rY  )rF   ©r¢   rY  s     rœ   ÚadjugatezMatrixBase.adjugateù  s   € Ý˜ fÐ-Ñ-Ô-Ð-rŸ   Úlambdac                ó&   — t          | ||¬¦  «        S )N)r  r  )rG   ©r¢   r  r  s      rœ   r	  zMatrixBase.charpolyü  s   € Ý˜ ¨XÐ6Ñ6Ô6Ð6rŸ   c                ó(   — t          | |||¬¦  «        S r{  )rH   ©r¢   r±   r²   rY  s       rœ   ÚcofactorzMatrixBase.cofactorÿ  s   € Ý˜˜q !¨FÐ3Ñ3Ô3Ð3rŸ   c                ó$   — t          | |¬¦  «        S r{  )rI   r}  s     rœ   Úcofactor_matrixzMatrixBase.cofactor_matrix  s   € Ý ¨VÐ4Ñ4Ô4Ð4rŸ   Úbareissc                ó&   — t          | ||¬¦  «        S )N)rY  rh  rv  )r¢   rY  rh  s      rœ   ÚdetzMatrixBase.det  s   € Ý�D °JÐ?Ñ?Ô?Ð?rŸ   c                ó    — t          | ¦  «        S r¹   )rJ   r«   s    rœ   ÚperzMatrixBase.per  rx  rŸ   c                ó(   — t          | |||¬¦  «        S r{  )rQ   rƒ  s       rœ   ÚminorzMatrixBase.minor  s   € Ý�d˜A˜q¨Ð0Ñ0Ô0Ð0rŸ   c                ó$   — t          | ||¦  «        S r¹   )rR   r¯  s      rœ   Úminor_submatrixzMatrixBase.minor_submatrix  s   € Ý  a¨Ñ+Ô+Ð+rŸ   c                ó(   — t          | |||¬¦  «        S )N)rh  r  Úwith_pivots)rT   )r¢   rh  r  r‘  s       rœ   Úechelon_formzMatrixBase.echelon_form"  s"   € Ý˜T¨jÀ8Ø'ð)ñ )ô )ð 	)rŸ   c                ó    — t          | ¦  «        S r¹   )rS   r«   s    rœ   Ú
is_echelonzMatrixBase.is_echelon&  s   € å˜4Ñ Ô Ð rŸ   c                ó&   — t          | ||¬¦  «        S ©N)rh  r  )rU   ©r¢   rh  r  s      rœ   ÚrankzMatrixBase.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)rV   r&  r’  r“   r”   )r¢   Úrhsr6  rõ   s       rœ   Úrref_rhszMatrixBase.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Ÿ   c                ó*   — t          | ||||¬¦  «        S )N)rh  r  ÚpivotsÚnormalize_last)rV   )r¢   rh  r  r�  rž  s        rœ   ÚrrefzMatrixBase.rrefA  s$   € å�T j¸8Ø¨.ð:ñ :ô :ð 	:rŸ   r³   c                óô  — |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¢  rr  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)r+  rþ   r”   r“   Ú
differencerÊ   Úrepr)	r¢   Úopr³   r  Úcol1Úcol2Ú	error_strÚ	self_colsr”   s	            rœ   Ú_normalize_op_argszMatrixBase._normalize_op_argsK  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¹   r°   )r±   r²   r³   r  r¢   s     €€€rœ   r´   z<MatrixBase._eval_col_op_multiply_col_by_const.<locals>.entryƒ  ó,   ø€ Ø�CŠxˆxØ˜4  1 œ:‘~Ð%Ø˜˜1˜”:ÐrŸ   rµ   )r¢   r³   r  r´   s   ``` rœ   Ú"_eval_col_op_multiply_col_by_constz-MatrixBase._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¹   r°   )r±   r²   r§  r¨  r¢   s     €€€rœ   r´   z+MatrixBase._eval_col_op_swap.<locals>.entryŠ  s?   ø€ Ø�DŠyˆyØ˜A˜t˜G”}Ð$Ø�d’�Ø˜A˜t˜G”}Ð$Ø˜˜1˜”:ÐrŸ   rµ   )r¢   r§  r¨  r´   s   ``` rœ   Ú_eval_col_op_swapzMatrixBase._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¹   r°   )r±   r²   r³   r¨  r  r¢   s     €€€€rœ   r´   z@MatrixBase._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µ   )r¢   r³   r  r¨  r´   s   ```` rœ   Ú&_eval_col_op_add_multiple_to_other_colz1MatrixBase._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¹   r°   )r±   r²   Úrow1Úrow2r¢   s     €€€rœ   r´   z+MatrixBase._eval_row_op_swap.<locals>.entryš  s?   ø€ Ø�DŠyˆyØ˜D !˜G”}Ð$Ø�d’�Ø˜D !˜G”}Ð$Ø˜˜1˜”:ÐrŸ   rµ   )r¢   r»  r¼  r´   s   ``` rœ   Ú_eval_row_op_swapzMatrixBase._eval_row_op_swap™  r´  rŸ   c                óX   ‡ ‡‡— ˆˆˆ fd„}‰                       ‰ j        ‰ j        |¦  «        S )Nc                ó>   •— | ‰k    r‰‰| |f         z  S ‰| |f         S r¹   r°   )r±   r²   r  rÛ   r¢   s     €€€rœ   r´   z<MatrixBase._eval_row_op_multiply_row_by_const.<locals>.entry£  r®  rŸ   rµ   )r¢   rÛ   r  r´   s   ``` rœ   Ú"_eval_row_op_multiply_row_by_constz-MatrixBase._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¹   r°   )r±   r²   r  rÛ   r¼  r¢   s     €€€€rœ   r´   z@MatrixBase._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µ   )r¢   rÛ   r  r¼  r´   s   ```` rœ   Ú&_eval_row_op_add_multiple_to_other_rowz1MatrixBase._eval_row_op_add_multiple_to_other_row©  r¸  rŸ   r¡  c                óð   — |                       |||||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·  )r¢   r¦  r³   r  r§  r¨  s         rœ   Úelementary_col_opzMatrixBase.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Ã  )r¢   r¦  rÛ   r  r»  r¼  s         rœ   Úelementary_row_opzMatrixBase.elementary_row_opÎ  rÆ  rŸ   c                ó$   — t          | |¬¦  «        S ©NrÂ  )rl   ©r¢   r  s     rœ   ÚcolumnspacezMatrixBase.columnspaceì  s   € Ý˜D¨8Ð4Ñ4Ô4Ð4rŸ   c                ó&   — t          | ||¬¦  «        S )N)r  rh  )rm   )r¢   r  rh  s      rœ   Ú	nullspacezMatrixBase.nullspaceï  s   € Ý˜$¨¸jÐIÑIÔIÐIrŸ   c                ó$   — t          | |¬¦  «        S rÊ  )rn   rË  s     rœ   ÚrowspacezMatrixBase.rowspaceò  s   € Ý˜¨Ð1Ñ1Ô1Ð1rŸ   c                ó"   — t          | g|¢R i |¤ŽS r¹   )ro   )r™   Úvecsr›   s      rœ   ÚorthogonalizezMatrixBase.orthogonalizeø  s    € Ý˜cÐ3 DÐ3Ð3Ð3¨FÐ3Ð3Ð3rŸ   c                ó    — t          | fd|i|¤ŽS )NÚerror_when_incomplete)rp   )r¢   rÕ  Úflagss      rœ   Ú	eigenvalszMatrixBase.eigenvals  s   € Ý˜$ÐUÐUÐ6KÐUÈuÐUÐUÐUrŸ   c                ó"   — t          | f||dœ|¤ŽS )N)rÕ  rh  )rq   )r¢   rÕ  rh  rÖ  s       rœ   Ú
eigenvectszMatrixBase.eigenvects  s.   € Ý˜4ð 0Ð7LØ%ð0ð 0Ø).ð0ð 0ð 	0rŸ   c                ó    — t          | fd|i|¤ŽS )NÚ
reals_only)rt   )r¢   rÛ  r›   s      rœ   Úis_diagonalizablezMatrixBase.is_diagonalizable	  s   € Ý! $ÐHÐH°:ÐHÀÐHÐHÐHrŸ   c                ó(   — t          | |||¬¦  «        S )N)rÛ  ÚsortÚ	normalize)ru   )r¢   rÛ  rÞ  rß  s       rœ   ÚdiagonalizezMatrixBase.diagonalize  s"   € Ý˜D¨Z¸dØ#ð%ñ %ô %ð 	%rŸ   c                ó$   — t          | |¬¦  «        S ©N©r]  )rr   ©r¢   r]  s     rœ   ÚbidiagonalizezMatrixBase.bidiagonalize  s   € Ý˜d¨%Ð0Ñ0Ô0Ð0rŸ   c                ó$   — t          | |¬¦  «        S râ  )rs   rä  s     rœ   Úbidiagonal_decompositionz#MatrixBase.bidiagonal_decomposition  s   € Ý(¨°UÐ;Ñ;Ô;Ð;rŸ   c                ó    — t          | ¦  «        S r¹   )rv   r«   s    rœ   Úis_positive_definitezMatrixBase.is_positive_definite  ó   € å$ TÑ*Ô*Ð*rŸ   c                ó    — t          | ¦  «        S r¹   )rw   r«   s    rœ   Úis_positive_semidefinitez#MatrixBase.is_positive_semidefinite  ó   € å(¨Ñ.Ô.Ð.rŸ   c                ó    — t          | ¦  «        S r¹   )rx   r«   s    rœ   Úis_negative_definitezMatrixBase.is_negative_definite  rê  rŸ   c                ó    — t          | ¦  «        S r¹   )ry   r«   s    rœ   Úis_negative_semidefinitez#MatrixBase.is_negative_semidefinite"  rí  rŸ   c                ó    — t          | ¦  «        S r¹   )rz   r«   s    rœ   Úis_indefinitezMatrixBase.is_indefinite&  s   € å˜dÑ#Ô#Ð#rŸ   c                ó    — t          | fd|i|¤ŽS )NÚcalc_transform)r{   )r¢   rõ  r›   s      rœ   Újordan_formzMatrixBase.jordan_form*  s   € Ý˜DÐJÐJ°ÐJÀ6ÐJÐJÐJrŸ   c                ó   — t          | fi |¤ŽS r¹   )r|   ©r¢   rÖ  s     rœ   Úleft_eigenvectszMatrixBase.left_eigenvects-  s   € Ý Ð.Ð.¨Ð.Ð.Ð.rŸ   c                ó    — t          | ¦  «        S r¹   )r}   r«   s    rœ   Úsingular_valueszMatrixBase.singular_values0  ó   € Ý Ñ%Ô%Ð%rŸ   )Ú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ÿ  r  r   Ú
as_mutable)r¢   rý  rš   r›   rÿ  Úderivs         rœ   r   zMatrixBase.diffB  sf   € ð* 	IÐHÐHÐHÐHÐHØ� Ð? tÐ?Ð?Ð?°hÐ?Ð?ˆå˜$¥Ñ&Ô&ð 	&¨8ð 	&Ø×#Ò#Ñ%Ô%Ð%ØˆrŸ   c                ó4   ‡— |                       ˆfd„¦  «        S )Nc                ó.   •— |                       ‰¦  «        S r¹   r   )r  Úargs    €rœ   rÍ  z-MatrixBase._eval_derivative.<locals>.<lambda>_  s   ø€ ¨¯ª¨s©¬€ rŸ   rX  )r¢   r  s    `rœ   Ú_eval_derivativezMatrixBase._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¹   )Ú	integraterÈ  s    €€rœ   rÍ  z&MatrixBase.integrate.<locals>.<lambda>z  s   ø€ ¨¨¬°TÐ(D¸VÐ(DÐ(D€ rŸ   rX  rË  s    ``rœ   r	  zMatrixBase.integratea  s%   øø€ ð2 �~Š~ÐDÐDÐDÐDÐDÑEÔEÐErŸ   c                óÆ  ‡ ‡— ddl m} 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}  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²   r±   ÚXr¢   s     €€rœ   rÍ  z%MatrixBase.jacobian.<locals>.<lambda>´  s   ø€ ¨D°¬G¯LªL¸¸1¼Ñ,>Ô,>€ rŸ   )r‚  r�   r  r�   r¬   r  )r¢   r  r�   rŒ  rô   s   ``   rœ   ÚjacobianzMatrixBase.jacobian|  só   øø€ ðH 	9Ð8Ð8Ð8Ð8Ð8Ý˜!˜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)r  rš   s    €rœ   rÍ  z"MatrixBase.limit.<locals>.<lambda>Ë  s   ø€ ¨¨¬°¨€ rŸ   rX  )r¢   rš   s    `rœ   r  zMatrixBase.limit¶  s!   ø€ ð* �~Š~Ð6Ð6Ð6Ð6Ñ7Ô7Ð7rŸ   c                ó.   — |                       |¬¦  «        S )Nr  )r	  r�  s      rœ   Úberkowitz_charpolyzMatrixBase.berkowitz_charpolyÍ  s   € Ø�}Š}˜qˆ}Ñ!Ô!Ð!rŸ   c                ó.   — |                       d¬¦  «        S )zeComputes determinant using Berkowitz method.

        See Also
        ========

        det
        ry  r|  ©r‰  r«   s    rœ   Úberkowitz_detzMatrixBase.berkowitz_detÐ  s   € ð �xŠx˜{ˆxÑ+Ô+Ð+rŸ   c                ó   —  | j         di |¤ŽS )z8Computes eigenvalues of a Matrix using Berkowitz method.r°   )r×  rø  s     rœ   Úberkowitz_eigenvalszMatrixBase.berkowitz_eigenvalsÚ  s   € àˆtŒ~Ð&Ð& Ð&Ð&Ð&rŸ   c                ó¢   — | j         g }}|                      ¦   «         D ]#}|                     ||d         z  ¦  «         | }Œ$t          |¦  «        S )z1Computes principal minors using Berkowitz method.r�  )rY  ry  rÒ   r  )r¢   ÚsignÚminorsr£  s       rœ   Úberkowitz_minorszMatrixBase.berkowitz_minorsÞ  sU   € à”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   ©rš  )©r/   r/   r�  rr  ©r   r   )r„  rš  rK  r@   r“   rÐ   rÒ   r  rY  r�   r  r®  )r¢   rš  ÚberkÚAÚNÚ
transformsrô   ru  r  ÚRrÒ  rÁ  rï   r±   ÚBÚpolyss                   rœ   ry  zMatrixBase.berkowitzè  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Ÿ   c                ó.   — |                       |¬¦  «        S r{  )r†  r}  s     rœ   ÚcofactorMatrixzMatrixBase.cofactorMatrix  s   € Ø×#Ò#¨6Ð#Ñ2Ô2Ð2rŸ   c                ó    — t          | ¦  «        S r¹   ri  r«   s    rœ   Ú
det_bareiszMatrixBase.det_bareis  rt  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),
        http://www.eecis.udel.edu/~saunders/papers/sffge/it5.ps.

        See Also
        ========


        det
        berkowitz_det
        Úlur|  r  r«   s    rœ   Údet_LU_decompositionzMatrixBase.det_LU_decomposition  s   € ð$ �xŠx˜tˆxÑ$Ô$Ð$rŸ   c                ó0   — |                       ||¬¦  «        S )N)r^  rd  )r–  )r¢   r”  rô   s      rœ   Újordan_cellzMatrixBase.jordan_cell*  s   € Ø× Ò  a°HÐ Ñ=Ô=Ð=rŸ   c                ó\   — |                       ¦   «         \  }}||                     ¦   «         fS r¹   )rö  r!  )r¢   Úcalc_transformationÚPÚJs       rœ   Újordan_cellszMatrixBase.jordan_cells-  s.   € Ø×ÒÑ!Ô!‰ˆˆ1Ø�!×#Ò#Ñ%Ô%Ð%Ð%rŸ   c                ó2   — |                       |||¬¦  «        S r{  )r�  rƒ  s       rœ   Ú
minorEntryzMatrixBase.minorEntry1  s   € Ø�zŠz˜!˜Q vˆzÑ.Ô.Ð.rŸ   c                ó.   — |                       ||¦  «        S r¹   )r�  r¯  s      rœ   ÚminorMatrixzMatrixBase.minorMatrix4  s   € Ø×#Ò# A qÑ)Ô)Ð)rŸ   c                ó0   — |                       |d¬¦  «        S )zEPermute the rows of the matrix with the given permutation in reverse.r—  ©rŸ  ©r©  ©r¢   r`  s     rœ   ÚpermuteBkwdzMatrixBase.permuteBkwd7  s   € à× Ò  °Ð Ñ<Ô<Ð<rŸ   c                ó0   — |                       |d¬¦  «        S )z:Permute the rows of the matrix with the given permutation.r’  r:  r;  r<  s     rœ   Ú
permuteFwdzMatrixBase.permuteFwd;  s   € à× Ò  °Ð Ñ;Ô;Ð;rŸ   r=   c                óš   — d„ |                       ¦   «         D ¦   «         }t          |¦  «        dk    r|\  }nt          }t          |¦  «        S )Nc                ó   — h | ]	}|j         ’Œ
S r°   )Úkindr>  s     rœ   ú	<setcomp>z"MatrixBase.kind.<locals>.<setcomp>A  s   € Ð2Ð2Ð2 �a”fÐ2Ð2Ð2rŸ   r/   )ÚflatrÊ   r   r=   )r¢   Ú
elem_kindsÚelemkinds      rœ   rB  zMatrixBase.kind?  sJ   € à2Ð2 d§i¢i¡k¤kÐ2Ñ2Ô2ˆ
Ýˆz‰?Œ?˜aÒÐØ"‰IˆHˆHå$ˆHÝ˜(Ñ#Ô#Ð#rŸ   c                óD   ‡ — ˆ fd„t          ‰ j        ¦  «        D ¦   «         S )a"  
        Returns a flat list of all elements in the matrix.

        Examples
        ========

        >>> from sympy import Matrix
        >>> m = Matrix([[0, 2], [3, 4]])
        >>> m.flat()
        [0, 2, 3, 4]

        See Also
        ========

        tolist
        values
        c                óR   •— g | ]#}t          ‰j        ¦  «        D ]}‰||f         ‘ŒŒ$S r°   )rÐ   r”   )rÃ   r±   r²   r¢   s      €rœ   rÈ   z#MatrixBase.flat.<locals>.<listcomp>Z  s8   ø€ ÐOÐOÐO˜q½eÀDÄIÑ>NÔ>NÐOÐO¸��Q˜�T”
ÐOÐOÐOÐOrŸ   rç   r«   s   `rœ   rD  zMatrixBase.flatH  s*   ø€ ð$ PÐOÐOÐO¥E¨$¬)Ñ$4Ô$4ÐOÑOÔOÐOrŸ   c                óN   — |�|st          d¦  «        ‚ddlm}  || |¬¦  «        S )Nz=Cannot implement copy=False when converting Matrix to ndarrayr/   )Úmatrix2numpy)Údtype)r  ÚdenserJ  )r¢   rK  rX  rJ  s       rœ   Ú	__array__zMatrixBase.__array__\  sC   € ØÐ DÐÝÐ[Ñ\Ô\Ð\Ø'Ð'Ð'Ð'Ð'Ð'Øˆ|˜D¨Ð.Ñ.Ô.Ð.rŸ   c                ó    — | j         | j        z  S )zkReturn the number of elements of ``self``.

        Implemented mainly so bool(Matrix()) == False.
        rª   r«   s    rœ   Ú__len__zMatrixBase.__len__b  s   € ð
 Œy˜4œ9Ñ$Ð$rŸ   c                óN  ‡— ddl m}mŠ d„ }|                      ¦   «         \  }}|                     ¦   «         }ˆfd„|D ¦   «         }|D ]} |||¦  «         Œ|                      |                      ||Ž ¦  «                             |                     ¦   «         ¦  «        ¦  «        S )Nr   )rt  ÚMutableMatrixc                ó0  — | j         d         }| d         }|j        r[|dk    r|j        r	||z  | d<   n |j        r|j        st	          d¦  «        ‚t          |¦  «        D ]}t          ||¦  «        | d|f<   Œn[t          |¦  «        D ]K}t          ||¦  «        }t          |t          ¦  «        r| 	                    ¦   «         }|||z
  z  |z  | d|f<   ŒLt          |¦  «        D ]3}t          d||z
  ¦  «        D ]}| |dz
  ||z   dz
  f         | |||z   f<   ŒŒ4d S )Nr   r  r/   zANon-invertible matrix can only be raised to a nonnegative integer)
r¬   rÊ  r  rW  rA   rÐ   r!   r(   r  Ú_eval_expand_func)Újcrô   r"  Úlr±   Úbnr²   s          rœ   Újordan_cell_powerzBMatrixBase._matrix_pow_by_jordan_blocks.<locals>.jordan_cell_powerl  s]  € Ø”˜”ˆAØ�3”ˆAØŒyð *Ø˜’6�6˜aÔ.�6Ø ™d�B�s‘G�GØœ,ð 7¨1Ô+;ð 7Ý2Ð3vÑwÔwÐwå" 1™XœXð 7ð 7˜Ý"0°°AÑ"6Ô"6˜˜1˜Q˜3™˜ð7õ ˜q™œð *ð *�AÝ! ! Q™œ�BÝ! "¥hÑ/Ô/ð 4Ø×1Ò1Ñ3Ô3˜Ø ! A¡#™h r™k�B�q˜�s‘G�GÝ˜1‘X”Xð /ð /�Ý˜q ! A¡#™œð /ð /�AØ " A a¡C¨¨!©¨A© I¤�B�q˜˜1™�u‘I�Ið/ð/ð /rŸ   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r°   r°   )rÃ   r²   rQ  s     €rœ   rÈ   z;MatrixBase._matrix_pow_by_jordan_blocks.<locals>.<listcomp>„  s#   ø€ Ð?Ð?Ð?¨Q˜˜ aÑ(Ô(Ð?Ð?Ð?rŸ   )r„  rt  rQ  rö  r!  r�   r  rU  )	r¢   r  rt  rW  r2  r3  r4  r²   rQ  s	           @rœ   rO  z'MatrixBase._matrix_pow_by_jordan_blocksi  sÐ   ø€ Ø6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð	/ð 	/ð 	/ð* ×ÒÑ!Ô!‰ˆˆ1Ø×(Ò(Ñ*Ô*ˆà?Ð?Ð?Ð?°,Ð?Ñ?Ô?ˆØð 	&ð 	&ˆAØÐ˜a Ñ%Ô%Ð%Ð%Ø�yŠy˜Ÿš D D¨,Ð$7Ñ8Ô8ß’˜!Ÿ%š%™'œ'Ñ"Ô"ñ$ô $ð 	$rŸ   c                ó–   — t           j        | j        v rd| j        ›d| j        ›d�S dt          |                      ¦   «         ¦  «        z  S )NúMatrix(r3  ú, [])z
Matrix(%s))r#   r©  r¬   r“   r”   Ústrr@  r«   s    rœ   Ú__str__zMatrixBase.__str__Š  sF   € ÝŒ6�T”ZÐÐÐØ+/¬9¨9¨9°d´i°i°iÐ@Ð@Ø�c $§+¢+¡-¤-Ñ0Ô0Ñ0Ð0rŸ   c                óì   — |st          ¦   «         }t          j        | j        v rd| j        ›d| j        ›d�S | j        dk    rd|                      |d¬¦  «        z  S d|                      |d¬¦  «        z  S )	NrZ  r3  r[  r/   zMatrix([%s])z,
)ÚrowsepzMatrix([
%s]))r%   r#   r©  r¬   r“   r”   Útable)r¢   Úprinters     rœ   Ú_format_strzMatrixBase._format_str�  s}   € Øð 	#Ý ‘l”lˆGåŒ6�T”ZÐÐÐØ+/¬9¨9¨9°d´i°i°iÐ@Ð@ØŒ9˜Š>ˆ>Ø! D§J¢J¨w¸u JÑ$EÔ$EÑEÐEØ $§*¢*¨W¸U *Ñ"CÔ"CÑCÐCrŸ   c                óö  ‡‡— t          |¦  «        }d„ |D ¦   «         Št          t          t          ‰¦  «        ¦  «        ¦  «        Šd„ ‰D ¦   «         }ˆfd„t          |¦  «        D ¦   «         }t	          ˆfd„|D ¦   «         ¦  «        }g }t          |¦  «        rÌg }t          |¦  «        D ]g\  }	}
|                     ‰|
         ||
          dd…f         ¦  «         ||
xx         dz  cc<   ||
         dk    r‰r‰                     d¦  «        ||	<   Œht          |¦  «        |k    rt          t          d¦  «        ¦  «        ‚|                     |¦  «         t          |¦  «        °Ì|                      |¦  «        S )	aI  Return a matrix filled by the given matrices which
        are listed in order of appearance from left to right, top to
        bottom as they first appear in the matrix. They must fill the
        matrix completely.

        Examples
        ========

        >>> from sympy import ones, Matrix
        >>> Matrix.irregular(3, ones(2,1), ones(3,3)*2, ones(2,2)*3,
        ...   ones(1,1)*4, ones(2,2)*5, ones(1,2)*6, ones(1,2)*7)
        Matrix([
            [1, 2, 2, 2, 3, 3],
            [1, 2, 2, 2, 3, 3],
            [4, 2, 2, 2, 5, 5],
            [6, 6, 7, 7, 5, 5]])
        c                óZ   — g | ](}t          |d ¦  «        r|                     ¦   «         n|‘Œ)S )Úas_explicit)r‡  re  r  s     rœ   rÈ   z(MatrixBase.irregular.<locals>.<listcomp>®  sC   € ð ð ð Øõ !(¨¨=Ñ 9Ô 9Ð@ˆQ�]Š]‰_Œ_ˆ_¸qð ð ð rŸ   c                ó   — g | ]	}|j         ‘Œ
S r°   )r“   r  s     rœ   rÈ   z(MatrixBase.irregular.<locals>.<listcomp>±  s   € Ð!Ð!Ð!˜!ˆqŒvÐ!Ð!Ð!rŸ   c                ó:   •— g | ]}‰                      d ¦  «        ‘ŒS ©r   )r•  )rÃ   rõ   Úqs     €rœ   rÈ   z(MatrixBase.irregular.<locals>.<listcomp>²  s#   ø€ Ð0Ð0Ð0˜q�!—%’%˜‘(”(Ð0Ð0Ð0rŸ   c              3  ó2   •K  — | ]}‰|         j         V — Œd S r¹   rº   )rÃ   r±   rø  s     €rœ   rÅ   z'MatrixBase.irregular.<locals>.<genexpr>³  s)   øè è € Ð-Ð- �1�Q”4”9Ð-Ð-Ð-Ð-Ð-Ð-rŸ   Nr/   r   zf
                    Matrices provided do not appear to fill
                    the space completely.)r5   rÉ   rÐ   rÊ   rh  rÑ   r  Úextendr•  r+  r6   rÒ   r�   )r™   ÚntopÚmatricesr›   ÚdatÚactiver”   r“   r6  rÁ  r²   rø  ri  s              @@rœ   Ú	irregularzMatrixBase.irregular™  s—  øø€ õ& �d‰|Œ|ˆðð Øðñ ô ˆå••s˜1‘v”v‘”ÑÔˆØ!Ð!˜qÐ!Ñ!Ô!ˆØ0Ð0Ð0Ð0¥E¨$¡K¤KÐ0Ñ0Ô0ˆÝÐ-Ð-Ð-Ð- fÐ-Ñ-Ô-Ñ-Ô-ˆØˆÝ�#‰hŒhð 	ØˆAÝ! &Ñ)Ô)ð )ð )‘��1Ø—’˜˜1œ˜s 1œv˜g q q q˜jÔ)Ñ*Ô*Ð*Ø�A��”˜!‘��‘Ø�q”6˜Q’;�; 1�;Ø !§¢ a¡¤�F˜1‘IøÝ�1‰vŒv˜Š~ˆ~Ý ¥ð --ñ ".ô ".ñ /ô /ð /ð �KŠK˜‰NŒNˆNõ �#‰hŒhð 	ð �xŠx˜‰~Œ~ÐrŸ   c                ód  ‡ — |                      ¦   «         }t          |j        ¦  «        dk    r?|j        d         |j        d         }}ˆ fd„|                     ¦   «         D ¦   «         }|||fS t          |j        ¦  «        dk    rˆ fd„|D ¦   «         }|j        d         d|fS t	          d¦  «        ‚)Nrr  r   r/   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r°   r;  ©rÃ   r±   r™   s     €rœ   rÈ   z.MatrixBase._handle_ndarray.<locals>.<listcomp>Ë  s#   ø€ Ð>Ð>Ð>¨Q˜Ÿš a™œÐ>Ð>Ð>rŸ   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r°   r;  rs  s     €rœ   rÈ   z.MatrixBase._handle_ndarray.<locals>.<listcomp>Î  s#   ø€ Ð6Ð6Ð6¨Q˜Ÿš a™œÐ6Ð6Ð6rŸ   z&SymPy supports just 1D and 2D matrices)rM  rÊ   r¬   Úravelr˜   )r™   r  Úarrr“   r”   Ú	flat_lists   `     rœ   Ú_handle_ndarrayzMatrixBase._handle_ndarrayÃ  s¼   ø€ ð
 �mŠm‰oŒoˆÝˆsŒy‰>Œ>˜QÒÐØœ 1œ s¤y°¤|�$ˆDØ>Ð>Ð>Ð>°#·)²)±+´+Ð>Ñ>Ô>ˆIØ˜˜yÐ(Ð(Ý�”‰^Œ^˜qÒ Ð Ø6Ð6Ð6Ð6°#Ð6Ñ6Ô6ˆIØ”9˜Q”<  IÐ-Ð-å%Ø8ñ:ô :ð :rŸ   c                ó0  ‡ ‡‡‡‡‡‡‡‡‡‡‡— ddl m} ddlmŠ ddlmŠ d}t          |¦  «        dk    �r[t          |d         |¦  «        r@|d         j        |d         j	        t          |d                              ¦   «         ¦  «        fS t          |d         t          ¦  «        r3|d         j        |d         j	        |d                              ¦   «         fS t          |d         t          ¦  «        rR|d         j        rE|d         j        |d         j	        |d                              ¦   «                              ¦   «         fS t          |d         t"          j        ¦  «        r%|d         }ˆ fd„|D ¦   «         }|j        |j	        |fS t'          |d         d¦  «        r‰                      |d         ¦  «        S t+          |d         ¦  «        �r¼t          |d         t,          ¦  «        �s t/          |d         ¦  «        }ˆˆˆfd	„Šˆfd
„Š|                     dd¦  «        Š‰r5ˆˆfd„Šˆfd„Št          |t.          t2          f¦  «        rˆfd„|D ¦   «         }t          |¦  «        dk    rdx}}g }�n~t5          ˆfd„|D ¦   «         ¦  «        rVt          |d         ¦  «        dk    r=t5          d„ |D ¦   «         ¦  «        st7          d¦  «        ‚t          |¦  «        }d}g }�nt9          ˆˆfd„|D ¦   «         ¦  «        s%ˆ fd„|D ¦   «         }t          |¦  «        }|rdnd}�nÌ‰r‡t5          ˆfd„|D ¦   «         ¦  «        rld„ |D ¦   «         }	|	rVt          |	¦  «        dk    rt7          d¦  «        ‚d„ |D ¦   «         }|	                     ¦   «         }t          |¦  «        |z  }�nKdx}}g }�nC‰�rct9          ˆfd„|D ¦   «         ¦  «        �rGt=          ¦   «         }	g }|D �]Š ‰‰¦  «        r`|                     d„ ‰                     ¦   «         D ¦   «         ¦  «         t9          ‰j         ¦  «        r|	 !                    ‰j	        ¦  «         n{ ‰‰¦  «        rF‰rC|	 !                    t          ‰¦  «        ¦  «         |                     ˆ fd„‰D ¦   «         ¦  «         n*|	 !                    d¦  «         | "                    ‰¦  «         t          |	¦  «        dk    rt7          d¦  «        ‚�Œ|	                     ¦   «         }t          |¦  «        |z  }�nÝg }t=          ¦   «         }	dx}}|D �]F}
t+          |
¦  «        s tG          |
dd¦  «        st7          d¦  «        ‚t'          |
d¦  «        r
d|
j         v rŒL‰rqt5          ˆfd„|
D ¦   «         ¦  «        rV‰  $                    d„ |
D ¦   «         ¦  «        \  Š}}tK          ||g¦  «        Šˆˆfd „tM          |¦  «        D ¦   «         }|‰cŠ}n6dŠtG          |
dd¦  «        rd}|
g}nt          |
¦  «        }ˆ fd!„|
D ¦   «         }|	 !                    |¦  «         t          |	¦  «        dk    rt7          d¦  «        ‚|                     |¦  «         |‰z  }�ŒH|	r|	                     ¦   «         nd}�net          |¦  «        d"k    �r8tO          |d         ¦  «        }tO          |d         ¦  «        }|dk     s|dk     r#t7          d# (                    ||¦  «        ¦  «        ‚t          |¦  «        d"k    rht          |d$         tR          ¦  «        rM|d$         Šg }tM          |¦  «        D ]2Š|                     ˆ ˆˆfd%„tM          |¦  «        D ¦   «         ¦  «         Œ3n}t          |¦  «        d"k    rPt+          |d$         ¦  «        r;|d$         }t          |¦  «        ||z  k    rt7          d&¦  «        ‚ˆ fd'„|D ¦   «         }nt          |¦  «        dk    rdx}}g }|€tU          tW          d(¦  «        ¦  «        ‚|||fS ))a}  Return the number of rows, cols and flat matrix elements.

        Examples
        ========

        >>> from sympy import Matrix, I

        Matrix can be constructed as follows:

        * from a nested list of iterables

        >>> Matrix( ((1, 2+I), (3, 4)) )
        Matrix([
        [1, 2 + I],
        [3,     4]])

        * from un-nested iterable (interpreted as a column)

        >>> Matrix( [1, 2] )
        Matrix([
        [1],
        [2]])

        * from un-nested iterable with dimensions

        >>> Matrix(1, 2, [1, 2] )
        Matrix([[1, 2]])

        * from no arguments (a 0 x 0 matrix)

        >>> Matrix()
        Matrix(0, 0, [])

        * from a rule

        >>> Matrix(2, 2, lambda i, j: i/(j + 1) )
        Matrix([
        [0,   0],
        [1, 1/2]])

        See Also
        ========
        irregular - filling a matrix with irregular blocks
        r   r€  )ÚMatrixSymbol)ÚBlockMatrixNr/   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r°   r;  )rÃ   r  r™   s     €rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>  s#   ø€ Ð8Ð8Ð8°˜SŸ\š\¨!™_œ_Ð8Ð8Ð8rŸ   rM  c                óV   •— t          | t          ¦  «        o‰pt          | ‰‰f¦  «        S r¹   )r  r�   )r±   r{  rz  rý  s    €€€rœ   rÍ  z4MatrixBase._handle_creation_inputs.<locals>.<lambda>"  s1   ø€ ¥*¨Qµ
Ñ";Ô";ð #LØÐJ¥
¨1¨{¸LÐ.IÑ JÔ Jð rŸ   c                ó:   •— t          | ¦  «        o ‰| ¦  «         S r¹   )r4   )r±   Úismats    €rœ   rÍ  z4MatrixBase._handle_creation_inputs.<locals>.<lambda>$  s   ø€ ¥¨A¡¤Ð ?°u°u¸Q±x´x°<€ rŸ   rý  Tc                óÔ   •— t          | ‰¦  «        r|                      ¦   «         S t          | ‰¦  «        r2t          d„ | j        D ¦   «         ¦  «        r|                      ¦   «         S | S )zmake Block and Symbol explicitc              3  ó$   K  — | ]}|j         V — Œd S r¹   )Ú
is_Integer)rÃ   rõ   s     rœ   rÅ   zLMatrixBase._handle_creation_inputs.<locals>.make_explicit.<locals>.<genexpr>.  s%   è è € Ð@_Ð@_ÐRSÀÄÐ@_Ð@_Ð@_Ð@_Ð@_Ð@_rŸ   )r  re  r  r¬   )r  r{  rz  s    €€rœ   Úmake_explicitz9MatrixBase._handle_creation_inputs.<locals>.make_explicit*  sj   ø€ å% a¨Ñ5Ô5ð %Ø#$§=¢=¡?¤?Ð2Ý'¨¨<Ñ8Ô8ð %½SÐ@_Ð@_ÐWXÔW^Ð@_Ñ@_Ô@_Ñ=_Ô=_ð %Ø#$§=¢=¡?¤?Ð2à#$˜HrŸ   c                ón   •— t          | t          t          f¦  «        rˆfd„| D ¦   «         S  ‰| ¦  «        S )Nc                ó&   •— g | ]} ‰|¦  «        ‘ŒS r°   r°   )rÃ   r  rƒ  s     €rœ   rÈ   zQMatrixBase._handle_creation_inputs.<locals>.make_explicit_row.<locals>.<listcomp>6  s#   ø€ Ð#BÐ#BÐ#B¸ M M°!Ñ$4Ô$4Ð#BÐ#BÐ#BrŸ   )r  rÉ   r  )rÛ   rƒ  s    €rœ   Úmake_explicit_rowz=MatrixBase._handle_creation_inputs.<locals>.make_explicit_row3  sC   ø€ å% c­Dµ%¨=Ñ9Ô9ð 6Ø#BÐ#BÐ#BÐ#B¸cÐ#BÑ#BÔ#BÐBà#0 =°Ñ#5Ô#5Ð5rŸ   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r°   r°   )rÃ   rÛ   r†  s     €rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>;  s%   ø€ ÐEÐEÐE¸#Ð0Ð0°Ñ5Ô5ÐEÐEÐErŸ   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r¹   r°   )rÃ   r±   Úraws     €rœ   rÅ   z5MatrixBase._handle_creation_inputs.<locals>.<genexpr>@  s+   øè è € Ð-Ð- A˜˜˜Q™œÐ-Ð-Ð-Ð-Ð-Ð-rŸ   c              3  ó<   K  — | ]}t          |¦  «        d k    V — ŒdS rš  )rÊ   r  s     rœ   rÅ   z5MatrixBase._handle_creation_inputs.<locals>.<genexpr>A  s,   è è € Ð8Ð8¨q�s 1™vœv¨š{Ð8Ð8Ð8Ð8Ð8Ð8rŸ   zmismatched dimensionsc              3  óD   •K  — | ]} ‰|¦  «        p
 ‰|¦  «        V — Œd S r¹   r°   )rÃ   r±   r  r‰  s     €€rœ   rÅ   z5MatrixBase._handle_creation_inputs.<locals>.<genexpr>F  s8   øè è € Ð=Ð=°A˜S˜S ™VœVÐ/ u u¨Q¡x¤xÐ=Ð=Ð=Ð=Ð=Ð=rŸ   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r°   r;  rs  s     €rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>H  s#   ø€ Ð >Ð >Ð >°Q §¢¨a¡¤Ð >Ð >Ð >rŸ   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r¹   r°   ©rÃ   r±   r  s     €rœ   rÅ   z5MatrixBase._handle_creation_inputs.<locals>.<genexpr>K  ó+   øè è € Ð%<Ð%<°1 e e¨A¡h¤hÐ%<Ð%<Ð%<Ð%<Ð%<Ð%<rŸ   c                óD   — h | ]}t          |j        ¦  «        ¯|j        ’ŒS r°   )rÑ   r¬   r”   r  s     rœ   rC  z5MatrixBase._handle_creation_inputs.<locals>.<setcomp>M  s'   € Ð@Ð@Ð@ qµ3°q´w±<´<Ð@˜AœFÐ@Ð@Ð@rŸ   c                óJ   — g | ] }|                      ¦   «         D ]	}|D ]}|‘ŒŒ
Œ!S r°   )r@  )rÃ   r±   r6  rõ   s       rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>Q  s;   € Ð$SÐ$SÐ$S¨1¸Q¿XºX¹Z¼ZÐ$SÐ$S¸ÐQRÐ$SÐ$SÈA QÐ$SÐ$SÐ$SÐ$SÐ$SrŸ   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r¹   r°   rŽ  s     €rœ   rÅ   z5MatrixBase._handle_creation_inputs.<locals>.<genexpr>W  r�  rŸ   c                ó   — g | ]	}|D ]}|‘ŒŒ
S r°   r°   )rÃ   r²   r  s      rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>]  s%   € Ð BÐ BÐ B qÀÐ BÐ B¸1 Ð BÐ BÐ BÐ BrŸ   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r°   r;  )rÃ   r<  r™   s     €rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>c  s%   ø€ Ð1OÐ1OÐ1OÀr°#·,²,¸rÑ2BÔ2BÐ1OÐ1OÐ1OrŸ   Ú	is_MatrixFzexpecting list of listsc              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r¹   r°   rŽ  s     €rœ   rÅ   z5MatrixBase._handle_creation_inputs.<locals>.<genexpr>{  s+   øè è € Ð+BÐ+B¸¨E¨E°!©H¬HÐ+BÐ+BÐ+BÐ+BÐ+BÐ+BrŸ   c                ó   — g | ]	}|j         ‘Œ
S r°   r½  r  s     rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>}  s   € Ð 2Ð 2Ð 2¨ ¤Ð 2Ð 2Ð 2rŸ   c                óP   •— g | ]"}t          ‰¦  «        D ]}‰|         |         ‘ŒŒ#S r°   )rÐ   )rÃ   r²   r±   ru  r6  s      €€rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>€  s4   ø€ Ð MÐ MÐ M¨QÅEÈ!ÁHÄHÐ MÐ M¸q  1¤ a¤Ð MÐ MÐ MÐ MrŸ   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r°   r;  rs  s     €rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>‰  s#   ø€ Ð'EÐ'EÐ'E¸A¨¯ª°Q©¬Ð'EÐ'EÐ'ErŸ   r�   r�  rr  c           
     óš   •— g | ]G}‰                       ‰‰                      ‰¦  «        ‰                      |¦  «        ¦  «        ¦  «        ‘ŒHS r°   r;  )rÃ   r²   r™   r±   r¦  s     €€€rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>Ÿ  sU   ø€ ð /ð /ð /Øð Ÿš b b¨¯ª°a©¬¸#¿,º,Àq¹/¼/Ñ&JÔ&JÑKÔKð /ð /ð /rŸ   z+List length should be equal to rows*columnsc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r°   r;  rs  s     €rœ   rÈ   z6MatrixBase._handle_creation_inputs.<locals>.<listcomp>¨  s#   ø€ Ð@Ð@Ð@°˜SŸ\š\¨!™_œ_Ð@Ð@Ð@rŸ   zf
                Data type not understood; expecting list of lists
                or lists of values.),r„  r�  Ú"sympy.matrices.expressions.matexprrz  Ú&sympy.matrices.expressions.blockmatrixr{  rÊ   r  r“   r”   r3   r@  r�   rD  r   r•  re  ÚmpÚmatrixr‡  rx  r4   ÚDeferredVectorrÉ   r…  r  r  r+  rÑ   r•  r¶  rk  r¬   ÚaddrÒ   rS  r†  r+   rÐ   r5   rþ   r*   r  r6   )r™   rš   r›   r�  rw  rÓ   rn  r“   r”   ÚncolrÛ   rù   ÚflatTrD  r{  rz  ru  rý  r±   r  rƒ  r†  r¦  r6  r‰  s   `             @@@@@@@@@@@rœ   r†  z"MatrixBase._handle_creation_inputsÔ  sb	  øøøøøøøøøøøø€ ð\ 	0Ð/Ð/Ð/Ð/Ð/ØCÐCÐCÐCÐCÐCØFÐFÐFÐFÐFÐFàˆ	åˆt‰9Œ9˜Š>‰>å˜$˜qœ' <Ñ0Ô0ð E5Ø˜A”w”| T¨!¤W¤\µ7¸4À¼7¿>º>Ñ;KÔ;KÑ3LÔ3LÐLÐLõ ˜D œG¥ZÑ0Ô0ð A5Ø˜A”w”| T¨!¤W¤\°4¸´7·<²<±>´>ÐAÐAõ ˜D œG¥UÑ+Ô+ð }5°°Q´Ô0Að }5Ø˜A”w”| T¨!¤W¤\°4¸´7×3FÒ3FÑ3HÔ3H×3MÒ3MÑ3OÔ3OÐOÐOå˜D œG¥R¤YÑ/Ô/ð z5Ø˜”G�Ø8Ð8Ð8Ð8°aÐ8Ñ8Ô8�	Ø”v˜qœv yÐ0Ð0õ ˜˜aœ +Ñ.Ô.ð t5Ø×*Ò*¨4°¬7Ñ3Ô3Ð3õ ˜T !œWÑ%Ô%ñ p5Ý& t¨A¤wµÑ?Ô?ñp5å˜4 œ7‘m”m�ðLð Lð Lð Lð Lð L�à?Ð?Ð?Ð?�Ø!Ÿ:š: j°$Ñ7Ô7�ð ð Fð%ð %ð %ð %ð %ð %ð6ð 6ð 6ð 6ð 6õ " #­­e }Ñ5Ô5ð FØEÐEÐEÐEÀÐEÑEÔE˜å�s‘8”8˜q’=�=Ø"#�O�D˜4Ø "�I‘IÝÐ-Ð-Ð-Ð-¨Ð-Ñ-Ô-Ñ-Ô-ð O5µ#°c¸!´f±+´+ÀÒ2BÐ2BÝÐ8Ð8°CÐ8Ñ8Ô8Ñ8Ô8ð BÝ(Ð)@ÑAÔAÐAÝ˜s™8œ8�DØ�DØ "�I‘IÝÐ=Ð=Ð=Ð=Ð=¸Ð=Ñ=Ô=Ñ=Ô=ð I5à >Ð >Ð >Ð >¸#Ð >Ñ >Ô >�IÝ˜y™>œ>�DØ $Ð+˜1˜1¨!�D‘DØð D5¥#Ð%<Ð%<Ð%<Ð%<¸Ð%<Ñ%<Ô%<Ñ"<Ô"<ð D5à@Ð@¨CÐ@Ñ@Ô@�DØð 'Ý˜t™9œ9¨š>˜>Ý",Ð-DÑ"EÔ"EÐEØ$SÐ$S°Ð$SÑ$SÔ$S˜	Ø#Ÿxšx™zœz˜Ý" 9™~œ~¨tÑ3˜™à&'˜˜˜tØ$&˜	™	Øñ 85¥#Ð%<Ð%<Ð%<Ð%<¸Ð%<Ñ%<Ô%<Ñ"<Ô"<ñ 85Ý™5œ5�DØ "�IØ ð Fñ F˜Ø ˜5 ™8œ8ð 0Ø%×,Ò,Ø BÐ B¨A¯HªH©J¬JÐ BÑ BÔ BñDô Dð Då" 1¤7™|œ|ð 1Ø $§¢¨¬Ñ 0Ô 0Ð 0øØ ˜S ™VœVð 0Ø ð QØ $§¢­¨Q©¬Ñ 0Ô 0Ð 0Ø )× 0Ò 0Ð1OÐ1OÐ1OÐ1OÈQÐ1OÑ1OÔ1OÑ PÔ PÐ Pøà ŸHšH Q™KœK˜KØ%×,Ò,¨QÑ/Ô/Ð/Ý˜t™9œ9 qš=˜=Ý",Ð-DÑ"EÔ"EÐEñ )àŸ8š8™:œ:�DÝ˜y™>œ>¨4Ñ/�D‘Dð
 !#�IÝ™5œ5�DØ"#�O�D˜4Ø"ð "ñ "˜Ý*¨3Ñ/Ô/ð HÝ$+¨C°¸eÑ$DÔ$DðHå",Ð-FÑ"GÔ"GÐGå" 3¨Ñ4Ô4ð )Ø  C¤I˜~˜~Ø (à#ð F­Ð+BÐ+BÐ+BÐ+B¸cÐ+BÑ+BÔ+BÑ(BÔ(Bð FØ*-×*EÒ*EØ 2Ð 2¨cÐ 2Ñ 2Ô 2ñ+4ô +4™K˜A˜q %å '¨°¨sÑ 3Ô 3˜Aà MÐ MÐ MÐ MÐ Mµ%¸±(´(Ð MÑ MÔ Mð !à#$ a˜D˜A˜q˜qà !˜AÝ& s¨K¸Ñ?Ô?ð FØ$% Ø(+ u  å$'¨¡H¤H Ø'EÐ'EÐ'EÐ'EÀÐ'EÑ'EÔ'E ØŸš ™œ˜Ý˜t™9œ9 qš=˜=Ý",Ð-DÑ"EÔ"EÐEØ!×(Ò(¨Ñ.Ô.Ð.Ø ™	˜™Ø)-Ð4˜4Ÿ8š8™:œ:˜:°1�Dùå�‰YŒY˜!Š^‰^Ý˜$˜qœ'‘?”?ˆDÝ˜$˜qœ'‘?”?ˆDà�aŠxˆx˜4 !š8˜8Ý ð "DßDJÂFÈ4ÐQUÑDVÔDVñXô Xð Xõ �4‰yŒy˜AŠ~ˆ~¥*¨T°!¬WµhÑ"?Ô"?ˆ~Ø˜!”W�Ø�	Ý˜t™œð 0ð 0�AØ×$Ò$ð/ð /ð /ð /ð /ð /Ý"'¨¡+¤+ð/ñ /ô /ñ0ô 0ð 0ð 0ð0õ �T‘”˜a’�¥K°°Q´Ñ$8Ô$8�Ø  œG�	Ý�y‘>”> T¨D¡[Ò0Ð0Ý$ØEñGô Gð Gà@Ð@Ð@Ð@°iÐ@Ñ@Ô@�	øõ �‰YŒY˜!Š^ˆ^àˆOˆD�4ØˆIàÐÝ�Jð ('ñ (ô (ñ )ô )ð )ð �T˜9Ð$Ð$rŸ   c                ó\  — ddl m} t          |t          ¦  «        }|                      |¦  «        x\  }}}t          |t
          ¦  «        }t          |t          ¦  «        st          |t          ¦  «        rh|r|                      ||¦  «         dS t          |t          ¦  «        s't          |¦  «        r|  	                    ||¦  «         dS t          d|z  ¦  «        ‚|s1t          |t          ¦  «        st          |¦  «        r ||¦  «        }d}|r‚|r9t          t          || j        ¦  «        Ž t          t          || j        ¦  «        Ž f}n0t          |||j        z   ¦  «        t          |||j        z   ¦  «        f}|                      ||¦  «         n|||                      |¦  «        fS dS )am  Helper to set value at location given by key.

        Examples
        ========

        >>> from sympy import Matrix, I, zeros, ones
        >>> m = Matrix(((1, 2+I), (3, 4)))
        >>> m
        Matrix([
        [1, 2 + I],
        [3,     4]])
        >>> m[1, 0] = 9
        >>> m
        Matrix([
        [1, 2 + I],
        [9,     4]])
        >>> m[1, 0] = [[0, 1]]

        To replace row r you assign to position r*m where m
        is the number of columns:

        >>> M = zeros(4)
        >>> m = M.cols
        >>> M[3*m] = ones(1, m)*2; M
        Matrix([
        [0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0],
        [2, 2, 2, 2]])

        And to replace column c you can assign to position c:

        >>> M[2] = ones(m, 1)*4; M
        Matrix([
        [0, 0, 4, 0],
        [0, 0, 4, 0],
        [0, 0, 4, 0],
        [2, 2, 4, 2]])
        r/   r~  Nzunexpected value: %sT)rL  r  r  ÚsliceÚkey2ijr�   Úcopyin_matrixr,   r4   Úcopyin_listr+  r   r)  r”   r“   r   )r¢   r§   Úvaluer  Úis_slicer±   r²   Úis_mats           rœ   Ú_setitemzMatrixBase._setitem¸  sÈ  € ðP 	"Ð!Ð!Ð!Ð!Ð!å˜c¥5Ñ)Ô)ˆØ—[’[ Ñ%Ô%Ð%‰ˆˆ1ˆsÝ˜E¥:Ñ.Ô.ˆÝ�a�ÑÔð 	¥:¨aµÑ#7Ô#7ð 	Øð Ø×"Ò" 3¨Ñ.Ô.Ð.Ø�Ý˜e¥TÑ*Ô*ð ­{¸5Ñ/AÔ/Að Ø× Ò   eÑ,Ô,Ð,Ø�ÝÐ3°eÑ;Ñ<Ô<Ð<àð Ý" 5­%Ñ0Ô0ðÝ5@ÀÑ5GÔ5Gðà˜˜u™œ�Ø�Øð 	2Øð 5Ý ¥&¨¨D¬IÑ"6Ô"6Ð7Ý ¥&¨¨D¬IÑ"6Ô"6Ð7ð9�C�Cõ !  A¨¬
¡NÑ3Ô3Ý   A¨¬
¡NÑ3Ô3ð5�Cà×"Ò" 3¨Ñ.Ô.Ð.Ð.à˜!˜TŸ]š]¨5Ñ1Ô1Ð1Ð1ØˆFrŸ   c                ó   — | |z   S )zReturn self + b.r°   ©r¢   rø  s     rœ   r¡  zMatrixBase.addþ  s   € à�a‰xˆrŸ   c                ób   — | s| j         S |                      ¦   «         }t          |Ž t          |Ž z  S )a{  Returns the condition number of a matrix.

        This is the maximum singular value divided by the minimum singular value

        Examples
        ========

        >>> from sympy import Matrix, S
        >>> A = Matrix([[1, 0, 0], [0, 10, 0], [0, 0, S.One/10]])
        >>> A.condition_number()
        100

        See Also
        ========

        singular_values
        )rê   rû  r   r   )r¢   Úsingularvaluess     rœ   Úcondition_numberzMatrixBase.condition_number  s:   € ð& ð 	Ø”9ÐØ×-Ò-Ñ/Ô/ˆÝ�NÐ#¥c¨>Ð&:Ñ:Ð:rŸ   c                óh   — |                       | j        | j        |                      ¦   «         ¦  «        S )zë
        Returns the copy of a matrix.

        Examples
        ========

        >>> from sympy import Matrix
        >>> A = Matrix(2, 2, [1, 2, 3, 4])
        >>> A.copy()
        Matrix([
        [1, 2],
        [3, 4]])

        )r�   r“   r”   rD  r«   s    rœ   rX  zMatrixBase.copy  s&   € ð �yŠy˜œ D¤I¨t¯yªy©{¬{Ñ;Ô;Ð;rŸ   c           
     óV  — ddl m} t          |t          |f¦  «        s0t	          d                     |t          |¦  «        ¦  «        ¦  «        ‚| j        | j        z  |j        |j        z  cxk    rdk    s/n t          d| j        | j        f›d|j        |j        f›�¦  «        ‚|  
                    | j        | j        | d         |d         z  | d         |d         z  z
  | d         |d         z  | d         |d         z  z
  | d         |d         z  | d         |d         z  z
  f¦  «        S )	a-  
        Return the cross product of ``self`` and ``b`` relaxing the condition
        of compatible dimensions: if each has 3 elements, a matrix of the
        same type and shape as ``self`` will be returned. If ``b`` has the same
        shape as ``self`` then common identities for the cross product (like
        `a \times b = - b \times a`) will hold.

        Parameters
        ==========
            b : 3x1 or 1x3 Matrix

        See Also
        ========

        dot
        hat
        vee
        multiply
        multiply_elementwise
        r   )Ú
MatrixExprz{} must be a Matrix, not {}.r�   z(Dimensions incorrect for cross product: z x r/   rr  )rœ  r´  r  r�   r  rþ   r  r“   r”   r?   r�   )r¢   rø  r´  s      rœ   ÚcrosszMatrixBase.cross+  sQ  € ð* 	BÐAÐAÐAÐAÐAå˜!�j¨*Ð5Ñ6Ô6ð 	CÝØ.×5Ò5°a½¸a¹¼ÑAÔAñCô Cð Cð ”	˜DœIÑ%¨¬°!´&©Ð=Ð=Ò=Ð=¸AÒ=Ð=Ð=Ð=Ý�*Ø#œy¨$¬)Ð4Ð4Ð4°q´v¸q¼vÐ6FÐ6FðHñ Iô Ið Ið —9’9˜TœY¨¬	Ø�a”˜1˜Qœ4‘ $ q¤'¨A¨a¬D¡.Ñ0Ø�a”˜1˜Qœ4‘ $ q¤'¨A¨a¬D¡.Ñ0Ø�a”˜1˜Qœ4‘ $ q¤'¨A¨a¬D¡.Ñ0ð43ñ 4ô 4ð 4rŸ   c                ó²   — | j         dk    r$t          dt          | j         ¦  «        z   ¦  «        ‚| \  }}}|                      ddd| ||d| | |df	¦  «        S )aŒ  
        Return the skew-symmetric matrix representing the cross product,
        so that ``self.hat() * b`` is equivalent to  ``self.cross(b)``.

        Examples
        ========

        Calling ``hat`` creates a skew-symmetric 3x3 Matrix from a 3x1 Matrix:

        >>> from sympy import Matrix
        >>> a = Matrix([1, 2, 3])
        >>> a.hat()
        Matrix([
        [ 0, -3,  2],
        [ 3,  0, -1],
        [-2,  1,  0]])

        Multiplying it with another 3x1 Matrix calculates the cross product:

        >>> b = Matrix([3, 2, 1])
        >>> a.hat() * b
        Matrix([
        [-4],
        [ 8],
        [-4]])

        Which is equivalent to calling the ``cross`` method:

        >>> a.cross(b)
        Matrix([
        [-4],
        [ 8],
        [-4]])

        See Also
        ========

        dot
        cross
        vee
        multiply
        multiply_elementwise
        )r�   r/   z+Dimensions incorrect, expected (3, 1), got r�   r   )r¬   r?   r\  r�   )r¢   r  ÚyÚzs       rœ   ÚhatzMatrixBase.hatO  s~   € ðZ Œ:˜ÒÐÝÐJÝ  ¤™_œ_ñ-ñ .ô .ð .ð ‰GˆAˆq�!Ø—9’9˜Q Ø�Q�B˜Ø�Q˜˜Ø��Q˜ð$ñ ô ð rŸ   c                óþ   — | j         dk    r$t          dt          | j         ¦  «        z   ¦  «        ‚|                      ¦   «         st	          d¦  «        ‚|                      dd| d         | d         | d         f¦  «        S )	ap  
        Return a 3x1 vector from a skew-symmetric matrix representing the cross product,
        so that ``self * b`` is equivalent to  ``self.vee().cross(b)``.

        Examples
        ========

        Calling ``vee`` creates a vector from a skew-symmetric Matrix:

        >>> from sympy import Matrix
        >>> A = Matrix([[0, -3, 2], [3, 0, -1], [-2, 1, 0]])
        >>> a = A.vee()
        >>> a
        Matrix([
        [1],
        [2],
        [3]])

        Calculating the matrix product of the original matrix with a vector
        is equivalent to a cross product:

        >>> b = Matrix([3, 2, 1])
        >>> A * b
        Matrix([
        [-4],
        [ 8],
        [-4]])

        >>> a.cross(b)
        Matrix([
        [-4],
        [ 8],
        [-4]])

        ``vee`` can also be used to retrieve angular velocity expressions.
        Defining a rotation matrix:

        >>> from sympy import rot_ccw_axis3, trigsimp
        >>> from sympy.physics.mechanics import dynamicsymbols
        >>> theta = dynamicsymbols('theta')
        >>> R = rot_ccw_axis3(theta)
        >>> R
        Matrix([
        [cos(theta(t)), -sin(theta(t)), 0],
        [sin(theta(t)),  cos(theta(t)), 0],
        [            0,              0, 1]])

        We can retrieve the angular velocity:

        >>> Omega = R.T * R.diff()
        >>> Omega = trigsimp(Omega)
        >>> Omega.vee()
        Matrix([
        [                      0],
        [                      0],
        [Derivative(theta(t), t)]])

        See Also
        ========

        dot
        cross
        hat
        multiply
        multiply_elementwise
        )r�   r�   z+Dimensions incorrect, expected (3, 3), got zMatrix is not skew-symmetricr�   r/   )rr  r/   )r   rr  )r/   r   )r¬   r?   r\  r  r+  r�   r«   s    rœ   ÚveezMatrixBase.vee†  sŽ   € ðH Œ:˜ÒÐÝÐJÝ  ¤™_œ_ñ-ñ .ô .ð .à×'Ò'Ñ)Ô)ð 	ÝÐ;Ñ<Ô<Ð<à—9’9˜Q Ø�d”Ø�d”Ø�d”ð$ñ ô ð rŸ   c                óX   — ddl m} | j        dk    rt          ‚| j         |d¦  «        z  S )a¹  Return Dirac conjugate (if ``self.rows == 4``).

        Examples
        ========

        >>> from sympy import Matrix, I, eye
        >>> m = Matrix((0, 1 + I, 2, 3))
        >>> m.D
        Matrix([[0, 1 - I, -2, -3]])
        >>> m = (eye(4) + I*eye(4))
        >>> m[0, 3] = 2
        >>> m.D
        Matrix([
        [1 - I,     0,      0,      0],
        [    0, 1 - I,      0,      0],
        [    0,     0, -1 + I,      0],
        [    2,     0,      0, -1 + I]])

        If the matrix does not have 4 rows an AttributeError will be raised
        because this property is only defined for matrices with 4 rows.

        >>> Matrix(eye(2)).D
        Traceback (most recent call last):
        ...
        AttributeError: Matrix has no attribute D.

        See Also
        ========

        sympy.matrices.matrixbase.MatrixBase.conjugate: By-element conjugation
        sympy.matrices.matrixbase.MatrixBase.H: Hermite conjugation
        r   )Úmgammar¼  )Úsympy.physics.matricesr½  r“   ÚAttributeErrorr‘  )r¢   r½  s     rœ   rw  zMatrixBase.DÕ  s?   € ðD 	2Ð1Ð1Ð1Ð1Ð1ØŒ9˜Š>ˆ>õ
 !Ð ØŒv˜˜˜q™	œ	Ñ!Ð!rŸ   c                ó˜  — ddl m} t          |t          ¦  «        s£t	          |¦  «        rut          |¦  «        | j        k    r?t          |¦  «        | j        k    r't          d| j	        ›dt          |¦  «        ›�¦  «        ‚|  
                     ||¦  «        ¦  «        S t          dt          |¦  «        z  ¦  «        ‚d| j	        vs	d|j	        vrt          ‚t          | ¦  «        t          |¦  «        k    rt          d| j	        ›d|j	        ›�¦  «        ‚| }t          |¦  «        }|j	        d|fk    r|                     d|¦  «        }|j	        |dfk    r|                     |d¦  «        }|�|€d}|r|€d}|dk    rA|d	v r|                     ¦   «         }n(|d
v r|                     ¦   «         }nt          d¦  «        ‚||z  d         S )a4  Return the dot or inner product of two vectors of equal length.
        Here ``self`` must be a ``Matrix`` of size 1 x n or n x 1, and ``b``
        must be either a matrix of size 1 x n, n x 1, or a list/tuple of length n.
        A scalar is returned.

        By default, ``dot`` does not conjugate ``self`` or ``b``, even if there are
        complex entries. Set ``hermitian=True`` (and optionally a ``conjugate_convention``)
        to compute the hermitian inner product.

        Possible kwargs are ``hermitian`` and ``conjugate_convention``.

        If ``conjugate_convention`` is ``"left"``, ``"math"`` or ``"maths"``,
        the conjugate of the first vector (``self``) is used.  If ``"right"``
        or ``"physics"`` is specified, the conjugate of the second vector ``b`` is used.

        Examples
        ========

        >>> from sympy import Matrix
        >>> M = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        >>> v = Matrix([1, 1, 1])
        >>> M.row(0).dot(v)
        6
        >>> M.col(0).dot(v)
        12
        >>> v = [3, 2, 1]
        >>> M.row(0).dot(v)
        10

        >>> from sympy import I
        >>> q = Matrix([1*I, 1*I, 1*I])
        >>> q.dot(q, hermitian=False)
        -3

        >>> q.dot(q, hermitian=True)
        3

        >>> q1 = Matrix([1, 1, 1*I])
        >>> q.dot(q1, hermitian=True, conjugate_convention="maths")
        1 - 2*I
        >>> q.dot(q1, hermitian=True, conjugate_convention="physics")
        1 + 2*I


        See Also
        ========

        cross
        multiply
        multiply_elementwise
        r/   r~  z&Dimensions incorrect for dot product: r3  z2`b` must be an ordered iterable or Matrix, not %s.NTÚmaths)rÁ  ÚleftÚmath)ÚphysicsÚrightz�Unknown conjugate_convention was entered. conjugate_convention must be one of the following: math, maths, left, physics or right.r   )rL  r  r  r�   r4   rÊ   r”   r“   r?   r¬   Údotr  r  r+   rW  r+  )r¢   rø  Ú	hermitianÚconjugate_conventionr  rÇ   rô   s          rœ   rÆ  zMatrixBase.dot   s  € ðh 	"Ð!Ð!Ð!Ð!Ð!å˜!�ZÑ(Ô(ð 
	Ý˜1‰~Œ~ð 	Ý�q‘6”6˜TœYÒ&Ð&­3¨q©6¬6°T´YÒ+>Ð+>Ý$˜*à œJ˜J˜J­¨A©¬¨ð0ñ1ô 1ð 1ð —x’x   q¡	¤	Ñ*Ô*Ð*åØHÝ˜‘G”Gññô ð ð �T”ZÐÐ Q¨a¬gÐ%5Ð%5ÝÐÝˆt‰9Œ9�˜A™œÒÐÝ�*ØBFÄ*À*À*ÈaÌgÈgÐVñXô Xð Xð ˆÝ�‰HŒHˆØŒ9˜˜A˜ÒÐØ—+’+˜a Ñ#Ô#ˆCØŒ7�q˜!�fÒÐØ—	’	˜!˜Q‘”ˆAð  Ð+°	Ð0AØˆIØð 	+Ð-Ð5Ø#*Ð à˜ÒÐØ#Ð'@Ð@Ð@Ø—m’m‘o”o��Ø%Ð)=Ð=Ð=Ø—K’K‘M”M��å ð "Tñ Uô Uð Uð �a‘˜Œ|ÐrŸ   c           
     ó0  — ddl m} | dd…dd…f         | j        }} ||¦  «        }|                      ¦   «         r|S t	          d|¦  «        D ]Y}t	          d|¦  «        D ]F}d}t	          d|¦  «        D ]"}|t          ||d|¦  «        |d|f         z  z  }Œ#||||f<   | |||f<   ŒGŒZt	          d|¦  «        D ]^}	d}t	          d|¦  «        D ]5}
t	          d|¦  «        D ]"}|t          d|	|
|¦  «        ||
|f         z  z  }Œ#Œ6|dz  }| |d|	f<   |||	df<   Œ_|S )aù  Returns the dual of a matrix.

        A dual of a matrix is:

        ``(1/2)*levicivita(i, j, k, l)*M(k, l)`` summed over indices `k` and `l`

        Since the levicivita method is anti_symmetric for any pairwise
        exchange of indices, the dual of a symmetric matrix is the zero
        matrix. Strictly speaking the dual defined here assumes that the
        'matrix' `M` is a contravariant anti_symmetric second rank tensor,
        so that the dual is a covariant second rank tensor.

        r   r  Nr/   rr  )r„  rš  r“   rL  rÐ   r"   )r¢   rš  rÓ   rô   Úworkr±   r²   Úacumr  rU  rÁ  rø  s               rœ   ÚdualzMatrixBase.dualf  s�  € ð 	)Ð(Ð(Ð(Ð(Ð(à�A�A�A�q�q�q�DŒz˜4œ9ˆ1ˆØˆu�Q‰xŒxˆØ×ÒÑÔð 	ØˆKå�q˜!‘”ð 	#ð 	#ˆAÝ˜1˜a‘[”[ð #ð #�Ø�Ý˜q !™œð =ð =�AØ�J q¨!¨Q°Ñ2Ô2°Q°q¸!°t´WÑ<Ñ<�D�DØ!��Q˜�T‘
Ø"˜U��Q˜�T‘
�
ð#õ �q˜!‘”ð 	ð 	ˆAØˆDÝ˜1˜a‘[”[ð =ð =�Ý˜q !™œð =ð =�AØ�J q¨!¨Q°Ñ2Ô2°Q°q¸!°t´WÑ<Ñ<�D�Dð=à�A‰IˆDØ˜ˆD��A�‰JØˆD��A�‰JˆJàˆrŸ   c                óÀ   ‡— | j         }| d         }t          |¦  «        Šˆfd„t          |¦  «        D ¦   «         }ddlm} |                       |||¦  «        ¦  «        S )a   A helper function to compute an exponential of a Jordan block
        matrix

        Examples
        ========

        >>> from sympy import Symbol, Matrix
        >>> l = Symbol('lamda')

        A trivial example of 1*1 Jordan block:

        >>> m = Matrix.jordan_block(1, l)
        >>> m._eval_matrix_exp_jblock()
        Matrix([[exp(lamda)]])

        An example of 3*3 Jordan block:

        >>> m = Matrix.jordan_block(3, l)
        >>> m._eval_matrix_exp_jblock()
        Matrix([
        [exp(lamda), exp(lamda), exp(lamda)/2],
        [         0, exp(lamda),   exp(lamda)],
        [         0,          0,   exp(lamda)]])

        References
        ==========

        .. [1] https://en.wikipedia.org/wiki/Matrix_function#Jordan_decomposition
        r  c                ó6   •— i | ]}|‰t          |¦  «        z  “ŒS r°   )r)   )rÃ   r±   Úexp_ls     €rœ   r*  z6MatrixBase._eval_matrix_exp_jblock.<locals>.<dictcomp>°  s&   ø€ Ð>Ð>Ð>¨Q��E�I a™LœLÑ(Ð>Ð>Ð>rŸ   r/   ©Úbanded)r“   r&   rÐ   ÚsparsetoolsrÑ  r)  )r¢   r^  rU  ÚbandsrÑ  rÏ  s        @rœ   Ú_eval_matrix_exp_jblockz"MatrixBase._eval_matrix_exp_jblockŽ  so   ø€ ð< ŒyˆØ�ŒJˆÝ�A‘”ˆà>Ð>Ð>Ð>µ%¸±+´+Ð>Ñ>Ô>ˆà'Ð'Ð'Ð'Ð'Ð'Ø�~Š~˜f˜f T¨5Ñ1Ô1Ñ2Ô2Ð2rŸ   c                óp  — t          |¦  «        t          |¦  «        }}| j        st          ‚|j        s"t	          d                     |¦  «        ¦  «        ‚||j        vr#t	          d                     ||¦  «        ¦  «        ‚|| j        v r#t	          d                     || ¦  «        ¦  «        ‚|                      ¦   «         }t          | 	                    ¦   «         ¦  «        }i }|}t          |dz
  ¦  «        D ]}t          ||¦  «        }|||dz   <   Œ| j        d         }|                      |¦  «        }	|                      |d¦  «        }
d}|D �]€}||         }|                     ||¦  «        |
|<   |
|         j        r6|
|         j        s)t	          d                     ||
|         ¦  «        ¦  «        ‚d}t          |¦  «        D ]}||	||f<   ||z  }Œ|dk    rîd„ t          |¦  «        D ¦   «         }d}|dk    rÍ|dz   }|dz  }||                              ||¦  «        }|j        r0|j        s)t	          d                     ||         |¦  «        ¦  «        ‚||
|<   t          |¦  «        D ]P}||z
  dz   dk    rd|	||f<   d||<   Œ||         ||z
  dz   z  ||<   ||         t#          |||z
  ¦  «        z  |	||f<   ŒQ|dz  }|dk    °Í|dz  }�Œ‚|	                     |
¦  «        }|                      |¦  «        }|                      |¦  «        }t          |¦  «        D ]}|||         |z  z   }|| z  }Œ|S )	a  
        Computes f(A) where A is a Square Matrix
        and f is an analytic function.

        Examples
        ========

        >>> from sympy import Symbol, Matrix, S, log

        >>> x = Symbol('x')
        >>> m = Matrix([[S(5)/4, S(3)/4], [S(3)/4, S(5)/4]])
        >>> f = log(x)
        >>> m.analytic_func(f, x)
        Matrix([
        [     0, log(2)],
        [log(2),      0]])

        Parameters
        ==========

        f : Expr
            Analytic Function
        x : Symbol
            parameter of f

        z{} must be a symbol.z{} must be a parameter of {}.z!{} must not be a parameter of {}.r/   r   z_Cannot evaluate the function because the function {} is not analytic at the given eigenvalue {}c                ó   — g | ]}d ‘ŒS r  r°   )rÃ   Úiis     rœ   rÈ   z,MatrixBase.analytic_func.<locals>.<listcomp>÷  s   € Ð,Ð,Ð,˜R�qÐ,Ð,Ð,rŸ   zaCannot evaluate the function because the derivative {} is not analytic at the given eigenvalue {})r   rK  r@   Ú	is_symbolr+  rþ   r¼  r×  Úmaxrµ  rÐ   r   r¬   rš  r~  Ú	is_numberÚ
is_complexrI  Úsolver’  )r¢   rK  r  ÚeigenÚmax_mulÚ
derivativeÚddr±   rô   r6  Úf_valrÛ   rŒ  rì   rÁ  ÚcoeÚderiÚd_irù   r  Úpres                        rœ   Úanalytic_funczMatrixBase.analytic_func¶  sª  € õ8 ˜‰{Œ{�H Q™KœKˆ1ˆØŒ~ð 	'Ý&Ð&ØŒ{ð 	?ÝÐ3×:Ò:¸1Ñ=Ô=Ñ>Ô>Ð>Ø�A”NÐ"Ð"ÝØ/×6Ò6°q¸!Ñ<Ô<ñ>ô >ð >à�Ô!Ð!Ð!ÝØ3×:Ò:¸1¸dÑCÔCñEô Eð Eð —’Ñ Ô ˆÝ�e—l’l‘n”nÑ%Ô%ˆØˆ
ØˆÝ�w ‘{Ñ#Ô#ð 	#ð 	#ˆAÝ�b˜!‘”ˆBØ "ˆJ�q˜1‘uÑÐØŒJ�qŒMˆØ�JŠJ�q‰MŒMˆØ—
’
˜1˜aÑ Ô ˆØˆàð !	ñ !	ˆAØ˜”(ˆCØŸš  1™œˆE�#‰JØ�SŒzÔ#ð ;¨E°#¬JÔ,Að ;Ý ð$ç$*¢F¨1¨e°C¬jÑ$9Ô$9ñ;ô ;ð ;ð ˆCÝ˜1‘X”Xð ð �Ø��#�q�&‘	Ø�q‘��Ø�QŠwˆwØ,Ð,¥5¨¡8¤8Ð,Ñ,Ô,�Ø�Ø˜A’g�gØ ™'�CØ˜1‘H�CØ$ TÔ*×/Ò/°°1Ñ5Ô5�CØ”}ð K¨S¬^ð KÝ(ð,ç,2ªF°:¸dÔ3CÀSÑ,IÔ,IñKô Kð Kð "%�E˜#‘JÝ" 1™XœXð <ð <˜Ø˜t™8 a™<¨1Ò,Ð,Ø()˜A˜c 1˜f™IØ%&˜C ™FØ$Ø!$ Q¤¨¨T©°A©Ñ!6˜˜A™Ø$'¨¤F­3¨q°!°d±(Ñ+;Ô+;Ñ$;˜˜#˜q˜&™	˜	Ø˜A‘I�Dð# ˜A’g�gð$ �1‰HˆC‰CØ�GŠG�E‰NŒNˆØ�jŠj˜‰mŒmˆØ�hŠh�q‰kŒkˆÝ�q‘”ð 	ð 	ˆAØ˜˜!œ˜S™‘.ˆCØ�4‰KˆCˆCØˆ
rŸ   c                ó<  — | j         st          d¦  «        ‚	 |                      ¦   «         \  }}|                     ¦   «         }n# t          $ r t          d¦  «        ‚w xY wd„ |D ¦   «         }ddlm}  ||Ž }|                     |d¬¦  «                             | 	                    ¦   «         d¬¦  «        }t          d„ |                      ¦   «         D ¦   «         ¦  «        r% t          | ¦  «        t          |¦  «        ¦  «        S  t          | ¦  «        |¦  «        S )	aƒ  Return the exponential of a square matrix.

        Examples
        ========

        >>> from sympy import Symbol, Matrix

        >>> t = Symbol('t')
        >>> m = Matrix([[0, 1], [-1, 0]]) * t
        >>> m.exp()
        Matrix([
        [    exp(I*t)/2 + exp(-I*t)/2, -I*exp(I*t)/2 + I*exp(-I*t)/2],
        [I*exp(I*t)/2 - I*exp(-I*t)/2,      exp(I*t)/2 + exp(-I*t)/2]])
        z0Exponentiation is valid only for square matricesz`Exponentiation is implemented only for matrices for which the Jordan normal form can be computedc                ó6   — g | ]}|                      ¦   «         ‘ŒS r°   )rÔ  ©rÃ   Úcells     rœ   rÈ   z"MatrixBase.exp.<locals>.<listcomp>.  s$   € ÐCÐCÐC°T�$×.Ò.Ñ0Ô0ÐCÐCÐCrŸ   r   ©rt  Nr  c              3  ó$   K  — | ]}|j         V — Œd S r¹   )Úis_real)rÃ   r©  s     rœ   rÅ   z!MatrixBase.exp.<locals>.<genexpr>3  s$   è è € Ð8Ð8 ˆuŒ}Ð8Ð8Ð8Ð8Ð8Ð8rŸ   )rK  r@   rö  r!  r>   r˜   r„  rt  r  rU  r  rµ  r  r   )r¢   r2  r3  ÚcellsÚblocksrt  ÚeJÚrets           rœ   r&   zMatrixBase.exp  sF  € ð Œ~ð 	DÝ&ØBñDô Dð Dð	tØ×#Ò#Ñ%Ô%‰DˆAˆqØ×%Ò%Ñ'Ô'ˆEˆEøÝð 	tð 	tð 	tÝ%Ørñtô tð tð	tøøøð DÐC¸UÐCÑCÔCˆØ'Ð'Ð'Ð'Ð'Ð'ØˆT�6ˆ]ˆà�jŠj˜¨ˆjÑ.Ô.×7Ò7¸¿º¹¼ÈTÐ7ÑRÔRˆÝÐ8Ð8¨$¯+ª+©-¬-Ð8Ñ8Ô8Ñ8Ô8ð 	#Ø•4˜‘:”:�b ™gœgÑ&Ô&Ð&à•4˜‘:”:˜c‘?”?Ð"s   ˜+A ÁAc                ó   — | j         }| d         }|j        r"t          d                     |¦  «        ¦  «        ‚dt	          |¦  «        i}t          d|¦  «        D ]}| | z   |z  ||<   Œddlm} |                       |||¦  «        ¦  «        S )az  Helper function to compute logarithm of a jordan block.

        Examples
        ========

        >>> from sympy import Symbol, Matrix
        >>> l = Symbol('lamda')

        A trivial example of 1*1 Jordan block:

        >>> m = Matrix.jordan_block(1, l)
        >>> m._eval_matrix_log_jblock()
        Matrix([[log(lamda)]])

        An example of 3*3 Jordan block:

        >>> m = Matrix.jordan_block(3, l)
        >>> m._eval_matrix_log_jblock()
        Matrix([
        [log(lamda),    1/lamda, -1/(2*lamda**2)],
        [         0, log(lamda),         1/lamda],
        [         0,          0,      log(lamda)]])
        r  zBCould not take logarithm or reciprocal for the given eigenvalue {}r   r/   rÐ  )	r“   rÊ  r>   rþ   r'   rÐ   rÒ  rÑ  r)  )r¢   r^  rU  rÓ  r±   rÑ  s         rœ   Ú_eval_matrix_log_jblockz"MatrixBase._eval_matrix_log_jblock8  s²   € ð0 ŒyˆØ�ŒJˆàŒ9ð 	+Ýð ß &¢ q¡	¤	ñ+ô +ð +ð •C˜‘F”F�ˆÝ�q˜$‘”ð 	)ð 	)ˆAØ˜" ! ™�} qÑ(ˆE�!‰HˆHà'Ð'Ð'Ð'Ð'Ð'Ø�~Š~˜f˜f T¨5Ñ1Ô1Ñ2Ô2Ð2rŸ   c                óö  — | j         st          d¦  «        ‚	 |r! || ¦  «                             ¦   «         \  }}n|                      ¦   «         \  }}|                     ¦   «         }n# t          $ r t          d¦  «        ‚w xY wd„ |D ¦   «         }ddlm}  ||Ž }|rB |||z   ||                     ¦   «         ¦  «        z  ¦  «        }|  	                    |¦  «        }n||z  |                     ¦   «         z  }|S )aH  Return the logarithm of a square matrix.

        Parameters
        ==========

        simplify : function, bool
            The function to simplify the result with.

            Default is ``cancel``, which is effective to reduce the
            expression growing for taking reciprocals and inverses for
            symbolic matrices.

        Examples
        ========

        >>> from sympy import S, Matrix

        Examples for positive-definite matrices:

        >>> m = Matrix([[1, 1], [0, 1]])
        >>> m.log()
        Matrix([
        [0, 1],
        [0, 0]])

        >>> m = Matrix([[S(5)/4, S(3)/4], [S(3)/4, S(5)/4]])
        >>> m.log()
        Matrix([
        [     0, log(2)],
        [log(2),      0]])

        Examples for non positive-definite matrices:

        >>> m = Matrix([[S(3)/4, S(5)/4], [S(5)/4, S(3)/4]])
        >>> m.log()
        Matrix([
        [         I*pi/2, log(2) - I*pi/2],
        [log(2) - I*pi/2,          I*pi/2]])

        >>> m = Matrix(
        ...     [[0, 0, 0, 1],
        ...      [0, 0, 1, 0],
        ...      [0, 1, 0, 0],
        ...      [1, 0, 0, 0]])
        >>> m.log()
        Matrix([
        [ I*pi/2,       0,       0, -I*pi/2],
        [      0,  I*pi/2, -I*pi/2,       0],
        [      0, -I*pi/2,  I*pi/2,       0],
        [-I*pi/2,       0,       0,  I*pi/2]])
        z+Logarithm is valid only for square matricesz[Logarithm is implemented only for matrices for which the Jordan normal form can be computedc                ó6   — g | ]}|                      ¦   «         ‘ŒS r°   )ró  ré  s     rœ   rÈ   z"MatrixBase.log.<locals>.<listcomp>£  s4   € ð ð ð àð ×(Ò(Ñ*Ô*ðð ð rŸ   r   rë  )
rK  r@   rö  r!  r>   r˜   r„  rt  rU  r)  )	r¢   r  r2  r3  rî  rï  rt  rð  rñ  s	            rœ   r'   zMatrixBase.log_  sG  € ðh Œ~ð 	?Ý&Ø=ñ?ô ?ð ?ð
	:Øð *Ø�x ‘~”~×1Ò1Ñ3Ô3‘��1�1à×'Ò'Ñ)Ô)‘��1à×%Ò%Ñ'Ô'ˆEˆEøÝð 	:ð 	:ð 	:Ý%ð9ñ:ô :ð :ð	:øøøð
ð àðñ ô ˆð 	(Ð'Ð'Ð'Ð'Ð'ØˆT�6ˆ]ˆàð 	#Ø�(˜1˜r™6 H H¨Q¯UªU©W¬WÑ$5Ô$5Ñ5Ñ6Ô6ˆCØ—.’. Ñ%Ô%ˆCˆCà�b‘&˜1Ÿ5š5™7œ7Ñ"ˆCàˆ
s   ˜AA' Á'Bc                óÀ   — | sdS | j         st          d¦  «        ‚t          d| d„ ¬¦  «        }|                      |¦  «        }|j        d         || j        z  k    rdS dS )a“  Checks if a matrix is nilpotent.

        A matrix B is nilpotent if for some integer k, B**k is
        a zero matrix.

        Examples
        ========

        >>> from sympy import Matrix
        >>> a = Matrix([[0, 0, 0], [1, 0, 0], [1, 1, 0]])
        >>> a.is_nilpotent()
        True

        >>> a = Matrix([[1, 0, 1], [1, 0, 0], [1, 1, 0]])
        >>> a.is_nilpotent()
        False
        Tz,Nilpotency is valid only for square matricesr  c                ó   — d| z   S )Nrõ   r°   )r¸  s    rœ   rÍ  z)MatrixBase.is_nilpotent.<locals>.<lambda>È  s
   € ¸cÀA¹g€ rŸ   )Úmodifyr   F)rK  r@   r.   r	  rš   r“   )r¢   r  r
  s      rœ   Úis_nilpotentzMatrixBase.is_nilpotent±  s~   € ð$ ð 	Ø�4ØŒ~ð 	@Ý&Ø>ñ@ô @ð @å! # tÐ4EÐ4EÐFÑFÔFˆØ�MŠM˜!ÑÔˆØŒ6�!Œ9˜˜TœY™Ò&Ð&Ø�4ØˆurŸ   c                ó”  — d„ |D ¦   «         \  }}|r8| j         sdx}}nL|d                              | j         ¦  «        dd…         \  }}n t          |d         | j         ¦  «        }|dz   }|r8| j        sdx}}nL|d                              | j        ¦  «        dd…         \  }}n t          |d         | j        ¦  «        }|dz   }||||fS )zçConverts a key with potentially mixed types of keys (integer and slice)
        into a tuple of ranges and raises an error if any index is out of ``self``'s
        range.

        See Also
        ========

        key2ij
        c                ó8   — g | ]}t          |t          ¦  «        ‘ŒS r°   )r  r¥  )rÃ   r  s     rœ   rÈ   z)MatrixBase.key2bounds.<locals>.<listcomp>Ø  s"   € Ð=Ð=Ð=°1�* Q­Ñ.Ô.Ð=Ð=Ð=rŸ   r   Nrr  r/   )r“   rÌ   r  r”   )r¢   ÚkeysÚisliceÚjsliceÚrloÚrhiÚcloÚchis           rœ   Ú
key2boundszMatrixBase.key2boundsÎ  sì   € ð >Ð=¸Ð=Ñ=Ô=‰ˆ�Øð 	Ø”9ð :Ø���c�cà œ7Ÿ?š?¨4¬9Ñ5Ô5°b°q°bÔ9‘��S�Så˜˜Qœ ¤Ñ+Ô+ˆCØ˜‘'ˆCØð 	Ø”9ð :Ø���c�cà œ7Ÿ?š?¨4¬9Ñ5Ô5°b°q°bÔ9‘��S�Så˜˜Qœ ¤Ñ+Ô+ˆCØ˜‘'ˆCØ�C˜˜cÐ!Ð!rŸ   c                ó€  — t          |¦  «        rAt          |¦  «        dk    st          d¦  «        ‚d„ t          || j        ¦  «        D ¦   «         S t          |t          ¦  «        r*|                     t          | ¦  «        ¦  «        dd…         S t          t          |t          | ¦  «        ¦  «        | j
        ¦  «        S )zàConverts key into canonical form, converting integers or indexable
        items into valid integers for ``self``'s range or returning slices
        unchanged.

        See Also
        ========

        key2bounds
        rr  z"key must be a sequence of length 2c                ób   — g | ],\  }}t          |t          ¦  «        st          ||¦  «        n|‘Œ-S r°   )r  r¥  r  )rÃ   r±   rô   s      rœ   rÈ   z%MatrixBase.key2ij.<locals>.<listcomp>ø  sG   € ð 6ð 6ð 6Ù˜˜1õ (2°!µUÑ';Ô';ÐB•E˜!˜Q‘K”K�KÀð 6ð 6ð 6rŸ   N)r4   rÊ   r  Úzipr¬   r  r¥  rÌ   r)  r  r”   r¦   s     rœ   r¦  zMatrixBase.key2ijë  s´   € õ �sÑÔð 	<Ý�s‘8”8˜q’=�=ÝÐ DÑEÔEÐEð6ð 6Ý # C¨¬Ñ 4Ô 4ð6ñ 6ô 6ð 6å˜�UÑ#Ô#ð 	<Ø—;’;�s 4™yœyÑ)Ô)¨"¨1¨"Ô-Ð-å�% ¥S¨¡Y¤YÑ/Ô/°´Ñ;Ô;Ð;rŸ   c                ó  ‡— | j         dk    r| j        dk    rt          d¦  «        ‚|                      ¦   «         Š |‰¦  «        r!|                      | j         | j        ¦  «        }n|                      ˆfd„¦  «        }|S )a£  Return the normalized version of ``self``.

        Parameters
        ==========

        iszerofunc : Function, optional
            A function to determine whether ``self`` is a zero vector.
            The default ``_iszero`` tests to see if each element is
            exactly zero.

        Returns
        =======

        Matrix
            Normalized vector form of ``self``.
            It has the same length as a unit vector. However, a zero vector
            will be returned for a vector with norm 0.

        Raises
        ======

        ShapeError
            If the matrix is not in a vector form.

        See Also
        ========

        norm
        r/   z'A Matrix must be a vector to normalize.c                ó   •— | ‰z  S r¹   r°   )r±   Únorms    €rœ   rÍ  z'MatrixBase.normalized.<locals>.<lambda>#  s   ø€ ¨1¨t©8€ rŸ   )r“   r”   r?   r	  rš  rG  )r¢   rh  rO  r	  s      @rœ   Ú
normalizedzMatrixBase.normalizedÿ  s�   ø€ ð< Œ9˜Š>ˆ>˜dœi¨1šn˜nÝÐFÑGÔGÐGØ�yŠy‰{Œ{ˆØˆ:�dÑÔð 	5Ø—*’*˜TœY¨¬	Ñ2Ô2ˆCˆCà—.’.Ð!3Ð!3Ð!3Ð!3Ñ4Ô4ˆCØˆ
rŸ   c                ó”  ‡‡— t          |                      ¦   «         ¦  «        pdg}t          j        | j        v rÔ‰dv r t          t          d„ |D ¦   «         Ž ¦  «        S ‰dk    rt          d„ |D ¦   «         Ž S ‰t          j        u rt          d„ |D ¦   «         Ž S ‰t          j	        u rt          d„ |D ¦   «         Ž S 	 t          t          ˆfd„|D ¦   «         Ž t          j        ‰z  ¦  «        S # t          t          f$ r t          d	¦  «        ‚w xY w‰dk    rA|                      t           ¦  «        Št          ˆfd
„t#          ‰j        ¦  «        D ¦   «         Ž S ‰dk    rt          |                      ¦   «         Ž S ‰dk    rt          |                      ¦   «         Ž S ‰t          j        u rA|                      t           ¦  «        Št          ˆfd„t#          ‰j        ¦  «        D ¦   «         Ž S ‰�+t+          ‰t,          ¦  «        r>‰                     ¦   «         dv r(|                      ¦   «                              d¬¦  «        S t          d¦  «        ‚)a  Return the Norm of a Matrix or Vector.

        In the simplest case this is the geometric size of the vector
        Other norms can be specified by the ord parameter


        =====  ============================  ==========================
        ord    norm for matrices             norm for vectors
        =====  ============================  ==========================
        None   Frobenius norm                2-norm
        'fro'  Frobenius norm                - does not exist
        inf    maximum row sum               max(abs(x))
        -inf   --                            min(abs(x))
        1      maximum column sum            as below
        -1     --                            as below
        2      2-norm (largest sing. value)  as below
        -2     smallest singular value       as below
        other  - does not exist              sum(abs(x)**ord)**(1./ord)
        =====  ============================  ==========================

        Examples
        ========

        >>> from sympy import Matrix, Symbol, trigsimp, cos, sin, oo
        >>> x = Symbol('x', real=True)
        >>> v = Matrix([cos(x), sin(x)])
        >>> trigsimp( v.norm() )
        1
        >>> v.norm(10)
        (sin(x)**10 + cos(x)**10)**(1/10)
        >>> A = Matrix([[1, 1], [1, 1]])
        >>> A.norm(1) # maximum sum of absolute values of A is 2
        2
        >>> A.norm(2) # Spectral norm (max of |Ax|/|x| under 2-vector-norm)
        2
        >>> A.norm(-2) # Inverse spectral norm (smallest singular value)
        0
        >>> A.norm() # Frobenius Norm
        2
        >>> A.norm(oo) # Infinity Norm
        2
        >>> Matrix([1, -2]).norm(oo)
        2
        >>> Matrix([-1, 2]).norm(-oo)
        1

        See Also
        ========

        normalized
        r   ©rr  Nc              3  ó:   K  — | ]}t          |¦  «        d z  V — ŒdS r  ©rv  r  s     rœ   rÅ   z"MatrixBase.norm.<locals>.<genexpr>^  s,   è è € Ð!<Ð!<°!¥# a¡&¤&¨A¡+Ð!<Ð!<Ð!<Ð!<Ð!<Ð!<rŸ   r/   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r¹   r  r  s     rœ   rÅ   z"MatrixBase.norm.<locals>.<genexpr>a  s(   è è € Ð2Ð2¨�S ™VœVÐ2Ð2Ð2Ð2Ð2Ð2rŸ   c                ó,   — g | ]}t          |¦  «        ‘ŒS r°   r  r  s     rœ   rÈ   z#MatrixBase.norm.<locals>.<listcomp>d  ó   € Ð2Ð2Ð2¨�S ™VœVÐ2Ð2Ð2rŸ   c                ó,   — g | ]}t          |¦  «        ‘ŒS r°   r  r  s     rœ   rÈ   z#MatrixBase.norm.<locals>.<listcomp>g  r  rŸ   c              3  ó<   •K  — | ]}t          |¦  «        ‰z  V — Œd S r¹   r  )rÃ   r±   Úords     €rœ   rÅ   z"MatrixBase.norm.<locals>.<genexpr>l  s-   øè è € Ð =Ð =°1¥ Q¡¤¨3¡Ð =Ð =Ð =Ð =Ð =Ð =rŸ   z'Expected order to be Number, Symbol, ooc                óT   •— g | ]$}t          ‰                     |¦  «        ¦  «        ‘Œ%S r°   )rh  r³   ©rÃ   r±   rŒ  s     €rœ   rÈ   z#MatrixBase.norm.<locals>.<listcomp>t  ó)   ø€ ÐBÐBÐB¨q�S §¢ q¡¤™]œ]ÐBÐBÐBrŸ   rr  éþÿÿÿc                óT   •— g | ]$}t          ‰                     |¦  «        ¦  «        ‘Œ%S r°   )rh  rÛ   r  s     €rœ   rÈ   z#MatrixBase.norm.<locals>.<listcomp>€  r  rŸ   N)rK  ÚfroÚ	frobeniusÚvector)r  zMatrix Norms under development)rÉ   rµ  r#   ÚOner¬   r    r   ÚInfinityr   ÚNegativeInfinityr   r-   r˜   r  r+  rG  rv  rÐ   r”   rû  r“   r  r\  r`  rI  r	  )r¢   r  r[  rŒ  s    ` @rœ   r	  zMatrixBase.norm&  sc  øø€ õj �D—K’K‘M”MÑ"Ô"Ð) q cˆÝŒ5�D”JÐÐØ�iÐÐÝ�CÐ!<Ð!<°tÐ!<Ñ!<Ô!<Ð=Ñ>Ô>Ð>à˜’�ÝÐ2Ð2¨TÐ2Ñ2Ô2Ð3Ð3à�œ
Ð"Ð"ÝÐ2Ð2¨TÐ2Ñ2Ô2Ð3Ð3à�Ô*Ð*Ð*ÝÐ2Ð2¨TÐ2Ñ2Ô2Ð3Ð3ðLÝ�3Ð =Ð =Ð =Ð =¸Ð =Ñ =Ô =Ð>ÅÄÈÁÑLÔLÐLøÝ'­Ð3ð Lð Lð LÝ Ð!JÑKÔKÐKðLøøøð
 �aŠxˆxØ—N’N¥3Ñ'Ô'�ÝÐBÐBÐBÐBµE¸!¼&±M´MÐBÑBÔBÐCÐCà˜’�å˜D×0Ò0Ñ2Ô2Ð3Ð3à˜’�å˜D×0Ò0Ñ2Ô2Ð3Ð3à�œ
Ð"Ð"Ø—N’N¥3Ñ'Ô'�ÝÐBÐBÐBÐBµE¸!¼&±M´MÐBÑBÔBÐCÐCà�+¥¨CÝ,/ñ"1ô "1�+Ø58·Y²Y±[´[Ø3ð64ð 64ð —x’x‘z”z—’¨1�Ñ-Ô-Ð-õ *Ð*JÑKÔKÐKs   Â:/C* Ã*!Dr  c                ó�  — g }t          | j        ¦  «        D ]Œ}g }t          | j        ¦  «        D ]H}| ||f         dk    r|                     d¦  «         Œ&|                     t	          |¦  «        ¦  «         ŒI|                     dd                     |¦  «        z  ¦  «         Œ�t          d                     |¦  «        ¦  «         dS )a¶  Shows location of non-zero entries for fast shape lookup.

        Examples
        ========

        >>> from sympy import Matrix, eye
        >>> m = Matrix(2, 3, lambda i, j: i*3+j)
        >>> m
        Matrix([
        [0, 1, 2],
        [3, 4, 5]])
        >>> m.print_nonzero()
        [ XX]
        [XXX]
        >>> m = eye(4)
        >>> m.print_nonzero("x")
        [x   ]
        [ x  ]
        [  x ]
        [   x]

        r   ú z[%s]Ú ú
N)rÐ   r“   r”   rÒ   r\  ÚjoinÚprint)r¢   Úsymbr¸  r±   Úliner²   s         rœ   Úprint_nonzerozMatrixBase.print_nonzero‹  sÃ   € ð. ˆÝ�t”yÑ!Ô!ð 	-ð 	-ˆAØˆDÝ˜4œ9Ñ%Ô%ð +ð +�Ø˜˜1˜”: ’?�?Ø—K’K Ñ$Ô$Ð$Ð$à—K’K¥ D¡	¤	Ñ*Ô*Ð*Ð*Ø�HŠH�V˜bŸgšg d™mœmÑ+Ñ,Ô,Ð,Ð,Ýˆd�iŠi˜‰lŒlÑÔÐÐÐrŸ   c                ó^   — ||                       |¦  «        |                      |¦  «        z  z  S )a^  Return the projection of ``self`` onto the line containing ``v``.

        Examples
        ========

        >>> from sympy import Matrix, S, sqrt
        >>> V = Matrix([sqrt(3)/2, S.Half])
        >>> x = Matrix([[1, 0]])
        >>> V.project(x)
        Matrix([[sqrt(3)/2, 0]])
        >>> V.project(-x)
        Matrix([[sqrt(3)/2, 0]])
        )rÆ  )r¢   rú   s     rœ   ÚprojectzMatrixBase.project­  s(   € ð �D—H’H˜Q‘K”K !§%¢%¨¡(¤(Ñ*Ñ+Ð+rŸ   ú[r4  r#  r3  rÅ  c                ó¤  — t           j        | j        v rdS g }dg| j        z  }t	          | j        ¦  «        D ]Œ}	|                     g ¦  «         t	          | j        ¦  «        D ]`}
|                     | |	|
f         ¦  «        }|d                              |¦  «         t          t          |¦  «        ||
         ¦  «        ||
<   ŒaŒ�dddddddœ|         }t          |¦  «        D ]Z\  }	}t          |¦  «        D ]'\  }
} t          ||¦  «        ||
         ¦  «        ||
<   Œ(||                     |¦  «        z   |z   ||	<   Œ[|                     |¦  «        S )a¬  
        String form of Matrix as a table.

        ``printer`` is the printer to use for on the elements (generally
        something like StrPrinter())

        ``rowstart`` is the string used to start each row (by default '[').

        ``rowend`` is the string used to end each row (by default ']').

        ``rowsep`` is the string used to separate rows (by default a newline).

        ``colsep`` is the string used to separate columns (by default ', ').

        ``align`` defines how the elements are aligned. Must be one of 'left',
        'right', or 'center'.  You can also use '<', '>', and '^' to mean the
        same thing, respectively.

        This is used by the string printer for Matrix.

        Examples
        ========

        >>> from sympy import Matrix, StrPrinter
        >>> M = Matrix([[1, 2], [-33, 4]])
        >>> printer = StrPrinter()
        >>> M.table(printer)
        '[  1, 2]\n[-33, 4]'
        >>> print(M.table(printer))
        [  1, 2]
        [-33, 4]
        >>> print(M.table(printer, rowsep=',\n'))
        [  1, 2],
        [-33, 4]
        >>> print('[%s]' % M.table(printer, rowsep=',\n'))
        [[  1, 2],
        [-33, 4]]
        >>> print(M.table(printer, colsep=' '))
        [  1 2]
        [-33 4]
        >>> print(M.table(printer, align='center'))
        [ 1 , 2]
        [-33, 4]
        >>> print(M.table(printer, rowstart='{', rowend='}'))
        {  1, 2}
        {-33, 4}
        z[]r   r�  ÚljustÚrjustÚcenter)rÂ  rÅ  r/  ú<ú>ú^)r#   r©  r¬   r”   rÐ   r“   rÒ   Ú_printrÙ  rÊ   r  rS  r$  )r¢   ra  ÚrowstartÚrowendr_  ÚcolsepÚalignÚresÚmaxlenr±   r²   r¸  rÛ   Úelems                 rœ   r`  zMatrixBase.table½  ss  € õd Œ6�T”ZÐÐØ�4àˆà��t”y‘ˆÝ�t”yÑ!Ô!ð 	3ð 	3ˆAØ�JŠJ�r‰NŒNˆNÝ˜4œ9Ñ%Ô%ð 3ð 3�Ø—N’N 4¨¨1¨¤:Ñ.Ô.�Ø�B”—’˜qÑ!Ô!Ð!Ý¥ A¡¤¨¨q¬	Ñ2Ô2��q‘	�	ð3ð ØØØØØð
ð 
ð ôˆõ   ‘n”nð 	:ð 	:‰FˆAˆsÝ$ S™>œ>ð 9ð 9‘��4Ø-�  uÑ-Ô-¨f°Q¬iÑ8Ô8��A‘�Ø §¢¨CÑ 0Ô 0Ñ0°6Ñ9ˆC�‰FˆFØ�{Š{˜3ÑÔÐrŸ   c                ó&   — t          | ||¬¦  «        S r–  )r~   r—  s      rœ   Úrank_decompositionzMatrixBase.rank_decomposition
  s    € Ý" 4°JØ!ð#ñ #ô #ð 	#rŸ   c                ó    — t          d¦  «        ‚©Nz;This function is implemented in DenseMatrix or SparseMatrixr—   ©r¢   rÇ  s     rœ   ÚcholeskyzMatrixBase.cholesky  ó   € Ý!Ð"_Ñ`Ô`Ð`rŸ   c                ó    — t          d¦  «        ‚r>  r—   r?  s     rœ   ÚLDLdecompositionzMatrixBase.LDLdecomposition  rA  rŸ   c                ó(   — t          | |||¬¦  «        S ©N)rh  rÌ  Ú	rankcheck)r�   ©r¢   rh  rÌ  rF  s       rœ   ÚLUdecompositionzMatrixBase.LUdecomposition  s"   € å °ÀhØ#ð%ñ %ô %ð 	%rŸ   c                ó(   — t          | |||¬¦  «        S rE  )r‚   rG  s       rœ   ÚLUdecomposition_Simplez!MatrixBase.LUdecomposition_Simple  s"   € å& t¸
Ø!¨Yð8ñ 8ô 8ð 	8rŸ   c                ó    — t          | ¦  «        S r¹   )rƒ   r«   s    rœ   ÚLUdecompositionFFzMatrixBase.LUdecompositionFF  s   € Ý! $Ñ'Ô'Ð'rŸ   c                ó    — t          | ¦  «        S r¹   )r„   r«   s    rœ   Úsingular_value_decompositionz'MatrixBase.singular_value_decomposition!  s   € Ý,¨TÑ2Ô2Ð2rŸ   c                ó    — t          | ¦  «        S r¹   )r…   r«   s    rœ   ÚQRdecompositionzMatrixBase.QRdecomposition$  rü  rŸ   c                ó    — t          | ¦  «        S r¹   )r†   r«   s    rœ   Úupper_hessenberg_decompositionz)MatrixBase.upper_hessenberg_decomposition'  s   € Ý.¨tÑ4Ô4Ð4rŸ   c                ó"   — t          | |¦  «        S r¹   )rW   ©r¢   rš  s     rœ   Údiagonal_solvezMatrixBase.diagonal_solve*  ó   € Ý˜t SÑ)Ô)Ð)rŸ   c                ó    — t          d¦  «        ‚r>  r—   rT  s     rœ   Úlower_triangular_solvez!MatrixBase.lower_triangular_solve-  rA  rŸ   c                ó    — t          d¦  «        ‚r>  r—   rT  s     rœ   Úupper_triangular_solvez!MatrixBase.upper_triangular_solve0  rA  rŸ   c                ó"   — t          | |¦  «        S r¹   )rZ   rT  s     rœ   Úcholesky_solvezMatrixBase.cholesky_solve3  rV  rŸ   c                ó"   — t          | |¦  «        S r¹   )r[   rT  s     rœ   ÚLDLsolvezMatrixBase.LDLsolve6  s   € Ý˜˜sÑ#Ô#Ð#rŸ   c                ó&   — t          | ||¬¦  «        S rg  )r\   )r¢   rš  rh  s      rœ   ÚLUsolvezMatrixBase.LUsolve9  s   € Ý˜˜c¨jÐ9Ñ9Ô9Ð9rŸ   c                ó"   — t          | |¦  «        S r¹   )r]   r®  s     rœ   ÚQRsolvezMatrixBase.QRsolve<  s   € Ý˜˜aÑ Ô Ð rŸ   c                ó&   — t          | ||¬¦  «        S )N)Úfreevar)r^   )r¢   r%  rd  s      rœ   Úgauss_jordan_solvezMatrixBase.gauss_jordan_solve?  s   € Ý" 4¨°GÐ<Ñ<Ô<Ð<rŸ   c                ó&   — t          | ||¬¦  «        S )N)Úarbitrary_matrix)r_   )r¢   r%  rg  s      rœ   Ú
pinv_solvezMatrixBase.pinv_solveB  s   € Ý˜4 Ð5EÐFÑFÔFÐFrŸ   Úlaplacec                ó&   — t          | ||¬¦  «        S )N)Ú
det_method)r`   )r¢   rš  rk  s      rœ   Úcramer_solvezMatrixBase.cramer_solveE  s   € Ý˜T 3°:Ð>Ñ>Ô>Ð>rŸ   ÚGJc                ó&   — t          | ||¬¦  «        S r{  )ra   ©r¢   rš  rY  s      rœ   rÜ  zMatrixBase.solveH  s   € Ý�d˜C¨Ð/Ñ/Ô/Ð/rŸ   ÚCHc                ó&   — t          | ||¬¦  «        S r{  )rb   ro  s      rœ   Úsolve_least_squareszMatrixBase.solve_least_squaresK  s   € Ý# D¨#°fÐ=Ñ=Ô=Ð=rŸ   ÚRDc                ó$   — t          | |¬¦  «        S r{  )rc   r}  s     rœ   ÚpinvzMatrixBase.pinvN  s   € Ý�T &Ð)Ñ)Ô)Ð)rŸ   c                ó$   — t          | |¬¦  «        S rg  )rd   rj  s     rœ   Úinverse_ADJzMatrixBase.inverse_ADJQ  ó   € Ý˜¨Ð4Ñ4Ô4Ð4rŸ   c                ó$   — t          | |¬¦  «        S rg  )rk   rj  s     rœ   Úinverse_BLOCKzMatrixBase.inverse_BLOCKT  s   € Ý˜$¨:Ð6Ñ6Ô6Ð6rŸ   c                ó$   — t          | |¬¦  «        S rg  )re   rj  s     rœ   Ú
inverse_GEzMatrixBase.inverse_GEW  ó   € Ý�t¨
Ð3Ñ3Ô3Ð3rŸ   c                ó$   — t          | |¬¦  «        S rg  )rf   rj  s     rœ   Ú
inverse_LUzMatrixBase.inverse_LUZ  r}  rŸ   c                ó$   — t          | |¬¦  «        S rg  )rg   rj  s     rœ   Ú
inverse_CHzMatrixBase.inverse_CH]  r}  rŸ   c                ó$   — t          | |¬¦  «        S rg  )rh   rj  s     rœ   Úinverse_LDLzMatrixBase.inverse_LDL`  rx  rŸ   c                ó$   — t          | |¬¦  «        S rg  )ri   rj  s     rœ   Ú
inverse_QRzMatrixBase.inverse_QRc  r}  rŸ   c                ó(   — t          | |||¬¦  «        S )N)rY  rh  Útry_block_diag)rj   )r¢   rY  rh  r‡  s       rœ   rU  zMatrixBase.invf  s"   € Ý�D °JØ-ð/ñ /ô /ð 	/rŸ   c                ó    — t          | ¦  «        S r¹   )r‡   r«   s    rœ   Úconnected_componentszMatrixBase.connected_componentsj  s   € Ý$ TÑ*Ô*Ð*rŸ   c                ó    — t          | ¦  «        S r¹   )rˆ   r«   s    rœ   Ú"connected_components_decompositionz-MatrixBase.connected_components_decompositionm  s   € Ý2°4Ñ8Ô8Ð8rŸ   c                ó    — t          | ¦  «        S r¹   )r‰   r«   s    rœ   Ústrongly_connected_componentsz(MatrixBase.strongly_connected_componentsp  s   € Ý-¨dÑ3Ô3Ð3rŸ   c                ó$   — t          | |¬¦  «        S )N)r`  )rŠ   )r¢   r`  s     rœ   Ú+strongly_connected_components_decompositionz6MatrixBase.strongly_connected_components_decompositions  s   € Ý;¸DÈÐNÑNÔNÐNrŸ   rh  )TTrã  )r^  r’   r¹   )NN)rØ  r9   )T)rz  Nr{  FFNF)TNTTTTTT)r“   r’  )r’  )FTNr  )ry  )r‡  N)r³   )r¡  NNNN)F)FFF)rØ  r=   )r  )r+  r4  r#  r3  rÅ  )ri  )rm  )rp  )rs  (€  Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_op_priorityÚ__array_priority__r•  Ú_class_priorityÚstaticmethodr   r   r#   r©  rê   r  rY  r‘   Ú__annotations__r1   Úclassmethodr�   r¤   r¨   Úpropertyr¬   r¶   r¼   rÀ   rÍ   rØ   rÜ   rà   rã   rè   rí   rñ   rö   rû   rÿ   r  r  r³   r  r!  r&  r+   r.  r0  r#  rø   rÛ   r,  r=  r@  rG  rI  rN  rP  rU  r\  rh  rm  ro  rz  rt  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  r'  r+  r-  r/  r1  r4  rK  r7  rL  r;  r=  r?  rµ  r¬  rÒ  rH  rQ  rS  rY  ra  re  ri  rm  rÉ  rG  rt  rW  ry  r…  r‰  r‘  r   r¦  r©  r	   r²  r¿  r  r~  rÍ  rF  ru  rÒ  rô   rÖ  rÚ  rà  rç  rë  rî  rò  rú  rý  r  r  r  r  r  r  r  r!  r7   r*  r-  r4  r7  r2  r  rD  rF  rJ  rI  r"  r.  r8  r^  rd  ra  rC   rk  rm  rB   ro  rq  rs  rw  r~  r  r	  r„  r†  r‰  r‹  r�  r�  rD   rE   rL   rM   rN   rO   rP   rK   rF   rG   rH   rI   rJ   rQ   rR   r’  r”  r˜  r›  rŸ  rT   rS   rU   rV   r«  r¯  r³  r·  r½  rÀ  rÃ  rÅ  rÈ  rÌ  rÎ  rÐ  rÓ  rl   rm   rn   ro   r×  rÙ  rÜ  rà  rå  rç  ré  rì  rï  rñ  ró  rö  rù  rû  rp   rq   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   rr   rs   r   r  r	  r  r  r   r  r  r  r  ry  r(  r*  r-  r/  r4  r6  r8  r=  r?  rB  rD  ÚobjectrM  rO  rO  r]  rb  rp  rx  r†  r¬  r¡  r±  rX  rµ  r¹  r»  rw  rÆ  rÌ  rÔ  ræ  r&   ró  r   r'   rù  r  r¦  r
  r	  r(  r*  r`  r<  r@  rC  rH  rJ  rL  rN  rP  rR  rU  rX  rZ  r\  r^  r`  rb  re  rh  rl  rÜ  rr  ru  rw  rz  r|  r  r�  rƒ  r…  rU  r‰  r‹  r�  r�  r   Ú_sage_r~   r   r€   r�   r‚   rƒ   r„   r…   r†   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rk   rj   r‡   rˆ   r‰   rŠ   r°   rŸ   rœ   r�   r�   c   s  € € € € € € ð5ð 5ð €Lð Ðà€IØ€OØˆ|˜GÑ$Ô$€HØŒ6€DØ
Œ%€Cà€IÐÐÐÑØ€I€I�IØ€I€I�IØ€IàðEð Eñ „[ðEðEð Eð EðEð Eð Eð ð&ð &ñ „Xð&ð":ð :ð :ð
	Cð 	Cð 	Cð	0ð 	0ð 	0ð4ð 4ð 4ðð ð ð*:ð :ð :ð
Eð Eð Eð	0ð 	0ð 	0ð;ð ;ð ;ðð ð ð ð.ð .ñ „[ð.ð	.ð 	.ð 	.ð'ð 'ð 'ð'ð 'ð 'ð'1ð '1ð '1ðR*ð *ð *ð@ð ð ð,<6ð <6ð <6ð|,ð ,ð ,ð4 ð*ð *ñ „[ð*ð&4ð 4ð 4ð6'ð 'ð 'ð(1ð (1ð (1ðT*ð *ð *ñ>0)ð 0)ð 0)ð 0)ðdð ð ð("ð "ð "ð ð3ð 3ñ „[ð3ð"#ð #ð #ð>ð ð ð2 ð  ð  ñ40)ð 0)ð 0)ð 0)ðd ð*ð *ñ „[ð*ð* ð+ð +ñ „[ð+ð ð6ð 6ñ „[ð6ð
 ñ+ñ +ð +ð +ñ „[ð+ð" ð+ð +ñ „[ð+ð
 ðHð Hñ „[ðHð ð	ð 	ñ „[ð	ð Ø %¨d¸ÀDð K:ð K:ð K:ð K:ñ „[ðK:ðZ ñ+ð +ð +ñ „[ð+ð. ñ_@¸gð _@ð _@ð _@ð _@ñ „[ð_@ðB ñ,ð ,ð ,ñ „[ð,ð( ñ-ð -ð -ñ „[ð-ð. ð'+ð '+ñ „[ð'+ðT ð%(ð %(ñ „[ð%(ðT4ð 4ð 4ð(ð (ð (ð-ð -ð -ð;ð ;ð ;ðJð Jð JðAð Að Að ð  ð  ðHð Hð Hð@ð @ð @ñFð Fð Fð FðQð Qð QðJð Jð JðJð Jð JðNð Nð NðNð Nð NðGð Gð GðHð Hð HðBð Bð BðEð Eð Eð(ð (ð (ð2 ð)ð )ñ „Xð)ð)ð )ð )ñ2E6ð E6ð E6ð E6ðN)(ð )(ð )(ðV ð/;ð /;ñ „Xð/;ðb ð/;ð /;ñ „Xð/;ðb ðCð Cñ „XðCðB ñ(ð (ð (ñ „Xð(ð
 ð0ð 0ñ „Xð0ð8 ð*%ð *%ñ „Xð*%ðX ð&ð &ñ „Xð&ð.(ð (ð (ñ>1ð >1ð >1ð >1ð@ ð0ð 0ñ „Xð0ð8 ð)%ð )%ñ „Xð)%ðV ð+ð +ñ „Xð+ð<#ð #ð #ð((ð (ð (ð&'ð 'ð 'ð&Að Að Aðð ð ð$8ð 8ð 8ð7ð 7ð 7ð6ð 6ð 6ð6ð 6ð 6ð9ð 9ð 9ðHð Hð Hð$ð $ð $ð'ð 'ð 'ñ.)ð )ð )ð )ð
&ð &ð &ð89ð 9ð 9ñ?ð ?ð ?ð ?ð JNØ;?ñð ð ð ð& ðð ñ „Xðñ2G1ð G1ð G1ð G1ñR	Lð 	Lð 	Lð 	Lñ	Lð 	Lð 	Lð 	Lñ@ð @ð @ð @ñ( Gð  Gð  Gð  GñD+$ð +$ð +$ð +$ðZ>ð >ð >ðAð Að Að*"ð "ð "ð$!&ð !&ð !&ðF ð ð  ñ „Xð ð ð ð  ñ „Xð ð+ð +ð +ð:ð :ð :ð">ð >ð >ð
=ð =ð =ñ$6ð $6ð $6ð $6ñL$6ð $6ð $6ð $6ðLMð Mð Mð@ð @ð @ð7ð 7ð 7ðRð Rð Rð7ð 7ð 7ð
	ð 	ð 	ðð ð ñ -ð -ð -ð -ð4Mð Mð MðMð Mð MðTð Tð Tð ð  ð  ð Ð˜:Ñ&Ô&ðð ñ 'Ô&ðð$ Ð˜>Ñ*Ô*ð)ð )ñ +Ô*ð)ð Ð˜=Ñ)Ô)ð#ð #ñ *Ô)ð#ð3ð 3ð 3ð Ð˜:Ñ&Ô&ð$ð $ñ 'Ô&ð$ñ<#"ð #"ð #"ð #"ðJ8ð 8ð 8ð4)ð )ð )ð Ð˜:Ñ&Ô&ðð ñ 'Ô&ðñ\ð \ð \ð \ð| Ð˜9Ñ%Ô%ð#ð #ñ &Ô%ð#ð Ð˜<Ñ(Ô(ð$ð $ñ )Ô(ð$ð Ð˜9Ñ%Ô%ð%ð %ñ &Ô%ð%ñ "ð  "ð  "ð  "ðD Ð˜9Ñ%Ô%ðð ñ &Ô%ðð Ð˜:Ñ&Ô&ðð ñ 'Ô&ðð ,Eð 9ð 9ð 9ð 9ð$ð $ð $ð '.¸ð Gð Gð Gð Gðð ð ð"ð "ð "ðð ð ñ.ð .ð .ð .ð "Ð,?ð 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Ôà&-¸È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ñ<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ñ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ÐÔ$à#'ð ð ð ð ñ ð85ð 5ñ 5ðFð Fñ Fð68@ð 8@ñ 8@ðt8ð 8ñ 8ð. $)¡5¨¡?¤?Ð=Pð "ð "ð "ñ "ð,ð ,ñ ,ð'ð 'ñ 'ðð ñ ð&/ð &/ñ &/ñP3ð 3ð 3ñ 3ð"ð "ñ "ð%ð %ñ %ð(>ð >ñ >ñ&ð &ð &ñ &ñ/ð /ð /ñ /ð*ð *ñ *ð=ð =ñ =ð<ð <ñ <ð ñ$ñ $ð $ñ „Xñ$ñPð Pñ Pñ( %¨4ð /ñ /ð /ñ /ñ%ð %ñ %ñ$ð $ñ $ñB1ð 1ñ 1ñ
Dñ Dð Dñ Dð ñ'ð 'ñ „[ñ'ðR ñ:ð :ñ „[ñ:ð  ña%ð a%ñ „[ña%ñFDð Dñ DñLð ñ ñ;ð ;ñ ;ñ0<ð <ñ <ñ""4ð "4ñ "4ñH5ð 5ñ 5ñnMð Mñ Mð^ ñ("ð ("ñ „Xñ("ñTdñ dð dñ dñL&ð &ñ &ñP%3ð %3ñ %3ñP\ð \ñ \ñ~!#ð !#ñ !#ñF%3ð %3ñ %3ñN "ð Pñ Pð Pñ Pñdð ñ ñ:"ð "ñ "ñ:<ð <ñ <ð( %,ð %ñ %ð %ñ %ñNcLñ cLð cLñ cLñJ ñ  ð  ñ  ñD,ð ,ñ ,ð  ?CØ!(ñK ñ K ð K ñ K ðZ -4¸eð #ñ #ð #ñ #ñañ að añ añañ að añ að *1¸4Øð%ñ %ð %ñ %ð
 18À$Øð8ñ 8ð 8ñ 8ñ
(ð (ñ (ñ3ð 3ñ 3ñ&ð &ñ &ñ5ð 5ñ 5ñ*ð *ñ *ñað añ añað añ añ*ð *ñ *ñ$ð $ñ $ð '.ð :ñ :ð :ñ :ñ!ð !ñ !ñ=ñ =ð =ñ =ñGñ Gð Gñ Gñ?ñ ?ð ?ñ ?ñ0ñ 0ð 0ñ 0ñ>ñ >ð >ñ >ñ*ñ *ð *ñ *ð &-ð 5ñ 5ð 5ñ 5ð (/ð 7ñ 7ð 7ñ 7ð %,ð 4ñ 4ð 4ñ 4ð %,ð 4ñ 4ð 4ñ 4ð %,ð 4ñ 4ð 4ñ 4ð &-ð 5ñ 5ð 5ñ 5ð %,ð 4ñ 4ð 4ñ 4ð ¨'À%ð /ñ /ð /ñ /ñ+ð +ñ +ñ9ð 9ñ 9ñ4ð 4ñ 4ñOñ Oð Oñ Oñ �\�Fá%8Ô%@ÑÔÙ%.Ô%6�HÔÙ%6Ô%>ÑÔÙ%5Ô%=�OÔÙ%<Ô%DÑÔ"Ù%7Ô%?ÑÔÙ+HÔ+PÑ Ô(Ù%5Ô%=�OÔÙ-LÔ-TÑ"Ô*á%4Ô%<�NÔÙ%<Ô%DÑÔ"Ù%<Ô%DÑÔ"Ù%4Ô%<�NÔÙ%.Ô%6�HÔÙ%-Ô%5�G„OÙ%-Ô%5�G„OÙ%8Ô%@ÑÔÙ%0Ô%8�JÔÙ%2Ô%:�LÔÙ%+¤^�E„MÙ%9Ô%AÑÔá%*¤]�D„LÙ%-Ô%5�KÔÙ%,¤_�JÔÙ%,¤_�JÔÙ%,¤_�JÔÙ%-Ô%5�KÔÙ%,¤_�JÔÙ%/Ô%7�MÔÙ%)¤\�C„Ká%:Ô%BÑÔ á+Ô3ñ 'Ô.ñ 	'Ô.ñ "Ô)ñ 	5Ô<ñ 0Ô7Ð7Ð7rŸ   r�   c                óž   — ddl m} t          |dd¦  «        r,t          ||¦  «        s | g |j        ¢t          |¦  «        ‘R Ž S  | |¦  «        S )z$Convert mat to a Matrix of type typ.r   r}  r•  F)r‚  r�   rS  r  r¬   rÉ   )ÚtyprÇ   r�   s      rœ   Ú_convert_matrixrŸ  ¢  sk   € à4Ð4Ð4Ð4Ð4Ð4Ýˆs�K Ñ'Ô'ð µ
¸3À
Ñ0KÔ0Kð ð
 ˆsÐ)�C”IÐ)�t C™yœyÐ)Ð)Ð)Ð)àˆs�3‰xŒxˆrŸ   c                ó|   — t          | dd ¦  «        }|€dS t          |t          ¦  «        ot          |¦  «        dk    S )Nr¬   Frr  )rS  r  r  rÊ   )r£   r¬   s     rœ   Ú_has_matrix_shaper¡  ¯  s<   € Ý�E˜7 DÑ)Ô)€EØ€}ØˆuÝ�e�UÑ#Ô#Ð7­¨E©
¬
°aªÐ7rŸ   c                óB   — t          | d¦  «        ot          | d¦  «        S )Nr“   r”   )r‡  )r£   s    rœ   Ú_has_rows_colsr£  ¶  s!   € Ý�5˜&Ñ!Ô!Ð<¥g¨e°VÑ&<Ô&<Ð<rŸ   c                ó  — d}t          |t          ¦  «        r|S t          |dd¦  «        }|r|dfS |€=t          |¦  «        st	          |¦  «        rt          t          | ¦  «        |¦  «        dfS t          |t          ¦  «        s|dfS |S )z8Convert other to a Matrix, or check for possible scalar.)NÚinvalid_typer•  Nr$  r;  )r  r:   rS  r¡  r£  rŸ  r  r   )r¢   r£   ÚINVALIDr•  s       rœ   r'  r'  º  s±   € ð #€Gõ �%�Ñ#Ô#ð Øˆå˜˜{¨DÑ1Ô1€Ið ð "Ø�kÐ!Ð!ð ÐÝ˜UÑ#Ô#ð 	C¥~°eÑ'<Ô'<ð 	CÝ"¥4¨¡:¤:¨uÑ5Ô5°{ÐBÐBõ �e�XÑ&Ô&ð (ØÐ'Ð'Ð'à€NrŸ   c                óh  — t          | dd¦  «        }t          |dd¦  «        }d||fvr| j        |j        k    r| j        S |j        S 	 ddl}t	          | |j        ¦  «        r|j        S t	          ||j        ¦  «        r| j        S n# t          $ r Y nw xY wt          d| j        ›d|j        ›�¦  «        ‚)aÎ  
    Get the type of the result when combining matrices of different types.

    Currently the strategy is that immutability is contagious.

    Examples
    ========

    >>> from sympy import Matrix, ImmutableMatrix
    >>> from sympy.matrices.matrixbase import classof
    >>> M = Matrix([[1, 2], [3, 4]]) # a Mutable Matrix
    >>> IM = ImmutableMatrix([[1, 2], [3, 4]])
    >>> classof(M, IM)
    <class 'sympy.matrices.immutable.ImmutableDenseMatrix'>
    r–  Nr   zIncompatible classes r3  )rS  r–  r)  Únumpyr  ÚndarrayÚImportErrorr  )r!  r%  Ú
priority_AÚ
priority_Br¨  s        rœ   r¿   r¿   Õ  sé   € õ  ˜Ð-¨tÑ4Ô4€JÝ˜Ð-¨tÑ4Ô4€JØ�J 
Ð+Ð+Ð+ØÔ˜qÔ0Ò0Ð0Ø”;Ðà”;ÐðØˆˆˆõ �a˜œÑ'Ô'ð 	Ø”;ÐÝ�a˜œÑ'Ô'ð 	Ø”;Ðð	øõ ð ð ð Øˆðøøøõ ˆ)°Q´[°[°[À!Ä+À+ÐNÑ
OÔ
OÐOs   ÁB Â
BÂBc                óÊ   — t          | |¦  «        \  }}|dk    rFt          | |¦  «        }|| j        k    rt          || ¦  «        } ||j        k    rt          ||¦  «        }| ||fS )zDUnify self and other into a single matrix type, or check for scalar.r$  )r'  r¿   r)  rŸ  )r¢   r£   ru  rž  s       rœ   r1  r1  ú  ss   € å˜t UÑ+Ô+�H€Eˆ1àˆKÒÐÝ�d˜EÑ"Ô"ˆØ�$”.Ò Ð Ý" 3¨Ñ-Ô-ˆDØ�%”/Ò!Ð!Ý# C¨Ñ/Ô/ˆEà�˜ˆ>ÐrŸ   c                ó  — t          | t          ¦  «        s1t          | dd¦  «        }|� |¦   «         } nt          d| ›d�¦  «        ‚|�*| dk     r| |z  } | dk    r| |k     st          d| ›d�¦  «        ‚t          | ¦  «        S )z>Return integer after making positive and validating against n.Ú	__index__NzInvalid index a[r4  r   zIndex out of range: a[)r  r’   rS  rý   )r²   rô   Újindexs      rœ   r  r    s™   € å�a�ÑÔð ;Ý˜˜K¨Ñ.Ô.ˆØÐØ�‘”ˆAˆAå�*°a°a°aÐ9Ñ:Ô:Ð:Ø€}ØˆqŠ5ˆ5Ø�‰FˆAØ�Q’�˜1˜qš5˜5Ý�*¸A¸A¸AÐ?Ñ@Ô@Ð@Ýˆq‰6Œ6€MrŸ   c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )r   a5  A vector whose components are deferred (e.g. for use with lambdify).

    Examples
    ========

    >>> from sympy import DeferredVector, lambdify
    >>> X = DeferredVector( 'X' )
    >>> X
    X
    >>> expr = (X[0] + 2, X[2] + 3)
    >>> func = lambdify( X, expr)
    >>> func( [1, 2, 3] )
    (3, 6)
    c                ór   — |dk    rd}|dk     rt          d¦  «        ‚d| j        |fz  }t          |¦  «        S )Nr   z!DeferredVector index out of rangez%s[%d])rý   Únamer   )r¢   r±   Úcomponent_names      rœ   r¨   zDeferredVector.__getitem__(  sF   € Ø�Š7ˆ7ØˆAØˆqŠ5ˆ5ÝÐ@ÑAÔAÐAØ! T¤Y° NÑ2ˆÝ�nÑ%Ô%Ð%rŸ   c                ó    — t          | ¦  «        S r¹   r   r«   s    rœ   r]  zDeferredVector.__str__0  rx  rŸ   c                ó   — d| j         z  S )NzDeferredVector('%s'))r³  r«   s    rœ   Ú__repr__zDeferredVector.__repr__3  s   € Ø%¨¬	Ñ1Ð1rŸ   N)r�  r‘  r’  r“  r¨   r]  r·  r°   rŸ   rœ   r   r     sK   € € € € € ðð ð&ð &ð &ðð ð ð2ð 2ð 2ð 2ð 2rŸ   r   r¹   )»Ú
__future__r   Úcollectionsr   Úcollections.abcr   Úinspectr   Ú	functoolsr   Úsympy.assumptions.refiner	   Ú
sympy.corer
   r   Úsympy.core.basicr   r   Úsympy.core.kindr   Úsympy.core.numbersr   Úsympy.core.modr   Úsympy.core.symbolr   r   Úsympy.core.sympifyr   r   Úsympy.core.functionr   Úsympy.polysr   Ú$sympy.functions.elementary.complexesr   r   r   Úsympy.printingr   Ú(sympy.functions.elementary.miscellaneousr   r   r    Ú(sympy.functions.special.tensor_functionsr!   r"   Úsympy.core.singletonr#   Úsympy.printing.defaultsr$   Úsympy.printing.strr%   Ú&sympy.functions.elementary.exponentialr&   r'   Ú(sympy.functions.combinatorial.factorialsr(   r)   Úmpmathrž  r*   Úsympy.utilities.iterablesr+   Úsympy.core.exprr,   Úsympy.core.powerr-   r.   Ú	utilitiesr0   r1   r  Úsympy.polys.polytoolsr2   r3   r4   Úsympy.utilities.miscr5   r6   Úsympy.core.decoratorsr7   Úsympy.core.logicr8   r9   Úsympy.tensor.arrayr:   r;   r<   rB  r=   Ú
exceptionsr>   r?   r@   rA   rB   rC   ÚdeterminantrD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   Ú
reductionsrS   rT   rU   rV   ÚsolversrW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   Úinverserc   rd   re   rf   rg   rh   ri   rj   rk   Ú	subspacesrl   rm   rn   ro   rÝ  rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   Údecompositionsr~   r   r€   r�   r‚   rƒ   r„   r…   r†   Úgraphr‡   rˆ   r‰   rŠ   Ú__doctest_requires__r�   rŸ  r¡  r£  r'  r¿   r1  r  r   r°   rŸ   rœ   ú<module>rã     sÕ  ðØ "Ð "Ð "Ð "Ð "Ð "Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø )Ð )Ð )Ð )Ð )Ð )Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ "Ð "Ð "Ð "Ð "Ð "Ø -Ð -Ð -Ð -Ð -Ð -Ø )Ð )Ð )Ð )Ð )Ð )Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hà Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø -Ð -Ð -Ð -Ð -Ð -Ø  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ &Ð &Ð &Ð &Ð &Ð &Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø (Ð (Ð (Ð (Ð (Ð (Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1à 2Ð 2Ð 2Ð 2Ð 2Ð 2à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ð>ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð >ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð KÐ 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ðVð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð
Rð Rð Rð Rð Rð Rð Rð Rð Rð Rð Rð Rð,ð /;¨^ðÐ ð|P=ð |P=ð |P=ð |P=ð |P=�ñ |P=ô |P=ð |P=ð~a
ð 
ð 
ð8ð 8ð 8ð=ð =ð =ðð ð ð6"Pð "Pð "PðJð ð ðð ð ð ð 2ð 2ð 2ð 2ð 2�V˜[ñ 2ô 2ð 2ð 2ð 2rŸ   