
    Bpj!                    0-   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"  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,r,  S SK-J.r.  S SK/J0r0  S=r1r2\0S   S   S   r1\0S   S   S   r2\Rf                  \Rh                  /r5\Rl                  \Rn                  /r8\5\8-   r9S r:S r;S r< " S S5      r= " S S5      r>\
R~                  R                  S\95      \
R~                  R                  S/ SQ5      S 5       5       rA " S S5      rB " S S 5      rC " S! S"5      rD " S# S$5      rE\
R~                  R                  S\95      \
R~                  R                  S%/ S&Q5      \
R~                  R                  S'S(S)/5      \
R~                  R                  S*S+S(/5      \
R~                  R                  S,S-S./5      S/ 5       5       5       5       5       rFS0 rGS1 rHS2 rIS3 rJ " S4 S55      rK " S6 S75      rLS8 rMS9 rNS: rOS; rPS< rQS= rRS> rSS? rTS@ rUSA rVSB rWSC rXSD rYSE rZ " SF SG5      r[SH r\SI r]SJ r^SK r_\
R~                  R                  SLSMSN9SO 5       raSP rb\
R~                  R                  SQSRSS/5      \
R~                  R                  S\55      \
R~                  R                  ST\c" \d" SU5      5      5      \
R~                  R                  SV\c" \d" SW5      5      5      \
R~                  R                  SX\c" \d" SW5      5      5      \
R~                  R                  SYS SZ/5      \
R~                  R                  S[S SZ/5      GSfS\ j5       5       5       5       5       5       5       re\
R~                  R                  S\55      S] 5       rf\
R~                  R                  S^STS_0SVS_0SXS_0SYS_0S`S_0S[S_045      Sa 5       rg\
R~                  R                  Sb\R                  " / ScQ/ SdQ/ SeQ/ SfQ/ SgQ/ ShQ/5      \R                  " / SiQ5      \R                  " / SjQ/ SkQ/ SlQ/ SmQ/ SnQ/ SoQ/5      \R                  " / SpQ/ SqQ/ SrQ/ SsQ/5      4/5      St 5       ri\
R~                  R                  S\95      Su 5       rj\
R~                  R                  Sv\R                  " / SwQ5      \R                  " / SxQ5      \R                  " / SyQ5      \R                  " / SzQ5      \R                  " / S{Q5      \R                  " / S|Q5      \R                  " / S}Q5      \R                  " S~S/SS/SS/SS/S~S//5      \R                  " SS/SS/S-S/SS/SSZ//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       rk\
R~                  R                  S\95      \
R~                  R                  S%/ SQ5      \
R~                  R                  S,S-S./5      S 5       5       5       rl\
R~                  R                  S\95      \
R~                  R                  S/ SQ5      S 5       5       rm\
R~                  R                  S\c" \n" \5\5-   \95      5      5      S 5       ro\
R~                  R                  S\c" \n" \5\5-   \95      5      5      S 5       rp\
R~                  R                  S\c" \n" \5\5-   \95      5      5      S 5       rq\
R~                  R                  S\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SUS./S_SW/SS_/SS/SS//5      \R                  " SS/SS/SZS/SSU/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       rrS rs\
R~                  R                  S\c" \n" \9\5\5-   5      5      5      \
R~                  R                  S\c" \d" S-5      5      5      S 5       5       rt\
R~                  R                  S\c" \n" \9\5\5-   5      5      5      \
R~                  R                  S\c" \d" S-5      5      5      S 5       5       ru\
R~                  R                  S\c" \n" \9\5\5-   5      5      5      \
R~                  R                  S\c" \d" S-5      5      5      S 5       5       rv\
R~                  R                  S\c" \n" \9\5\5-   5      5      5      \
R~                  R                  S\c" \d" S-5      5      5      S 5       5       rw\
R~                  R                  SS\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ/ SQ/ SQ/ SQ/5      4/5      S 5       rx\
R~                  R                  S\95      \
R~                  R                  S/ SQ5      S 5       5       ryS rz\
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\95      \
R~                  R                  S/ SQ5      S 5       5       r}\
R~                  R                  S\95      S 5       r~\
R~                  R                  S\95      \
R~                  R                  SSSL/5      \
R~                  R                  SSS+/5      S 5       5       5       r\
R~                  R                  S\95      \
R~                  R                  SS SZ/5      \
R~                  R                  SSS+/5      S 5       5       5       r\
R~                  R                  S\9S-  5      \
R~                  R                  SSSL/5      \
R~                  R                  SSS+/5      S 5       5       5       r\
R~                  R                  S\R                  " / SwQ5      \R                  " / SxQ5      \R                  " / SyQ5      \R                  " S~S/SS/SS/SS/S~S//5      \R                  " SS/SS/S-S/SS/SSZ//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\c" \n" \9\5\5-   5      5      5      \
R~                  R                  SSS 4S+S 4/5      S 5       5       r\
R~                  R                  S\c" \n" \9\5\5-   5      5      5      \
R~                  R                  SSS 4S+S 4/5      S 5       5       r\
R~                  R                  S\c" \n" \9\5\5-   5      5      5      \
R~                  R                  SSS 4S+S 4/5      S 5       5       r\
R~                  R                  S\R                  " / SQ5      \R                  " / SQ5      \R                  " SUS./S_SW/SS_/SS/SS//5      \R                  " SS/SS/SZS/SSU/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SSL/5      \
R~                  R                  S\95      GS 5       5       r\
R~                  R                  S\95      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      SSZ4\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      SZSW4/5      GS 5       r\
R~                  R                  S\95      GS 5       r\
R~                  R                  S\95      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S.Q/5      \R                  " / GS/Q/ GS0Q/ GS1Q/ GS2Q/5      \R                  " / GS$Q5      GS3GS44/5      GS5 5       r\
R~                  R                  S\95      GS6 5       r\
R~                  R                  GS7\R                  " / GS8Q/ GS9Q/ GS:Q/ GS;Q/5      \R                  " / GS<Q/ GS9Q/ GS:Q/ GS=Q/5      \R                  " / GS>Q/ GS?Q/ GS@Q/ GSAQ/5      \R                  " / GSBQ/ GSCQ/ GSDQ/ GSEQ/5      \R                  " / GSFQ/ GSGQ/ GSDQ/ GSHQ/5      \R                  " / GSIQ/ GSJQ/ GSKQ/ GSLQ/5      \R                  " / GS<Q/ GSMQ/ GSNQ/ GSOQ/5      \R                  " / GSPQ/ GSQQ/ GSRQ/ GSSQ/5      4/5      \
R~                  R                  S\55      GST 5       5       r\
R~                  R                  S\55      \
R~                  R                  GSUGSV5      \
R~                  R                  GSW/ GSXQ5      GSY 5       5       5       r\
R~                  R                  GSZSS/5      \
R~                  R                  S\95      \
R~                  R                  GSGS[5      GS\ 5       5       5       r\
R~                  R                  GSZSS/5      \
R~                  R                  S\95      \
R~                  R                  GSGS[5      GS] 5       5       5       r\
R~                  R                  S%\c" GS^5      5      \
R~                  R                  GS_/ GS`Q5      \
R~                  R                  S*S+S(/5      \
R~                  R                  S\95      GSa 5       5       5       5       r\
R~                  R                  S\95      \
R~                  R                  S%/ SQ5      GSb 5       5       r\
R~                  R                  S%\c" GS^5      5      \
R~                  R                  S\95      GSc 5       5       r\
R~                  R                  S\55      \
R~                  R                  GSdGS[5      GSe 5       5       rg(g      )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)lapackinvsvdcholeskysolveldlnorm
block_diagqreighqz)
_to_banded)_compute_lwork)ortho_groupunitary_group)diags_array)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/pdf-tiff/venv/lib/python3.13/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr2   '   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flapackHAS_LP64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       r1   test_lapack_documentedrJ   /   s    ~~,-$$&'E	K fGF$$)@!NN4   b=NNN=r3   c                  P    SSK Jn   SSKJn  X:X  d   eSSK Jn  SSKJn  X#:X  d   eg )Nr   )r9   )r7   )scipy.linalg.blasr9   scipy.linalg.lapackr7   )blas_has_ilp64lapack_has_ilp64blas_has_lp64lapack_has_lp64s       r1   (test_lp64_ilp64_blas_lapack_both_or_nonerR   F   s&    =A---;?+++r3   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[          H  n[        SUS	9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)         )         )      	   )rW   r   r   ga2U0*3?)rZ   r   r   gMb`?)r]   rW   r   r   )r   rW   r   r   gebalr/   r   rW   )permutescale)	DTYPESr#   r   reprr   r   lenr5   r   )
selfaa1r/   fbalohipivscaleinfos
             r1   
