ó
    ‰*£h"… ã                  ó  • S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJrJr  S SKJrJr  S S	KJr  S S
KJr  S SKJr  S SKJrJr  S SKJrJr  S SKJr  S SK J!r!  S SK"J#r#J$r$J%r%  S SK&J'r'  S SK(J)r)J*r*J+r+  S SK,J-r-J.r.  S SK/J0r0  S SK1J2r2  S SK3J4r4  S SK5J6r6J7r7  S SK8J9r9J:r:  S SK;r<S SKJ=r=  S SK>J?r?  S SK@JArA  S SKBJCrC  S SKJDrD  SS KEJFrFJGrH  S S!KIJJrJ  S S"K>JKrKJLrL  S S#KMJNrNJOrO  S S$KPJQrQ  S S%KRJSrSJTrT  S S&KUJVrV  S S'K>JWrW  SS(KEJXrX  SS)KYJZrZ  SS*K[J\r\J]r]J^r^J_r_  SS+KEJ`r`Jara  SS,KbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrq  SS-KrJsrsJtrtJuruJvrv  SS.KwJxrxJyryJzrzJ{r{J|r|J}r}J~r~JrJ€r€J�r�J‚r‚Jƒrƒ  SS/K„J…r…J†r†J‡r‡JˆrˆJ‰r‰JŠrŠJ‹r‹JŒrŒJ�r�  SS0KŽJ�r�J�r�J‘r‘J’r’  SS1K“J”r”J•r•J–r–J—r—J˜r˜J™r™JšršJ›r›JœrœJ�r�JžržJŸrŸJ r J¡r¡  SS2K¢J£r£J¤r¤J¥r¥J¦r¦J§r§J¨r¨J©r©JªrªJ«r«  SS3K¬J­r­J®r®J¯r¯J°r°  S4S5/0r± " S6 S7\25      r²S8 r³S9 r´S: rµS; r¶S< r·S= r¸SAS> jr¹ " S? S@\\W5      rºg)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                  ó�  • \ rS rSr% SrSrSrSrSr\	" \
5      r\R                  r\R                  rSrS\S'   S	\S
'   S	\S'   Sr\S 5       rS rS r\S 5       rS rS rS rS rS rS rS r S r!S r"S r#\S 5       r$S r%S r&S r'S r(S  r)S! r*S" r+S# r,\S$ 5       r-S% r.S& r/S' r0S( r1GS9S) jr2S* r3S+ r4\S, 5       r5S- r6S. r7S/ r8GS:S0 jr9\S1 5       r:\S2 5       r;\S3 5       r<\GS;GS<S5 jj5       r=\S6 5       r>\S7 5       r?\S8 5       r@\S9SSSS:.S; j5       rA\GS=S< j5       rB\GS>S4S=.S> jj5       rC\GS=S? j5       rD\GS=S@ j5       rE\SA 5       rF\SB 5       rGSC rHSD rISE rJSF rKSG rLSH rMSI rNSJ rOSK rPGS?SL jrQSM rRSN rSSO rTSP rUSQ rVSR rWSS rXST rYSU rZSV r[\SW 5       r\SX r]GS@SY jr^SZ r_\S[ 5       r`\S\ 5       ra\S] 5       rb\GS?S^ j5       rc\S_ 5       rd\S` 5       re\Sa 5       rfSb rgGS@Sc jrh\Sd 5       ri\Se 5       rj\Sf 5       rkSg rlSh rmSi rnSj roSk rpSl rqSm rrSn rsSo rtSp ruSq rvSr rwSs rxGS@St jrySu rzSv r{GSASw jr|  GSBSx jr}\Sy 5       r~GSCSz jrGSDS{ jr€GSDS| jr�GS@S} jr‚GSES~ jrƒGSFS jr„S€ r…S� r†S‚ r‡Sƒ rˆ\S„ 5       r‰\S… 5       rŠS† r‹S‡ rŒSˆ r�S‰ rŽGS9SŠ jr�GS9S‹ jr�SŒ r‘S� r’SŽ r“S� r”S� r•S‘ r–S’ r—GS=S“ jr˜S” r™S• ršS– r›S— rœ\�" S˜5      S™ 5       rž\�" Sš5      S› 5       rŸ\�" Sœ5      S� 5       r Sž r¡\�" SŸ5      S  5       r¢GS=S¡ jr£S¢ r¤S£ r¥\�" S¤5      S¥ 5       r¦GS=S¦ jr§\�" S§5      S¨ 5       r¨\�" S©5      Sª 5       r©\�" S«5      S¬ 5       rªGS=S­ jr«\�" S®5      S¯ 5       r¬\�" S°5      S± 5       r­\®4S² jr¯S³ r°\±S4S´ jr²Sµ r³S¶ r´S· rµGSGS¸ jr¶S¹\·4Sº jr¸GSGS» jr¹GSGS¼ jrºGSHS½ jr»S¾ r¼GSGS¿ jr½SÀ r¾\¿R                  \¿l        \ÀR                  \Àl        \ÁR                  \¯l        \ÂR                  \°l        \ÃR                  \³l        \ÄR                  \´l        \ÅR                  \²l        \ÆR                  \µl        \ÇR                  \¶l        \ÈR                  \¸l        \ÉR                  \¹l        \ÊR                  \ºl        \ÆR                  \»l        \ËR                  \¼l        \ÌR                  \½l        \ÍR                  \¾l        \±S9S94SÁ jrÎ\SÂ 5       rÏ\±S94SÃ jrÐSÄ rÑ\±S9SS4SÅ jrÒ\ÓR                  \Îl        \ÔR                  \Ïl        \ÕR                  \Ðl        \ÖR                  \Òl        GSISÆ jr×SÇ rØSÈ rÙSÉ rÚSÊ rÛSË rÜSÌ rÝGSJSÍ jrÞGSJSÎ jrßGSKSÏ jràS9\±4SÐ jráGSKSÑ jrâSÒ rã\äR                  \àl        \åR                  \ál        \æR                  \âl        \çR                  \ãl        \" \ã5      rãGS@SÓ jrèS\±4SÔ jréGSKSÕ jrêGSLSÖ jrëGS@S× jrìGS@SØ jrí\SÙ 5       rî\SÚ 5       rï\SÛ 5       rð\SÜ 5       rñ\SÝ 5       ròGS@SÞ jróSß rôSà rõ\öR                  \èl        \÷R                  \él        \øR                  \êl        \ùR                  \ël        \úR                  \îl        \ûR                  \ïl        \üR                  \ðl        \ýR                  \ñl        \þR                  \òl        \ÿR                  \ól        G\ R                  \ôl        G\R                  \õl        G\R                  \ìl        G\R                  \íl        SSá.Sâ jGrSã GrSä GrSå GrSæ GrG\	" S¹5      \·4Sç jGr
Sè GrSé GrSê GrSë GrGSGSì jGrSí GrSî GrSï GrGS@Sð jGrGSGSñ jGrSò GrSó GrSô Gr\GSMSõ j5       GrSö GrG\S4S÷ jGrSø GrSù GrSú GrGS=Sû jGr\Sü 5       Gr \Sý 5       Gr!\Sþ 5       Gr"Sÿ Gr#GS  Gr$GS Gr%GS Gr&GS Gr'GS Gr(GS Gr)\GS 5       Gr*GS>GS jGr+GS Gr,GS	 Gr-GS
 Gr.GS Gr/GS Gr0G\14GS jGr2GS Gr3GS Gr4GS Gr5\±4GS jGr6GS=GS jGr7GSNGS jGr8GS Gr9  GSOGS jGr:\±S94GS jGr;GS@GS jGr<GS@GS jGr=\±SS94GS jGr>\±SS94GS jGr?GS Gr@GS GrAGS GrBGS GrCGS GrDGS  GrEGS! GrFGS" GrGGS# GrH\±4GS$ jGrIGS% GrJGSKGS& jGrKGS=GS' jGrLGSPGS( jGrMGSQGS) jGrNGSRGS* jGrOGSSGS+ jGrP\±4GS, jGrQ\±4GS- jGrR\±4GS. jGrS\±4GS/ jGrT\±4GS0 jGrU\±4GS1 jGrV\±4GS2 jGrWS\±S94GS3 jGrXGS4 GrYGS5 GrZGS6 Gr[GS@GS7 jGr\G\]GR¼                  Gr^G\_R                  G\;l        G\`R                  G\<l        G\aR                  G\=l        G\bR                  G\>l        G\cR                  G\?l        G\dR                  G\@l        G\eR                  G\Al        G\fR                  G\Bl        G\gR                  G\Cl        G\hR                  G\Dl        G\iR                  G\El        G\jR                  G\Fl        G\kR                  G\Gl        G\lR                  G\Hl        G\mR                  G\Il        G\nR                  G\Jl        G\oR                  G\Kl        G\pR                  G\Ll        G\qR                  G\Ml        G\rR                  G\Nl        G\sR                  G\Ol        G\tR                  G\Pl        G\uR                  G\Ql        G\vR                  G\Sl        G\wR                  G\Tl        G\xR                  G\Ul        G\yR                  G\Vl        G\zR                  G\Wl        G\{R                  G\Rl        G\|R                  G\Xl        G\}R                  G\Yl        G\~R                  G\Zl        G\R                  G\[l        G\€R                  G\\l        GS8Gr�g(T  Ú
MatrixBaseéc   zoAll common matrix operations including basic arithmetic, shaping,
and special matrices like `zeros`, and `eye`.g…ëQ¸$@é   Té   ÚboolÚ	_diff_wrtÚintÚrowsÚcolsNc                ó   • [        S5      e)zv`_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      ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/matrices/matrixbase.pyÚ_newÚMatrixBase._neww   ó   € ô
 "Ð"CÓDÐDó    c                ó   • [        S5      e)Nr—   r˜   ©ÚselfÚothers     r�   Ú__eq__ÚMatrixBase.__eq__~   s   € Ü!Ð"CÓDÐDr¡   c                ó   • [        S5      e)zö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__ÚMatrixBase.__getitem__�   r    r¡   c                ó2   • U R                   U R                  4$ )z³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�   ÚshapeÚMatrixBase.shapeˆ   s   € ð  —	‘	˜4Ÿ9™9Ð%Ð%r¡   c                óh   ^ ^• UU 4S jnT R                  T R                  T R                  S-
  U5      $ )Nc                ó.   >• UT:  a  TX4   $ TXS-   4   $ ©Nr/   © )ÚiÚjÚcolr¤   s     €€r�   ÚentryÚ'MatrixBase._eval_col_del.<locals>.entry›   s$   ø€ Ø!" S£�4˜˜‘:Ð<¨d°1¸!±e°8©nÐ<r¡   r/   ©rž   r”   r•   )r¤   r·   r¸   s   `` r�   Ú_eval_col_delÚMatrixBase._eval_col_delš   s'   ù€ ö	=à�y‰y˜Ÿ™ D§I¡I°¡M°5Ó9Ð9r¡   c                ó€   ^ ^^• UUU 4S jnT R                  T R                  T R                  TR                  -   U5      $ )Nc                óŽ   >• UT:  a  TX4   $ TUs=::  a  TTR                   -   :  a  O  O	TXT-
  4   $ TXTR                   -
  4   $ ©N©r•   )rµ   r¶   r¥   Úposr¤   s     €€€r�   r¸   Ú*MatrixBase._eval_col_insert.<locals>.entry¡   sS   ø€ Ø�3‹wØ˜A˜D‘zÐ!Ø˜Õ,˜C %§*¡*Ñ,Ö,Ø˜Q C¡˜ZÑ(Ð(Ø˜˜uŸz™z™>Ð)Ñ*Ð*r¡   rº   )r¤   rÁ   r¥   r¸   s   ``` r�   Ú_eval_col_insertÚMatrixBase._eval_col_insertŸ   s.   ú€ ÷	+ð �y‰y˜Ÿ™ D§I¡I°·
±
Ñ$:¸EÓBÐBr¡   c                ó¬   ^ ^^• T R                   mUUU 4S jn[        T T5      R                  T R                   TR                   -   T R                  U5      $ )Nc                ó0   >• U T:  a  TX4   $ TU T-
  U4   $ r¿   r´   )rµ   r¶   r¥   r”   r¤   s     €€€r�   r¸   Ú(MatrixBase._eval_col_join.<locals>.entry­   s)   ø€ Ø�4‹xØ˜A˜D‘zÐ!Ø˜˜T™ 1˜Ñ%Ð%r¡   )r”   Úclassofrž   r•   )r¤   r¥   r¸   r”   s   `` @r�   Ú_eval_col_joinÚMatrixBase._eval_col_joinª   sE   ú€ Ø�y‰yˆ÷	&ô
 �t˜UÓ#×(Ñ(¨¯©°U·Z±ZÑ)?ÀÇÁØ).ó0ð 	0r¡   c           	     óÈ   ^^• [        U 5      nU R                  mUU4S jU 5       nU R                  [        U5      [        T5      U Vs/ s H  oSU   PM	     sn5      $ s  snf )Nc              3  óF   >#   • U  H  nT  H  o!T-  U-   v •  M     M     g 7fr¿   r´   )Ú.0rµ   r¶   r•   ÚcolsLists      €€r�   Ú	<genexpr>Ú+MatrixBase._eval_extract.<locals>.<genexpr>¸   s   øé € ÐDª A¼8°a�t‘8˜a–<¹8‘<ªùs   ƒ!)Úlistr•   rž   Úlen)r¤   ÚrowsListrÎ   ÚmatÚindicesrµ   r•   s     `   @r�   Ú_eval_extractÚMatrixBase._eval_extractµ   sS   ù€ Ü�4‹jˆØ�y‰yˆÝD©ÓDˆØ�y‰yœ˜X›¬¨H«Ù*1Ó2ª' Q˜aœ&©'Ñ2ó4ð 	4ùÚ2s   Á
Ac                ó,   ^^• / mUU4S jmT" U 5        T$ )Nc                ó„  >• [        SU R                  S   S-   5       HŸ  nUS:X  a  U SUS 24   nXS 2S4   nOU S U2US 24   nXS 2S U24   n[        U5      (       d  [        U5      (       a  MR  TR                  U S U2S U24   5        U R                  U S U2S U24   R                  :w  a  T" XS 2US 24   5          g    g )Nr/   r   )Úranger¯   ÚanyÚappend)ÚMrµ   Úto_the_rightÚto_the_bottomÚrecurse_sub_blocksÚ
sub_blockss       €€r�   rà   Ú<MatrixBase._eval_get_diag_blocks.<locals>.recurse_sub_blocks¿   sÒ   ø€ Ü˜1˜aŸg™g a™j¨1™nÖ-�Ø˜“6Ø#$ Q¨© U¡8�LØ$%¡b¨! e¡H‘Mà#$ R a R¨© V¡9�LØ$%¡b¨"¨1¨" f¡I�MÜ�|×$Ñ$¬¨M×(:Ñ(:ÙØ×!Ñ! ! B Q B¨¨¨ F¡)Ô,Ø—7‘7˜a    B Q B ™iŸo™oÓ-Ù& q©¨Q©R¨¡yÔ1Ùò .r¡   r´   )r¤   rà   rá   s    @@r�   Ú_eval_get_diag_blocksÚ MatrixBase._eval_get_diag_blocks¼   s   ù€ Øˆ
ö	ñ 	˜4Ô ØÐr¡   c                óh   ^ ^• UU 4S jnT R                  T R                  S-
  T R                  U5      $ )Nc                ó0   >• U T:  a  TX4   $ TU S-   U4   $ r³   r´   )rµ   r¶   Úrowr¤   s     €€r�   r¸   Ú'MatrixBase._eval_row_del.<locals>.entryÒ   s&   ø€ Ø!" S£�4˜˜‘:Ð<¨d°1°q±5¸!°8©nÐ<r¡   r/   rº   )r¤   rç   r¸   s   `` r�   Ú_eval_row_delÚMatrixBase._eval_row_delÑ   s'   ù€ ö	=à�y‰y˜Ÿ™ Q™¨¯	©	°5Ó9Ð9r¡   c                ó¶   • [        U 5      nXR                  -  n[        U5      X4U& U R                  U R                  UR                  -   U R                  U5      $ r¿   )rÑ   r•   rž   r”   )r¤   rÁ   r¥   ÚentriesÚ
insert_poss        r�   Ú_eval_row_insertÚMatrixBase._eval_row_insertÖ   sH   € Ü�t“*ˆØŸ9™9‘_ˆ
Ü)-¨e«ˆ˜:Ð&Ø�y‰y˜Ÿ™ U§Z¡ZÑ/°·±¸GÓDÐDr¡   c                ó¬   ^ ^^• T R                   mUUU 4S jn[        T T5      R                  T R                  T R                   TR                   -   U5      $ )Nc                ó.   >• UT:  a  TX4   $ TXT-
  4   $ r¿   r´   )rµ   r¶   r•   r¥   r¤   s     €€€r�   r¸   Ú(MatrixBase._eval_row_join.<locals>.entryß   s'   ø€ Ø�4‹xØ˜A˜D‘zÐ!Ø˜ ™H˜Ñ%Ð%r¡   )r•   rÈ   rž   r”   )r¤   r¥   r¸   r•   s   `` @r�   Ú_eval_row_joinÚMatrixBase._eval_row_joinÜ   sE   ú€ Ø�y‰yˆ÷	&ô
 �t˜UÓ#×(Ñ(¨¯©°D·I±IÀÇ
Á
Ñ4JØ).ó0ð 	0r¡   c           	     óv   • [        U R                  5       Vs/ s H  n[        XS S 24   5      PM     sn$ s  snf r¿   )rÚ   r”   rÑ   ©r¤   rµ   s     r�   Ú_eval_tolistÚMatrixBase._eval_tolistç   s/   € Ü).¨t¯y©yÔ)9Ó:Ò)9 A”�TšA˜#‘Y–Ñ)9Ñ:Ð:ùÒ:s   ˜6c                ó¦   • 0 nU R                   u  p#[        U5       H1  n[        U5       H  nXU4   nX`R                  :w  d  M  XaXE4'   M!     M3     U$ r¿   )r¯   rÚ   Úzero)r¤   Údokr”   r•   rµ   r¶   Úvals          r�   Ú_eval_todokÚMatrixBase._eval_todokê   sS   € ØˆØ—Z‘Z‰
ˆÜ�t–ˆAÜ˜4–[�Ø˜a˜4‘j�ØŸ)™)Õ#Ø #˜˜“Ió !ñ ð
 ˆ
r¡   c                ó”   • U R                   /X-  -  nUR                  5        H  u  u  pVnXtXR-  U-   '   M     U R                  XU5      $ r¿   )rú   Úitemsrž   )rš   r”   r•   rû   Úout_flatrµ   r¶   rü   s           r�   Ú_eval_from_dokÚMatrixBase._eval_from_dokô   sI   € à—H‘H�: ¡Ñ-ˆØŸ9™9ž;‰K‰FˆQ�CØ%(�Q‘X ‘\Ó"ñ 'à�x‰x˜ HÓ-Ð-r¡   c                ód   ^ ^• T R                   mUU 4S jnT R                  [        T 5      SU5      $ )Nc                ó(   >• U T-  nXT-  -
  nTX24   $ r¿   r´   )ÚnÚ_r¶   rµ   r”   r¤   s       €€r�   r¸   Ú#MatrixBase._eval_vec.<locals>.entryþ   s#   ø€ à�T‘	ˆAØ˜‘H‘ˆAØ˜˜‘:Ðr¡   r/   )r”   rž   rÒ   )r¤   r¸   r”   s   ` @r�   Ú	_eval_vecÚMatrixBase._eval_vecû   s*   ù€ Ø�y‰yˆö	ð �y‰yœ˜T› A uÓ-Ð-r¡   c                óR  • U R                   n/ nU(       a:  [        U5       H*  n[        XB5       H  nUR                  XU4   5        M     M,     O=[        U5       H.  n[        US-   U5       H  nUR                  XU4   5        M     M0     U R                  [	        U5      SU5      $ r³   )r•   rÚ   rÜ   rž   rÒ   )r¤   ÚdiagonalÚcÚvr¶   rµ   s         r�   Ú
_eval_vechÚMatrixBase._eval_vech  s�   € Ø�I‰IˆØˆÞÜ˜1–X�Ü˜qž�AØ—H‘H˜T Q $™ZÖ(ó %ò ô ˜1–X�Ü˜q 1™u až�AØ—H‘H˜T Q $™ZÖ(ó )ñ ð �y‰yœ˜Q›  AÓ&Ð&r¡   c                ó²   • US:  a  XR                   -  nSUs=::  a  U R                   :  d  O  [        SR                  U5      5      eU R                  U5      $ )zDelete the specified column.r   zColumn {} is out of range.)r•   Ú
IndexErrorÚformatr»   )r¤   r·   s     r�   Úcol_delÚMatrixBase.col_del  sN   € à�‹7Ø—9‘9ÑˆCØ�CÕ#˜$Ÿ)™)Õ#ÜÐ9×@Ñ@ÀÓEÓFÐFØ×!Ñ! #Ó&Ð&r¡   c                ón  • U (       d  [        U 5      " U5      $ [        U5      nUS:  a  U R                  U-   nUS:  a  SnOXR                  :”  a  U R                  nU R                  UR                  :w  a/  [	        SR                  U R                  UR                  5      5      eU R                  X5      $ )a  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_insertÚMatrixBase.col_insert  s˜   € ö, Ü˜”:˜eÓ$Ð$ä�S‹kˆà�‹7Ø—)‘)˜c‘/ˆCØ�‹7Ø‰CØ—9‘9‹_Ø—)‘)ˆCà�9‰9˜Ÿ
™
Ó"ÜØKß‘˜Ÿ	™	 5§:¡:Ó.ó0ð 0ð ×$Ñ$ SÓ0Ð0r¡   c                ób  • U R                   S:X  aF  U R                  UR                  :w  a,  U R                  SUR                  / 5      R                  U5      $ U R                  UR                  :w  a/  [	        SR                  U R                  UR                  5      5      eU R                  U5      $ )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  ÚMatrixBase.col_joinD  s‡   € ð. �9‰9˜‹>˜dŸi™i¨5¯:©:Ó5Ø—9‘9˜Q §
¡
¨BÓ/×8Ñ8¸Ó?Ð?à�9‰9˜Ÿ
™
Ó"ÜØNß‘˜Ÿ	™	 5§:¡:Ó.ó0ð 0ð ×"Ñ" 5Ó)Ð)r¡   c                ó   • U SS2U4   $ )z¤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·   ÚMatrixBase.cold  s   € ð( ’A�q�D‰zÐr¡   c                óR  • [        U5      (       a  [        U5      (       d  [        S5      eU(       a?  [        S U 5       5      (       a(  [        U5       VVs/ s H  u  p4U(       d  M  UPM     nnnU(       a?  [        S U 5       5      (       a(  [        U5       VVs/ s H  u  p4U(       d  M  UPM     nnnU Vs/ s H  n[	        XPR
                  5      PM     nnU Vs/ s H  n[	        XPR                  5      PM     nnU R                  X5      $ s  snnf s  snnf s  snf s  snf )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  óB   #   • U  H  n[        U[        5      v •  M     g 7fr¿   ©Ú
