
    \hS8                        S SK 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  S SKJr  S SKJr  S S	KJrJrJrJr  S S
KJrJrJr  S SKJrJr  S SKJr  S rS r S r!S r"S r#S r$S r%S r&S r'S r(S r)\S 5       r*g)    )
expand_mul)IRational)S)Symbol)sqrt)Abs)simplify)NonSquareMatrixError)MatrixzeroseyeSparseMatrix)xyz)raisesslow)allclosec                  b  ^ [        / SQ/ SQ/ SQ/ SQ/5      n U R                  5       u  pnUR                  (       d   eUR                  (       d   eX-  R	                  US5      U -
  [        S5      :X  d   e[        / SQ/ SQ/ S	Q/ S
Q/5      n U R                  5       u  pnUR                  (       d   eUR                  (       d   eX-  R	                  US5      U -
  [        S5      :X  d   e[        / SQ/ SQ/ SQ/ SQ/5      n U R                  SS9u  pnUR                  (       d   eUR                  (       d   eX-  R	                  US5      U -
  [        SS5      :X  d   e[        / SQ/ SQ/ SQ/5      n U R                  SS9u  pnUR                  (       d   eUR                  (       d   eX-  R	                  US5      U -
  [        S5      :X  d   e[        S[        S4S[        S4[        S[        445      mTR                  5       u  pnUR                  (       d   eUR                  (       d   eX-  R	                  US5      T-
  [        S5      :X  d   e[        S5      nUR                  SL d   eUR                  SL d   e[        S5      nUR                  SL d   eUR                  SL d   e[        / SQ/ SQ/ SQ/5      mTR                  5       u  paprUT-  XR                  5       -  U-  :X  d   e[        / SQ/ SQ/ SQ/ SQ/5      mTR                  5       u  paprUT-  XR                  5       -  U-  :X  d   e[        / S Q/ S!Q/ S"Q/5      mTR                  5       u  paprUT-  XR                  5       -  U-  :X  d   e[        / SQ/ SQ/ SQ/5      m[        [        U4S# j5        g )$N)r            )r   r         )   r   r   r   )   r   r   backwardr   )r   r   r   r   )r   r   r   r   )   r   r   r   )ir   r   r   r    r   r   r   r   r   r   r   	   )
         F	rankcheckr   )r   r   r   r    r   r   )r    r   r   r   r   r   T)r!   )r   r   r   )r    r   r   )r   r   r   )r   r   r   r    r   r   r   )r   r   r   )r   r    r   r   )r   r-   r   r   )r   r   r    r+   )r   r    r   c                  "   > T R                  SS9$ )NTr(   )LUdecomposition_Simple)Ms   `/var/www/auris/envauris/lib/python3.13/site-packages/sympy/matrices/tests/test_decompositions.py<lambda>test_LUdecomp.<locals>.<lambda>b   s     8 84 8 H    )r   LUdecompositionis_loweris_upperpermute_rowsr   r   r   r   LUdecompositionFFinvr   
ValueError)	testmatLUpmLmUPDeer0   s	           @r1   test_LUdecomprD      s   l""#% &G %%'GA!::::::Ca,w6%(BBBm"##% &G %%'GA!::::::Ca,w6%(BBB i"$ %G %%%6GA!::::::Ca,w6%1+EEE i! "G %%%6GA!::::::Ca,w6%(BBBAq	Aq!9q!Qi01A!GA!::::::Ca,q0E!H<<<	  
B ;;$;;%	  
B ;;%;;$ 		 	A &&(LA#Q3!GGI+a-  	!A &&(LA#Q3!GGI+a-	 	A &&(LA#Q3!GGI+a- 				A
 :HIr4   c                     [        SS/SS//5      n U R                  5       u  pnX-  UR                  -  U :X  d   eUR                  U-  [        UR                  5      :X  d   eUR                  U-  [        UR                  5      :X  d   e[        SS//5      nUR                  5       u  pnX-  UR                  -  U:X  d   eUR                  U-  [        UR                  5      :X  d   eUR                  U-  [        UR                  5      :X  d   e[        / SQ/ SQ/ SQ/ SQ/5      nUR                  5       u  pnX-  UR                  -  U:X  d   eUR                  U-  [        UR                  5      :X  d   eUR                  U-  [        UR                  5      :X  d   e[        [        SS5      [        S5      /S[        SS	5      //5      nUR                  5       u  pn[        UR                  U-  5      [        UR                  5      :X  d   e[        UR                  U-  5      [        UR                  5      :X  d   e[        X-  UR                  -  5      U:X  d   eg )
Nr    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   singular_value_decompositionTr   colsr   r   r
   )Ar>   r   VBCDs          r1   "test_singular_value_decompositionDrN   d   s   AA A,,.GA!5133;!337c!&&k!!!337c!&&k!!!AxA,,.GA!5133;!337c!&&k!!!337c!&&k!!!	 	A ,,.GA!5133;!337c!&&k!!!337c!&&k!!!!Qa)Ax1~+>?@A,,.GA!ACC!GAFF+++ACC!GAFF+++AEACCK A%%%r4   c                  H   [        SS/SS//5      n U R                  5       u  p[        nU[        SU" SS5      -  U" S5      S-  U" S5      S-  U" SS5      -  -  /SSU" SS5      -  -  U" S5      * S-  U" S5      S-  U" SS5      -  -  //5      :X  d   eU[        SU" SS5      -  SSU" SS5      -  -  /SU" S5      S-  U" SS5      -  //5      :X  d   eX-  U :X  d   eUR                  U-  [	        S5      :X  d   e[        / SQ/ S	Q/ S
Q/5      n U R                  5       u  pUR                  U-  [	        UR
                  5      :X  d   eUR                  (       d   eXU-  :X  d   e[        / SQ/ SQ/ SQ/5      n U R                  5       u  pUR                  U-  [	        UR
                  5      :X  d   eUR                  (       d   eXU-  :X  d   e[        S5      n[        U/5      n U R                  5       u  pU[        U[        U5      -  /5      :X  d   eU[        [        U5      /5      :X  d   e[        US/SU//5      n U R                  5       u  pX[        U5      -  [        SS/SS//5      -  :X  d   eU[        U5      [        SS/SS//5      -  :X  d   eg )Nr    r   r   r   r-   r   r   r    r    r    )r    r    r   )r   r   r   )r'   r   i)r   r      )r      r   )	r   QRdecompositionr   rG   r   rH   r7   r   r	   )rI   Qr   Rr   s        r1   test_QRrW      s   AA ADAAaAh;!A$q&1Q46Ab!H"445	
1aAh;!A$q1Q46Ab!H"4457 8 8 8 8 AaGQq!B({]3a!A$q&1Q79J5KLMMMM3!8O8337c!f	9i01ADA337c!&&k!!!:::!8O8k;78ADA337c!&&k!!!:::!8O8sAsADACF
|$$$$Ax    AA ADACF
VaVaV$455555A!Q!Q 011111r4   c                     [        / SQ/ SQ/ SQ/ SQ/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/ SQ/ SQ/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        S	S
S
S	/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/ SQ/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        S
S	S
S	/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   eg )N)r$   r      )r'   r   )r   r   r   )r   r[   )r    r-   r   )r    r   r   )r    r   r   )r    r-   r   r   r    r!   r"   r,   )r    r   r$      )r    r      @   r   rT   rG   r   rH   r7   rI   rU   rV   s      r1   test_QR_non_squarera      s   
KK@AADA337c!&&k!!!:::!8O8
J	:>?ADA337c!&&k!!!:::!8O8q!aVADA337c!&&k!!!:::!8O8 		9%&ADA337c!&&k!!!:::!8O8m^<=ADA337c!&&k!!!:::!8O8q!aVADA337c!&&k!!!:::!8O8r4   c                  	   [        / SQ/ SQ/ SQ/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/ SQ/ SQ/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/ SQ/ SQ/5      R                  n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/5      R                  n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/5      n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/5      R                  n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/5      R                  n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / S	Q/ S
Q/ S	Q/5      R                  n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / S	Q/ S
Q/ S	Q/ SQ/5      R                  n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   e[        / SQ/ SQ/ SQ/ SQ/5      R                  n U R                  5       u  pUR                  U-  [        UR                  5      :X  d   eUR
                  (       d   eXU-  :X  d   eg )Nr!   r"   r#   rP   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r,   )r   r   r   r   r_   r`   s      r1   test_QR_trivialrc      s   	9i01ADA337c!&&k!!!:::!8O8	9i;<ADA337c!&&k!!!:::!8O8	9i;<>>ADA337c!&&k!!!:::!8O8 		{ADA337c!&&k!!!:::!8O8	{ADA337c!&&k!!!:::!8O8	9%&ADA337c!&&k!!!:::!8O8	9%&((ADA337c!&&k!!!:::!8O8 		9%&((ADA337c!&&k!!!:::!8O8lL9:<<ADA337c!&&k!!!:::!8O8lL,GHJJADA337c!&&k!!!:::!8O8	9i;<>>ADA337c!&&k!!!:::!8O8r4   c                     [        SS/SS//5      n U R                  5       u  p[        X-  U 5      (       d   e[        XR                  -  [         R                  " S5      5      (       d   e[        UR                  U-  [         R                  " S5      5      (       d   e[        SS/SS//5      n U R                  5       u  p[        X-  U 5      (       d   e[        XR                  -  [         R                  " S5      5      (       d   e[        UR                  U-  [         R                  " S5      5      (       d   eg )Nr    g)\(?r   gjt?)r   rT   r   rG   r   r`   s      r1   test_QR_floatre     s   AD	"#ADAAE1AGVZZ]++++ACC!GVZZ]++++AE
#$ADAAE1AGVZZ]++++ACC!GVZZ]++++r4   c                     ^ SmU4S jn  [        SS/SS//5      R                  U S9u  p e! [         a  nTUR                  S   :X  d   e S nAg S nAff = f)NI got passed in!c                    > [        T5      eNr;   valuemagic_strings    r1   goofyiszero;test_LUdecomposition_Simple_iszerofunc.<locals>.goofyiszero)      &&r4   r    r   
iszerofunc)r   r/   r;   args)rn   lur?   errrm   s       @r1   &test_LUdecomposition_Simple_iszerofuncrv   %  sm     &L'AA'(??;?W
 5	  sxx{***s    - 
AAAc                     ^ SmU4S jn  [        SS/SS//5      R                  U S9u  pn e! [         a  nTUR                  S   :X  d   e S nAg S nAff = f)Nrg   c                    > [        T5      eri   rj   rk   s    r1   rn   4test_LUdecomposition_iszerofunc.<locals>.goofyiszero8  rp   r4   r    r   rq   )r   r5   r;   rs   )rn   lur?   ru   rm   s        @r1   test_LUdecomposition_iszerofuncr|   4  so     &L'1a&1a&)*::k:Ra
 5	  sxx{***s   !. 
AAAc            
      4   [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        S5      n U R	                  SS9u  pX-  UR
                  -  U :X  d   e[        S	5      n U R	                  5       u  pX-  UR
                  -  U :X  d   eUR                  (       d   eU[        / S
Q[        SS5      SS/[        SS5      [        SS5      S//5      :X  d   eUR                  5       (       d   eU[        / SQ/ SQ/ SQ/5      :X  d   e[        SS[        -  SS[        -  -   4S[        -  SS[        -   4SS[        -  -
  S[        -
  S445      n U R	                  5       u  p[        X-  UR                  -  5      U :X  d   eUR                  5       [        / S
Q[        S-  SS/[        R                  [        S-  -
  SS//5      :X  d   eUR                  5       [        S5      :X  d   e[        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        S5      n U R	                  SS9u  pX-  UR
                  -  U :X  d   e[        S	5      n U R	                  5       u  pX-  UR
                  -  U :X  d   eUR                  (       d   eU[        / S
Q[        SS5      SS/[        SS5      [        SS5      S//5      :X  d   eUR                  5       (       d   eU[        / SQ/ SQ/ SQ/5      :X  d   e[        SS[        -  SS[        -  -   4S[        -  SS[        -   4SS[        -  -
  S[        -
  S445      n U R	                  5       u  p[        X-  UR                  -  5      U :X  d   eU[        S
[        S-  SS4[        R                  [        S-  -
  SS445      :X  d   eU[        S5      :X  d   eg )Nc                  4    [        S5      R                  5       $ Nr    r   r   LDLdecomposition r4   r1   r2   'test_LDLdecomposition.<locals>.<lambda>D  s    )H)H)Jr4   c                  4    [        S5      R                  5       $ Nr   )r   r   r   r   r4   r1   r2   r   E      v&67HHJr4   c                  J    [        S[        -   S4S45      R                  5       $ Nr   r   )r   r    )r   r   r   r   r4   r1   r2   r   F  s    vAqz6&:;LLNr4   c                  4    [        S5      R                  5       $ N)r    r   )r   r    r   r   r4   r1   r2   r   G  r   r4   c                  2    [        S5      R                  SS9$ Nr   F	hermitianr   r   r4   r1   r2   r   H  s    v&67HHSXHYr4   r   Fr   ))      )r      r   )r   r   r&   r*   r   r   r    r   r-   )r   r   r   )r   r$   r   r   r   r$   r   r   r   r&   ))r   r   r   )r   r    r   r   c                  4    [        S5      R                  5       $ r   r   r   r   r4   r1   r2   r   Y  s    f)=)N)N)Pr4   c                  4    [        S5      R                  5       $ r   r   r   r4   r1   r2   r   Z      |,<=NNPr4   c                  J    [        S[        -   S4S45      R                  5       $ r   )r   r   r   r   r4   r1   r2   r   [  s    |a!eQZ,@ARRTr4   c                  4    [        S5      R                  5       $ r   r   r   r4   r1   r2   r   \  r   r4   c                  2    [        S5      R                  SS9$ r   r   r   r4   r1   r2   r   ]  s    |,<=NNY^N_r4   )r   r   r;   r   r   rG   r6   r   is_diagonalr   r   Hexpandr   Halfr   )rI   r=   rM   s      r1   test_LDLdecompositionr   C  s   
!JK
:JK
:NO
:JK
:YZ A.DA5133;!78ADA5133;!:::	Xa^Q#:Xb!_hWXZ[n^_<`abbbb==???
Iy9::::BqD!ac'"QqS!R!V$4q1Q3wQ6KLMADAaeacck"a'''88:QqS!QK!&&1Q3,19M NOOOO88: ABBBB
!PQ
:PQ
:TU
:PQ
:_`%&A.DA5133;!=>ADA5133;!:::	Xa^Q#:Xb!_hWXZ[n^_<`abbbb==???
Iy9::::q"Q$AaC(1Q326*:Q1Wb1fb<QRSADAaeacck"a'''	AaCA;!A#q!0DEFFFF89999r4   c            	         [        / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      /n U  Hd  nUR                  SS9nX-  nX!-  n[        X1-  5      U:X  d   e[        XB-  5      U:X  d   eUR                  U:X  d   eUR                  U:X  a  Md   e   g )	N)=   Y   7      G   r   )>   `   U   r   r\   r   )E   8      r   6   r   )r%   r   [   )   r   r   )r      r%   0   Z   r   )r   r   r   r   r   r   RD)method)r   pinvr
   r   )AsrI   A_pinvAApApAs        r1   1test_pinv_succeeds_with_rank_decomposition_methodr   n  s    
  
B t$jj A%%%%///uu||uu|| r4   c                     [        SS/ 5      n U R                  5       u  pUR                  (       d   eUR                  UR                  s=:X  a  U R                  5       :X  d   e   eX-  U :X  d   e[        SSS/5      n U R                  5       u  pUR                  (       d   eUR                  UR                  s=:X  a  U R                  5       :X  d   e   eX-  U :X  d   e[        SS/ SQ5      n U R                  5       u  pUR                  (       d   eUR                  UR                  s=:X  a  U R                  5       :X  d   e   eX-  U :X  d   e[        / SQ/ SQ/ SQ/ S	Q/5      n U R                  5       u  pUR                  (       d   eUR                  UR                  s=:X  a  U R                  5       :X  d   e   eX-  U :X  d   eg )
Nr   r    r   r   )	r    r   r   r    r   r   r    r   r   )r   r   r    r   r   r   r   )r-   r   r   r   r    rZ   r   )r   r   r   r[   r[   r   r   )r-   r   r   r-   r   r    r   )r   rank_decomposition
is_echelonrH   rowsrank)acfs      r1   test_rank_decompositionr     s   q!RA!DA<<<66QVV'qvvx'''''5A::q!aSA!DA<<<66QVV'qvvx'''''5A::q!01A!DA<<<66QVV'qvvx'''''5A::! 	" 	#A
 !DA<<<66QVV'qvvx'''''5A::r4   c            
         [        SS[        S5      /[        S5      [        SS5      S/S[        SS5      S//5      n U R                  5       u  p[	        X"R
                  -  5      [        UR                  5      :X  d   e[	        UR
                  U-  5      [        UR                  5      :X  d   eUR                  (       d   e[	        X!-  UR
                  -  5      U :X  d   e[        / SQ/ SQ/ SQ/5      nUR                  5       u  p[	        X"R
                  -  5      [        UR                  5      :X  d   e[	        UR
                  U-  5      [        UR                  5      :X  d   eUR                  (       d   e[	        X!-  UR
                  -  5      U:X  d   e[        S[        S5      SS// S	QSSS[        S
5      // SQ/5      nUR                  5       u  p[	        X"R
                  -  5      [        UR                  5      :X  d   e[	        UR
                  U-  5      [        UR                  5      :X  d   eUR                  (       d   e[	        X!-  UR
                  -  5      U:X  d   e[        / SQ/ SQ/ SQ/5      nUR                  5       u  p[	        X"R
                  -  5      [        UR                  5      :X  d   e[	        UR
                  U-  5      [        UR                  5      :X  d   eUR                  (       d   e[	        X!-  UR
                  -  5      U:X  d   e[        / SQ/ SQ/ SQ/ SQ/5      nUR                  5       u  p[	        X"R
                  -  5      [        UR                  5      :X  d   e[	        UR
                  U-  5      [        UR                  5      :X  d   eUR                  (       d   e[	        X!-  UR
                  -  5      U:X  d   eg )Nr    r   r   r   r   )r    r   r%   )r   r   r   )r   r'   "   )r   r   r   r   r   )r   r   r   r   r!   )r[   r   r   )r   ir$   )r    r   r   r   )r   r    r   r   )r    r    r   r    )r    r    r    r   )	r   r   r   upper_hessenberg_decompositionr
   r   r   rH   is_upper_hessenberg)rI   r   rB   rK   rL   rM   Es          r1   #test_upper_hessenberg_decompositionr     sN   	
AtAw	a(1a.!$	
HQNA 	A
 ++-DAAGAFF+++ACC!GAFF+++    QUQSS[!a''' 	 	A
 ++-DAAGAFF+++ACC!GAFF+++    AEACCK A%%%	
DGQ	
Aq$q'	 	A ++-DAAGAFF+++ACC!GAFF+++    AEACCK A%%% 	A
 ++-DAAGAFF+++ACC!GAFF+++    AEACCK A%%%	 	A ++-DAAGAFF+++ACC!GAFF+++    AEACCK A%%%r4   N)+sympy.core.functionr   sympy.core.numbersr   r   sympy.core.singletonr   sympy.core.symbolr   (sympy.functions.elementary.miscellaneousr   $sympy.functions.elementary.complexesr	   sympy.simplify.simplifyr
   sympy.matrices.exceptionsr   sympy.matricesr   r   r   r   	sympy.abcr   r   r   sympy.testing.pytestr   r   sympy.testing.matricesr   rD   rN   rW   ra   rc   re   rv   r|   r   r   r   r   r   r4   r1   <module>r      s    * * " $ 9 4 , : ; ;   - +SJj&D 2F%NDN,):V$< ;& ;&r4   