test_gebalTestFlapackSimple.test_gebalR   s    	9- E 6Ay)*1&BB$Hd4j)%b,"As1Q4y{#34%hA@)*2q)B&BB$Hd4j) r3   c                     / SQ/ SQ/ SQ/n[         R                  4 H7  n[        SUS9nUc  M  U" U5      u  pEn[        U(       + [	        U5      5        M9     g )Nikiifi     i"  iiigehrdra   )r5   float64r#   r   re   )rg   rh   r/   rj   httauro   s          r1   
test_gehrdTestFlapackSimple.test_gehrdg   sU     jj\E 6AyaDMBTHd4j) "r3   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 )NrW   rX   r   rZ   r[   r\   r^   r_   
         TfdFD)trsylr*   C)tranatranbdecimal)isgn)	r5   arrayr-   r#   isupperr   dot	conjugater   )rg   rh   bctransr/   ri   b1c1r   xrc   ro   s                r1   
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!=# r3   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FfrY   r]   Mm1Oor   axisIirW   )r5   r   r-   r   r#   sqrtsumsquareabsr   maxr   )	rg   rh   r/   norm_strri   r   valuer   refs	            r1   
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 * r3    N)	__name__
__module____qualname____firstlineno__rp   r{   r   r   __static_attributes__r   r3   r1   rT   rT   P   s    **	*=8-r3   rT   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~      rW   )gels
gels_lworkra   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrX   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r5   randomdefault_rng	enumeraterd   r-   r#   r   r   REAL_DTYPESr   r.   rf   r   finfoepsr	   r+   )rg   r0   indr/   mnnrhsri   r   glsglslwr   r=   ro   r   r   r   lqrr   	lqr_truths                       r1   	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./ $r3   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   ra   r   )gelsdgelsd_lworkrX   rW   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r5   r   r#   r.   rf   intrealr   r   r   r+   )rg   r/   ri   r   r   r   r   r   r   workiworkro   r   
iwork_sizer   srankrwork
rwork_sizes                      r1   
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 $r3   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   ra   r   )gelssgelss_lworkrX   rW   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rg   r/   ri   r   r   r   r   r   r   r   ro   r   vr   r   r   s                   r1   
test_gelss"TestLeastSquaresSolvers.test_gelss2  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 $r3   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   ra   r   )gelsyr   rX   rW   r~   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r5   r   r#   r.   rf   r   r   r   r   r   int32r   r+   )rg   r/   ri   r   r   gelsy_lworkr   r   r   r   ro   r   jptvr   r   jr   s                    r1   
test_gelsy"TestLeastSquaresSolvers.test_gelsyk  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+ $r3   r   N)	r   r   r   r   r   r   r   r  r   r   r3   r1   r   r      s    B/H:Px79r59r3   r   r/   r.   )rY   rZ   )r[   rX      r  c                 H    [        SU S9nUu  p4U" X4S9u  pV[        US5        g )Ngeqrf_lworkra   r   r   r   r#   r   )r/   r.   r	  r   r   r   ro   s          r1   test_geqrf_lworkr    s-     #M%@KDA'KEqr3   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,  rX   ra   gerqfrX   r   orgrqrW   ungrq)rd   r5   r   r#   assert_raises	Exceptionr   r+   )
rg   r/   rh   r  rqrz   r   ro   r  r  s
             r1   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!, r3   r   N)r   r   r   r   r  r   r   r3   r1   r  r    s    -r3   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*   )rY   rY   size)potrfpotri)r  r   )r5   r   r   normalr   r   r#   r   r   r   r   )rg   r  r  r0   r   rh   dpotrfdpotrir   r=   dpts              r1   test_gh_2691TestDpotr.test_gh_2691  s     ii##B'JJFJ#EE!##J)*<qeDae,Qq!BGGCL"''#a&/:BGGCL"''#a&/:r3   r   N)	r   r   r   r   r?   markparametrizer'  r   r   r3   r1   r  r    sF    [[WtUm4[[WtUm4; 5 5;r3   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   rW   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rY   z=LAPACK root finding dlasd4 failed to find the singular value zThere are NaN rootsd   atolr   )r5   r   hstackvstackdiagr   rf   newaxisr   concatenater   r#   rangerF   r   anyisnanr   r   rx   r   )rg   sigmasm_vecMSMit_lensgmmvcr5  rootsiress               r1   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	;r3   r   N)r   r   r   r   rK  r   r   r3   r1   r,  r,    s    ;r3   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  r/   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   ra   gp=
