
    doiu                    ,   S SK J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rS SKJrJrJrJrJrJrJrJr  S SKJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$  S SK%J&r&  S SK'J(r(  S S	K)J*r*J+r+  S SK,J-r.   S S
KJ/r0  S SK'J2r2  S SK3J4r4  S SK5J6r6  S=r7r8\6S   S   S   r7\6S   S   S   r8\Rr                  \Rt                  /r;\Rx                  \Rz                  /r>\;\>-   r?S r@S rAS rB " S S5      rC " S S5      rD " S S5      rE\
R                  R                  S\?5      \
R                  R                  S/ SQ5      S 5       5       rH " S S 5      rI " S! S"5      rJ " S# S$5      rK " S% S&5      rL\
R                  R                  S\?5      \
R                  R                  S'/ S(Q5      \
R                  R                  S)S*S+/5      \
R                  R                  S,S-S*/5      \
R                  R                  S.S/S0/5      S1 5       5       5       5       5       rMS2 rNS3 rOS4 rPS5 rQ " S6 S75      rR " S8 S95      rSS: rTS; rUS< rVS= rWS> rXS? rYS@ rZSA r[SB r\SC r]SD r^SE r_SF r`SG ra " SH SI5      rbSJ rcSK rdSL reSM rf\
R                  R                  SNSOSP9SQ 5       rhSR ri\
R                  R                  SSSTSU/5      \
R                  R                  S\;5      \
R                  R                  SV\j" SW5      5      \
R                  R                  SX\j" SY5      5      \
R                  R                  SZ\j" SY5      5      \
R                  R                  S[S S\/5      \
R                  R                  S]S S\/5      GShS^ j5       5       5       5       5       5       5       rk\
R                  R                  S\;5      S_ 5       rl\
R                  R                  S`SVSa0SXSa0SZSa0S[Sa0SbSa0S]Sa045      Sc 5       rm\
R                  R                  Sd\R                  " / SeQ/ SfQ/ SgQ/ ShQ/ SiQ/ SjQ/5      \R                  " / SkQ5      \R                  " / SlQ/ SmQ/ SnQ/ SoQ/ SpQ/ SqQ/5      \R                  " / SrQ/ SsQ/ StQ/ SuQ/5      4/5      Sv 5       ro\
R                  R                  S\?5      Sw 5       rp\
R                  R                  Sx\R                  " / SyQ5      \R                  " / SzQ5      \R                  " / S{Q5      \R                  " / S|Q5      \R                  " / S}Q5      \R                  " / S~Q5      \R                  " / SQ5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/S/S/SS/SS\//5      4	\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/SS/SS/SS//5      4	/5      S 5       rq\
R                  R                  S\?5      \
R                  R                  S'/ SQ5      \
R                  R                  S.S/S0/5      S 5       5       5       rr\
R                  R                  S\?5      \
R                  R                  S/ SQ5      S 5       5       rs\
R                  R                  S\t" \;\;-   \?5      5      S 5       ru\
R                  R                  S\t" \;\;-   \?5      5      S 5       rv\
R                  R                  S\t" \;\;-   \?5      5      S 5       rw\
R                  R                  S\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SWS0/SaSY/SSa/SS/SS//5      \R                  " SS/SS/S\S/SSW/S/S//5      4\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SS/SS/SS/SS//5      \R                  " SS/SS/SS/SS//5      4/5      S 5       rxS ry\
R                  R                  S\t" \?\;\;-   5      5      \
R                  R                  S\j" S/5      5      S 5       5       rz\
R                  R                  S\t" \?\;\;-   5      5      \
R                  R                  S\j" S/5      5      S 5       5       r{\
R                  R                  S\t" \?\;\;-   5      5      \
R                  R                  S\j" S/5      5      S 5       5       r|\
R                  R                  S\t" \?\;\;-   5      5      \
R                  R                  S\j" S/5      5      S 5       5       r}\
R                  R                  SS\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ/ SQ/ SQ/ SQ/5      4/5      S 5       r~\
R                  R                  S\?5      \
R                  R                  S/ SQ5      S 5       5       rS r\
R                  R                  S/ SQ5      \
R                  R                  SSS/5      S 5       5       r\
R                  R                  SSS/5      \
R                  R                  SSS/5      S 5       5       r\
R                  R                  S\?5      \
R                  R                  S/ SQ5      S 5       5       r\
R                  R                  S\?5      S 5       r\
R                  R                  S\?5      \
R                  R                  SSSN/5      \
R                  R                  SSS-/5      S 5       5       5       r\
R                  R                  S\?5      \
R                  R                  SS S\/5      \
R                  R                  SSS-/5      S 5       5       5       r\
R                  R                  S\?S-  5      \
R                  R                  SSSN/5      \
R                  R                  SSS-/5      S 5       5       5       r\
R                  R                  S\R                  " / SyQ5      \R                  " / SzQ5      \R                  " / S{Q5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/S/S/SS/SS\//5      4\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/SS/SS/SS//5      4/5      S 5       r\
R                  R                  S\t" \?\;\;-   5      5      \
R                  R                  SSS 4S-S 4/5      S 5       5       r\
R                  R                  S\t" \?\;\;-   5      5      \
R                  R                  SSS 4S-S 4/5      S 5       5       r\
R                  R                  S\t" \?\;\;-   5      5      \
R                  R                  SSS 4S-S 4/5      GS  5       5       r\
R                  R                  GS\R                  " / SQ5      \R                  " / SQ5      \R                  " SWS0/SaSY/SSa/SS/SS//5      \R                  " SS/SS/S\S/SSW/S/S//5      4\R                  " / SQ5      \R                  " / SQ5      \R                  " SS/SS/SS/SS//5      \R                  " SS/SS/SS/SS//5      4/5      GS 5       r\
R                  R                  GSSSN/5      \
R                  R                  S\?5      GS 5       5       r\
R                  R                  S\?5      GS 5       r\
R                  R                  GS\R                  " / GSQ/ GSQ/ GS	Q/ GS
Q/5      \R                  " / GSQ/ GSQ/ GSQ/ GS
Q/5      SS\4\R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      \R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      S\SY4/5      GS 5       r\
R                  R                  S\?5      GS 5       r\
R                  R                  S\?5      GS 5       r\
R                  R                  GS\R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      \R                  " / GSQ/ GSQ/ GS Q/ GS!Q/5      \R                  " / GS"Q/ GS#Q/ GS$Q/ GS%Q/5      \R                  " / GS&Q5      GS'GS(4\R                  " / GS)Q/ GS*Q/ GS+Q/ GS,Q/5      \R                  " / GS-Q/ GS.Q/ GS/Q/ GS0Q/5      \R                  " / GS1Q/ GS2Q/ GS3Q/ GS4Q/5      \R                  " / GS&Q5      GS5GS64/5      GS7 5       r\
R                  R                  S\?5      GS8 5       r\
R                  R                  GS9\R                  " / GS:Q/ GS;Q/ GS<Q/ GS=Q/5      \R                  " / GS>Q/ GS;Q/ GS<Q/ GS?Q/5      \R                  " / GS@Q/ GSAQ/ GSBQ/ GSCQ/5      \R                  " / GSDQ/ GSEQ/ GSFQ/ GSGQ/5      \R                  " / GSHQ/ GSIQ/ GSFQ/ GSJQ/5      \R                  " / GSKQ/ GSLQ/ GSMQ/ GSNQ/5      \R                  " / GS>Q/ GSOQ/ GSPQ/ GSQQ/5      \R                  " / GSRQ/ GSSQ/ GSTQ/ GSUQ/5      4/5      \
R                  R                  S\;5      GSV 5       5       r\
R                  R                  S\;5      \
R                  R                  GSWGSX5      \
R                  R                  GSY/ GSZQ5      GS[ 5       5       5       r\
R                  R                  GS\SS/5      \
R                  R                  S\?5      \
R                  R                  GSGS]5      GS^ 5       5       5       r\
R                  R                  GS\SS/5      \
R                  R                  S\?5      \
R                  R                  GSGS]5      GS_ 5       5       5       r\
R                  R                  S'\" GS`5      5      \
R                  R                  GSa/ GSbQ5      \
R                  R                  S,S-S*/5      \
R                  R                  S\?5      GSc 5       5       5       5       r\
R                  R                  S\?5      \
R                  R                  S'/ SQ5      GSd 5       5       r\
R                  R                  S'\" GS`5      5      \
R                  R                  S\?5      GSe 5       5       r\
R                  R                  S\;5      \
R                  R                  GSfGS]5      GSg 5       5       rg! \1 a    Sr0 GNf = f(i      )reduceN)assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equal)raises)eyeoneszeros
zeros_liketriutriltril_indicestriu_indices)_flapacklapackinvsvdcholeskysolveldlnorm
block_diagqreighqz)
_to_banded)_compute_lwork)ortho_groupunitary_group)_clapack)get_lapack_funcs)get_blas_funcs)CONFIGzBuild Dependenciesblasnameversionc                     U[         ;   a1  UR                  " U 6 UR                  " U 6 S-  -   R                  U5      $ UR                  " U 6 R                  U5      $ )N              ?)COMPLEX_DTYPESrandastype)shapedtyperngs      Z/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr3   +   sT    % ((E"4'()/	788U""5))    c                  p   [         R                  c  [        R                  " S5        [	        [         R                  R                  5       5      n 1 Skn[        5       n[        [         5       H:  nUR                  S5      (       a  M  X1;  d  M"  X0;  d  M)  UR                  U5        M<     U/ :X  d   S5       eg)z%Test that all entries are in the doc.Nzlapack.__doc__ is None>   npclapackflapackdivision	HAS_ILP64print_functionabsolute_importfind_best_lapack_type_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   __doc__pytestskipsetsplitlistdir
startswithappend)namesignore_listmissingr(   s       r2   test_lapack_documentedrK   3   s    ~~,-$$&'E	K fGF$$)@!NN4   b=NNN=r4   c                  *    SSK Jn   SSKJn  X:X  d   eg )Nr   )r:   )scipy.linalg.blasr:   scipy.linalg.lapack)blas_has_ilp64lapack_has_ilp64s     r2   #test_ilp64_blas_lapack_both_or_nonerQ   J   s    =A---r4   c                   ,    \ rS rSrS rS rS rS rSrg)TestFlapackSimpleP   c           	         / SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/ SQ/nS H  n[        [        US	-   S 5      nUc  M  U" U5      u  pVpxn	[        U	(       + [        U	5      5        [	        XQ5        [        Xg4S
[        US
   5      S-
  45        [	        U[        R                  " [        U5      5      5        U" USSS9u  pVpxn	[        U	(       + [        U	5      5        M     g )N)         )         )      	   )rV   r   r   ga2U0*3?)rY   r   r   gMb`?)r\   rV   r   r   )r   rV   r   r   sdzcgebalr   rV   )permutescale)	getattrr8   r   reprr   r   lenr6   r   )
selfaa1pfbalohipivscaleinfos
             r2   
test_gebalTestFlapackSimple.test_gebalR   s    	9- A7D1Ay)*1&BB$Hd4j)%b,"As1Q4y{#34%hA@)*2q)B&BB$Hd4j) r4   c                     / SQ/ SQ/ SQ/nS HA  n[        [        US-   S 5      nUc  M  U" U5      u  pEn[        U(       + [        U5      5        MC     g )Nikiifi     i"  iiidgehrd)rc   r8   r   rd   )rf   rg   ri   rj   httauro   s          r2   
test_gehrdTestFlapackSimple.test_gehrdg   sU     A7D1AyaDMBTHd4j) r4   c           	         [         R                  " SS/SS//5      n[         R                  " SS/SS//5      n[         R                  " SS	/S
S//5      nSnS GHe  nUR                  U5      UR                  U5      UR                  U5      pn[        SU45      u  n	UR	                  5       (       a  US==   S-  ss'   SnU	" XgU5      u  pn[        [         R                  " Xj5      [         R                  " X5      -   X-  5        U	" XgXUS9u  pn[        [         R                  " UR                  5       R                  U
5      [         R                  " XR                  5       R                  5      -   X-  SS9  U	" XgUSS9u  pn[        [         R                  " Xj5      [         R                  " X5      -
  X-  SS9  GMh     g )NrV   rW   r   rY   rZ   r[   r]   r^   
         TfdFD)trsylr+   C)tranatranbdecimal)isgn)	r6   arrayr.   r$   isupperr   dot	conjugater   )rf   rg   bctransr0   rh   b1c1r   xrb   ro   s                r2   
test_trsylTestFlapackSimple.test_trsylr   sy   HHq!fq!f%&HHq!fq!f%&HHq"gBx() E%!((5/188E?BB%j2%8FE}}1"22.NAd%bffRmbffQm&C&+j2 #22%HNAd%FF2<<>++Q/"&&LLN<L<L2MMJ+ #22B7NAd%bffRmbffQm&C&+j!=# r4   c                 l   [         R                  " / SQ/ SQ/ SQ/5      nS GH  nS GH  nUR                  U5      nUR                  5       (       a  US==   S-  ss'   [	        SU45      u  nU" X45      nUS	;   ak  US
;   a  SnOSn[         R
                  " [         R                  " [         R                  " [         R                  " U5      5      5      5      n[        XhU5        M  US;   a+  [         R                  " [         R                  " U5      5      nOUS;   a>  [         R                  " [         R                  " [         R                  " U5      SS95      nOCUS;   a=  [         R                  " [         R                  " [         R                  " U5      SS95      n[        UW5        GM     GM     g )Nrs   rt   rv   r   Mm1OoIiFfEer   r   r+   )langeFfEeFfrX   r\   Mm1Oor   axisIirV   )r6   r   r.   r   r$   sqrtsumsquareabsr   maxr   )	rf   rg   r0   norm_strrh   r   valuer   refs	            r2   
test_langeTestFlapackSimple.test_lange   s8   HH 
 E)XXe_==??tHNH)*re<h+v%}"#"#''"&&266":)>"?@C'G<4' ffRVVBZ0!U* ffRVVBFF2JQ%?@!T) ffRVVBFF2JQ%?@ ,1 * r4    N)	__name__
__module____qualname____firstlineno__rp   r{   r   r   __static_attributes__r   r4   r2   rS   rS   P   s    **	*=8-r4   rS   c                        \ rS rSrS rS rSrg)
TestLapack   c                 0    [        [        S5      (       a  g g Nempty_module)hasattrr8   rf   s    r2   test_flapackTestLapack.test_flapack       7N++ ,r4   c                 0    [        [        S5      (       a  g g r   )r   r7   r   s    r2   test_clapackTestLapack.test_clapack   r   r4   r   N)r   r   r   r   r   r   r   r   r4   r2   r   r      s    
r4   r   c                   ,    \ rS rSrS rS rS rS rSrg)TestLeastSquaresSolvers   c           	         [         R                  R                  S5      n[        [        5       H  u  p#SnSnSnUR                  XE45      R                  U5      nUR                  U5      R                  U5      n[        SUS9u  p[        XXV5      nU	" XxUS9u    p[        US:  5        U	" XxS	U   US
9u    p[        US:  5        M     [         H  n[         R                  " SS/SS/SS//US9n[         R                  " / SQUS9n[        SXx45      u  pnUR                  u  pE[        UR                  5      S:X  a  UR                  S   nOSn[        XXV5      nU" XxUS9u  nnn[        US S [         R                  " SS/US9S[         R                  " U5      R                  -  S9  U" U5      u  n    n[!        UU5        M     ["         H  n[         R                  " SS/SS/SS//US9n[         R                  " / SQUS9n[        SXx45      u  pnUR                  u  pE[        UR                  5      S:X  a  UR                  S   nOSn[        XXV5      nU" XxUS9u  nnn[        US S [         R                  " SS /US9S[         R                  " U5      R                  -  S9  U" U5      u  n    n[!        UU5        M     g )!N  r~      rV   )gels
gels_lworkr0   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrW   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r6   randomdefault_rng	enumerateDTYPESr.   r$   r    r   REAL_DTYPESr   r/   re   r   finfoepsr	   r,   )rf   r1   indr0   mnnrhsrh   r   glsglslwr   r>   ro   r   r   r   lqrr   	lqr_truths                       r2   	test_gels!TestLeastSquaresSolvers.test_gels   s   ii##D)#F+JCAADQF#**51BA%%e,B)*@NJC #5Q5ER51JAqDAIR6#;eDJAqDAI , !EC:::'.35B ,E:B&63bX'?#De 88DA288}!xx{ #:!:Ee4LCDAcrFBHH.A.@.B38%: "$BHHUO$7$7!79 "'rIq!QsI./ !2 $EHc?$h/$h/18=?B 6eDB&63bX'?#De 88DA288}!xx{ #:!:Ee4LCDAcrFHH&J&J&L+028:288E?;N;N8NP "'rIq!QsI./ $r4   c                 \   [          GHD  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS5      u  pn[        [        R                  " U	5      5      nU
nU" X#XSSS5      u  pnn[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  [        U[        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMG     [         GHR  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS5      u  n	np[        [        R                  " U	5      5      n[        U5      nU
nU" X#UUUSSS5      u  pnn[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  [        U[        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMU     g )Nr   r   r   r   r   r   r   r   )gelsdgelsd_lworkrW   rV   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r6   r   r$   r/   re   intrealr   r   r   r,   )rf   r0   rh   r   r   r   r   r   r   workiworkro   r   
iwork_sizer   srankrwork
rwork_sizes                      r2   
test_gelsd"TestLeastSquaresSolvers.test_gelsd  s    [EC:::'.35B ,E:B!12J35("<E 88DA288}!xx{ !,A$ ;D&EJ$RU%' 7A$AcrFBHH.A.@.B38%: "$BHHUO$7$7!79 Arxx);):)<CH J!#BHHUO$7$7!793 !: $^EHc?$h/$h/18=?B 6eDB!12J35("<E 88DA288}!xx{ (31r'B$D%&EUJJ$RUJ
%' 7A$AcrFHH&J&J&L+028:288E?;N;N8NP AHH&8:K%L+028:288E?;N;N8NP5 $r4   c           	      4   [          GHA  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS5      u  p[        [        R                  " U	5      5      nU" X#SUSS5      u  ppp[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  [        U[        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMD     [         GHA  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS5      u  p[        [        R                  " U	5      5      nU" X#SUSS5      u  ppp[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  [        U[        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMD     g )Nr   r   r   r   r   r   r   r   )gelssgelss_lworkrW   rV   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rf   r0   rh   r   r  r	  r   r   r   r   ro   r   vr   r  r  s                   r2   
test_gelss"TestLeastSquaresSolvers.test_gelss?  s    [EC:::'.35B ,E:B!12J35("<E 88DA288}!xx{ %Q44JD&E(-bb%(N%A!4AcrFBHH.A.@.B38%: "$BHHUO$7$7!79 Arxx);):)<CH J!#BHHUO$7$7!79/ !6 $^EHc?$h/$h/18=?B 6eDB!12J35("<E 88DA288}!xx{ %Q44JD&E(-bb%(N%A!4AcrFHH&J&J&L+02 "$BHHUO$7$7!7	9
 Arxx);):)<CH J!#BHHUO$7$7!791 $r4   c           
         [          GHs  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS[        R                  " U5      R                  -  5      u  p[        [        R                  " U	5      5      n[        R                  " UR                  S   S4[        R                  S9nU" X#U[        R                  " U5      R                  USS5      u  pnnn
[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMv     [         GHs  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS[        R                  " U5      R                  -  5      u  p[        [        R                  " U	5      5      n[        R                  " UR                  S   S4[        R                  S9nU" X#U[        R                  " U5      R                  USS5      u  pnnn
[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMv     g )Nr   r   r   r   r   r   r   r   )gelsyr	  rW   rV   r~   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r6   r   r$   r/   re   r   r   r   r   r   int32r   r,   )rf   r0   rh   r   r  gelsy_lworkr   r   r   r   ro   r   jptvr
  r   jr  s                    r2   
test_gelsy"TestLeastSquaresSolvers.test_gelsyx  s    [EC:::'.35B ,E:B!12J35("<E 88DA288}!xx{ %Q4BHHUO4G4G1GHJD&E88RXXa[!,BHH=D"'bhhuo6I6I(-ue#=A!T4AcrFBHH.A.@.B38%: "$BHHUO$7$7!79+ !4 $^EHc?$h/$h/18=?B 6eDB!12J35("<E 88DA288}!xx{ %Q4BHHUO4G4G1GHJD&E88RXXa[!,BHH=D"'bhhuo6I6I(-ue#=A!T4AcrFHH&J&J&L+02 "$BHHUO$7$7!7	9+ $r4   r   N)	r   r   r   r   r   r  r  r  r   r   r4   r2   r   r      s    B/H:Px79r59r4   r   r0   r/   )rX   rY   )rZ   rW      r  c                 H    [        SU S9nUu  p4U" X4S9u  pV[        US5        g )Ngeqrf_lworkr   r   r   r   r$   r   )r0   r/   r  r   r   r   ro   s          r2   test_geqrf_lworkr    s-     #M%@KDA'KEqr4   c                       \ rS rSrS rSrg)TestRegressioni  c           	         [          H  n[        R                  " SUS9n[        S/U/5      u  n[	        [
        X2SS9  U" U5      u  pEpgU[        ;   a0  [        S/U/5      u  n[	        [
        XSS  USS9  U" USS  USS9  M|  U[        ;   d  M  [        S	/U/5      u  n	[	        [
        XSS  USS9  U	" USS  USS9  M     g )
N)i,  rW   r   gerqfrW   r   orgrqrV   ungrq)r   r6   r   r$   assert_raises	Exceptionr   r,   )
rf   r0   rg   r   rqrz   r   ro   r!  r#  s
             r2   test_ticket_1645TestRegression.test_ticket_1645  s    E/A%wi!5FE)UQ7"'(BT#)7)aS9i23AFbgs!,.()7)aS9i23AFbgs!, r4   r   N)r   r   r   r   r'  r   r   r4   r2   r  r    s    -r4   r  c                       \ rS rSr\R
                  R                  SSS/5      \R
                  R                  SSS/5      S 5       5       rSrg)		TestDpotri  lowerTFcleanc                    [         R                  R                  S5      nUR                  SS9nUR	                  UR
                  5      n[        SU45      u  pgU" XQUS9u  pU" X5      S   n
U(       a>  [        [         R                  " U
5      [         R                  " [        U5      5      5        g [        [         R                  " U
5      [         R                  " [        U5      5      5        g )N*   )rX   rX   size)potrfpotri)r,  r   )r6   r   r   normalr   r   r$   r   r   r   r   )rf   r+  r,  r1   r   rg   dpotrfdpotrir   r>   dpts              r2   test_gh_2691TestDpotr.test_gh_2691  s     ii##B'JJFJ#EE!##J)*<qeDae,Qq!BGGCL"''#a&/:BGGCL"''#a&/:r4   r   N)	r   r   r   r   r@   markparametrizer7  r   r   r4   r2   r*  r*    sF    [[WtUm4[[WtUm4; 5 5;r4   r*  c                       \ rS rSrS rSrg)
TestDlasd4i  c                 P   [         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " [         R                  " [         R                  " USS 5      [         R
                  " S[        U5      S-
  45      45      US S 2[         R                  4   45      n[        USSSSS9n[        U5      n[         R                  " US S S2   US   U[        U5      -  -   /45      n[         R                  " US S S2   S45      n[        S	U45      n/ n	[        SU5       H5  n
U" XU5      nU	R                  US   5        [        US
   S:*  SU
 35        M7     [         R                  " U	5      S S S2   n	[        [         R                  " [         R                   " U	5      5      (       + S45        [#        XIS[         R$                  " [         R&                  5      R(                  -  S[         R$                  " [         R&                  5      R(                  -  S9  g )N)r         @r   r   )g(\@g@g333333皙r   r   rV   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rX   z=LAPACK root finding dlasd4 failed to find the singular value zThere are NaN rootsd   atolr   )r6   r   hstackvstackdiagr   re   newaxisr   concatenater   r$   rangerG   r   anyisnanr   r   float64r   )rf   sigmasm_vecMSMit_lensgmmvcrE  rootsiress               r2   test_sing_val_updateTestDlasd4.test_sing_val_update  s   /*01IIryy"''&2,"7"$((As5zA~+>"?"A BQ

]+- . %Eu#% VnnfTrTlVAYU9K-K,LMNnneDbDk401 6)4q&!A$CLLQ Q1OPQsS	 " "%RVVBHHUO,,.CDEBHHRZZ,@,D,D(D "**!5!9!99	;r4   r   N)r   r   r   r   r\  r   r   r4   r2   r<  r<    s    ;r4   r<  c                   <   \ rS rSr\R
                  R                  S\5      S 5       r\R
                  R                  S\ V VVVs/ s H"  nS  H  nUS:X  a  U[        ;   a  M  X4PM     M$     snnnn 5      \R
                  R                  SSS	/5      \R
                  R                  S
SS/5      S 5       5       5       r
\R
                  R                  S/ SQ/ SQ/ SQ/5      S 5       rS r\R
                  R                  SSS/5      S 5       rSrgs  snnnn f )	TestTbtrsi  r0   c                    U[         ;   a^  [        R                  " / SQ/ SQ/US9n[        R                  " SS/SS/SS	/S
S//US9n[        R                  " SS/SS/SS/SS//US9nOzU[        ;   aa  [        R                  " / SQ/ SQ/ SQ/US9n[        R                  " SS/SS/SS/SS//US9n[        R                  " SS/S S!/S"S#/S$S%//US9nO[	        S&U S'35      e[        S(US9nU" X#S)S*9u  pg[        US+5        [        XdS+S,S-9  g.)/zTest real (f07vef) and complex (f07vsf) examples from NAG

Examples available from:
* https://www.nag.com/numeric/fl/nagdoc_latest/html/f07/f07vef.html
* https://www.nag.com/numeric/fl/nagdoc_latest/html/f07/f07vsf.html

)p=
ףgQ@gHzG@g{Gz?)g      gq=
ףp@gHzGr   r   gp=
ף0ra  g(\+gףp=
0g333333*@g(\gHzG,gQ#rY   rV   r   rX   rW   r"  )y
ףp=
Q@y{Gz@GzyQ?HzGy)\(??)yQQ@yq=
ףpGz@yףp=
?{Gzr   )yQ?q=
ףp@y)\(zGr   r   yQ!
ףp=
yףp=
8Gzyp=
#/)\h7y\(LHzG @yQHz6@yףp=
3@(\=y{Gz-333333yQ+3@GzT5@y               @y      ?      @y      ?      y             yt&m=#yi6@Ug$B@y[a^C?b->y-@ji& *!z	Datatype z not understood.tbtrsLabr   uplor   h㈵>r   rH  N)r   r6   r   r,   
ValueErrorr$   r   r   )rf   r0   rf  r   x_outrc  r   ro   s           r2   test_nag_example_f07vef_f07vsf(TestTbtrs.test_nag_example_f07vef_f07vsf  sy    K424 %'B 65/!6* %.!5/+  %	&A
 HHq!f!2h !f "g' $)	*E
 n$KF:< !&'B =.9*N;)>:)>:<  %	&A
 HHr6l%w/46JK35JKM $)	*E y/?@AA '%82-T1qt4r4   zdtype,trans)Nr   r   r   rg  Urd  rK  rn  c           	      h   [         R                  R                  S5      nSu  pgn[        SUS9n	US:H  n
X-  nX-
  n[	        X* S-
  S5      nU Vs/ s H  o[        U5      -
  PM     nnU Vs/ s H  n[        U4X5      PM     nnUS:X  a  [         R                  " XaS9UU'   [        R                  " UUSS	9n[         R                  " US-   U4U5      n[        U5       H5  u  nnUR                  U5      UU[        US
5      [        UU-   U5      24'   M7     [        Xg4X5      nU	" UUX2US9u  nn[        US
5        US:X  a  [!        UU-  USS9  g US:X  a  [!        UR"                  U-  USS9  g US:X  a'  [!        UR"                  R%                  5       U-  USS9  g ['        S5      es  snf s  snf )Ni  )rY   rX   rW   rc  r   ro  rV   r   dia)formatr   )rf  r   rg  r   rK  rn  g-C6
?r   r   r   zInvalid trans argument)r6   r   RandomStater$   rN  r   r3   r   spsdiagsr   r   diagonalr   minr   r   r   r   rj  )rf   r0   r   rg  rK  r1   r   r   kdrc  is_upperkuklband_offsetsr   band_widthswidthbandsrg   rf  rowkr   ro   s                           r2   test_random_matricesTestTbtrs.test_random_matrices4  s    ii##D)
  6CK]W Rq"-+78<a3q6z<8)+)U -eXuB) 	 + 3;/E"I IIe\%8 XXrAvqk5)-FC-.ZZ]BsC1Ic!A#qk))* . (	5>2F4T1C<AE140c\ACC!GQT2c\ACCMMOa/>5669 9+s   F*-F/zuplo,trans,diag)ro  rn  Invalid)ro  r  rn  )r  rn  rn  c           	          [        S[        R                  S9n[        R                  R	                  S5      nUR                  S5      nUR                  S5      n[        [        XFXqX#5        g)z?Test if invalid values of uplo, trans and diag raise exceptionsrc  r   r   )rY   rW   )rW   rY   N)r$   r6   rQ  r   r   r$  r%  )rf   rg  r   rK  rc  r1   rf  r   s           r2   &test_invalid_argument_raises_exception0TestTbtrs.test_invalid_argument_raises_exceptionh  sR     !

;ii##D)ZZJJviAUAr4   c                     [         R                  " S[        S9n[         R                  " S[        S9n[        S[        S9nSUS'   U" XSS9u  pE[	        US5        g	)
a(  Test if a matrix with a zero diagonal element is singular

If the i-th diagonal of A is zero, ?tbtrs should return `i` in `info`
indicating the provided matrix is singular.

Note that ?tbtrs requires the matrix A to be stored in banded form.
In this form the diagonal corresponds to the last row.r  r   rY   rc  r   )r   rX   ro  re  N)r6   r   floatr$   r   )rf   rf  r   rc  r>   ro   s         r2   test_zero_element_in_diagonal'TestTbtrs.test_zero_element_in_diagonalv  sQ     WWV5)GGAU# 65	2-T1r4   zldab,n,ldb,nrhs)rZ   rZ   r   rZ   )rZ   rZ   rX   rZ   c                     [         R                  " X4[        S9n[         R                  " X44[        S9n[        S[        S9n[	        [
        XuU5        g)z2Test ?tbtrs fails correctly if shapes are invalid.r   rc  Nr6   r   r  r$   r$  r%  )rf   ldabr   ldbr   rf  r   rc  s           r2   test_invalid_matrix_shapes$TestTbtrs.test_invalid_matrix_shapes  s@     WWdYe,GGSKu- 6iA.r4   r   N)r   r   r   r   r@   r9  r:  r   rl  r   r  r  r  r  r   ).0r0   r   r   s   0000r2   r_  r_    s8   [[Wf-+5 .+5Z [[]+1N+1%e&+slu7K -un?N -+1NO [[Vc3Z0[[Vc3Z0,7 1 1	O,7\ [[.33356B	6B  [[.**1 /	/kNs   D$Dr_  r   )I1Org  ro  rd  rK  rn  r   rX   r~   c           	      t   [        U  U U U U 3R                  5       5      n[        R                  R	                  U5      nUR                  XD4S9UR                  XD4S9S-  -   nUR                  [        R                  " SUR                  SS5      U5      5      nXx-  n[        R                  " U [        R                  5      (       a  UR                  OUnUS:X  a  [        R                  " U5      O[        R                  " U5      nUS:X  a.  U[        R                  " U5      S S 2[        R                  4   -  nUR                  U 5      n[!        SU45      n	U	" XqX#S9u  pUS:X  a}  [        R"                  R%                  U[        R&                  S	9n[        R"                  R%                  [        R"                  R)                  U5      [        R&                  S	9nS
X-  -  nOC[        R"                  R%                  US
S	9n[!        SU45      u  nnU" U5      u  nnnU" UXS9u  pS
n[+        XUS9  g )Nr/  r+   r   r~   ro  trcon)r   rg  rK  r  ordrV   gecongetrfr   r   )rD   encoder6   r   r   permutedlogspaceintegers
issubdtypefloatingr   r   r   rK  rL  r.   r$   linalgr   infr   r   )r0   r   rg  rK  r   seedr1   Aoffsetr  r[  r>   norm_A
norm_inv_Ar   anormr  r  luipvtro   r   s                         r2   
test_trconr    s    5'$vdVA3/6689D
))


%C


#**1&*"9""<<A\\"++aa)<a@AFKA--r{{33Ack
rwwqzAs{	RWWQZ2::&&	AWqd+E1d6FCs{rvv.YY^^BIIMM!$4"&&^A
6&'		qa('(:QDAuqD$r5,
 DC4(r4   c                     S H  n [        SU S9n[        R                  " SU 5      n[        R                  " SU 5      n[        R                  " U5      (       a  US-  nU" X#5      u  pEn[	        US5        [	        US5        [        R                  " U5      (       a@  [	        US	5        [        [        U[        5      5        [        [        U[        5      5        M  [	        US
5        M     g )Nr   lartgr   rX   rY   r+   333333?r   y       皙?)	r$   r6   r   iscomplexobjr   r   
isinstancecomplexr  )r0   r  rj   gcssnrs          r2   
test_lartgr    s     6HHQHHQ??1GA!K	G$3??1B	*Jq'*+Jr5)*B(' r4   c                     S GHz  n SnSn[         R                  " SSU 5      n[         R                  " SSU 5      nS[         R                  " U 5      R                  S-
  * -  nU S;   a  [	        S	U S
9nSnO[        S	U S
9nUS-  nUS-  nSn[        U" X4X5      / SQ/ SQ/US9  [        U" X4XSS9/ SQSSXw//US9  [        U" X4XSSS9/ SQXwSS//US9  [        U" X4XSSSS9/ SQXwSS//US9  [        U" X4XSSSS9/ SQSUSU//US9  [        U" X4XSSSSSS9	/ SQXwSU//US9  [        U" X4XSSSS9/ SQSUSU//US9  U" X4XSSS9u  p[        XL 5        [        XL 5        [        U/ SQUS9  [        U	/ SQUS9  GM}     g )Nr   r  r  rY   rX   r~   rV   fdrotr   y             r+   y              @)rZ   rZ   rZ   rZ   )r   r   r   r   rH  rW   )r   )rZ   rZ   rX   rX   r   )offxoffy)rX   rX   rZ   rZ   )incxr  r   )rZ   rX   rZ   rX   )r  incyr   )r  r  r  r  r   )rX   rX   rZ   rX   r"  )r  r  r   )overwrite_xoverwrite_y)r6   fullr   	precisionr%   r$   r   r   )
r0   r   r  ur
  rH  r  rj   rg   r   s
             r2   test_rotr    s    GGAq% GGAq% RXXe_..q011D= e4CA"56CHAGAAA!,*6*8>B	DA!!,|011a|/=CG	IA!QQ7%a|44	AA!QQ!<%a|44	AA!QQ!<%1a|44	AA!QQQQ!L%a|44	AA!RbA>%1a|44	A 11!<<d3<d3I r4   c            
         [         R                  R                  S5      n U R                  S5      nUR                  R	                  U5      nU R                  S5      SU R                  S5      -  -   nUR                  R                  5       R	                  U5      nS GHZ  n[        SS/US9u  pEUS;   a  UR                  5       nOUR                  5       nU" UR                  S	   S
-
  US   USS 2S	4   5      u  pxn	[         R                  " US S 2S	4   5      n
US   U
S	'   XzS
'   [         R                  " US
S 2S	4   5      nSUS	'   XS
S & U" XR                  5       US
S 2S S 24   [         R                  " UR                  S
   5      5      US
S 2S S 24'   U" XUS S 2S
S 24   [         R                  " UR                  S	   5      SS9US S 2S
S 24'   [        US S 2S	4   U
SS9  [        US	S S 24   U
SS9  GM]     g )Nr   )rY   rY   r+   r   larfglarfr   FDr   rV   rV   r   rW   r   r   Rsiderh  r  )r6   r   r   r   r   conjr$   copyr/   r   r   r   r   )r1   a0a0jr0   r  r  rg   alphar   rz   expectedr
  s               r2   test_larfg_larfr    s   
))


%C	F	B	"B
**V
r#**V"44
4C
%%**,

3
C
 &'8FD=
A	A aggajlAdGQqr1uX># ==1a4)g MM!ABE(#!!" ==?Aab!eHbhhqwwqz6JK!"a% !QR%"((1771:*>SI!QR%!Q$5!Q$59 r4   c                  p    [        S[        R                  SS9n Sn[        XUSSS9nUS:X  d	  US:X  d   eg g )	Ngesdd_lwork	preferredr0   ilp64iA%  T)rA  r@  i`DiD)r$   r6   float32r    )sgesdd_lworkr   r   s      r2    test_sgesdd_lwork_bug_workaroundr  &  sO     $M*57LA<A&*$@E  I)!333!3r4   c                       \ rS rSr\R
                  R                  S\5      S 5       r\R
                  R                  S\5      \R
                  R                  SS5      S 5       5       r	Sr