isinstancer‘   ©rÍ   rµ   s     r�   rÏ   Ú%MatrixBase.extract.<locals>.<genexpr>­  ó   é € ÐBº°AœJ q¬$×/Ð/ºùó   ‚c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr¿   r$  r&  s     r�   rÏ   r'  ¯  r(  r)  )r4   Ú	TypeErrorÚallÚ	enumerateÚa2idxr”   r•   rÖ   )r¤   rÓ   rÎ   ÚindexÚitemÚks         r�   ÚextractÚMatrixBase.extractz  sè   € ô` ˜8×$Ñ$¬K¸×,AÑ,AÜÐDÓEÐEæœÑB¹ÓB×BÑBÜ1:¸8Ô1DÔMÒ1D¡+ %ÌŸÑ1DˆHÑMÞœÑB¹ÓB×BÑBÜ1:¸8Ô1DÔMÒ1D¡+ %ÌŸÑ1DˆHÑMñ 2:Ó:²¨A”E˜!ŸY™YÖ'±ˆÐ:Ù19Ó:²¨A”E˜!ŸY™YÖ'±ˆÐ:à×!Ñ! (Ó5Ð5ùó NùãMùò ;ùÚ:s$   ÁDÁ)DÂDÂ/DÂ<DÃ!D$c                ó"   • U R                  5       $ )aê  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_blocksÚMatrixBase.get_diag_blocks¸  s   € ð0 ×)Ñ)Ó+Ð+r¡   c                óˆ   • [        U5      S:X  a  U R                  5       $ [        US   5      n[        UR                  U5      $ )zà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�   ÚhstackÚMatrixBase.hstackÒ  s9   € ô ˆt‹9˜‹>Ø—8‘8“:Ðä�4˜‘7‹mˆÜ�c—l‘l DÓ)Ð)r¡   c           	     ó2  • U R                   U R                  -  X-  :w  a  [        SX4-  5      eU R                  5       R	                  5        VVVs0 s H$  u  u  p4n[        X0R                  -  U-   U5      U_M&     nnnnU R                  XU5      $ s  snnnf )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 %d)r”   r•   Ú
ValueErrorÚtodokr   Údivmodr  )r¤   r”   r•   rµ   r¶   r  rû   s          r�   r+   ÚMatrixBase.reshapeæ  s”   € ð* �9‰9�t—y‘yÑ  D¡KÓ/ÜÐ?À4À,ÑNÓOÐOà#Ÿz™z›|×1Ñ1Ô3õ5Ú3‘)‘&�1˜!ô �aŸ	™	‘k A‘o tÓ,ØòÙ3ð 	ò 5à×"Ñ" 4¨sÓ3Ð3ùô5s   Á+Bc                ó²   • US:  a  XR                   -  nSUs=::  a  U R                   :  d  O  [        SR                  U5      5      eU R                  U5      $ )zDelete the specified row.r   zRow {} is out of range.)r”   r  r  ré   )r¤   rç   s     r�   Úrow_delÚMatrixBase.row_del  sN   € à�‹7Ø—9‘9ÑˆCØ�CÕ#˜$Ÿ)™)Õ#ÜÐ6×=Ñ=¸cÓBÓCÐCà×!Ñ! #Ó&Ð&r¡   c                ón  • U (       d  U R                  U5      $ [        U5      nUS:  a  U R                  U-   nUS:  a  SnOXR                  :”  a  U R                  nU R                  UR                  :w  a/  [	        SR                  U R                  UR                  5      5      eU R                  X5      $ )zý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_insertÚMatrixBase.row_insert
  s˜   € ö. Ø—9‘9˜UÓ#Ð#ä�S‹kˆà�‹7Ø—)‘)˜c‘/ˆCØ�‹7Ø‰CØ—9‘9‹_Ø—)‘)ˆCà�9‰9˜Ÿ
™
Ó"ÜØNß‘˜Ÿ	™	 5§:¡:Ó.ó0ð 0ð ×$Ñ$ SÓ0Ð0r¡   c                ób  • U R                   S:X  aF  U R                  UR                  :w  a,  U R                  UR                  S/ 5      R                  U5      $ U R                  UR                  :w  a/  [	        SR                  U R                  UR                  5      5      eU R                  U5      $ )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ž   r8  r?   r  ró   r£   s     r�   r8  ÚMatrixBase.row_join4  s‡   € ð, �9‰9˜‹>˜dŸi™i¨5¯:©:Ó5Ø—9‘9˜UŸZ™Z¨¨BÓ/×8Ñ8¸Ó?Ð?à�9‰9˜Ÿ
™
Ó"ÜØKß‘˜Ÿ	™	 5§:¡:Ó.ó0ð 0ð ×"Ñ" 5Ó)Ð)r¡   c                ó†  • / n[        U5      nUS:”  a  SOU* nU(       a  SOUn X0R                  :X  d  X@R                  :X  a  O!UR                  XU4   5        US-  nUS-  nM@  U(       d;  [	        [        SU< SSU R                  -
  < SU R                  S-
  < S35      5      eU R                  S[        U5      U5      $ )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   r/   z
            The z diagonal is out of range [ú, Ú])r5   r”   r•   rÜ   r>  r6   rž   rÒ   )r¤   r1  ÚrvÚrr  s        r�   r  ÚMatrixBase.diagonalS  s¹   € ðD ˆÜ�1‹IˆØ�Q“‰A˜Q˜BˆÞ‰A˜ˆØØ—I‘I‹~ §i¡i£ØØ�I‰I�d˜a˜4‘jÔ!Ø�‰FˆAØ�‰FˆAñ ö Ü�Zãˆq�4—9‘9Œ}˜dŸi™i¨!œmð)-ó .ó /ð /ð �y‰y˜œC ›G RÓ(Ð(r¡   c                ó   • XSS24   $ )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ö   s     r�   rç   ÚMatrixBase.row…  s   € ð$ ’q�D‰zÐr¡   c                ó"   • U R                  5       $ )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?  ÚMatrixBase.todok™  s   € ð ×ÑÓ!Ð!r¡   c                ó˜   • UR                  5        VVs0 s H  u  pEX@R                  U5      _M     nnnU R                  XU5      $ s  snnf )zÎ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]])
)r   r   r  )rš   r”   r•   rû   Úijrü   s         r�   Úfrom_dokÚMatrixBase.from_dok¦  sE   € ð 58·I±I´KÔ@²K©¨ˆr—<‘< Ó$Ò$±KˆÑ@Ø×!Ñ! $¨cÓ2Ð2ùó As   ”Ac                óÀ   • U R                   (       d  / $ U R                  (       d&  [        U R                   5       Vs/ s H  n/ PM     sn$ U R                  5       $ s  snf )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()
[]

)r”   r•   rÚ   r÷   rö   s     r�   ÚtolistÚMatrixBase.tolist¸  sK   € ð2 �y�yØˆIØ�y�yÜ % d§i¡iÔ 0Ó1Ò 0˜1“BÑ 0Ñ1Ð1Ø× Ñ Ó"Ð"ùò 2s   ¼Ac                óÈ   • 0 nU R                  5       n[        U5       H:  u  p4[        U5       VVs0 s H  u  pVU(       d  M  XV_M     nnnU(       d  M6  XqU'   M<     U$ s  snnf )zã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}}


)rY  r-  )rÝ   ÚrowsdictÚMlolrµ   ÚMir¶   ÚMijrç   s           r�   ÚtododÚMatrixBase.todod×  s\   € ð" ˆØ�x‰x‹zˆÜ˜t–_‰EˆAÜ(1°"¬Ô=ª™f˜a¼“6�1’6©ˆCÑ=ßˆsØ!˜“ñ %ð ˆùó >s   ±AÁAc                ó"   • U R                  5       $ )zü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�   ÚvecÚMatrixBase.vecð  s   € ð0 �~‰~ÓÐr¡   c                ó    • U R                   (       d  [        eU(       a   U R                  5       (       d  [        S5      eU R	                  U5      $ )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�   ÚvechÚMatrixBase.vech
  s>   € ðT �~�~Ü&Ð&æ $×"3Ñ"3×"5Ñ"5ÜÐ;Ó<Ð<à�‰˜xÓ(Ð(r¡   c                óˆ   • [        U5      S:X  a  U R                  5       $ [        US   5      n[        UR                  U5      $ )zâ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  r9  s      r�   ÚvstackÚMatrixBase.vstack<  s9   € ô  ˆt‹9˜‹>Ø—8‘8“:Ðä�4˜‘7‹mˆÜ�c—l‘l DÓ)Ð)r¡   c                ó4   ^• U4S jnU R                  XU5      $ )zMdiag_dict is a defaultdict containing
all the entries of the diagonal matrix.c                ó   >• TX4   $ r¿   r´   )rµ   r¶   Ú	diag_dicts     €r�   r¸   Ú$MatrixBase._eval_diag.<locals>.entryV  s   ø€ Ø˜a˜VÑ$Ð$r¡   ©rž   )rš   r”   r•   rp  r¸   s      ` r�   Ú
_eval_diagÚMatrixBase._eval_diagR  s   ø€ õ	%à�x‰x˜ EÓ*Ð*r¡   c                óŒ   • U R                   /X-  -  nU R                  /[        X5      -  US S US-   2'   U R                  XUSS9$ )Nr/   F©Úcopy)rú   ÚoneÚminrž   )rš   r”   r•   Úvalss       r�   Ú	_eval_eyeÚMatrixBase._eval_eyeZ  sI   € à—‘ˆz˜4™9Ñ%ˆØŸ'™'˜¤3 t£?Ñ2ˆ‰Xˆt�A‰vˆX‰Ø�x‰x˜ D¨uˆxÐ5Ð5r¡   Úupperc                óT   ^ ^• US:X  a  U U4S jnOU U4S jnT R                  XU5      $ )NÚlowerc                óT   >• X:X  a  T$ US-   U :X  a  TR                   $ TR                  $ r³   ©rx  rú   ©rµ   r¶   rš   Ú
eigenvalues     €€r�   r¸   Ú,MatrixBase._eval_jordan_block.<locals>.entryc  ó+   ø€ Ø“6Ø%Ð%Ø˜‘U˜a“ZØŸ7™7�NØ—x‘x�r¡   c                óT   >• X:X  a  T$ U S-   U:X  a  TR                   $ TR                  $ r³   r�  r‚  s     €€r�   r¸   r„  j  r…  r¡   rr  )rš   Úsizerƒ  Úbandr¸   s   ` `  r�   Ú_eval_jordan_blockÚMatrixBase._eval_jordan_block`  s'   ù€ à�7‹?÷ ö ð �x‰x˜ EÓ*Ð*r¡   c                ó4   ^ • U 4S jnT R                  XU5      $ )Nc                ó   >• TR                   $ r¿   ©rx  ©rµ   r¶   rš   s     €r�   r¸   Ú$MatrixBase._eval_ones.<locals>.entryt  s   ø€ Ø—7‘7ˆNr¡   rr  )rš   r”   r•   r¸   s   `   r�   Ú
_eval_onesÚMatrixBase._eval_onesr  s   ø€ õ	à�x‰x˜ EÓ*Ð*r¡   c                óD   • U R                  XU R                  /X-  -  SS9$ )NFrv  )rž   rú   )rš   r”   r•   s      r�   Ú_eval_zerosÚMatrixBase._eval_zerosx  s$   € à�x‰x˜ S§X¡X J°±	Ñ$:ÀˆxÐGÐGr¡   c                óB  ^ • U 4S jnT R                  SU-  S-   SU-  S-   U5      nT R                  [        [        U* US-   5      5      SS9U-   UR                  -   n[        T R                  [        [        U* US-   5      5      SS95      U-   UR                  -   nXE4$ )Nc                óF   >• U S-   U:X  a  TR                   $ TR                  $ r³   r�  rŽ  s     €r�   r¸   Ú)MatrixBase._eval_wilkinson.<locals>.entry~  s    ø€ Ø !™e q›j�3—7‘7Ð6¨c¯h©hÐ6r¡   é   r/   T)Úunpack)rž   ÚdiagrÑ   rÚ   ÚTÚabs)rš   r  r¸   ÚDÚwminusÚwpluss   `     r�   Ú_eval_wilkinsonÚMatrixBase._eval_wilkinson|  s�   ø€ õ	7ð �H‰H�Q�q‘S˜1‘W˜a ™c A™g uÓ-ˆà—‘œ$œu a R¨¨Q©Ó/Ó0¸�Ð>ÀÑBÀQÇSÁSÑHˆÜ�C—H‘HœT¤%¨¨¨A°©EÓ"2Ó3¸D�HÐAÓBÀQÑFÈÏÉÑLˆàˆ}Ðr¡   F)Ústrictr™  r”   r•   c          
     óº  • SSK Jn  SSKJn  SSKJn	  UR                  SU 5      n
U(       a;  [        U5      S:X  a,  [        US   5      (       a  [        US   U5      (       d  US   n[        [        5      nS=pÍU GH  n[        U[        5      (       ap  U(       a(  U" U5      nUR                  u  nnUR                  5       nOƒU	R                  U5      u  nnnUR!                  5        H  u  u  nnnXûUU-   UU-   4'   M     / nOB[#        US5      (       a   UR                  u  nnUR                  5       nOXëXÍ4'   US-  nUS-  nMË  [%        U5       H'  u  nn[%        U5       H  u  nnXûUU-   UU-   4'   M     M)     UU-  nUU-  nGM     Uc  XCpCUc  XÍpCOUc  UOUnX<:  d  XM:  a$  ['        [)        SR+                  XÍX45      5      5      eU
R-                  X4U5      $ )	a)  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¯   zg
                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¯   rY  Ú_handle_creation_inputsr   Úhasattrr-  r>  r6   r  rs  )r:  r¢  r™  r”   r•   r›   rœ   r�   r¦  r¨  ÚklassÚdiag_entriesÚrmaxÚcmaxÚmr  rN  r  Úsmatrµ   r¶   Úmis                         r�   rš  ÚMatrixBase.diagˆ  sá  € õx 	9Ý/Ý/Ø—
‘
˜5 #Ó&ˆÞ”c˜$“i 1“n¬°T¸!±W×)=Ñ)=Ü˜t A™w¨
×3Ñ3Ø˜‘7ˆDô #¤3Ó'ˆØˆˆÜˆAÜ˜!œT×"Ñ"Þá˜q›	�AØŸ7™7‘D�A�qØŸ™›
‘Aà!-×!EÑ!EÀaÓ!H‘J�A�q˜$Ø%)§Z¡Z¦\™	™˜˜A Ø=> a¨$¡h°°D±Ð%9Ó:ñ &2à‘AÜ˜˜G×$Ñ$à—w‘w‘��1Ø—H‘H“J‘à-.˜d˜\Ñ*Ø˜‘	�Ø˜‘	�Ùä" 1ž‘��2Ü% bžM‘D�A�qØ9: ! d¡(¨A°©HÐ!5Ó6ó *ñ &ð �A‰IˆDØ�A‰I‹Dñ5 ð6 ‰<Ø�$Ø‰<Ø‘$à™<‘4¨TˆDØ‹;˜$›+ÜœZð )"ç"(¡&¨°TÓ"@óBó Cð Cð ×Ñ ¨LÓ9Ð9r¡   c                óÈ   • Uc  UnUS:  d  US:  a  [        SR                  X5      5      eUR                  SU 5      n[        U5      [        U5      p!UR	                  X5      $ )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
r   ú@Cannot create a {} x {} matrix. Both dimensions must be positiverš   )r>  r  r¬  r5   r{  ©r:  r”   r•   rœ   r¯  s        r�   ÚeyeÚMatrixBase.eye  sh   € ð ‰<ØˆDØ�!‹8�t˜a“xÜð @ß@FÁÀtÓ@RóTð Tà—
‘
˜5 #Ó&ˆÜ˜D“\¤6¨$£<ˆdà�‰˜tÓ*Ð*r¡   )rˆ  c               ó  • UR                  SU 5      nUR                  SS5      nUc  Uc  [        S5      eX&:w  a!  SXb4;  a  [        SR                  Xb5      5      eUb  UnUc  [        S5      e[	        U5      nUR                  XU5      $ )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   r‰  )r:  r‡  rƒ  rˆ  rœ   r¯  r½  s          r�   Újordan_blockÚMatrixBase.jordan_block.  s¤   € ð^ —
‘
˜5 #Ó&ˆà—:‘:˜j¨$Ó/ˆØÑ (Ñ"2ÜÐ8Ó9Ð9ØÓ#¨°XÐ4JÓ(JÜð"ß"(¡&¨Ó">ó@ð @ð Ñ#Ø%�
à‰<ÜÐ8Ó9Ð9ä�d‹|ˆØ×'Ñ'¨¸$Ó?Ð?r¡   c                ó|   • Uc  UnUR                  SU 5      n[        U5      [        U5      p!UR                  X5      $ )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
rš   )r¬  r5   r�  r¹  s        r�   ÚonesÚMatrixBase.ones�  s>   € ð ‰<ØˆDØ—
‘
˜5 #Ó&ˆÜ˜D“\¤6¨$£<ˆdà×Ñ Ó+Ð+r¡   c                óÈ   • Uc  UnUS:  d  US:  a  [        SR                  X5      5      eUR                  SU 5      n[        U5      [        U5      p!UR	                  X5      $ )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
r   r¸  rš   )r>  r  r¬  r5   r“  r¹  s        r�   ÚzerosÚMatrixBase.zeros¥  sj   € ð ‰<ØˆDØ�!‹8�t˜a“xÜð @ß@FÁÀtÓ@RóTð Tà—
‘
˜5 #Ó&ˆÜ˜D“\¤6¨$£<ˆdà× Ñ  Ó,Ð,r¡   c                óê  ^ ^^• T R                  U5      n[        U[        5      (       d  [        SR	                  U5      5      eUR
                  (       d  [        SR	                  U5      5      eUR                  (       d  [        SR	                  U5      5      eUR                  5       mTS:¼  d  [        SR	                  U5      5      eUR                  5       mUU U4S jnT R                  TTU5      $ )ar  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                óh   >• UTS-
  :X  a	  TSU -
     * $ XS-   :X  a  TR                   $ TR                  $ )Nr/   éÿÿÿÿr�  )rµ   r¶   Úcoeffsr:  r‡  s     €€€r�   r¸   Ú#MatrixBase.companion.<locals>.entryß  s9   ø€ Ø�D˜1‘H‹}Ø˜r A™v™�Ð&Ø˜!‘e“Ø—w‘w�Ø—8‘8ˆOr¡   )
r   r%  r2   r>  r  Úis_monicÚis_univariateÚdegreeÚ
all_coeffsrž   )r:  Úpolyr¸   rÊ  r‡  s   `  @@r�   Ú	companionÚMatrixBase.companion½  sÔ   ú€ ð& �|‰|˜DÓ!ˆÜ˜$¤×%Ñ%ÜÐ:×AÑAÀ$ÓGÓHÐHØ�}�}ÜÐ=×DÑDÀTÓJÓKÐKØ×!×!ÜØ5×<Ñ<¸TÓBóDð Dð �{‰{‹}ˆØ�q‹yÜØ6×=Ñ=¸dÓCóEð Eð —‘Ó"ˆ÷	ð �x‰x˜˜d EÓ*Ð*r¡   c                ó^   • UR                  SU 5      n[        U5      nUR                  U5      $ )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   r   )r:  r  rœ   r¯  s       r�   Ú	wilkinsonÚMatrixBase.wilkinsonè  s/   € ðH —
‘
˜5 #Ó&ˆÜ�1‹IˆØ×$Ñ$ QÓ'Ð'r¡   c                ó   • S U  5       $ )Nc              3  óN   #   • U  H  o[         R                  Ld  M  Uv •  M     g 7fr¿   )r#   ÚZeror&  s     r�   rÏ   Ú/MatrixBase._eval_iter_values.<locals>.<genexpr>  s   é € Ð3š4�a¬A¯F©F ?—‘š4ùs   ‚%œ	%r´   r®   s    r�   Ú_eval_iter_valuesÚMatrixBase._eval_iter_values  s   € Ù3™4Ó3Ð3r¡   c                ó4   • [        U R                  5       5      $ r¿   )rÑ   Úiter_valuesr®   s    r�   Ú_eval_valuesÚMatrixBase._eval_values  s   € Ü�D×$Ñ$Ó&Ó'Ð'r¡   c              #  ó¬   #   • [        U R                  5       H7  n[        U R                  5       H  nXU4   (       d  M  X4XU4   4v •  M     M9     g 7fr¿   ©rÚ   r”   r•   ©r¤   rµ   r¶   s      r�   Ú_eval_iter_itemsÚMatrixBase._eval_iter_items  sI   é € Ü�t—y‘yÖ!ˆAÜ˜4Ÿ9™9Ö%�Ø˜1˜—:‘:Ø˜& $¨! t¡*Ð,Ô,ó &ò "ùs   ‚:AÁ Ac                óF  • U R                  5       n[        U5      U R                  U R                  -  :  a1  [	        [
        R                  U5      (       a  [
        R                  1nO
[        5       nUR                  " U Vs/ s H  oDR                  " U6 PM     sn6 $ s  snf r¿   )
ÚvaluesrÒ   r”   r•   r%  r#   rØ  ÚsetÚunionÚatoms)r¤   Útypesræ  Úsr  s        r�   Ú_eval_atomsÚMatrixBase._eval_atoms  so   € Ø—‘“ˆÜˆv‹;˜Ÿ™ T§Y¡YÑ.Ó.´:¼a¿f¹fÀe×3LÑ3LÜ—‘�‰Aä“ˆAØ�wŠw±&Ó9²&¨QŸš %›±&Ñ9Ð:Ð:ùÒ9s   ÂBc                ól   • [        5       R                  " S [        U R                  5       5       5       6 $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7fr¿   )Úfree_symbolsr&  s     r�   rÏ   Ú0MatrixBase._eval_free_symbols.<locals>.<genexpr>(  s   é € ÐHÒ5G°Ÿ^ž^Ò5Gùó   ‚)rç  rè  ræ  r®   s    r�   Ú_eval_free_symbolsÚMatrixBase._eval_free_symbols'  s$   € Ü‹u�{Š{ÑH´S¸¿¹»Ô5GÓHÐIÐIr¡   c                óJ   ^• [        U4S jU R                  5        5       5      $ )Nc              3  ó@   >#   • U  H  oR                   " T6 v •  M     g 7fr¿   )Úhas)rÍ   ÚaÚpatternss     €r�   rÏ   Ú'MatrixBase._eval_has.<locals>.<genexpr>+  s   øé € Ð@Ò-?¨—5’5˜(Õ#Ò-?ùó   ƒ)rÛ   rÝ  ©r¤   rù  s    `r�   Ú	_eval_hasÚMatrixBase._eval_has*  s   ø€ ÜÔ@¨T×-=Ñ-=Ô-?Ó@Ó@Ð@r¡   c                ó,   • U R                  [        5      $ r¿   )r÷  r   r®   s    r�   Ú_eval_is_symbolicÚMatrixBase._eval_is_symbolic-  s   € Ø�x‰xœÓÐr¡   c                ó\   ^ ^^• U U4S jm[        U4S jT R                  5        5       5      $ )Nc                óZ   >• T" TX4   TX4   R                  5       -
  5      R                  $ r¿   )ÚadjointÚis_zero©rµ   r¶   r¤   Úsimpfuncs     €€r�   Ú<lambda>Ú6MatrixBase._eval_is_matrix_hermitian.<locals>.<lambda>4  s*   ø€ ™H T¨!¨$¡Z°$°q°t±*×2DÑ2DÓ2FÑ%FÓG×OÒOr¡   c              3  ó>   >#   • U  H  u  u  pnT" X5      v •  M     g 7fr¿   r´   )rÍ   rµ   r¶   r  Úherms       €r�   rÏ   Ú7MatrixBase._eval_is_matrix_hermitian.<locals>.<genexpr>5  ó   øé € ÐGÒ5F©	©¨°™˜aŸ˜Ò5Fùó   ƒ©r8   Ú
iter_items)r¤   r  r  s   ``@r�   Ú_eval_is_matrix_hermitianÚ$MatrixBase._eval_is_matrix_hermitian3  s    ú€ ÝOˆÜÔG°T·_±_Ô5FÓGÓGÐGr¡   c                óB   • [        S U R                  5        5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7fr¿   ©r  )rÍ   r  s     r�   rÏ   Ú2MatrixBase._eval_is_zero_matrix.<locals>.<genexpr>8  s   é € Ð?Ò,> qŸžÒ,>ùrò  )r8   rÝ  r®   s    r�   Ú_eval_is_zero_matrixÚMatrixBase._eval_is_zero_matrix7  s   € ÜÑ?¨D×,<Ñ,<Ô,>Ó?Ó?Ð?r¡   c                óŒ   ^^^• U R                   mU R                  mUU4S jm[        U4S jU R                  5        5       5      $ )Nc                ó   >• X:X  a  UTL $ UTL $ r¿   r´   )rµ   r¶   r  rx  rú   s      €€r�   r  Ú.MatrixBase._eval_is_Identity.<locals>.<lambda>=  s   ø€ ¨A«F  S Ð A¸¸T¸	Ð Ar¡   c              3  ó@   >#   • U  H  u  u  pnT" XU5      v •  M     g 7fr¿   r´   )rÍ   rµ   r¶   r  Úidents       €r�   rÏ   Ú/MatrixBase._eval_is_Identity.<locals>.<genexpr>>  s!   øé € ÐEÒ3D¡i¡f q¨a‘5˜˜q—>�>Ò3Dùrû  )rx  rú   r,  r  )r¤   r  rx  rú   s    @@@r�   Ú_eval_is_IdentityÚMatrixBase._eval_is_Identity:  s2   ú€ Ø�h‰hˆØ�y‰yˆÝAˆÜÔE°4·?±?Ô3DÓEÓEÐEr¡   c                óB   • [        S U R                  5        5       5      $ )Nc              3  óR   #   • U  H  u  u  po1U:w  d  M  UR                   v •  M     g 7fr¿   r  ©rÍ   rµ   r¶   r  s       r�   rÏ   Ú/MatrixBase._eval_is_diagonal.<locals>.<genexpr>A  s"   é € ÐPÒ4E¡y¡v¨¨qÈaÉ›˜ŸžÒ4Eùó   ‚'”'r  r®   s    r�   Ú_eval_is_diagonalÚMatrixBase._eval_is_diagonal@  s   € ÜÑP°D·O±OÔ4EÓPÓPÐPr¡   c                óB   • [        S U R                  5        5       5      $ )Nc              3  óR   #   • U  H  u  u  po1U:  d  M  UR                   v •  M     g 7fr¿   r  r#  s       r�   rÏ   Ú,MatrixBase._eval_is_lower.<locals>.<genexpr>D  ó"   é € ÐIÒ.?¡¡ !¨ÀqÁ5“9�1—9–9Ò.?ùr%  ©r,  r  r®   s    r�   Ú_eval_is_lowerÚMatrixBase._eval_is_lowerC  ó   € ÜÑI¨d¯o©oÔ.?ÓIÓIÐIr¡   c                óB   • [        S U R                  5        5       5      $ )Nc              3  óR   #   • U  H  u  u  po1U:”  d  M  UR                   v •  M     g 7fr¿   r  r#  s       r�   rÏ   Ú,MatrixBase._eval_is_upper.<locals>.<genexpr>G  r+  r%  r,  r®   s    r�   Ú_eval_is_upperÚMatrixBase._eval_is_upperF  r/  r¡   c                óB   • [        S U R                  5        5       5      $ )Nc              3  óX   #   • U  H   u  u  po1S -   U:  d  M  UR                   v •  M"     g7f©r/   Nr  r#  s       r�   rÏ   Ú7MatrixBase._eval_is_lower_hessenberg.<locals>.<genexpr>J  s&   é € ÐMÒ.?¡¡ !¨ÀqÁ5È1Á9“9�1—9–9Ò.?ùó   ‚*—*r,  r®   s    r�   Ú_eval_is_lower_hessenbergÚ$MatrixBase._eval_is_lower_hessenbergI  ó   € ÜÑM¨d¯o©oÔ.?ÓMÓMÐMr¡   c                óB   • [        S U R                  5        5       5      $ )Nc              3  óX   #   • U  H   u  u  po1US -   :”  d  M  UR                   v •  M"     g7fr7  r  r#  s       r�   rÏ   Ú7MatrixBase._eval_is_upper_hessenberg.<locals>.<genexpr>M  s&   é € ÐMÒ.?¡¡ !¨ÀqÈ1ÁuÁ9“9�1—9–9Ò.?ùr9  r,  r®   s    r�   Ú_eval_is_upper_hessenbergÚ$MatrixBase._eval_is_upper_hessenbergL  r<  r¡   c                ó\   ^ ^^• U U4S jm[        U4S jT R                  5        5       5      $ )Nc                ó>   >• T" TX4   TX4   -
  5      R                   $ r¿   r  r  s     €€r�   r  Ú/MatrixBase._eval_is_symmetric.<locals>.<lambda>P  s!   ø€ ™8 D¨¨¡J°°a°d±Ñ$;Ó<×DÒDr¡   c              3  ó>   >#   • U  H  u  u  pnT" X5      v •  M     g 7fr¿   r´   )rÍ   rµ   r¶   r  Úsyms       €r�   rÏ   Ú0MatrixBase._eval_is_symmetric.<locals>.<genexpr>Q  s   øé € ÐFÒ4E¡y¡v¨¨q™˜QŸ˜Ò4Eùr  r  )r¤   r  rF  s   ``@r�   Ú_eval_is_symmetricÚMatrixBase._eval_is_symmetricO  s    ú€ ÝDˆÜÔF°D·O±OÔ4EÓFÓFÐFr¡   c                ó\   ^ ^^• U U4S jm[        U4S jT R                  5        5       5      $ )Nc                ó>   >• T" TX4   TX4   -   5      R                   $ r¿   r  r  s     €€r�   r  Ú4MatrixBase._eval_is_anti_symmetric.<locals>.<lambda>T  s!   ø€ ™H T¨!¨$¡Z°$°q°t±*Ñ%<Ó=×EÒEr¡   c              3  ó>   >#   • U  H  u  u  pnT" X5      v •  M     g 7fr¿   r´   )rÍ   rµ   r¶   r  Úantis       €r�   rÏ   Ú5MatrixBase._eval_is_anti_symmetric.<locals>.<genexpr>U  r  r  r  )r¤   r  rN  s   ``@r�   Ú_eval_is_anti_symmetricÚ"MatrixBase._eval_is_anti_symmetricS  s    ú€ ÝEˆÜÔG°T·_±_Ô5FÓGÓGÐGr¡   c                óf   ^ • U 4S j[        T R                  5       5       n[        S U 5       5      $ )Nc              3  ó0   >#   • U  H  nTX4   v •  M     g 7fr¿   r´   ©rÍ   rµ   r¤   s     €r�   rÏ   Ú5MatrixBase._has_positive_diagonals.<locals>.<genexpr>X  ó   øé € ÐAÒ0@¨1˜D  žJÒ0@ùó   ƒc              3  ó8   #   • U  H  oR                   v •  M     g 7fr¿   )Úis_positive©rÍ   Úxs     r�   rÏ   rU  Y  s   é € ÐAÒ0@¨1ŸžÒ0@ùrò  ©rÚ   r”   r8   ©r¤   Údiagonal_entriess   ` r�   Ú_has_positive_diagonalsÚ"MatrixBase._has_positive_diagonalsW  s)   ø€ ÜA´°d·i±iÔ0@ÓAÐÜÑAÑ0@ÓAÓAÐAr¡   c                óf   ^ • U 4S j[        T R                  5       5       n[        S U 5       5      $ )Nc              3  ó0   >#   • U  H  nTX4   v •  M     g 7fr¿   r´   rT  s     €r�   rÏ   Ú8MatrixBase._has_nonnegative_diagonals.<locals>.<genexpr>\  rV  rW  c              3  ó8   #   • U  H  oR                   v •  M     g 7fr¿   )Úis_nonnegativerZ  s     r�   rÏ   rc  ]  s   é € ÐDÒ3C¨a×)Ö)Ò3Cùrò  r\  r]  s   ` r�   Ú_has_nonnegative_diagonalsÚ%MatrixBase._has_nonnegative_diagonals[  s)   ø€ ÜA´°d·i±iÔ0@ÓAÐÜÑDÑ3CÓDÓDÐDr¡   c                ó`   • [        S U 5       5      nU(       d  [        4nU R                  " U6 $ )zþ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  óf   #   • U  H'  n[        U[        5      (       a  UO