ף0rP  g(\+gףp=
0g333333*@g(\gHzG,gQ#rZ   rW   r   rY   rX   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   r8  N)r   r5   r   r+   
ValueErrorr#   r   r   )rg   r/   rU  r   x_outrR  r   ro   s           r1   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4r3   zdtype,trans)Nr   r   r   rV  UrS  r;  r]  c           	      R   [         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'   [        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  )rZ   rY   rX   rR  ra   r^  rW   r   dia)offsetsformatr   )rU  r   rV  r   r;  r]  g-C6
?r   r   r   zInvalid trans argument)r5   r   RandomStater#   r>  r   r2   r   r"   r   r   diagonalr   minr   r   r   r   rY  )rg   r/   r   rV  r;  r0   r   r   kdrR  is_upperkuklband_offsetsr   band_widthswidthbandsrh   rU  rowkr   ro   s                           r1   test_random_matricesTestTbtrs.test_random_matrices'  s    ii##D)
  6CK]W Rq"-+78<a3q6z<8)+)U -eXuB) 	 + 3;/E"I |EB 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)r^  r]  Invalid)r^  rr  r]  )rr  r]  r]  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 exceptionsrR  ra   r   )rZ   rX   )rX   rZ   N)r#   r5   rx   r   r   r  r  )rg   rV  r   r;  rR  r0   rU  r   s           r1   &test_invalid_argument_raises_exception0TestTbtrs.test_invalid_argument_raises_exception[  sR     !

;ii##D)ZZJJviAUAr3   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  ra   rZ   rR  r   )r   rY   r^  rT  N)r5   r   floatr#   r   )rg   rU  r   rR  r=   ro   s         r1   test_zero_element_in_diagonal'TestTbtrs.test_zero_element_in_diagonali  sQ     WWV5)GGAU# 65	2-T1r3   zldab,n,ldb,nrhs)r[   r[   r   r[   )r[   r[   rY   r[   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.ra   rR  Nr5   r   rw  r#   r  r  )rg   ldabr   ldbr   rU  r   rR  s           r1   test_invalid_matrix_shapes$TestTbtrs.test_invalid_matrix_shapesy  s@     WWdYe,GGSKu- 6iA.r3   r   N)r   r   r   r   r?   r)  r*  rd   r[  r   rp  rt  rx  r~  r   ).0r/   r   r   s   0000r1   rN  rN    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rN  r   )I1OrV  r^  rS  r;  r]  r   rY   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~   r^  trcon)r   rV  r;  r  ordrW   gecongetrfr   r   )rC   encoder5   r   r   permutedlogspaceintegers
issubdtypefloatingr   r   r   r;  r<  r-   r#   linalgr   infr   r   )r/   r   rV  r;  r   seedr0   Aoffsetr  rJ  r=   norm_A
norm_inv_Ar   anormr  r  luipvtro   r   s                         r1   
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(r3   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   lartgra   rY   rZ   r*   333333?r   y       皙?)	r#   r5   r   iscomplexobjr   r   
isinstancecomplexrw  )r/   r  rj   gcssnrs          r1   
test_lartgr    s     6HHQHHQ??1GA!K	G$3??1B	*Jq'*+Jr5)*B(' r3   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  rZ   rY   r~   rW   fdrotra   y             r*   y              @)r[   r[   r[   r[   )r   r   r   r   r8  rX   )r   )r[   r[   rY   rY   r   )offxoffy)rY   rY   r[   r[   )incxr  r   )r[   rY   r[   rY   )r  incyr   )r  r  r  r  r   )rY   rY   r[   rY   r  )r  r  r   )overwrite_xoverwrite_y)r5   fullr   	precisionr$   r#   r   r   )
r/   r   r   ur   r8  r  rj   rh   r   s
             r1   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 r3   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   )rZ   rZ   r*   r   larfglarfra   FDr   rW   rW   r   rX   r   r   RsiderW  r  )r5   r   r   r   r   conjr#   copyr.   r   r   r   r   )r0   a0a0jr/   r  r  rh   alphar   rz   expectedr   s               r1   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 r3   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r/   ilp64iA%  T)r1  r0  i`DiD)r#   r5   float32r   )sgesdd_lworkr   r   s      r1    test_sgesdd_lwork_bug_workaroundr    sO     $M*57LA<A&*$@E  I)!333!3r3   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)		TestSytrdi5  r/   c                 h    [         R                  " SUS9n[        SU45      n[        [        X25        g )Nr   ra   sytrdr5   r   r#   r  rY  )rg   r/   r  r  s       r1   test_sytrd_with_zero_dim_array(TestSytrd.test_sytrd_with_zero_dim_array6  s,     HHV5) 1$/j%+r3   r   rW   rY   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 )Nra   )r  sytrd_lworkrW   rX   r   r  r   r[   r   r7          r   r   )r5   r   r#   arangetriu_indices_fromr   r   r   r   r;  r   r.   r   r>  outerr   r   r   )rg   r/   r   r  r  r  r   ro   dataderz   r   ro  k2QrI  r   Hi_lowerQTAQs                        r1   