g)		TestSytrdiB  r0   c                 h    [         R                  " SUS9n[        SU45      n[        [        X25        g )Nr   r   sytrdr6   r   r$   r$  rj  )rf   r0   r  r  s       r2   test_sytrd_with_zero_dim_array(TestSytrd.test_sytrd_with_zero_dim_arrayC  s,     HHV5) 1$/j%+r4   r   rV   rX   c                 B   [         R                  " X"4US9n[        SU45      u  pE[         R                  " SX"S-   -  S-  S-   US9U[         R                  " U5      '   U" U5      u  pg[        US5        U" USUS9u  ppn[        US5        [        XS[         R                  " U5      R                  -  SS	9  [        U	[         R                  " U5      5        [        U
S
5        [        US
5        U" X6S9u  ppn[        US5        [         R                  " X1S9n[         R                  " UR                  S   5      nXX4'   [         R                  " UR                  S   S-
  5      nXUS-   U4'   XXS-   4'   [         R                  " X"US9n[        US-
  5       Hu  n[         R                  " X!S9nUS U2US-   4   US U& SUU'   [         R                  " X"US9UU   [         R                  " UU5      -  -
  n[         R                  " UU5      nMw     [         R                   " US5      nUR"                  U   UU'   [         R                  " UR"                  [         R                  " X?5      5      n[        UUS[         R                  " U5      R                  -  SS	9  g )Nr   )r  sytrd_lworkrV   rW   r   r+  r   rZ   r   rG          r   r   )r6   r   r$   arangetriu_indices_fromr   r   r   r   rK  r   r/   r   rN  outerr   r   r   )rf   r0   r   r  r  r  r   ro   datarw   erz   r   r  k2QrZ  r
  Hi_lowerQTAQs                        r2   
test_sytrdTestSytrd.test_sytrdJ  sO    HHaV5) 5t< 	
 IIaaC!AU3 	
"

q
!" "!nT1 !&aq >T1a(;(;&;#F2771:&3S! !&a 5T1
 MM!)IIaggaj!!$YYqwwqz!|$"Q$("d( FF1u%qsA(A!QqSMAbqEAaDq5)CFRXXa^,CCAq!A  //!R(SS\'
vvacc266!<( 	aa(;(;&;#Fr4   r   N)r   r   r   r   r@   r9  r:  r   r  r  r   r   r4   r2   r  r  B  se    [[Wk2, 3, [[Wk2[[S&)7G * 37Gr4   r  c                       \ rS rSr\R
                  R                  S\5      S 5       r\R
                  R                  S\	" \
\5      5      \R
                  R                  SS5      S 5       5       rSrg	)
	TestHetrdi  complex_dtypec                 h    [         R                  " SUS9n[        SU45      n[        [        X25        g )Nr   r   hetrdr  )rf   r  r  r  s       r2   test_hetrd_with_zero_dim_array(TestHetrd.test_hetrd_with_zero_dim_array  s,     HHV=1 1$/j%+r4   zreal_dtype,complex_dtyper   r  c           	         [         R                  " X4US9n[        SU45      u  pV[         R                  " SXS-   -  S-  S-   US9S[         R                  " SXS-   -  S-  S-   US9-  -   U[         R                  " U5      '   [         R
                  " U[         R                  " [         R                  " U5      5      5        S H  nU" XS9u  p[        U	S5        M     [        Xa5      n
U" USU
S	9u  ppn	[        U	S5        [        XS
[         R                  " U5      R                  -  SS9  [        U[         R                  " [         R                  " U5      5      5        [        US5        [        US5        U" XJS9u  ppn	[        U	S5        [         R                  " XBS9n[         R                  " UR                  S   [        S9nXUU4'   [         R                  " UR                  S   S-
  [        S9nXUS-   U4'   XUUS-   4'   [         R                   " XUS9n[#        US-
  5       H  n[         R                  " XS9nUS U2US-   4   US U& SUU'   [         R                   " XUS9UU   [         R$                  " U[         R&                  " U5      5      -  -
  n[         R(                  " UU5      nM     [         R*                  " US5      n[         R&                  " UR,                  U   5      UU'   [         R(                  " [         R&                  " UR,                  5      [         R(                  " UU5      5      n[        UUS[         R                  " U5      R                  -  SS9  g )Nr   )r  hetrd_lworkrV   rW   r+   r   rV   r+  r   r  rZ   r   rG  r  r   r   r~   )r6   r   r$   r  r  fill_diagonalr   rK  r   r    r   r   r   r   r/   r   r   rN  r  r  r   r   r   )rf   r   
real_dtyper  r  r  r   r   r>   ro   r   r  rw   r  rz   r   r  r  r  rZ  r
  r  r  QHAQs                           r2   
test_hetrdTestHetrd.test_hetrd  s    HHaV=15t< 	
 IIaaC!AZ8299QQ3
1J??@ 	
"

q
!" 	BGGBGGAJ/0 A!!-GAq! 
 {. !&aq >T1a(<(@(@&@sK2772771:./3S! !&a 5T1
 MM!.IIaggaj,!Q$YYqwwqz!|3/"Q$("bd( FF1}-qsA0A!QqSMAbqEAaDq=1a&288Arwwqz223Aq!A  //!R(WWQSS\*'
vvbggacclBFF1aL1 	!"RXXj1555C	r4   r   N)r   r   r   r   r@   r9  r:  r,   r  zipr   r  r   r   r4   r2   r  r    sp    [[_n=, >, [[7 n=?[[S&)A *?Ar4   r  c            
         [        [        5       GHB  u  p[        SUS9u  p#[        USSSS9nU S:  aV  [        R
                  " / SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/US9n[        R
                  " / SQUS9n[        R
                  " SS/US9nO_[        R
                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R
                  " S/S/S/S/S/S//5      n[        R                  " SUS9n[        R
                  " / SQ/ SQ/US9nU" XXXgUS9u      pn	U S:  a  [        R
                  " / SQ5      nO[        R
                  " / SQ5      n[        XSS 9  GME     g )!N)gglsegglse_lworkr   r[   rY   rW   )r   r   ri   )g=
ףp=g{Gzg(\ؿ      ?)zGgHzG?gףp=
ӿQ)ffffff@gQ?g?gffffffֿ)r  g{Gz?Qg{Gz?)333333?g333333?r  g
ףp=
)g{Gz{Gz?gzG      ?)g      r  gGz?gHzGgzGg=
ףp=?r  )yQ?QyQQ?yQ{Gz @y=
ףp=?)y\(\￮Gz?y333333RQ?yQzG?yQQ?)yףp=
?q=
ףpݿy)\(?{Gz?y)\(?(\ſy(\333333?)yGz?RQ?yRQ?HzGy\(\
ףp=
׿y)\(?ɿ)y(\?RQ?y?{Gz?y(\ſq=
ףpݿyQ?q=
ףp?)yHzG?Qѿy?QyQ뱿Gz?yp=
ף?p=
ף?yRQ
ףp=
?yffffff?GzyzG GzyQ?ffffff
@yp=
ף)\(@y(\ @Q?)r   r        r  )r  r   r  r  r   )^"L?\}?r  r  )y!f?$_Kdy^gŵ翸F@y!f?}dy61ŵe_@r   )r   r   r$   r    r6   r   r   r   )r   r0   func
func_lworkr   rg   r   rw   r   r>   resultr  s               r2   
test_gglser    sg   '
+,D279zQ!q975534346
 >CDA AOA"b/A MNKKKKM NA ;-%,&-%,&-%,( )A %(AHH'):;5I!!E:1a7xx !- .H
 xx !: ;H 	"&A>Y (r4   c                     [         R                  R                  S5      n [        [        [
        -   5       GH1  u  pSnUS:  a8  [        SUS9n[        SUS9u  pVU R                  X345      R                  U5      nOM[        SUS9n[        SUS9u  pVU R                  X345      U R                  X345      S	-  -   R                  U5      nXwR                  5       R                  -   S
-  S
[         R                  " X2S9-  -   n[        US5      n[        XC5      n	U" XySS9u  pnU" XUSS9u  p[        [        SU-  [         R                  R!                  USS9-
  5      U-  S:  5        GM4     g )Nr   r~   rY   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr+   rW   rV   r   r+  )rg   ipivr  r+  ri   )r6   r   r   r   r   r,   r$   r.   r  r   r   r   r    r   r   r  cond)r1   r   r0   r   r  funconfunctrfr  r  r   ldur#  r>   rconds                 r2   test_sycon_heconr*    sL   
))


%C~ 56
7)-uEJ./AOOFQF#++E2A *-uEJ./AOOFQF#cjj!&8&;;CCEJA ^Q266!#9!99Q
z-qQ71C%qAAeGbiinnQ!n445e;a?@- 7r4   c                  `   [         R                  R                  S5      n [        [        5       H  u  pSn[        SUS9u  pEpgU R                  X345      R                  U5      nXR                  -   S-  nU R                  X345      R                  U5      n	XR                  -   S-  S[         R                  " X2S9-  -   n	U" X5      u  pn[        US:H  5        U" U	5      u  p[        US:H  5        U" X5      u  p[        US:H  5        U" U5      u  pn[        US:H  5        [        XSS9  M     g )	Nr   r~   )r1  sygstsyevdsygvdr   rW   r   giUMu?r   )r6   r   r   r   r   r$   r.   r   r   r   r   )r1   r   r0   r   r1  r,  r-  r.  r  Beig_gvdr>   ro   r   rg   eigs                   r2   
test_sygstr2  !  s   
))


%C,
%5 7I<A&C"e JJv%%e,WaKJJv%%e,WaK!bffQ444 !;D	 (	+	Qx	625 -r4   c                  0   [         R                  R                  S5      n [        [        5       GHc  u  pSn[        SUS9u  pEpgU R                  X345      R                  U5      SU R                  X345      R                  U5      -  -   nXR                  5       R                  -   S-  nU R                  X345      R                  U5      SU R                  X345      R                  U5      -  -   n	XR                  5       R                  -   S-  S[         R                  " X2S9-  -   n	U" X5      u  pn[        US:H  5        U" U	5      u  p[        US:H  5        U" X5      u  p[        US:H  5        U" U5      u  pn[        US:H  5        [        XSS	9  GMf     g )
Nr   r~   )r1  hegstheevdhegvdr   r+   rW   r   -C6?r   )r6   r   r   r   r,   r$   r.   r  r   r   r   r   )r1   r   r0   r   r1  r4  r5  r6  r  r/  r0  r>   ro   r   rg   r1  s                   r2   
test_hegstr8  @  sk   
))


%C/
%5 7I<A&C"e JJv%%e,rCJJv4F4M4Me4T/TT^QJJv%%e,rCJJv4F4M4Me4T/TT^QRVVA%;!;; !;D	 (	+	Qx	405 0r4   c                  n   [         R                  R                  S5      n Su  p[        [        5       GH  u  p4[        SUS9u  pV[        XaU5      nUS:  a*  [        U R                  X5      R                  U5      5      nO>[        U R                  X5      U R                  X5      S-  -   R                  U5      5      n[        [        XXR                  5        U" XS9u  pn[        US:H  5        [         R                  " U	S	S	2S	U24   [         R                  " XU-
  4US945      n[         R                  " [         R                   " XS9U	S	S	2US	24   45      n[         R                   " X$S9n[#        U5       Vs/ s HA  oX   X/S	S	24   R                  R%                  X/S	S	24   R'                  5       5      -  -
  PMC     nn[)        [         R$                  U5      n[+        UR%                  U5      U-
  [-        XS9S
[         R.                  " U" S5      R0                  5      -  SS9  GM     g	s  snf )z
This test performs an RZ decomposition in which an m x n upper trapezoidal
array M (m <= n) is factorized as M = [R 0] * Z where R is upper triangular
and Z is unitary.
r   r~      tzrzftzrzf_lworkr   rW   r+   r   r   Nr~   r   r  rG  )r6   r   rs  r   r   r$   r    r   r-   r.   r$  r%  r   r   rI  r   r   rN  r   r  r   r   r   spacingr   )r1   r   r   r   r0   r=  tzrzf_lwr   r  rzrz   ro   r  VIdr   r   Zs                     r2   
test_tzrzfrE  _  s    ))


%CDA'
*+C168xA.7SXXa^**512Achhqnsxx~b'88@@GHA 	i,a-	 IIr!RaR%y"((As85"ABCIIrvva-r!QR%y9:VVA#DI!HMHq#&3636)9:::HM2663a1j&@

5:?? ;;"	F- (( Ns   <AH2c            
         [         R                  R                  S5      n [        [        5       GH  u  pSnUS:  aM  [        U R                  X35      U R                  X35      S-  -   [        U5      -   5      R                  U5      nSnO7[        U R                  X35      [        U5      -   5      R                  U5      nSn[        SUS9u  pgnU" U5      u  pU R                  US	5      R                  U5      nU" S
X5      n[        U[        U* U5      US	-  S:X  a  SOSS9  U" S
XUS9n[        U[        UR                  5       R                  * U5      US	-  S:X  a  SOSS9  U" S5      U[         R                  " U5      [         R                  " U5      4'   U" S
XUSS9n[        U[        UR                  5       R                  * U5      US	-  S:X  a  SOSS9  U R                  SU5      R                  U5      nU" S
XUSSS9n[        U[        U* UR                  5      R                  5       R                  US	-  S:X  a  SOSS9  GM     g)zx
Test for solving a linear system with the coefficient matrix is a
triangular array stored in Full Packed (RFP) format.
r   r   rV   r+   r   r   )trttftfttrtfsmr   rW   r   r   rY   r[   r   r   r   ro  )r   rK  rX   r  )r   rK  r  N)r6   r   rs  r   r   r   r-   r   r.   r$   r   r   r  r   r  )r1   r   r0   r   r  r   rG  rH  rI  Afpr>   r/  solnB2s                 r2   	test_tfsmrN    s   
 ))


%C'
7SXXa^chhqnR&77#a&@AHHOAESXXa^c!f,-44U;AE-.H49;d qHHQN!!%(B!$qb!/2Qw!|!	D Be,!$qvvxzzk1(=/2Qw!|!	D ).b	"))A,		!
$%Be#6!$qvvxzzk1(=/2Qw!|!	D XXa^""5)Bu3SA!$qb"$$(<(<(>(@(@/2Qw!|!	D? (r4   c                     [         R                  R                  S5      n Su  pn[        [        5       GH6  u  pE[        SUS9u  pg[        XqU5      nUS:  aX  [        U R                  X45      R                  U5      5      n	U R                  X345      R                  U5      n
[        SUS9u  pO[        U R                  X45      U R                  X45      S-  -   R                  U5      5      n	U R                  X345      U R                  X345      S-  -   R                  U5      n
[        SUS9u  p[        XU5      nU" XS	9u  pn[         R                  " [         R                  " XS9US
S
2US
24   45      n[         R                  " X%S9n[        U5       Vs/ s HE  nUUU   UU/S
S
24   R                  R                  UU/S
S
24   R                  5       5      -  -
  PMG     nn[        [         R                  U5      nUS:  a  SOSnS[         R                   " U" S5      R"                  5      -  nU" XXS	9u  nn[%        US:H  5        ['        UUR                  U
5      -
  [)        U
5      USS9  U" XU
UUS9u  nn[%        US:H  5        ['        UUR                  5       R                  R                  U
5      -
  [)        U
5      USS9  U" XU
SUS9u  nn[%        US:H  5        ['        UU
R                  U5      -
  [)        U
5      USS9  U" XU
SUUS9u  nn[%        US:H  5        ['        UU
R                  UR                  5       R                  5      -
  [)        U
5      USS9  GM9     g
s  snf )a  
This test performs a matrix multiplication with an arbitrary m x n matrix C
and a unitary matrix Q without explicitly forming the array. The array data
is encoded in the rectangular part of A which is obtained from ?TZRZF. Q
size is inferred by m, n, side keywords.
r   )r~   r;  r;  r<  r   rW   )ormrzormrz_lworkr+   )unmrzunmrz_lworkr   Nr   r   r~   r   r   r  rG  r   r  )r  r   )r  r   r   )r6   r   rs  r   r   r$   r    r   r.   rI  r   rN  r   r   r  r   r?  r   r   r   r   )r1   qmqncnr   r0   r=  r@  lwork_rzr  r   orun_mrzorun_mrz_lw	lwork_mrzrA  rz   ro   rB  rC  r   r   r  r   tolcqs                            r2   test_ormrz_unmrzr]    s    ))


%CJBB'
*+C168!(37SZZ)0078A

B8$++E2A$45M;@%B!Hk cjj"*SZZ-A"-DDLLUSTARH%

B8(<R(??GGNA$45M;@%B!H #;B7	a0 IIrvvb.1bc6
;<VVB$DI"INIqr#a&A36A36)9:::IN2663 QwCE#JOO,,BQ8D	QUU1Xz!}3RHBQe9ED	QVVXZZ^^A..
1C	! BQS	BD	QUU1Xz!}3RHBQSYOD	QUU1668::..
1C	![ (, Os   AM0c            	         [         R                  R                  S5      n [        [        5       GH  u  pSnUS:  a8  U R                  X35      U R                  X35      S-  -   R                  U5      nSnO"U R                  X35      R                  U5      nSn[        SUS9u  pgU" U5      u  p[        U	S	:H  5        U" US
S9u  p[        U	S	:H  5        U" XESS9u  p[        U	S	:H  5        U" XES
S9u  p[        U	S	:H  5        [        US-   US-  4US9n[        U5      SS2US-  S24   USS2SS24'   XS-  S-   S2SS24==   [        U5      SUS-  2SUS-  24   R                  5       R                  -  ss'   [        US-   US-  4US9n[        U5      SS2SUS-  24   USS2SS24'   USUS-  2SS24==   [        U5      US-  S2US-  S24   R                  5       R                  -  ss'   [        XR                  SSS95        [        UUR                  5       R                  R                  SSS95        [        XR                  SSS95        [        UUR                  5       R                  R                  SSS95        U" X85      u  p[        U	S	:H  5        U" X:S
S9u  nn	[        U	S	:H  5        U" X;USS9u  nn	[        U	S	:H  5        U" X<US
S9u  nn	[        U	S	:H  5        [        U[        U5      5        [        U[        U5      5        [        U[        U5      5        [        U[        U5      5        GM     g)n
Test conversion routines between the Rectangular Full Packed (RFP) format
and Standard Triangular Array (TR)
r   r   rV   r+   r   r   )rG  rH  r   r   rd  rg  ro  )transrrg  rW   Nr   F)order)r6   r   rs  r   r   r-   r.   r$   r   r   r   r  r   r   r   reshape)r1   r   r0   r   A_fullra  rG  rH  A_tf_Uro   A_tf_LA_tf_U_TA_tf_L_TA_tf_U_mA_tf_L_mA_tr_UA_tr_LA_tr_U_TA_tr_L_Ts                      r2   test_tfttr_trttfrp    s-   
 ))


%C'
7hhqnsxx~b'88@@GFFhhqn,,U3FF'(:%HV}	V#.	v3?	v3?	 !A#q!tE2<1a451"aAa!VUadUEQTE\ : ? ? A C CC!A#q!tE2v,q%1a4%x0Q!Q$d6l1a45!Q$%<8==?AAA!&*:*:2S*:*IJ!("*--/"3"3";";Bc";"J	L 	"&*:*:2S*:*IJ!("*--/"3"3";";Bc";"J	L Q'	QS1	q6D$	q6D$	!&$v,7!(DL9!&$v,7!(DL9c (r4   c                  f   [         R                  R                  S5      n [        [        5       GH~  u  pSnUS:  a6  U R                  X35      U R                  X35      S-  -   R                  U5      nO U R                  X35      R                  U5      n[        SUS9u  pVU" U5      u  px[        US:H  5        U" USS	9u  p[        US:H  5        [        U5      n
[        X3S-   -  S
-  US9n[        U5      R                  U
   USS& [        U5      n
[        X3S-   -  S
-  US9n[        U5      R                  U
   USS& [        X{5        [        X5        U" X75      u  p[        US:H  5        U" X9SS	9u  p[        US:H  5        [        U[        U5      5        [        U[        U5      5        GM     g)r_  r   r   rV   r+   )trttptpttrr   r   rd  r`  rW   N)r6   r   rs  r   r   r-   r.   r$   r   r   r   r   r   r   r   r   )r1   r   r0   r   re  rr  rs  A_tp_Uro   A_tp_LindsA_tp_U_mA_tp_L_mrl  rm  s                  r2   test_tpttr_trttpry    s   
 ))


%C'
7hhqnsxx~b'88@@GFhhqn,,U3F'(:%HV}	V#.	 AaC!51F|~~t,AaC!51F|~~t,!&3!&3 Q'	QS1	!&$v,7!&$v,7A (r4   c                  \   [         R                  R                  S5      n [        [        5       H  u  pSnUS:  aa  U R                  X35      U R                  X35      S-  -   R                  U5      nXDR                  5       R                  -   U[        U5      -  -   nO=U R                  X35      R                  U5      nXDR                  -   U[        U5      -  -   n[        SUS9u  pVnU" U5      u  pU" X85      u  p[        U	S:H  5        U" X:5      u  p[        U5      n[        X5        M     g)	z_
Test Cholesky factorization of a positive definite Rectangular Full
Packed (RFP) format array
r   r   rV   r+   )pftrfrG  rH  r   r   N)r6   r   rs  r   r   r-   r.   r  r   r   r$   r   r   r   )r1   r   r0   r   r  r{  rG  rH  rK  ro   	Achol_rfpA_chol_rr>   Achols                 r2   
test_pftrfr  G  s   
 ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("A./J5:<e !H	-		A)!(2% (r4   c                     [         R                  R                  S5      n [        [        5       GH  u  pSnUS:  aa  U R                  X35      U R                  X35      S-  -   R                  U5      nXDR                  5       R                  -   U[        U5      -  -   nO=U R                  X35      R                  U5      nXDR                  -   U[        U5      -  -   n[        SUS9u  pVpxU" U5      u  pU" X95      u  pU" X;5      u  p[        U
S:H  5        U" X<5      u  p[        U5      n[        U[        U5      US-  S:X  a  S	OS
S9  GM     g)zs
Test Cholesky factorization of a positive definite Rectangular Full
Packed (RFP) format array to find its inverse
r   r   rV   r+   )pftrir{  rG  rH  r   r   rW   rY   r[   r   N)r6   r   rs  r   r   r-   r.   r  r   r   r$   r   r   r   r   )r1   r   r0   r   r  r  r{  rG  rH  rK  ro   
A_chol_rfp	A_inv_rfpA_inv_rr>   Ainvs                   r2   
test_pftrir  b  s/   
 ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("A%5 7@ =B	&C"e !H	 =
.		1(
1v!'4:/2Qw!|!	D- (r4   c                     [         R                  R                  S5      n [        [        5       GHY  u  pSnUS:  aa  U R                  X35      U R                  X35      S-  -   R                  U5      nXDR                  5       R                  -   U[        U5      -  -   nO=U R                  X35      R                  U5      nXDR                  -   U[        U5      -  -   n[        US4US9n[        US-   S4US9n[        US-
  S4US9n[        SUS9u  ppU
" U5      u  pU	" X<5      u  pU" X>U5      u  p[        US	:H  5        [        [        XX5        U" X>U5      u  p[        US	:H  5        [        [!        XE5      UUS-  S	:X  a  S
OSS9  GM\     g)zy
Test Cholesky factorization of a positive definite Rectangular Full
Packed (RFP) format array and solve a linear system
r   r   rV   r+   rX   r   rW   )pftrsr{  rG  rH  r   rY   r[   r   N)r6   r   rs  r   r   r-   r.   r  r   r   r   r$   r   r$  r%  r   r   )r1   r   r0   r   r  r/  Bf1Bf2r  r{  rG  rH  rK  ro   r  rL  s                   r2   
test_pftrsr    sz   
 ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("A!Qu%AaC85)AaC85)%5 7@ =B	&C"e !H	 =
1#.
	i:;1!,
	!%+t/2Qw!|!	D7 (r4   c            
         [         R                  R                  S5      n [        [        5       GHX  u  pSnUS:  aa  U R                  X35      U R                  X35      S-  -   R                  U5      nXDR                  5       R                  -   U[        U5      -  -   nO=U R                  X35      R                  U5      nXDR                  -   U[        U5      -  -   nUS:  a  SOSn[        SS	U S
34US9u  pgnU" U5      u  pU R                  US5      R                  U5      nU" USSUSU	5      nU" X<5      u  p[        U[        UR                  UR                  5       R                  5      * SU-  -   5      US-  S:X  a  SOSS9  GM[     g)zL
Test for performing a symmetric rank-k operation for matrix in RFP format.
r   r   rV   r+   rW   r  hrG  rH  frkr   r   r   rY   r[   r   N)r6   r   rs  r   r   r-   r.   r  r   r   r$   r   r   r   )r1   r   r0   r   r  prefixrG  rH  shfrkrK  r>   r   Afp_outA_outs                 r2   test_sfrk_hfrkr    sb    ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("AQwC.VHC./Q5:<e qHHQN!!%(1b!Q,$!%quuQVVXZZ/@.@1Q3.F)G/2Qw!|!	D# (r4   c            
      r   [         R                  R                  S5      n [        [        5       GH  u  pSnUS:  aX  U R                  SSX345      U R                  SSX345      S-  -   R                  U5      nXDR                  5       R                  -   nO@U R                  SSX345      R                  U5      nXDR                  -   U[        U5      -  -   nS[         R                  " U" S5      R                  5      -  n[        S	US
9u  pgn[        XSS9n	[        USSS9u  pn[        XSS9n	U" USU	S9u  pnU" XSS9u  nnn[        [!        US5      [!        XSS24   S5      USS9  [        USSS9u  npU" USS9u  pnU" XSS9u  nnn[        [#        US5      [#        UUSS24   S5      USS9  GM     g)zh
Test for going back and forth between the returned format of he/sytrf to
L and D factors/permutations.
r   r~   rV   i   r+   rF  r   )syconvr  r  r   r  F)r+  	hermitianr  r   Nr  rG  r   )r6   r   rs  r   r   randintr.   r  r   r   r?  r   r$   r    r   r   r   r   )r1   r   r0   r   r  r[  r  trf	trf_lworklwrd  Dpermr(  r#  ro   rg   r  ro  s                      r2   test_syconvr    s   
 ))


%C'
7S"qf-S"qf-b0128&-  FFHJJACaV,33E:ACC!CF("A"**U3Z__--!1 3BIN"PYI2!u5
dI2aq34CQ/
1dQd11W:r&:2N !u5
1aq/4CQ/
1dQ
D47Q$7cK5 (r4   c                   $    \ rS rSrSrS rS rSrg)TestBlockedQRi  zX
Tests for the blocked QR factorization, namely through geqrt, gemqrt, tpqrt
and tpmqr.
c                 ^   [         R                  R                  S5      n[        [        5       GHz  u  p#SnUS:  a6  UR                  XD5      UR                  XD5      S-  -   R                  U5      nO UR                  XD5      R                  U5      nS[         R                  " U" S5      R                  5      -  n[        SUS9u  pxU" XE5      u  pnUS	:X  d   e[         R                  " U	S
5      [         R                  " XCS9-   n[         R                  " XCS9X-  UR                  R                  5       -  -
  n[         R                  " U	5      n[        UR                  R                  5       U-  [         R                  " XCS9USS9  [        X-  XVSS9  US:  a8  UR                  XD5      UR                  XD5      S-  -   R                  U5      nSnO"UR                  XD5      R                  U5      nSnS H  nSU4 H  nU" XUUUS9u  nnUS	:X  d   eUU:X  a  UR                  R                  5       nOUnUS:X  a  UU-  nOUU-  n[        UUUSS9  UU4S:X  d  Ma  U" XU5      u  nnUS	:X  d   e[!        UU5        M     M     [#        [$        XXSS9  [#        [$        XXSS9  GM}     g )Nr   r   rV   r+   rF  r   )geqrtgemqrtr   r   r   r  rG  r   r   rd  r  rn  r  r   rd  rd  rn  r  r  rJ  )r6   r   rs  r   r   r-   r.   r?  r   r$   r   r   r   r  r   r   r   r$  r%  )rf   r1   r   r0   r   r  r[  r  r  rg   tro   r
  r  r  r   	transposer  r   r   qqC	c_defaults                          r2   test_geqrt_gemqrtTestBlockedQR.test_geqrt_gemqrt  sa   ii##D)#F+JCAQwXXa^chhqnR&77??FXXa^++E2bjjs11C,-@NMEqJA$199 2!77Aq&);;A
A ACCHHJNBFF1,B!#%AE1R8QwXXa^chhqnR&77??F	XXa^++E2	"!9-E$Q14uEGAt19$9	)CCHHJs{UU#Ar"= e}
2*0q/	4#qy(y$Y2) . #0 )V3?)VC@u ,r4   c                 	   [         R                  R                  S5      n[        [        5       GH  u  p#SnUS:  ak  UR                  XD5      UR                  XD5      S-  -   R                  U5      nUR                  XD5      UR                  XD5      S-  -   R                  U5      nO@UR                  XD5      R                  U5      nUR                  XD5      R                  U5      nS[         R                  " U" S5      R                  5      -  n[        SUS9u  pS	US
-  U4 GH  n
U" XXV5      u  ppUS	:X  d   e[        [         R                  " US5      [         R                  " US5      5        [        [         R                  " XU-
  S-
  5      [         R                  " XjU-
  S-
  5      5        [         R                  " XjU-
  5      [         R                  " XU-
  5      nn[         R                  " [         R                  " XCS9U45      n[         R                  " S
U-  US9UU-  UR                  R!                  5       -  -
  n[         R                  " [         R                  " U5      [         R"                  " U5      45      n[%        UR                  R!                  5       U-  [         R                  " S
U-  US9USS9  [%        UU-  [         R                  " [         R                  " U5      U45      USS9  US:  am  UR                  XD5      UR                  XD5      S-  -   R                  U5      nUR                  XD5      UR                  XD5      S-  -   R                  U5      nSnOBUR                  XD5      R                  U5      nUR                  XD5      R                  U5      nSnS H  nSU4 H  nU	" XUUUUUS9u  nnnUS	:X  d   eUU:X  a  UR                  R!                  5       nOUnUS:X  a4  [         R                  " UU4S	S9n[         R                  " UU4S	S9nUU-  nO3[         R                  " UU4SS9n[         R                  " UU4SS9nUU-  n[%        UUUSS9  UU4S:X  d  M  U	" XUUU5      u  nn nUS	:X  d   e[        UU5        [        U U5        M     M     ['        [(        XXUUSS9  ['        [(        XXUUSS9  GM     GM     g )Nr   r   rV   r+   rF  r   )tpqrttpmqrtr   r   rW   r   r  rG  r   r   r  rn  r  rd  r   r  r  r  rJ  )r6   r   rs  r   r   r-   r.   r?  r   r$   r   r   r   rM  r   r   r  r   r   r$  r%  )!rf   r1   r   r0   r   r  r/  r[  r  r  lrg   r   r  ro   B_pentb_pentr
  r  r  r   r  r  r  r   r   rw   r  cdCDqCDr  	d_defaults!                                    r2   test_tpqrt_tpmqrtTestBlockedQR.test_tpqrt_tpmqrt(  s%   ii##D)#F+JCAQwXXa^chhqnR&77??FXXa^chhqnR&77??FXXa^++E2XXa^++E2bjjs11C,-@NME a^ %aA 1aqy y RWWQ^RWWQ^< RWWQA	2BGGA1uqy4IJ "$E!2BGGA1u4E NNBFF1$:F#CDFF1q5.Q1CCNNBGGAJa0@#AB  
Qq1uE0J%(r3Ar~~rwwqz66J'K%(r3 7!#((1.*;;CCEJA!#((1.*;;CCEJA #I!//6A!//6A #I&D"%y!1%+A!Q27&9
1d#qy(y I- !
A !A3;!#AQ!?B!#AQ!?B"#b&C!#AQ!?B!#AQ!?B"$q&C'CcC %=J69?aA9N6Iy$#'19,9(A6(A63 "2 ': iA!QSIiA!QcJA $ ,r4   r   N)r   r   r   r   r?   r  r  r   r   r4   r2   r  r    s    
<A|QKr4   r  c                     [         R                  R                  S5      n [        [        5       GHV  u  pSnSn[        SUS9nUS:  ag  U R                  X3U-
  5      R                  U5      SU R                  X3U-
  5      R                  U5      -  -   nXfR                  5       R                  -  nO1U R                  X3U-
  5      R                  U5      nXfR                  -  nU" U5      u  pxp[        U5      nSXU-
  S 2X-
  S 24'   [        U
S5        S	[         R                  " [         R                  5      R                  -  nS	[         R                  " [         R                  5      R                  -  nUS
;   a  UOUn[!        XhS-
     S S 2US-
  4   UR                  5       R                  U-  SUS9  U" USS9u  pxp[#        U5      nSXU-
  S 2X-
  S 24'   [        U
S5        S	[         R                  " [         R                  5      R                  -  nS	[         R                  " [         R                  5      R                  -  nUS
;   a  UOUn[!        XhS-
     S S 2US-
  4   XR                  5       R                  -  SUS9  GMY     g )Nr   r~   rW   pstrfr   rV   r+   r    r   rW   ri  r  r6   r   rs  r   r   r$   r-   r.   r  r   r   r   r   r  r   rQ  r   r   )r1   r   r0   r   r  r  r  r   pivr_cro   ro  single_atoldouble_atolrH  rd  s                   r2   
test_pstrfr  |     
))


%C'
 6 7aC ''.chhqA#6F6M6Me6T1TTAFFHJJAaC ''.ACCA!!HG "'(CGH
T1 RXXbjj1555RXXbjj1555!Vm{a%CE*AFFHJJN$O!!1-G "'(CGH
T1RXXbjj1555RXXbjj1555!Vm{a%CE*A

N$OG (r4   c                     [         R                  R                  S5      n [        [        5       GHV  u  pSnSn[        SUS9nUS:  ag  U R                  X3U-
  5      R                  U5      SU R                  X3U-
  5      R                  U5      -  -   nXfR                  5       R                  -  nO1U R                  X3U-
  5      R                  U5      nXfR                  -  nU" U5      u  pxp[        U5      nSXU-
  S 2X-
  S 24'   [        U
S5        S	[         R                  " [         R                  5      R                  -  nS	[         R                  " [         R                  5      R                  -  nUS
;   a  UOUn[!        XhS-
     S S 2US-
  4   UR                  5       R                  U-  SUS9  U" USS9u  pxp[#        U5      nSXU-
  S 2X-
  S 24'   [        U
S5        S	[         R                  " [         R                  5      R                  -  nS	[         R                  " [         R                  5      R                  -  nUS
;   a  UOUn[!        XhS-
     S S 2US-
  4   XR                  5       R                  -  SUS9  GMY     g )Nr   r~   rW   pstf2r   rV   r+   r  r  r  ri  r  r  )r1   r   r0   r   r  r  r  r   r  r  ro   ro  r  r  rH  rd  s                   r2   
test_pstf2r    r  r4   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/5      n [         R                  " / SQ/ SQ/ SQ/5      n[        [        5       GH  u  p#US:  a4  [         R                  " / S	Q/ S
Q/ SQ/ SQ/5      nUR	                  U5      nOT[         R                  " / SQ/ SQ/ SQ/US9nU[         R                  " / SQ/ SQ/ SQ/5      S-  -  nUR	                  U5      n[        SUS9nU" U5      u  pgppUS:  a*  [        U R	                  U5      US S 2S 4   U-  U-  SSS9  M  [        UR	                  U5      US S 2S 4   U-  U-  SSS9  GM     g )N)g      ?r   g1w-!?gd`TRۿ)r   gsr  r  )gs?r  g2%䃮g,eX)r  gsFg%ug??)y/nҿ&?yDioɴ?Af?y o_[ Acп)ysֿAfҿyPkw?JY8y5;NёCl?)yYڊ?1*?y=yXѿ@a+?yh oſFxrW   )g   ЈBg   tBgffffff @g   ٓ )      @gg#fDgffffff)gHzG?gQg'Vgp=
ף)g(\r  gS7нr  )gq=
ףpg   Ag(\)g333333g   Bg333333ÿ)gZ9=gQgֽr   )gffffff@g   tޅBr?  )g(\g   Zgq=
ףp?)gEop=gQ?gZEqҽr+   geequr   r7  ri  )r6   r   r   r   r.   r$   r   )desired_realdesired_cplxr   r0   r  r  r  r   rowcndcolcndamaxro   s               r2   
test_geequr    sl   88>@@@B CL
 88 1112 3L  '
7CEEEG HA A:::<CHJA :;:< ==?@ @A A 6+08(fd7L//6!T'
1Q!"/ L//6!T'
1Q!"/3 (r4   c            	         [         R                  " / SQ5      n [        [        5       H  u  p[         R                  " SUS9nU" US:  a  SOS5      n[         R                  " [        SS5       Vs/ s H
  oTS	U-  -  PM     snUS9nU[         R                  " [         R                  " U5      5      -  n[        S
US9nU" U5      u  pp[        [         R                  " U5      R                  [        5      U 5        M     g s  snf )N)
r   r   r   r   r   r   r   r   r"  rb  r~   r   rW   r   r+   rZ   r   syequb)r6   r   r   r   r   rN  rot90rK  r$   r   log2r.   r   )desired_log2sr   r0   r  r  r   rw   r  r  scondr  ro   s               r2   test_syequbr    s    HH?@M'
FF2U#C!Gb-HHU2q\:\b!em\:%H	RXXbggaj!!!(%8%ay$RWWQZ&&s+]; ( ;s   0D
Tz.Failing on some OpenBLAS version, see gh-12276)reasonc            	         [         R                  " S/S-  S/S-  -   5      [         R                  " [         R                  " S5      SS9S-  -   n [        R                  " U 5      u  pp4[        US5        [        [         R                  " U5      S	S
/S-  S	/-   S/S-  -   5        [         R                  " S[         R                  " [         R                  " SS5      5      -  S-   5      n SU S'   SU S'   [        R                  " U R                  [         R                  5      SS9u  pp4[        US5        [        [         R                  " U5      / SQ5        g )NrW   rZ   i  r^   rV   )r  r+   r   r  r  r  r[                   i   rZ   rZ   y              0@)rZ   r   r  )r"  r   r   r   r   r  r   r   r   r"  r"  )r6   rK  r   r   zheequbr   r   r  r   r  cheequbr.   	complex64)r  r  r  r  ro   s        r2   test_heequbr    s    	Aq !BGGBGGAJ!$<R$??A!>>!,AdqBGGAJS	!rd 2bT!V ;<
266"))B*++b01AAdGAdG!>>!((2<<*@JAdqBGGAJ IJr4   c            	         [         R                  R                  S5      n SnU R                  U5      nU R                  U5      U R                  U5      S-  -   n[	        [
        5       H  u  pEUS:  a8  U R                  X5      nUR                  U5      nXb-  nUR                  U5      nOLU R                  X5      U R                  X5      S-  -   nUR                  U5      nXc-  nUR                  U5      n[        SUS9n[        SUS9n	U" USS	9u  ppU	" XXSS
9u  pUS:  a  [        UR                  U5      X-  SS9  M  [        UR                  U5      X-  SS9  M     g )Nr.  r~   r+   rW   getc2r   gesc2r   rB  )overwrite_rhsrY   r   )	r6   r   rs  r-   r   r   r.   r$   r   )r1   r   r  r  r   r0   r  r   r  r  r  r#  jpivro   r   rb   s                   r2   test_getc2_gesc2r    sH   
))


#C
A88A;L88A;!R/L'
7AA AA!!22AA AA 6 6$QA6$!<7%l&9&9%&@&'gq: &l&9&9%&@&'gq:+ (r4   r0  )r[   rZ   r  jobar[   joburY   jobvjobrrV   jobpc                 z   [         R                  R                  S5      nU u  pS[         R                  " U5      R                  -  n[        XU5      n[        SUS9nUS:  nUS:  nUS:H  =(       a    X:H  n[         R                  " U5      nUS:H  =(       a    U(       + =(       a    U(       + nUS:H  =(       a    U=(       a    U(       + =(       a    UnUS:H  =(       a    U=(       a    U(       + =(       a    UnU(       a  SnOU(       d  U(       a  SnOS	nUS:  a  US:X  a  [        [        XX#XEXv5	        gU" UUUUUUUS
9u  nnnnnn[        UU5        U(       Gd`  US	   US   -  USU
 -  n[        U[        USS9US9  US:X  a  USS2SU
24   nU(       aC  U(       a<  [        U[         R                  " U5      -  UR                  5       R                  -  XS9  U(       a:  [        UR                  5       R                  U-  [         R                   " U
5      US9  U(       a:  [        UR                  5       R                  U-  [         R                   " U
5      US9  [        US	   [         R"                  R%                  U5      5        [        US   [         R&                  " U5      5        [        US   S	5        gg)a  Test the lapack routine ?gejsv.

This function tests that a singular value decomposition can be performed
on the random M-by-N matrix A. The test performs the SVD using ?gejsv
then performs the following checks:

* ?gejsv exist successfully (info == 0)
* The returned singular values are correct
* `A` can be reconstructed from `u`, `SIGMA`, `v`
* Ensure that u.T @ u is the identity matrix
* Ensure that v.T @ v is the identity matrix
* The reported matrix rank
* The reported number of singular values
* If denormalized floats are required

Notes
-----
joba specifies several choices effecting the calculation's accuracy
Although all arguments are tested, the tests only check that the correct
solution is returned - NOT that the prescribed actions are performed
internally.

jobt is, as of v3.9.0, still experimental and removed to cut down number of
test cases. However keyword itself is tested externally.
r.  rF  gejsvr   rW   rV   r"  rb  r   )r  r  r  r  jobtr  NF)rA  r  )r6   r   rs  r   r   r3   r$   r  r$  r%  r   r   r   rK  r  r   identityr  matrix_rankcount_nonzero)r0  r0   r  r  r  r  r  r  r1   r   r   rH  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r
  r   r   ro   sigmas                                r2   test_gejsv_generalr  ;  sS   B ))


#C DA%$$$D#D5AWE2E
 1HE1HEai%afF#JHUHZMU-=v(>M:MU-=v(>M:
 	/qtqyi4t4N',Q262626262626(8$Q4 	T;'  !WtAw&#bq'1EE3qU#;$Gqy a!eHBGGEN 2QVVXZZ ?N

QATJ

QATJq299#8#8#;<q2#3#3E#:; q1%5 r4   c                    [        SU S9nU" S5      u  p#pEpg[        US5        [        UR                  S5        [        UR                  S5        [        U[        R                  " S/U S95        [        R
                  " SU S9nU" U5      u  p#pEpg[        US5        [        UR                  S5        [        UR                  S5        [        U[        R                  " S/U S95        [        R
                  " SU S9nU" U5      u  p#pEpg[        US5        [        UR                  S5        [        UR                  S5        [        U[        R                  " / U S95        [        R                  " [        R                  " S5      R                  S	S	5      5      R                  U 5      n[        R                  " XR                  -   5      nUR                  S
5      n	U" U5      n
[        X5        g)z*Test edge arguments return expected statusr  r   r   r   rV   rV   )rV   r  rF  r~   r  N)r$   r   r/   r6   r   r   sinr  rd  r.   asfortranarrayr   r  r   )r0   r  r  r  r
  r   r   ro   r  Acr>   s              r2   test_gejsv_edge_argumentsr    s    WE2E $)9 CAUq&!&!bhht512 	E"A#(8 CAUq&!&!bhht512 	e$A#(8 CAUq&!&!bhhr/0 	ryy~%%b"-.55e<A
!cc'"A	
BaAAr4   kwargsr^   r  c                 t    [         R                  " S[        S9n[        S[        S9n[	        [
        X!40 U D6  g)z-Test invalid job arguments raise an Exception)rW   rW   r   r  Nr  )r  r  r  s      r2    test_gejsv_invalid_job_argumentsr    s/     	e$AWE2E)U00r4   zA,sva_expect,u_expect,v_expect)g)\(@gp=
ףgffffff?g
ףp=
)gQ?gQgGz?g(\)gQ޿gQgGz?gzGʿ)gQ?gQ?gHzG?g)\(?)ggq=
ףp@g333333r  )ףp=
?g(\r  g(\)g cZB#@gI.!v@g?ܵ?r  )gC?g=yX5gc=yXga4?)gB`"?g:pΈҞgʡE?gn4@?)g[B>٬?g٬\m?gJ{/L?gOe?)gc]Fgꕲq׿g\m?fc]F)g؁sFڿgZB>?g0L
F%?gq=
ףp)g ?gR!u?guVſg&Sٿ)gǘ?gV-g	^)p?g()gFx$g6[ ٿgUN@giq?)g1Zd?gOnӿgΈ?g_vO?)g}?5^Iؿg58EGr?gi o?g7[ Ac                     Sn[        SU R                  S9nU" U 5      u  pgpp[        XUS9  [        X'US9  [        X8US9  g)zr
This test implements the example found in the NAG manual, f08khf.
An example was not found for the complex case.
r7  r  r   r  N)r$   r0   r   )r  
sva_expectu_expectv_expectrH  r  r  r  r
  r   r   ro   s               r2   test_gejsv_NAGr    sG    0 DWAGG4E#(8 CAUJ$/Hd+Hd+r4   c           
         [         R                  R                  S5      nSnS[         R                  " U 5      R                  -  n[        US-
  4XS9n[        U4XS9n[        US-
  4XS9nUR                  5       UR                  5       UR                  5       /n[         R                  " U5      [         R                  " US5      -   [         R                  " US5      -   nUR                  U5      n	X-  n
[        SU S9u  pU" XeU5      u  pnnnn[        XgS	   5        [        XWS   5        [        XGS
   5        [         R                  " US	5      [         R                  " US5      -   [         R                  " US
5      -   n[         R                  " X S9n[        U5       H@  u  nnUU   S-
  nUS S 2UU/4   US S 2UU/4'   US S 2U4==   US S 2US-   4   U-  -  ss'   MB     SUS   S-
  nnUS S 2UU/4   US S 2UU/4'   [        UUU-  US9  U
R                  5       nU" XUUUU
5      u  nn[        U
U5        [        U	UUS9  U [        ;   a  SnUR                  U	-  nOSnUR                  5       R                  U	-  nU" XUUUUUS9u  nn[        U	UUS9  [!        ["        5         U" US S XT5        S S S 5        [!        ["        5         U" XeS S U5        S S S 5        [!        ["        5         U" XeUS S 5        S S S 5        [!        ["        5         U" US	   US S US	   5        S S S 5        S	US	'   S	US	'   U" XeU5      u  nnnnn n![         R$                  R'                  UUS-
     S	:H  SUUS-
      S35        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)Nr.  r~   rF  rV   r0   r1   r   gttrfgttrsr   r   rW   r  r   r   rJ  z?gttrf: _d[info-1] is , not the illegal value :0.)r6   r   rs  r   r   r3   r  rK  r$   r	   r   r   r   r   r   r  r$  rj  testingr   )"r0   r1   r   rH  durw   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r#  ro   ro  rd  rZ  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos"                                     r2   test_gttrf_gttrsr&    s    ))


#C
A%$$$D 
%acV5	BB#QD?A	$acV5	BB	1668RWWY/H

RWWR_$rwwr1~5A

1A	A#$6eDLE$)"$4!CS#tTrA;'q1+&rA;' 	Aa(2773?:A
qA#1 1gk1sAh;!aX+	!Q$1Q!V9Q;  bAsAq3({^Aa!SkN Aq1u4(FFHE#3T15MGTq% AwT* ##'&&(**q.#3T7%HMGTAwT* 
z	"b"gq 
#	z	"bCR&" 
#	z	"bRW 
# 
z	"beQrUBqE" 
# BqEAaD*/r*:'D#tT5%JJs4!8}).DSPQ]O TI -I K 
#	"	"	"	"	" 
#	"s0   *N N2N"N3 
N
N"
N03
Oz1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)g @r  ffffff?r   )r>  r        ffffff@)333333@@r         )r  r  r)  r*  )r+  r,  r\   gC>)r   r'  r]   )rW   rX   rY   rZ   rZ   g@gffffff@      g%@g@g	r  gffffff&g3@r  rZ   r\   rb  r"  )       @             @      ?            ?      ?      )?r4  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r9  )r4  r5  r6  r7  )r8  r9  r:  r9  y ~:pffffff?)r1  r2  r3  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r9  r0  y      @      y      ?       @y      @      @r2  y             r1  r3  y       @       c	                     [        SU S   U S   45      u  pU	" X!U 5      u  ppnn[        X5        [        X5        [        XSS9  [        X5        U
" XXX5      u  nn[        UU5        g )Nr  r   r7  r  )r$   r   )r  rw   r  du_expd_expdu2_expipiv_expr   r   r  r  r  r  r  r  r#  ro   r  s                     r2   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr@  X  ss    d $$6A1GLE$)"$4!CStTC!C BD)D##3T5MGTGQr4   )r  r  r  c           
      f   [         R                  R                  S5      nUR                  U5      UR                  U5      S-  -   nUR                  US-
  5      UR                  US-
  5      S-  -   nUR                  US-
  5      UR                  US-
  5      S-  -   n[         R                  " U5      [         R                  " US5      -   [         R                  " US5      -   n[         R                  " U [         R
                  5      (       a1  UR                  UR                  UR                  UR                  4u  ptpVUR                  U 5      UR                  U 5      UR                  U 5      UR                  U 5      4u  ptpV[         R                  R                  XqS:X  a  [         R                  OSS9n[        SU45      u  pU	" XTU5      u  pTpkpU
" XTXkXUS9u  p[        S	U45      u  nnU" U5      u  nnnU" UXS9u  nn[         R                  " U 5      R                  S
-  n[        UUUS9  g )NiTfr+   rV   r   r  r  )r  gtconr  r  g      ?r   )r6   r   r   rK  r  r  r   r.   r  r   r  r$   r   r   r   )r0   r   r   r1   rw   r  r  r  r  r  rB  r  r#  ro   r[  r>   r  r  r  r  r   r   s                         r2   
test_gtconrC    s    ))


)C

1

1b((A	AE	SZZA.r1	1B	AE	SZZA.r1	1B

RWWR_$rwwr1~5A	}}UBKK((vvqvvrww7b88E?AHHUORYYu5EryyQVGWWLA"IINN1CK"&&QN?E#$6=LE!&rb!1B2D2"4T:FC#$6=LE51XNBd2u(FC88E?$DC4(r4   ))rX   r\   )r\   rX   r  c                 H    [        SU S9nUu  p4U" X4S9u  pV[        US5        g )Ngeqrfp_lworkr   r  r   r  )r0   r/   rE  r   r   r   ro   s          r2   test_geqrfp_lworkrF    s-     $^EBLDA(KEqr4   zddtype,dtypec                    [         R                  R                  S5      nS[         R                  " U5      R                  -  nSn[        U4X5      S-   n[        US-
  4X5      n[         R                  " U5      [         R                  " US5      -   [         R                  " [         R                  " U5      S5      -   nUR                  5       UR                  5       /n[        SUS9n	U	" XV5      u  pn[        XXS	   5        [        XhS   5        [        US	S
U S3S9  [         R                  " US5      [         R                  " [         R                  " U5      5      -   n[         R                  " U
5      n[        X}U-  UR                  5       R                  -  US9  [        U4X5      nX-  n[        SUS9nU" XR                  5       U5      u  nn[        US	SU S3S9  [        UUUS9  g )Nr.  rF  r~   rY   rV   r   pttrfr   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r6   r   rs  r   r   r3   rK  r  r  r$   r	   r   r   r   r   r   )ddtyper0   r1   rH  r   rw   r  r  r  rH  r  _ero   rd  r  r   r   rJ  _xs                      r2   test_pttrf_pttrsrN    s    ))


#Crxx"""D
A
 	$QD&6:A#QqSFE7A 	
RWWQ^#bggbggaj!&<<A!&&(#HWE2E;LBDq1+&q1+&qN4&"FG 	B"''"''!*--A
AAs1;;=??*6 	$QD%5A	A WE2ERA&HBqN4&"FG Ar%r4   c                     Sn[         R                  R                  S5      n[        SUS9n[	        U4X5      S-   n[	        US-
  4X5      n[        [        XES S U5        [        [        XEUS S 5        g )Nr~   r   rH  r   rW   rV   r   )r6   r   rs  r$   r3   r$  rj  )rK  r0   r   r1   rH  rw   r  s          r2   *test_pttrf_pttrs_errors_incompatible_shaperP    sr     	A
))


%CWE2E#QD&6:A#QqSFE7A*esVQ/*e#2/r4   c                 H   Sn[         R                  R                  S5      n[        SUS9n[	        U4X5      S-   n[	        US-
  4X5      nSUS'   SUS'   U" XV5      u  pxn	[        XyS-
     SSXyS-
      S	35        [	        U4X5      nU" XV5      u  pxn	[        U	S:g  S
5        g )Nr~   r.  rH  r   rW   rV   r   z?pttrf: _d[info-1] is r  z2?pttrf should fail with non-spd matrix, but didn't)r6   r   rs  r$   r3   r   r   )
rK  r0   r   r1   rH  rw   r  r  rL  ro   s
             r2   'test_pttrf_pttrs_errors_singular_nonSPDrR    s     	A
))


#CWE2E#QD&6:A#QqSFE7AAaDAaD;LBD1Hq)"AX,7RSU 	$QD&6A;LBDDAIKLr4   z%d, e, d_expect, e_expect, b, x_expect)rY   r~      r   rZ   )r"  r.  r;  r]   )rY   r^   r      rV   )r/  gK=Ur  r  rW      A      g      @r   r  )rT  )   .      )y      0@      0@y      2@      "      ?      )rT  r^   rV   rY   )r9  r0  r[  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r8  c                    Sn[        SUS   S9nU" X5      u  pn
[        XUS9  [        XUS9  [        SUS   S9nU" XR                  5       U5      u  p[        XUS9  UR                  [        ;   a  U" XUSS9u  p[        XUS9  g g )	Nr7  rH  r   r   r  rJ  rV   r  )r$   r   r  r0   r,   )rw   r  d_expecte_expectr   x_expectrH  rH  r  rL  ro   rJ  rM  s                r2   test_pttrf_pttrs_NAGr`  	  s    4 DWAaD1E;LBDBt,Bt,WAaD1ERA&HBBt, 	ww. !,40 !r4   c                    [         R                  R                  S5      nUS:X  a  [        X"4X5      nU[         R                  " [         R
                  " U5      SU-  -   5      -   nXUR                  5       R                  -   S-  n[        U5      S   n[        U4X5      S-   n[        US-
  4X5      n[         R                  " U5      [         R                  " US5      -   [         R                  " US5      -   n	Xi-  UR                  5       R                  -  n
UnO[        U4X5      n[        US-
  4X5      nUS-   n[         R                  " U5      [         R                  " US5      -   [         R                  " US5      -   n
[         R                  " U5      [         R                  " US5      -   [         R                  " US5      -   nXxX4$ )Nr.  rV   rY   rW   r   )	r6   r   rs  r3   rK  r   r  r   r   )r0   realtyper   	compute_zr1   A_eigvrrw   r  trir  zs               r2   pteqr_get_d_e_A_zrh  9	  sm    ))


#CA~+QFE?ac 122'1,%[^'h<q@'1>ggaj2771a=(2771b>9Hrwwy{{" (h<'1> EGGAJA&B7GGAJB'"''!Q-7!<r4   zdtype,realtyperc  c                 H   S[         R                  " U 5      R                  -  n[        SU S9nSn[	        XXR5      u  pgpU" XgXS9u  pp[        USSU S35        [        [         R                  " [        U5      S   5      [         R                  " U
5      US	9  U(       a  [        U[         R                  " U5      R                  -  [         R                  " U5      US	9  [        U[         R                  " U
5      -  [         R                  " U5      R                  -  XS	9  g
g
)z
Tests the ?pteqr lapack routine for all dtypes and compute_z parameters.
It generates random SPD matrix diagonals d and e, and then confirms
correct eigenvalues with scipy.linalg.eig. With applicable compute_z=2 it
tests that z can reform A.
r  pteqrr   r~   rw   r  rg  rc  r   zinfo = z, should be 0.r  N)r6   r   r   r$   rh  r   r   sortr   r  r   r  rK  )r0   rb  rc  rH  rj  r   rw   r  r  rg  d_pteqre_pteqrz_pteqrro   s                 r2   
test_pteqrrp  Y	  s     ###Dge4E
A"5AAJA!&+a&O#GgqGD689 BGGDGAJ')9E"'''"2"4"44bkk!n!	# 	"'''"22RWWW5E5G5GG	& r4   c                 f    [        SU S9nSn[        XXB5      u  pVpxU" US-
  XhUS9u  ppUS:  d   eg )Nrj  r   r~   rY   rg  rc  r   r$   rh  r0   rb  rc  rj  r   rw   r  r  rg  rm  rn  ro  ro   s                r2   test_pteqr_error_non_spdru  y	  sI     ge4E
A"5AAJA! ',AE1Y&O#Gg!8O8r4   c           	          [        SU S9nSn[        XXB5      u  pVpx[        [        X5S S XhUS9  [        [        X5US S XS9  U(       a  [        [        X5XhS S US9  g g )Nrj  r   r~   r   rr  )r$   rh  r$  rj  )	r0   rb  rc  rj  r   rw   r  r  rg  s	            r2   "test_pteqr_raise_error_wrong_shaperw  	  si     ge4E
A"5AAJA!*esVQyI*e#2!Ij%A3B9M r4   c                 r    [        SU S9nSn[        XXB5      u  pVpxSUS'   SUS'   U" XVXS9u  ppUS:  d   eg )Nrj  r   r~   r   rr  rs  rt  s                r2   test_pteqr_error_singularry  	  sS     ge4E
A"5AAJA!AaDAaD&+AA&K#Gg!8O8r4   zcompute_z,d,e,d_expect,z_expect)gp=
ף@r  gq=
ףp?r  )g\(\	@g
ףp=
g?)gŏ1w- @gR'?g/n?g&䃞ͪ?)g cZB>?gCl?g:pΈڿg??)gaTR'?gSۿg}гY?g%uο)g\mg٬\m?gAf?gL
F%u)gǘgŏ1w-!?g333333?gz6?c                 J   Sn[        SUR                  S9n[        R                  " U5      [        R                  " US5      -   [        R                  " US5      -   nU" XXpS9u  pp[	        XUS9  [	        [        R
                  " U
5      [        R
                  " U5      US9  g)	zV
Implements real (f08jgf) example from NAG Manual Mark 26.
Tests for correct outputs.
r7  rj  r   rV   r   rk  r  N)r$   r0   r6   rK  r   r   )rc  rw   r  r]  z_expectrH  rj  rg  r  rL  _zro   s               r2   test_pteqr_NAG_f08jgfr}  	  s|      Dgagg6E

RWWQ]"RWWQ^3Aq@BBBt,BFF2Jx 0t<r4   matrix_size)r  )r\   r[   r[   r[   c                    [         R                  R                  S5      nS[         R                  " U 5      R                  -  nS[         R                  " U 5      R                  -  n[        SU S9n[        SU S9nUu  px[        Xx4XS9n	U" U	5      u  pn[         R                  " U
5      nXx:  a+  [         R                  " Xw4U S9nXS S 2S U24'   U" XUS9S	   nOU" U
S S 2S U24   XS9S	   n[        X-  XS
9  [        [         R                  " UR                  S	   5      XR                  5       R                  -  UUS9  [        U[         R                  " U5      US
9  [        [         R                  " [         R                   " U5      [         R                  " [#        [         R                   " U5      5      5      :  5      5        [        US	:H  5        [        X4XS9S-  n[%        U5      u  nnU" U5      u  nnn[        [         R&                  " [         R                   " U5      S	:  5      =(       a-    [         R                  " [         R                   " U5      S	:  5      5        g )Nr.     rF  geqrfpr   orgqrr  )rz   r   r   r   ri  r   )r6   r   rs  r   r   r$   r3   r   r   r   r   r/   r  r   r   allrK  re   r   rO  )r0   r~  r1   r   rH  r  gqrr   r   r  qr_Arz   ro   r  qqrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                         r2   test_geqrfpr  	  s    ))


#Crxx"""Drxx"""Dx6F
GE
2CDA 	$QF%AAQiODt 	A
 	u hhvU+ArrE
 A&q)QU.q1 AC&BFF1771:&668::T Arwwqz-BFF2771:RWWQZ 99:;DAI -aV5JROJJHh"("4Hgx BFF2778$q() #FF2771:>"$r4   c                  x    [         R                  " / 5      n [        SU R                  S9n[	        [
        X5        g )Nr  r   )r6   r   r$   r0   r$  r%  )A_emptyr  s     r2   #test_geqrfp_errors_with_empty_arrayr  	  s)    hhrlGhgmm<F)V-r4   driver)evevdevrevxpfxsyhec                    SnU S:X  a  [         O[        n[        X-   S-   US   S9n[        X-   S-   US   S9n [        XBSS9  [        XRSS9  g ! [         a'  n[
        R                  " X-    SU 35         S nAg S nAff = f)	N  r  _lworkr   r   rV   r  $_lwork raised unexpected exception: r   r,   r$   r    r%  r@   failr  r  r   r0   sc_dlwdz_dlwr  s          r2   test_standard_eigh_lworksr  
  s     	A$;KNEcj1qBFcj1qBFLv*v* Lszl"FqcJKKL   A 
B A;;B gvgvxc                    SnU S:X  a  [         O[        n[        X-   S-   US   S9n[        X-   S-   US   S9n [        XBSS9  [        XRSS9  g ! [         a'  n[
        R                  " X-    S	U 35         S nAg S nAff = f)
Nr  r  r  r   r   rV   rd  r`  r  r  r  s          r2   test_generalized_eigh_lworksr  
  s     	A$;KNEcj1qBFcj1qBFLvs+vs+ Lszl"FqcJKKLr  dtype_r   )rV   r~   rF  r  c                 (   [         R                  R                  S5      nUR                  SU5      nX-
  nU [        ;   a  SOSnUS-   n[        X`S9n[        XqX45      nUS:X  a  UOU4n[        U V	s/ s H  oS:  PM	     sn	5      (       d   eg s  sn	f )Nr   r   orun	csd_lworkr   )r6   r   r   r  r   r$   r    r  )
r  r   r1   ri   r  r  dlwr  lwvalr   s
             r2   test_orcsd_uncsd_lworkr  "
  s     ))


%CQA	AK'$TC

C	#	,B2!'ED[EuhEu%u!Au%&&&&%s   2Bc           
         Su  pnU [         ;   a  SOSnUS:X  a  [        R                  " U5      O[        R                  " U5      n[	        US-   US-   4U S9u  pg[        XqX#5      nUS:X  a  SU0O[        [        SS/U5      5      n	U" US U2S U24   US U2US 24   XRS 2S U24   XRS 2US 24   40 U	D6u
  pppnnnnUS	:X  d   e[        UU5      n[        UU5      n[        [        X#5      [        X-
  X-
  5      5      n[        X#5      U-
  n[        X!U-
  5      U-
  n[        X-
  U5      U-
  n[        X-
  X-
  5      U-
  n[        R                  " X4U S9nU " S
5      n[        U5       H
  nUUUU4'   M     [        U5       H  nUUUU-   UU-   4'   M     [        U5       H   nU* UUU-   U-   UU-   U-   U-   U-   U-   4'   M"     [        U5       H  nUUUU-   U-   U-   UU-   U-   4'   M     [        U5       H  n[        R                  " UU   5      UUU-   UU-   4'   [        R                  " UU   5      UUU-   U-   UU-   U-   U-   4'   [        R                  " UU   5      * UUU-   UU-   U-   U-   U-   4'   [        R                  " UU   5      UUU-   U-   UU-   4'   M     UU-  U-  n[        UUSS[        R                   " U 5      R"                  -  S9  g )N)r  rT      r  r  csdr  r   r   lrworkr   r   r  g     @ri  )r   r!   rvsr"   r$   r    dictr  r   rw  r6   r   rN  cosr  r   r   r   )r  r   ri   r  r  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2tro   ro  VHr  n11n12n21n22SonerZ  Xcs                                  r2   test_orcsd_uncsdr  0
  s"   GA!K'$TC!Tk}/@/@/CAucK.? @OHC31(E!$gu$sG<D<FGL8N 3OF 	Abqb"1"fIq!QRy!BF)Qr12vYA&A :DEr3T 1992rA	C	BCIs13}%A
a)a-C
a1+/C
ac1+/C
ac13-!
C
!v&A
*C3Z!Q$ 3Z!A#qs( 3Z),!C%'1S573;s?1$
$% 3Z #!C%'!)SU1W
  1X&&q*!C%3,"$&&q"2!C%'1Q3s73;
%'VVE!H%5$5!C%3s3q
 !FF58,!C%'1S5.  
QBArRXXf-=-A-A)ABr4   
trans_boolFfactrb  c                    [         R                  R                  S5      nS[         R                  " U 5      R                  -  n[        SU S9u  pVSn[        US-
  4XS9n[        U4XS9n	[        US-
  4XS9n
[         R                  " US5      [         R                  " U	5      -   [         R                  " U
S5      -   n[        US	4XS9nU(       a  U [        ;   a  S
OSOSnU(       a  UR                  5       R                  OUU-  nUR                  5       U	R                  5       U
R                  5       UR                  5       /nUS:X  a	  U" XU
5      OS/S-  u  nnnnnnU" XXX-UUUUUS9nUu
  nnnnnnnnnn [        U S:H  SU  S35        [        XS   5        [        XS   5        [        XS	   5        [        XS   5        [        UUUS9  [        [        US5      SLSU 35        [        UR                   S   UR                   S   :H  SUR                   S    SUR                   S    35        [        UR                   S   UR                   S   :H  SUR                   S    SUR                   S    35        g)a;  
These tests uses ?gtsvx to solve a random Ax=b system for each dtype.
It tests that the outputs define an LU matrix, that inputs are unmodified,
transposal options, incompatible shapes, singular matrices, and
singular factorizations. It parametrizes DTYPES and the 'fact' value along
with the fact related inputs.
r.  rF  gtsvxr  r   r~   rV   r  r   rW   r   r   rn  rb  Nr[   r  r   dlfdfdufr  r#  r   z?gtsvx info = z, should be zerorX   r  __len__Trcond should be scalar but is ferr.shape is z but should be berr.shape is )r6   r   rs  r   r   r$   r3   rK  r   r  r   r  r   r	   r   r   r/   )!r0   r  r  r1   rH  r  r  r   r  rw   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr#  x_solnr)  ferrberrro   s!                                    r2   
test_gtsvxr  _
  so    ))


#C%$$$D#$6eDLE
A	$acV5	BB#QD?A	$acV5	BB
B"''!*$rwwr1~5A#QF%AA6@E[(SccE!qA-A '')QVVXrwwy!&&(;J !CKbRdVAX )D#tUE5 bRE7I@I=CS$feT4DAIv-=>? ra=)qQ-(ra=)qQ-( AvD) GE9%T1,UG46 DJJqMQWWQZ'N4::a=/ J112+> @ DJJqMQWWQZ'N4::a=/ J112+> @r4   c                     [         R                  R                  S5      n[        SU S9u  pESn[	        US-
  4XS9n[	        U4XS9n[	        US-
  4XS9n	[         R
                  " US5      [         R
                  " U5      -   [         R
                  " U	S5      -   n
[	        US4XS9nU [        ;   a  S	OS
nU(       a  U
R                  5       R                  OU
U-  nUS:X  a	  U" XxU	5      OS /S-  u  pnnnnU" XxXX,XUUUS9nUu
  nnnnnnnnnnUS:X  a.  SUS'   SUS'   U" XxX5      nUu
  nnnnnnnnnnUS:  d   S5       eg US:X  a6  SUS'   SUS'   SUS'   U" XxXX.UUUUS9
nUu
  nnnnnnnnnnUS:  d   S5       eg g )Nr.  r  r   r~   rV   r  r   rW   r   r   rb  r[   r  rn  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r#  )	r6   r   rs  r$   r3   rK  r   r  r   )r0   r  r  r1   r  r  r   r  rw   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r#  r  r)  r  r  ro   s                                  r2   test_gtsvx_error_singularr  
  s    ))


#C#$6eDLE
A	$acV5	BB#QD?A	$acV5	BB
B"''!*$rwwr1~5A#QF%AAK'CSE!qA-A !CKbRdVAX )DtUE5 bRE7I@I=CS$feT4 s{"2"'	DMARdD&%tTaxAAAx	BRb	"T#%1	DMARdD&%tTaxAAAx 
r4   c                 ~   [         R                  R                  S5      n[        SU S9u  pESn[	        US-
  4XS9n[	        U4XS9n[	        US-
  4XS9n	[         R
                  " US5      [         R
                  " U5      -   [         R
                  " U	S5      -   n
[	        US4XS9nU [        ;   a  S	OS
nU(       a  U
R                  5       R                  OU
U-  nUS:X  a	  U" XxU	5      OS /S-  u  pnnnnUS:X  aa  [        [        XGS S XUX,XUUUS9  [        [        XGUS S XX,XUUUS9  [        [        XGXS S UX,XUUUS9  [        [        XGXUS S X,XUUUS9  g [        [        XGXUX,US S UUUUS9  [        [        XGXUX,XS S UUUS9  [        [        XGXUX,XUS S UUS9  [        [        XGXUX,XUUS S US9  g )Nr.  r  r   r~   rV   r  r   rW   r   r   rb  r[   rn  r  )r6   r   rs  r$   r3   rK  r   r  r   r$  rj  r%  )r0   r  r  r1   r  r  r   r  rw   r  r  r   r   r   r  r  r  r  r  r  s                       r2   "test_gtsvx_error_incompatible_sizer  
  s    ))


#C#$6eDLE
A	$acV5	BB#QD?A	$acV5	BB
B"''!*$rwwr1~5A#QF%AAK'CSE!qA-A !CKbRdVAX )DtUE5 s{j%CR!$E	7 	j%QsVR$E	7 	j%Q3B$E	7 	iA1Sb6$E	7 	j%QA$s)E	7 	j%QA$s8E	7 	j%QA$s)U	< 	j%QA$E#2JU	<r4   zdu,d,dl,b,xc           
      f    [        SUR                  S9nU" X!X5      nUu
  pxpppnn[        XL5        g )Nr  r   r$   r0   r   )r  rw   r  r   r   r  r  r  r  r  r  r#  r  r)  r  r  ro   s                    r2   test_gtsvx_NAGr    s:    . WAGG4EbR#I@I=CSe4a(r4   zfact,df_de_lambdac                 6    [        SUR                  S9" X5      $ NrH  r   r$   r0   rw   r  s     r2   <lambda>r  %      (8?@ww)HHI)Nr4   c                     gN)NNNr   r  s     r2   r  r  '      -?r4   c           	         [         R                  R                  S5      nS[         R                  " U 5      R                  -  n[        SU S9nSn[        U4X5      S-   n[        US-
  4X5      n	[         R                  " U5      [         R                  " U	S5      -   [         R                  " [         R                  " U	5      S5      -   n
[        US	4XS
9nX-  nU" X5      u  pnUR                  5       U	R                  5       UR                  5       /nU" XXXS9u  pnnnnn[        UUS   5        [        U	US   5        [        UUS	   5        [        US:H  SU S35        [        UU5        [         R                  " US5      [         R                  " [         R                  " U5      5      -   n[         R                  " U5      n[        U
UU-  [         R                  " U5      R                  -  US9  [!        US5      (       a
   SU 35       e[        UR"                  S:H  SUR"                   S35        [        UR"                  S:H  SUR"                   S35        g)a  
This tests the ?ptsvx lapack routine wrapper to solve a random system
Ax = b for all dtypes and input variations. Tests for: unmodified
input parameters, fact options, incompatible matrix shapes raise an error,
and singular matrices return info of illegal value.
r.  rF  ptsvxr   rZ   rY   rV   r   rW   r  r  r  efr   zinfo should be 0 but is .r  r  r  )rW   r  z# but should be ({x_soln.shape[1]},)r  N)r6   r   rs  r   r   r$   r3   rK  r  r  r	   r   r   r   r   r   r   r/   )r0   rb  r  df_de_lambdar1   rH  r  r   rw   r  r  r  r   r  r  ro   r  r   r)  r  r  rd  r  s                          r2   
test_ptsvxr  !  s    ))


#C%$$$DWE2E	A#QD(81<A#QqSFE7A

RWWQ^#bggbggaj!&<<A(!QuFF	
A  %LBD !&&(AFFH-H */qQ24*=&BAudD$ q(1+&q(1+&q(1+&DAI1$q9:fa( 	B"''"''!*--A
AAqsBGGAJLL)5 ui(( 1
(01( DJJ$>$** >8 "8 : DJJ$>$** >8 "8 :r4   c                 6    [        SUR                  S9" X5      $ r  r  r  s     r2   r  r  `  r  r4   c                     gr  r   r  s     r2   r  r  b  r  r4   c                    [         R                  R                  S5      n[        SU S9nSn[	        U4X5      S-   n[	        US-
  4X5      n[         R
                  " U5      [         R
                  " US5      -   [         R
                  " [         R                  " U5      S5      -   n	[	        US4XS	9n
X-  nU" Xx5      u  pn[        [        XWS S XX,US
9  [        [        XWUS S XXS
9  [        [        XWXS S X,US
9  g )Nr.  r  r   rZ   rY   rV   r   rW   r  r  )
r6   r   rs  r$   r3   rK  r  r$  rj  r%  )r0   rb  r  r  r1   r  r   rw   r  r  r  r   r  r  ro   s                  r2   test_ptsvx_error_raise_errorsr  \  s     ))


#CWE2E	A#QD(81<A#QqSFE7A

RWWQ^#bggbggaj!&<<A(!QuFF	
A  %LBD *esVQK*e#2K)UqCR&trJr4   c                 6    [        SUR                  S9" X5      $ r  r  r  s     r2   r  r  {  r  r4   c                     gr  r   r  s     r2   r  r  }  r  r4   c           	         [         R                  R                  S5      n[        SU S9nSn[	        U4X5      S-   n[	        US-
  4X5      n[         R
                  " U5      [         R
                  " US5      -   [         R
                  " [         R                  " U5      S5      -   n	[	        US4XS	9n
X-  nU" Xx5      u  pnUS
:X  aX  SUS'   U" Xx5      u  pnU" XxU5      u  pnnnnnUS:  a  X::  d   e[	        U4X5      nU" XxU5      u  pnnnnnUS:  a  X::  d   eg U" Xx5      u  pnSUS'   SUS'   U" XxXXS9u  pnnnnnUS:  d   eg )Nr.  r  r   rZ   rY   rV   r   rW   r  rn  r   rX   r  )r6   r   rs  r$   r3   rK  r  )r0   rb  r  r  r1   r  r   rw   r  r  r  r   r  r  ro   r   r)  r  r  s                      r2   test_ptsvx_non_SPD_singularr  w  sw    ))


#CWE2E	A#QD(81<A#QqSFE7A

RWWQ^#bggbggaj!&<<A(!QuFF	
A  %LBDs{!#A)-21^*5$daxDI%% (h<-21^*5$daxDI%%I $A)11-2168.A*5$daxxr4   zd,e,b,xc                 ^    [        SUR                  S9nU" XU5      u  pVpxpn[        X75        g )Nr  r   r  )rw   r  r   r   r  r  r  x_ptsvxr)  r  r  ro   s               r2   test_ptsvx_NAGr    s0    . WAGG4E/4Q1~,BGDa)r4   r+  c           
      r   [         R                  R                  S5      n[         R                  " U 5      R                  S-  nSu  pE[        XD/XS9n[        XE/XS9nUR                  5       R                  U-   [         R                  " X@S9U " S5      -  -   nU(       aa  [        U5       VV	s/ s H  n[        X5        H  oPM     M     sn	n[        U5       VV	s/ s H  n[        X5        H  oPM     M     sn	n4n
Ok[        SUS-   5       VV	s/ s H  n[        U5        H  oPM     M     sn	n[        SUS-   5       VV	s/ s H  n[        U5        H  oS-
  PM	     M     sn	n4n
Xj   n[        SU S	S
9u  ppnU" XKUS9u  nn[        US5        [        XaS9U
   n[        UUSUS9  U" UUUS9u  nn[        US5        [        U5      U
   n[        UUSUS9  U" UUXqS9u  n	n[        US5        [        Xg5      n[        U	USUS9  U" XKXqS9u  nn[        US5        [        UUSUS9  [         R                   R#                  US5      nU" XKUUS9u  nn[        US5        [%        ['        SU-  [         R                   R)                  USS9-
  5      U-  S:  5        g s  sn	nf s  sn	nf s  sn	nf s  sn	nf )Nr   rF  )r~   rY   r  r   r   rV   )ppsvpptrfpptrspptrippconr  r  r  r   ri  )r  r+  r$  )r6   r   rs  r   r   r3   r  r   r   rN  r$   r   r   r   r   r   r  r   r   r   r%  )r0   r+  r1   rH  r   r   rg   r   yr   rv  apr
  r  r  r  r  ulro   aululiaulibxxvr  r)  s                             r2   !test_pptrs_pptri_pptrf_ppsv_ppconr    s    ))


%C88E?s"DGA#QF%AA#QIUDA	

Q/%);;A!!H:HqeAkkH:!!H:HqeAkkH:< "!QqSM<Mq58a8M<#Aqsm>mU1X1Xm>@	
B'74($Du
 Q%(HBq
1
"4
(CB!$/a5)ICqq6$<DCAD1Ar1*GAtq	qBAr-A1*HBqB.IINN1a EU%8KE4qC%"))..a.001%7!;<C ;:<>s   -J!J'J-!J3c                    [         R                  R                  S5      n[         R                  " U 5      R                  S-  nSn[        X3/XS9n[        SU S9u  pVU" S USS	9n[        US
   S5        US   nUS   n	US   n
U [        ;   a   [        U[         R                  " U5      SUS9  [        X-  U	R                  5       R                  -  USUS9  U" XSS5      n[        US
   S5        US   nUS   n	U [        ;   a   [        U[         R                  " U5      SUS9  [        X-  U	R                  5       R                  -  USUS9  [        US   U
SUS9  g )Nr   rF  r~   r  )geestrexcr   c                     g Nr   r   s    r2   r  !test_gees_trexc.<locals>.<lambda>      Dr4   Fr  r   r   rb  r  ri  r\   rV   r"  r   r6   r   rs  r   r   r3   r$   r   r,   r   r   r  r   )r0   r1   rH  r   rg   r  r  r  r  rg  d2s              r2   test_gees_trexcr"    sA   
))


%C88E?s"D
A#QF%AA"#4EBKD.!7FQq	Ar
A	
4B2771:AD9AEAFFHJJ&=1AFQq	Ar
A2771:AD9AEAFFHJJ&=AdGRad3r4   zt, expect, ifst, ilst)r  g)\({Gz?gQ?)r  皙r  ffffff?)r  gr$  g?)r  r  r  r$  )r$  lV}gV_?g|?5^?)g?r$  gV/?g;On?)r  r  r  ggj+)            y
ףp=
?
ףp=
׿yRQȿQ?y)\(?      п)r               @yQ
ףp=
yq=
ףpͿp=
ף?)r  r         @      yGz?(\?)r  r  r        @      )r(  y1%Ŀq?ys??ܵ|ȿyHzG??ܵ?)r  r)  yV/?ݓ?yjt?vտ)r  r  r*  yB>٬?=U?)r  r  r  r'  c                 |    Sn[        SU R                  S9nU" X XSS9n[        US   S5        US   n [        X0US9  g)	z[
This test implements the example found in the NAG manual,
f08qfc, f08qtc, f08qgc, f08quc.
r7  r  r   r   )wantqr   r  N)r$   r0   r   r   )r  ifstilstexpectrH  r  r  s          r2   test_trexc_NAGr0    sH    < DWAGG4E11-FQq	AFD)r4   c                 v   [         R                  R                  S5      n[         R                  " U 5      R                  S-  nSn[        X3/XS9n[        X3/XS9n[        SU S9u  pgU" S XESSS	9n[        US
   S5        US   n	US   n
US   nUS   nU	S   U
S   -  nU	S   U
S   -  nU [        ;   a@  [        U	[         R                  " U	5      SUS9  [        U
[         R                  " U
5      SUS9  [        X-  UR                  5       R                  -  USUS9  [        X-  UR                  5       R                  -  USUS9  U" XXSS5      n[        US
   S5        US   n	US   n
US   nUS   nU [        ;   a@  [        U	[         R                  " U	5      SUS9  [        U
[         R                  " U
5      SUS9  [        X-  UR                  5       R                  -  USUS9  [        X-  UR                  5       R                  -  USUS9  [        U	S   U
S   -  USUS9  [        U	S   U
S   -  USUS9  g )Nr   rF  r~   r  )ggestgexcr   c                     g r  r   r  s    r2   r  !test_gges_tgexc.<locals>.<lambda>I  r  r4   FrB  overwrite_br   r   rV   r  rb  r   r  ri  r\   rW   rX   r   r   )r0   r1   rH  r   rg   r   r2  r3  r  r  r  r  rg  d1r!  s                  r2   test_gges_tgexcr9  >  s    
))


%C88E?s"D
A#QF%AA#QF%AA"#4EBKD.!EuMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=1q!$FQq	Aq	Aq	Aq	A2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r4   c                 .   [         R                  R                  S5      n[         R                  " U 5      R                  S-  nSn[        X3/XS9n[        SU S9u  pVnU" S USS	9n[        US
   S5        US   n	US   n
U	S   nU [        ;   a   [        U	[         R                  " U	5      SUS9  [        X-  U
R                  5       R                  -  USUS9  [         R                  " U5      nSUS'   [        X|U	5      nU [        ;   a  U" XXS9nOU" XXUS   S9n[        US
   S5        US   n	US   n
U [        ;   a   [        U	[         R                  " U	5      SUS9  [        X-  U
R                  5       R                  -  USUS9  [        U	S   USUS9  g )Nr   rF  r~   r  )r  trsentrsen_lworkr   c                     g r  r   r  s    r2   r  !test_gees_trsen.<locals>.<lambda>y  r  r4   Fr  r   r   rb  r  ri  rV   r[   r   r   liworkr   r6   r   rs  r   r   r3   r$   r   r,   r   r   r  r   r   r    )r0   r1   rH  r   rg   r  r;  r<  r  r  rg  r!  selectr   s                 r2   test_gees_trsenrC  n  s   
))


%C88E?s"D
A#QF%AA/( 7D .!7FQq	Ar
A	
4B2771:AD9AEAFFHJJ&=XXa[FF1I;2Ev!1v!qBQq	Aq	A2771:AD9AEAFFHJJ&=AdGRad3r4   z*t, q, expect, select, expect_s, expect_sep)g/$?gQIg~jtx?gJ4?)r  58EGrgGr?gyX5;?)r  g?߾rD  gt?)r  r  r  gyǹ)g؁sF?g_L?gGz?gUN@?)goT?g0*g'gz6>W)g(g&䃞ͪӿgbX9ҿg-!lV?)gb=y?gۊe?r&  g8EGr?)r%  g?gQg(\ſ)g
ףp=
?gQ?r	  r%  )g)\(ܿgQտgQg(\?)r  g{GzԿgp=
ףg)\(?)rV   r   r   rV   g      ?g(\	@)yqh yfc]F?ڊe׿yMbȿ&S?y&1??п)r  y      ?5^I @yo0*yZd;OͿ~:p?)r  r  yx$(@4@y[ A?&?)r  r  r  y?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p	cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}?	cZy+eXw?-ٿ)y"u?	c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47)yS!uqF%u@yyտGx$(?y3ı.n?rh|)yv?
F%uyd`TR?I&ۿyN@?ݓy4@
@	^)?)ys{
@ o_yH.@|Pk@y0*?*:Hy]m{?Gz)y)0[<?yI.!? ryqh 
@ׁsF?y1w-!?h ogRQ?gK?c                    SnSn[        SU R                  S9u  p[        XU 5      n
U R                  [        ;   a  U" X XS9nOU" X XU
S   S9n[	        US   S	5        US	   n US   nU R                  [        ;   a  US
   nUS   nO
US   nUS   n[        X1U -  UR                  5       R                  -  US9  [        USU-  US9  [        USU-  US9  g)zK
This test implements the example found in the NAG manual,
f08qgc, f08quc.
r7  r#  )r;  r<  r   r   rV   r?  r   r   rY   rZ   r[   r  N)r$   r0   r    r,   r   r   r  r   )r  r  rB  r/  expect_s
expect_seprH  atol2r;  r<  r   r  r  seps                 r2   test_trsen_NAGrJ    s    ` DE) 1E ;2Eww. v!1v!qBQq	Aq	Aww. 1IQi1IQiFEAFFHJJ.T:Ha!e%0JCe4r4   c           	         [         R                  R                  S5      n[         R                  " U 5      R                  S-  nSn[        X3/XS9n[        X3/XS9n[        SU S9u  pgnU" S XESSS	9n	[        U	S
   S5        U	S   n
U	S   nU	S   nU	S   nU
S   US   -  nU
S   US   -  nU [        ;   a@  [        U
[         R                  " U
5      SUS9  [        U[         R                  " U5      SUS9  [        X-  UR                  5       R                  -  USUS9  [        X-  UR                  5       R                  -  USUS9  [         R                  " U5      nSUS'   [        UUX5      nUS   S-   US   4nU" UXXUS9n	[        U	S
   S5        U	S   n
U	S   nU	S   nU	S   nU [        ;   a@  [        U
[         R                  " U
5      SUS9  [        U[         R                  " U5      SUS9  [        X-  UR                  5       R                  -  USUS9  [        X-  UR                  5       R                  -  USUS9  [        U
S   US   -  USUS9  [        U
S   US   -  USUS9  g )Nr   rF  r~   r  )r2  tgsentgsen_lworkr   c                     g r  r   r  s    r2   r  !test_gges_tgsen.<locals>.<lambda>  r  r4   Fr6  r   r   rV   r  rb  r   r  ri  r[   r   ir.  r   rA  )r0   r1   rH  r   rg   r   r2  rL  rM  r  r  r  r  rg  r8  r!  rB  r   s                     r2   test_gges_tgsenrP    sc   
))


%C88E?s"D
A#QF%AA#QF%AA/( 7D .!EuMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=XXa[FF1I;5E 1XaZq"E61U3FQq	Aq	Ar
Ar
A2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r4   za, b, c, d, e, f, rans, lans)r   r   r   r   )r  r>  r   r   )r  r   r>  r   )r  r  r  g      @)r   r   r   r   )r  r  r  r   )      r   r   g      (@)g      "r          rR  )rQ  r   rR  r   )      r   r-  g      3@)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   )rS  r   r  r   )r(  r   g       r  )r  r         r   )rT  r   r  r   )r  r   r  r  )r  r   r>  r   )r  r   r  r   )r   r  r   r  )r   r>  r  r   )r  r   r   r  )r   r  r   r   c	                 4   Sn	[        SUS9n
U
" XX#XE5      u  ppn[        US5        [        USS[        R                  " U5      R
                  S-  SS9  [        US	S[        R                  " U5      R
                  S-  S
S9  [        XU	SS9  [        XU	SS9  g )Nr7  tgsylr   r   r   rF  zSCALE must be 1.0r   rH  rI  r  zDIF must be nearly 0zSolution for R is incorrect)rH  rI  zSolution for L is incorrect)r$   r   r   r6   r   r   )rg   r   r   rw   r  rj   ranslansr0   rH  rV  routloutrb   difro   s                   r2   test_tgsyl_NAGr]     s    H Dge4E#(qQ#: DDqE3QRXXe_-@-@-D/1C1288E?+>+>s+B24DT9;DT9;r4   r   )rn  r   ijob)r   rV   rW   rX   rY   c                    U [         R                  :X  a  SOSn[         R                  R                  S5      nSu  pV[	        UR                  SSXU/5      R                  U 5      UR                  SSXU/5      R                  U 5      SS9tpxn	[	        UR                  SSXf/5      R                  U 5      UR                  SSXf/5      R                  U 5      SS9tpn	UR                  S	S
XV/5      R                  U 5      nUR                  S	S
XV/5      R                  U 5      n[        SU S9nU" XzXXXS9u  nnnnnUS:X  d   S5       eUS:  d   S5       eUS:X  a/  [        USS[         R                  " U 5      R                  S-  SS9  OUS:  d   S5       eUS
::  a  US:X  a  X-  UU
-  -
  nUU-  nX-  UU-  -
  nUU-  nOyUS:X  as  [         R                  " U5      U-  [         R                  " U5      U-  -   nUU-  nU[         R                  " U
5      -  U[         R                  " U5      -  -   nSU-  U-  n[        WWUSSS9  [        WWUSSS9  g g )NgMbP?g|=l   OElt/ r:  ir~   r   )outputr"  rW   rV  r   )r   r^  r   zINFO is non-zeror  zSCALE must be non-negativerF  zDIF must be 0 for ijob =0rW  zDIF must be non-negativern  r   r  zlhs1 and rhs1 do not match)rH  r   rI  zlhs2 and rhs2 do not match)r6   r  r   r   r   uniformr.   r$   r   r   r   r  )r0   r   r^  rH  r1   r   r   rg   rw   r>   r   r  r   rj   rV  rZ  r[  rb   r\  ro   lhs1rhs1lhs2rhs2s                           r2   
test_tgsylrf  T  sl   
 BJJ&4ED
))

 0
1CDA#++c2v.55e<++c2v.55e<!HA1 #++c2v.55e<++c2v.55e<!HA1 	BA6"))%0ABA6"))%0Age4E#(qQ/4$A D$sD 19(((9C<555<qySqrxx/B/B3/F ;	= cz555z qyC<8dQh&D7D8dQh&D7Dc\<<?T)BLLOd,BBD7D",,q/)D2<<?,BBD:a<DdB <	>dB <	> r4   mtyper  c                    U S:X  a   U[         ;   a  [        R                  " S5        [        R                  R                  S5      nSu  pEU[        ;   a4  UR                  XD4S9UR                  XD4S9S-  -   R                  U5      nOUR                  XD4S9R                  U5      nU S:X  a  XfR                  -   OXfR                  5       R                  -   nUR                  XE4S9R                  U5      nU  S3U  S	3U  S
34n[        XS9u  pnU
" XBS9nU	" XlUS9u  pnUS:X  d   eU" XXrS9u  nnUS:X  d   e[        R                  " U5      R                  n[        UU-  USU-  U-  S9  g )Nr  zhetrs not for real dtypes.   *M/t|0 )r   rZ   r/  r+   r  r  r  trsr   r  r"  r   )rg   r#  r   r+  rF  r  )r   r@   rA   r6   r   r   r,   ra  r.   r   r  r$   r   r   r   )rg  r0   r+  r1   r   r   r  r   rH   r  r  rj  r   r(  r#  ro   r   r   s                     r2   test_sy_hetrsrk    sk    }+-01
))

 0
1CGA[[qf[%!(@(CCKKERKKaVK$++E2D=CCa&&(**nA!#**51AgSMeWI.5'=E*5>CCa%E!6OCt199Ca5GAt199
((5/

CAaCQs+r4   c                 "   US:X  a   U [         ;   a  [        R                  " S5        [        R                  " 5       S:X  a   U [
        ;   a  [        R                  " S5        [        R                  R                  S5      nSnUR                  XD45      UR                  XD45      S-  -   n[        R                  " U [        R                  5      (       a  UR                  nUR                  U 5      nUS:X  a  XUR                  -   OXUR                  5       R                  -   nU S	3U S
34n[        X`S9u  pxU" XQS9u  pnUS:X  d   eU" XUS9u  pUS:X  d   e[        R                   " U 5      R"                  n[        R$                  R'                  U5      nU(       a:  [)        [        R*                  " U5      [        R*                  " U5      SU-  U-  S9  g [)        [        R,                  " U5      [        R,                  " U5      SU-  U-  S9  g )Nr  zhetri not for real dtypes.z	win-arm64z1Test segfaulting on win-arm64 in CI, see gh-23133ri  r   r+   r  r  rf  r   r  r   )rg   r#  r+  rF  r  )r   r@   rA   	sysconfigget_platformr,   r6   r   r   r  r  r   r.   r   r  r$   r   r   r  r   r   r   r   )r0   r+  rg  r1   r   r  rH   r  rf  r(  r#  ro   A_invr   r   s                  r2   test_sy_he_trirp    s    }+-01;.5N3JGH
))

 0
1C
A

A6SZZ/22A	}}UBKK((FF	AD=CCa&&(**nAgSMeWC=(E3HC!)OCt199e4KE199
((5/

C
))--
C3q59E3q59Er4   r   z
uplo, m, n))ro  rZ   r~   )ro  r~   r~   )rd  r~   rZ   )rd  r~   r~   c                    [         R                  R                  S5      nUR                  X#4S9R                  U5      n[	        SU45      u  pU" XXS9n
US:X  a  [         R
                  " U5      O[         R                  " U5      nUS:X  a%  [         R                  " [        X#5      5      nSX{U4'   U	" X5      n[        XSS9  g )	Nl   8#q9
r/  )lantrr   )rg  rK  ro  rV   >r   )
r6   r   r   r.   r$   r   r   r  rw  r   )r   rg  r   r   rK  r0   r1   r  rr  r   r[  rZ  r   s                r2   
test_lantrrt    s     ))

 1
2C


&&u-A#$6=LE
d
.C ck
rwwqzAs{IIc!i Q$
.CC4(r4   c           	         [         R                  R                  S5      nSu  p4nUR                  X345      UR                  X345      S-  -   nUR                  [         R                  " SUR                  SS5      U5      5      nXg-  n[         R                  " U [         R                  5      (       a  UR                  nUR                  U 5      nSU[         R                  " X4S-   5      '   SU[         R                  " X5* S-
  5      '   [        XTU5      nSU-  U-   S-   n	[         R                  " X4U S9n
XUS 2S S 24'   [         R                  R                  XaS	:X  a  [         R                   OSS
9n[#        SU
45      u  pU" XU5      u  pnU" XXNUUS9S   n[#        SU45      u  nnU" U5      S   nU" UXS9S   n[%        UUSS9  g )N   2 r~   rW   rW   r+   r   r~   rV   rW   r   r  r  )gbcongbtrf)r   r{  rz  rf  r#  r  r  r  r   )r6   r   r   r  r  r  r  r  r   r.   r   r   r   r   r  r   r  r$   r   )r0   r   r1   r   rz  r{  r  r  tmpLDABrf  r  rx  ry  lu_bandr#  r>   r[  r  r  r  r   s                         r2   
test_gbconr}    s    ))


,C IA2

A6SZZ/22A\\"++aa)<a@AFKA	}}UBKK((FF	A$%Abooaa !%&Abooaq!" RQ
CR4"9q=D	4)5	)BrsAvJIINN1CK"&&QN?E#$6>LERR(G1
TR$ C $$6=LE5	q!B
E
%a
(C C1%r4   c                    [         R                  R                  S5      nSu  p4nUR                  X345      UR                  X345      S-  -   n[         R                  " U [         R                  5      (       a  UR
                  nUR                  U 5      nSU[         R                  " X4S-   5      '   SU[         R                  " X5* S-
  5      '   [        XTU5      n[        SU45      u  pU	" X5      n
U" XXG5      n[        XSS9  g )	Nrv  rw  r+   r   rV   )langbr   rs  r   )r6   r   r   r  r  r   r.   r   r   r   r$   r   )r0   r   r1   r   rz  r{  r  rf  r  r   r   r[  s               r2   
test_langbr    s     ))


,C IA2

A6SZZ/22A	}}UBKK((FF	A$%Abooaa !%&Abooaq!"	BA	B#$6=LE
.C
"
!CC4(r4   	compute_vc                    [         R                  R                  S5      nSnUR                  X0S9nUR                  US-
  U S9n[         R                  " US5      [         R                  " U5      -   [         R                  " US5      -   n[         R                  R                  U5      n[        S5      nU" XEUS9u  pnUS:X  d   e[        [         R                  " U	5      [         R                  " U5      5        U(       aR  [         R                  " U 5      R                  n[        U
[         R                  " U	5      -  U
R                  -  XlS	-  S
9  g g )Nl   J*Os{Ur~   r   rV   r   stevd)r  r   r  r  )r6   r   r   rK  r  eigvalshr$   r   rl  r   r   r   )r0   r  r1   r   rw   r  r  r   r  ro  rB  ro   r   s                r2   
test_stevdr    s    ))

 2
3C
A

1
"A

1q5
&A
2#bggam3A
))

Q
CW%Eqy1JA$199BGGAJ-hhuo!!BGGAJ,a3h? r4   rD  )	functoolsr   rm  numpy.testingr   r   r   r   r   r	   r@   r
   r$  numpyr6   r   r   r   r   r   r   r   r   scipy.linalgr   r8   r   r   r   r   r   r   r   r   r   r   r   scipy.linalg._basicr   rN   r    scipy.statsr!   r"   scipy.sparsesparsert  r#   r7   ImportErrorr$   rM   r%   scipy.__config__r&   blas_providerblas_versionr  rQ  r   r  
complex128r,   r   r3   rK   rQ   rS   r   r   r9  r:  r  r  r*  r<  r_  r  r  r  r  r  r  r  r  r*  r2  r8  rE  rN  r]  rp  ry  r  r  r  r  r  r  r  r  r  r  skipifr  r  rN  r  r  r  r   r  r&  r@  rC  rF  r  rN  rP  rR  r`  rh  rp  ru  rw  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r0  r9  rC  rJ  rP  r]  rf  rk  rp  rD   rt  r}  r  r  r   r4   r2   <module>r     s  
  / /  * ! ! !F F F F * . 2 0 1 , ## #+,V4V<*+F3I>zz2::&,,.	~	%*O..]- ]-@
 
p9 p9f &)"BC D *- -*; ;(; ;DK/ K/^ &)1#s,#s,q"g& ) ' - - 2 *
 )F).'4T'6T48AG AGHL L^.?bA63>1>FD&DR7!t7:t&8R36D@"DJD4 LFUK UKp%PP%PP*/Z< DK  MKMK$:> &&!12+.q*q*q*!Q(!Q(b& ) ) + + + / 3b&J +.  / F (!1+!1+!1+!1+!1+!1+'11 988%?%?%@%=%?%?%A B 88$DE88%G%F%E%H%G%G%I J 88%G%H%F%G%I JK LM$,%M$,  &)XK *XKv L88$9:XX&@AXX&;<XX&9:XX&BCXXl3XXo6XXSz(,d|(+T{(+U|(+T{	') *  XXAw()2w()2w(*Bx(*Aw	'0 12&  XX&GHXX '4 5  XX&FGXX 'A BXX ': ;XX&?@XXo6XX*'=(3\'B(4i'@(3['A(1:'>	'@ A
  XX'7(.'7(.'8(/'8(.'7	'9 :%%)* V W* V ( &)1q"g&) ' 2 *)2 &)"BC D * [;6?A,&A,&^ [;6?A0A0 [;6?AMAM& A((#56((?3((#45((#89((QGaVaVb"X%&G$- .((S!Hq"g2wQ%&G$- . ((#34((#>?((=1((#56((VW$57G%+V$4vv6F$H I((T5MD$<$%)4L$2 3	E &1'&1.@ )V[;%>?AeAh/& 0A&: )V[;%>?AeAh/ 0A )V[;%>?AeAh/N 0AN )V[;%>?AeAh/ 0A :88$;<88$5688$DE88%F%G%G%F%H I	J 	=	= &)(@A=$ B *=$@. #>?t-	L . @	L D%=1t-
L . 2
L 6*01	' 2 +	' 6*+C ++C\ &)t}5#s,7@ - 6 *7@t &)1v.#s,-B - / *-B` &(+t}5#s,-< - 6 ,-<` 88$9:88$?@88$9:88c3Z#tsDk&(%[3+%? @88b!Wq"g2wR&(!W%. /0 88$EF88 %> ?88$DE88h
%;&1;%?&2H%=&1;%?&/%<	%> ?
 88ff%57G&,g%6&8I&,f%5%7 89:;());() )3v{1<8= ,> ?,NO  ?@BC
1:C?1:h )3v{1<8= ,> ?,NO  ?@BC
KC?K( )3v{1<8= ,> ?,NO  ?@BC
"C?"J 88$6788O488aWq!fq!fr2h&'W%. /88c1X2wB&(!Wq"g%7 8	9 88$4588$?@88h	%:&.%9&.%9&.%9%; < 88fg%6&,f%5&,f%5&,f%5%7 8	9:;"
*#;"
* 5$-0&)+= * 1+=\ &)!4 *!4H hh))*)+ , 	hh21113 4  	hhJKHHJ K 	hh 55567 8 0*10*  &),> *,>^ &)*4 **4Z 0hh11213 4 	hh03313 4 	hh21324 5 	hh| 	hh 67556 7 	hh 56567 8 	hh 65556 7 	hh|3')T5U)T5B &)5> *5>p "hh((((* + 	hh((((* + 	hh((((* + 	hh((((* + 	hh((((* + 	hh((((* + 	hh((((* + 	hh((((* +9, -!.D +.; /E!.F;" +.*-1-> 2 . /->` 4,/&)&), * * 0,. 4,/&)&)F * * 0F6 m!45 (E F#s,&)) * -F 6
)  &)1!& 2 *!&H m!45&)) * 6)& +.f-@ . /@ko  Gs   4AY YAYYAY