[        U5      v •  M)     g 7fr¿   )r%  r  )rÍ   Úts     r�   rÏ   Ú#MatrixBase.atoms.<locals>.<genexpr>s  s%   é € ÐKÂUÀœ: a¬×.Ñ.‘a´D¸³GÔ;ÂUùs   ‚/1)Útupler   rì  )r¤   rê  s     r�   ré  ÚMatrixBase.atoms_  s/   € ô( ÑKÁUÓKÓKˆÞÜ�GˆEØ×Ò Ð'Ð'r¡   c                ó"   • U R                  5       $ )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ð  ÚMatrixBase.free_symbolsx  s   € ð ×&Ñ&Ó(Ð(r¡   c                ó    • U R                   " U6 $ )ac  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÷  ÚMatrixBase.has†  s   € ð. �~Š~˜xÐ(Ð(r¡   c                óŒ   • Un[        U5      (       d  U(       a  [        OS nU R                  (       d  gU R                  U5      $ )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                ó   • U $ r¿   r´   ©r[  s    r�   r  Ú.MatrixBase.is_anti_symmetric.<locals>.<lambda>à  ó   € Áar¡   F)r   Ú_utilities_simplifyrf  rP  ©r¤   Úsimplifyr  s      r�   Úis_anti_symmetricÚMatrixBase.is_anti_symmetricŸ  s:   € ð~ ˆÜ˜(×#Ñ#Þ.6Õ*¹KˆHà�~�~ØØ×+Ñ+¨HÓ5Ð5r¡   c                ó"   • U R                  5       $ )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_diagonalÚMatrixBase.is_diagonalæ  s   € ðR ×%Ñ%Ó'Ð'r¡   c                ó”   ^ ^^• T R                   (       d  gT R                  u  nmUU 4S jm[        U4S j[        U5       5       5      $ )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                óª   >• TR                   n[        T5       H  nX:w  d  M
  U[        TX4   5      -  nM     [        TX 4   5      U-
  R                  $ r¿   )rú   rÚ   r   re  ©rµ   Ú	summationr¶   r•   r¤   s      €€r�   Útest_rowÚ:MatrixBase.is_weakly_diagonally_dominant.<locals>.test_row:  sP   ø€ ØŸ	™	ˆIÜ˜4–[�Ø•6Ø¤ T¨!¨$¡Z£Ñ0’Iñ !ô ˜˜Q˜T™
“O iÑ/×?Ñ?Ð?r¡   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr¿   r´   ©rÍ   rµ   rƒ  s     €r�   rÏ   Ú;MatrixBase.is_weakly_diagonally_dominant.<locals>.<genexpr>A  ó   øé € Ð:ªk¨™ !Ÿ˜ªkùó   ƒ©rf  r¯   r8   rÚ   ©r¤   r”   r•   rƒ  s   ` @@r�   Úis_weakly_diagonally_dominantÚ(MatrixBase.is_weakly_diagonally_dominant  s:   ú€ ðH �~�~Øà—Z‘Z‰
ˆˆdö	@ô Ô:¬e°D¬kÓ:Ó:Ð:r¡   c                ó”   ^ ^^• T R                   (       d  gT R                  u  nmUU 4S jm[        U4S j[        U5       5       5      $ )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                óª   >• TR                   n[        T5       H  nX:w  d  M
  U[        TX4   5      -  nM     [        TX 4   5      U-
  R                  $ r¿   )rú   rÚ   r   rY  r�  s      €€r�   rƒ  Ú<MatrixBase.is_strongly_diagonally_dominant.<locals>.test_rowl  sP   ø€ ØŸ	™	ˆIÜ˜4–[�Ø•6Ø¤ T¨!¨$¡Z£Ñ0’Iñ !ô ˜˜Q˜T™
“O iÑ/×<Ñ<Ð<r¡   c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr¿   r´   r†  s     €r�   rÏ   Ú=MatrixBase.is_strongly_diagonally_dominant.<locals>.<genexpr>s  rˆ  r‰  rŠ  r‹  s   ` @@r�   Úis_strongly_diagonally_dominantÚ*MatrixBase.is_strongly_diagonally_dominantC  s9   ú€ ðH �~�~Øà—Z‘Z‰
ˆˆdö	=ô Ô:¬e°D¬kÓ:Ó:Ð:r¡   c                óP   • U R                   (       d  gU R                  [        5      $ )a¯  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)rf  r  rw  r®   s    r�   Úis_hermitianÚMatrixBase.is_hermitianu  s    € ð: �~�~Øà×-Ñ-Ô.AÓBÐBr¡   c                óF   • U R                   (       d  gU R                  5       $ )NF)rf  r  r®   s    r�   Úis_IdentityÚMatrixBase.is_Identity—  s   € à�~�~ØØ×%Ñ%Ó'Ð'r¡   c                ó"   • U R                  5       $ )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_hessenbergÚMatrixBase.is_lower_hessenberg�  ó   € ð6 ×-Ñ-Ó/Ð/r¡   c                ó"   • U R                  5       $ )a\  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_lowerÚMatrixBase.is_lowerº  s   € ðV ×"Ñ"Ó$Ð$r¡   c                ó4   • U R                   U R                  :H  $ )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�   rf  ÚMatrixBase.is_squareç  s   € ð, �y‰y˜DŸI™IÑ%Ð%r¡   c                ó"   • U R                  5       $ )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_symbolicÚMatrixBase.is_symbolicÿ  s   € ð ×%Ñ%Ó'Ð'r¡   c                óŒ   • Un[        U5      (       d  U(       a  [        OS nU R                  (       d  gU R                  U5      $ )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                ó   • U $ r¿   r´   rt  s    r�   r  Ú)MatrixBase.is_symmetric.<locals>.<lambda>G  rv  r¡   F)r   rw  rf  rH  rx  s      r�   rg  ÚMatrixBase.is_symmetric  s:   € ðn ˆÜ˜(×#Ñ#Þ.6Õ*¹KˆHà�~�~Øà×&Ñ& xÓ0Ð0r¡   c                ó"   • U R                  5       $ )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_hessenbergÚMatrixBase.is_upper_hessenbergN  rž  r¡   c                ó"   • U R                  5       $ )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
)r3  r®   s    r�   Úis_upperÚMatrixBase.is_upperk  s   € ðT ×"Ñ"Ó$Ð$r¡   c                ó"   • U R                  5       $ )at  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_matrixÚMatrixBase.is_zero_matrix—  s   € ð: ×(Ñ(Ó*Ð*r¡   c                ó"   • U R                  5       $ )z·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æ  ÚMatrixBase.values¶  s   € ð$ × Ñ Ó"Ð"r¡   c                ó"   • U R                  5       $ )z¸
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Ý  ÚMatrixBase.iter_valuesÊ  s   € ð" ×%Ñ%Ó'Ð'r¡   c                ó"   • U R                  5       $ )zë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  ÚMatrixBase.iter_itemsÝ  s   € ð" ×$Ñ$Ó&Ð&r¡   c                óB   • U R                  5       R                  S 5      $ )Nc                ó"   • U R                  5       $ r¿   ©r  rt  s    r�   r  Ú*MatrixBase._eval_adjoint.<locals>.<lambda>ñ  s
   € °A·I±I´Kr¡   )Ú	transposeÚ	applyfuncr®   s    r�   Ú_eval_adjointÚMatrixBase._eval_adjointð  s   € Ø�~‰~Ó×)Ñ)Ñ*?Ó@Ð@r¡   c                óŒ  • U R                   nU R                  U R                   -  nU R                  5       nUR                  5        Vs0 s H  oUU" U5      _M     nn[	        U5      U:  a€  U" [
        R                  5      =n[
        R                  LaW  U/U-  nUR                  5        H  u  u  pšnXe   X‰U-  U
-   '   M     U R                  U R                  U R                   U5      nU$ UR                  5        VVs0 s H
  u  pÅXÆU   _M     nnnU R                  U R                  U R                   U5      nU$ s  snf s  snnf r¿   )
r•   r”   r?  ræ  rÒ   r#   rØ  r   rž   rV  )r¤   Úfr•   r‡  rû   r  ÚvalmapÚfzeror  rµ   r¶   ÚoutrU  Úfdoks                 r�   Ú_eval_applyfuncÚMatrixBase._eval_applyfuncó  s  € Ø�y‰yˆØ�y‰y˜Ÿ™Ñ"ˆà�j‰j‹lˆØ#&§:¡:¤<Ó0¢<˜a‘Q�q“T’'¡<ˆÐ0äˆs‹8�d‹?©!¬A¯F©F«)Ð!3 ¼A¿F¹FÒ BØ�w˜t‘|ˆHØ ŸY™Yž[‘	‘�˜Ø'-¡y�˜4™ !™Ó$ñ )à—)‘)˜DŸI™I t§y¡y°(Ó;ˆCð
 ˆ
ð 03¯y©y¬{Ô;ª{¡e b�B˜q™	’M©{ˆDÑ;Ø—-‘- §	¡	¨4¯9©9°dÓ;ˆCàˆ
ùò 1ùó <s   ÁD;Ã>E c                óV   • U R                  [        5      U R                  [        5      4$ r¿   )r¿  r   r   r®   s    r�   Ú_eval_as_real_imagÚMatrixBase._eval_as_real_imag  s   € Ø—‘œrÓ" D§N¡N´2Ó$6Ð7Ð7r¡   c                ó&   • U R                  S 5      $ )Nc                ó"   • U R                  5       $ r¿   ©Ú	conjugatert  s    r�   r  Ú,MatrixBase._eval_conjugate.<locals>.<lambda>	  s
   € ¨¯©¬r¡   ©r¿  r®   s    r�   Ú_eval_conjugateÚMatrixBase._eval_conjugate  s   € Ø�~‰~Ñ5Ó6Ð6r¡   c                óx   ^ ^• [        U5      mUU 4S jnT R                  T R                  T R                  U5      $ )Nc                ó   >• TU TU   4   $ r¿   r´   ©rµ   r¶   Úmappingr¤   s     €€r�   r¸   Ú,MatrixBase._eval_permute_cols.<locals>.entry  s   ø€ Ø˜˜7 1™:˜Ñ&Ð&r¡   ©rÑ   rž   r”   r•   ©r¤   Úpermr¸   rØ  s   `  @r�   Ú_eval_permute_colsÚMatrixBase._eval_permute_cols  ó.   ù€ ä�t“*ˆö	'ð �y‰y˜Ÿ™ D§I¡I¨uÓ5Ð5r¡   c                óx   ^ ^• [        U5      mUU 4S jnT R                  T R                  T R                  U5      $ )Nc                ó   >• TTU    U4   $ r¿   r´   r×  s     €€r�   r¸   Ú,MatrixBase._eval_permute_rows.<locals>.entry  s   ø€ Ø˜ ™
 A˜Ñ&Ð&r¡   rÚ  rÛ  s   `  @r�   Ú_eval_permute_rowsÚMatrixBase._eval_permute_rows  rß  r¡   c                óT   ^ • [        U 4S j[        T R                  5       5       5      $ )Nc              3  ó0   >#   • U  H  nTX4   v •  M     g 7fr¿   r´   rT  s     €r�   rÏ   Ú)MatrixBase._eval_trace.<locals>.<genexpr>  s   øé € Ð8Ò'7 !�4˜˜–:Ò'7ùrW  )ÚsumrÚ   r”   r®   s   `r�   Ú_eval_traceÚMatrixBase._eval_trace  s   ø€ ÜÔ8¤u¨T¯Y©YÔ'7Ó8Ó8Ð8r¡   c                óZ   ^ • T R                  T R                  T R                  U 4S j5      $ )Nc                ó   >• TX4   $ r¿   r´   ©rµ   r¶   r¤   s     €r�   r  Ú,MatrixBase._eval_transpose.<locals>.<lambda>!  s   ø€ ¸DÀÀºJr¡   )rž   r•   r”   r®   s   `r�   Ú_eval_transposeÚMatrixBase._eval_transpose   s   ø€ Ø�y‰y˜Ÿ™ D§I¡IÔ/FÓGÐGr¡   c                ó"   • U R                  5       $ )z-Conjugate transpose or Hermitian conjugation.)rÀ  r®   s    r�   r  ÚMatrixBase.adjoint#  s   € à×!Ñ!Ó#Ð#r¡   c                óZ   • [        U5      (       d  [        S5      eU R                  U5      $ )zä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+  rÈ  )r¤   rÃ  s     r�   r¿  ÚMatrixBase.applyfunc'  s*   € ô$ ˜�{‰{ÜÐ3Ó4Ð4à×#Ñ# AÓ&Ð&r¡   c                ó"   • U R                  5       $ )z@Returns a tuple containing the (real, imaginary) part of matrix.)rË  )r¤   ÚdeepÚhintss      r�   Úas_real_imagÚMatrixBase.as_real_imag>  s   € ð ×&Ñ&Ó(Ð(r¡   c                ó"   • U R                  5       $ )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
)rÓ  r®   s    r�   rÐ  ÚMatrixBase.conjugateC  s   € ð4 ×#Ñ#Ó%Ð%r¡   c                ó.   ^• U R                  U4S j5      $ )Nc                ó(   >• U R                   " S0 TD6$ ©Nr´   )Údoit)r[  rø  s    €r�   r  Ú!MatrixBase.doit.<locals>.<lambda>`  s   ø€ ¨¯ª©°ªr¡   rÒ  )r¤   rø  s    `r�   r   ÚMatrixBase.doit_  s   ø€ Ø�~‰~Ô7Ó8Ð8r¡   c                ó>   ^^• X#XEXgS.mU R                  UU4S j5      $ )ú&Apply evalf() to each element of self.)ÚsubsÚmaxnÚchopr¢  ÚquadÚverbosec                ó*   >• U R                   " T40 TD6$ r¿   ©Úevalf)rµ   r  Úoptionss    €€r�   r  Ú"MatrixBase.evalf.<locals>.<lambda>f  s   ø€ ¨¯ª°Ñ(=°WÒ(=r¡   rÒ  )	r¤   r  r  r  r  r¢  r  r	  r  s	    `      @r�   r  ÚMatrixBase.evalfb  s"   ù€ à°DØñ0ˆà�~‰~Õ=Ó>Ð>r¡   c	                óN   ^^^^^^^^^	• U R                  UUU	UUUUUU4	S j5      $ )zÜ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           
     ó8   >	• U R                   " TTTT	TTTT40 TD6$ r¿   )Úexpand)
r[  Úbasicr÷  rø  r'   ÚmodulusÚmulÚmultinomialÚ
power_baseÚ	power_exps
    €€€€€€€€€r�   r  Ú#MatrixBase.expand.<locals>.<lambda>w  s'   ø€ ¨¯ªØ�'˜: y°#°s¸KÈñ)àò)r¡   rÒ  )
r¤   r÷  r  r  r  r  r'   r  r  rø  s
    `````````r�   r  ÚMatrixBase.expandh  s!   ÿø€ ð �~‰~÷ ô ó ð 	r¡   c                ó"   • U R                  5       $ )a6  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
r¼  r®   s    r�   ÚHÚMatrixBase.H{  s   € ð0 �|‰|‹~Ðr¡   c                óä  ^• SSK Jn  US:X  a  SnUS:X  a  SnUS:X  a  SnUS	;  a  [        S
R                  U5      5      eUS;  a  [        SR                  U5      5      e[	        X[
        45      (       d  [        SR                  U5      5      eUS:X  a  U R                  OU R                  m[        U4S j[        [        U5      5       5       5      (       d  [        S5      eU(       aM  [	        X5      (       d=  [	        US   [
        5      (       a%  US:X  a  [        [        U5      5      nU" UTS-   S9nO
U" UTS-   S9nUS:X  a  U R                  U5      $ US:X  a  U R                  U5      $ g)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ÚforwardsÚforwardÚ	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  óN   >#   • U  H  nS Us=:*  =(       a    T:*  Os  v •  M     g7f©r   Nr´   )rÍ   rj  Ú	max_indexs     €r�   rÏ   Ú%MatrixBase.permute.<locals>.<genexpr>	  s#   øé € ÐDÒ0C¨1�1˜×&Ó&˜Y×&Ñ&Ò0Cùs   ƒ"%z`swap` indices out of range.r/   )r‡  N)Úsympy.combinatoricsr  r+  r  r%  r   r>  r”   r•   r,  r3   rÑ   r  Úreversedrã  rÝ  )r¤   rÜ  ÚorientationÚ	directionr  r'  s        @r�   ÚpermuteÚMatrixBase.permute•  sv  ø€ õB 	4ð ˜
Ó"Ø!ˆIØ˜Ó#Ø"ˆIØ˜)Ó#Ø ˆKàÐ3Ó3Üð :ß:@¹&ÀÓ:KóMð MàÐ.Ó.Üð 3ß39±6¸+Ó3FóHð Hô ˜$¬hÐ 7×8Ñ8Üð1ß17±¸³ó?ð ?ð
 "-°Ó!6�D—I’I¸D¿I¹Iˆ	ÜÔD´¼¸T»
Ô0CÓD×DÑDÜÐ;Ó<Ð<æœ
 4×5Ñ5Ü�t˜A‘w¤×)Ñ)Ø˜IÓ%ÜœH T›NÓ+�Ù˜t¨)°A©+Ñ6‰Dá˜t¨)°A©+Ñ6ˆDà˜&Ó Ø×*Ñ*¨4Ó0Ð0Ø˜&Ó Ø×*Ñ*¨4Ó0Ð0ð !r¡   c                ó$   • U R                  USUS9$ )zgAlias for
``self.permute(swaps, orientation='cols', direction=direction)``

See Also
========

permute
r•   ©r+  r,  ©r-  ©r¤   Úswapsr,  s      r�   Úpermute_colsÚMatrixBase.permute_cols	  ó   € ð �|‰|˜E¨vÀˆ|ÐKÐKr¡   c                ó$   • U R                  USUS9$ )zgAlias for
``self.permute(swaps, orientation='rows', direction=direction)``

See Also
========

permute
r”   r0  r1  r2  s      r�   Úpermute_rowsÚMatrixBase.permute_rows)	  r6  r¡   c                ó.   ^• U R                  U4S j5      $ )aJ  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                ó   >• [        U T5      $ r¿   r   )r[  Úassumptionss    €r�   r  Ú#MatrixBase.refine.<locals>.<lambda>F	  s   ø€ ¬¨q°+Ô(>r¡   rÒ  )r¤   r<  s    `r�   r	   ÚMatrixBase.refine4	  s   ø€ ð$ �~‰~Ô>Ó?Ð?r¡   c                ó�   ^^^^	• X4US.m	U(       a   0 mUUUU	4S jnU R                  U5      nUT4$ U R                  UUU	4S j5      $ )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   >• U R                   " TT40 TD6u  pTR                  U5        U $ r¿   )ÚreplaceÚupdate)ÚeijÚdijÚFÚGÚdrœ   s     €€€€r�   ÚfuncÚ MatrixBase.replace.<locals>.func_	  s*   ø€ ØŸ;š; q¨!Ñ6¨vÑ6‘�Ø—‘˜”Ø�
r¡   c                ó,   >• U R                   " TT40 TD6$ r¿   )rD  )rµ   rH  rI  rœ   s    €€€r�   r  Ú$MatrixBase.replace.<locals>.<lambda>h	  s   ø€ ¨A¯IªI°a¸Ñ,E¸fÒ,Er¡   rÒ  )
r¤   rH  rI  r@  rA  rB  rK  rÝ   rJ  rœ   s
    ``     @@r�   rD  ÚMatrixBase.replaceH	  sL   û€ ð$ ÀUÑKˆæàˆA÷ð ð
 —‘˜tÓ$ˆAØ�a�4ˆKð —>‘>Ö"EÓFÐFr¡   c                ó´   • US-  nUS:X  a  U $ US:X  a  U SSS2SS24   R                   $ US:X  a  U SSS2SSS24   $ US:X  a  U SS2SSS24   R                   $ g)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É  r˜  r�   )r›  )r¤   r1  Úmods      r�   Úrot90ÚMatrixBase.rot90j	  s{   € ðF �‰cˆØ�!‹8ØˆKØ�!‹8Ø™˜"˜šb˜‘>×#Ñ#Ð#Ø�!‹8Ø™˜"˜™d ˜d˜
Ñ#Ð#Ø�!‹8Øš™D˜b˜D˜‘>×#Ñ#Ð#ð r¡   c                ó.   ^• U R                  U4S j5      $ )a  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                ó(   >• U R                   " S0 TD6$ rÿ  ©ry  ©r[  rœ   s    €r�   r  Ú%MatrixBase.simplify.<locals>.<lambda>¤	  ó   ø€ ¨¯
ª
Ñ(<°VÒ(<r¡   rÒ  ©r¤   rœ   s    `r�   ry  ÚMatrixBase.simplify—	  s   ø€ ð �~‰~Ô<Ó=Ð=r¡   c                óö   ^^• [        T5      S:X  aS  [        TS   [        [        45      (       d5  [	        TS   5      (       a"  [        TS   5      (       d  [        TS   5      4mU R                  UU4S j5      $ )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                ó(   >• U R                   " T0 TD6$ r¿   )r  ©r[  r›   rœ   s    €€r�   r  Ú!MatrixBase.subs.<locals>.<lambda>¹	  s   ø€ ¨¯ª°Ð(?¸Ò(?r¡   )rÒ   r%  Údictrç  Úiterr4   rÑ   r¿  ©r¤   r›   rœ   s    ``r�   r  ÚMatrixBase.subs¦	  sc   ù€ ô  ˆt‹9˜‹>¤:¨d°1©g¼¼c°{×#CÑ#CÌÈTÐRSÉWÏÉÔ^iÐjnÐopÑjq×^rÑ^rÜ˜˜a™“MÐ#ˆDà�~‰~Õ?Ó@Ð@r¡   c                ój   • U R                   U R                  :w  a
  [        5       eU R                  5       $ )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@   ré  r®   s    r�   ÚtraceÚMatrixBase.trace»	  s,   € ð �9‰9˜Ÿ	™	Ó!Ü&Ó(Ð(Ø×ÑÓ!Ð!r¡   c                ó"   • U R                  5       $ )a™  
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

)rï  r®   s    r�   r¾  ÚMatrixBase.transposeÍ	  s   € ðB ×#Ñ#Ó%Ð%r¡   c                ó"   • U R                  5       $ )zMatrix transposition)r¾  r®   s    r�   r›  ÚMatrixBase.Tð	  ó   € ð �~‰~ÓÐr¡   c                ó"   • U R                  5       $ )zBy-element conjugationrÏ  r®   s    r�   ÚCÚMatrixBase.Cõ	  rl  r¡   c                ó&   • U R                   " U0 UD6$ )r  r  rc  s      r�   r  ÚMatrixBase.nú	  s   € à�zŠz˜4Ð* 6Ñ*Ð*r¡   c                ó.   ^• U R                  U4S j5      $ )a  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                ó&   >• U R                  T5      $ r¿   )Úxreplace)r[  Úrules    €r�   r  Ú%MatrixBase.xreplace.<locals>.<lambda>
  s   ø€ ¨¯
©
°4Ô(8r¡   rÒ  )r¤   ru  s    `r�   rt  ÚMatrixBase.xreplaceþ	  s   ø€ ð �~‰~Ô8Ó9Ð9r¡   c                ó.   ^• U R                  U4S j5      $ )Nc                ó(   >• U R                   " S0 TD6$ rÿ  rW  rX  s    €r�   r  Ú+MatrixBase._eval_simplify.<locals>.<lambda>
  rZ  r¡   rÒ  r[  s    `r�   Ú_eval_simplifyÚMatrixBase._eval_simplify
  s   ø€ ð �~‰~Ô<Ó=Ð=r¡   c                ó>   ^^• SSK Jm  U R                  UU4S j5      $ )Nr   )Útrigsimpc                ó   >• T" U 40 TD6$ r¿   r´   )r[  Úoptsr~  s    €€r�   r  Ú+MatrixBase._eval_trigsimp.<locals>.<lambda>
  s   ø€ ©°Ñ(;°dÒ(;r¡   )Úsympy.simplify.trigsimpr~  r¿  )r¤   r€  r~  s    `@r�   Ú_eval_trigsimpÚMatrixBase._eval_trigsimp
  s   ù€ Ý4Ø�~‰~Õ;Ó<Ð<r¡   c                ób   ^ ^• UU 4S jnT R                  T R                  T R                  U5      $ )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                ó:   >• U T-   U::  a  TX4   $ TR                   $ r¿   ©rú   ©rµ   r¶   r1  r¤   s     €€r�   r¸   Ú*MatrixBase.upper_triangular.<locals>.entry9
  ó"   ø€ Ø!" Q¡¨!£�4˜˜‘:Ð:°·±Ð:r¡   rº   ©r¤   r1  r¸   s   `` r�   Úupper_triangularÚMatrixBase.upper_triangular
  ó&   ù€ öB	;ð �y‰y˜Ÿ™ D§I¡I¨uÓ5Ð5r¡   c                ób   ^ ^• UU 4S jnT R                  T R                  T R                  U5      $ )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                ó:   >• U T-   U:¼  a  TX4   $ TR                   $ r¿   r‡  rˆ  s     €€r�   r¸   Ú*MatrixBase.lower_triangular.<locals>.entry_
  rŠ  r¡   rº   r‹  s   `` r�   Úlower_triangularÚMatrixBase.lower_triangular>
  rŽ  r¡   c                óZ   ^ • T R                  T R                  T R                  U 4S j5      $ )Nc                ó"   >• [        TX4   5      $ r¿   )r   rí  s     €r�   r  Ú&MatrixBase._eval_Abs.<locals>.<lambda>e
  s   ø€ ¼CÀÀQÀTÁ
¼Or¡   rº   r®   s   `r�   Ú	_eval_AbsÚMatrixBase._eval_Absd
  s   ø€ Ø�y‰y˜Ÿ™ D§I¡IÔ/KÓLÐLr¡   c                ó^   ^ ^• T R                  T R                  T R                  UU 4S j5      $ )Nc                ó   >• TX4   TX4   -   $ r¿   r´   ©rµ   r¶   r¥   r¤   s     €€r�   r  Ú&MatrixBase._eval_add.<locals>.<lambda>i
  s   ø€  d¨1¨4¡j°5¸¸±;Ò&>r¡   rº   r£   s   ``r�   Ú	_eval_addÚMatrixBase._eval_addg
  s%   ù€ Ø�y‰y˜Ÿ™ D§I¡IÝ>ó@ð 	@r¡   c                ób   ^ ^• UU 4S jnT R                  T R                  TR                  U5      $ )Nc                óÆ   >• [        TR                  5       Vs/ s H  nTX4   TX!4   -  PM     nn [        U6 $ s  snf ! [        [        4 a    [        S U5      s $ f = f)Nc                ó
   • X-   $ r¿   r´   )rø  Úbs     r�   r  Ú<MatrixBase._eval_matrix_mul.<locals>.entry.<locals>.<lambda>t
  s   € ¨1ª5r¡   )rÚ   r•   r   r+  r
   r   )rµ   r¶   r1  rc  r¥   r¤   s       €€r�   r¸   Ú*MatrixBase._eval_matrix_mul.<locals>.entryl
  sn   ø€ Ü16°t·y±yÔ1AÓBÒ1A¨A�4˜˜‘9˜U 1 3™ZÔ'Ñ1AˆCÐBð7Ü˜C�yÐ ùò Cøô œ|Ð,ó 7ô Ñ0°#Ó6Ò6ð	7ús   ™;³A  Á A ÁA rº   ©r¤   r¥   r¸   s   `` r�   Ú_eval_matrix_mulÚMatrixBase._eval_matrix_mulk
  s%   ù€ ö	7ð �y‰y˜Ÿ™ E§J¡J°Ó6Ð6r¡   c                ó^   ^ ^• T R                  T R                  T R                  UU 4S j5      $ )Nc                ó   >• TX4   TX4   -  $ r¿   r´   r›  s     €€r�   r  Ú9MatrixBase._eval_matrix_mul_elementwise.<locals>.<lambda>y
  s   ø€ ¸DÀÀ¹IÀeÈAÈCÁjÒ<Pr¡   rº   r£   s   ``r�   Ú_eval_matrix_mul_elementwiseÚ'MatrixBase._eval_matrix_mul_elementwisex
  s   ù€ Ø�y‰y˜Ÿ™ D§I¡IÕ/PÓQÐQr¡   c                ób   ^ ^• UU 4S jnT R                  TR                  T R                  U5      $ )Nc                ó^   >^ ^• [        U UUU4S j[        TR                  5       5       5      $ )Nc              3  óB   >#   • U  H  nTTU4   TUT4   -  v •  M     g 7fr¿   r´   )rÍ   r1  rµ   r¶   r¥   r¤   s     €€€€r�   rÏ   Ú>MatrixBase._eval_matrix_rmul.<locals>.entry.<locals>.<genexpr>}
  s(   øé € ÐGÒ5F°�u˜Q˜q˜S‘z $ q¨ s¡)Ö+Ò5Fùó   ƒ)rè  rÚ   r•   r›  s   ``€€r�   r¸   Ú+MatrixBase._eval_matrix_rmul.<locals>.entry|
  s   ú€ Ü×G´U¸5¿:¹:Ô5FÓGÓGÐGr¡   rº   r¥  s   `` r�   Ú_eval_matrix_rmulÚMatrixBase._eval_matrix_rmul{
  s$   ù€ ö	Hà�y‰y˜Ÿ™ T§Y¡Y°Ó6Ð6r¡   c                óš   • US:X  a  U $ US-  S:X  a  X R                  US-
  5      p2OU R                  US-  5      =p#UR                  U5      $ )Nr/   r˜  )Ú_eval_pow_by_recursionÚmultiply)r¤   Únumrø  r¢  s       r�   r¶  Ú!MatrixBase._eval_pow_by_recursion€
  sR   € Ø�!‹8ØˆKà�‰7�a‹<Ø×4Ñ4°S¸1±WÓ=‰qà×/Ñ/°°q±Ó9Ð9ˆAà�z‰z˜!‹}Ðr¡   c                ó  • SSK Jn  U R                  S   nU R                  5       nU* R	                  5       SS  nU" XQ5      nU R                  U5      nU R                  U5      n[        U5       H  nXuU   U-  -  nX`-  nM     U$ )Nr   )Úlinrec_coeffsr/   )Úsympy.discrete.recurrencesr»  r¯   ÚcharpolyrÏ  rº  rÅ  rÚ   )	r¤   r&   r»  rç   ÚprÊ  Únew_matÚansrµ   s	            r�   Ú_eval_pow_by_cayleyÚMatrixBase._eval_pow_by_cayley‹
  sƒ   € Ý<Ø�j‰j˜‰mˆØ�M‰M‹Oˆà�"—‘Ó" 1 2Ð&ˆÙ˜vÓ+ˆØ—(‘(˜3“-ˆØ�j‰j˜‹oˆä�s–ˆAØ˜!‘9˜WÑ$Ñ$ˆCØ‰OŠGñ ð ˆ
r¡   c                ó”  • Uc  S/[        U 5      -  nUS:X  a  U $ US-  S:X  a  X R                  US-
  US9pCOU R                  US-  US9=p4UR                  USS9n[        U5      nS /U-  n[        U5       H'  nX(   (       a  [	        XX   SS9u  Xx'   X('   M!  XX   Xx'   M)     UR                  UR                  UR                  U5      $ )NTr/   r˜  )Ú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È  Ú-MatrixBase._eval_pow_by_recursion_dotprodsimp›
  së   € ØÑØ�vœc $›iÑ'ˆHà�!‹8ØˆKà�‰7�a‹<Ø×@Ñ@ÀÀqÁØ%ð Að '‰qð ×;Ñ;¸CÀ1¹HØ%ð <ð 'ð 'ˆAð —
‘
˜1¨%�
Ð0ˆÜ�A“ˆØ��t‘ˆä�t–ˆAØ�{Ü(4°Q±TÀDÑ(IÑ%�‘˜(›+à™4�“ñ	 ð �v‰v�a—f‘f˜aŸf™f eÓ,Ð,r¡   c                ó^   ^ ^• T R                  T R                  T R                  UU 4S j5      $ )Nc                ó   >• TX4   T-  $ r¿   r´   r›  s     €€r�   r  Ú-MatrixBase._eval_scalar_mul.<locals>.<lambda>¶
  s   ø€ ¸DÀÀ¹IÀeºOr¡   rº   r£   s   ``r�   Ú_eval_scalar_mulÚMatrixBase._eval_scalar_mulµ
  ó   ù€ Ø�y‰y˜Ÿ™ D§I¡IÕ/KÓLÐLr¡   c                ó^   ^ ^• T R                  T R                  T R                  UU 4S j5      $ )Nc                ó   >• TTX4   -  $ r¿   r´   r›  s     €€r�   r  Ú.MatrixBase._eval_scalar_rmul.<locals>.<lambda>¹
  s   ø€ ¸EÀ$ÀqÀsÁ)ºOr¡   rº   r£   s   ``r�   Ú_eval_scalar_rmulÚMatrixBase._eval_scalar_rmul¸
  rÑ  r¡   c                ó^   ^ ^• T R                  T R                  T R                  UU 4S j5      $ )Nc                ó$   >• [        TX4   T5      $ r¿   r   r›  s     €€r�   r  Ú&MatrixBase._eval_Mod.<locals>.<lambda>¼
  s   ø€ ¼CÀÀQÀTÁ
ÈEÔ<Rr¡   rº   r£   s   ``r�   Ú	_eval_ModÚMatrixBase._eval_Mod»
  s   ù€ Ø�y‰y˜Ÿ™ D§I¡IÕ/RÓSÐSr¡   c                ó"   • U R                  5       $ )z5Returns a new matrix with entry-wise absolute values.)r—  r®   s    r�   Ú__abs__ÚMatrixBase.__abs__¿
  s   € à�~‰~ÓÐr¡   Ú__radd__c                ó  • [        X5      u  pUS:w  a  [        $ U R                  UR                  :w  a&  [        SU R                   SUR                   S35      eXpCUR                  [        X45      :w  a  X4p4UR                  U5      $ )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¥   r›  rø  r¢  s        r�   Ú__add__ÚMatrixBase.__add__Ã
  s|   € ô # 4Ó/‰ˆà�ÓÜ!Ð!à�:‰:˜Ÿ™Ó$ÜÐ5°d·j±j°\ÀÀUÇ[Á[ÀMÐQRÐSÓTÐTð ˆ1Ø�;‰;œ' !›-Ó'Øˆqà�{‰{˜1‹~Ðr¡   Ú__rtruediv__c                ó$   • X R                   U-  -  $ r¿   r�  r£   s     r�   Ú__truediv__ÚMatrixBase.__truediv__Ö
  s   € à—x‘x %Ñ'Ñ(Ð(r¡   Ú__rmatmul__c                óX   • [        X5      u  pnUS:w  a  [        $ U R                  U5      $ ©Nrá  )Ú_unify_with_otherrå  Ú__mul__©r¤   r¥   r›  s      r�   Ú
__matmul__ÚMatrixBase.__matmul__Ú
  s-   € ä*¨4Ó7‰ˆ�Qà�ÓÜ!Ð!à�|‰|˜EÓ"Ð"r¡   c                ó.   ^• U R                  U4S j5      $ )Nc                ó   >• U T-  $ r¿   r´   )r[  r¥   s    €r�   r  Ú$MatrixBase.__mod__.<locals>.<lambda>ä
  s	   ø€ ¨¨Eª	r¡   rÒ  r£   s    `r�   Ú__mod__ÚMatrixBase.__mod__ã
  s   ø€ Ø�~‰~Ô1Ó2Ð2r¡   Ú__rmul__c                ó$   • U R                  U5      $ )aÎ  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�   rñ  ÚMatrixBase.__mul__æ
  s   € ð: �}‰}˜UÓ#Ð#r¡   c           
     óö  • [        SU5      n[        X5      u  pnUS:X  a   U R                  U5      $ US:X  a¡  U R
                  S   UR
                  S   :w  a&  [        SU R
                   SUR
                   S35      eU R                  U5      nU(       aA  UR                  UR                  UR                  U Vs/ s H  n[        U5      PM     sn5      nU$ [        $ ! [         a	    [        s $ f = fs  snf )	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ã  )r<   rð  rÏ  r+  rå  r¯   r?   r¦  rž   r”   r•   r0   ©r¤   r¥   rÆ  Ú	isimpboolr›  r³  Úes          r�   r·  ÚMatrixBase.multiply  sì   € ô 0°°{ÓCˆ	ä*¨4Ó7‰ˆ�QàÐ!Ó!ð&Ø×,Ñ,¨UÓ3Ð3ð �+Óà�z‰z˜!‰} §¡¨A¡Ó.Ü Ð#9¸$¿*¹*¸ÀSÈÏÉÈÐUVÐ!WÓXÐXà×%Ñ% eÓ,ˆAæØ—F‘F˜1Ÿ6™6 1§6¡6ÁQÓ+GÂQÀ¬L¸®OÁQÑ+GÓH�àˆHô "Ð!øô! ó &Ü%Ò%ð&üò ,Hs   ¢C  Â<C6Ã C3Ã2C3c                ó¶   • U R                   UR                   :w  a/  [        SR                  U R                   UR                   5      5      eU R                  U5      $ )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_elementwiseÚMatrixBase.multiply_elementwise*  sI   € ð* �:‰:˜Ÿ™Ó$ÜÐ@×GÑGÈÏ
É
ÐTY×T_ÑT_Ó`ÓaÐaà×0Ñ0°Ó7Ð7r¡   c                ó$   • U R                  S5      $ )NrÉ  )rÏ  r®   s    r�   Ú__neg__ÚMatrixBase.__neg__D  s   € Ø×$Ñ$ RÓ(Ð(r¡   Ú__rpow__c                ó$   • U R                  U5      $ )z$Return self**exp a scalar or symbol.)Úpow)r¤   r&   s     r�   Ú__pow__ÚMatrixBase.__pow__G  s   € ð �x‰x˜‹}Ðr¡   c                ó  ^^• Ub  US;  a  [        S5      eU R                  U R                  :w  a
  [        5       eU m[	        TSS5      n[        T5      mTR                  (       a(  TR                  TR                  TR                  S 5      $ TS:X  a  T$ [	        TSS5      nUb8  U" 5       (       a,  TR                  TR                  TR                  UU4S j5      $ TR                  (       aK  TS-  S	:X  aB  TR                  S:X  a  TR                  TS	   T-  //5      $ TS	:  a  T* mTR                  5       mUS
:X  a	   U" T5      $ US:X  a6  TR                  (       a	  TS-  S	:w  a  [        S5      eTR                  T5      $ US:X  a6  TR                  (       a	  TS-  S	:w  a  [        S5      eTR                  T5      $ US:X  a6  TR                  (       a	  TS-  S	:w  a  [        S5      eTR                  T5      $ Ucž  TR                  (       a�  TS-  S	:X  a„  TR                  (       a  [!        T5      mTR                  S:X  a  TS:”  a  U" T5      $ [#        SS5      (       a  TR                  T5      $ TS:”  a  TR                  T5      $ TR                  T5      $ U(       a	   U" T5      $ S	SKJn  U" TT5      $ ! [         a
    US
:X  a  e  N2f = f! [$         a"    TR&                  SL d  TR(                  SL a  e  NQf = f)as  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                ó   • [        X:H  5      $ r¿   )r“   )rµ   r¶   s     r�   r  Ú MatrixBase.pow.<locals>.<lambda>j  s
   € ´s¸1¹6´{r¡   r/   r}  c                ó$   >• X:X  a	  TX4   T-  $ S$ )Nr   r´   )rµ   r¶   rø  r&   s     €€r�   r  r  p  s   ø€ ÀaÃf°q¸¸±v¸s±{Ð7SÐRSÐ7Sr¡   r   r  r  z.cayley method is only valid for integer powersr  z/mulsimp method is only valid for integer powersr·  z0multiply method is only valid for integer powersr˜  i † Ti'  F)ÚMatPow)r+  r”   r•   r@   Úgetattrr   r  rž   Ú	is_NumberÚinvr>   r>  rÁ  rÈ  r¶  Úis_Floatr   r<   rA   Ú
is_integerre  Úsympy.matrices.expressionsr  )r¤   r&   ÚmethodÚ
jordan_powr  r  rø  s    `    @r�   r  ÚMatrixBase.powN  sÈ  ù€ ð& Ñ &Ð0[Ó"[ÜÐ,Ó-Ð-Ø�9‰9˜Ÿ	™	Ó!Ü&Ó(Ð(ØˆÜ˜QÐ >ÀÓEˆ
Ü�c‹lˆà�;�;Ø—6‘6˜!Ÿ&™& !§&¡&Ñ*BÓCÐCØ�!‹8ØˆHä˜1˜m¨TÓ2ˆØÑ¡H§J¡JØ—6‘6˜!Ÿ&™& !§&¡&Õ*SÓTÐTà�=�=˜S 1™W¨›\Ø�v‰v˜‹{Ø—v‘v  !¡ c¡	˜{˜mÓ,Ð,Ø�Q‹wØ�d�Ø—E‘E“G�ð �XÓðÙ! #“Ð&ð
 �xÓØ—=—= C¨!¡G¨q£LÜ Ð!QÓRÐRØ×(Ñ(¨Ó-Ð-à�yÓ Ø—=—= C¨!¡G¨q£LÜ Ð!RÓSÐSØ×7Ñ7¸Ó<Ð<à�zÓ!Ø—=—= C¨!¡G¨q£LÜ Ð!SÓTÐTØ×+Ñ+¨CÓ0Ð0à‰^ §§°#¸±'¸Q³,Ø�|�|Ü˜c“l�à�v‰v˜‹{˜s V›|Ù! #“Ð&Ü,¨T°4×8Ñ8Ø×;Ñ;¸CÓ@Ð@Ø�u“Ø×,Ñ,¨SÓ1Ð1à×/Ñ/°Ó4Ð4æðÙ! #“Ð&õ 	6Ù�a˜‹~ÐøôY ó Ø˜XÓ%Øñ &ðûôF ,ó ð
 —>‘> UÒ*¨c×.@Ñ.@ÀEÒ.IØñ /Jðús$   ÅJ= Ê&K Ê=KËKË)L Ë?L rç  c                ó$   • U R                  U5      $ r¿   )rç  r£   s     r�   rß  ÚMatrixBase.__radd__¬  s   € à�|‰|˜EÓ"Ð"r¡   ró  c                óX   • [        X5      u  pnUS:w  a  [        $ U R                  U5      $ rï  )rð  rå  rú  rò  s      r�   rí  ÚMatrixBase.__rmatmul__°  s-   € ä*¨4Ó7‰ˆ�Qà�ÓÜ!Ð!à�}‰}˜UÓ#Ð#r¡   rñ  c                ó$   • U R                  U5      $ r¿   )Ú	rmultiplyr£   s     r�   rú  ÚMatrixBase.__rmul__¹  s   € à�~‰~˜eÓ$Ð$r¡   c           
     óÀ  • [        SU5      n[        X5      u  pnUS:X  a   U R                  U5      $ US:X  a†  U R
                  S   UR
                  S   :w  a  [        S5      eU R                  U5      nU(       aA  UR                  UR                  UR                  U Vs/ s H  n[        U5      PM     sn5      $ U$ [        $ ! [         a	    [        s $ f = fs  snf )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.)r<   rð  rÕ  r+  rå  r¯   r?   r³  rž   r”   r•   r0   rÿ  s          r�   r%  ÚMatrixBase.rmultiply½  sÕ   € ô 0°°{ÓCˆ	Ü*¨4Ó7‰ˆ�QàÐ!Ó!ð&Ø×-Ñ-¨eÓ4Ð4ð �+ÓØ�z‰z˜!‰} §¡¨A¡Ó.Ü Ð!8Ó9Ð9à×&Ñ& uÓ-ˆAæØ—v‘v˜aŸf™f a§f¡fÉÓ.JÊÀ1¬|¸A®ÉÑ.JÓKÐKàˆHô "Ð!øô ó &Ü%Ò%ð&üò /Ks   ¢C Â!CÃCÃCÚ__sub__c                ó   • U * U-   $ r¿   r´   ©r¤   rø  s     r�   Ú__rsub__ÚMatrixBase.__rsub__ß  s   € à�˜‰{Ðr¡   r,  c                ó   • X* -   $ r¿   r´   r+  s     r�   r)  ÚMatrixBase.__sub__ã  s   € à�r‰{Ðr¡   c                ó   • [        XS9$ ©N)Ú
iszerofunc©rL   ©r¤   r2  s     r�   Ú_eval_det_bareissÚMatrixBase._eval_det_bareissç  s   € Ü˜DÑ8Ð8r¡   c                ó   • [        U 5      $ r¿   )rM   r®   s    r�   Ú_eval_det_berkowitzÚMatrixBase._eval_det_berkowitzê  s   € Ü˜dÓ#Ð#r¡   c                ó   • [        XUS9$ )N)r2  r  )rP   )r¤   r2  r  s      r�   Ú_eval_det_luÚMatrixBase._eval_det_luí  s   € Ü�t¸XÑFÐFr¡   c                ó   • [        U 5      $ r¿   )rN   r®   s    r�   Ú_eval_det_birdÚMatrixBase._eval_det_birdð  s   € Ü˜‹Ðr¡   c                ó   • [        U 5      $ r¿   )rO   r®   s    r�   Ú_eval_det_laplaceÚMatrixBase._eval_det_laplaceó  ó   € Ü˜DÓ!Ð!r¡   c                ó   • [        U 5      $ r¿   ©rK   r®   s    r�   Ú_eval_determinantÚMatrixBase._eval_determinantö  ó   € Ü�D‹zÐr¡   c                ó   • [        XS9$ ©N©r  )rF   ©r¤   r  s     r�   ÚadjugateÚMatrixBase.adjugateù  s   € Ü˜Ñ-Ð-r¡   Úlambdac                ó   • [        XUS9$ )N)r[  ry  )rG   ©r¤   r[  ry  s      r�   r½  ÚMatrixBase.charpolyü  s   € Ü˜¨XÑ6Ð6r¡   c                ó   • [        XX#S9$ rJ  )rH   ©r¤   rµ   r¶   r  s       r�   ÚcofactorÚMatrixBase.cofactorÿ  s   € Ü˜ !Ñ3Ð3r¡   c                ó   • [        XS9$ rJ  )rI   rL  s     r�   Úcofactor_matrixÚMatrixBase.cofactor_matrix  s   € Ü Ñ4Ð4r¡   c                ó   • [        XUS9$ )N)r  r2  rE  )r¤   r  r2  s      r�   ÚdetÚMatrixBase.det  s   € Ü�D°JÑ?Ð?r¡   c                ó   • [        U 5      $ r¿   )rJ   r®   s    r�   ÚperÚMatrixBase.per  rH  r¡   c                ó   • [        XX#S9$ rJ  )rQ   rT  s       r�   ÚminorÚMatrixBase.minor  s   € Ü�d˜qÑ0Ð0r¡   c                ó   • [        XU5      $ r¿   )rR   râ  s      r�   Úminor_submatrixÚMatrixBase.minor_submatrix  s   € Ü ¨Ó+Ð+r¡   c                ó   • [        XUUS9$ )N)r2  ry  Úwith_pivots)rT   )r¤   r2  ry  rg  s       r�   Úechelon_formÚMatrixBase.echelon_form"  s   € Ü˜TÀ8Ø'ñ)ð 	)r¡   c                ó   • [        U 5      $ r¿   )rS   r®   s    r�   Ú
is_echelonÚMatrixBase.is_echelon&  s   € ä˜4Ó Ð r¡   c                ó   • [        XUS9$ ©N)r2  ry  )rU   ©r¤   r2  ry  s      r�   ÚrankÚMatrixBase.rank*  s   € Ü�T¸8ÑDÐDr¡   c                óÄ   • [        U R                  X R                  U R                  5      U5      5      u  p#USS2SU R                  24   USS2UR                  * S24   4$ )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¤   ÚrhsrN  r  s       r�   Úrref_rhsÚMatrixBase.rref_rhs-  sU   € ô" �T—[‘[ §x¡x°·	±	Ó':¸CÓ@ÓA‰ˆØ’�J�T—Y‘Y�J�Ñ ¢1 s§x¡x i¡j =Ñ!1Ð1Ð1r¡   c                ó   • [        XUX4S9$ )N)r2  ry  ÚpivotsÚnormalize_last)rV   )r¤   r2  ry  rw  rx  s        r�   ÚrrefÚMatrixBase.rrefA  s   € ä�T¸8Øñ:ð 	:r¡   c                ó2  • US;  a  [        SR                  Xa5      5      eUS:X  a  U R                  OU R                  nUS:X  aR  Ub  UOUnUb  Uc  [        SR                  U5      5      eSUs=::  a  U:  d  O  [        SR                  Xb5      5      eGO}US	:X  a·  X#XE1R	                  S/5      n[        U5      S
:”  a  X$U1R	                  S/5      n[        U5      S
:w  a  [        SR                  U5      5      eUu  pESUs=::  a  U:  d  O  [        SR                  Xd5      5      eSUs=::  a  U:  d  O  [        SR                  Xe5      5      eOÀUS:X  a£  Uc  UOUnUc  UOUnUb  Ub  Uc  [        SR                  U5      5      eX%:X  a  [        SR                  U5      5      eSUs=::  a  U:  d  O  [        SR                  Xb5      5      eSUs=::  a  U:  d  O  [        SR                  Xe5      5      eO[        S[        U5      -  5      eXX4U4$ )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}  r˜  zIFor a {0} operation 'n<->m' you must provide the kwargs `{0}1` and `{0}2`r~  zPFor a {0} operation 'n->n+km' you must provide the kwargs `{0}`, `k`, and `{0}2`zAFor a {0} operation 'n->n+km' `{0}` and `{0}2` must be different.zinvalid operation %s)r>  r  r•   r”   Ú
differencerÒ   Úrepr)	r¤   Úopr·   r1  Úcol1Úcol2Ú	error_strÚ	self_colsr•   s	            r�   Ú_normalize_op_argsÚMatrixBase._normalize_op_argsK  sG  € ð Ð2Ó2Üð ?ß?E¹vÀiÓ?TóVð Vð "+¨eÓ!3�D—I’I¸¿¹ˆ	ð �‹=Ø™‘#¨dˆCØ‰{˜a™iÜ ð "8ß8>¹¸yÓ8IóKð Kà˜Õ'˜iÕ'Ü Ð!F×!MÑ!MÈiÓ!]Ó^Ð^ñ (ð �7‹]ð ˜DÐ'×2Ñ2°D°6Ó:ˆDÜ�4‹y˜1‹}à 4Ð(×3Ñ3°T°FÓ;�Ü�4‹y˜A‹~Ü ð "<ß<B¹FÀ9Ó<MóOð Oà‰JˆDØ˜Õ(˜yÕ(Ü Ð!F×!MÑ!MÈiÓ!^Ó_Ð_Ø˜Õ(˜yÕ(Ü Ð!F×!MÑ!MÈiÓ!^Ó_Ð_ð )ð �9‹_Ø™+‘$¨3ˆCØ™<‘4¨TˆDØ‰{˜d™l¨a©iÜ ð "AßAGÁÈ	ÓARóTð Tà‹{Ü ð "1ß17±¸	Ó1BóDð Dà˜Õ'˜iÕ'Ü Ð!F×!MÑ!MÈiÓ!]Ó^Ð^Ø˜Õ(˜yÕ(Ü Ð!F×!MÑ!MÈiÓ!^Ó_Ð_ð )ô Ð3´d¸2³hÑ>Ó?Ð?à˜ Ð%Ð%r¡   c                óf   ^ ^^• UUU 4S jnT R                  T R                  T R                  U5      $ )Nc                ó.   >• UT:X  a	  TTX4   -  $ TX4   $ r¿   r´   )rµ   r¶   r·   r1  r¤   s     €€€r�   r¸   Ú<MatrixBase._eval_col_op_multiply_col_by_const.<locals>.entryƒ  ó&   ø€ Ø�C‹xØ˜4  ™:‘~Ð%Ø˜˜‘:Ðr¡   rº   )r¤   r·   r1  r¸   s   ``` r�   Ú"_eval_col_op_multiply_col_by_constÚ-MatrixBase._eval_col_op_multiply_col_by_const‚  ó%   ú€ ÷	ð �y‰y˜Ÿ™ D§I¡I¨uÓ5Ð5r¡   c                óf   ^ ^^• UUU 4S jnT R                  T R                  T R                  U5      $ )Nc                óD   >• UT:X  a  TU T4   $ UT:X  a  TU T4   $ TX4   $ r¿   r´   )rµ   r¶   r‚  rƒ  r¤   s     €€€r�   r¸   Ú+MatrixBase._eval_col_op_swap.<locals>.entryŠ  s9   ø€ Ø�D‹yØ˜A˜t˜G‘}Ð$Ø�d“Ø˜A˜t˜G‘}Ð$Ø˜˜‘:Ðr¡   rº   )r¤   r‚  rƒ  r¸   s   ``` r�   Ú_eval_col_op_swapÚMatrixBase._eval_col_op_swap‰  ó%   ú€ ÷	ð �y‰y˜Ÿ™ D§I¡I¨uÓ5Ð5r¡   c                ój   ^ ^^^• UUUU 4S jnT R                  T R                  T R                  U5      $ )Nc                ó>   >• UT:X  a  TX4   TTU T4   -  -   $ TX4   $ r¿   r´   )rµ   r¶   r·   rƒ  r1  r¤   s     €€€€r�   r¸   Ú@MatrixBase._eval_col_op_add_multiple_to_other_col.<locals>.entry“  s4   ø€ Ø�C‹xØ˜A˜D‘z A¨¨Q°¨W©Ñ$5Ñ5Ð5Ø˜˜‘:Ðr¡   rº   )r¤   r·   r1  rƒ  r¸   s   ```` r�   Ú&_eval_col_op_add_multiple_to_other_colÚ1MatrixBase._eval_col_op_add_multiple_to_other_col’  ó*   û€ ÷	ð 	ð �y‰y˜Ÿ™ D§I¡I¨uÓ5Ð5r¡   c                óf   ^ ^^• UUU 4S jnT R                  T R                  T R                  U5      $ )Nc                óD   >• U T:X  a  TTU4   $ U T:X  a  TTU4   $ TX4   $ r¿   r´   )rµ   r¶   Úrow1Úrow2r¤   s     €€€r�   r¸   Ú+MatrixBase._eval_row_op_swap.<locals>.entryš  s9   ø€ Ø�D‹yØ˜D !˜G‘}Ð$Ø�d“Ø˜D !˜G‘}Ð$Ø˜˜‘:Ðr¡   rº   )r¤   r�  rž  r¸   s   ``` r�   Ú_eval_row_op_swapÚMatrixBase._eval_row_op_swap™  r”  r¡   c                óf   ^ ^^• UUU 4S jnT R                  T R                  T R                  U5      $ )Nc                ó.   >• U T:X  a	  TTX4   -  $ TX4   $ r¿   r´   )rµ   r¶   r1  rç   r¤   s     €€€r�   r¸   Ú<MatrixBase._eval_row_op_multiply_row_by_const.<locals>.entry£  r‹  r¡   rº   )r¤   rç   r1  r¸   s   ``` r�   Ú"_eval_row_op_multiply_row_by_constÚ-MatrixBase._eval_row_op_multiply_row_by_const¢  rŽ  r¡   c                ój   ^ ^^^• UUUU 4S jnT R                  T R                  T R                  U5      $ )Nc                ó>   >• U T:X  a  TX4   TTTU4   -  -   $ TX4   $ r¿   r´   )rµ   r¶   r1  rç   rž  r¤   s     €€€€r�   r¸   Ú@MatrixBase._eval_row_op_add_multiple_to_other_row.<locals>.entryª  s4   ø€ Ø�C‹xØ˜A˜D‘z A¨¨T°1¨W©Ñ$5Ñ5Ð5Ø˜˜‘:Ðr¡   rº   )r¤   rç   r1  rž  r¸   s   ```` r�   Ú&_eval_row_op_add_multiple_to_other_rowÚ1MatrixBase._eval_row_op_add_multiple_to_other_row©  rš  r¡   c                óÀ   • U R                  XX4US5      u  pp4nUS:X  a  U R                  X#5      $ US:X  a  U R                  XE5      $ US:X  a  U R                  X#U5      $ g)aü  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·   r1  r‚  rƒ  s         r�   Úelementary_col_opÚMatrixBase.elementary_col_op°  ós   € ð( "&×!8Ñ!8¸À!È4ÐQVÓ!WÑˆ�˜$ð �‹=Ø×:Ñ:¸3ÓBÐBØ�‹=Ø×)Ñ)¨$Ó5Ð5Ø�‹?Ø×>Ñ>¸sÀtÓLÐLð r¡   c                óÀ   • U R                  XX4US5      u  pp4nUS:X  a  U R                  X#5      $ US:X  a  U R                  XE5      $ US:X  a  U R                  X#U5      $ g)aÌ  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ç   r1  r�  rž  s         r�   Úelementary_row_opÚMatrixBase.elementary_row_opÎ  r¯  r¡   c                ó   • [        XS9$ ©NrW  )rl   ©r¤   ry  s     r�   ÚcolumnspaceÚMatrixBase.columnspaceì  s   € Ü˜DÑ4Ð4r¡   c                ó   • [        XUS9$ )N)ry  r2  )rm   )r¤   ry  r2  s      r�   Ú	nullspaceÚMatrixBase.nullspaceï  s   € Ü˜$¸jÑIÐIr¡   c                ó   • [        XS9$ r´  )rn   rµ  s     r�   ÚrowspaceÚMatrixBase.rowspaceò  s   € Ü˜Ñ1Ð1r¡   c                ó    • [        U /UQ70 UD6$ r¿   )ro   )rš   Úvecsrœ   s      r�   ÚorthogonalizeÚMatrixBase.orthogonalizeø  s   € Ü˜cÐ3 DÒ3¨FÑ3Ð3r¡   c                ó   • [        U 4SU0UD6$ )NÚerror_when_incomplete)rp   )r¤   rÃ  Úflagss      r�   Ú	eigenvalsÚMatrixBase.eigenvals  s   € Ü˜$ÑUÐ6KÐUÈuÑUÐUr¡   c                ó    • [        U 4UUS.UD6$ )N)rÃ  r2  )rq   )r¤   rÃ  r2  rÄ  s       r�   Ú
eigenvectsÚMatrixBase.eigenvects  s$   € Ü˜4ð 0Ð7LØ%ñ0Ø).ñ0ð 	0r¡   c                ó   • [        U 4SU0UD6$ )NÚ
reals_only)rt   )r¤   rË  rœ   s      r�   Úis_diagonalizableÚMatrixBase.is_diagonalizable	  s   € Ü! $ÑH°:ÐHÀÑHÐHr¡   c                ó   • [        XUUS9$ )N)rË  ÚsortÚ	normalize)ru   )r¤   rË  rÏ  rÐ  s       r�   ÚdiagonalizeÚMatrixBase.diagonalize  s   € Ü˜D¸dØ#ñ%ð 	%r¡   c                ó   • [        XS9$ ©N©r}  )rr   ©r¤   r}  s     r�   ÚbidiagonalizeÚMatrixBase.bidiagonalize  s   € Ü˜dÑ0Ð0r¡   c                ó   • [        XS9$ rÔ  )rs   rÖ  s     r�   Úbidiagonal_decompositionÚ#MatrixBase.bidiagonal_decomposition  s   € Ü(¨Ñ;Ð;r¡   c                ó   • [        U 5      $ r¿   )rv   r®   s    r�   Úis_positive_definiteÚMatrixBase.is_positive_definite  ó   € ä$ TÓ*Ð*r¡   c                ó   • [        U 5      $ r¿   )rw   r®   s    r�   Úis_positive_semidefiniteÚ#MatrixBase.is_positive_semidefinite  ó   € ä(¨Ó.Ð.r¡   c                ó   • [        U 5      $ r¿   )rx   r®   s    r�   Úis_negative_definiteÚMatrixBase.is_negative_definite  rß  r¡   c                ó   • [        U 5      $ r¿   )ry   r®   s    r�   Úis_negative_semidefiniteÚ#MatrixBase.is_negative_semidefinite"  rã  r¡   c                ó   • [        U 5      $ r¿   )rz   r®   s    r�   Úis_indefiniteÚMatrixBase.is_indefinite&  s   € ä˜dÓ#Ð#r¡   c                ó   • [        U 4SU0UD6$ )NÚcalc_transform)r{   )r¤   rî  rœ   s      r�   Újordan_formÚMatrixBase.jordan_form*  s   € Ü˜DÑJ°ÐJÀ6ÑJÐJr¡   c                ó   • [        U 40 UD6$ r¿   )r|   ©r¤   rÄ  s     r�   Úleft_eigenvectsÚMatrixBase.left_eigenvects-  s   € Ü Ñ.¨Ñ.Ð.r¡   c                ó   • [        U 5      $ r¿   )r}   r®   s    r�   Úsingular_valuesÚMatrixBase.singular_values0  ó   € Ü Ó%Ð%r¡   )Úevaluatec               ó‚   • SSK Jn  U" U /UQ7SU06n[        U [        5      (       d  U(       a  UR	                  5       $ U$ )zõ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   ÚMatrixBase.diffB  s?   € õ* 	IÙ Ð? tÒ?°hÑ?ˆä˜$¤×&Ñ&®8Ø×#Ñ#Ó%Ð%Øˆr¡   c                ó.   ^• U R                  U4S j5      $ )Nc                ó&   >• U R                  T5      $ r¿   r   )r[  Úargs    €r�   r  Ú-MatrixBase._eval_derivative.<locals>.<lambda>_  s   ø€ ¨¯©¨s¬r¡   rÒ  )r¤   r  s    `r�   Ú_eval_derivativeÚMatrixBase._eval_derivative^  s   ø€ Ø�~‰~Ô3Ó4Ð4r¡   c                ó2   ^^• U R                  UU4S j5      $ )af  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                ó(   >• U R                   " T0 TD6$ r¿   )Ú	integrater_  s    €€r�   r  Ú&MatrixBase.integrate.<locals>.<lambda>z  s   ø€ ¨¯ª°TÐ(D¸VÒ(Dr¡   rÒ  rc  s    ``r�   r  ÚMatrixBase.integratea  s   ù€ ð2 �~‰~ÕDÓEÐEr¡   c                óÈ  ^ ^• SSK Jn  [        TU5      (       d  T R                  T5      mT R                  S   S:X  a  T R                  S   nO.T R                  S   S:X  a  T R                  S   nO[        S5      eTR                  S   S:X  a  TR                  S   nO.TR                  S   S:X  a  TR                  S   nO[        S5      eT R                  X4UU 4S j5      $ )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                ó2   >• TU    R                  TU   5      $ r¿   r   )r¶   rµ   ÚXr¤   s     €€r�   r  Ú%MatrixBase.jacobian.<locals>.<lambda>´  s   ø€ ¨D°©G¯L©L¸¸1¹Ô,>r¡   )r©  r�   r%  rž   r¯   r+  )r¤   r  r�   r³  r  s   ``   r�   ÚjacobianÚMatrixBase.jacobian|  sÃ   ù€ õH 	9Ü˜!˜Z×(Ñ(Ø—	‘	˜!“ˆAð �:‰:�a‰=˜AÓØ—
‘
˜1‘‰AØ�Z‰Z˜‰]˜aÓØ—
‘
˜1‘‰AäÐGÓHÐHØ�7‰7�1‰:˜‹?Ø—‘˜‘
‰AØ�W‰W�Q‰Z˜1‹_Ø—‘˜‘
‰AäÐ@ÓAÐAð �y‰y˜Õ>Ó?Ð?r¡   c                ó.   ^• U R                  U4S j5      $ )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                ó"   >• U R                   " T6 $ r¿   )Úlimit)r[  r›   s    €r�   r  Ú"MatrixBase.limit.<locals>.<lambda>Ë  s   ø€ ¨¯ª°©r¡   rÒ  )r¤   r›   s    `r�   r  ÚMatrixBase.limit¶  s   ø€ ð* �~‰~Ô6Ó7Ð7r¡   c                ó    • U R                  US9$ )Nrt  )r½  rQ  s      r�   Úberkowitz_charpolyÚMatrixBase.berkowitz_charpolyÍ  s   € Ø�}‰}˜qˆ}Ð!Ð!r¡   c                ó    • U R                  SS9$ )zEComputes determinant using Berkowitz method.

See Also
========

det
Ú	berkowitzrK  ©r[  r®   s    r�   Úberkowitz_detÚMatrixBase.berkowitz_detÐ  s   € ð �x‰x˜{ˆxÐ+Ð+r¡   c                ó&   • U R                   " S0 UD6$ )z8Computes eigenvalues of a Matrix using Berkowitz method.r´   )rÅ  rò  s     r�   Úberkowitz_eigenvalsÚMatrixBase.berkowitz_eigenvalsÚ  s   € à�~Š~Ñ& Ñ&Ð&r¡   c                ó’   • U R                   / p!U R                  5        H  nUR                  XS   -  5        U* nM     [        U5      $ )z1Computes principal minors using Berkowitz method.rÉ  )rx  r  rÜ   rl  )r¤   ÚsignÚminorsrÐ  s       r�   Úberkowitz_minorsÚMatrixBase.berkowitz_minorsÞ  sC   € à—x‘x ˆfà—N‘NÖ$ˆDØ�M‰M˜$ b¡™/Ô*Ø�5ŠDñ %ô �V‹}Ðr¡   c                óì  • SSK Jn  SnU (       d  U$ U R                  (       d
  [        5       eX R                  pCS/US-
  -  n[        USS5       H»  nU" US-   U5      US-
  p‡X8S U24   * US U2U4   p©US U2S U24   X8U4   * p³U
/n[        SUS-
  5       H  nUR                  X<U   -  5        M     [        U5       H  u  pÞXž-  S   XÍ'   M     U R                  U/U-   n[        U5       H  nUS Xm-
  S-    X}S 2U4'   M     XuUS-
  '   M½     U R                  U R                  US   * /5      /n[        U5       H  u  p×UR                  XU   -  5        M     U[        [        [        U5      5      -   $ )Nr   ©rÅ  )©r/   r/   rÉ  r˜  ©r   r   )r«  rÅ  rf  r@   r”   rÚ   rÜ   r-  rx  rž   rl  r@  )r¤   rÅ  ÚberkÚAÚNÚ
transformsr  r›  r1  ÚRrn  rø  r   rµ   ÚBÚpolyss                   r�   r  ÚMatrixBase.berkowitzè  s”  € Ý(ØˆÞØˆKà�~�~Ü&Ó(Ð(à—Y‘Yˆ1Ø�S˜A ™E‘]ˆ
ä�q˜!˜R–ˆAÙ˜˜Q™ “? A¨¡Eˆqà˜˜!˜�e‘H�9˜a    A ™hˆqØ�R�a�R˜˜!˜�V‘9˜q A ™w˜hˆqà�CˆEä˜1˜a !™e–_�Ø—‘˜Q q¡™\Ö*ñ %ô " %Ö(‘�Ø™E 4™=�“ñ )ð —X‘X˜q�M EÑ)ˆEä˜1–X�Ø   !¡%¨!¡)Ð,�‘"�a�%“ñ ð !"�q˜1‘uÓñ' !ð* —‘˜DŸH™H q¨¡w hÐ/Ó0Ð1ˆä˜jÖ)‰DˆAØ�L‰L˜ 1™X™Ö&ñ *ð ”eœC¤ uÓ-Ó.Ñ.Ð.r¡   c                ó    • U R                  US9$ rJ  )rX  rL  s     r�   ÚcofactorMatrixÚMatrixBase.cofactorMatrix  s   € Ø×#Ñ#¨6Ð#Ð2Ð2r¡   c                ó   • [        U 5      $ r¿   r3  r®   s    r�   Ú
det_bareisÚMatrixBase.det_bareis  rC  r¡   c                ó    • U R                  SS9$ )aP  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
ÚlurK  r  r®   s    r�   Údet_LU_decompositionÚMatrixBase.det_LU_decomposition  s   € ð$ �x‰x˜tˆxÐ$Ð$r¡   c                ó    • U R                  X!S9$ )N)r‡  rƒ  )r¿  )r¤   r½  r  s      r�   Újordan_cellÚMatrixBase.jordan_cell*  s   € Ø× Ñ  aÐ Ð=Ð=r¡   c                óH   • U R                  5       u  p#X#R                  5       4$ r¿   )rï  r5  )r¤   Úcalc_transformationÚPÚJs       r�   Újordan_cellsÚMatrixBase.jordan_cells-  s$   € Ø×ÑÓ!‰ˆØ×#Ñ#Ó%Ð%Ð%r¡   c                ó"   • U R                  XUS9$ rJ  )ra  rT  s       r�   Ú
minorEntryÚMatrixBase.minorEntry1  s   € Ø�z‰z˜! vˆzÐ.Ð.r¡   c                ó$   • U R                  X5      $ r¿   )rd  râ  s      r�   ÚminorMatrixÚMatrixBase.minorMatrix4  s   € Ø×#Ñ# AÓ)Ð)r¡   c                ó"   • U R                  USS9$ )zEPermute the rows of the matrix with the given permutation in reverse.r#  ©r,  ©r8  ©r¤   rÜ  s     r�   ÚpermuteBkwdÚMatrixBase.permuteBkwd7  s   € à× Ñ  °Ð Ð<Ð<r¡   c                ó"   • U R                  USS9$ )z:Permute the rows of the matrix with the given permutation.r!  rL  rM  rN  s     r�   Ú
permuteFwdÚMatrixBase.permuteFwd;  s   € à× Ñ  °Ð Ð;Ð;r¡   c                ó¨   • U R                  5        Vs1 s H  oR                  iM     nn[        U5      S:X  a  Uu  nO[        n[	        U5      $ s  snf r³   )ÚflatÚkindrÒ   r   r=   )r¤   r  Ú
elem_kindsÚelemkinds       r�   rV  ÚMatrixBase.kind?  sF   € à&*§i¡i¤kÓ2¢k —f”f¡kˆ
Ð2Üˆz‹?˜aÓØ"‰I‰Hä$ˆHÜ˜(Ó#Ð#ùò 3s   “Ac                óž   • [        U R                  5       VVs/ s H%  n[        U R                  5        H  o X4   PM
     M'     snn$ s  snnf )zÂ
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
rá  râ  s      r�   rU  ÚMatrixBase.flatH  s=   € ô$ %*¨$¯)©)Ô$4ÔOÒ$4˜q¼eÀDÇIÁI×>N¸�Q�T”
Ñ>N‘
Ñ$4ÒOÐOùÓOs   ™,A	c                óD   • Ub  U(       d  [        S5      eSSKJn  U" XS9$ )Nz=Cannot implement copy=False when converting Matrix to ndarrayr/   )Úmatrix2numpy)Údtype)r+  Údenser]  )r¤   r^  rw  r]  s       r�   Ú	__array__ÚMatrixBase.__array__\  s$   € ØÑ¦DÜÐ[Ó\Ð\Ý'Ù˜DÑ.Ð.r¡   c                ó4   • U R                   U R                  -  $ )z[Return the number of elements of ``self``.

Implemented mainly so bool(Matrix()) == False.
r­   r®   s    r�   Ú__len__ÚMatrixBase.__len__b  s   € ð
 �y‰y˜4Ÿ9™9Ñ$Ð$r¡   c                ó6  • SSK JnJn  S nU R                  5       u  pVUR	                  5       nU Vs/ s H
  oƒ" U5      PM     nnU H  nU" X�5        M     U R                  UR                  U" U6 5      R                  UR                  5       5      5      $ s  snf )Nr   )rš  ÚMutableMatrixc                óD  • U R                   S   nU S   nUR                  (       ao  US:X  a  UR                  (       a  X1-  U S'   O¡UR                  (       a  UR                  (       d  [	        S5      e[        U5       H  n[        XA5      U SU4'   M     OQ[        U5       HB  n[        X5      n[        U[        5      (       a  UR                  5       nX1U-
  -  U-  U SU4'   MD     [        U5       H,  n[        SX$-
  5       H  nXS-
  XF-   S-
  4   XXF-   4'   M     M.     g )Nr   r)  r/   zANon-invertible matrix can only be raised to a nonnegative integer)
r¯   r  re  r  rA   rÚ   r!   r(   r%  Ú_eval_expand_func)Újcr  r,  Úlrµ   Úbnr¶   s          r�   Újordan_cell_powerÚBMatrixBase._matrix_pow_by_jordan_blocks.<locals>.jordan_cell_powerl  sþ   € Ø—‘˜‘ˆAØ�3‘ˆAØ�y�yØ˜“6˜a×.×.Ø™d�B�s’GØŸ,Ÿ,¨1×+;×+;Ü2Ð3vÓwÐwä" 1žX˜Ü"0°Ó"6˜˜1˜Q˜3›ò &ô ˜qž�AÜ! !›�BÜ! "¤h×/Ñ/Ø×1Ñ1Ó3˜Ø A¡#™h r™k�B�q˜�s“Gñ	 "ô
 ˜1–X�Ü˜q !¡#ž�AØ " a¡C¨©¨A© I¡�B˜™�u“Ió 'ò r¡   )r«  rš  rf  rï  r5  rž   r·  r  )	r¤   r¸  rš  rf  rl  rA  rB  rC  r¶   s	            r�   r  Ú'MatrixBase._matrix_pow_by_jordan_blocksi  sŒ   € ß6ò	/ð* ×ÑÓ!‰ˆØ×(Ñ(Ó*ˆá2>Ó?²,¨Q˜ aÖ(±,ˆÐ?ÛˆAÙ˜aÖ%ñ à�y‰y˜Ÿ™¡D¨,Ð$7Ó8ß‘˜!Ÿ%™%›'Ó"ó$ð 	$ùò @s   ²Bc                ó´   • [         R                  U R                  ;   a  SU R                  < SU R                  < S3$ S[        U R                  5       5      -  $ )NúMatrix(rK  ú, [])z
Matrix(%s))r#   rØ  r¯   r”   r•   ÚstrrY  r®   s    r�   Ú__str__ÚMatrixBase.__str__Š  s;   € Ü�6‰6�T—Z‘ZÔØ+/¯9¬9°d·i´iÐ@Ð@Øœc $§+¡+£-Ó0Ñ0Ð0r¡   c                ó
  • U(       d
  [        5       n[        R                  U R                  ;   a  SU R                  < SU R
                  < S3$ U R                  S:X  a  SU R                  USS9-  $ SU R                  USS9-  $ )	Nrp  rK  rq  r/   zMatrix([%s])z,
)ÚrowsepzMatrix([
%s]))r%   r#   rØ  r¯   r”   r•   Útable)r¤   Úprinters     r�   Ú_format_strÚMatrixBase._format_str�  sj   € ÞÜ “lˆGä�6‰6�T—Z‘ZÔØ+/¯9¬9°d·i´iÐ@Ð@Ø�9‰9˜‹>Ø! D§J¡J¨w¸u JÐ$EÑEÐEØ $§*¡*¨W¸U *Ð"CÑCÐCr¡   c                ó*  ^• [        U5      nU Vs/ s H&  n[        US5      (       a  UR                  5       OUPM(     snm[        [	        [        T5      5      5      nT Vs/ s H  oDR                  PM     nn[	        U5       Vs/ s H  ouR                  S5      PM     nn[        U4S jU 5       5      n	/ n
[        U5      (       a¬  / n[        U5       HU  u  pÍUR                  TU   Xm   * SS24   5        Xm==   S-  ss'   Xm   S:X  d  M9  U(       d  MB  UR                  S5      XŒ'   MW     [        U5      U	:w  a  [        [        S5      5      eU
R                  U5        [        U5      (       a  M¬  U R                  U
5      $ s  snf s  snf s  snf )aÙ  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]])
Úas_explicitr   c              3  óB   >#   • U  H  nTU   R                   v •  M     g 7fr¿   rÀ   )rÍ   rµ   r¢  s     €r�   rÏ   Ú'MatrixBase.irregular.<locals>.<genexpr>³  s   øé € Ð-¢f �1�Q‘4—9–9¢fùr±  Nr/   zf
                    Matrices provided do not appear to fill
                    the space completely.)r5   r®  r|  rÑ   rÚ   rÒ   r”   r¾  rè  rÛ   r-  Úextendr>  r6   rÜ   rž   )rš   ÚntopÚmatricesrœ   rµ   ÚqÚdatr  Úactiver•   r”   rN  rø  r¶   r¢  s                 @r�   Ú	irregularÚMatrixBase.irregular™  s]  ø€ ô& �d‹|ˆñ óÚ�ô !(¨¨=× 9Ñ 9ˆQ�]‰]Œ_¸qÒ@Ùñˆä””s˜1“v“ÓˆÙ Ó!šq˜!�vŒv™qˆÐ!Ü$)¨$¤KÓ0¢K˜q—%‘%˜–(¡KˆÐ0ÜÔ-¡fÓ-Ó-ˆØˆÜ�#�h‰hØˆAÜ! &Ö)‘�Ø—‘˜˜1™˜s™v˜g¢q˜jÑ)Ô*Ø“˜!‘“Ø‘6˜Q•;§1 1Ø !§¡ a£�F“Iñ	 *ô
 �1‹v˜‹~Ü ¤ð --ó ".ó /ð /ð �K‰K˜ŒNô �#�h‹hð �x‰x˜‹~Ðùò'ùò "ùÚ0s   ‘-FÁ"FÂFc                ó²  • UR                  5       n[        UR                  5      S:X  aO  UR                  S   UR                  S   pCUR                  5        Vs/ s H  oPR	                  U5      PM     nnX4U4$ [        UR                  5      S:X  a2  U Vs/ s H  oPR	                  U5      PM     nnUR                  S   SU4$ [        S5      es  snf s  snf )Nr˜  r   r/   z&SymPy supports just 1D and 2D matrices)r`  rÒ   r¯   Úravelr   r™   )rš   r  Úarrr”   r•   rµ   Ú	flat_lists          r�   Ú_handle_ndarrayÚMatrixBase._handle_ndarrayÃ  sº   € ð
 �m‰m‹oˆÜˆs�y‰y‹>˜QÓØŸ™ 1™ s§y¡y°¡|�$Ø25·)±)´+Ó>²+¨QŸ™ až±+ˆIÐ>Ø˜yÐ(Ð(Ü�—‘‹^˜qÓ Ù25Ó6²#¨QŸ™ až±#ˆIÐ6Ø—9‘9˜Q‘<  IÐ-Ð-ä%Ø8ó:ð :ùò ?ùò 7s   ÁCÂCc                óž  ^^^^^^• SSK Jn  SSKJm  SSKJm  Sn[        U5      S:X  GaÞ  [        US   U5      (       a9  US   R                  US   R                  [        US   R                  5       5      4$ [        US   [        5      (       a0  US   R                  US   R                  US   R                  5       4$ [        US   [        5      (       aR  US   R                  (       a>  US   R                  US   R                  US   R!                  5       R                  5       4$ [        US   ["        R$                  5      (       a>  US   nU Vs/ s H  o`R'                  U5      PM     nnUR                  UR                  U4$ [)        US   S5      (       a  U R+                  US   5      $ [-        US   5      (       GaA  [        US   [.        5      (       Gd(  [1        US   5      nUUU4S jmU4S	 jmUR3                  S
S5      mT(       a?  UU4S jmU4S jn[        U[0        [4        45      (       a  U V	s/ s H
  o˜" U	5      PM     nn	[        U5      S:X  a  S=p«/ nGO
[7        U4S jU 5       5      (       aE  [        US   5      S:X  a3  [7        S U 5       5      (       d  [9        S5      e[        U5      n
Sn/ nGO«[;        UU4S jU 5       5      (       d8  U Vs/ s H  oÀR'                  U5      PM     nn[        U5      n
U
(       a  SOSnGOXT(       aÏ  [7        U4S jU 5       5      (       aµ  U Vs1 s H+  n[;        UR<                  5      (       d  M  UR                  iM-     nnU(       ao  [        U5      S:w  a  [9        S5      eU VVVs/ s H$  oÌR                  5         H  oî  H  oÿPM     M     M&     nnnnUR?                  5       n[        U5      U-  n
GO‰S=p«/ nGO‚T(       Gam  [;        U4S jU 5       5      (       GaR  [A        5       n/ nU GH  nT" U5      (       ar  URC                  UR                  5        VVs/ s H  nU  H  nUPM     M     snn5        [;        UR<                  5      (       a  URE                  UR                  5        O‚T" U5      (       aS  U(       aK  URE                  [        U5      5        URC                  U Vs/ s H  nU R'                  U5      PM     sn5        O"URE                  S5        URG                  U5        [        U5      S:”  d  GM  [9        S5      e   UR?                  5       n[        U5      U-  n
GO/ n[A        5       nS=p«U GHr  n	[-        U	5      (       d  [I        U	SS5      (       d  [9        S5      e[)        U	S5      (       a  SU	R<                  ;   a  MT  T(       a’  [7        U4S jU	 5       5      (       ax  U RK                  U	 Vs/ s H  oÌRL                  PM     sn5      u  nnn[O        UU/5      n[Q        U5       VVs/ s H  n[Q        U5        H  nUU   U   PM     M      snnnUUnnOESn[I        U	SS5      (       a  SnU	/nO+[        U	5      nU	 Vs/ s H  oÀR'                  U5      PM     nnURE                  U5        [        U5      S:”  a  [9        S5      eURC                  U5        X®-  n
GMu     U(       a  UR?                  5       OSnGOj[        U5      S:X  GaF  [S        US   5      n
[S        US   5      nU
S:  d  US:  a  [9        SRU                  X«5      5      e[        U5      S:X  a‘  [        US   [V        5      (       ay  US   n/ n[Q        U
5       Hb  nURC                  [Q        U5       Vs/ s H9  nU R'                  U" U R'                  U5      U R'                  U5      5      5      PM;     sn5        Md     Ox[        U5      S:X  aT  [-        US   5      (       aA  US   n[        U5      X«-  :w  a  [9        S5      eU Vs/ s H  oÀR'                  U5      PM     nnO[        U5      S:X  a  S=p«/ nUc  [Y        [[        S5      5      eW
WU4$ s  snf s  sn	f s  snf s  snf s  snnnf s  snnf s  snf s  snf s  snnf s  snf s  snf s  snf )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/   r`  c                ó`   >• [        U [        5      =(       a    T=(       d    [        U TT45      $ r¿   )r%  r�   )rµ   r�  rŽ  rù  s    €€€r�   r  Ú4MatrixBase._handle_creation_inputs.<locals>.<lambda>"  s,   ø€ ¤*¨Q´
Ó";÷ #LØ×J¤
¨1¨{¸LÐ.IÓ Jð#Lr¡   c                óB   >• [        U 5      =(       a    T" U 5      (       + $ r¿   )r4   )rµ   Úismats    €r�   r  r‘  $  s   ø€ ¤¨A£× ?±u¸Q³x´<Ð ?r¡   rù  Tc                óÎ   >• [        U T5      (       a  U R                  5       $ [        U T5      (       a1  [        S U R                   5       5      (       a  U R                  5       $ U $ )zmake Block and Symbol explicitc              3  ó8   #   • U  H  oR                   v •  M     g 7fr¿   )Ú
is_Integer)rÍ   r  s     r�   rÏ   ÚLMatrixBase._handle_creation_inputs.<locals>.make_explicit.<locals>.<genexpr>.  s   é € Ð@_ÒW^ÐRSÇÆÒW^ùrò  )r%  r|  r,  r¯   )r[  r�  rŽ  s    €€r�   Úmake_explicitÚ9MatrixBase._handle_creation_inputs.<locals>.make_explicit*  sQ   ø€ ä% a¨×5Ñ5Ø#$§=¡=£?Ð2Ü'¨¨<×8Ñ8¼SÑ@_ÐWX×W^ÒW^Ó@_×=_Ñ=_Ø#$§=¡=£?Ð2à#$˜Hr¡   c                ó†   >• [        U [        [        45      (       a  U  Vs/ s H  nT" U5      PM     sn$ T" U 5      $ s  snf r¿   )r%  rÑ   rl  )rç   r[  r˜  s     €r�   Úmake_explicit_rowÚ=MatrixBase._handle_creation_inputs.<locals>.make_explicit_row3  s?   ø€ ä% c¬D´%¨=×9Ñ9Ù>AÓ#Bºc¸¡M°!Ö$4¹cÑ#BÐBá#0°Ó#5Ð5ùò $Cs   ¡>c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr¿   r´   )rÍ   rµ   Úraws     €r�   rÏ   Ú5MatrixBase._handle_creation_inputs.<locals>.<genexpr>@  s   øé € Ð-ª A™˜QŸ˜ªùr‰  c              3  ó>   #   • U  H  n[        U5      S :H  v •  M     g7fr&  )rÒ   r&  s     r�   rÏ   rŸ  A  s   é € Ð8²C¨qœs 1›v¨ž{²Cùó   ‚zmismatched dimensionsc              3  óR   >#   • U  H  nT" U5      =(       d    T" U5      v •  M     g 7fr¿   r´   )rÍ   rµ   r“  rž  s     €€r�   rÏ   rŸ  F  s!   øé € Ð=º°A™S ›V×/¡u¨Q£xÔ/ºùs   ƒ$'c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr¿   r´   ©rÍ   rµ   r“  s     €r�   rÏ   rŸ  K  ó   øé € Ð%<º°1¡e¨A§h hºùr‰  c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr¿   r´   r¤  s     €r�   rÏ   rŸ  W  r¥  r‰  Ú	is_MatrixFzexpecting list of listsc              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr¿   r´   r¤  s     €r�   rÏ   rŸ  {  s   øé € Ð+Bºc¸©E°!¯H¨Hºcùr‰  r�   r¸  r˜  z+List length should be equal to rows*columnszf
                Data type not understood; expecting list of lists
                or lists of values.).r«  r¨  Ú"sympy.matrices.expressions.matexprrŽ  Ú&sympy.matrices.expressions.blockmatrixr�  rÒ   r%  r”   r•   r3   rY  r�   rU  r   r§  r|  ÚmpÚmatrixr   r®  r‹  r4   ÚDeferredVectorrÑ   r¬  rl  r,  r>  rÛ   r¯   r¾  rç  r  ÚaddrÜ   r  r­  r›  r+   rÚ   r5   r  r*   r+  r6   )rš   r›   rœ   r¨  rŠ  rÝ   r[  rƒ  r›  rç   r”   r•   rµ   ÚncolrN  r  r¶   r1  rU  r  ÚflatTr›  rU  r�  r�  rŽ  rù  r“  r˜  rž  s                           @@@@@@r�   r­  Ú"MatrixBase._handle_creation_inputsÔ  sk  ý€ õ\ 	0ÝCÝFàˆ	äˆt‹9˜Œ>ä˜$˜q™' <×0Ñ0Ø˜A‘w—|‘| T¨!¡W§\¡\´7¸4À¹7¿>¹>Ó;KÓ3LÐLÐLô ˜D ™G¤Z×0Ñ0Ø˜A‘w—|‘| T¨!¡W§\¡\°4¸±7·<±<³>ÐAÐAô ˜D ™G¤U×+Ñ+°°Q±×0A×0AØ˜A‘w—|‘| T¨!¡W§\¡\°4¸±7×3FÑ3FÓ3H×3MÑ3MÓ3OÐOÐOä˜D ™G¤R§Y¡Y×/Ñ/Ø˜‘G�Ù67Ó8²a°Ÿ\™\¨!ž_±a�	Ð8Ø—v‘v˜qŸv™v yÐ0Ð0ô ˜˜a™ +×.Ñ.Ø×*Ñ*¨4°©7Ó3Ð3ô ˜T !™W×%Ò%Ü& t¨A¡w´×?Ò?Ü˜4 ™7“m�öL�ä?�Ø!Ÿ:™: j°$Ó7�ö ö%õ6ô " #¬¬e }×5Ñ5ÙADÓEÂ¸#Ð0°Ö5Á˜ÐEä�s“8˜q“=Ø"#�O�DØ "’IÜÔ-©Ó-×-Ñ-´#°c¸!±f³+ÀÓ2BÜÑ8±CÓ8×8Ñ8Ü(Ð)@ÓAÐAÜ˜s›8�DØ�DØ "’IÜÕ=¹Ó=×=Ñ=á:=Ó >º#°Q§¡¨a¦¹#�IÐ >Ü˜y›>�DÞ $™1¨!’DÞ¤#Ô%<¹Ó%<×"<Ñ"<á,/Ó@ªC q´3°q·w±w·<›F˜AŸFœF©C�DÐ@ÞÜ˜t›9¨›>Ü",Ð-DÓ"EÐEÙ03Õ$S²¨1¿X¹X¿Z¸ÓQRÈA¢QÑQR¡Q¹Z¡Q±˜	Ò$SØ#Ÿx™x›z˜Ü" 9›~¨tÑ3šà&'˜˜Ø$&š	ß¤#Ô%<¹Ó%<×"<Ò"<Ü›5�DØ "�IÜ ˜Ù  Ÿ8™8Ø%×,Ñ,Ø,-¯H©H¬JÔ BªJ qÄ¸1£Á¡©JÒ BôDä" 1§7¡7Ÿ|™|Ø $§¡¨¯©Ô 0øÙ  ŸV™VÞ Ø $§¡¬¨Q«Ô 0Ø )× 0Ñ 0ÉQÓ1OÊQÀr°#·,±,¸rÖ2BÉQÑ1OÔ Pøà ŸH™H QœKØ%×,Ñ,¨QÔ/Ü˜t›9 qž=Ü",Ð-DÓ"EÐEñ !ð  Ÿ8™8›:�DÜ˜y›>¨4Ñ/’Dð
 !#�IÜ›5�DØ"#�O�DÜ"˜Ü*¨3×/Ñ/Ü$+¨C°¸e×$DÑ$DÜ",Ð-FÓ"GÐGä" 3¨×4Ñ4Ø  C§I¡I›~Ù (æ#¬Ô+B¹cÓ+B×(BÑ(BØ*-×*EÑ*EÙ.1Ó 2ªc¨§¤©cÑ 2ó+4™K˜A˜q %ä '¨°¨sÓ 3˜Aä27¸´(Ô M²(¨QÄEÈ!ÇH¸q  1¡ a¤ÁH¡±(Ò Mð !à#$ a˜q˜A˜qà !˜AÜ& s¨K¸×?Ñ?Ø$% Ø(+ u¡ä$'¨£H ÙADÓ'EÂ¸A¯©°Q®Á Ð'EØŸ™ œÜ˜t›9 q›=Ü",Ð-DÓ"EÐEØ!×(Ñ(¨Ô.Ø™	›ñ9  #ö: *.˜4Ÿ8™8œ:°1�Dùä�‹Y˜!Œ^Ü˜$˜q™'“?ˆDÜ˜$˜q™'“?ˆDà�a‹x˜4 !›8Ü ð "DßDJÁFÈ4ÓDVóXð Xô �4‹y˜A‹~¤*¨T°!©W´h×"?Ñ"?Ø˜!‘W�Ø�	Ü˜tž�AØ×$Ñ$ä"'¨¤+ó/Ú"-˜Qð Ÿ™¡b¨¯©°a«¸#¿,¹,Àq»/Ó&JÖKÙ"-ñ/ö0ò %ô �T“˜a“¤K°°Q±×$8Ñ$8Ø  ™G�	Ü�y“> T¡[Ó0Ü$ØEóGð Gá6?Ó@²i°Ÿ\™\¨!ž_±i�	Ð@øô �‹Y˜!‹^àˆOˆDØˆIàÑÜœJð ('ó (ó )ð )ð �T˜9Ð$Ð$ùò 9ùòH Fùò !?ùò
 Aùô %Tùó !Cùò 2Pùò4 !3ùó !Nùò (Fùò,/ùò AsO   ÅbÉ bË'bÍ bÍ"bÎ+b#Ñb*Ó"b0
×;b5
Ø6%b:Úc Þ/A c
ác
c                ó(  • SSK Jn  [        U[        5      nU R	                  U5      =u  pVn[        U[
        5      n[        U[        5      (       d  [        U[        5      (       a^  U(       a  U R                  X5        g[        U[        5      (       d"  [        U5      (       a  U R                  X5        g[        SU-  5      eU(       d/  [        U[        5      (       d  [        U5      (       a
  U" U5      nSnU(       a€  U(       a7  [        [        XPR                  5      6 [        [        X`R                  5      6 4nO0[        XUUR                  -   5      [        XfUR                  -   5      4nU R                  X5        gXVU R                  U5      4$ )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)r_  r¦  r%  ÚsliceÚkey2ijr�   Úcopyin_matrixr,   r4   Úcopyin_listr>  r   r@  r•   r”   r   )r¤   r©   Úvaluer¦  Úis_slicerµ   r¶   Úis_mats           r�   Ú_setitemÚMatrixBase._setitem¸  sD  € õP 	"ä˜c¤5Ó)ˆØ—[‘[ Ó%Ð%‰ˆˆsÜ˜E¤:Ó.ˆÜ�aœ×Ñ¤:¨a´×#7Ñ#7ÞØ×"Ñ" 3Ô.ØÜ˜e¤T×*Ñ*¬{¸5×/AÑ/AØ× Ñ  Ô,ØÜÐ3°eÑ;Ó<Ð<æÜ" 5¬%×0Ñ0´[À×5GÑ5GÙ˜u›�Ø�ÞÞÜ ¤&¨¯I©IÓ"6Ð7Ü ¤&¨¯I©IÓ"6Ð7ð9‘Cô ! ¨¯
©
¡NÓ3Ü  ¨¯
©
¡NÓ3ð5�Cà×"Ñ" 3Ô.ð ð ˜TŸ]™]¨5Ó1Ð1Ð1r¡   c                ó
   • X-   $ )zReturn self + b.r´   ©r¤   r¢  s     r�   r®  ÚMatrixBase.addþ  s	   € à‰xˆr¡   c                ój   • U (       d  U R                   $ U R                  5       n[        U6 [        U6 -  $ )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_numberÚMatrixBase.condition_number  s4   € ö& Ø—9‘9ÐØ×-Ñ-Ó/ˆÜ�NÐ#¤c¨>Ð&:Ñ:Ð:r¡   c                ól   • U R                  U R                  U R                  U R                  5       5      $ )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•   rU  r®   s    r�   rw  ÚMatrixBase.copy  s%   € ð �y‰y˜Ÿ™ D§I¡I¨t¯y©y«{Ó;Ð;r¡   c           
     óN  • SSK Jn  [        U[        U45      (       d$  [	        SR                  U[        U5      5      5      eU R                  U R                  -  UR                  UR                  -  s=:X  a  S:X  dA  O  [        SU R                  U R                  4< SUR                  UR                  4< 35      eU R                  U R                  U R                  U S   US   -  U S   US   -  -
  U S   US   -  U S   US   -  -
  U S   US   -  U S   US   -  -
  45      $ )	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/   r˜  )r©  rÆ  r%  r�   r+  r  r  r”   r•   r?   rž   )r¤   r¢  rÆ  s      r�   ÚcrossÚMatrixBase.cross+  s  € õ* 	Bä˜!œj¨*Ð5×6Ñ6ÜØ.×5Ñ5°a¼¸a»ÓAóCð Cð —	‘	˜DŸI™IÑ%¨¯©°!·&±&©Õ=¸AÕ=ÝØ#Ÿy™y¨$¯)©)Ó4°q·v±v¸q¿v¹vÒ6FðHó Ið Ið —9‘9˜TŸY™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ð 4r¡   c                ó¬   • U R                   S:w  a!  [        S[        U R                   5      -   5      eU u  pnU R                  SSSU* UUSU* U* US4	5      $ )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?   rr  rž   )r¤   r[  ÚyÚzs       r�   ÚhatÚMatrixBase.hatO  sq   € ðZ �:‰:˜ÓÜÐJÜ  §¡›_ñ-ó .ð .ð ‰GˆA�!Ø—9‘9˜Q Ø�Q�B˜Ø�Q˜˜Ø��Q˜ð$ó ð r¡   c                óâ   • U R                   S:w  a!  [        S[        U R                   5      -   5      eU R                  5       (       d  [	        S5      eU R                  SSU S   U S   U S   45      $ )	aÈ  
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/   )r˜  r/   )r   r˜  )r/   r   )r¯   r?   rr  rz  r>  rž   r®   s    r�   ÚveeÚMatrixBase.vee†  s{   € ðH �:‰:˜ÓÜÐJÜ  §¡›_ñ-ó .ð .à×'Ñ'×)Ñ)ÜÐ;Ó<Ð<à—9‘9˜Q Ø�d‘Ø�d‘Ø�d‘ð$ó ð r¡   c                ód   • SSK Jn  U R                  S:w  a  [        eU R                  U" S5      -  $ )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   )ÚmgammarQ  )Úsympy.physics.matricesrÒ  r”   ÚAttributeErrorr  )r¤   rÒ  s     r�   r�  ÚMatrixBase.DÕ  s.   € õD 	2Ø�9‰9˜‹>ô
 !Ð Ø�v‰v™˜q›	Ñ!Ð!r¡   c                óŒ  • SSK Jn  [        U[        5      (       d–  [	        U5      (       ao  [        U5      U R                  :w  a?  [        U5      U R                  :w  a&  [        SU R                  < S[        U5      < 35      eU R                  U" U5      5      $ [        S[        U5      -  5      eSU R                  ;  d  SUR                  ;  a  [        e[        U 5      [        U5      :w  a'  [        SU R                  < SUR                  < 35      eU n[        U5      nUR                  SU4:w  a  UR                  SU5      nUR                  US4:w  a  UR                  US5      nUb  Uc  SnU(       a  Uc  SnUS:X  a9  US;   a  UR                  5       nO"US	;   a  UR                  5       nO[        S
5      eXQ-  S   $ )aü  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: rK  z2`b` must be an ordered iterable or Matrix, not %s.TÚ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   )r_  r¦  r%  r�   r4   rÒ   r•   r”   r?   r¯   Údotr+  r  r+   rÐ  r>  )r¤   r¢  Ú	hermitianÚconjugate_conventionr¦  rÔ   r  s          r�   rÜ  ÚMatrixBase.dot   sž  € õh 	"ä˜!œZ×(Ñ(Ü˜1�~‰~Ü�q“6˜TŸY™YÓ&¬3¨q«6°T·Y±YÓ+>Ý$à ŸJœJ¬¨A­ð0ó1ð 1ð —x‘x¡ q£	Ó*Ð*äØHÜ˜“Gñóð ð �T—Z‘ZÓ Q¨a¯g©gÓ%5ÜÐÜˆt‹9œ˜A›ÓÝØBFÇ*Ä*ÈaÏgËgÐVóXð Xð ˆÜ�‹HˆØ�9‰9˜˜A˜ÓØ—+‘+˜a Ó#ˆCØ�7‰7�q˜!�fÓØ—	‘	˜!˜Q“ˆAð  Ñ+°	Ñ0AØˆIÞÐ-Ñ5Ø#*Ð à˜ÓØ#Ð'@Ó@Ø—m‘m“o‘Ø%Ð)=Ó=Ø—K‘K“M‘ä ð "Tó Uð Uð ‘˜‰|Ðr¡   c           
     ó  • SSK Jn  U SS2SS24   U R                  p2U" U5      nU R                  5       (       a  U$ [	        SU5       HO  n[	        SU5       H<  nSn[	        SU5       H  nU[        XVSU5      USU4   -  -  nM     XtXV4'   U* XFU4'   M>     MQ     [	        SU5       HU  n	Sn[	        SU5       H-  n
[	        SU5       H  nU[        SXšU5      X*U4   -  -  nM     M/     US-  nU* USU	4'   XtU	S4'   MW     U$ )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/   r˜  )r«  rÅ  r”   rg  rÚ   r"   )r¤   rÅ  rÝ   r  Úworkrµ   r¶   Úacumr1  rj  rø  r¢  s               r�   ÚdualÚMatrixBase.dualf  s#  € õ 	)à’A’q�D‰z˜4Ÿ9™9ˆ1Ù�Q‹xˆØ×Ñ×ÑØˆKä�q˜!–ˆAÜ˜1˜a–[�Ø�Ü˜q !ž�AØœJ q¨Q°Ó2°Q°q¸!°t±WÑ<Ñ<’Dñ %à!�Q�T‘
Ø"˜U�˜�T“
ó !ñ ô �q˜!–ˆAØˆDÜ˜1˜a–[�Ü˜q !ž�AØœJ q¨!°Ó2°Q¸!°t±WÑ<Ñ<’Dó %ñ !ð �A‰IˆDØ˜ˆD��A�‰JØ��A�‹Jñ ð ˆr¡   c                óÌ   • U R                   nU S   n[        U5      n[        U5       Vs0 s H  oDU[        U5      -  _M     nnSSKJn  U R                  U" X5      5      $ s  snf )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)  r/   ©Úbanded)r”   r&   rÚ   r)   Úsparsetoolsrç  ræ  )r¤   r‡  rj  Úexp_lrµ   Úbandsrç  s          r�   Ú_eval_matrix_exp_jblockÚ"MatrixBase._eval_matrix_exp_jblockŽ  s_   € ð< �y‰yˆØ�‰JˆÜ�A“ˆä27¸´+Ó>²+¨Q�EœI a›LÑ(Ò(±+ˆÐ>å'Ø�~‰~™f TÓ1Ó2Ð2ùò ?s   ªA!c                ó  • [        U5      [        U5      p!U R                  (       d  [        eUR                  (       d  [	        SR                  U5      5      eX!R                  ;  a  [	        SR                  X!5      5      eX R                  ;   a  [	        SR                  X 5      5      eU R                  5       n[        UR                  5       5      n0 nUn[        US-
  5       H  n[        Xb5      nXeUS-   '   M     U R                  S   nU R                  U5      n	U R                  US5      n
SnU GHl  nX7   nUR                  X'5      X«'   X«   R                  (       a0  X«   R                   (       d  [	        SR                  XU   5      5      eSn[        U5       H  nXÙX¾4'   X×-  nM     US:”  aæ  [        U5       Vs/ s H  nSPM     nnSnUS:”  aÃ  US-   nUS-  nUU   R                  X'5      nUR                  (       a/  UR                   (       d  [	        SR                  UU   U5      5      eUX«'   [        U5       HE  nUU-
  S-   S::  a  SX›U4'   SUU'   M  UU   UU-
  S-   -  UU'   UU   [#        X~U-
  5      -  X›U4'   MG     US-  nUS:”  a  MÃ  US-  nGMo     U	R%                  U
5      nU R                  U5      nU R'                  U5      n[        U5       H  nUUU   U-  -   nUU -  nM     U$ s  snf )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 {}zaCannot evaluate the function because the derivative {} is not analytic at the given eigenvalue {})r   rf  r@   Ú	is_symbolr>  r  rð  rÅ  Úmaxræ  rÚ   r   r¯   rÅ  r  Ú	is_numberÚ
is_complexr  Úsolverº  )r¤   rÃ  r[  ÚeigenÚmax_mulÚ
derivativeÚddrµ   r  rN  Úf_valrç   r  rü   rø  ÚiiÚcoeÚderiÚd_ir  rÀ  Úpres                         r�   Úanalytic_funcÚMatrixBase.analytic_func¶  s   € ô8 ˜‹{œH Q›Kˆ1Ø�~�~Ü&Ð&Ø�{�{ÜÐ3×:Ñ:¸1Ó=Ó>Ð>Ø—N‘NÓ"ÜØ/×6Ñ6°qÓ<ó>ð >à×!Ñ!Ó!ÜØ3×:Ñ:¸1ÓCóEð Eð —‘Ó ˆÜ�e—l‘l“nÓ%ˆØˆ
ØˆÜ�w ‘{Ö#ˆAÜ�b“ˆBØ "�q˜1‘uÓñ $ð �J‰J�q‰MˆØ�J‰J�q‹MˆØ—
‘
˜1˜aÓ ˆØˆäˆAØ‘(ˆCØŸ™ ›ˆE‰JØ‰z×#×#¨E©J×,A×,AÜ ð$ç$*¡F¨1°C©jÓ$9ó;ð ;ð ˆCÜ˜1–X�Ø�#�&‘	Ø‘’ñ ð �Q‹wÜ#(¨¤8Ó,¢8˜R“q¡8�Ð,Ø�Ø˜A“gØ ™'�CØ˜1‘H�CØ$ TÑ*×/Ñ/°Ó5�CØ—}—}¨S¯^¯^Ü(ð,ç,2©F°:¸dÑ3CÀSÓ,IóKð Kð "%�E‘JÜ" 1žX˜Ø˜t™8 a™<¨1Ó,Ø()˜A 1˜f™IØ%&˜C ™FÙ$Ø!$ Q¡¨¨T©°A©Ñ!6˜˜A™Ø$'¨¡F¬3¨q°d±(Ó+;Ñ$;˜˜q˜&›	ñ &ð ˜A‘I�Dð# ˜A•gð$ �1‰H‹CñC ðD �G‰G�E‹NˆØ�j‰j˜‹mˆØ�h‰h�q‹kˆÜ�q–ˆAØ˜˜!™˜S™‘.ˆCØ�4‰KŠCñ ð ˆ
ùò7 -s   ÇK<c                ó  • U R                   (       d  [        S5      e U R                  5       u  pUR                  5       nU Vs/ s H  oDR                  5       PM     nnSSKJn  U" U6 nUR                  USS9R                  UR                  5       SS9n[        S U R                  5        5       5      (       a  [        U 5      " [        U5      5      $ [        U 5      " U5      $ ! [         a    [        S5      ef = fs  snf )a3  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 computedr   ©rš  NrÅ  c              3  ó8   #   • U  H  oR                   v •  M     g 7fr¿   )Úis_real)rÍ   r·  s     r�   rÏ   Ú!MatrixBase.exp.<locals>.<genexpr>3  s   é € Ð8ª- �}Ž}ª-ùrò  )rf  r@   rï  r5  r>   r™   rë  r«  rš  r·  r  r,  ræ  r  r   )	r¤   rA  rB  ÚcellsÚcellÚblocksrš  ÚeJÚrets	            r�   r&   ÚMatrixBase.exp  sõ   € ð �~�~Ü&ØBóDð Dð	tØ×#Ñ#Ó%‰DˆAØ×%Ñ%Ó'ˆEñ
 >CÓCºU°T×.Ñ.Ö0¹UˆÐCÝ'Ù�6ˆ]ˆà�j‰j˜¨ˆjÐ.×7Ñ7¸¿¹»ÈTÐ7ÐRˆÜÑ8¨$¯+©+¬-Ó8×8Ñ8Ü˜”:œb ›gÓ&Ð&ä˜”:˜c“?Ð"øô ó 	tÜ%Ørótð tð	tüò Ds   ž"C& ÁC?Ã&C<c                ó  • U R                   nU S   nUR                  (       a  [        SR                  U5      5      eS[	        U5      0n[        SU5       H  nU* U* -  * U-  X4'   M     SSKJn  U R                  U" X5      5      $ )aú  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‡  rj  rê  rµ   rç  s         r�   Ú_eval_matrix_log_jblockÚ"MatrixBase._eval_matrix_log_jblock8  s†   € ð0 �y‰yˆØ�‰Jˆà�9�9Üð ß &¡ q£	ó+ð +ð ”C˜“F�ˆÜ�q˜$–ˆAØ˜" ! ™�} qÑ(ˆE‹Hñ  õ 	(Ø�~‰~™f TÓ1Ó2Ð2r¡   c                óö  • U R                   (       d  [        S5      e U(       a  U" U 5      R                  5       u  p#OU R                  5       u  p#UR                  5       nU Vs/ s H  nUR                  5       PM     nnSSKJn  U" U6 nU(       a4  U" X(-  U" UR                  5       5      -  5      n	U R                  U	5      n	U	$ X(-  UR                  5       -  n	U	$ ! [         a    [        S5      ef = fs  snf )a  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 computedr   r   )rf  r@   rï  r5  r>   r™   r  r«  rš  r  ræ  )
r¤   ry  rA  rB  r  r  r  rš  r  r  s
             r�   r'   ÚMatrixBase.log_  s  € ðh �~�~Ü&Ø=ó?ð ?ð
	:ÞÙ “~×1Ñ1Ó3‘��1à×'Ñ'Ó)‘�à×%Ñ%Ó'ˆEñ óâ�ð ×(Ñ(Ö*Ùð 	ð õ 	(Ù�6ˆ]ˆæÙ˜1™6¡H¨Q¯U©U«WÓ$5Ñ5Ó6ˆCØ—.‘. Ó%ˆCð ˆ
ð ‘&˜1Ÿ5™5›7Ñ"ˆCàˆ
øô# ó 	:Ü%ð9ó:ð :ð	:üò
s   žAC Á$C6ÃC3c                óÆ   • U (       d  gU R                   (       d  [        S5      e[        SU S S9nU R                  U5      nUR                  S   XR
                  -  :X  a  gg)a3  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                ó   • SU -   $ )Nr  r´   )rë  s    r�   r  Ú)MatrixBase.is_nilpotent.<locals>.<lambda>È  s   € ¸cÀAºgr¡   )Úmodifyr   F)rf  r@   r.   r½  r›   r”   )r¤   r[  r¾  s      r�   Úis_nilpotentÚMatrixBase.is_nilpotent±  s\   € ö$ ØØ�~�~Ü&Ø>ó@ð @ä! # tÑ4EÑFˆØ�M‰M˜!ÓˆØ�6‰6�!‰9˜ŸY™Y™Ó&ØØr¡   c                óÒ  • U Vs/ s H  n[        U[        5      PM     snu  p4U(       a9  U R                  (       d  S=pVOBUS   R                  U R                  5      SS u  pVO[	        US   U R                  5      nUS-   nU(       a9  U R
                  (       d  S=pxOBUS   R                  U R
                  5      SS u  pxO[	        US   U R
                  5      nUS-   nXVXx4$ s  snf )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
r   Nr˜  r/   )r%  r³  r”   rÕ   r.  r•   )	r¤   Úkeysr1  ÚisliceÚjsliceÚrloÚrhiÚcloÚchis	            r�   Ú
key2boundsÚMatrixBase.key2boundsÎ  sÓ   € ñ 9=Ó=º°1œ* Q¬Ö.¹Ñ=‰ˆÞØ—9—9Ø���cà ™7Ÿ?™?¨4¯9©9Ó5°b°qÐ9‘��Sä˜˜Q™ §¡Ó+ˆCØ˜‘'ˆCÞØ—9—9Ø���cà ™7Ÿ?™?¨4¯9©9Ó5°b°qÐ9‘��Sä˜˜Q™ §¡Ó+ˆCØ˜‘'ˆCØ˜Ð!Ð!ùò# >s   …C$c                ó¬  • [        U5      (       ad  [        U5      S:X  d  [        S5      e[        XR                  5       VVs/ s H'  u  p#[        U[        5      (       d  [        X#5      OUPM)     snn$ [        U[        5      (       a  UR                  [        U 5      5      SS $ [        [        U[        U 5      5      U R                  5      $ s  snnf )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
r˜  z"key must be a sequence of length 2N)r4   rÒ   r+  Úzipr¯   r%  r³  r.  rÕ   r@  r•   )r¤   r©   rµ   r  s       r�   r´  ÚMatrixBase.key2ijë  s®   € ô �s×ÑÜ�s“8˜q“=ÜÐ DÓEÐEä # C¯©Ô 4ô6Ú 4™˜ô (2°!´U×';Ñ';”E˜!”KÀÒBÙ 4ò6ð 6ä˜œU×#Ñ#Ø—;‘;œs 4›yÓ)¨"¨1Ð-Ð-äœ% ¤S¨£YÓ/°·±Ó;Ð;ùó6s   Á.Cc                ó  ^• U R                   S:w  a  U R                  S:w  a  [        S5      eU R                  5       mU" T5      (       a(  U R	                  U R                   U R                  5      nU$ U R                  U4S j5      nU$ )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                ó   >• U T-  $ r¿   r´   )rµ   Únorms    €r�   r  Ú'MatrixBase.normalized.<locals>.<lambda>#  s	   ø€ ¨1¨tª8r¡   )r”   r•   r?   r$  rÅ  r¿  )r¤   r2  rÆ  r$  s      @r�   Ú
normalizedÚMatrixBase.normalizedÿ  sq   ø€ ð< �9‰9˜‹>˜dŸi™i¨1›nÜÐFÓGÐGØ�y‰y‹{ˆÙ�d×ÑØ—*‘*˜TŸY™Y¨¯	©	Ó2ˆCð ˆ
ð —.‘.Ô!3Ó4ˆCØˆ
r¡   c           
     ó0  ^• [        U R                  5       5      =(       d    S/n[        R                  U R                  ;   aË  TS;   a  [        [        S U 5       6 5      $ TS:X  a  [        S U 5       6 $ T[        R                  L a"  [        U Vs/ s H  n[        U5      PM     sn6 $ T[        R                  L a"  [        U Vs/ s H  n[        U5      PM     sn6 $  [        [        U4S jU 5       6 [        R                  T-  5      $ TS:X  aY  U R!                  [        5      n[        [#        UR$                  5       Vs/ s H  n['        UR)                  U5      5      PM     sn6 $ TS:X  a  [        U R+                  5       6 $ TS	:X  a  [        U R+                  5       6 $ T[        R                  L aY  U R!                  [        5      n[        [#        UR,                  5       Vs/ s H  n['        UR/                  U5      5      PM     sn6 $ Tb)  [1        T[2        5      (       a1  TR5                  5       S
;   a  U R7                  5       R9                  SS9$ [        S5      es  snf s  snf ! [        [        4 a    [        S5      ef = fs  snf s  snf )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   ©r˜  Nc              3  ó>   #   • U  H  n[        U5      S -  v •  M     g7fr)  ©rœ  r&  s     r�   rÏ   Ú"MatrixBase.norm.<locals>.<genexpr>^  s   é € Ð!<²t°!¤# a£&¨A¦+²tùr¡  r/   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr¿   r+  r&  s     r�   rÏ   r,  a  s   é € Ð2ªT¨œS ŸV˜VªTùrò  c              3  ó@   >#   • U  H  n[        U5      T-  v •  M     g 7fr¿   r+  )rÍ   rµ   Úords     €r�   rÏ   r,  l  s   øé € Ð =º°1¤ Q£¨3¦ºùrû  z'Expected order to be Number, Symbol, oor˜  éþÿÿÿ)rÃ  ÚfroÚ	frobeniusÚvector)r/  zMatrix Norms under development)rÑ   ræ  r#   ÚOner¯   r    r   ÚInfinityr   rœ  ÚNegativeInfinityr   r-   r™   r+  r>  r¿  rÚ   r•   rè  r·   rö  r”   rç   r%  rr  r  rc  r$  )r¤   r/  rz  rµ   r³  s    `   r�   r$  ÚMatrixBase.norm&  s*  ø€ ôj �D—K‘K“MÓ"×) q cˆÜ�5‰5�D—J‘JÓØ�iÓÜœCÑ!<±tÓ!<Ð=Ó>Ð>à˜“ÜÑ2©TÓ2Ð3Ð3àœŸ
™
Ò"Ü©TÓ2ªT¨œS žV©TÑ2Ð3Ð3àœ×*Ñ*Ò*Ü©TÓ2ªT¨œS žV©TÑ2Ð3Ð3ðLÜœ3Ô =¹Ó =Ð>ÄÇÁÈÁÓLÐLð �a‹xØ—N‘N¤3Ó'�Ü´E¸!¿&¹&´MÓB²M¨qœS §¡ q£ž]±MÑBÐCÐCà˜“ä˜D×0Ñ0Ó2Ð3Ð3à˜“ä˜D×0Ñ0Ó2Ð3Ð3àœŸ
™
Ò"Ø—N‘N¤3Ó'�Ü´E¸!¿&¹&´MÓB²M¨qœS §¡ q£ž]±MÑBÐCÐCà‘+¤¨CÜ,/÷"1ñ "1Ø58·Y±Y³[Ø3ó64ð —x‘x“z—‘¨1�Ð-Ð-ô *Ð*JÓKÐKùòK 3ùò 3øô (¬Ð3ó LÜ Ð!JÓKÐKðLüò Cùò Cs$   ÂI%ÃI*Ã!,I/ Å$JÇ)$JÉ/Jc                ód  • / n[        U R                  5       H{  n/ n[        U R                  5       H:  nXU4   S:X  a  UR                  S5        M   UR                  [	        U5      5        M<     UR                  SSR                  U5      -  5        M}     [        SR                  U5      5        g)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Ü   rr  ÚjoinÚprint)r¤   Úsymbrë  rµ   Úliner¶   s         r�   Úprint_nonzeroÚMatrixBase.print_nonzero‹  sŠ   € ð. ˆÜ�t—y‘yÖ!ˆAØˆDÜ˜4Ÿ9™9Ö%�Ø˜1˜‘: “?Ø—K‘K Ö$à—K‘K¤ D£	Ö*ñ	 &ð
 �H‰H�V˜bŸg™g d›mÑ+Ö,ñ "ô 	ˆd�i‰i˜‹lÕr¡   c                óL   • XR                  U5      UR                  U5      -  -  $ )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�   ÚprojectÚMatrixBase.project­  s"   € ð —H‘H˜Q“K !§%¡%¨£(Ñ*Ñ+Ð+r¡   c                ó^  • [         R                  U R                  ;   a  g/ nS/U R                  -  n[	        U R
                  5       Hr  n	UR                  / 5        [	        U R                  5       HE  n
UR                  X	U
4   5      nUS   R                  U5        [        [        U5      XŠ   5      XŠ'   MG     Mt     SSSSSSS.U   n[        U5       HF  u  pœ[        U5       H  u  p­[        XÖ5      " XŠ   5      XÊ'   M     X%R                  U5      -   U-   Xy'   MH     UR                  U5      $ )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Û  rH  Ú<Ú>Ú^)r#   rØ  r¯   r•   rÚ   r”   rÜ   Ú_printrï  rÒ   r-  r  r<  )r¤   rx  ÚrowstartÚrowendrv  ÚcolsepÚalignÚresÚmaxlenrµ   r¶   rë  rç   Úelems                 r�   rw  ÚMatrixBase.table½  s  € ôd �6‰6�T—Z‘ZÓØàˆà��t—y‘y‘ˆÜ�t—y‘yÖ!ˆAØ�J‰J�rŒNÜ˜4Ÿ9™9Ö%�Ø—N‘N 4¨1¨¡:Ó.�Ø�B‘—‘˜qÔ!Ü¤ A£¨©	Ó2�“	ó &ñ "ð ØØØØØñ
ð ñˆô   –n‰FˆAÜ$ Sž>‘�Ü  Ô-¨f©iÓ8�“ñ *à§¡¨CÓ 0Ñ0°6Ñ9ˆC‹Fñ %ð �{‰{˜3ÓÐr¡   c                ó   • [        XUS9$ rn  )r~   ro  s      r�   Úrank_decompositionÚMatrixBase.rank_decomposition
  s   € Ü" 4Ø!ñ#ð 	#r¡   c                ó   • [        S5      e©Nz;This function is implemented in DenseMatrix or SparseMatrixr˜   ©r¤   rÝ  s     r�   ÚcholeskyÚMatrixBase.cholesky  ó   € Ü!Ð"_Ó`Ð`r¡   c                ó   • [        S5      erY  r˜   rZ  s     r�   ÚLDLdecompositionÚMatrixBase.LDLdecomposition  r]  r¡   c                ó   • [        XUUS9$ ©N)r2  r  Ú	rankcheck)r�   ©r¤   r2  r  rc  s       r�   ÚLUdecompositionÚMatrixBase.LUdecomposition  s   € ä ÀhØ#ñ%ð 	%r¡   c                ó   • [        XX#S9$ rb  )r‚   rd  s       r�   ÚLUdecomposition_SimpleÚ!MatrixBase.LUdecomposition_Simple  s   € ä& tØ!ñ8ð 	8r¡   c                ó   • [        U 5      $ r¿   )rƒ   r®   s    r�   ÚLUdecompositionFFÚMatrixBase.LUdecompositionFF  s   € Ü! $Ó'Ð'r¡   c                ó   • [        U 5      $ r¿   )r„   r®   s    r�   Úsingular_value_decompositionÚ'MatrixBase.singular_value_decomposition!  s   € Ü,¨TÓ2Ð2r¡   c                ó   • [        U 5      $ r¿   )r…   r®   s    r�   ÚQRdecompositionÚMatrixBase.QRdecomposition$  rø  r¡   c                ó   • [        U 5      $ r¿   )r†   r®   s    r�   Úupper_hessenberg_decompositionÚ)MatrixBase.upper_hessenberg_decomposition'  s   € Ü.¨tÓ4Ð4r¡   c                ó   • [        X5      $ r¿   )rW   ©r¤   rs  s     r�   Údiagonal_solveÚMatrixBase.diagonal_solve*  ó   € Ü˜tÓ)Ð)r¡   c                ó   • [        S5      erY  r˜   rw  s     r�   Úlower_triangular_solveÚ!MatrixBase.lower_triangular_solve-  r]  r¡   c                ó   • [        S5      erY  r˜   rw  s     r�   Úupper_triangular_solveÚ!MatrixBase.upper_triangular_solve0  r]  r¡   c                ó   • [        X5      $ r¿   )rZ   rw  s     r�   Úcholesky_solveÚMatrixBase.cholesky_solve3  rz  r¡   c                ó   • [        X5      $ r¿   )r[   rw  s     r�   ÚLDLsolveÚMatrixBase.LDLsolve6  s   € Ü˜Ó#Ð#r¡   c                ó   • [        XUS9$ r1  )r\   )r¤   rs  r2  s      r�   ÚLUsolveÚMatrixBase.LUsolve9  s   € Ü˜¨jÑ9Ð9r¡   c                ó   • [        X5      $ r¿   )r]   r½  s     r�   ÚQRsolveÚMatrixBase.QRsolve<  s   € Ü˜Ó Ð r¡   c                ó   • [        XUS9$ )N)Úfreevar)r^   )r¤   r/  rŽ  s      r�   Úgauss_jordan_solveÚMatrixBase.gauss_jordan_solve?  s   € Ü" 4°GÑ<Ð<r¡   c                ó   • [        XUS9$ )N)Úarbitrary_matrix)r_   )r¤   r/  r’  s      r�   Ú
pinv_solveÚMatrixBase.pinv_solveB  s   € Ü˜4Ð5EÑFÐFr¡   c                ó   • [        XUS9$ )N)Ú
det_method)r`   )r¤   rs  r–  s      r�   Úcramer_solveÚMatrixBase.cramer_solveE  s   € Ü˜T°:Ñ>Ð>r¡   c                ó   • [        XUS9$ rJ  )ra   ©r¤   rs  r  s      r�   rò  ÚMatrixBase.solveH  s   € Ü�d¨Ñ/Ð/r¡   c                ó   • [        XUS9$ rJ  )rb   rš  s      r�   Úsolve_least_squaresÚMatrixBase.solve_least_squaresK  s   € Ü# D°fÑ=Ð=r¡   c                ó   • [        XS9$ rJ  )rc   rL  s     r�   ÚpinvÚMatrixBase.pinvN  s   € Ü�TÑ)Ð)r¡   c                ó   • [        XS9$ r1  )rd   r4  s     r�   Úinverse_ADJÚMatrixBase.inverse_ADJQ  ó   € Ü˜Ñ4Ð4r¡   c                ó   • [        XS9$ r1  )rk   r4  s     r�   Úinverse_BLOCKÚMatrixBase.inverse_BLOCKT  s   € Ü˜$Ñ6Ð6r¡   c                ó   • [        XS9$ r1  )re   r4  s     r�   Ú
inverse_GEÚMatrixBase.inverse_GEW  ó   € Ü�tÑ3Ð3r¡   c                ó   • [        XS9$ r1  )rf   r4  s     r�   Ú
inverse_LUÚMatrixBase.inverse_LUZ  r¬  r¡   c                ó   • [        XS9$ r1  )rg   r4  s     r�   Ú
inverse_CHÚMatrixBase.inverse_CH]  r¬  r¡   c                ó   • [        XS9$ r1  )rh   r4  s     r�   Úinverse_LDLÚMatrixBase.inverse_LDL`  r¥  r¡   c                ó   • [        XS9$ r1  )ri   r4  s     r�   Ú
inverse_QRÚMatrixBase.inverse_QRc  r¬  r¡   c                ó   • [        XUUS9$ )N)r  r2  Útry_block_diag)rj   )r¤   r  r2  rº  s       r�   r  ÚMatrixBase.invf  s   € Ü�D°JØ-ñ/ð 	/r¡   c                ó   • [        U 5      $ r¿   )r‡   r®   s    r�   Úconnected_componentsÚMatrixBase.connected_componentsj  s   € Ü$ TÓ*Ð*r¡   c                ó   • [        U 5      $ r¿   )rˆ   r®   s    r�   Ú"connected_components_decompositionÚ-MatrixBase.connected_components_decompositionm  s   € Ü2°4Ó8Ð8r¡   c                ó   • [        U 5      $ r¿   )r‰   r®   s    r�   Ústrongly_connected_componentsÚ(MatrixBase.strongly_connected_componentsp  s   € Ü-¨dÓ3Ð3r¡   c                ó   • [        XS9$ )N)r  )rŠ   )r¤   r  s     r�   Ú+strongly_connected_components_decompositionÚ6MatrixBase.strongly_connected_components_decompositions  s   € Ü;¸DÑNÐNr¡   r´   )r   )TTrÕ  )r‡  r“   r¿   )NN)Úreturnr9   )T)é   Néd   FFNF)TNTTTTTT)r”   r!  )r!  )FTNr(  )r  )ÚbareissN)r·   )r|  NNNN)F)FFF)rÈ  r=   )r  )Ú[rL  r;  rK  rÛ  )Úlaplace)ÚGJ)ÚCH)ÚRD(‚  Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú_op_priorityÚ__array_priority__r§  Ú_class_priorityÚstaticmethodr   r   r#   rØ  rú   r4  rx  r’   Ú__annotations__r1   Úclassmethodrž   r¦   rª   Úpropertyr¯   r»   rÃ   rÉ   rÖ   rã   ré   rî   ró   r÷   rý   r  r	  r  r  r  r  r·   r2  r5  r;  r+   rC  rF  r8  r  rç   r?  rV  rY  r`  rc  ri  rl  rs  r{  r‰  r�  r“  r   rš  rº  r¿  rÂ  rÅ  rÑ  rÔ  rÚ  rÞ  rã  rì  ró  rý  r   r  r  r  r&  r-  r3  r:  r@  rH  rP  r_  rf  ré  rð  r÷  rz  r}  rŒ  r“  r–  r™  rœ  r   rf  r¥  rg  r¬  r¯  r²  ræ  rÝ  r  rÀ  rÈ  rË  rÓ  rÝ  rã  ré  rï  r  r¿  rù  rÐ  r   r  r  r  r-  r4  r8  r	   rD  rS  ry  r  rf  r¾  r›  rn  r  rt  r{  rƒ  rŒ  r’  r—  r�  r¦  r«  r³  r¶  rÁ  rÈ  rÏ  rÕ  rÚ  rÝ  r7   rç  rë  ró  rø  rñ  r·  r  r  r  r  rß  rí  rú  r%  r,  r)  rC   r5  r8  rB   r;  r>  rA  rF  rM  rw  r½  rU  rX  r[  r^  ra  rd  rD   rE   rL   rM   rN   rO   rP   rK   rF   rG   rH   rI   rJ   rQ   rR   rh  rk  rp  rt  ry  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$  r  r3  r6  r:  r=  rC  rF  rI  rO  rR  rV  rU  Úobjectr`  rc  r  rs  ry  r…  r‹  r­  rº  r®  rÁ  rw  rÇ  rÌ  rÏ  r�  rÜ  rã  rë  rý  r&   r  r   r'   r  r  r´  r&  r$  r@  rC  rw  rV  r[  r_  re  rh  rk  rn  rq  rt  rx  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   Ú_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Š   Ú__static_attributes__r´   r¡   r�   r�   r�   c   s�  ‡ ñ5ð €Lð Ðà€IØ€OÙ˜GÓ$€HØ�6‰6€DØ
�%‰%€Cà€IˆtÓØ
ƒIØ
ƒIØ€IàñEó ðEòEòEð ñ&ó ð&ò":ò
	Cò	0ò4òò*:ò
Eò	0ò;òð ñ.ó ð.ò	.ò'ò'ò'1òR*ò@ò,<6ò|,ð4 ñ*ó ð*ò&4ò6'ò(1òT*õ>0)òdò("ð ñ3ó ð3ò"#ò>ò2 õ40)ðd ñ*ó ð*ð* ñ+ó ð+ð ñ6ó ð6ð
 ÷+ó ð+ð" ñ+ó ð+ð
 ñHó ðHð ñ	ó ð	ð Ø %¨d¸ÀDô K:ó ðK:ðZ ô+ó ð+ð. ñ_@¸gõ _@ó ð_@ðB ô,ó ð,ð( ô-ó ð-ð. ñ'+ó ð'+ðT ñ%(ó ð%(òT4ò(ò-ò;òJòAò òHò@õFòQòJòJòNòNòGòHòBòEò(ð2 ñ)ó ð)ò)õ2E6òN)(ðV ñ/;ó ð/;ðb ñ/;ó ð/;ðb ñCó ðCðB ô(ó ð(ð
 ñ0ó ð0ð8 ñ*%ó ð*%ðX ñ&ó ð&ò.(õ>1ð@ ñ0ó ð0ð8 ñ)%ó ð)%ðV ñ+ó ð+ò<#ò((ò&'ò&Aòò$8ò7ò6ò6ò9òHò$ò'õ.)ò
&ò89õ?ð JNØ;?õð& ñó ðõ2G1õR	Lõ	Lõ@õ( GõD+$òZ>òAò*"ò$!&ðF ñ ó ð ð ñ ó ð ò+ò:ò">ò
=õ$6õL$6òLMò@ò7òRò7ò
	òõ -ò4MòMòTò ñ ˜:Ó&ñó 'ðñ$ ˜>Ó*ñ)ó +ð)ñ ˜=Ó)ñ#ó *ð#ò3ñ ˜:Ó&ñ$ó 'ð$õ<#"òJ8ò4)ñ ˜:Ó&ñó 'ðõ\ñ| ˜9Ó%ñ#ó &ð#ñ ˜<Ó(ñ$ó )ð$ñ ˜9Ó%ñ%ó &ð%õ "ñD ˜9Ó%ñó &ðñ ˜:Ó&ñó 'ðð ,Eô 9ò$ð '.¸ô Gòò"òõ.ð "Ð,?ô 7õ4õ5õ@òõ1ò,ð ,B×+IÑ+IÐÔ"Ø+G×+OÑ+OÐ Ô(Ø+7×+?Ñ+?ÐÔØ+9×+AÑ+AÐÔØ(1×(9Ñ(9€NÔØ+7×+?Ñ+?ÐÔØ+2¯?©?€LÔØ+/¯<©<ÐÔØ+4×+<Ñ+<€HÔØ+4×+<Ñ+<€HÔØ+4×+<Ñ+<€HÔØ+;×+CÑ+C€OÔØ+/¯<©<€C„KØ+/¯<©<€C„KØ+1¯>©>€E„MØ+;×+CÑ+C€OÔà&-¸È5ô )ð ñ!ó ð!ð &°ô Eò2ð( &°¸dØô:ð
 )×0Ñ0€LÔØ&×.Ñ.€JÔØ Ÿ=™=€D„LØ Ÿ=™=€D„Lõ5&òn6ò6ò6ò6ò6ò6õMõ<Mõ<5ð "'°7ô Jõ2ò4ð )×0Ñ0€KÔØ&×.Ñ.€IÔØ%×-Ñ-€HÔØ*×2Ñ2€MÔá'¨Ó6€MõVð 04Àô 0õIõ%õ1õ<ð ñ+ó ð+ð ñ/ó ð/ð ñ+ó ð+ð ñ/ó ð/ð ñ$ó ð$õKò/ò&ð *4×);Ñ);€IÔØ)4×)<Ñ)<€JÔØ);×)CÑ)CÐÔØ)5×)=Ñ)=€KÔØ)>×)FÑ)FÐÔ Ø)B×)JÑ)JÐÔ$Ø)>×)FÑ)FÐÔ Ø)B×)JÑ)JÐÔ$Ø)7×)?Ñ)?€MÔØ)5×)=Ñ)=€KÔÙ)9×)AÑ)A€OÔÙ)9×)AÑ)A€OÔÙ)7×)?Ñ)?€MÔÙ)B×)JÑ)JÐÔ$à#'ö ó85óFó68@ót8ò. $)¨£?Ð=Põ "ó,ó'óó&/öP3ó"ó%ó(>ö&ö/ó*ó=ó<ð ô$ó ñ$óPñ( %¨4õ /ó%ó$óB1ö
Dð ñ'ó ñ'ðR ñ:ó ñ:ð  ña%ó ña%óFDôLô;ô0<ô""4ôH5ônMð^ ò("ó ñ("÷TdôL&ôP%3ôP\ô~!#ôF%3ñN "ö Pôdô:"ô:<ð( %,ö %÷NcL÷J ôD,ð  ?CØ!(÷K ðZ -4¸eö #÷a÷að *1¸4Øö%ð
 18À$Øö8ô
(ô3ô&ô5ô*ôaôaô*ô$ð '.ö :ô!÷=÷G÷?÷0÷>÷*ð &-ö 5ð (/ö 7ð %,ö 4ð %,ö 4ð %,ö 4ð &-ö 5ð %,ö 4ð ¨'À%ö /ô+ô9ô4÷Oñ �\Š\�Fá%8×%@Ñ%@ÑÔÙ%.×%6Ñ%6�HÔÙ%6×%>Ñ%>ÑÔÙ%5×%=Ñ%=�OÔÙ%<×%DÑ%DÑÔ"Ù%7×%?Ñ%?ÑÔÙ+H×+PÑ+PÑ Ô(Ù%5×%=Ñ%=�OÔÙ-L×-TÑ-TÑ"Ô*á%4×%<Ñ%<�NÔÙ%<×%DÑ%DÑÔ"Ù%<×%DÑ%DÑÔ"Ù%4×%<Ñ%<�NÔÙ%.×%6Ñ%6�HÔÙ%-×%5Ñ%5�G„OÙ%-×%5Ñ%5�G„OÙ%8×%@Ñ%@ÑÔÙ%0×%8Ñ%8�JÔÙ%2×%:Ñ%:�LÔÙ%+§^¡^�E„MÙ%9×%AÑ%AÑÔá%*§]¡]�D„LÙ%-×%5Ñ%5�KÔÙ%,§_¡_�JÔÙ%,§_¡_�JÔÙ%,§_¡_�JÔÙ%-×%5Ñ%5�KÔÙ%,§_¡_�JÔÙ%/×%7Ñ%7�MÔÙ%)§\¡\�C„Ká%:×%BÑ%BÑÔ á+×3Ñ3ñ 'Ô.ñ 	'×.Ñ.ñ "Ô)ñ 	5×<Ñ<ñ 0×7Ñ7r¡   r�   c                óœ   • SSK Jn  [        USS5      (       a-  [        X5      (       d  U " / UR                  Q[        U5      P76 $ U " U5      $ )z$Convert mat to a Matrix of type typ.r   r¤  r§  F)r©  r�   r  r%  r¯   rÑ   )ÚtyprÔ   r�   s      r�   Ú_convert_matrixrâ  ¢  sD   € å4Üˆs�K ×'Ñ'´
¸3×0KÑ0Kñ
 Ð)�C—I‘IÐ)œt C›yÒ)Ð)á�3‹xˆr¡   c                ón   • [        U SS 5      nUc  g[        U[        5      =(       a    [        U5      S:H  $ )Nr¯   Fr˜  )r  r%  rl  rÒ   )r¥   r¯   s     r�   Ú_has_matrix_shaperä  ¯  s2   € Ü�E˜7 DÓ)€EØ�}ØÜ�eœUÓ#×7¬¨E«
°a©Ð7r¡   c                ó@   • [        U S5      =(       a    [        U S5      $ )Nr”   r•   )r®  )r¥   s    r�   Ú_has_rows_colsræ  ¶  s   € Ü�5˜&Ó!×<¤g¨e°VÓ&<Ð<r¡   c                ó  • Sn[        U[        5      (       a  U$ [        USS5      nU(       a  US4$ Uc7  [        U5      (       d  [	        U5      (       a  [        [        U 5      U5      S4$ [        U[        5      (       d  US4$ U$ )z8Convert other to a Matrix, or check for possible scalar.)NÚinvalid_typer§  Nrá  rþ  )r%  r:   r  rä  ræ  râ  r  r   )r¤   r¥   ÚINVALIDr§  s       r�   rä  rä  º  sŽ   € ð #€Gô �%œ×#Ñ#Øˆä˜˜{¨DÓ1€Iö Ø�kÐ!Ð!ð ÑÜ˜U×#Ñ#¤~°e×'<Ñ'<Ü"¤4¨£:¨uÓ5°{ÐBÐBô �eœX×&Ñ&ØÐ'Ð'Ð'à€Nr¡   c                óº  • [        U SS5      n[        USS5      nSX#4;  a2  U R                  UR                  :”  a  U R                  $ UR                  $  SSKn[	        XR
                  5      (       a  UR                  $ [	        XR
                  5      (       a  U R                  $  [        SU R                  < SUR                  < 35      e! [         a     N3f = f)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 rK  )r  rØ  ræ  Únumpyr%  ÚndarrayÚImportErrorr+  )r+  r/  Ú
priority_AÚ
priority_Brë  s        r�   rÈ   rÈ   Õ  sÄ   € ô  ˜Ð-¨tÓ4€JÜ˜Ð-¨tÓ4€JØ�JÐ+Ó+Ø×Ñ˜q×0Ñ0Ó0Ø—;‘;Ðà—;‘;ÐðÛô �aŸ™×'Ñ'Ø—;‘;ÐÜ�aŸ™×'Ñ'Ø—;‘;Ðð (õ °Q·[´[À!Ç+Ã+ÐNÓ
OÐOøô ó Ùðús   ÁC Ã
CÃCc                ó®   • [        X5      u  pUS:X  a?  [        X5      nX0R                  :w  a  [        X05      n X1R                  :w  a  [        X15      nXU4$ )zDUnify self and other into a single matrix type, or check for scalar.rá  )rä  rÈ   ræ  râ  )r¤   r¥   r›  rá  s       r�   rð  rð  ú  sR   € ä˜tÓ+�H€EàˆKÓÜ�dÓ"ˆØ—.‘.Ó Ü" 3Ó-ˆDØ—/‘/Ó!Ü# CÓ/ˆEà˜ˆ>Ðr¡   c                óâ   • [        U [        5      (       d(  [        U SS5      nUb  U" 5       n O[        SU < S35      eUb%  U S:  a  X-  n U S:¼  a  X:  d  [        SU < S35      e[        U 5      $ )z>Return integer after making positive and validating against n.Ú	__index__NzInvalid index a[rL  r   zIndex out of range: a[)r%  r“   r  r  )r¶   r  Újindexs      r�   r.  r.    sm   € ä�aœ×ÑÜ˜˜K¨Ó.ˆØÑÙ“‰Aå³aÐ9Ó:Ð:Ø�}Øˆq‹5Ø‰FˆAØ�Q“˜1›5Ý»AÐ?Ó@Ð@Üˆq‹6€Mr¡   c                  ó*   • \ rS rSrSrS rS rS rSrg)r­  i  a	  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                ól   • US:X  a  SnUS:  a  [        S5      eSU R                  U4-  n[        U5      $ )Nr   z!DeferredVector index out of rangez%s[%d])r  Únamer   )r¤   rµ   Úcomponent_names      r�   rª   ÚDeferredVector.__getitem__(  s>   € Ø�‹7ØˆAØˆq‹5ÜÐ@ÓAÐAØ! T§Y¡Y° NÑ2ˆÜ�nÓ%Ð%r¡   c                ó   • [        U 5      $ r¿   r   r®   s    r�   rs  ÚDeferredVector.__str__0  rH  r¡   c                ó    • SU R                   -  $ )NzDeferredVector('%s'))rö  r®   s    r�   Ú__repr__ÚDeferredVector.__repr__3  s   € Ø%¨¯	©	Ñ1Ð1r¡   r´   N)	rÑ  rÒ  rÓ  rÔ  rÕ  rª   rs  rü  rß  r´   r¡   r�   r­  r­    s   † ñò&òõ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   rw  Úsympy.polys.polytoolsr2   r3   r4   Úsympy.utilities.miscr5   r6   Úsympy.core.decoratorsr7   Úsympy.core.logicr8   r9   Úsympy.tensor.arrayr:   r;   r<   rV  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È   rð  r.  r­  r´   r¡   r�   Ú<module>r)     sk  ðÝ "Ý #Ý $Ý Ý å +ß (ß (Ý )Ý &Ý ß +ß 0Ý $Ý ß <Ñ <Ý ß CÑ Cß OÝ "Ý -Ý )ß ;ß Hã Ý $Ý -Ý  Ý  Ý 3ç EÝ &ß :ß 3Ý 7ß 1Ý (Ý 1å 2å ÷ó ÷ :÷÷ ÷ ÷ ñ ÷ AÓ @÷>÷ >÷ >ó >÷
÷ õ ÷ KÓ J÷6÷ 6÷ 6÷ 6÷V÷ Võ V÷
Ró Rð,ð /;¨^ðÐ ô|P=�ô |P=ò~a
ò8ò=òò6"PòJôô 2�V˜[õ 2r¡   