test_sytrdTestSytrd.test_sytrd=  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(;(;&;#Fr3   r   N)r   r   r   r   r?   r)  r*  r   r  r  r   r   r3   r1   r  r  5  se    [[Wk2, 3, [[Wk2[[S&)7G * 37Gr3   r  c            	           \ rS rSr\R
                  R                  S\5      S 5       r\R
                  R                  S\	" \
" \\5      5      5      \R
                  R                  SS5      S 5       5       rSrg	)
	TestHetrdiy  complex_dtypec                 h    [         R                  " SUS9n[        SU45      n[        [        X25        g )Nr   ra   hetrdr  )rg   r  r  r  s       r1   test_hetrd_with_zero_dim_array(TestHetrd.test_hetrd_with_zero_dim_arrayz  s,     HHV=1 1$/j%+r3   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 )Nra   )r  hetrd_lworkrW   rX   r*   r   rW   r  r   r  r[   r   r7  r  r   r   r~   )r5   r   r#   r  r  fill_diagonalr   r;  r   r   r   r   r   r   r.   r   r   r>  r  r  r   r   r   )rg   r   
real_dtyper  r  r  r  r   r=   ro   r   r  r  r  rz   r   ro  r  r  rI  r   r  r  QHAQs                           r1   
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	r3   r   N)r   r   r   r   r?   r)  r*  r+   r  rC   zipr   r  r   r   r3   r1   r  r  y  sw    [[_n=, >, [[7!#k>"BCE[[S&)A *EAr3   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_lworkra   r\   rZ   rX   )r   r   p)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   rd   r#   r   r5   r   r   r   )r   r/   func
func_lworkr   rh   r   r  r   r=   resultr  s               r1   
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 (r3   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~   rZ   sytrf_lworkra   )syconsytrfhetrf_lwork)heconhetrfr*   rX   rW   r   r  )rh   ipivr  r  r  )r5   r   r   r   rd   r+   r#   r-   r  r   r   r   r   r   r   r  cond)r0   r   r/   r   r  funconfunctrfr  r  r   ldur  r=   rconds                 r1   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?@- 7r3   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~   )r!  sygstsyevdsygvdra   rX   r   giUMu?r   )r5   r   r   r   r   r#   r-   r   r   r   r   )r0   r   r/   r   r!  r  r  r  r  Beig_gvdr=   ro   r   rh   eigs                   r1   
test_sygstr"    s   
))


%C,
%5 7I<A&C"e JJv%%e,WaKJJv%%e,WaK!bffQ444 !;D	 (	+	Qx	625 -r3   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~   )r!  hegstheevdhegvdra   r*   rX   r   -C6?r   )r5   r   r   r   r+   r#   r-   r  r   r   r   r   )r0   r   r/   r   r!  r$  r%  r&  r  r  r   r=   ro   r   rh   r!  s                   r1   
test_hegstr(  3  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 0r3   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_lworkra   rX   r*   r   r   Nr~   r   r  r7  )r5   r   rc  r   rd   r#   r   r   r,   r-   r  r  r   r   r9  r   r   r>  r   r  r   r   r   spacingr   )r0   r   r   r   r/   r-  tzrzf_lwr   r  rzrz   ro   r  VIdr   r   Zs                     r1   
test_tzrzfr5  R  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   rW   r*   r   r   )trttftfttrtfsmra   rX   r   r   rZ   r\   r   r   r   r^  )r   r;  rY   r  )r   r;  r  N)r5   r   rc  r   rd   r   r,   r   r-   r#   r   r   r  r   r  )r0   r   r/   r   r  r   r7  r8  r9  Afpr=   r  solnB2s                 r1   	test_tfsmr>  t  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? (r3   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,  ra   rX   )ormrzormrz_lworkr*   )unmrzunmrz_lworkr   Nr   r   r~   r   r   r  r7  r   r  )r  r   )r  r   r   )r5   r   rc  r   rd   r#   r   r   r-   r9  r   r>  r   r   r  r   r/  r   r   r   r   )r0   qmqncnr   r/   r-  r0  lwork_rzr  r   orun_mrzorun_mrz_lw	lwork_mrzr1  rz   ro   r2  r3  r   r   r  r   tolcqs                            r1   test_ormrz_unmrzrM    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   rW   r*   r   r   )r7  r8  ra   r   rS  rV  r^  )transrrV  rX   Nr   F)order)r5   r   rc  r   rd   r,   r-   r#   r   r   r   r  r   r   r   reshape)r0   r   r/   r   A_fullrQ  r7  r8  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                      r1   test_tfttr_trttfr`    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 (r3   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)rO  r   r   rW   r*   )trttptpttrra   r   rS  rP  rX   N)r5   r   rc  r   rd   r,   r-   r#   r   r   r   r   r   r   r   r   )r0   r   r/   r   rU  rb  rc  A_tp_Uro   A_tp_LindsA_tp_U_mA_tp_L_mr\  r]  s                  r1   test_tpttr_trttpri    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 (r3   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   rW   r*   )pftrfr7  r8  ra   r   N)r5   r   rc  r   rd   r,   r-   r  r   r   r#   r   r   r   )r0   r   r/   r   r  rk  r7  r8  r;  ro   	Achol_rfpA_chol_rr=   Achols                 r1   
test_pftrfro  :  s   
 ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("A./J5:<e !H	-		A)!(2% (r3   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   rW   r*   )pftrirk  r7  r8  ra   r   rX   rZ   r\   r   N)r5   r   rc  r   rd   r,   r-   r  r   r   r#   r   r   r   r   )r0   r   r/   r   r  rq  rk  r7  r8  r;  ro   
A_chol_rfp	A_inv_rfpA_inv_rr=   Ainvs                   r1   
test_pftrirv  U  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- (r3   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   rW   r*   rY   ra   rX   )pftrsrk  r7  r8  r   rZ   r\   r   N)r5   r   rc  r   rd   r,   r-   r  r   r   r   r#   r   r  r  r   r   )r0   r   r/   r   r  r  Bf1Bf2rx  rk  r7  r8  r;  ro   rr  r<  s                   r1   
test_pftrsr{  u  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 (r3   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   rW   r*   rX   r   hr7  r8  frkra   r   r   rZ   r\   r   N)r5   r   rc  r   rd   r,   r-   r  r   r   r#   r   r   r   )r0   r   r/   r   r  prefixr7  r8  shfrkr;  r=   r   Afp_outA_outs                 r1   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# (r3   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~   rW   i   r*   r6  r   )syconvr  r  ra   r  F)r  	hermitianr  r   Nr  r7  r   )r5   r   rc  r   rd   randintr-   r  r   r   r/  r   r#   r   r   r   r   r   )r0   r   r/   r   r  rK  r  trf	trf_lworklwrS  Dpermr  r  ro   rh   r  r^  s                      r1   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 (r3   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   rW   r*   r6  r   )geqrtgemqrtra   r   r   r  r7  r   r   rS  r  r]  r  r   rS  rS  r]  r  r  r:  )r5   r   rc  r   rd   r,   r-   r/  r   r#   r   r   r   r  r   r   r   r  r  )rg   r0   r   r/   r   r  rK  r  r  rh   tro   r   r  r  r   	transposer  r   r   qqC	c_defaults                          r1   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 ,r3   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   rW   r*   r6  r   )tpqrttpmqrtra   r   rX   r   r  r7  r   r   r  r]  r  rS  r   r  r  r  r:  )r5   r   rc  r   rd   r,   r-   r/  r   r#   r   r   r   r=  r   r   r  r   r   r  r  )!rg   r0   r   r/   r   r  r  rK  r  r  lrh   r   r  ro   B_pentb_pentr   r  r  r   r  r  r  r   r   r  r  cdCDqCDr  	d_defaults!                                    r1   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 $ ,r3   r   N)r   r   r   r   r>   r  r  r   r   r3   r1   r  r    s    
<A|QKr3   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~   rX   pstrfra   rW   r*   r    r   rX   rX  r  r5   r   rc  r   rd   r#   r,   r-   r  r   r   r   r   r  r   rx   r   r   )r0   r   r/   r   r  r  r  r   pivr_cro   r^  single_atoldouble_atolr8  rS  s                   r1   
test_pstrfr  o     
))


