
    (ph                        S SK r S SKrS SKrS SKrS SKJrJrJrJ	r	J
r
Jr  S SKrS SKJr  S SK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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+J,r,J-r-  S SK.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7  S SK8J9r9  S SK:J;r;  S SK<J=r=  S S	KJ>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrP  S S
KQJRrR  S SKSJTrT  S SKUJVrV  S SKWJXrX   S SKYJZrZ  \R                  S:H  =(       d    \R                  " 5       S;   r]S\^4S jr_\R                  \R                  /ra\R                  \R                  /rc\a\c-   rdS re " S S5      rf " S S5      rg " S S5      rh " S S5      ri " S S5      rj " S S5      rk " S  S!\k5      rl\R                  R                  \]S"S#9\R                  R                  S$5      S% 5       5       rp " S& S'5      rq " S( S)5      rr " S* S+5      rs " S, S-5      rt " S. S/5      ru " S0 S15      rvS=rwrx\Zb  \ZS2   S3   S4   rw\ZS2   S3   S5   rx " S6 S75      ry " S8 S95      rz " S: S;5      r{ " S< S=5      r|S> r}\R                  R                  \R                  " 5       S?:H  S@S#9SA 5       r~SB rSC r\R                  GR                  SSDSE9SF 5       r " SG SH5      rSUSI jr\R                  GR
                  \R                  R                  \GR                  " \GR                  5      GR                  SJ:  SKS#9SL 5       5       rSM r\R                  GR                  SN\\^\R                  \\R                  /5      SO 5       r " SP SQ5      rSR r " SS ST5      rg! \[ a    SrZ GNf = f)V    N)assert_equalassert_almost_equalassert_array_almost_equalassert_array_equalassert_assert_allclose)raises)eigeigvalslusvdsvdvalscholeskyqrschurrsf2csflu_solve	lu_factorsolvediagsvd
hessenbergrq
eig_bandedeigvals_bandedeigheigvalshqr_multiplyqzorthordqzsubspace_angleshadamardeigvalsh_tridiagonaleigh_tridiagonal
null_spacecdf2rdfLinAlgError)	dgbtrfdgbtrszgbtrfzgbtrsdsbevdsbevddsbevxzhbevdzhbevx)norm)_select_function)ortho_group)arraydiagfulllinalgargsortzerosarangefloat32	complex64ravelsqrt	iscomplexshapesortsignasarrayisfinitendarrayeye)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64)CONFIG
emscripten)wasm32wasm64Fc                    U[         ;   ab  [        R                  R                  X 5      [        R                  R                  X 5      S-  -   nX3R	                  5       R
                  -   S-  nO0[        R                  R                  X 5      nX3R
                  -   S-  nU(       a(  U[        SU -  5      [        R                  " U 5      -  -  nUR                  U5      $ )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprandomrandconjTr>   rF   astype)nposdefdtypeAs       Q/var/www/html/venv/lib/python3.13/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrixr^   ,   s    IINN1 299>>!#7#<<^QIINN1 WaK	T!A#Yrvvay  88E?    c                    [        U [        5      (       a  U nUR                  U5      S-  S-
  nOK[        U [        5      (       a+  [	        U R
                  5      S:X  a  U R
                  S   nU nO[        S5      e[        R                  " U5      nUR                  R                  5       [        U5      -  U-  nSUR                  U-   -  nU$ )a  Return a random symmetric (Hermitian) matrix.

If 'dim_or_eigv' is an integer N, return a NxN matrix, with eigenvalues
    uniformly distributed on (-1,1).

If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                  eigenvalues are 'a'.
rQ      r   zinput type not supported.      ?)
isinstanceintrT   rE   lenr@   	TypeErrorr3   rvsrW   rV   r5   )dim_or_eigvrngdimdvhs         r]   symrandrn   B   s     +s##JJsOA!
['
*
*
k
 A
%"344A	
T!Wq AQSSUAHr_   c                   z    \ rS rSrS rS rS rS r\R                  R                  S\\\\\/5      S 5       rSrg	)
TestEigVals\   c                     / SQ/ SQ/ SQ/n[        U5      nS[        S5      -   S-  SS[        S5      -
  S-  /n[        X#5        g )Nra   rQ      rQ         	   ]   rQ   r   r   r>   r   selfawexact_ws       r]   test_simpleTestEigVals.test_simple^   sC    	9-AJd2hJ>1qbz1n5!!-r_   c                     [        / SQ/ SQ/ SQ/S5      R                  nUR                  5       nUR                  n[        U5      nS[	        S5      -   S-  SS[	        S5      -
  S-  /n[        X#5        g )Nrs   ru   rk   rx   ry   rQ   r   )r4   rW   copyr   r>   r   r{   s       r]   test_simple_trTestEigVals.test_simple_trd   sd    9i3S9;;FFHCCAJd2hJ>1qbz1n5!!-r_   c                     / SQ/ SQ/ SQ/n[        U5      nS[        S5      -   S-  SS[        S5      -
  S-  /n[        X#5        g )Nrs   rQ   rv   y      @      ?y      "@      ?y      W@      @rQ   r   rz   r{   s       r]   test_simple_complexTestEigVals.test_simple_complexl   sM    	<0AJe$a'e$a') 	"!-r_   c                     / SQ/ SQ/ SQ/n[        USS9nS[        S5      -   S-  SS[        S5      -
  S-  /n[        X#5        g )	Nrs   ru   Fcheck_finiterx   ry   rQ   r   rz   r{   s       r]   test_finiteTestEigVals.test_finitet   sF    	9-AE*d2hJ>1qbz1n5!!-r_   dtc                    [         R                  " SUS9n[        U5      nUR                  S:X  d   eUR                  [        [         R
                  " SUS95      R                  :X  d   e[        USS9nUR                  S:X  d   eUR                  [        [         R
                  " SUS95      R                  :X  d   eg )Nr   r   r[   r   rQ   Thomogeneous_eigvalsrQ   r   )rS   emptyr   r@   r[   rF   )r|   r   r}   r~   s       r]   
test_emptyTestEigVals.test_emptyz   s    HHV2&AJww$ww'"&&""56<<<<<A40ww&   ww'"&&""56<<<<<r_    N)__name__
__module____qualname____firstlineno__r   r   r   r   pytestmarkparametrizerd   floatr;   complexr<   r   __static_attributes__r   r_   r]   rp   rp   \   sG    .... [[TC)#LM= N=r_   rp   c                       \ rS rSrS rS rS rS r  SS jrS r	S r
S	 rS
 rS rS rS rS r\R$                  R'                  S\\\R.                  \\R2                  /5      S 5       rSrg)TestEig   c                 R   [        / SQ/ SQ/ SQ/5      n[        U5      u  p#S[        S5      -   S-  SS[        S5      -
  S-  /n[        SSS[        S5      S-  -   S-  /5      n[        / S	Q5      n[        SSS[        S5      S-  -
  S-  /5      nU[        U5      -  nU[        U5      -  nU[        U5      -  n[	        X$5        [	        XSS S 2S4   [        US
   5      -  5        [	        XcS S 2S4   [        US   5      -  5        [	        XsS S 2S4   [        US   5      -  5        [        S5       H$  n[	        XS S 2U4   -  X(   US S 2U4   -  5        M&     [        USSS9u  p#[        S5       H/  n[	        UR                  US S 2U4   -  X(   US S 2U4   -  5        M1     g )Nrs   ru   rx   ry   rQ   r   ra   rt         @r   r   r   ra   r   rQ   leftright)r4   r
   r>   r1   r   rB   rangerW   	r|   r}   r~   rl   r   v0v1v2is	            r]   r   TestEig.test_simple   s   9i341vd2hJ>1qbz1n5Aq1T"XaZ<*+,;Aq1T"XaZ<*+,$r(]$r(]$r(]!!-!"1gd1T7m&;<!"1gd1T7m&;<!"1gd1T7m&;<qA%aAqD'k14!Q$<@ 11A&qA%accAadGmQT!AqD'\B r_   c                    [        SS/SS//5      n[        USSS9u  p#n[        U[        SS/5      5        [        S5       H$  n[        XS S 2U4   -  X%   US S 2U4   -  5        M&     [        S5       HK  n[        UR	                  5       R
                  US S 2U4   -  X%   R	                  5       US S 2U4   -  5        MM     g )Nra   rQ   r         ?       @y      ?       )r4   r
   r   r   rV   rW   r|   r}   r~   vlvrr   s         r]   test_simple_complex_eigTestEig.test_simple_complex_eig   s    Aq6B7#$+	r!!UD$<%89qA%aQT(lADAqDMB qA%affhjj2ad8&;&'diik"QT(&:< r_   c                 b   [        / SQ/ SQ/ SQ/5      n[        USSS9u  p#n[        S5       H$  n[        XS S 2U4   -  X%   US S 2U4   -  5        M&     [        S5       HK  n[        UR	                  5       R
                  US S 2U4   -  X%   R	                  5       US S 2U4   -  5        MM     g )Nrs   r   ra   r   rt   )r4   r
   r   r   rV   rW   r   s         r]   r   TestEig.test_simple_complex   s    9i67+	rqA%aQT(lADAqDMB qA%affhjj2ad8&;&'diik"QT(&:< r_   c                     S//nS//n[        XSS9u  p4[        US   S5        [        US   S:g  5        [        US5        [        X5      u  p4[        U[        R
                  5        [        US5        g )Nra   r   Tr   ra   r   r   )r
   r   r   r   rS   inf)r|   r}   br~   r   s        r]   test_gh_3054TestEig.test_gh_3054   sm    SESEAd3$#$1AA	QAr_   c           	      6   Ub  [        U5      [        U5      p!UnO*[        U5      nUn[        R                  " UR                  6 nSU< SU< 3n[	        XSS9u  p[        XSS9nX-  U	SS S 24   -  nX*-  U	SS S 24   -  n[        UR                  S   5       H  n[        US S 2U4   US S 2U4   XCUS9  M     Uc&  [        U	SS S 24   S5        [        USS S 24   S5        [        R                  " U	5      n[        R                  " U5      n[        U	S S 2U4   US S 2U4   SSUS9  [        R                  " [        U
5      5      n[        [        U
5      5       H  n[        U
S S 2U4   5      UU'   M     [        U[        R                  " UR                  5      USSS	9  U	SS S 24   S:g  nU	SU4   U	SU4   -  n[	        X5      u  p[        X5      nX-  nX*-  U	-  nX-
  n[        UR                  S   5       HC  n[        R                  " [        US S 2U4   5      5      (       d  M0  [        US S 2U4   SXeUS9  ME     U	[        U	5         nU[        U5         nS
[        R                   " SU-  SS9-  nS
[        R                   " SU-  SS9-  n[#        [%        U5      UR&                  -   5      n[#        [%        U5      UR&                  -   5      n[        UU   UU   SSUS9  [        R                  " [        U
5      5      n[        [        U
5      5       H  n[        U
S S 2U4   5      UU'   M     [        U[        R                  " UR                  5      US9  [        [)        U5      [)        U	[        R                  " U	5         5      5        g )N
Tr   ra   r   rtolatolerr_msggHz>)r   r   r   )r   r   r   y             rP   g|=)tolr   )rC   rS   rF   r@   r
   r   r   r   lexsortr   re   r1   onessizeallrD   real_if_closer8   absimagrA   )r|   r\   B
atol_homog
rtol_homogr   r   B0msgr~   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_fins                          r]   _check_gen_eigTestEig._check_gen_eig   sN   =1:wqzqB
AB A1%r! At4Q5v!Q$v!Q$tzz!}%ADAJQT
!+cK & :AadGQ'Bq!tHa(zz!}

2!T'
Bq%xLt$ #	% #b'"s2wAR1XF1I   	 4c!	. !Q$1q,!A|O"44 A
Q^vvzksyy|$Avvhs1a4y)**AqD	1%)cC % (1+HRL! b&&r%xU;;r''6	u==s5zEJJ./Ffkk12dVE]!c	; #b'"s2wAR1XF1I   4cB 	R$qQ'8"9:r_   c                     [        / SQ/ SQ/ SQ/ SQ/ SQ/5      n[        / SQ/ SQ/ SQ/ S	Q/ S
Q/5      n[        R                  " SS9   U R                  XSSS9  S S S 5        g ! , (       d  f       g = f)N)   "      r      )-   r   *         )'   /   1      r   )   r   r         )&   ,   r         )   r      r   r   )r   .   (   r   %   )r   r   r   r   r   )   r   r         )r   #      r   r   ignorer   g-a=)r   r   )r4   rS   errstater   r|   r\   r   s      r]   test_singularTestEig.test_singular  sq     '''''	) *
 '''''	) * [[X&UC '&&s   	A$$
A2c                    [        [        / SQ5      5      n[        / SQ/ SQ/ SQ45      n[        / SQ/ SQ/ SQ45      n[        S5      n[        S	5      n[        R
                  " XT/XB* //5      n[        R
                  " XE/X//5      n[        R                  " S
S9   U R                  Xg5        S S S 5        g ! , (       d  f       g = f)N)ra   r   rt   )rQ   r   r   )r   rQ   r   )r   r   rQ   )ra   r   r   )r   ra   r   r   r   r   rt   rt   rt   r  r  )r5   r4   r9   rF   rS   blockr	  r   )r|   MKDZI3r\   r   s           r]   test_falkerTestEig.test_falker  s    y!";[9::z956&MVHHrg2w'(HHqgv&'[[X&% '&&s   B99
Cc                     S n[         R                  " SS9   [        S5       H"  nU" US-  S-  S9u  p4U R                  X45        M$     S S S 5        g ! , (       d  f       g = f)Nc                 l    SU S-  -   nSU -  n/ SQ/ SQSSUS/SSSU//n/ SQ/ SQSSSU* /SSUS//nX44$ )	NrQ   )ra   r   r   r   )r   ra   r   r   r   )r   r   ra   r   )r   r   r   ra   ra   r   )omegac1c2r\   r   s        r]   matrices)TestEig.test_bad_geneig.<locals>.matrices&  sk    eQhB5BQAQ2 A QB3QA A 4Kr_   r  r  d         @)r  )rS   r	  r   r   )r|   r  kr\   r   s        r]   test_bad_geneigTestEig.test_bad_geneig#  sQ    	 [[X&3Zad3h/##A)   '&&s   2A
A!c                    [         R                  R                  S5      n[        SU5      nU R	                  US 5        [        SU5      nU R	                  X#5        UR                  S5      SUR                  S5      -  -   nU R	                  US 5        UR                  S5      SUR                  S5      -  -   nU R	                  X#5        g )N  rt   r  rP   )rS   rT   RandomStatern   r   )r|   ri   r\   r   s       r]   test_make_eigvalsTestEig.test_make_eigvals:  s     ii##D)AsOAt$AsOA!JJvCJJv$6!66At$JJvCJJv$6!66A!r_   c                    / SQ/ SQ/ SQ/n[        USS9u  p#S[        S5      -   S-  SS[        S5      -
  S-  /n[        S	S	S	[        S5      S
-  -   S-  /5      n[        / SQ5      n[        S	S	S	[        S5      S
-  -
  S-  /5      nU[        U5      -  nU[        U5      -  nU[        U5      -  n[	        X$5        [	        XSS S 2S4   [        US   5      -  5        [	        XcS S 2S	4   [        US   5      -  5        [	        XsS S 2S4   [        US   5      -  5        [        S
5       H$  n[	        XS S 2U4   -  X(   US S 2U4   -  5        M&     g )Nrs   ru   Fr   rx   ry   rQ   r   ra   rt   r   r   r   r   )r
   r>   r4   r1   r   rB   r   r   s	            r]   test_check_finiteTestEig.test_check_finiteH  sD   	9-15)d2hJ>1qbz1n5Aq1T"XaZ<*+,;Aq1T"XaZ<*+,$r(]$r(]$r(]!!-!"1gd1T7m&;<!"1gd1T7m&;<!"1gd1T7m&;<qA%aAqD'k14!Q$<@ r_   c                 z    [         R                  " S5      R                  SS5      n[        [        [
        U5        g)z:Check that passing a non-square array raises a ValueError.rw   rt   rQ   N)rS   r:   reshapeassert_raises
ValueErrorr
   )r|   r\   s     r]   test_not_square_errorTestEig.test_not_square_errorY  s(    IIaL  A&j#q)r_   c                     [        S5      n[        R                  " S5      R                  SS5      n[	        [
        [        X5        [	        [
        [        X!5        g)zGCheck that passing arrays of with different shapes
raises a ValueError.rQ         "@rt   N)rF   rS   r:   r.  r/  r0  r
   r
  s      r]   test_shape_mismatchTestEig.test_shape_mismatch^  s?     FIIcN""1a(j#q,j#q,r_   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/SS9n[         R                  " / SQ/ SQ/ S	Q/ S
Q/SS9n[        X5      u  p4[         R                  R	                  5        nUR                  [        S5        [         R                  " USSS9R                  5       (       d   e[         R                  " USSS9R                  5       (       d   e S S S 5        g ! , (       d  f       g = f)N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r9  g      L@g      Z@g      o@float64r   )       @      @      $@r8  )r   r!        &@g      =@)r!        @g      *@g      ?@)r4  r>  g      1@g     A@z%invalid value encountered in multiplyr<  +=r          @)	rS   r4   r
   testingsuppress_warningsfilterRuntimeWarningiscloseany)r|   r\   r   r  Vsups         r]   test_gh_11577TestEig.test_gh_11577f  s     HH///02 :CD HH,,,-/ 7@A
 1y ZZ))+sJJ~'NO::a51557777::a51557777	 ,++s   .A-C%%
C3r   c                 P   [         R                  " SUS9n[        U5      u  p4[        [         R                  " SUS95      u  pVUR                  S:X  d   eUR
                  UR
                  :X  d   e[        U[         R                  " S5      5        UR                  S:X  d   eUR
                  UR
                  :X  d   e[        USS9u  p4UR                  S:X  d   eUR
                  UR
                  :X  d   eUR                  S:X  d   eUR
                  UR
                  :X  d   eg )Nr   r   rQ   r   Tr   r   )rS   r   r
   rF   r@   r[   r   )r|   r   r}   r~   r   w_nvr_ns          r]   r   TestEig.test_empty  s    HHV2&Aq+,	ww$ww#))###BHHV,-xx6!!!xx4::%%%A40ww&   ww#))###xx6!!!xx4::%%%r_   r   N)vIh%<=rQ  rQ  rQ  )r   r   r   r   r   r   r   r   r   r  r  r#  r(  r+  r1  r5  rK  r   r   r   rd   r   rS   r;   r   r<   r   r   r   r_   r]   r   r      s    C(<<
 AF49H;TD"&*."A"*
-88 [[TC

GR\\#RS& T&r_   r   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS r\R$                  R'                  S\\\R.                  \\R2                  /5      S 5       rSrg)TestEigBandedi  c                 $    U R                  5         g N)create_bandmatr|   s    r]   setup_methodTestEigBanded.setup_method  s    r_   c                 
   SnSU l         SU l        [        [        US5      5      [        [        US-
  S5      S5      -   [        [        US-
  S5      S5      -   [        [        US-
  S5      S5      -   [        [        US-
  S5      S5      -   U l        [        [        US5      5      S	[        [        US-
  S5      S5      -  -   S	[        [        US-
  S5      S5      -  -
  [        [        US-
  S5      S5      -   [        [        US-
  S5      S5      -   U l        [        [        US5      5      [        [        US-
  S5      S5      -   [        [        US-
  S
5      S5      -   [        [        US-
  S5      S5      -   [        [        US-
  S5      S5      -   U l        S	[        [        US5      5      -  [        [        US-
  S5      S5      -   S	[        [        US-
  S
5      S5      -  -   [        [        US-
  S5      S5      -   [        [        US-
  S5      S5      -   U l        [        R                  " U R                  5      u  p#UR                  n[        U5      nX$   U l        USS2U4   U l        [        R                  " U R
                  5      u  p#UR                  n[        U5      nX$   U l        USS2U4   U l        U R                  S-   n[!        XQ4["        S9U l        [!        XQ4[&        S9U l        [+        U5       HY  n[        U R                  U5      U R$                  XV-
  S-
  Xa24'   [        U R
                  U5      U R(                  XV-
  S-
  Xa24'   M[     SU R                   -  U R                  -   S-   n[!        XQ4["        S9U l        [        U R                  5      U R,                  SU R                   -  SS24'   [+        U R                   5       H  n[        U R                  US-   5      U R,                  SU R                   -  S-
  U-
  US-   U24'   [        U R                  U* S-
  5      U R,                  SU R                   -  S-   U-   SUS-
  U-
  24'   M     [!        XQ4[&        S9U l        [        U R                  5      U R.                  SU R                   -  SS24'   [+        U R                   5       H  n[        U R                  US-   5      U R.                  SU R                   -  S-
  U-
  US-   U24'   [        U R                  U* S-
  5      U R.                  SU R                   -  S-   U-   SUS-
  U-
  24'   M     S[1        U5      -  U l        U R2                  S-  U l        g)zWCreate the full matrix `self.fullmat` and
the corresponding band matrix `self.bandmat`.
   rQ         ?ra         r          r   rP         r;  Nr   r         ?      ?)KLKUr5   r6   sym_matherm_matreal_matcomp_matr7   r
   realr8   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr9   r   bandmat_symr   bandmat_hermr   bandmat_realbandmat_compr:   r   bc)r|   NewevargsLDABr   s          r]   rV  TestEigBanded.create_bandmat  s     T!S\*tAaC346:4!T?A6NOtAaC346:4!T?A6NO
 d1dm,d4!S>2667d4!S>1556  QqS$45  QqS$3	4 d1cl+QqS$457;D1dOQ7OPQqS#346:4!T?A6NO
 Da..QqS$45d4!T?A667  QqS#34  QqS$3	4 DLL)WWr{q$wKDMM*WWr{(4[
 ww{ $%8!4)7;tA.24<<.CDTVAXqs]+/3DMM1/EDdfQhm,  y477"Q&!4)59*.t}}*=!DGG)Q,'twwA6:4==!A#6NDaik!mQqSU238<T]]>?RT9CDaik!mQqs1uW45	   "4)7;*.t}}*=!DGG)Q,'twwA6:4==!A#6NDaik!mQqSU238<T]]>?RT9CDaik!mQqs1uW45	   VAY&&F#r_   c                     [        U R                  SS9u  pnUSS2[        U5      4   n[        [	        U5      U R
                  5        [        [        U5      [        U R                  5      5        g)zICompare dsbev eigenvalues and eigenvectors with
the result of linalg.eig.ra   	compute_vN)r,   rl  r8   r   rA   rh  r   ri  r|   r~   evecinfoevec_s        r]   
test_dsbevTestEigBanded.test_dsbev  sW     d..!<Q
]#!$q'4>>:!#e*c$2C2C.DEr_   c                     [        U R                  SS9u  pnUSS2[        U5      4   n[        [	        U5      U R
                  5        [        [        U5      [        U R                  5      5        g)zJCompare dsbevd eigenvalues and eigenvectors with
the result of linalg.eig.ra   rx  N)r-   rl  r8   r   rA   rh  r   ri  rz  s        r]   test_dsbevdTestEigBanded.test_dsbevd  sW     t//1=Q
]#!$q'4>>:!#e*c$2C2C.DEr_   c           
          [        U R                  5      u    n[        U R                  SSSUSSS9u  p#pEnUSS2[	        U5      4   n[        [        U5      U R                  5        [        [        U5      [        U R                  5      5        g)zJCompare dsbevx eigenvalues and eigenvectors
with the result of linalg.eig.        ra   rQ   ry  r   N)
r@   rc  r.   rl  r8   r   rA   rh  r   ri  r|   rq  r~   r{  numifailr|  r}  s           r]   test_dsbevxTestEigBanded.test_dsbevx  sz     T\\"1$*4+;+;S#q!56a%A!TQ
]#!$q'4>>:!#e*c$2C2C.DEr_   c                     [        U R                  SS9u  pnUSS2[        U5      4   n[        [	        U5      U R
                  5        [        [        U5      [        U R                  5      5        g)zJCompare zhbevd eigenvalues and eigenvectors
with the result of linalg.eig.ra   rx  N)r/   rm  r8   r   rA   rj  r   rk  rz  s        r]   test_zhbevdTestEigBanded.test_zhbevd	  sW     t00A>Q
]#!$q'4??;!#e*c$2D2D.EFr_   c           
          [        U R                  5      u    n[        U R                  SSSUSSS9u  p#pEnUSS2[	        U5      4   n[        [        U5      U R                  5        [        [        U5      [        U R                  5      5        g)zJCompare zhbevx eigenvalues and eigenvectors
with the result of linalg.eig.r  ra   rQ   r  N)
r@   rd  r0   rm  r8   r   rA   rj  r   rk  r  s           r]   test_zhbevxTestEigBanded.test_zhbevx  sz     T]]#1$*4+<+<c3156a%A!TQ
]#!$q'4??;!#e*c$2D2D.EFr_   c                    [        U R                  5      nUR                  n[        [	        U5      U R
                  5        [        U R                  5      nUR                  n[        [	        U5      U R                  5        Sn[        R                  " S5      n[        U R                  SX44S9n[        [	        U5      U R
                  X4S-    5        [        U R                  SX44S9n[        [	        U5      U R                  X4S-    5        U R
                  U   S-
  nU R
                  U   S-   n[        U R                  SXx4S9n	[        [	        U	5      U R
                  X4S-    5        U R                  U   S-
  nU R                  U   S-   n[        U R                  SXx4S9n
[        [	        U
5      U R                  X4S-    5        [        U R                  SS	9nUR                  n[        [	        U5      U R
                  5        g
)z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rQ   rw   r   selectselect_rangera   h㈵>rl   Fr   N)
r   rl  rg  r   rA   rh  rm  rj  rS   longlong)r|   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_vals              r]   test_eigvals_banded!TestEigBanded.test_eigvals_banded  s   t//0

!$u+t~~> 1 12!$v,@ {{1~"4#3#3*-TLJ	!$y/"&..1f"=	?#D$5$5+.d\K
!$z"2"&//$Av">	@ ..&/..&/"4#3#3*-W<NP	!$y/"&..1f"=	? //$'&0//$'&0#D$5$5+.291CE
 	"$z"2"&//$Av">	@ t//eD

!$u+t~~>r_   c           
         [        U R                  5      u  pUSS2[        UR                  5      4   n[	        [        U5      U R                  5        [	        [        U5      [        U R                  5      5        [        U R                  5      u  pEUSS2[        UR                  5      4   n[	        [        U5      U R                  5        [	        [        U5      [        U R                  5      5        SnSn[        U R                  SXx4S9u  p[	        [        U	5      U R                  XxS-    5        [	        [        U
5      [        U R                  SS2XxS-   24   5      5        [        U R                  SXx4S9u  p[	        [        U5      U R                  XxS-    5        [	        [        U5      [        U R                  SS2XxS-   24   5      5        U R                  U   S-
  nU R                  U   S-   n[        U R                  SX4S9u  nn[	        [        U5      U R                  XxS-    5        [	        [        U5      [        U R                  SS2XxS-   24   5      5        U R                  U   S-
  nU R                  U   S-   n[        U R                  SX4S9u  nn[	        [        U5      U R                  XxS-    5        [	        [        U5      [        U R                  SS2XxS-   24   5      5        [        U R                  S	S
9u  pUSS2[        UR                  5      4   n[	        [        U5      U R                  5        [	        [        U5      [        U R                  5      5        g)zMCompare eigenvalues and eigenvectors of eig_banded
with those of linalg.eig. NrQ   rw   r   r  ra   r  rl   Fr   )r   rl  r8   rg  r   rA   rh  r   ri  rm  rj  rk  )r|   r  evec_sym	evec_sym_r  	evec_herm
evec_herm_r  r  r  evec_sym_indr  evec_herm_indr  r  r  evec_sym_valr  evec_herm_vals                      r]   test_eig_bandedTestEigBanded.test_eig_bandedF  s    %T%5%56Q

 334	!$u+t~~>!#i.#d6G6G2HI&t'8'89q'&++"667
!$v,@!#j/3t7I7I3JK ",T-=-=47;?,#H	 	"$y/"&..1f"=	?!#l"3"%d&7&74Q;&G"H	J %/t/@/@69=AL%J!
 	"$z"2"&//$Av">	@!#m"4"%d&8&8DaK&H"I	K ..&/..&/",T-=-=47;B:L#N	< 	"$y/"&..1f"=	?!#l"3"%d&7&74Q;&G"H	J //$'&0//$'&0$.t/@/@69=D<N%P!
M 	"$z"2"&//$Av">	@!#m"4"%d&8&8DaK&H"I	K %T%5%5EJQ

 334	!$u+t~~>!#i.#d6G6G2HIr_   c                    [        U R                  5      u  p[        U R                  U R                  U R
                  5      u  p4n[        USU R                  -  SS24   5      n[        U R                  U R
                  -   5       H2  nU[        USU R                  -  S-
  U-
  US-   U24   US-   5      -  nM4     [        U R                  SS9u  pn
[        Xj5        g)zOCompare dgbtrf  LU factorisation with the LU factorisation result
of linalg.lu.rQ   Nra   r   	permute_l)
r@   re  r(   rn  ra  rb  r5   r   r   r   r|   r  rq  lu_symm_bandipivr|  ur   p_linl_linu_lins              r]   test_dgbtrfTestEigBanded.test_dgbtrf       T]]##)$*;*;TWWdgg#N D ail+,tww()Al1TWW9Q;q=!A#a%#78!A#>>A * !!<e!!+r_   c                    [        U R                  5      u  p[        U R                  U R                  U R
                  5      u  p4n[        USU R                  -  SS24   5      n[        U R                  U R
                  -   5       H2  nU[        USU R                  -  S-
  U-
  US-   U24   US-   5      -  nM4     [        U R                  SS9u  pn
[        Xj5        g)zOCompare zgbtrf  LU factorisation with the LU factorisation result
of linalg.lu.rQ   Nra   r   r  )
r@   rf  r*   ro  ra  rb  r5   r   r   r   r  s              r]   test_zgbtrfTestEigBanded.test_zgbtrf  r  r_   c                 (   [        U R                  U R                  U R                  5      u  pn[	        XR                  U R                  U R
                  U5      u  pC[        R                  " U R                  U R
                  5      n[        XE5        g)z]Compare dgbtrs  solutions for linear equation system  A*x = b
with solutions of linalg.solve.N)
r(   rn  ra  rb  r)   r   r7   r   re  r   r|   r  r  r|  yy_lins         r]   test_dgbtrsTestEigBanded.test_dgbtrs  sc     $*$*;*;TWWdgg#N DwwFT]]DFF3!!+r_   c                 (   [        U R                  U R                  U R                  5      u  pn[	        XR                  U R                  U R
                  U5      u  pC[        R                  " U R                  U R
                  5      n[        XE5        g)z]Compare zgbtrs  solutions for linear equation system  A*x = b
with solutions of linalg.solve.N)
r*   ro  ra  rb  r+   rp  r7   r   rf  r   r  s         r]   test_zgbtrsTestEigBanded.test_zgbtrs  sc     $*$*;*;TWWdgg#N Dww$GT]]DGG4!!+r_   r   c                    [         R                  " SUS9n[        U5      u  p4[        [         R                  " SS/SS//US95      u  pVUR                  S:X  d   eUR
                  UR
                  :X  d   eUR                  S:X  d   eUR
                  UR
                  :X  d   e[        USS9nUR                  S:X  d   eUR
                  UR
                  :X  d   eg )Nr   r   r   ra   r   Teigvals_only)rS   r   r   r4   r@   r[   )r|   r   a_bandr~   rl   rN  v_ns          r]   r   TestEigBanded.test_empty  s    &+&!bhhAA'7rBCww$ww#))###ww&   ww#))###vD1ww$ww#))###r_   )ra  rb  r   ro  rm  rn  rl  rp  rf  rk  ri  rd  re  rc  rj  rh  N)r   r   r   r   rX  rV  r~  r  r  r  r  r  r  r  r  r  r  r   r   r   rd   r   rS   r;   r   r<   r   r   r   r_   r]   rS  rS    s    M$bFF	FG	G(?T8Jt,,,, [[TC

GR\\#RS$ T$r_   rS  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestEigTridiagonali  c                 $    U R                  5         g rU  )create_trimatrW  s    r]   rX  TestEigTridiagonal.setup_method  s    r_   c                    Sn[        US5      U l        [        US-
  S5      U l        [        U R                  5      [        U R                  S5      -   [        U R                  S5      -   U l        [
        R                  " U R                  5      u  p#UR                  n[        U5      nX$   U l	        USS2U4   U l
        g)z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r[  r\  ra   r]  r   N)r6   rk   er5   full_matr7   r
   rg  r8   r~   r{  )r|   rq  rr  rs  rt  s        r]   r   TestEigTridiagonal.create_trimat  s     aac4dffTVVR(884?JDMM*WWr{q$wK	r_   c           	         [        [        [        U R                  U R                  SS 5        [        [
        [        U R                  U R                  S-  5        [        [
        [        U R                  U R                  SS9  [        [        [        U R                  U R                  SS9  [        [        [        U R                  U R                  SSS	9  g)
zTest error conditions.Nr   rP   r\  lapack_driverfoor   r   r   r  )r/  r0  r#   rk   r  rf   rW  s    r]   test_degenerate"TestEigTridiagonal.test_degenerate  s     	j"6sLi!5tvvtvv{Ki!5tvvtvv$&	(j"6$)	+ 	j"6 w	8r_   c                 (   S HA  n[        U R                  U R                  US9n[        [	        U5      U R
                  5        MC     S H.  n[        [        [         U R                  U R                  USSS9  M0     S GH  n[        U R                  U R                  SS[        U R                  5      S	-
  4US
9n[        [	        U5      U R
                  5        SnSn[        U R                  U R                  SXE4US
9n[        [	        U5      U R
                  XES	-    5        U R
                  U   S-
  nU R
                  U   S-   n[        U R                  U R                  SXg4US
9n[        [	        U5      U R
                  XES	-    5        GM     g)z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautor  )r  r  r   r   r  r  r  r  r  r  r   ra   r  r  r  rQ   rw   r  rl   N)	r#   rk   r  r   rA   r~   r/  r0  re   )	r|   driverr~   w_indr  r  r  r  w_vals	            r]   test_eigvalsh_tridiagonal,TestEigTridiagonal.test_eigvalsh_tridiagonal  sa    BF$TVVTVV6JA%d1gtvv6 B (F*&:DFFDFF(.s'-/ ( 1F(s!S[]9K$&E &d5k466: DD(s$$&E &d5k466$Av3FG ffTlV+GffTlV+G(s'9K$&E &d5k466$Av3FG+ 1r_   c                    [        [        [        U R                  U R                  SS9  S H}  n[        U R                  U R                  US9u  p#USS2[        U5      4   n[        [        U5      U R                  5        [        [        U5      [        U R                  5      5        M     [        [        [        U R                  U R                  SSSS9  S	 GH  nS
n[        U R                  5      S-
  n[        U R                  U R                  SXV4US9u  p#[        [        U5      U R                  5        [        [        U5      [        U R                  5      5        SnSn[        U R                  U R                  SXV4US9u  p#[        [        U5      U R                  XVS-    5        [        [        U5      [        U R                  SS2XVS-   24   5      5        U R                  U   S-
  nU R                  U   S-   n[        U R                  U R                  SXx4US9u  p#[        [        U5      U R                  XVS-    5        [        [        U5      [        U R                  SS2XVS-   24   5      5        GM     g)zLCompare eigenvalues and eigenvectors of eigh_tridiagonal
with those of eig. r  r  )r  r  r  r  Nr  r   r   r  r  r   ra   r  rQ   rw   r  rl   )r/  r0  r$   rk   r  r8   r   rA   r~   r   r{  re   )	r|   r  r~   r{  r}  r  r  r  r  s	            r]   test_eigh_tridiagonal(TestEigTridiagonal.test_eigh_tridiagonal  s    	j"2DFFDFF$+	-8F&tvvtvvVLGAGAJ'E%d1gtvv6%c%j#dii.A	 9 	j"2DFFDFF$*3V	M0FDtvv;q=D&s$$&GA &d1gtvv6%c$iTYY@DD&s$$&GA &d1gtvvd6/BC%c$i&)$))AtF{N*C&DF ffTlV+GffTlV+G&s'9K$&GA &d1gtvvd6/BC%c$i&)$))AtF{N*C&DF3 1r_   c                    [         R                  " S/5      n[         R                  " / 5      n[        XSS9nUR                  S:X  d   e[	        X15        [        XSSS9u  p4UR                  S:X  d   eUR                  S:X  d   e[	        X15        [	        U[        S	//5      5        [        XS
SS9u  p4UR
                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eg)zSee gh-20075r^  Tr  ra   r   r   r  rQ   r\  rl   )r   r   r   r   r   N)rS   r4   r$   ndimr   r   r@   )r|   r}   r   xrI  s        r]   test_eigh_tridiagonal_1x1,TestEigTridiagonal.test_eigh_tridiagonal_1x1/  s    HHdVHHRLQ5vv{{SvFvv{{vv{{52$=)SwGvv{{ww$ww&   r_   )rk   r  r{  r  r~   N)r   r   r   r   rX  r  r  r  r  r  r   r   r_   r]   r  r    s$     8 HD(FT!r_   r  c                      \ rS rSrS rS rS rS rS rS r	\
R                  R                  S\5      \
R                  R                  S	S
5      S 5       5       r\
R                  R                  S	S
5      S 5       r\
R                  R                  SS5      \
R                  R                  S	S5      S 5       5       rS r\
R                  R                  S\\\R*                  \\R.                  /5      S 5       rSrg)TestEighiB  c                 B    [         R                  R                  S5        g )Nr&  )rS   rT   seedrW  s    r]   setup_classTestEigh.setup_classC  s    
		tr_   c           	         [        [        [        [        R                  " SS/5      5        [        [        [        [        R                  " SS/5      [        R                  " SS/5      5        [        [        [        [        R                  " SS/5      [        R                  " SS/5      5        [        [        [        [        R                  " SS/5      [        R                  " SS/5      SS9  [        [        [        [        R                  " SS/5      [        R                  " SS/5      SS/SS/S9  [        [        [        [        R                  " SS/5      [        R                  " SS/5      SS/S9  [        [        [        [        R                  " SS/5      [        R                  " SS/5      S	S/S9  [        [        [        [        R                  " SS/5      [        R                  " SS/5      SS/S9  [        [        [        [        R                  " SS/5      [        R                  " SS/5      SS/S
9  [        [        [        [        R                  " SS/5      SS9  [        [        [        [        R                  " SS/5      S SS9  [        [        [        [        R                  " SS/5      [        R                  " SS/5      SS9  [        [        [        [        R                  " SS/5      [        R                  " SS/5      SSS/S9  [        [        [        [        R                  " SS/5      [        R                  " SS/5      SSS/S9  g )Nra   rQ   rt      )type)subset_by_valuesubset_by_indexr   r  r   r  wrongr  gvxevrgvd)r  r  )r/  r0  r   rS   r   rW  s    r]   test_wrong_inputsTestEigh.test_wrong_inputsF  sT   j$A8j$A!QIj$A!QIj$A!Q	 	j$A!Q'(!fq!f	F 	j$A!Q'(!f	. 	j$A!Q')1g	/ 	j$A!Q'(!f	. 	j$A!Q'(!f	. 	j$AHj$AeLj$A!Q"	$ 	j$A!Q"QF	<j$A!Q"QF	<r_   c           	          [        [        [        [        R                  " SS/5      [        R                  " SS/5      5        g )Nrt   )r/  r'   r   rS   r   rW  s    r]   test_nonpositive_bTestEigh.test_nonpositive_bl  s(    k4!Q"''1a&/Jr_   c                    [        [        5       H  u  p[        SUS9n[        USS/S9u  pE[	        UR
                  S   [        U5      5        [        US:  US:  -  5      (       d   e[        SSUS9n[        X6SS/S9u  pE[	        UR
                  S   [        U5      5        [        US:  US:  -  5      (       a  M   e   g )	N   r   r   rQ   r  ra   T)rZ   r[   )	enumerateDTYPESr^   r   r   r@   re   r   )r|   indr   r}   r~   rl   r   s          r]   test_value_subsetsTestEigh.test_value_subsetsp  s     (GC(26AB73DASV,B1q5)****(DCAr1g6DASV,B1q5)**** )r_   c                 |    [        SS/SS//5      n[        SS/SS//5      n[        U5      u  p4[        X5      u  p4g )Nra   rQ      rt   rv   )r4   r   )r|   r}   r   r~   zs        r]   test_eigh_integerTestEigh.test_eigh_integer}  sH    Aq6Aq6"#Aq6Aq6"#AwAz1r_   c                     SS K nUR                  R                  S5      R                  5       n[        R
                  " U5      n[        [        [        U5        [        [        [        U5        g )Nr   rQ   )	scipy.sparsesparseidentitytocscrS   
atleast_2dr/  r0  r   )r|   scipyr}   r   s       r]   test_eigh_of_sparseTestEigh.test_eigh_of_sparse  sH    LL!!!$**,MM!j$*j$*r_   dtype_r  )rs  evdr  evxc                     [        SUS9n[        X1S9u  pE[        X5-  XT-  -
  SS[        R                  " U5      R
                  -  SS9  g )Nr  )rY   r[   r  r    r   r   )r^   r   r   rS   finfoeps)r|   r  r  r}   r~   rl   s         r]   test_various_drivers_standard&TestEigh.test_various_drivers_standard  sJ     %r8A%!"((6"2"6"66	!r_   c                     [        S//US9u  p#[        U[        S/5      SS9  [        U[        S//5      SS9  [        S//US9u  p#[        U[        S/5      SS9  [        U[        S//5      SS9  g )Nra   r  r\  V瞯<rA  rP   r   )r   r   r4   )r|   r  r~   rl   s       r]   test_1x1_lworkTestEigh.test_1x1_lwork  st    aSE&)5";U352$=u5 bTF6*5!:E252$=u5r_   r  rs   )gvr  r  c                    [         R                  " S5      n[        S5      n[        SSS9n[        XEXS9u  pgUS:X  a  [	        XG-  XeU-  -  -
  SUSS9  g US	:X  a  [	        XE-  U-  Xv-  -
  SUSS9  g [	        XT-  U-  Xv-  -
  SUSS9  g )
Ng     @r  T)rZ   )r}   r   r  r  ra   r  r$  rQ   )rS   spacingr^   r   r   )r|   r  r  r   r}   r   r~   rl   s           r]    test_various_drivers_generalized)TestEigh.test_various_drivers_generalized  s     zz% $R($R5aV719AEA1uI-r2FQYAEAI-r2FAEAI-r2Fr_   c                 j   [        S5      n[        USS/S9n[        [        U5      S5        [        USS/S9n[        [        U5      S5        [	        X#5        [
        R                  " / SQ5      n[        USS/S9n[        [        U5      S5        [	        U[
        R                  " SS	/5      5        g )
Nrv   ra   rQ   r  )ra   333333??      ?rQ   gffffff?r  r3  r4  )r^   r   r   re   r   rS   r5   r4   )r|   r}   r~   w2r   w3s         r]   test_eigvalsh_new_argsTestEigh.test_eigvalsh_new_args  s    $Q'QA/SVQa!Q0SWa GG)*a!S2SWa BHHc3Z01r_   r   c                    [         R                  " SUS9n[        U5      u  p4[        [         R                  " SUS95      u  pVUR                  S:X  d   eUR
                  UR
                  :X  d   eUR                  S:X  d   eUR
                  UR
                  :X  d   e[        USS9n[        U[         R                  " S5      5        UR                  S:X  d   eUR
                  UR
                  :X  d   eg )Nr   r   rQ   r   Tr  )rS   r   r   rF   r@   r[   r   )r|   r   r}   r~   rl   rN  r  s          r]   r   TestEigh.test_empty  s    HHV2&Awq+,ww$ww#))###ww&   ww#))###&288D>*ww$ww#))###r_   r   N)r   r   r   r   r  r  r  r  r  r  r   r   r   r  r'  r+  r0  r8  rd   r   rS   r;   r   r<   r   r   r   r_   r]   r  r  B  s   $<LK++ [[Xv.[[X'BC! D /! [[X'BC6 D6 [[VY/[[X';<
G = 0
G2 [[TC

GR\\#RS$ T$r_   r  c                   V   \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS r\R"                  R%                  \(       + SS9\R"                  R(                  S 5       5       r\R"                  R-                  S/ SQ5      \R"                  R-                  S/ SQ5      \R"                  R-                  S\5      S 5       5       5       r\R"                  R-                  S\\\R8                  \\R<                  /5      \R"                  R-                  S/ SQ5      S 5       5       rSr g)TestSVD_GESDDi  gesddc                 \    [        [        [        S//SS9  [        [        [        S//SS9  g )Nr\  r  r  )r/  rf   r   r0  rW  s    r]   r  TestSVD_GESDD.test_degenerate  s&    itfB?j#vUCr_   c                    / SQ/ SQ/ SQ/nS H  n[        XU R                  S9u  p4n[        UR                  U-  [	        S5      5        [        UR                  U-  [	        S5      5        [        UR                  S   UR                  S   4UR                  R                  5      n[        [        U5      5       H  nXG   XgU4'   M     [        X6-  U-  U5        M     g )Nrs   ra   r  rt   ru   TFfull_matricesr  rt   r   r   r  r   rW   rF   r9   r@   r[   charr   re   r|   r}   rE  r  svhsigmar   s           r]   r   TestSVD_GESDD.test_simple  s    
I.*M1)-););=HA"%accAgs1v6%bddRiQ81771:rxx{3QWW\\BE3q6]dd #%ai"na8 +r_   c                    / SQ/ SQ/ SQ/nS H  n[        XU R                  S9u  p4n[        UR                  U-  [	        S5      5        [        UR                  U-  [	        S5      5        [        UR                  S   UR                  S   4UR                  R                  5      n[        [        U5      5       H  nXG   XgU4'   M     [        X6-  U-  U5        M     g )Nrs   ru   rC  rD  rt   r   rF  rH  s           r]   test_simple_singular"TestSVD_GESDD.test_simple_singular  s    	9-*M1)-););=HA"%accAgs1v6%bddRiQ81771:rxx{3QWW\\BE3q6]dd #%ai"na8 +r_   c                    / SQ/ SQ/nS H  n[        XU R                  S9u  p4n[        UR                  U-  [	        UR
                  S   5      5        [        UR
                  S   UR
                  S   4UR                  R                  5      n[        [        U5      5       H  nXG   XgU4'   M     [        X6-  U-  U5        M     g )Nrs   r  rv   rw   rC  rD  r   r   r  r   rW   rF   r@   r9   r[   rG  r   re   rH  s           r]   test_simple_underdet"TestSVD_GESDD.test_simple_underdet  s    	"*M1)-););=HA"%accAgs1771:?1771:rxx{3QWW\\BE3q6]dd #%ai"na8 +r_   c                    SS/SS/SS//nS H  n[        XU R                  S9u  p4n[        UR                  U-  [	        UR
                  S   5      5        [        UR                  U-  [	        S5      5        [        UR
                  S   UR
                  S   4UR                  R                  5      n[        [        U5      5       H  nXG   XgU4'   M     [        X6-  U-  U5        M     g )	Nra   rQ   r  rv   rt   rC  rD  r   rR  rH  s           r]   test_simple_overdet!TestSVD_GESDD.test_simple_overdet  s    VaVaV$*M1)-););=HA"%accAgs1771:?%bddRiQ81771:rxx{3QWW\\BE3q6]dd #%ai"na8 +r_   c           
         [         R                  R                  S5      nSnSn[        S5       GH  nUR                  X#/5      UR                  X2/5      4 H  nS H  n[	        XVU R
                  S9u  pxn	[        UR                  U-  [        UR                  S   5      5        [        XR                  -  [        U	R                  S   5      5        [        UR                  S   U	R                  S   4UR                  R                  5      n
[        [        U5      5       H  nX   XU4'   M     [        Xz-  U	-  U5        M     M     GM     g )	Nr&  r  r   rt   rC  rD  ra   r   )rS   rT   r'  r   r   r  r   rW   rF   r@   r9   r[   rG  re   )r|   ri   rY   mr   r}   rE  r  rI  rJ  rK  s              r]   test_randomTestSVD_GESDD.test_random  s
   ii##D)qAjj!(#**aV*<=%2M"1151C1C EHA"-accAgs1771:G-b44iRXXa[9IJ!1771:rxx{";QWW\\JE"3q6]&'dd +-ai"na@ &3 > r_   c                 2   / SQ/ SQ/ SQ/nS GH  n[        XU R                  S9u  p4n[        UR                  5       R                  U-  [        UR                  S   5      5        [        UR                  5       R                  U-  [        UR                  S   5      5        [        UR                  S   UR                  S   4UR                  R                  5      n[        [        U5      5       H  nXG   XgU4'   M     [        X6-  U-  U5        GM     g )Nrs   )ra   y               @rt   ru   rC  rD  ra   r   )r   r  r   rV   rW   rF   r@   r9   r[   rG  r   re   rH  s           r]   r   !TestSVD_GESDD.test_simple_complex  s    
I.*M1)-););=HA"%affhjj1nc!''!*oF%bggikkB&6BHHQK8HI1771:rxx{3QWW\\BE3q6]dd #%ai"na8 +r_   c           
         [         R                  R                  S5      nSnSn[        S5       GH(  nS GH  nUR                  X#/5      UR                  X2/5      4 H  nUSUR                  [	        UR
                  5      5      -  -   n[        XeU R                  S9u  pxn	[        UR                  5       R                  U-  [        UR
                  S   5      5        [        UR
                  S   U	R
                  S	   4UR                  R                  5      n
[        [        U5      5       H  nX   XU4'   M     [        Xz-  U	-  U5        M     GM      GM+     g )
Nr&  r  r   rt   rC  rP   rD  ra   r   )rS   rT   r'  r   listr@   r   r  r   rV   rW   rF   r9   r[   rG  re   )r|   ri   rY   rY  r   rE  r}   r  rI  rJ  rK  s              r]   test_random_complex!TestSVD_GESDD.test_random_complex   s   ii##D)qA!.**aV,cjj!.@AABszz$qww-888A"1151C1C EHA"-affhjj1n.1!''!*o?
 "1771:rxx{";QWW\\JE"3q6]&'dd +-ai"na@ B "/ r_   c                 H   [         R                  R                  S5      n/ SQnU Hy  n[         R                  [         R                  [         R
                  [         R                  4 H4  nUR                  " U6 R                  U5      n[        XPR                  S9  M6     M{     g )Nr&  ))r   r  )r   2   )<   r   r  )rS   rT   r'  r;   r:  r<   
complex128rU   rX   r   r  )r|   ri   sizesszr   r}   s         r]   test_crash_1580TestSVD_GESDD.test_crash_15804  so    ii##D)/Bzz2::r||R]]KHHbM((,A%7%78 L r_   c                    / SQ/ SQ/ SQ/n[        USU R                  S9u  p#n[        UR                  U-  [	        S5      5        [        UR                  U-  [	        S5      5        [        UR                  S   UR                  S   4UR                  R                  5      n[        [        U5      5       H  nX6   XVU4'   M     [        X%-  U-  U5        g )Nrs   rB  ru   F)r   r  rt   r   rF  )r|   r}   r  rI  rJ  rK  r   s          r]   r+  TestSVD_GESDD.test_check_finite=  s    
I.quD<N<NOb!!##'3q62!"$$)SV4qwwqz288A;/>s1vA$EQ$K !!)b.!4r_   c                 n    [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[        XR                  S9  g )N)K}\UU?vWUU?rm  r  r  r  )r  rm  rn  rm  r  r  )r  r  rm  rn  rm  r  )r  r  r  rm  rn  rm  r  )rS   r4   r   r  )r|   r   s     r]   test_gh_5039TestSVD_GESDD.test_gh_5039G  s4     HH====?@
 	A//0r_   z64-bit LAPACK requiredreasonc                     [        SS9  [        R                  " SS/[        R                  S9nSUS'   [	        USS9u  p#n[        US	   S
5        [        US   US   -  S
5        g )NihB  )free_mbra   l        r   r  FrE  r   r\  r   )rI   rS   r9   r;   r   r   )r|   r\   r  rI  rJ  s        r]   test_large_matrixTestSVD_GESDD.test_large_matrixX  sb     	%(HHaZrzz2%q.b!c"$"U)+S1r_   rY  r   ra   rQ   rY   r[   c                    [         R                  " X4US9n[        X5      nUR                  R                  nUS;   a  UR                  5       OUn[        U5      u  pn
[        UR                  X45        [        UR                  U5        [        U	R                  U45        [        U	R                  [         R                  " U5      5        [        U
R                  X"45        [        U
R                  U5        [        USS9u  pn
[        UR                  X45        [        UR                  U5        [        U	R                  U45        [        U	R                  [         R                  " U5      5        [        U
R                  XR45        [        U
R                  U5        [        USS9n	[        U	R                  U45        [        U	R                  [         R                  " U5      5        g )Nr   FDFru  
compute_uv)	rS   r9   minr[   rG  lowerr   r   r@   )r|   rY  rY   r[   r}   r"  dchar
real_dcharr  rI  rl   s              r]   test_shape_dtypeTestSVD_GESDD.test_shape_dtypeb  sU    HHaV5)I&+tmU[[]
a&aQWWqf%QWWe$QWWqd#QWWbhhz23QWWqf%QWWe$au-aQWWqf%QWWe$QWWqd#QWWbhhz23QWWqf%QWWe$e$QWWqd#QWWbhhz23r_   r   rY  rY   r   r   r   c                    [         R                  " SUS9n[        U5      u  pVn[         R                  " X#4US9n[        U5      u  pn[	        U	[         R
                  " U5      5        [	        U
[         R                  " S5      5        [	        U[         R
                  " U5      5        U	R                  UR                  :X  d   eUR                  UR                  :X  d   eU
R                  UR                  :X  d   e[        USS9u  pn[	        U	[         R                  " US45      5        [	        U
[         R                  " S5      5        [	        U[         R                  " SU45      5        U	R                  UR                  :X  d   eUR                  UR                  :X  d   eU
R                  UR                  :X  d   e[        USS9n
[	        U
[         R                  " S5      5        U
R                  UR                  :X  d   eg )Nrt   r   r   Fru  r   r{  )rS   rF   r   r   r   r  r[   )r|   r   rY  rY   a0u0s0r   r}   r  rI  rl   s               r]   r   TestSVD_GESDD.test_empty  s~    VVAR W
HHaV2&a&a2;;q>*288D>*2;;q>*ww"(("""ww"(("""ww"(("""au-a288QF+,288D>*288QF+,ww"(("""ww"(("""ww"(("""e$288D>*ww"(("""r_   r   N)!r   r   r   r   r  r  r   rN  rS  rV  rZ  r   r`  rh  r+  ro  r   r   skipifrJ   slowrv  r   r  r  rd   r   rS   r;   r   r<   r   r   r   r_   r]   r=  r=    s*   MD
9
9	9
9A 
9A(951" [[I.FG[[2  H2 [[S),[[S),[[Wf-4 . - -44 [[TC

GR\\#RS[[Z)AB# C T#r_   r=  c                       \ rS rSrSrSrg)TestSVD_GESVDi  gesvdr   N)r   r   r   r   r  r   r   r_   r]   r  r    s    Mr_   r  zout of memory in WASMrq  r[  c                      [         R                  " S[         R                  S9n [        [        5         [        U 5        S S S 5        g ! , (       d  f       g = f)N)i  i  r   )rS   r   r:  r/  r0  r   )dfs    r]   test_svd_gesdd_nofegfaultr    s3    
 
ww}BJJ/B	z	"B 
#	"	"s   A
Ac                       \ rS rSr\R
                  R                  S\\\	R                  \\	R                  /5      S 5       rS rS rS rS rS rS	 rS
 r\R
                  R*                  S 5       rSrg)TestSVDValsi  r   c                 `   / /[         R                  " S5      [         R                  " S5      4 H|  n[         R                  " X!S9n[	        U5      n[        U[         R                  " S5      5        [	        [         R                  " SUS95      nUR                  UR                  :X  a  M|   e   g )Nr   r   rt   r   r   rQ   )rS   r   r   r4   r   r   rF   r[   )r|   r   r}   rI  r  s        r]   r   TestSVDVals.test_empty  sz    rxx'8A%A
ABHHQK(,-B77bhh&&& 9r_   c                     / SQ/ SQ/ SQ/n[        U5      n[        [        U5      S:H  5        [        US   US   s=:  =(       a    US   :  5        g s  5        g )Nrs   ru   rt   r   ra   rQ   r   r   re   r|   r}   rI  s      r]   r   TestSVDVals.test_simple  sN    	9-AJA!!!$$!$%$%r_   c                     / SQ/ SQ/n[        U5      n[        [        U5      S:H  5        [        US   US   :  5        g )Nrs   rQ  rQ   r   ra   r  r  s      r]   rS   TestSVDVals.test_simple_underdet  s9    	"AJA!!!r_   c                     SS/SS/SS//n[        U5      n[        [        U5      S:H  5        [        US   US   :  5        g )Nra   rQ   r  rv   rt   r   r  r  s      r]   rV  TestSVDVals.test_simple_overdet  sG    VaVaV$AJA!!!r_   c                     / SQ/ SQ/ SQ/n[        U5      n[        [        U5      S:H  5        [        US   US   s=:  =(       a    US   :  5        g s  5        g )Nrs   )ra   r                @ru   rt   r   ra   rQ   r  r  s      r]   r   TestSVDVals.test_simple_complex  sN    Y/AJA!!!$$!$%$%r_   c                     / SQ/ SQ/n[        U5      n[        [        U5      S:H  5        [        US   US   :  5        g )Nrs   )r  y              @rw   rQ   r   ra   r  r  s      r]   test_simple_underdet_complex(TestSVDVals.test_simple_underdet_complex  s9    
#AJA!!!r_   c                     SS/SS/SS//n[        U5      n[        [        U5      S:H  5        [        US   US   :  5        g )Nra   rQ   r  rv   r  r   r  r  s      r]   test_simple_overdet_complex'TestSVDVals.test_simple_overdet_complex  sG    VaVb!W%AJA!!!r_   c                     / SQ/ SQ/ SQ/n[        USS9n[        [        U5      S:H  5        [        US   US   s=:  =(       a    US   :  5        g s  5        g )	Nrs   ru   Fr   rt   r   ra   rQ   r  r  s      r]   r+  TestSVDVals.test_check_finite  sQ    	9-AE*A!!!$$!$%$%r_   c                     [         R                  R                  S5        [         R                  R                  SS5      n[	        U5        g )Nr&  i  i
  )rS   rT   r  rU   r   r|   r}   s     r]   test_crash_2609TestSVDVals.test_crash_2609  s-    
		tIINN4&
r_   r   N)r   r   r   r   r   r   r   rd   r   rS   r;   r   r<   r   r   rS  rV  r   r  r  r+  r  r  r   r   r_   r]   r  r    sz    [[TC

GR\\#RS' T'&&& [[ r_   r  c                       \ rS rSrS rSrg)TestDiagSVDi  c                 H    [        [        / SQSS5      / SQ/ SQ/ SQ/5        g )Nra   r   r   rt   r  )r   r   rW  s    r]   r   TestDiagSVD.test_simple  s     !')Q":#,i"C	Er_   r   N)r   r   r   r   r   r   r   r_   r]   r  r    s    Er_   r  c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7\8Rr                  Ru                  S6/ S7Q5      \8Rr                  Ru                  S8/ S7Q5      \8Rr                  Ru                  S9S:S;/5      \8Rr                  Ru                  S<\;5      S= 5       5       5       5       r<\8Rr                  Ru                  S>/ S?Q5      S@ 5       r=SA r>SBr?gC)DTestQRi  c                     / SQ/ SQ/ SQ/n[        U5      u  p#[        UR                  U-  [        S5      5        [        X#-  U5        g N   rQ   rt   rQ   rx   rt   rv   rt   rw   rt   r   r   rW   rF   r|   r}   qrs       r]   r   TestQR.test_simple  s;    	9-!u!!##'3q62!!%+r_   c                     / SQ/ SQ/ SQ/n[        U5      u  p#/ SQn[        XS5      u  pV[        X$-  U5        [        X65        [        U[        S5      S5      u  pV[        X%5        g )Nr  r  r  rs   r   rt   r   r   r   rF   r|   r}   r  r  cqcr2s          r]   test_simple_leftTestQR.test_simple_left  s\    	9-!uQ6*!!%,!!(QA/!!(r_   c                     / SQ/ SQ/ SQ/n[        U5      u  p#/ SQn[        X5      u  pV[        XB-  U5        [        X65        [        U[        S5      5      u  pS[        X%5        g )Nr  r  r  rs   rt   r  r  s          r]   test_simple_rightTestQR.test_simple_right  sX    	9-!uQ"!!%,!!(As1v&!!(r_   c                    [         R                  " / SQ/ SQ/ SQ/5      n[        USS9u  p#n[        [	        U5      5      n[        [         R                  " USS  US S :*  5      5        [        UR                  U-  [        S5      5        [        X#-  US S 2U4   5        [        US S 2U4   5      u  pg[        X&5        [        X75        g )	Nr  r  r  Tpivotingra   r   rt   
rS   rC   r   r   r5   r   r   r   rW   rF   r|   r}   r  r  prk   q2r  s           r]   test_simple_pivotingTestQR.test_simple_pivoting  s    JJ	9i89Q&aQLqu#2'(!!##'3q62!!%1a41AadG!!(!!(r_   c                 x    / SQ/ SQ/ SQ/n[        USS9u  p#n/ SQn[        XSS5      u  pcn[        X%-  U5        g )Nr  r  r  Tr  rs   r   r   r   r   r|   r}   r  r  jpvtr  r  s          r]   test_simple_left_pivoting TestQR.test_simple_left_pivoting  sA    	9-D)
d!!5t!!%,r_   c                 r    / SQ/ SQ/ SQ/n[        USS9u  p#n/ SQn[        XSS9u  pcn[        XR-  U5        g )Nr  r  r  Tr  rs   r  r  s          r]   test_simple_right_pivoting!TestQR.test_simple_right_pivoting  s?    	9-D)
d!!6t!!%,r_   c                     / SQ/ SQ/n[        U5      u  p#[        UR                  U-  [        S5      5        [        X#-  U5        g )Nr  r  rQ   r  r  s       r]   test_simple_trapTestQR.test_simple_trap&  9    	"!u!!##'3q62!!%+r_   c                    [         R                  " / SQ/ SQ/5      n[        USS9u  p#n[        [	        U5      5      n[        [         R                  " USS  US S :*  5      5        [        UR                  U-  [        S5      5        [        X#-  US S 2U4   5        [        US S 2U4   5      u  pg[        X&5        [        X75        g )Nr  r  Tr  ra   r   rQ   r  r  s           r]   test_simple_trap_pivoting TestQR.test_simple_trap_pivoting,  s    JJ	9-.Q&aQLqu#2'(!!##'3q62!!%1a41AadG!!(!!(r_   c                     SS/SS/SS//n[        U5      u  p#[        UR                  U-  [        S5      5        [        X#-  U5        g Nr  rQ   rx   rv   rt   r  r  s       r]   test_simple_tallTestQR.test_simple_tall7  sG    VaVaV$!u!!##'3q62!!%+r_   c                    [         R                  " SS/SS/SS//5      n[        USS9u  p#n[        [	        U5      5      n[        [         R                  " USS  US S	 :*  5      5        [        UR                  U-  [        S5      5        [        X#-  US S 2U4   5        [        US S 2U4   5      u  pg[        X&5        [        X75        g )
Nr  rQ   rx   rv   rt   Tr  ra   r   r  r  s           r]   test_simple_tall_pivoting TestQR.test_simple_tall_pivoting>  s    JJAAA/0Q&aQLqu#2'(!!##'3q62!!%1a41AadG!!(!!(r_   c                     SS/SS/SS//n[        USS9u  p#[        UR                  U-  [        S5      5        [        X#-  U5        [	        UR
                  S5        [	        UR
                  S	5        g )
Nr  rQ   rx   rv   rt   economicmodert   rQ   rQ   rQ   r   r   rW   rF   r   r@   r  s       r]   test_simple_tall_eTestQR.test_simple_tall_eJ  sf    VaVaV$!*%!!##'3q62!!%+QWWf%QWWf%r_   c                    [         R                  " SS/SS/SS//5      n[        USSS9u  p#n[        [	        U5      5      n[        [         R                  " US	S  US S
 :*  5      5        [        UR                  U-  [        S5      5        [        X#-  US S 2U4   5        [        US S 2U4   SS9u  pg[        X&5        [        X75        g )Nr  rQ   rx   rv   rt   Tr  r  r  ra   r   r  r  r  s           r]   test_simple_tall_e_pivoting"TestQR.test_simple_tall_e_pivotingS  s    JJAAA/0QJ7aQLqu#2'(!!##'3q62!!%1a41AadG*-!!(!!(r_   c                 $   SS/SS/SS//n[        USS9u  p#SS/n[        XS	5      u  pV[        X$-  U5        [        X65        [        / S
Q5      n[        XS	SS9u  pV[        X$S S -  U5        [        U[	        S5      S	5      u  pS[        XR5        g )Nr  rQ   rx   rv   rt   r  r  ra   r   ra   rQ   r   Toverwrite_cr   r   r   r4   rF   r  s          r]   test_simple_tall_leftTestQR.test_simple_tall_left_  s    VaVaV$!*%FQ6*!!%,!!()Q6t<!!e)R0As1vv.!"(r_   c                     SS/SS/SS//n[        USSS9u  p#nS	S/n[        XS
S5      u  pcn[        XG5        [        X%-  U5        [        U[	        S5      S
S5      u  pcn[        Xb5        g )Nr  rQ   rx   rv   rt   r  Tr  r  ra   r   )r   r   r   r   rF   )r|   r}   r  r  r  r  r  kpvts           r]   test_simple_tall_left_pivoting%TestQR.test_simple_tall_left_pivotingl  s{    VaVaV$
T:
dF!!5t4&!!%,!!SVVT:t!"(r_   c                     SS/SS/SS//n[        USS9u  p#/ SQn[        X5      u  pV[        XB-  U5        [        X65        [        U[        S5      5      u  pS[        XR5        g )	Nr  rQ   rx   rv   rt   r  r  rs   r  r|   r}   r  r  r  cqr  s          r]   test_simple_tall_rightTestQR.test_simple_tall_rightv  sg    VaVaV$!*%Q"!!%,!!(As1v&!"(r_   c                     SS/SS/SS//n[        USSS9u  p#n/ S	Qn[        XSS
9u  pcn[        XR-  U5        [        U[        S5      SS
9u  pcn[        Xb5        g )Nr  rQ   rx   rv   rt   Tr  r  rs   r  r  r|   r}   r  r  r  r  r  s          r]   test_simple_tall_right_pivoting&TestQR.test_simple_tall_right_pivoting  sk    VaVaV$Dz:
d!!6t!!%,!!SVd;t!"(r_   c                     / SQ/ SQ/n[        U5      u  p#[        UR                  U-  [        S5      5        [        X#-  U5        [	        UR
                  S5        [	        UR
                  S5        g )Nr  rQ   rv   r  rQ   r  rQ   rt   r  r  s       r]   test_simple_fatTestQR.test_simple_fat  sU    	"!u!!##'3q62!!%+QWWf%QWWf%r_   c                    [         R                  " / SQ/ SQ/5      n[        USS9u  p#n[        [	        U5      5      n[        [         R                  " USS  US S :*  5      5        [        UR                  U-  [        S5      5        [        X#-  US S 2U4   5        [        UR                  S5        [        UR                  S	5        [        US S 2U4   5      u  pg[        X&5        [        X75        g )
Nr  r  Tr  ra   r   rQ   r  r  rS   rC   r   r   r5   r   r   r   rW   rF   r   r@   r  s           r]   test_simple_fat_pivotingTestQR.test_simple_fat_pivoting  s    JJ	9-.Q&aQLqu#2'(!!##'3q62!!%1a41QWWf%QWWf%AadG!!(!!(r_   c                     / SQ/ SQ/n[        USS9u  p#[        UR                  U-  [        S5      5        [        X#-  U5        [	        UR
                  S5        [	        UR
                  S5        g )Nr  rQ   rx   rv   r  r  rQ   r  r  r  r  s       r]   test_simple_fat_eTestQR.test_simple_fat_e  sX    	"!*%!!##'3q62!!%+QWWf%QWWf%r_   c                    [         R                  " / SQ/ SQ/5      n[        USSS9u  p#n[        [	        U5      5      n[        [         R                  " USS  US S :*  5      5        [        UR                  U-  [        S5      5        [        X#-  US S 2U4   5        [        UR                  S	5        [        UR                  S
5        [        US S 2U4   SS9u  pg[        X&5        [        X75        g )Nr  r  Tr  r  ra   r   rQ   r  r  r  r  r  s           r]   test_simple_fat_e_pivoting!TestQR.test_simple_fat_e_pivoting  s    JJ	9-.QJ7aQLqu#2'(!!##'3q62!!%1a41QWWf%QWWf%AadG*-!!(!!(r_   c                     / SQ/ SQ/n[        USS9u  p#SS/n[        XS5      u  pV[        X$-  U5        [        X65        [        U[        S5      S5      u  pS[        XR5        g )Nr  r  r  r  ra   rQ   r   r  r  s          r]   test_simple_fat_leftTestQR.test_simple_fat_left  sa    	"!*%FQ6*!!%,!!(As1vv.!"(r_   c                     / SQ/ SQ/n[        USSS9u  p#nSS/n[        XSS5      u  pcn[        X%-  U5        [        U[        S5      SS5      u  pcn[        Xb5        g )	Nr  r  r  Tr   ra   rQ   r   r  r  s          r]   test_simple_fat_left_pivoting$TestQR.test_simple_fat_left_pivoting  se    	"
T:
dF!!5t!!%,!!SVVT:t!"(r_   c                     / SQ/ SQ/n[        USS9u  p#SS/n[        X5      u  pV[        XB-  U5        [        X65        [        U[        S5      5      u  pS[        XR5        g )Nr  r  r  r  ra   rQ   r  r  s          r]   test_simple_fat_rightTestQR.test_simple_fat_right  s]    	"!*%FQ"!!%,!!(As1v&!"(r_   c                     / SQ/ SQ/n[        USSS9u  p#nSS/n[        XSS9u  pcn[        XR-  U5        [        U[        S5      SS9u  pcn[        Xb5        g )	Nr  r  Tr  r  ra   rQ   r  r  r
  s          r]   test_simple_fat_right_pivoting%TestQR.test_simple_fat_right_pivoting  sa    	"Dz:
dF!!6t!!%,!!SVd;t!"(r_   c                     / SQ/ SQ/ SQ/n[        U5      u  p#[        UR                  5       R                  U-  [	        S5      5        [        X#-  U5        g Nrt         @      @rv   rv   rQ   y       @      @rt   rQ   r  rt   )r   r   rV   rW   rF   r  s       r]   r   TestQR.test_simple_complex  sA    <3!u!!&&(**q.#a&9!!%+r_   c                     / SQ/ SQ/ SQ/n[        U5      u  p#/ SQn[        XS5      u  pS[        X$-  U5        [        U[        S5      S5      u  pS[        X%5        g )Nr+  r-  r.  ra   rQ   r,  r   rt   r  r|   r}   r  r  r  r  s         r]   test_simple_complex_leftTestQR.test_simple_complex_left  sT    <3!uA&)!!%,As1vv.!!(r_   c                     / SQ/ SQ/ SQ/n[        U5      u  p#/ SQn[        X5      u  pS[        XB-  U5        [        U[        S5      5      u  pS[        X%5        g )Nr+  r-  r.  r1  rt   r  r2  s         r]   test_simple_complex_right TestQR.test_simple_complex_right  sP    <3!uA!!!%,As1v&!!(r_   c                 $   SS/SS/SS//n[        USS9u  p#S	S
/n[        XS5      u  pV[        X$-  U5        [        X65        [        / SQ5      n[        XSSS9u  pV[        X$S S -  U5        [        U[	        S5      S5      u  pS[        XR5        g )Nr  y       @      @rQ   rx   y      @      @rt   r  r  ra          @       @r   r  Tr  r  r  s          r]   test_simple_tall_complex_left$TestQR.test_simple_tall_complex_left  s    YAq	*!*%IQ6*!!%,!!()Q6t<!!e)R0As1vv.!"(r_   c                     / SQ/ SQ/ SQ/n[        U5      u  p#/ SQn[        XSSS9u  pS[        UR                  5       U-  U5        g )Nr+  r-  r.  r1  r   T	conjugater   r   r   rV   r2  s         r]   "test_simple_complex_left_conjugate)TestQR.test_simple_complex_left_conjugate  sB    <3!uA&D9!!&&(Q,3r_   c                     SS/SS/SS//n[        USS9u  p#SS/n[        XS	S
S9u  pS[        UR                  5       U-  U5        g )Nrt   r,  rv   r9  rQ   r  r  ra   r   Tr=  r?  r2  s         r]   'test_simple_complex_tall_left_conjugate.TestQR.test_simple_complex_tall_left_conjugate	  sU    YD	Aq6*!*%IA&D9!!&&(Q,3r_   c                     / SQ/ SQ/ SQ/n[        U5      u  p#[        R                  " / SQ5      n[        XSS9u  pS[	        XBR                  5       -  U5        g )Nr+  r-  r.  r1  Tr=  )r   rS   r4   r   r   rV   r2  s         r]   #test_simple_complex_right_conjugate*TestQR.test_simple_complex_right_conjugate  sG    <3!uHH\"AD1!!ffh,3r_   c                    [        / SQ/ SQ/ SQ/5      n[        USS9u  p#n[        [        U5      5      n[	        [
        R                  " USS  US S :*  5      5        [        UR                  5       R                  U-  [        S5      5        [        X#-  US S 2U4   5        [        US S 2U4   5      u  pg[        X&5        [        X75        g )	Nr+  r-  r.  Tr  ra   r   rt   )r4   r   r   r5   r   rS   r   r   rV   rW   rF   r  s           r]   test_simple_complex_pivoting#TestQR.test_simple_complex_pivoting  s    <y9:Q&aQLqu#2'(!!&&(**q.#a&9!!%1a41AadG!!(!!(r_   c                     [        / SQ/ SQ/ SQ/5      n[        USS9u  p#n/ SQn[        XSS5      u  pcn[        X%-  U5        g )Nr+  r-  r.  Tr  r1  r   r4   r   r   r   r  s          r]   !test_simple_complex_left_pivoting(TestQR.test_simple_complex_left_pivoting"  sF    <y9:D)
d!!5t!!%,r_   c                     [        / SQ/ SQ/ SQ/5      n[        USS9u  p#n/ SQn[        XSS9u  pcn[        XR-  U5        g )Nr+  r-  r.  Tr  r1  rL  r  s          r]   "test_simple_complex_right_pivoting)TestQR.test_simple_complex_right_pivoting)  sD    <y9:D)
d!!6t!!%,r_   c                    [         R                  R                  S5      nSn[        S5       HR  nUR                  X"/5      n[	        U5      u  pV[        UR                  U-  [        U5      5        [        XV-  U5        MT     g Nr&  r  rQ   rS   rT   r'  r   r   r   rW   rF   r|   ri   rY   r"  r}   r  r  s          r]   rZ  TestQR.test_random0  sf    ii##D)qA

A6"Aa5DA%accAgs1v6%aeQ/	 r_   c                 J   [         R                  R                  S5      nSn[        S5       Hs  nUR                  X"/5      n[	        U5      u  pVUR                  U/5      n[        XGS5      u  p[        XW-  U5        [        U[        U5      S5      u  p[        XX5        Mu     g )Nr&  r  rQ   r   rS   rT   r'  r   r   r   r   rF   	r|   ri   rY   r"  r}   r  r  r  r  s	            r]   test_random_leftTestQR.test_random_left9  s    ii##D)qA

A6"Aa5DA

A3Af-EB%aeR03q662EB%a, r_   c                 F   [         R                  R                  S5      nSn[        S5       Hq  nUR                  X"/5      n[	        U5      u  pVUR                  U/5      n[        XG5      u  p[        Xu-  U5        [        U[        U5      5      u  p[        XX5        Ms     g rS  rX  	r|   ri   rY   r"  r}   r  r  r  r  s	            r]   test_random_rightTestQR.test_random_rightE  s    ii##D)qA

A6"Aa5DA

A3A%EB%aeR03q6*EB%a, r_   c           	         [         R                  R                  S5      nSn[        S5       H  nUR                  X"/5      n[	        USS9u  pVn[        [        U5      5      n[        [         R                  " USS  US S :*  5      5        [        UR                  U-  [        U5      5        [        XV-  US S 2U4   5        [	        US S 2U4   5      u  p[        XY5        [        Xj5        M     g )Nr&  r  rQ   Tr  ra   r   rS   rT   r'  r   r   r   r5   r   r   r   rW   rF   r|   ri   rY   r"  r}   r  r  r  rk   r  r  s              r]   test_random_pivotingTestQR.test_random_pivotingQ  s    ii##D)qA

A6"AT*GA!DGABFF1QR5AcrF?+,%accAgs1v6%aeQq!tW5!Q$[FB%a,%a, r_   c                    [         R                  R                  S5      nSnSn[        S5       HR  nUR                  X#/5      n[	        U5      u  pg[        UR                  U-  [        U5      5        [        Xg-  U5        MT     g Nr&     r   rQ   rT  r|   ri   rY  rY   r"  r}   r  r  s           r]   test_random_tallTestQR.test_random_tall_  sk    ii##D)qA

A6"Aa5DA%accAgs1v6%aeQ/	 r_   c                 L   [         R                  R                  S5      nSnSn[        S5       Hr  nUR                  X#/5      n[	        USS9u  pgUR                  U/5      n[        XXS5      u  p[        Xh-  U	5        [        U[        U5      S5      u  p[        X5        Mt     g )Nr&  rg  r   rQ   r  r  r   rX  )
r|   ri   rY  rY   r"  r}   r  r  r  r  s
             r]   test_random_tall_leftTestQR.test_random_tall_leftj  s    ii##D)qA

A6"Aaj)DA

A3Af-EB%aeR03q662EB%b, r_   c                 H   [         R                  R                  S5      nSnSn[        S5       Hp  nUR                  X#/5      n[	        USS9u  pgUR                  U/5      n[        XX5      u  p[        X-  U	5        [        U[        U5      5      u  p[        X5        Mr     g Nr&  rg  r   rQ   r  r  rX  )
r|   ri   rY  rY   r"  r}   r  r  r  r  s
             r]   test_random_tall_rightTestQR.test_random_tall_rightx  s    ii##D)qA

A6"Aaj)DA

A3A%EB%aeR03q6*EB%b, r_   c           	         [         R                  R                  S5      nSnSn[        S5       H  nUR                  X#/5      n[	        USS9u  pgn[        [        U5      5      n	[        [         R                  " U	SS  U	S S :*  5      5        [        UR                  U-  [        U5      5        [        Xg-  US S 2U4   5        [	        US S 2U4   5      u  p[        Xj5        [        X{5        M     g )	Nr&  rg  r   rQ   Tr  ra   r   ra  r|   ri   rY  rY   r"  r}   r  r  r  rk   r  r  s               r]   test_random_tall_pivoting TestQR.test_random_tall_pivoting  s    ii##D)qA

A6"AT*GA!DGABFF1QR5AcrF?+,%accAgs1v6%aeQq!tW5!Q$[FB%a,%a, r_   c                 f   [         R                  R                  S5      nSnSn[        S5       H  nUR                  X#/5      n[	        USS9u  pg[        UR                  U-  [        U5      5        [        Xg-  U5        [        UR                  X#45        [        UR                  X345        M     g ro  )
rS   rT   r'  r   r   r   rW   rF   r   r@   rh  s           r]   test_random_tall_eTestQR.test_random_tall_e  s    ii##D)qA

A6"Aaj)DA%accAgs1v6%aeQ/1&)1&) r_   c           	      B   [         R                  R                  S5      nSnSn[        S5       H  nUR                  X#/5      n[	        USSS9u  pgn[        [        U5      5      n	[        [         R                  " U	SS  U	S S	 :*  5      5        [        UR                  U-  [        U5      5        [        Xg-  US S 2U4   5        [        UR                  X#45        [        UR                  X345        [	        US S 2U4   SS
9u  p[        Xj5        [        X{5        M     g )Nr&  rg  r   rQ   Tr  r  ra   r   r  )rS   rT   r'  r   r   r   r5   r   r   r   rW   rF   r   r@   rs  s               r]   test_random_tall_e_pivoting"TestQR.test_random_tall_e_pivoting  s    ii##D)qA

A6"AT
;GA!DGABFF1QR5AcrF?+,%accAgs1v6%aeQq!tW51&)1&)!Q$j1FB%a,%a, r_   c                    [         R                  R                  S5      nSnSn[        S5       HR  nUR                  X#/5      n[	        U5      u  pg[        UR                  U-  [        U5      5        [        Xg-  U5        MT     g Nr&  r   rg  rQ   rT  rh  s           r]   test_random_trapTestQR.test_random_trap  sk    ii##D)qA

A6"Aa5DA%accAgs1v6%aeQ/	 r_   c           	         [         R                  R                  S5      nSnSn[        S5       H  nUR                  X#/5      n[	        USS9u  pgn[        [        U5      5      n	[        [         R                  " U	SS  U	S S :*  5      5        [        UR                  U-  [        U5      5        [        Xg-  US S 2U4   5        [	        US S 2U4   5      u  p[        Xj5        [        X{5        M     g )	Nr&  r   rg  rQ   Tr  ra   r   ra  rs  s               r]   test_random_trap_pivoting TestQR.test_random_trap_pivoting  s    ii##D)qA

A6"AT*GA!DGABFF1QR5AcrF?+,%accAgs1v6%aeQq!tW5!Q$[FB%a,%a, r_   c                 P   [         R                  R                  S5      nSn[        S5       Hv  nUR                  X"/5      SUR                  X"/5      -  -   n[	        U5      u  pV[        UR                  5       R                  U-  [        U5      5        [        XV-  U5        Mx     g Nr&  r  rQ   rP   )	rS   rT   r'  r   r   r   rV   rW   rF   rU  s          r]   r`  TestQR.test_random_complex  s    ii##D)qA

A6"R

A6(:%::Aa5DA%affhjj1nc!f=%aeQ/	 r_   c                    [         R                  R                  S5      nSn[        S5       H  nUR                  X"/5      SUR                  X"/5      -  -   n[	        U5      u  pVUR                  U/5      SUR                  U/5      -  -   n[        XGS5      u  p[        XW-  U5        [        U[        U5      S5      u  p[        XX5        M     g )Nr&  r  rQ   rP   r   rX  rY  s	            r]   test_random_complex_leftTestQR.test_random_complex_left  s    ii##D)qA

A6"R

A6(:%::Aa5DA

A3"SZZ_"44Af-EB%aeR03q662EB%a, r_   c                    [         R                  R                  S5      nSn[        S5       H  nUR                  X"/5      SUR                  X"/5      -  -   n[	        U5      u  pVUR                  U/5      SUR                  U/5      -  -   n[        XG5      u  p[        Xu-  U5        [        U[        U5      5      u  p[        XX5        M     g r  rX  r]  s	            r]   test_random_complex_right TestQR.test_random_complex_right  s    ii##D)qA

A6"R

A6(:%::Aa5DA

A3"SZZ_"44A%EB%aeR03q6*EB%a, r_   c           	      *   [         R                  R                  S5      nSn[        S5       H  nUR                  X"/5      SUR                  X"/5      -  -   n[	        USS9u  pVn[        [        U5      5      n[        [         R                  " USS  US S :*  5      5        [        UR                  5       R                  U-  [        U5      5        [        XV-  US S 2U4   5        [	        US S 2U4   5      u  p[        XY5        [        Xj5        M     g )	Nr&  r  rQ   rP   Tr  ra   r   )rS   rT   r'  r   r   r   r5   r   r   r   rV   rW   rF   rb  s              r]   test_random_complex_pivoting#TestQR.test_random_complex_pivoting  s    ii##D)qA

A6"R

A6(:%::AT*GA!DGABFF1QR5AcrF?+,%affhjj1nc!f=%aeQq!tW5!Q$[FB%a,%a, r_   c                     / SQ/ SQ/ SQ/n[        USS9u  p#[        UR                  U-  [        S5      5        [        X#-  U5        g Nr  r  r  Fr   rt   r  r  s       r]   r+  TestQR.test_check_finite  s>    	9-!%(!!##'3q62!!%+r_   c                 b   / SQ/ SQ/ SQ/n[        US S9u  p#[        USS9u  pE[        XB5        [        XS5        [        USS9u  pg[        Xb5        [        Xs5        [        USS9u  p[        X5        [        X5        [        [        [         U4SS	05        [        [        [         U4SS
05        g )Nr  r  r  )lworkrt   r[  r   r  r   rQ   )r   r   r/  	Exception)
r|   r}   r  r  r  r  q3r3q4r4s
             r]   
test_lworkTestQR.test_lwork  s    	9-!4  AQ!"(!"( AR!"(!"( AR!"(!"( 	iaTGQ<8iaTGQ<8r_   rY  rx  rY   r  FTr[   c                 ~   [        X5      n[        R                  " X4US9n[        XcS9tpxn	[	        UR
                  X45        [	        UR                  U5        [	        UR
                  X45        [	        UR                  U5        [        U	5      U(       a  SOS:X  d   eU(       a?  U	u  n
[	        U
R
                  U45        [	        U
R                  [        R                  5        [        USUS9tp[	        UR
                  X45        [	        UR                  U5        [        U	5      U(       a  SOS:X  d   eU(       a?  U	u  n
[	        U
R
                  U45        [	        U
R                  [        R                  5        [        USUS9tpxn	[	        UR
                  X45        [	        UR                  U5        [	        UR
                  XR45        [	        UR                  U5        [        U	5      U(       a  SOS:X  d   eU(       a?  U	u  n
[	        U
R
                  U45        [	        U
R                  [        R                  5        [        USUS9tu  pp[	        UR
                  X45        [	        UR                  U5        [	        UR
                  U45        [	        UR                  U5        [	        UR
                  XR45        [	        UR                  U5        [        U	5      U(       a  SOS:X  d   eU(       a@  U	u  n
[	        U
R
                  U45        [	        U
R                  [        R                  5        g g )	Nr   r  ra   r   r  r   r  raw)	r}  rS   r9   r   r   r@   r[   re   int32)r|   rY  rY   r  r[   r"  r}   r  r  otherr  r  taus                r]   r  TestQR.test_shape_dtype  sa   
 IHHaV5)!/uQWWqf%QWWe$QWWqf%QWWe$5z8a333BA1$'"((+qsX6	QWWqf%QWWe$5z8a333BA1$'"((+!*x@uQWWqf%QWWe$QWWqf%QWWe$5z8a333BA1$'"((+ "158 D
ASYY'SYY&SYY%SYY&QWWqf%QWWe$5z8a333BA1$'"((+ r_   r  r  c                    [        X5      n[        R                  " X45      n[        U5      u  pV[	        U[        R
                  " U5      5        [	        U[        R                  " X45      5        [        USS9u  pVn[	        U[        R
                  " U5      5        [	        U[        R                  " X45      5        [	        U[        R                  " U5      5        [        USS9u  n[	        U[        R                  " X45      5        [        USS9u  pV[	        U[        R                  " X45      5        [	        U[        R                  " X245      5        [        USS9u  u  pn[	        U[        R                  " X45      5        [	        U	[        R                  " U45      5        [	        U[        R                  " X245      5        g )NTr  r  r  r  r  )r}  rS   r   r   r   r  r:   )
r|   rY  rY   r"  r}   r  r  r  r  r  s
             r]   r   TestQR.test_emptyO  s@   IHHaV!u2;;q>*288QF+,Q&a2;;q>*288QF+,299Q<(_288QF+,!*%288QF+,288QF+,15)
ARXXqf-.RXXqd^,288QF+,r_   c                    [         R                  " S5      n[         R                  " S5      n[        X5      u  p4[        U[         R                  " S5      5        [         R                  " S5      n[         R                  " S5      n[        X5      u  p4[        U[         R                  " S5      5        [         R                  " S5      n[         R                  " S5      n[        X5      u  p4[        U[         R                  " S5      5        g )Nr   r   r   )rS   r   r   r   )r|   r}   r  r  r  s        r]   test_multiply_emptyTestQR.test_multiply_emptyi  s    HHVHHVA!BHHV,-HHVHHVA!BHHV,-HHVHHVA!BHHV,-r_   r   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   r3  r6  r:  r@  rC  rF  rI  rM  rP  rZ  rZ  r^  rc  ri  rl  rp  rt  rw  rz  r~  r  r`  r  r  r  r+  r  r   r   r   r  r  r   r  r   r   r_   r]   r  r    s   ,))	)--,	),
)&
)))))&)&))))),)))444	)--0
-
--	0--- *-$0-0
-
--,90 [[S),[[S),[[Z%7[[Wf-., . 8 - -.,` [[Z)AB- C-2.r_   r  c                   r   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS r\R$                  R'                  S/ SQ5      \R$                  R'                  S/ SQ5      \R$                  R'                  S\5      S 5       5       5       r\R$                  R'                  S/ SQ5      S 5       rSrg)TestRQiz  c                     / SQ/ SQ/ SQ/n[        U5      u  p#[        X3R                  -  [        S5      5        [        X#-  U5        g r  r   r   rW   rF   r|   r}   r  r  s       r]   r   TestRQ.test_simple{  s9    	9-!u!!cc'3q62!!%+r_   c                 ^    / SQ/ SQ/ SQ/n[        U5      u  p#[        USS9n[        X$5        g )Nr  r  r  r  r  )r   r   )r|   r}   r  r  r  s        r]   test_rTestRQ.test_r  s,    	9-!u_!!(r_   c                    [         R                  R                  S5      nSn[        S5       HQ  nUR                  X"/5      n[	        U5      u  pV[        XfR                  -  [        U5      5        [        XV-  U5        MS     g rS  rS   rT   r'  r   r   r   rW   rF   r|   ri   rY   r"  r}   r  r  s          r]   rZ  TestRQ.test_random  sd    ii##D)qA

A6"Aa5DA%a##gs1v6%aeQ/	 r_   c                     / SQ/ SQ/n[        U5      u  p#[        UR                  U-  [        S5      5        [        X#-  U5        g )Nr  r  rt   r  r  s       r]   r  TestRQ.test_simple_trap  r  r_   c                     SS/SS/SS//n[        U5      u  p#[        UR                  U-  [        S5      5        [        X#-  U5        g r  r  r  s       r]   r  TestRQ.test_simple_tall  sG    VaVaV$!u!!##'3q62!!%+r_   c                     / SQ/ SQ/n[        U5      u  p#[        X3R                  -  [        S5      5        [        X#-  U5        g )Nr  r  rt   r  r  s       r]   r  TestRQ.test_simple_fat  s7    	"!u!!cc'3q62!!%+r_   c                     / SQ/ SQ/ SQ/n[        U5      u  p#[        X3R                  5       R                  -  [	        S5      5        [        X#-  U5        g r*  )r   r   rV   rW   rF   r  s       r]   r   TestRQ.test_simple_complex  s?    <3!u!!ffhjj.#a&9!!%+r_   c                 
   [         R                  R                  S5      nSnSn[        S5       HQ  nUR                  X#/5      n[	        U5      u  pg[        XwR                  -  [        U5      5        [        Xg-  U5        MS     g rf  r  r|   ri   rY  rY   r"  r}   r  r  s           r]   ri  TestRQ.test_random_tall  i    ii##D)qA

A6"Aa5DA%a##gs1v6%aeQ/	 r_   c                 
   [         R                  R                  S5      nSnSn[        S5       HQ  nUR                  X#/5      n[	        U5      u  pg[        XwR                  -  [        U5      5        [        Xg-  U5        MS     g r}  r  r  s           r]   r~  TestRQ.test_random_trap  r  r_   c                 d   [         R                  R                  S5      nSnSn[        S5       H~  nUR                  X#/5      n[	        USS9u  pg[        XwR                  -  [        U5      5        [        Xg-  U5        [        UR                  X#45        [        UR                  X"45        M     g )Nr&  r   rg  rQ   r  r  )
rS   rT   r'  r   r   r   rW   rF   r   r@   r  s           r]   test_random_trap_economic TestRQ.test_random_trap_economic  s    ii##D)qA

A6"Aaj)DA%a##gs1v6%aeQ/1&)1&) r_   c                 N   [         R                  R                  S5      nSn[        S5       Hu  nUR                  X"/5      SUR                  X"/5      -  -   n[	        U5      u  pV[        XfR                  5       R                  -  [        U5      5        [        XV-  U5        Mw     g r  )	rS   rT   r'  r   r   r   rV   rW   rF   r  s          r]   r`  TestRQ.test_random_complex  s    ii##D)qA

A6"R

A6(:%::Aa5DA%a&&(**nc!f=%aeQ/	 r_   c                    [         R                  R                  S5      nSnSn[        S5       H  nUR                  X#/5      SUR                  X#/5      -  -   n[	        USS9u  pg[        XwR                  5       R                  -  [        U5      5        [        Xg-  U5        [        UR                  X#45        [        UR                  X"45        M     g )Nr&  r   rg  rQ   rP   r  r  )rS   rT   r'  r   r   r   rV   rW   rF   r   r@   r  s           r]   test_random_complex_economic#TestRQ.test_random_complex_economic  s    ii##D)qA

A6"R

A6(:%::Aaj)DA%a&&(**nc!f=%aeQ/1&)1&) r_   c                     / SQ/ SQ/ SQ/n[        USS9u  p#[        X3R                  -  [        S5      5        [        X#-  U5        g r  r  r  s       r]   r+  TestRQ.test_check_finite  s<    	9-!%(!!cc'3q62!!%+r_   rY  rx  rY   r[   c                 N   [        X5      n[        R                  " X4US9n[        U5      u  pg[	        UR
                  X"45        [	        UR
                  X45        [	        UR                  U5        [	        UR                  U5        [        USS9n[	        UR
                  X45        [	        UR                  U5        [        USS9u  pg[	        UR
                  X45        [	        UR                  U5        [	        UR
                  XB45        [	        UR                  U5        g )Nr   r  r  r  )r}  rS   r9   r   r   r@   r[   )r|   rY  rY   r[   r"  r}   r  r  s           r]   r  TestRQ.test_shape_dtype  s     IHHaV5)!uQWWqf%QWWqf%QWWe$QWWe$qsOQWWqf%QWWe$!*%QWWqf%QWWe$QWWqf%QWWe$r_   r  r  c                    [        X5      n[        R                  " X45      n[        U5      u  pV[	        U[        R                  " X45      5        [	        U[        R
                  " U5      5        [        USS9n[	        U[        R                  " X45      5        [        USS9u  pV[	        U[        R                  " X45      5        [	        U[        R                  " X245      5        g )Nr  r  r  )r}  rS   r   r   r   r  )r|   rY  rY   r"  r}   r  r  s          r]   r   TestRQ.test_empty  s    IHHaV!u288QF+,2;;q>*qsO288QF+,!*%288QF+,288QF+,r_   r   N)r   r   r   r   r   r  rZ  r  r  r  r   ri  r~  r  r`  r  r+  r   r   r   r  r  r   r   r   r_   r]   r  r  z  s    ,)0,,,,00
*0
*, [[S),[[S),[[Wf-% . - -%( [[Z)AB- C-r_   r  c                   v   \ rS rSrS rS r\R                  R                  SS\	R                  " S5      * S\	R                  " S5      S/4S	\	R                  " S5      S\	R                  " S5      * S/4S
SS\	R                  " S5      \	R                  " S5      * /4S\	R                  " S5      \	R                  " S5      * SS/4S \	R                  " S5      S\	R                  " S5      * S/4/5      S 5       rS rS r\R                  R                  S\\\	R                   \\	R$                  /5      S 5       r\R                  R                  SS
S/5      \R                  R                  SSS/5      \R                  R                  S\	R                   \	R(                  \	R$                  \	R*                  /5      S 5       5       5       r\R                  R                  SSS/5      \R                  R                  S\	R                   \	R(                  \	R$                  \	R*                  /5      S 5       5       rSrg)	TestSchuri  c                     [        X2-  UR                  5       R                  -  XUSS9  [        X3R                  5       R                  -  [        R                  " [        U5      5      -
  SSUSS9  g )Nz&Schur decomposition does not match 'a'r   r   zu is not unitary)r   rV   rW   rS   rF   re   )r|   r}   tr  r   r   s         r]   check_schurTestSchur.check_schur  sW    

*At H	J 	FFHJJA7 2	4r_   c           	         / SQ/ SQ/ SQ/n[        U5      u  p#U R                  XUSSS9  [        US5      u  pE[        [        R                  " [        [        U5      5      5      =(       a(    [        R                  " [        [        U5      5      5      5        U R                  XUSSS9  [        XE5      u  pgU R                  XUSSS9  g )Nr     rt   r  r[  rt   rw   r@  +<r   r   r   )r   r  r   rS   rH  r=   r?   r   )r|   r}   r  r  tczctc2zc2s           r]   r   TestSchur.test_simple  s    J/Qxqu59q)$uYr]+,Mim8L1MNU;2?5u=r_   zsort, expected_diaglhprQ         rb   rhpiucoucc                     U S:  $ )Nr  r   )r  s    r]   <lambda>TestSchur.<lambda>&  s    AHr_   c                     / SQ/ SQ/ SQ/ SQ/n[        X1S9u  pEnU R                  X4USSS9  [        [        R                  " U5      US	S
9  [        SU5        g )Nr<  r   r\  r]  g      g      r]  r\  r4        @      g      @r  r<  r_        @rA   r@  r  r  -q=r   rQ   )r   r  r   rS   r5   r   )r|   rA   expected_diagr}   r  r  sdims          r]   	test_sortTestSchur.test_sort   s\     "! 1(
dqu59
M>Qr_   c                 p    / SQ/ SQ/ SQ/ SQ/n[        [        [        USS9  [        [        [        USS9  g )Nr  r  r  r  unsupportedr  ra   )r/  r0  r   r  s     r]   test_sort_errorsTestSchur.test_sort_errors4  s3    "! 	j%?j%3r_   c                     / SQ/ SQ/ SQ/n[        USS9u  p#[        X2-  UR                  5       R                  -  U5        g )Nr  r  r  Fr   )r   r   rV   rW   )r|   r}   r  r  s       r]   r+  TestSchur.test_check_finite<  s7    J/QU+!!%!&&(**"4a8r_   r   c                    [         R                  " SUS9n[        U5      u  p4[        [         R                  " SUS95      u  pV[	        U[         R                  " S5      5        [	        U[         R                  " S5      5        UR
                  UR
                  :X  d   eUR
                  UR
                  :X  d   e[        USS9u  p4n[	        U[         R                  " S5      5        [	        U[         R                  " S5      5        [        US5        UR
                  UR
                  :X  d   eUR
                  UR
                  :X  d   eg )Nr   r   rQ   r  r  r   )rS   r   r   rF   r   r[   r   )r|   r   r}   r  r  t0z0r  s           r]   r   TestSchur.test_emptyA  s    HHV2&Qxrvvar*+288F+,288F+,ww"(("""ww"(("""15)
d288F+,288F+,T1ww"(("""ww"(("""r_   rA   outputrg  r   r[   c                     [         R                  " SS/SS//5      n[        UR                  U5      XS9S   nUS:X  a  US:X  d   eUS:X  d   eg g )N皙?r   rQ   rA   r  r   r  r   )rS   rC   r   rX   )r|   rA   r  r[   r\   r  s         r]   test_gh_13137_sort_str TestSchur.test_gh_13137_sort_strR  s]      JJb	As8,- QXXe_4?C EMtqy88tqy88yyr_   c                   ^ [         R                  " SS/SS//5      nUS:H  =(       a#    U[         R                  [         R                  1;   mS	U4S jjn[	        UR                  U5      XAS9S   nT(       a  US:X  d   eUS:X  d   eg g )
Nr  r   rQ   rg  c                   > T(       aE  [         R                  " U 5      (       a   eUb  [         R                  " U5      (       d   eXS-  -   nO$[         R                  " U 5      (       d   eUb   eU nUR                  S:  $ )NrP   r*  )rS   iscomplexobjisrealr   )r  r  r  all_reals      r]   rA   1TestSchur.test_gh_13137_sort_custom.<locals>.sorty  so    ??1----}155"Hq))))y y66E>!r_   r  r   ra   rU  )rS   rC   r;   r:  r   rX   )r|   r  r[   r\   rA   r  r  s         @r]   test_gh_13137_sort_custom#TestSchur.test_gh_13137_sort_customh  s     JJb	As8,-6>Ge

BJJ/G&G		" QXXe_4?C$tqy33$!)33)yr_   r   N)r   r   r   r   r  r   r   r   r   rS   r>   r  r  r+  rd   r   r;   r   r<   r   r:  re  r  r  r   r   r_   r]   r  r    s   4> [[
2771:+tRWWQZ5	6
"''!*cBGGAJ;5	6
$RWWQZ"''!*5	6
"''!*rwwqzk45	6
rwwqz3TB	C		E

49
 [[TC

GR\\#RS# T#  [[VeU^4[[X	':;[[Wrzz2::')||R]]'D E9E < 59$ [[X	':;[[Wrzz2::')||R]]'D E4E <4r_   r  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 r\R                  R                  S
\\\\\/5      S 5       rSrg)TestHessenbergi  c                     / SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/n[        USS9u  p4[        UR                  U-  U-  U5        [        X2S	S
9  g )Nikiif     "  ir  g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@ra   calc_qr  decimalr   r   rW   r|   r}   h1rm   r  s        r]   r   TestHessenberg.test_simple  sT     ..!# !A&!!##'A+q1!!3r_   c                     / SQ/ SQ/ SQ/n[        USS9u  p#[        UR                  5       R                  U-  U-  U5        g )Nr  )r  y             f@r  )y             ;r  r  ra   r  )r   r   rV   rW   r|   r}   rm   r  s       r]   r   "TestHessenberg.test_simple_complex  s?     !A&!!&&(**q.1"4a8r_   c                     / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n[        USS	9u  p#[        UR                  U-  U-  U5        g )
N)ra   rQ   rt   r  rv   rw   r  )r   rQ   rt   r  rw   r  rQ   )r   rQ   rQ   rt   r   rt   rQ   )r   r   rQ   r  r   r   rQ   )r   rt   ra   rQ   r   ra   rQ   )r   ra   rQ   rt   r   ra   r   )r   r   r   r   r   ra   rQ   ra   r  r   r%  s       r]   test_simple2TestHessenberg.test_simple2  sD    """""""$ !A&!!##'A+q1r_   c                     [         R                  " S5      nSUS'   [        USS9u  p#[        UR                  U-  U-  U5        g )Nrt   rQ   )r   r   ra   r  )rS   rF   r   r   rW   r%  s       r]   test_simple3TestHessenberg.test_simple3  s<    FF1I%!A&!!##'A+q1r_   c                     [         R                  R                  S5      nSn[        S5       H=  nUR                  X"/5      n[	        USS9u  pV[        UR                  U-  U-  U5        M?     g )Nr&  r  rQ   ra   r  )rS   rT   r'  r   r   r   rW   r|   ri   rY   r"  r}   rm   r  s          r]   rZ  TestHessenberg.test_random  s]    ii##D)qA

A6"Aa*DA%accAgk15 r_   c                 &   [         R                  R                  S5      nSn[        S5       Ha  nUR                  X"/5      SUR                  X"/5      -  -   n[	        USS9u  pV[        UR                  5       R                  U-  U-  U5        Mc     g )Nr&  r  rQ   rP   ra   r  )rS   rT   r'  r   r   r   rV   rW   r.  s          r]   r`  "TestHessenberg.test_random_complex  sy    ii##D)qA

A6"R

A6(:%::Aa*DA%affhjj1nq&8!< r_   c                     / SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/n[        USSS	9u  p4[        UR                  U-  U-  U5        [        X2S
S9  g )Nr  r  r  r  r  r  ra   F)r  r   r  r  r   r!  s        r]   r+   TestHessenberg.test_check_finite  sV     ..!# !AE:!!##'A+q1!!3r_   c                     SS/SS//n[        USS9u  p#[        U[        R                  " S5      5        [        X!5        SS/SS	//n[        USS9u  pV[        U[        R                  " S5      5        [        XT5        g )
NrQ   ra   r  r  r  y       @      r   y      @      @y      (@       )r   r   rS   rF   )r|   r}   rm   r  r   h2r  s          r]   test_2x2TestHessenberg.test_2x2  sv    VaW!A&!!RVVAY/!!'D\D%=)Aa(!"bffQi0!"(r_   r   c                    [         R                  " SUS9n[        U5      nUR                  S:X  d   eUR                  [        [         R
                  " SUS95      R                  :X  d   e[        USS9u  p4[        USS9u  pVUR                  S:X  d   eUR                  UR                  :X  d   eUR                  S:X  d   eUR                  UR                  :X  d   eg )Nr   r   rt   Tr  )rS   r   r   r@   r[   rF   )r|   r   r}   rm   r  h3r  s          r]   r   TestHessenberg.test_empty  s    HHV2&qMww&   ww*RVVAR%89?????!D)Ad+ww&   ww"(("""ww&   ww"(("""r_   r   N)r   r   r   r   r   r   r(  r+  rZ  r`  r+  r6  r   r   r   rd   r   r;   r   r<   r   r   r   r_   r]   r  r    s[    	49	226=	4
) [[TC)#LM# N#r_   r  zBuild Dependenciesblasnameversionc                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TestQZi  c                 4   [         R                  R                  S5      nSnUR                  X"/5      R                  [        5      nUR                  X"/5      R                  [        5      n[        X45      u  pVpx[        Xu-  UR                  -  USS9  [        Xv-  UR                  -  USS9  [        XwR                  -  [        U5      SS9  [        XR                  -  [        U5      SS9  [        [         R                  " [        U5      S:  5      5        g )N90  rv   r  r   )rS   rT   r'  rX   r;   r   r   rW   rF   r   r   r5   	r|   ri   rY   r\   r   AABBQr  s	            r]   test_qz_singleTestQZ.test_qz_single  s    ii##E*JJv%%g.JJv%%g.!x!!&133,1=!!&133,1=!!cc'3q61=!!cc'3q61=tBx1}%&r_   c                    [         R                  R                  S5      nSnUR                  X"/5      nUR                  X"/5      n[        X45      u  pVpx[	        Xu-  UR
                  -  U5        [	        Xv-  UR
                  -  U5        [	        XwR
                  -  [        U5      5        [	        XR
                  -  [        U5      5        [        [         R                  " [        U5      S:  5      5        g )NrA  rv   r   
rS   rT   r'  r   r   rW   rF   r   r   r5   rB  s	            r]   test_qz_doubleTestQZ.test_qz_double  s    ii##E*JJvJJv!x!!&133,2!!&133,2!!cc'3q62!!cc'3q62tBx1}%&r_   c                 "   [         R                  R                  S5      nSnUR                  X"/5      SUR                  X"/5      -  -   nUR                  X"/5      SUR                  X"/5      -  -   n[        X45      u  pVpx[	        Xu-  UR                  5       R                  -  U5        [	        Xv-  UR                  5       R                  -  U5        [	        XwR                  5       R                  -  [        U5      5        [	        XR                  5       R                  -  [        U5      5        [        [         R                  " [        U5      S:  5      5        [        [         R                  " [        U5      R                  S:H  5      5        g )NrA  rv   rP   r   )rS   rT   r'  r   r   rV   rW   rF   r   r   r5   r   rB  s	            r]   test_qz_complexTestQZ.test_qz_complex	  s   ii##E*JJvCJJv$6!66JJvCJJv$6!66!x!!&1668::"5q9!!&1668::"5q9!!ffhjj.#a&9!!ffhjj.#a&9tBx1}%&tBx}})*+r_   c                 f   [         R                  R                  S5      nSnUR                  X"/5      SUR                  X"/5      -  -   R                  [        5      nUR                  X"/5      SUR                  X"/5      -  -   R                  [        5      n[        X45      u  pVpx[        Xu-  UR                  5       R                  -  USS9  [        Xv-  UR                  5       R                  -  USS9  [        XwR                  5       R                  -  [        U5      SS9  [        XR                  5       R                  -  [        U5      SS9  [        [         R                  " [        U5      S:  5      5        [        [         R                  " [        U5      R                  S:H  5      5        g )NrA  rv   rP   r  r   )rS   rT   r'  rX   r<   r   r   rV   rW   rF   r   r   r5   r   rB  s	            r]   test_qz_complex64TestQZ.test_qz_complex64	  s1   ii##E*ZZ"SZZ%7"77??	JZZ"SZZ%7"77??	J!x!!&1668::"5q!D!!&1668::"5q!D!!ffhjj.#a&!D!!ffhjj.#a&!DtBx1}%&tBx}})*+r_   c                    [         R                  R                  S5      nSnUR                  X"/5      nUR                  X"/5      n[        X4SS9u  pVpxXu-  UR	                  5       R
                  -  n	[        U	R                  U5        [        U	R                  S5        Xv-  UR	                  5       R
                  -  n
[        U
R                  U5        [        U
R                  S5        [        XwR	                  5       R
                  -  [        U5      5        [        XR	                  5       R
                  -  [        U5      5        [        [         R                  " [        U5      S:  5      5        g )NrA  rv   r   )r  r   )rS   rT   r'  r   rV   rW   r   rg  r   rF   r   r   r5   )r|   ri   rY   r\   r   rC  rD  rE  r  aabbs              r]   test_qz_double_complexTestQZ.test_qz_double_complex 	  s    ii##E*JJvJJv!y1Vaffhjj !"''1-!"''1-Vaffhjj !"''1-!"''1-!!ffhjj.#a&9!!ffhjj.#a&9tBx1}%&r_   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[        [        [        XS	 S
9  g )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r\  r5       Er  )皙@r        Gr  )r\  r\  r_  r\  )r\  r   g      r_  )r\  r;  r  r\  )r3  r   r  r<  c                     US:H  $ )Nr   r   )araibetas      r]   r  ,TestQZ.test_qz_double_sort.<locals>.<lambda>H	  s    bAgr_   r  )	rS   r4   r/  r0  r   r   r   rW   r   )r|   r\   r   rC  rD  rE  r  r  s           r]   test_qz_double_sortTestQZ.test_qz_double_sort0	  sX     HH--,,. /
 HH++++- .
 	j"a1MNr_   c                    [         R                  R                  S5      nSnUR                  X"/5      nUR                  X"/5      n[        X4SS9u  pVpx[	        Xu-  UR
                  -  U5        [	        Xv-  UR
                  -  U5        [	        XwR
                  -  [        U5      5        [	        XR
                  -  [        U5      5        [        [         R                  " [        U5      S:  5      5        g )NrA  rv   Fr   r   rI  rB  s	            r]   r+  TestQZ.test_check_finite	  s    ii##E*JJvJJv!U3!!&133,2!!&133,2!!cc'3q62!!cc'3q62tBx1}%&r_   r   N)r   r   r   r   rF  rJ  rM  rP  rU  rf  r+  r   r   r_   r]   r?  r?    s'    
'
',,' 5FF
'r_   r?  c                   f    \ 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 rSrg)	TestOrdQZi	  c                 P   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / S	Q/ S
Q/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " S5      n[         R                  " SS/5      n[         R                  " SS/5      n	XXWU	/U l        X$XhU	/U l        g )N)y5     6y     J@     @Iy     @A     _@y      @      ?)yq=
ףpݿQy           By      /     @M@y      %      )y333333@      yC@1y      Q      )@y            )y      @@y,@fffffE@y     @@      Gy      3     @@)y      ?      y?333333?y              y              )y?333333y              y            @y333333	)y      ?        y333333@?y            y              )rP   y333333@y              y      @      )rX  rY  rZ  r  r[  )r\  r]  r^  r  )r_  g      :@r`  r  )ra   rQ   ra   )ra   rt   r  )ra   rt   rt   )ra   rt   ro  r  )r!  r\  r   r   )r<  r<  r;  r?  )r?  r<  r\  r   )r  r<  rB  r?  )rB  r=  r  r=  )r?  r?  r;  r4  )r4  r\  r  r  )r!  r\  r<  r?  rQ   r   ra   )rS   r4   rF   r5   r\   r   )
clsA1B1A2B2A3B3A4B4A5s
             r]   r  TestOrdQZ.setup_class	  s     XX $&%'( ) XXDDDDF G XX/...0 1
 XX}$$$& ' XX'''') * XX)''') * VVAYWWaV_ WWaV_$$r_   c                     [         R                  " SS9   [        U R                  U R                  5       VVs/ s H  u  p#[        X#US9PM     nnnS S S 5        [        W5      $ s  snnf ! , (       d  f       N= f)Nraiser  r  )rS   r	  zipr\   r   r    tuple)r|   rA   AiBirets        r]   	qz_decompTestOrdQZ.qz_decomp	  sZ    [[W%:=dffdff:MN:M5d+:MCN &Sz O &%s   $A+A%A+%A++
A9c
           	      p   [         R                  " UR                  6 n
[        XR                  R                  5       -  U
5        [        XR                  R                  5       -  U
5        [        X-  X-  5        [        X-  X)-  5        [        [         R                  " US5      [         R                  " UR                  5      5        [        [         R                  " US5      [         R                  " UR                  5      5        [        UR                  S   5       GH  nUS:  a  XUS-
  4   S:w  a  M  XR                  S   S-
  :  a  XKS-   U4   S:w  ax  [        XKUS-   2XS-   24   X[US-   2XS-   24   5      u  pUS   R                  S:  a  USS/   nXkUS-    X{US-    -  nUS   R                  S:  a  USS/   n[        X5        M  Xk   S:X  a*  X{   S:X  a"  [        XKU4   S5        [        X[U4   S5        M  X{   S:X  a  [        X[U4   S5        M  [        XKU4   X[U4   -  Xk   X{   -  5        GM      [        U5      nSn[        UR                  S   5       HL  nU" [         R                  " Xk   /5      [         R                  " X{   /5      5      nU(       d	  U(       a   eUnMN     g )Nr   r   r   ra   rQ   T)rS   rF   r@   r   rW   rV   r   trilr9   r   r
   r   r   r   r2   r4   )r|   r\   r   rA   rC  rD  alphard  rE  r  Idr   evals_tmpsortfunlastsortcursorts                     r]   checkTestOrdQZ.check	  sZ   VVQWW!!cchhj."5!!cchhj."5!!&!%0!!&!%02772r?BHHRXX,>?2772r?BHHRXX,>?qwwqz"A 1ua!e8)88A;?"ra%(|q'8rAE'1U7"23R!a%q58H5IJ 8==1$!1a&MEa!enTAE]2q6;;?q!f+C)%58q=TW\ qD1- qD1-W\ qD1-'a4qD(958DG;KL/ #0 #4(qwwqz"Abhhz2BHHdgY4GHG ""{H #r_   c                     U R                  U5      n[        X R                  U R                  5       H  u  p4nU R                  " XEU/UQ76   M     g rU  )r  r}  r\   r   r  )r|   rA   r  retir  r  s         r]   	check_allTestOrdQZ.check_all
  s@    nnT"VVTVV4LDbJJrt+d+ 5r_   c                 &    U R                  S5        g )Nr  r  rW  s    r]   test_lhpTestOrdQZ.test_lhp
      ur_   c                 &    U R                  S5        g )Nr  r  rW  s    r]   test_rhpTestOrdQZ.test_rhp
  r  r_   c                 &    U R                  S5        g )Nr  r  rW  s    r]   test_iucTestOrdQZ.test_iuc
  r  r_   c                 &    U R                  S5        g )Nr  r  rW  s    r]   test_oucTestOrdQZ.test_ouc
  r  r_   c                 ,    S nU R                  U5        g )Nc                 |    [         R                  " U [        S9nUS:g  nSX#) '   X   X   -  R                  S:H  X#'   U$ Nr   r   FrS   
empty_likeboolr   r  r  outnonzeros       r]   rA    TestOrdQZ.test_ref.<locals>.sort
  D    --.CAvG!CMJqz1771<CLJr_   r  r|   rA   s     r]   test_refTestOrdQZ.test_ref
      	 	tr_   c                 ,    S nU R                  U5        g )Nc                 |    [         R                  " U [        S9nUS:g  nSX#) '   X   X   -  R                  S:g  X#'   U$ r  r  r  s       r]   rA    TestOrdQZ.test_cef.<locals>.sort*
  r  r_   r  r  s     r]   test_cefTestOrdQZ.test_cef(
  r  r_   c                 T   [        U R                  S   U R                  S   SS9nU R                  " U R                  S   U R                  S   S/UQ76   [        U R                  S   U R                  S   SS9nU R                  " U R                  S   U R                  S   S/UQ76   g )Nra   rQ   r  r  )r    r\   r   r  )r|   r  s     r]   test_diff_input_typesTestOrdQZ.test_diff_input_types3
  s    DFF1Itvvayu5

466!9dffQi55DFF1Itvvayu5

466!9dffQi55r_   c                    [         R                  " S5      n[         R                  " SS/5      nSSS/4SSS/4SSS/4SSS/4/n[         R                  " S5      n[         R                  " S	S
/5      nSSS/4SSS/4SSS/4SSS/4/n[         R                  " S5      n[         R                  " SS/5      nSS[         R                  /4SS[         R                  /4S[         R                  S/4/n	[         R                  " S5      n
[         R                  " SS/5      nSS[         R                  /4SS[         R                  /4S[         R                  S/4/n[         R                  " SS/5      n[         R                  " SS/5      nSS[         R                  /4SS[         R                  /4/nXXzU/nX%XU/nX6XU/n[        UUU5       H  u  nnnU H  u  nn[        UUUS9u    nnn  nUS:H  nUS:H  n[         R                  " U5      n[         R                  UUU-  '   [         R                  UU) U-  '   UU)    UU)    -  UU) '   [        UU5        M     M     g )NrQ   r   rb   r  r  r  r  r  y             ?y      ?      ?yٿɿ      ?      r   ra   r  )	rS   rF   r5   r   nanr}  r    r  r   )r|   rq  rr  	expected1rs  rt  	expected2ru  rv  	expected3rw  rx  	expected4ry  B5	expected5r\   r   expectedr  r  	expectedisortstrexpected_eigvalsr  r  rd  azerobzeror  s                                 r]   test_sort_explicitTestOrdQZ.test_sort_explicit:
  s    VVAYWWb#YdAY'aY'dAY'aY')	 VVAYWWgz*+k>:;nk:;k>:;nk:;=	
 VVAYWWaV_c266]+c266]+bffc]+-	 VVAYWWb!WdBFF^,dBFF^,bffd^,.	 WWaV_WWaXa[)a[)+	 RR RR )	J!$Q8!4BI-6))*/BW*E'1eT1a!MM%(#%66%%- $&FF5&5.!!5&M$v,65&	 0!4 .7 "5r_   r   N)r   r   r   r   classmethodr  r  r  r  r  r  r  r  r  r  r  r  r   r   r_   r]   rk  rk  	  sM    4% 4%l
,\,		6-5r_   rk  c                       \ rS rSr\R
                  R                  S5      S 5       r\R
                  R                  S 5       r	Sr
g)TestOrdQZWorkspaceSizeij
  rv   c                    [         R                  R                  S5      nSn[         R                  [         R                  4 HQ  nUR                  X"45      R                  U5      nUR                  X"45      R                  U5      n[        XES SS9nMS     [         R                  [         R                  4 HQ  nUR                  X"45      R                  U5      nUR                  X"45      R                  U5      n[        XES SS9nMS     g )NrA     c                 
    X:  $ rU  r   r  rd  s     r]   r  7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>t
      U\r_   rg  r  c                 
    X:  $ rU  r   r  s     r]   r  r  z
  r  r_   r   )	rS   rT   r'  r;   r:  rX   r    re  r<   )r|   ri   rq  ddtyper\   r   r  s          r]   test_decompose%TestOrdQZWorkspaceSize.test_decomposek
  s    ii##E*zz2::.F

A6"))&1A

A6"))&1Aa!A#%A	 / }}bll3F

A6"))&1A

A6"))&1Aa!A&(A 4r_   c                 p   [         R                  R                  S5      nSn[         R                  [         R                  [         R
                  [         R                  4 HS  nUR                  X"45      R                  U5      nUR                  X"45      R                  U5      n[        XESS9u  pgppMU     g )NrA  r  r  r  )	rS   rT   r'  r;   r:  re  r<   rX   r    )r|   ri   rq  r  r\   r   SrW   r  rd  UrI  s               r]   test_decompose_ouc)TestOrdQZWorkspaceSize.test_decompose_ouc}
  s    ii##E*zz2::r}}bllKF

A6"))&1A

A6"))&1A&+Au&=#A%q! Lr_   r   N)r   r   r   r   r   r   	fail_slowr  r  r  r   r   r_   r]   r  r  j
  sA    [[1( (" [[> >r_   r  c                       \ rS rSrS rSrg)TestDatacopiedi
  c                 ^  ^ SSK Jn  [        SS/SS//5      n[        U5      mUR	                  5       nUR                  5       n " U4S jS5      n " U4S jS	5      nU" 5       nU" 5       nUS
4TS
4US4US
4US
4US
44 H*  u  p[        U	5      n[        U" X5      U
[        U	5      S9  M,     g )Nr   )_datacopiedra   rQ   rt   c                   &   > \ rS rSrSU 4S jjrSrg)-TestDatacopied.test_datacopied.<locals>.Fake1i
  Nc                    > T$ rU  r   )r|   r[   r   r\   s      r]   	__array__7TestDatacopied.test_datacopied.<locals>.Fake1.__array__
  s    r_   r   )NN)r   r   r   r   r  r   r\   s   r]   Fake1r  
  s     r_   r  c                   0   > \ rS rSr Y R                  rSrg)-TestDatacopied.test_datacopied.<locals>.Fake2i
  r   N)r   r   r   r   __array_interface__r   r  s   r]   Fake2r  
  s    "#"7"7r_   r  FTr   )scipy.linalg._decompr  rH   rC   tolistr   r   repr)r|   r  r  LM2r  r  F1F2itemstatusarrr\   s               @r]   test_datacopiedTestDatacopied.test_datacopied
  s    4QFQF#$AJHHJVVX	 		8 	8 WWZ!UaY %[2u+E{DLD$-CS/!%d-Dr_   r   N)r   r   r   r   r  r   r   r_   r]   r  r  
  s    -r_   r  c                      [        S[        R                  S9n [        R                  " U R                  SS[
        S9nSUl        [        USS9  [        UR                  SS9  g	)
z4Check linalg works with non-aligned memory (float32)i  r   rQ   r   offsetcountr[   r[  r[  Toverwrite_aN)	r:   rS   uint8
frombufferdatar;   r@   r
   rW   r}   r  s     r]   test_aligned_mem_floatr  
  sM     	s"((#A 	affQcAAAGtr_   ppc64lezcrashes on ppc64lec                      [        S[        R                  S9n [        R                  " U R                  SS[
        S9nSUl        [        USS9  [        UR                  SS9  g	)
z4Check linalg works with non-aligned memory (float64)i$  r   r  r   r  r  Tr  N)	r:   rS   r  r   r  r   r@   r
   rW   r  s     r]   test_aligned_memr  
  sM    
 	s"((#A 	affQc?AAGtr_   c                      [        S[        R                  S9n [        R                  " U R                  SS[
        S9nSUl        [        USS9  [        UR                  SS9  g	)
z>Check that complex objects don't need to be completely alignediH  r   r  r   r  r  Tr  N)	r9   rS   r  r   r  r   r@   r
   rW   r  s     r]   test_aligned_mem_complexr  
  sM     	d"((#A 	affQcAAAGtr_   c                 b   [        U5      n[        [        U5      5       GH  nUS S  n[        XC   [        R
                  5      (       d  M,  [        R                  " XC   R                  XC   R                  R                  -  S-   [        R                  S9n[        R                  " UR                  SXC   R                  XC   R                  S9nXC   R                  Ul        XC   US'   XTU'   U " U0 UD6  [        XC   R                  5      S:  d  M  XC   R                  XC'   U " U0 UD6  GM     g )Nr  r   r  r  .ra   )r_  r   re   rc   rS   rE   r9   r   r[   itemsizer  r   r  r@   rW   )funcrt  kwargsr   r}   rS  s         r]   check_lapack_misalignedr  
  s    :D3t9GadBJJ''!$))ADJJ$7$779JBrwwq		%&TZZ1BtzzBHdBsGaD!v14::"tvva"6" r_   z0Ticket #1152, triggers a segfault in rare cases.)runrr  c                     [         R                  " S[        S9n [         R                  " S5      nSUl        [         R                  " S[         R
                  S9n[         R                  " UR                  SS[        S9nSUl        [         R                  " S5      n[        U5      u  pE[        U4[        SS	94[        U4[        SS	94[        U4[        SS	94[        U4[        SS	94[        XE4U4[        SS
94[        X#4[        SSS94[         U 4[        SS	94[         U4[        SS	94[         U4[        SS	94["        U4[        5       4["        U4[        SS	94[$        U 4[        SS	94[&        U4[        SS	94[(        U4[        SS	94[*        U4[        SS	94[,        U4[        SS	944 H  u  pgn[/        XgU5        M     g )Nr[  r   r   r  i N  r  r  Tr  )overwrite_b)r  r  )rS   rF   r   r:   r@   r  r   r  r   r   r
   dictr   r   r   r   r   r   r   r   r   r   r   r  )	r  Rr  r   LUpivr  rt  r  s	            r]   test_lapack_misalignedr  
  s    	rA
		#AAG
		%rxx(A
affQc?AAG
AlGB1$./qdDT23!t-.dt45	1~t'=>QFDTtDE1$./1$./1$./qdDF#qdDT23tTd34!t-.!t-.!t56QD$401!!V$ 	 F3%!r_   c                   t    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)TestOverwritei  c                 J    [        [        S/5        [        [        SS/5        g Nr  )rG   r
   rW  s    r]   test_eigTestOverwrite.test_eig  s    C&*C&&!12r_   c                 J    [        [        S/5        [        [        SS/5        g r  )rG   r   rW  s    r]   	test_eighTestOverwrite.test_eigh  s    D6(+D66"23r_   c                 &    [        [        S/5        g Nr  )rG   r   rW  s    r]   r  TestOverwrite.test_eig_banded
      J1r_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   test_eigvalsTestOverwrite.test_eigvals      GfX.r_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   test_eigvalshTestOverwrite.test_eigvalsh  s    Hvh/r_   c                 &    [        [        S/5        g r   )rG   r   rW  s    r]   r  !TestOverwrite.test_eigvals_banded  s    NVH5r_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   test_hessenbergTestOverwrite.test_hessenberg  r"  r_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   test_lu_factorTestOverwrite.test_lu_factor  s    Ix0r_   c                 |   ^ [         R                  " / SQ/ SQ/ SQ/5      n[        U5      m[        U4S jS/5        g )Nrs   rQ  )r  r  r  c                    > [        TU 5      $ rU  )r   )r   xlus    r]   r  -TestOverwrite.test_lu_solve.<locals>.<lambda>  s    hsA&6r_   )rt   )rS   r4   r   rG   )r|   r  r4  s     @r]   test_lu_solveTestOverwrite.test_lu_solve  s.    HHiI67l6?r_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   test_luTestOverwrite.test_lu!      B)r_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   test_qrTestOverwrite.test_qr$  r;  r_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   test_rqTestOverwrite.test_rq'  r;  r_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   
test_schurTestOverwrite.test_schur*  s    EF8,r_   c                 Z    [        S S/[        R                  [        R                  /S9  g )Nc                     [        U S5      $ )Nr   )r   r}   s    r]   r  2TestOverwrite.test_schur_complex.<locals>.<lambda>.  s    eAy&9r_   r  )dtypes)rG   rS   r;   r:  rW  s    r]   test_schur_complex TestOverwrite.test_schur_complex-  s!    9F8$&JJ

#;	=r_   c                 B    [        [        S/5        [        S S/5        g )Nr  c                     [        U SS9$ )Nr  r  )r   rG  s    r]   r  (TestOverwrite.test_svd.<locals>.<lambda>3  s    c!7&Cr_   )rG   r   rW  s    r]   test_svdTestOverwrite.test_svd1  s    C&*CfXNr_   c                 &    [        [        S/5        g r  )rG   r   rW  s    r]   test_svdvalsTestOverwrite.test_svdvals5  r&  r_   r   N)r   r   r   r   r  r  r  r$  r(  r  r-  r0  r6  r9  r=  r@  rC  rJ  rO  rR  r   r   r_   r]   r  r    sT    342/0621@
***-=O/r_   r  c                 D   [         R                  " U S4[        S9R                  U5      n[         R                  " U5      R
                  nSU-  n[        U5      n[        UR                  U S45        [        XfR                  5       US9  [        UR                  5      n[        UR                  S5        [        XfR                  5       US9  U S:  a  U(       d  [         R                  R                  S5      nUR                  U S5      UR                  SU 5      -  nUSUR                  U S5      -  UR                  SU 5      -  -   nUR                  U5      n[        US	S
9n[        UR                  U S45        [        USS
9n[        UR                  U S45        g g g )NrQ   r   r#  ra   rA  rQ   ra   rv   -C6?MbP?rcondư>rw   )rS   r   r   rX   r%  r&  r   r   r@   r   meanrW   rT   r'  rU   )rY   r[   skip_bigXr&  r   Yri   s           r]   _check_orthr_  9  sF   
Ae$++E2A
((5/

C
*CQA1a&!Avvxc*QSS	A&!Avvxc*1uXii##A&HHQNSXXa^+sxx1~%A66HHUO$QWWq!f%$QWWq%j) ur_   r  z"test only on 64-bit, else too slowc                  x    Sn  [        U [        R                  SS9  g ! [         a  n[	        S5      UeS nAff = f)Ni T)r\  z.memory error perhaps caused by orth regression)r_  rS   r:  MemoryErrorAssertionError)rY   r  s     r]   test_orth_memory_efficiencyrc  T  sA     	AArzzD1 <
	s    
949c                      [         R                  [         R                  [         R                  [         R                  /n / SQn[
        R                  " X5       H  u  p#[        X25        M     g )Nra   rQ   rt   r[  r   )rS   r;   r:  r<   re  	itertoolsproductr_  )rI  rf  r   rY   s       r]   	test_orthrh  e  sD    jj"**bllBMMBFE""61A 2r_   r   c                     [         R                  " SU S9n[         R                  " SU S9n[        U5      nUR                  [        U5      R                  :X  d   eUR
                  S:X  d   eg Nr   r   rQ   )rS   r   rF   r   r[   r@   )r   r}   r  oas       r]   test_orth_emptyrl  k  sW    
r"A		B	aB88tBx~~%%%88vr_   c                   \   \ rS rSrS r\R                  R                  S\\	\
R                  \\
R                  /5      S 5       r\R                  R                  SSS/5      \R                  R                  SSS/5      \R                  R                  S	S
S/5      S 5       5       5       rSrg)TestNullSpaceiu  c                    [         R                  R                  S5      n[         R                  [         R                  [         R
                  [         R                  /n/ SQn[        R                  " X#5       GH  u  pE[         R                  " SU4US9n[         R                  " U5      R                  nSU-  n[        U5      n	[        U	R                  XUS-
  45        [        Xi-  SUS9  [        UR                   5      n	[        U	R                  S5        [        UR                   U	-  SUS9  UR#                  SUS-  -   U5      n[        U5      n	[        U	R                  XUS-
  US-  -
  45        [        Xi-  SUS9  US	:  d  GM  [         R                  R                  S5      nUR%                  US	5      UR%                  S	U5      -  nUS
UR%                  US5      -  UR%                  SU5      -  -   nUR'                  U5      n[        USS9n	[        U	R                  XUS	-
  45        [        USS9n	[        U	R                  XUS-
  45        GM     g )Nra   re  rQ   r   r#  r   rA  rU  rv   rV  rW  rX  rZ  rw   )rS   rT   r'  r;   r:  r<   re  rf  rg  r   r%  r&  r%   r   r@   r   rW   randnrU   rX   )
r|   ri   rI  rf  r   rY   r]  r&  r   r^  s
             r]   test_null_spaceTestNullSpace.test_null_spacev  s   ii##A&**bjj",,F"&&v5EBAb)A((2,""C*C1A1c(+AE13/133A&)ACC!GQS1		!ad(A&A1A1!eadl"34AE13/1uii++A.HHQNSXXa^3sxx1~-A>>HHRLq-QWWqa%j1q-QWWqa%j1; 6r_   r   c                     [         R                  " SUS9n[         R                  " SUS9n[        U5      nUR                  S:X  d   eUR
                  [        U5      R
                  :X  d   eg rj  )rS   r   rF   r%   r@   r[   )r|   r   r}   r  nsas        r]   test_null_space_empty#TestNullSpace.test_null_space_empty  sY    HHV2&VVAR myyF"""yyJrN00000r_   r  TFr   r  r>  r  c                    [         R                  R                  S5      nSnUR                  SUS-  -   U45      n[	        UR                  5       XUS9n[        Xg-  S[         R                  " UR                  5      R                  S-  S9  g )	Nl   'YeN r[  ra   rQ   )r  r   r  r   r   rA  )
rS   rT   default_rngstandard_normalr%   r   r   r%  r[   r&  )r|   r  r   r  ri   rY   r]  r^  s           r]   test_null_space_options%TestNullSpace.test_null_space_options  sw     ii##$;<QT1.qvvx[%24qrxx'8'<'<S'@Ar_   r   N)r   r   r   r   rq  r   r   r   rd   r   rS   r;   r   r<   ru  rz  r   r   r_   r]   rn  rn  u  s    #2J [[TC

GR\\#RS1 T1 [[]T5M:[[^dE];[[_w.@AB B < ;Br_   rn  c            	         [        S[        5      n U S S 2S S24   nU S S 2SS 24   n[        [        X5      [        R
                  S-  /S-  SS9  [        [        X!5      [        R
                  S-  /S-  SS9  X4 H8  n[        [        X35      [        R                  " UR                  S   5      SS9  M:     [        R                  " / SQ/ SQ/ S	Q/ S
Q/5      nSn[        [        US S 2S S24   US S 2SS 24   5      S   USS9  [        [        US S 2SS 24   US S 2S S24   5      S   USS9  Sn[        [        US S 2S S24   US S 2S/4   5      USS9  [        [        US S 2S/4   US S 2S S24   5      USS9  Sn[        [        US S 2S S24   US S 2S/4   5      USS9  [        [        US S 2S/4   US S 2S S24   5      USS9  Sn[        [        US S 2S S24   US S 2SS 24   5      US/SS9  [        [        [        US   U5        [        [        [        X3S   5        [        [        [        US S U5        [        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " [        R
                  S-  SS/5      n[        [        X5      USS9  S/S//nSS/SS//n[        [        XV5      SSS9  [        [        Xe5      SSS9  [        R                  " S5      n[        R                  " S5      n[        [        XV5      [        R                  " S5      5        [        R                  " S5      n[        R                  " S5      n[        [        XV5      [        R                  " S5      5        [        R                  " S5      n[        R                  " S5      n[        [        XV5      [        R                  " S5      5        g ) Nr  rt   r;  r@  rA  ra   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rQ   r   r  r  gL0?gĹ-?gyv?r   r  )r   ra   r   )r   r   ra   r  r`  r  r  r   r   r   r   r  )r"   r   r   r!   rS   pir9   r@   r4   r/  r0  r   )Hr\   r   r  r  r}   r   s          r]   test_subspace_anglesr    s   EA	!RaR%A	!QR%AOA)BEEBJ<!+;%HOA)BEEBJ<!+;%HV-rxx
/C"	$ 
 		U	W	X	V	X	YA
 !HOAa!eHa12h7:H OAaeHa2A2h7:H  HOAa!eHaA3i8(OOAa!fIqBQBx8(O HOAa!eHaA3i8(OOAa!fIqBQBx8(O HOAa!eHa12h7(A  *oqtQ7*oqA$7*oq"vq9 	)	 	A
 	)	 	A
 xxq!Q(HOA)8%@
 A3A
!q!fAOA)2E:OA)2E: 	A
AOA)288D>:
A
AOA)288D>:
A
AOA)288D>:r_   c                   h    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)TestCDF2RDFi  c                 0    [         R                  " SX5      $ )Nz...ij,...jk->...ik)rS   einsum)r|   r}   r   s      r]   matmulTestCDF2RDF.matmul  s    yy-q44r_   c                 X    [        U R                  X!5      U R                  X25      5        g rU  )r   r  )r|   r~   rl   r  s       r]   assert_eig_validTestCDF2RDF.assert_eig_valid  s"    !KKKK	
r_   c                     [         R                  " S5      n[         R                  " S5      [         R                  " S5      p2[        X#5      u  pEU R                  XEU5        g )Nr   r   )rS   r   r&   r  r|   r]  r~   rl   wrr   s         r]   test_single_array0x0real$TestCDF2RDF.test_single_array0x0real   sC    HHVxx{BHHV,1ba(r_   c                     [         R                  " SS/SS//5      n[         R                  R                  U5      u  p#[	        X#5      u  pEU R                  XEU5        g )Nra   rQ   rt   r   rS   r4   r7   r
   r&   r  r  s         r]   test_single_array2x2_real%TestCDF2RDF.test_single_array2x2_real  sL    HHq!fq"g&'yy}}Qba(r_   c                     [         R                  " SS/SS//5      n[         R                  R                  U5      u  p#[	        X#5      u  pEU R                  XEU5        g )Nra   rQ   r   r  r  s         r]   test_single_array2x2_complex(TestCDF2RDF.test_single_array2x2_complex  sL    HHq!fr1g&'yy}}Qba(r_   c                     [         R                  " / SQ/ SQ/ SQ/5      n[         R                  R                  U5      u  p#[	        X#5      u  pEU R                  XEU5        g )Nrs   ru   r  r  s         r]   test_single_array3x3_real%TestCDF2RDF.test_single_array3x3_real  sF    HHiI67yy}}Qba(r_   c                     [         R                  " / SQ/ SQ/ SQ/5      n[         R                  R                  U5      u  p#[	        X#5      u  pEU R                  XEU5        g Nrs   )r   r  rv   )r   rn  r  r  r  s         r]   test_single_array3x3_complex(TestCDF2RDF.test_single_array3x3_complex  sF    HHiJ78yy}}Qba(r_   c                 (   [        SS5       H  n[        R                  R                  S5        [        R                  R	                  SX5      n[        R
                  R                  U5      u  p4[        X45      u  pVU R                  XVU5        M     g )Nra   r  iɚ;r   )	r   rS   rT   r  rU   r7   r
   r&   r  r|   r  r]  r~   rl   r  r   s          r]   test_random_1d_stacked_arrays)TestCDF2RDF.test_random_1d_stacked_arrays  se    q!AIINN9%		sA)A99==#DAQ]FB!!"!, r_   c                     [        SS5       Hd  n[        R                  R                  SSX5      n[        R                  R                  U5      u  p4[        X45      u  pVU R                  XVU5        Mf     g )Nra   r  r[  )r   rS   rT   rU   r7   r
   r&   r  r  s          r]   test_random_2d_stacked_arrays)TestCDF2RDF.test_random_2d_stacked_arrays(  sW    q!A		r2q,A99==#DAQ]FB!!"!,	 r_   c                     [         R                  " S5      [         R                  " S5      p![        [        [
        X5        g )Nr   )rQ   )rS   r   r4   r/  r0  r&   r|   r~   rl   s      r]   test_low_dimensionality_error)TestCDF2RDF.test_low_dimensionality_error0  s%    xx|RXXd^1j'10r_   c                     [         R                  " S5      [         R                  " S5      R                  SS5      p![        [        [
        X5        g )Nrt   rw   rQ   rS   r:   r.  r/  r0  r&   r  s      r]   r1  !TestCDF2RDF.test_not_square_error4  s2    yy|RYYq\11!Q71j'10r_   c                     [         R                  " / SQ/ SQ/ SQ/5      n[         R                  R                  U5      u  p#[	        [
        [        X25        g r  rS   r4   r7   r
   r/  r0  r&   r|   r]  r~   rl   s       r]   test_swapped_v_w_error"TestCDF2RDF.test_swapped_v_w_error9  s7    HHiJ78yy}}Qj'10r_   c                     [         R                  " S5      [         R                  " S5      R                  SS5      p![        [        [
        X5        g )Nrt   r  r  r  r  s      r]   test_non_associated_error%TestCDF2RDF.test_non_associated_error?  s2    yy|RYYr]221a81j'10r_   c                 n   [         R                  " / SQ/ SQ/ SQ/5      n[         R                  R                  U5      u  p#[	        [
        [        X#5        [         R                  " / SQ/ SQ/ SQ// SQ/ SQ/ SQ//5      n[         R                  R                  U5      u  p#[	        [
        [        X#5        g )Nrs   r   )rQ   rv   y      @      r  r  s       r]   test_not_conjugate_pairs$TestCDF2RDF.test_not_conjugate_pairsD  s    HHiL9:yy}}Qj'10 HH	<0	<0
  yy}}Qj'10r_   r   N)r   r   r   r   r  r  r  r  r  r  r  r  r  r  r1  r  r  r  r   r   r_   r]   r  r    sH    5
)))))--11
11
1r_   r  )F)rf  platformsysnumpyrS   numpy.testingr   r   r   r   r   r   r   r	   r/  scipy.linalgr
   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'   scipy.linalg.lapackr(   r)   r*   r+   r,   r-   r.   r/   r0   scipy.linalg._miscr1   scipy.linalg._decomp_qzr2   scipy.statsr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   scipy.linalg._testutilsrG   scipy.sparse._sputilsrH   scipy._lib._testutilsrI   scipy.linalg.blasrJ   scipy.__config__rK   ImportErrormachineIS_WASMr   r^   r:  REAL_DTYPESre  rR   r  rn   rp   r   rS  r  r  r=  r  r   r  r  r  r  r  r  r  r  r  blas_providerblas_versionr?  rk  r  r  r  r  r  r  xfailr  r  r_  r  r[   intpr
  rc  rh  r   rd   r   rl  rn  r  r  r   r_   r]   <module>r     s     
 5 5  *N N N N N N N NA A A $ 4 #; ; ; ; ; ; 8 ( 3 '' <<<'U8+;+;+=AU+U (-E  zz2::&,,.	~	%
4'= '=TO& O&ff$ f$P	~! ~!BJ$ J$XM# M#^M  G$;<r  =; ;|E EE
. E
.PN- N-b}4 }4@Y# Y#x  $ #	/08@M./7	BLp' p'fG5 G5T> ><- -6
 H$$&)3/  1
1
#$ uL  N4N4@5/ 5/p*6 BHHRWW%..2?  AA  UBJJNO P8B 8BvB;J[1 [1_^  Fs   M1 1M=<M=