%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 (r3   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~   rX   pstf2ra   rW   r*   r  r  r  rX  r  r  )r0   r   r/   r   r  r  r  r   r  r  ro   r^  r  r  r8  rS  s                   r1   
test_pstf2r    r  r3   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ſFxrX   )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ֽra   )gffffff@g   tޅBr/  )g(\g   Zgq=
ףp?)gEop=gQ?gZEqҽr*   geequr   r'  rX  )r5   r   r   rd   r-   r#   r   )desired_realdesired_cplxr   r/   r  r  r  r   rowcndcolcndamaxro   s               r1   
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 (r3   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  rQ  r~   ra   rX   r   r*   r[   r   syequb)r5   r   r   rd   r   r>  rot90r;  r#   r   log2r-   r   )desired_log2sr   r/   r  r  r   r  r  r   scondr  ro   s               r1   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 )NrX   r[   i  r_   rW   )ro  r*   r   r  r  r  r\                   i   r[   r[   y              0@)r[   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r5   r;  r   r   zheequbr   r   r  r   r  cheequbr-   	complex64)r  r   r  r  ro   s        r1   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Jr3   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*   rX   getc2ra   gesc2r   r2  )overwrite_rhsrZ   r   )	r5   r   rc  r,   r   rd   r-   r#   r   )r0   r   r  r  r   r/   r  r   r  r  r  r  jpivro   r   rc   s                   r1   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:+ (r3   r   )r\   r[   r  jobar\   joburZ   jobvjobrrW   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  r6  gejsvra   rX   rW   r  rQ  r   )r  r  r  r  jobtr  NF)r1  r  )r5   r   rc  r   r   r2   r#   r  r  r  r   r   r   r;  r  r   identityr  matrix_rankcount_nonzero)r   r/   r  r  r  r  r  r  r0   r   r   r8  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r   r   r   ro   sigmas                                r1   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 r3   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  ra   r   r   rW   rW   )rW   r  r6  r~   r  N)r#   r   r.   r5   r   r   sinr  rT  r-   asfortranarrayr   r  r   )r/   r  r  r  r   r   r   ro   r  Acr=   s              r1   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r3   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)rX   rX   ra   r  Nr{  )r  r  r  s      r1    test_gejsv_invalid_job_argumentsr    s/     	e$AWE2E)U00r3   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.
r'  r  ra   r  N)r#   r/   r   )r  
sva_expectu_expectv_expectr8  r  r  r  r   r   r   ro   s               r1   test_gejsv_NAGr    sG    0 DWAGG4E#(8 CAUJ$/Hd+Hd+r3   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~   r6  rW   r/   r0   r   gttrfgttrsra   r   rX   r  r   r   r:  z?gttrf: _d[info-1] is , not the illegal value :0.)r5   r   rc  r   r   r2   r  r;  r#   r	   r   r   r   r   r   r  r  rY  testingr   )"r/   r0   r   r8  dur  dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  ro   r^  rS  rI  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos"                                     r1   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^   )rX   rY   rZ   r[   r[   g@gffffff@      g%@g@g	r  gffffff&g3@r  r[   r]   rQ  r  )       @             @      ?            ?      ?      )?r$  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r)  )r$  r%  r&  r'  )r(  r)  r*  r)  y ~:pffffff?)r!  r"  r#  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r)  r   y      @      y      ?       @y      @      @r"  y             r!  r#  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   r'  r  )r#   r   )r  r  r  du_expd_expdu2_expipiv_expr   r   r  r  r	  r
  r  r  r  ro   r  s                     r1   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr0  K  ss    d $$6A1GLE$)"$4!CStTC!C BD)D##3T5MGTGQr3   )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*   rW   r   r  r  )r  gtconr  r  g      ?r   )r5   r   r   r;  r  r  r   r-   r  r   r  r#   r   r   r   )r/   r   r   r0   r  r  r  r  r  r  r2  r  r  ro   rJ  r=   r  r  r  r  r   r   s                         r1   
test_gtconr3    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(r3   ))rY   r]   )r]   rY   r  c                 H    [        SU S9nUu  p4U" X4S9u  pV[        US5        g )Ngeqrfp_lworkra   r
  r   r  )r/   r.   r5  r   r   r   ro   s          r1   test_geqrfp_lworkr6    s-     $^EBLDA(KEqr3   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  r6  r~   rZ   rW   r   pttrfra   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r5   r   rc  r   r   r2   r;  r  r  r#   r	   r   r   r   r   r   )ddtyper/   r0   r8  r   r  r  r  r  r8  r
  _ero   rS  r  r   r   r:  _xs                      r1   test_pttrf_pttrsr>    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%r3   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   r8  ra   rX   rW   r   )r5   r   rc  r#   r2   r  rY  )r;  r/   r   r0   r8  r  r  s          r1   *test_pttrf_pttrs_errors_incompatible_shaper@    sr     	A
))


%CWE2E#QD&6:A#QqSFE7A*esVQ/*e#2/r3   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  r8  ra   rX   rW   r   z?pttrf: _d[info-1] is r  z2?pttrf should fail with non-spd matrix, but didn't)r5   r   rc  r#   r2   r   r   )
r;  r/   r   r0   r8  r  r  r
  r<  ro   s
             r1   'test_pttrf_pttrs_errors_singular_nonSPDrB    s     	A
))


#CWE2E#QD&6:A#QqSFE7AAaDAaD;LBD1Hq)"AX,7RSU 	$QD&6A;LBDDAIKLr3   z%d, e, d_expect, e_expect, b, x_expect)rZ   r~      r   r[   )r  r  r+  r^   )rZ   r_   r      rW   )r  gK=Ur  r  rX      A      g      @r   r  )rD  )   .      )y      0@      0@y      2@      "      ?      )rD  r_   rW   rZ   )r)  r   rK  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r(  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 )	Nr'  r8  r   ra   r  r:  rW   r  )r#   r   r  r/   r+   )r  r  d_expecte_expectr   x_expectr8  r8  r
  r<  ro   r:  r=  s                r1   test_pttrf_pttrs_NAGrP  	  s    4 DWAaD1E;LBDBt,Bt,WAaD1ERA&HBBt, 	ww. !,40 !r3   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  rW   rZ   rX   r   )	r5   r   rc  r2   r;  r   r  r   r   )r/   realtyper   	compute_zr0   A_eigvrr  r  trir  zs               r1   pteqr_get_d_e_A_zrX  ,	  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!<r3   zdtype,realtyperS  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  pteqrra   r~   r  r  rW  rS  r   zinfo = z, should be 0.r  N)r5   r   r   r#   rX  r   r   sortr   r  r   r  r;  )r/   rR  rS  r8  rZ  r   r  r  r  rW  d_pteqre_pteqrz_pteqrro   s                 r1   
test_pteqrr`  L	  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	& r3   c                 f    [        SU S9nSn[        XXB5      u  pVpxU" US-
  XhUS9u  ppUS:  d   eg )NrZ  ra   r~   rZ   rW  rS  r   r#   rX  r/   rR  rS  rZ  r   r  r  r  rW  r]  r^  r_  ro   s                r1   test_pteqr_error_non_spdre  l	  sI     ge4E
A"5AAJA! ',AE1Y&O#Gg!8O8r3   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 )NrZ  ra   r~   r   rb  )r#   rX  r  rY  )	r/   rR  rS  rZ  r   r  r  r  rW  s	            r1   "test_pteqr_raise_error_wrong_shaperg  z	  si     ge4E
A"5AAJA!*esVQyI*e#2!Ij%A3B9M r3   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 )NrZ  ra   r~   r   rb  rc  rd  s                r1   test_pteqr_error_singularri  	  sS     ge4E
A"5AAJA!AaDAaD&+AA&K#Gg!8O8r3   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.
r'  rZ  ra   rW   r   r[  r  N)r#   r/   r5   r;  r   r   )rS  r  r  rM  z_expectr8  rZ  rW  r
  r<  _zro   s               r1   test_pteqr_NAG_f08jgfrm  	  s|      Dgagg6E

RWWQ]"RWWQ^3Aq@BBBt,BFF2Jx 0t<r3   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     r6  geqrfpra   orgqrr   )rz   r   r   r   rX  r   )r5   r   rc  r   r   r#   r2   r   r   r   r   r.   r  r   r   allr;  rf   r   r?  )r/   rn  r0   r   r8  rr  gqrr   r   r  qr_Arz   ro   r  qqrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                         r1   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:>"$r3   c                  x    [         R                  " / 5      n [        SU R                  S9n[	        [
        X5        g )Nrr  ra   )r5   r   r#   r/   r  r  )A_emptyrr  s     r1   #test_geqrfp_errors_with_empty_arrayr  	  s)    hhrlGhgmm<F)V-r3   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   ra   rW   r  $_lwork raised unexpected exception: r   r+   r#   r   r  r?   failr  r  r   r/   sc_dlwdz_dlwr  s          r1   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   ra   rW   rS  rP  r  r  r  s          r1   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   )rW   r~   r6  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_lworkra   )r5   r   r   r  r   r#   r   rt  )
r  r   r0   r  r  r  dlwr  lwvalr   s
             r1   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)rq  rU      r  r  csdr  ra   r   lrworkr   r   r  g     @rX  )r   r    rvsr!   r#   r   dictr  r   re  r5   r   r>  cosr  r   r   r   )r  r   r  r  r  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2tro   r^  VHr  n11n12n21n22SonerI  Xcs                                  r1   test_orcsd_uncsdr  #
  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Br3   
trans_boolFfactrR  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  r6  gtsvxr  ra   r~   rW   r   r   rX   r   r   r]  rR  Nr\   r  r   dlfdfdufr  r  r   z?gtsvx info = z, should be zerorY   r  __len__Trcond should be scalar but is ferr.shape is z but should be berr.shape is )r5   r   rc  r   r   r#   r2   r;  r   r  r   r  r   r	   r   hasattrr.   )!r/   r  r  r0   r8  r  r  r   r  r  r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr  ferrberrro   s!                                    r1   
test_gtsvxr  R
  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+> @r3   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  ra   r~   rW   r   r   rX   r   r   rR  r\   r  r]  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )	r5   r   rc  r#   r2   r;  r   r  r   )r/   r  r  r0   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  ro   s                                  r1   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 
r3   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  ra   r~   rW   r   r   rX   r   r   rR  r\   r]  r  )r5   r   rc  r#   r2   r;  r   r  r   r  rY  r  )r/   r  r  r0   r  r  r   r  r  r  r  r   r   r   r  r  r  r  r  r  s                       r1   "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	<r3   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  ra   r#   r/   r   )r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  ro   s                    r1   test_gtsvx_NAGr  
  s:    . WAGG4EbR#I@I=CSe4a(r3   zfact,df_de_lambdac                 6    [        SUR                  S9" X5      $ Nr8  ra   r#   r/   r  r  s     r1   <lambda>r        (8?@ww)HHI)Nr3   c                     gN)NNNr   r  s     r1   r  r        -?r3   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  r6  ptsvxra   r[   rZ   rW   r   rX   r   r  r  efr   zinfo should be 0 but is .r  r  r  )rX   r  z# but should be ({x_soln.shape[1]},)r  N)r5   r   rc  r   r   r#   r2   r;  r  r  r	   r   r   r   r   r   r  r.   )r/   rR  r  df_de_lambdar0   r8  r  r   r  r  r  r  r   r  r  ro   r  r   r  r  r  rS  r  s                          r1   
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 :r3   c                 6    [        SUR                  S9" X5      $ r  r  r  s     r1   r  r  S  r  r3   c                     gr  r   r  s     r1   r  r  U  r  r3   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  ra   r[   rZ   rW   r   rX   r   r  )
r5   r   rc  r#   r2   r;  r  r  rY  r  )r/   rR  r  r  r0   r  r   r  r  r  r  r   r  r  ro   s                  r1   test_ptsvx_error_raise_errorsr  O  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Jr3   c                 6    [        SUR                  S9" X5      $ r  r  r  s     r1   r  r  n  r  r3   c                     gr  r   r  s     r1   r  r  p  r  r3   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  ra   r[   rZ   rW   r   rX   r   r]  r   rY   r  )r5   r   rc  r#   r2   r;  r  )r/   rR  r  r  r0   r  r   r  r  r  r  r   r  r  ro   r   r  r  r  s                      r1   test_ptsvx_non_SPD_singularr  j  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xr3   zd,e,b,xc                 ^    [        SUR                  S9nU" XU5      u  pVpxpn[        X75        g )Nr  ra   r  )r  r  r   r   r  r  r  x_ptsvxr  r  r  ro   s               r1   test_ptsvx_NAGr    s0    . WAGG4E/4Q1~,BGDa)r3   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   r6  )r~   rZ   r   ra   r   rW   )ppsvpptrfpptrspptrippconr  r  r  r   rX  )r  r  r  )r5   r   rc  r   r   r2   r  r   r   r>  r#   r   r   r   r   r   r  r   r   r   r  )r/   r  r0   r8  r   r   rh   r   yr   rf  apr  r  r  r  r  ulro   aululiaulibxxvr  r  s                             r1   !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   r6  r~   r   )geestrexcra   c                     g Nr   r   s    r1   r  !test_gees_trexc.<locals>.<lambda>      Dr3   Fr  r   r   rQ  ro  rX  r]   rW   r  r   r5   r   rc  r   r   r2   r#   r   r+   r   r   r  r   )r/   r0   r8  r   rh   r
  r  r	  r  rW  d2s              r1   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3r3   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.
r'  r  ra   r   )wantqr   r  N)r#   r/   r   r   )r  ifstilstexpectr8  r  r	  s          r1   test_trexc_NAGr!  	  sH    < DWAGG4E11-FQq	AFD)r3   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   r6  r~   r   )ggestgexcra   c                     g r  r   r  s    r1   r  !test_gges_tgexc.<locals>.<lambda><  r  r3   Fr2  overwrite_br   r   rW   r  rQ  r   ro  rX  r]   rX   rY   r  r  )r/   r0   r8  r   rh   r   r#  r$  r	  r   r  r  rW  d1r  s                  r1   test_gges_tgexcr*  1  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=r3   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   r6  r~   r   )r
  trsentrsen_lworkra   c                     g r  r   r  s    r1   r  !test_gees_trsen.<locals>.<lambda>l  r  r3   Fr  r   r   rQ  ro  rX  rW   r\   r   r   liworkr   r5   r   rc  r   r   r2   r#   r   r+   r   r   r  r   r   r   )r/   r0   r8  r   rh   r
  r,  r-  r	  r  rW  r  selectr   s                 r1   test_gees_trsenr4  a  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3r3   z*t, q, expect, select, expect_s, expect_sep)g/$?gQIg~jtx?gJ4?)r  58EGrgGr?gyX5;?)r  g?߾r5  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)\(?)rW   r   r   rW   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.
r'  r  )r,  r-  ra   r   rW   r0  r   r   rZ   r[   r\   r  N)r#   r/   r   r+   r   r   r  r   )r  r  r3  r   expect_s
expect_sepr8  atol2r,  r-  r   r	  r   seps                 r1   test_trsen_NAGr;    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4r3   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   r6  r~   r   )r#  tgsentgsen_lworkra   c                     g r  r   r  s    r1   r  !test_gges_tgsen.<locals>.<lambda>  r  r3   Fr'  r   r   rW   r  rQ  r   ro  rX  r\   r   ir  r  r2  )r/   r0   r8  r   rh   r   r#  r=  r>  r	  r   r  r  rW  r)  r  r3  r   s                     r1   test_gges_tgsenrA    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=r3   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          rC  )rB  r   rC  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   )rD  r   r  r   )r  r   g       r  )r  r         r   )rE  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 )Nr'  tgsylra   r   r   r6  zSCALE must be 1.0r   r8  r9  r  zDIF must be nearly 0zSolution for R is incorrect)r8  r9  zSolution for L is incorrect)r#   r   r   r5   r   r   )rh   r   r   r  r  rj   ranslansr/   r8  rG  routloutrc   difro   s                   r1   test_tgsyl_NAGrN    s    H Dge4E#(qQ#: DDqE3QRXXe_-@-@-D/1C1288E?+>+>s+B24DT9;DT9;r3   r   )r]  r   ijob)r   rW   rX   rY   rZ   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  rX   rG  ra   )r   rO  r   zINFO is non-zeror  zSCALE must be non-negativer6  zDIF must be 0 for ijob =0rH  zDIF must be non-negativer]  r   r  zlhs1 and rhs1 do not match)r8  r   r9  zlhs2 and rhs2 do not match)r5   r  r   r   r   uniformr-   r#   r   r   r   r  )r/   r   rO  r8  r0   r   r   rh   r  r=   r   r  r   rj   rG  rK  rL  rc   rM  ro   lhs1rhs1lhs2rhs2s                           r1   
test_tgsylrW  G  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 <	> r3   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   r[   r  r*   r  r  r  trsra   r  r  r   )rh   r  r   r  r6  r  )r   r?   r@   r5   r   r   r+   rR  r-   r   r  r#   r   r   r   )rX  r/   r  r0   r   r   r  r   rG   r  r  r[  r   r  r  ro   r   r   s                     r1   test_sy_hetrsr\  z  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+r3   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-23133rZ  r   r*   r  r  rV  ra   r  r   )rh   r  r  r6  r  )r   r?   r@   	sysconfigget_platformr+   r5   r   r   r  r  r   r-   r   r  r#   r   r   r  r   r   r   r   )r/   r  rX  r0   r   r  rG   r  rV  r  r  ro   A_invr   r   s                  r1   test_sy_he_trira    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Er3   r   z
uplo, m, n))r^  r[   r~   )r^  r~   r~   )rS  r~   r[   )rS  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   )rV  r;  r^  rW   >r   )
r5   r   r   r-   r#   r   r   r  re  r   )r   rV  r   r   r;  r/   r0   r  rc  r   rJ  rI  r   s                r1   
test_lantrre    s     ))

 1
2C


&&u-A#$6=LE
d
.C ck
rwwqzAs{IIc!i Q$
.CC4(r3   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~   rX   rX   r*   r   r~   rW   rX   ra   r  r  )gbcongbtrf)r   ri  rh  rU  r  r  r  r  r   )r5   r   r   r  r  r  r  r  r   r-   r   r   r   r   r  r   r  r#   r   )r/   r   r0   r   rh  ri  r  r  tmpLDABrU  r  ri  rj  lu_bandr  r=   rJ  r  r  r  r   s                         r1   
test_gbconrn    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%r3   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 )	Nrg  rh  r*   r   rW   )langbr   rd  r   )r5   r   r   r  r  r   r-   r   r   r   r#   r   )r/   r   r0   r   rh  ri  r  rU  rp  r   r   rJ  s               r1   
test_langbrq    s     ))


,C IA2

A6SZZ/22A	}}UBKK((FF	A$%Abooaa !%&Abooaq!"	BA	B#$6=LE
.C
"
!CC4(r3   	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~   ra   rW   r   stevd)rr  r   r  r  )r5   r   r   r;  r  eigvalshr#   r   r\  r   r   r   )r/   rr  r0   r   r  r  r  r   rt  r^  r2  ro   r   s                r1   
test_stevdrv    s    ))

 2
3C
A

1
"A

1q5
&A
2#bggam3A
))

Q
CW%Eqy1JA$199BGGAJ-hhuo!!BGGAJ,a3h? r3   r4  )	functoolsr   r^  numpy.testingr   r   r   r   r   r	   r?   r
   r  numpyr5   r   r   r   r   r   r   r   r   scipy.linalgr   r   r   r   r   r   r   r   r   r   r   scipy.linalg._basicr   rM   r   scipy.statsr    r!   scipy.sparser"   r#   rL   r$   scipy.__config__r%   blas_providerblas_versionr  rx   r   r  
complex128r+   rd   r2   rJ   rR   rT   r   r)  r*  r  r  r  r,  rN  r  r  r  r  r  r  r  r
  r  r"  r(  r5  r>  rM  r`  ri  ro  rv  r{  r  r  r  r  r  r  r  skipifr  r  rC   r>  r  r  r  r   r  r  r0  r3  r6  r  r>  r@  rB  rP  rX  r`  re  rg  ri  rm  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r*  r4  r;  rA  rN  rW  r\  ra  re  rn  rq  rv  r   r3   r1   <module>r     sH  
  / /  * ! ! !    + . 2 $ 0 , ## #+,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+.eAh0eAh0eAh0!Q(!Q(b& ) ) 1 1 1 / 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 * c+";VDEG,&G,&^ c+";VDEG0G0 S{!:FCDFMF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.@ )c&+*CDEGd58n5& 6G&: )c&+*CDEGd58n5 6G )c&+*CDEGd58n5N 6GN )c&+*CDEGd58n5 6G :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:;());() )4FK1<== 1> ,? @,NO  ?@BC
1:C@1:h )4FK1<== 1> ,? @,NO  ?@BC
KC@K( )4FK1<== 1> ,? @,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-@ . /@r3   