
    -i|                    ,   S SK Jr  S SKrS SKrS SKJrJrJrJrJ	r	J
r
  S SKrS SKJr  S SK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  S SKJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)  S SK*J+r+  S S	K,J-r-  S S
K.J/r/J0r0  S SK1J2r3   S SK4J5r5   S SKJ7r8  S SK,J9r9  S SK:J;r;  \Rx                  \Rz                  /r>\R~                  \R                  /rA\>\A-   rBS=rCrD\5b  \5S   S   S   rC\5S   S   S   rDS rES rF " S S5      rG " S S5      rH " S S5      rI\R                  R                  S\B5      \R                  R                  S/ SQ5      S 5       5       rL " S S 5      rM " S! S"5      rN " S# S$5      rO " S% S&5      rP\R                  R                  S\B5      \R                  R                  S'/ S(Q5      \R                  R                  S)S*S+/5      \R                  R                  S,S-S*/5      \R                  R                  S.S/S0/5      S1 5       5       5       5       5       rQS2 rRS3 rSS4 rTS5 rU " S6 S75      rV " S8 S95      rWS: rXS; rYS< rZS= r[S> r\S? r]S@ r^SA r_SB r`SC raSD rbSE rcSF rdSG re " SH SI5      rfSJ rgSK rhSL riSM rj\R                  R                  SNSOSP9SQ 5       rlSR rm\R                  R                  SSSTSU/5      \R                  R                  S\>5      \R                  R                  SV\n" SW5      5      \R                  R                  SX\n" SY5      5      \R                  R                  SZ\n" SY5      5      \R                  R                  S[S S\/5      \R                  R                  S]S S\/5      GShS^ j5       5       5       5       5       5       5       ro\R                  R                  S\>5      S_ 5       rp\R                  R                  S`SVSa0SXSa0SZSa0S[Sa0SbSa0S]Sa045      Sc 5       rq\R                  R                  Sd\R                  " / SeQ/ SfQ/ SgQ/ ShQ/ SiQ/ SjQ/5      \R                  " / SkQ5      \R                  " / SlQ/ SmQ/ SnQ/ SoQ/ SpQ/ SqQ/5      \R                  " / SrQ/ SsQ/ StQ/ SuQ/5      4/5      Sv 5       rs\R                  R                  S\B5      Sw 5       rt\R                  R                  Sx\R                  " / SyQ5      \R                  " / SzQ5      \R                  " / S{Q5      \R                  " / S|Q5      \R                  " / S}Q5      \R                  " / S~Q5      \R                  " / SQ5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/S/S/SS/SS\//5      4	\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/SS/SS/SS//5      4	/5      S 5       ru\R                  R                  S\B5      \R                  R                  S'/ SQ5      \R                  R                  S.S/S0/5      S 5       5       5       rv\R                  R                  S\B5      \R                  R                  S/ SQ5      S 5       5       rw\R                  R                  S\x" \>\>-   \B5      5      S 5       ry\R                  R                  S\x" \>\>-   \B5      5      S 5       rz\R                  R                  S\x" \>\>-   \B5      5      S 5       r{\R                  R                  S\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SWS0/SaSY/SSa/SS/SS//5      \R                  " SS/SS/S\S/SSW/S/S//5      4\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SS/SS/SS/SS//5      \R                  " SS/SS/SS/SS//5      4/5      S 5       r|S r}\R                  R                  S\x" \B\>\>-   5      5      \R                  R                  S\n" S/5      5      S 5       5       r~\R                  R                  S\x" \B\>\>-   5      5      \R                  R                  S\n" S/5      5      S 5       5       r\R                  R                  S\x" \B\>\>-   5      5      \R                  R                  S\n" S/5      5      S 5       5       r\R                  R                  S\x" \B\>\>-   5      5      \R                  R                  S\n" S/5      5      S 5       5       r\R                  R                  SS\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ/ SQ/ SQ/ SQ/5      4/5      S 5       r\R                  R                  S\B5      \R                  R                  S/ SQ5      S 5       5       rS r\R                  R                  S/ SQ5      \R                  R                  SSS/5      S 5       5       r\R                  R                  SSS/5      \R                  R                  SSS/5      S 5       5       r\R                  R                  S\B5      \R                  R                  S/ SQ5      S 5       5       r\R                  R                  S\B5      S 5       r\R                  R                  S\B5      \R                  R                  SSSN/5      \R                  R                  SSS-/5      S 5       5       5       r\R                  R                  S\B5      \R                  R                  SS S\/5      \R                  R                  SSS-/5      S 5       5       5       r\R                  R                  S\BS-  5      \R                  R                  SSSN/5      \R                  R                  SSS-/5      S 5       5       5       r\R                  R                  S\R                  " / SyQ5      \R                  " / SzQ5      \R                  " / S{Q5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/S/S/SS/SS\//5      4\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/SS/SS/SS//5      4/5      S 5       r\R                  R                  S\x" \B\>\>-   5      5      \R                  R                  SSS 4S-S 4/5      S 5       5       r\R                  R                  S\x" \B\>\>-   5      5      \R                  R                  SSS 4S-S 4/5      S 5       5       r\R                  R                  S\x" \B\>\>-   5      5      \R                  R                  SSS 4S-S 4/5      GS  5       5       r\R                  R                  GS\R                  " / SQ5      \R                  " / SQ5      \R                  " SWS0/SaSY/SSa/SS/SS//5      \R                  " SS/SS/S\S/SSW/S/S//5      4\R                  " / SQ5      \R                  " / SQ5      \R                  " SS/SS/SS/SS//5      \R                  " SS/SS/SS/SS//5      4/5      GS 5       r\R                  R                  GSSSN/5      \R                  R                  S\B5      GS 5       5       r\R                  R                  S\B5      GS 5       r\R                  R                  GS\R                  " / GSQ/ GSQ/ GS	Q/ GS
Q/5      \R                  " / GSQ/ GSQ/ GSQ/ GS
Q/5      SS\4\R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      \R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      S\SY4/5      GS 5       r\R                  R                  S\B5      GS 5       r\R                  R                  S\B5      GS 5       r\R                  R                  GS\R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      \R                  " / GSQ/ GSQ/ GS Q/ GS!Q/5      \R                  " / GS"Q/ GS#Q/ GS$Q/ GS%Q/5      \R                  " / GS&Q5      GS'GS(4\R                  " / GS)Q/ GS*Q/ GS+Q/ GS,Q/5      \R                  " / GS-Q/ GS.Q/ GS/Q/ GS0Q/5      \R                  " / GS1Q/ GS2Q/ GS3Q/ GS4Q/5      \R                  " / GS&Q5      GS5GS64/5      GS7 5       r\R                  R                  S\B5      GS8 5       r\R                  R                  GS9\R                  " / GS:Q/ GS;Q/ GS<Q/ GS=Q/5      \R                  " / GS>Q/ GS;Q/ GS<Q/ GS?Q/5      \R                  " / GS@Q/ GSAQ/ GSBQ/ GSCQ/5      \R                  " / GSDQ/ GSEQ/ GSFQ/ GSGQ/5      \R                  " / GSHQ/ GSIQ/ GSFQ/ GSJQ/5      \R                  " / GSKQ/ GSLQ/ GSMQ/ GSNQ/5      \R                  " / GS>Q/ GSOQ/ GSPQ/ GSQQ/5      \R                  " / GSRQ/ GSSQ/ GSTQ/ GSUQ/5      4/5      \R                  R                  S\>5      GSV 5       5       r\R                  R                  S\>5      \R                  R                  GSWGSX5      \R                  R                  GSY/ GSZQ5      GS[ 5       5       5       r\R                  R                  GS\SS/5      \R                  R                  S\B5      \R                  R                  GSGS]5      GS^ 5       5       5       r\R                  R                  GS\SS/5      \R                  R                  S\B5      \R                  R                  GSGS]5      GS_ 5       5       5       r\R                  R                  S'\" GS`5      5      \R                  R                  GSa/ GSbQ5      \R                  R                  S,S-S*/5      \R                  R                  S\B5      GSc 5       5       5       5       r\R                  R                  S\B5      \R                  R                  S'/ SQ5      GSd 5       5       r\R                  R                  S'\" GS`5      5      \R                  R                  S\B5      GSe 5       5       r\R                  R                  S\>5      \R                  R                  GSfGS]5      GSg 5       5       rg! \6 a    Sr5 GNf = f! \6 a    Sr8 GNf = f(i      )reduceN)assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equal)raises)eyeoneszeros
zeros_liketriutriltril_indicestriu_indices)randrandintseed)_flapacklapackinvsvdcholeskysolveldlnorm
block_diagqreighqz)
_to_banded)_compute_lwork)ortho_groupunitary_group)CONFIG)_clapack)get_lapack_funcs)get_blas_funcsz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_DTYPESr   astype)shapedtyperngs      Q/var/www/html/venv/lib/python3.13/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr5   2   sT    % ((E"4'()/	788U""5))    c                  p   [         R                  c  [        R                  " S5        [	        [         R                  R                  5       5      n 1 Skn[        5       n[        [         5       H:  nUR                  S5      (       a  M  X1;  d  M"  X0;  d  M)  UR                  U5        M<     U/ :X  d   S5       eg)z%Test that all entries are in the doc.Nzlapack.__doc__ is None>   npclapackflapackdivision	HAS_ILP64print_functionabsolute_importfind_best_lapack_type_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   __doc__pytestskipsetsplitlistdir
startswithappend)namesignore_listmissingr+   s       r4   test_lapack_documentedrM   :   s    ~~,-$$&'E	K fGF$$)@!NN4   b=NNN=r6   c                   ,    \ rS rSrS rS rS rS rSrg)TestFlapackSimpleQ   c           	         / SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/ SQ/nS H  n[        [        US	-   S 5      nUc  M  U" U5      u  pVpxn	[        U	(       + [        U	5      5        [	        XQ5        [        Xg4S
[        US
   5      S-
  45        [	        U[        R                  " [        U5      5      5        U" USSS9u  pVpxn	[        U	(       + [        U	5      5        M     g )N)         )         )      	   )rR   r   r   ga2U0*3?)rU   r   r   gMb`?)rX   rR   r   r   )r   rR   r   r   sdzcgebalr   rR   )permutescale)	getattrr:   r   reprr   r   lenr8   r   )
selfaa1pfbalohipivscaleinfos
             r4   
test_gebalTestFlapackSimple.test_gebalS   s    	9- A7D1Ay)*1&BB$Hd4j)%b,"As1Q4y{#34%hA@)*2q)B&BB$Hd4j) r6   c                     / SQ/ SQ/ SQ/nS HA  n[        [        US-   S 5      nUc  M  U" U5      u  pEn[        U(       + [        U5      5        MC     g )Nikiifi     i"  iiidgehrd)r_   r:   r   r`   )rb   rc   re   rf   httaurk   s          r4   
test_gehrdTestFlapackSimple.test_gehrdh   sU     A7D1AyaDMBTHd4j) r6   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 )NrR   rS   r   rU   rV   rW   rY   rZ   
         TfdFD)trsylr.   C)tranatranbdecimal)isgn)	r8   arrayr0   r(   isupperr   dot	conjugater}   )rb   rc   bctransr2   rd   b1c1r   xr^   rk   s                r4   
test_trsylTestFlapackSimple.test_trsyls   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!=# r6   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 )Nro   rp   rr   r~   Mm1OoIiFfEer   r   r.   )langeFfEeFfrT   rX   Mm1Oor   axisIirR   )r8   r   r0   r   r(   sqrtsumsquareabsr   maxr   )	rb   rc   r2   norm_strrd   r   valuer   refs	            r4   
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 * r6    N)	__name__
__module____qualname____firstlineno__rl   rw   r   r   __static_attributes__r   r6   r4   rO   rO   Q   s    **	*=8-r6   rO   c                        \ rS rSrS rS rSrg)
TestLapack   c                 0    [        [        S5      (       a  g g Nempty_module)hasattrr:   rb   s    r4   test_flapackTestLapack.test_flapack       7N++ ,r6   c                 0    [        [        S5      (       a  g g r   )r   r9   r   s    r4   test_clapackTestLapack.test_clapack   r   r6   r   N)r   r   r   r   r   r   r   r   r6   r4   r   r      s    
r6   r   c                   ,    \ rS rSrS rS rS rS rSrg)TestLeastSquaresSolvers   c           	      R   [        S5        [        [        5       H  u  pSnSnSn[        X45      R	                  U5      n[        U5      R	                  U5      n[        SUS9u  p[        XXE5      n
U" XgU
S9u    p[        US:  5        U" XgS	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Xg45      u  pnUR                  u  p4[        UR                  5      S:X  a  UR                  S   nOSn[        XXE5      n
U" XgU
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Xg45      u  pnUR                  u  p4[        UR                  5      S:X  a  UR                  S   nOSn[        XXE5      n
U" XgU
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  rz      rR   )gels
gels_lworkr2   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrS   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r0   r(   r#   r   REAL_DTYPESr8   r   r1   ra   r   finfoepsr	   r/   )rb   indr2   mnnrhsrd   r   glsglslwr   r@   rk   r   r   r   lqrr   	lqr_truths                      r4   	test_gels!TestLeastSquaresSolvers.test_gels   s   T
#F+JCAADa""5)Ba&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./ $r6   c                 \   [          GHD  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS5      u  pn[        [        R                  " U	5      5      nU
nU" X#XSSS5      u  pnn[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  [        U[        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMG     [         GHR  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS5      u  n	np[        [        R                  " U	5      5      n[        U5      nU
nU" X#UUUSSS5      u  pnn[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  [        U[        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMU     g )Nr   r   r   r   r   r   r   r   )gelsdgelsd_lworkrS   rR   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r8   r   r(   r1   ra   intrealr   r   r   r/   )rb   r2   rd   r   r   r   r   r   r   workiworkrk   r   
iwork_sizer   srankrwork
rwork_sizes                      r4   
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 $r6   c           	      4   [          GHA  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS5      u  p[        [        R                  " U	5      5      nU" X#SUSS5      u  ppp[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  [        U[        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMD     [         GHA  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS5      u  p[        [        R                  " U	5      5      nU" X#SUSS5      u  ppp[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  [        U[        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMD     g )Nr   r   r   r   r   r   r   r   )gelssgelss_lworkrS   rR   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rb   r2   rd   r   r  r  r   r   r   r   rk   r   vr   r   r   s                   r4   
test_gelss"TestLeastSquaresSolvers.test_gelss@  s    [EC:::'.35B ,E:B!12J35("<E 88DA288}!xx{ %Q44JD&E(-bb%(N%A!4AcrFBHH.A.@.B38%: "$BHHUO$7$7!79 Arxx);):)<CH J!#BHHUO$7$7!79/ !6 $^EHc?$h/$h/18=?B 6eDB!12J35("<E 88DA288}!xx{ %Q44JD&E(-bb%(N%A!4AcrFHH&J&J&L+02 "$BHHUO$7$7!7	9
 Arxx);):)<CH J!#BHHUO$7$7!791 $r6   c           
         [          GHs  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS[        R                  " U5      R                  -  5      u  p[        [        R                  " U	5      5      n[        R                  " UR                  S   S4[        R                  S9nU" X#U[        R                  " U5      R                  USS5      u  pnnn
[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMv     [         GHs  n[        R                  " SS/SS/SS//US9n[        R                  " / SQUS9n[        S	X#45      u  pEUR                  u  pg[        UR                  5      S
:X  a  UR                  S   nOSnU" XgUS[        R                  " U5      R                  -  5      u  p[        [        R                  " U	5      5      n[        R                  " UR                  S   S4[        R                  S9nU" X#U[        R                  " U5      R                  USS5      u  pnnn
[        US S [        R                  " SS/US9S[        R                  " U5      R                  -  S9  GMv     g )Nr   r   r   r   r   r   r   r   )gelsyr  rS   rR   rz   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r8   r   r(   r1   ra   r   r   r   r   r   int32r   r/   )rb   r2   rd   r   r  gelsy_lworkr   r   r   r   rk   r   jptvr  r   jr   s                    r4   
test_gelsy"TestLeastSquaresSolvers.test_gelsyy  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+ $r6   r   N)	r   r   r   r   r   r   r  r  r   r   r6   r4   r   r      s    B/H:Px79r59r6   r   r2   r1   )rT   rU   )rV   rS      r  c                 H    [        SU S9nUu  p4U" X4S9u  pV[        US5        g )Ngeqrf_lworkr   r   r   r   r(   r   )r2   r1   r  r   r   r   rk   s          r4   test_geqrf_lworkr    s-     #M%@KDA'KEqr6   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,  rS   r   gerqfrS   r   orgrqrR   ungrq)r   r8   r   r(   assert_raises	Exceptionr   r/   )
rb   r2   rc   r  rqrv   r   rk   r  r  s
             r4   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!, r6   r   N)r   r   r   r   r!  r   r   r6   r4   r  r    s    -r6   r  c                       \ rS rSrS rSrg)	TestDpotri  c           
      *   S GH  nS GH  n[         R                  R                  S5        [         R                  R                  SS9nUR	                  UR
                  5      n[        SU45      u  pVU" XAUS9u  pxU" Xq5      S   n	U(       a?  [        [         R                  " U	5      [         R                  " [        U5      5      5        M  [        [         R                  " U	5      [         R                  " [        U5      5      5        GM     GM     g )N)TF*   )rT   rT   size)potrfpotri)cleanr   )r8   randomr   normalr   r}   r(   r   r   r   r   )
rb   lowerr+  r   rc   dpotrfdpotrir   rk   dpts
             r4   test_gh_2691TestDpotr.test_gh_2691  s    "E&		r"II$$&$1EE!##J!12Dqe!L 7Q&q)#BGGCL"''#a&/B#BGGCL"''#a&/B ' #r6   r   N)r   r   r   r   r2  r   r   r6   r4   r$  r$    s    Cr6   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   rR   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rT   z=LAPACK root finding dlasd4 failed to find the singular value zThere are NaN rootsd   atolr   )r8   r   hstackvstackdiagr   ra   newaxisr   concatenater   r(   rangerI   r   anyisnanr   r   float64r   )rb   sigmasm_vecMSMit_lensgmmvcr>  rootsiress               r4   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	;r6   r   N)r   r   r   r   rU  r   r   r6   r4   r5  r5    s    ;r6   r5  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  r2   c                    U[         ;   a^  [        R                  " / SQ/ SQ/US9n[        R                  " SS/SS/SS	/S
S//US9n[        R                  " SS/SS/SS/SS//US9nOzU[        ;   aa  [        R                  " / SQ/ SQ/ SQ/US9n[        R                  " SS/SS/SS/SS//US9n[        R                  " SS/S S!/S"S#/S$S%//US9nO[	        S&U S'35      e[        S(US9nU" X#S)S*9u  pg[        US+5        [        XdS+S,S-9  g.)/zTest real (f07vef) and complex (f07vsf) examples from NAG

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

)p=
ףgQ@gHzG@g{Gz?)g      gq=
ףp@gHzGr   r   gp=
ף0rZ  g(\+gףp=
0g333333*@g(\gHzG,gQ#rU   rR   r   rT   rS   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   rA  N)r   r8   r   r/   
ValueErrorr(   r   r   )rb   r2   r_  r   x_outr\  r   rk   s           r4   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4r6   zdtype,trans)Nr}   r   r   r`  Ur]  rD  rg  c           	      h   [         R                  R                  S5      nSu  pgn[        SUS9n	US:H  n
X-  nX-
  n[	        X* S-
  S5      nU Vs/ s H  o[        U5      -
  PM     nnU Vs/ s H  n[        U4X5      PM     nnUS:X  a  [         R                  " XaS9UU'   [        R                  " UUSS	9n[         R                  " US-   U4U5      n[        U5       H5  u  nnUR                  U5      UU[        US
5      [        UU-   U5      24'   M7     [        Xg4X5      nU	" UUX2US9u  nn[        US
5        US:X  a  [!        UU-  USS9  g US:X  a  [!        UR"                  U-  USS9  g US:X  a'  [!        UR"                  R%                  5       U-  USS9  g ['        S5      es  snf s  snf )Ni  )rU   rT   rS   r\  r   rh  rR   r   dia)formatr   )r_  r   r`  r   rD  rg  g-C6
?r   r}   r   zInvalid trans argument)r8   r,  RandomStater(   rG  r   r5   r   spsdiagsr   r   diagonalr   minr   r   r}   r   rc  )rb   r2   r   r`  rD  r3   r   r   kdr\  is_upperkuklband_offsetsr   band_widthswidthbandsrc   r_  rowkr   rk   s                           r4   test_random_matricesTestTbtrs.test_random_matrices5  s    ii##D)
  6CK]W Rq"-+78<a3q6z<8)+)U -eXuB) 	 + 3;/E"I IIe\%8 XXrAvqk5)-FC-.ZZ]BsC1Ic!A#qk))* . (	5>2F4T1C<AE140c\ACC!GQT2c\ACCMMOa/>5669 9+s   F*-F/zuplo,trans,diag)rh  rg  Invalid)rh  r}  rg  )r}  rg  rg  c           	          [        S[        R                  S9n[        SS5      n[        SS5      n[	        [
        XEXaX#5        g)z?Test if invalid values of uplo, trans and diag raise exceptionsr\  r   rU   rS   N)r(   r8   rJ  r   r  r  )rb   r`  r   rD  r\  r_  r   s          r4   &test_invalid_argument_raises_exception0TestTbtrs.test_invalid_argument_raises_exceptioni  s8     !

;!QZAJiAUAr6   c                     [         R                  " S[        S9n[         R                  " S[        S9n[        S[        S9nSUS'   U" XSS9u  pE[	        US5        g	)
a(  Test if a matrix with a zero diagonal element is singular

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

Note that ?tbtrs requires the matrix A to be stored in banded form.
In this form the diagonal corresponds to the last row.r  r   rU   r\  r   )r   rT   rh  r^  N)r8   r   floatr(   r   )rb   r_  r   r\  r@   rk   s         r4   test_zero_element_in_diagonal'TestTbtrs.test_zero_element_in_diagonalv  sQ     WWV5)GGAU# 65	2-T1r6   zldab,n,ldb,nrhs)rV   rV   r   rV   )rV   rV   rT   rV   c                     [         R                  " X4[        S9n[         R                  " X44[        S9n[        S[        S9n[	        [
        XuU5        g)z2Test ?tbtrs fails correctly if shapes are invalid.r   r\  Nr8   r   r  r(   r  r  )rb   ldabr   ldbr   r_  r   r\  s           r4   test_invalid_matrix_shapes$TestTbtrs.test_invalid_matrix_shapes  s@     WWdYe,GGSKu- 6iA.r6   r   N)r   r   r   r   rB   markparametrizer   re  r   r{  r  r  r  r   ).0r2   r   r   s   0000r4   rX  rX    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 /	/iNs   D$DrX  r   )I1Or`  rh  r]  rD  rg  r   rT   rz   c           	         [         R                  " U  U U U U 35        [        R                   R                  [         R                  " SS5      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Xg-  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" XaX#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   l   a$r'  r.   rz   rh  trcon)r   r`  rD  r  ordrR   gecongetrfr   r   )r,  r   r8   default_rngr   permutedlogspaceintegers
issubdtypefloatingr   r   r   rD  rE  r0   r(   linalgr   infr   r   )r2   r   r`  rD  r   r3   Aoffsetr  rT  r@   norm_A
norm_inv_Ar   anormr  r  luipvtrk   r   s                        r4   
test_trconr    s    KK5'$vdVA3/0
))

q- @
AC


#**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(r6   c                     S H  n [        SU S9n[        R                  " SU 5      n[        R                  " SU 5      n[        R                  " U5      (       a  US-  nU" X#5      u  pEn[	        US5        [	        US5        [        R                  " U5      (       a@  [	        US	5        [        [        U[        5      5        [        [        U[        5      5        M  [	        US
5        M     g )Nr~   lartgr   rT   rU   r.   333333?r   y       皙?)	r(   r8   r   iscomplexobjr   r   
isinstancecomplexr  )r2   r  rf   gcssnrs          r4   
test_lartgr    s     6HHQHHQ??1GA!K	G$3??1B	*Jq'*+Jr5)*B(' r6   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  rU   rT   rz   rR   fdrotr   y             r.   y              @)rV   rV   rV   rV   )r   r   r   r   rA  rS   )r   )rV   rV   rT   rT   r   )offxoffy)rT   rT   rV   rV   )incxr  r   )rV   rT   rV   rT   )r  incyr   )r  r  r  r  r   )rT   rT   rV   rT   r  )r  r  r   )overwrite_xoverwrite_y)r8   fullr   	precisionr)   r(   r   r   )
r2   r   r   ur  rA  r  rf   rc   r   s
             r4   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 r6   c            
      N   [         R                  R                  S5        [         R                  R                  S5      n U R                  R	                  U 5      n [         R                  R                  S5      S[         R                  R                  S5      -  -   nUR                  R                  5       R	                  U5      nS GHZ  n[        SS/US9u  p4U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  pgn[         R                  " US S 2S	4   5      n	US   U	S	'   XiS
'   [         R                  " US
S 2S	4   5      n
SU
S	'   XzS
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   )rU   rU   r.   r~   larfglarfr   FDr   rR   rR   r   rS   r   r   Rsidera  r  )r8   r,  r   r}   r   conjr(   copyr1   r   r   r   r   )a0a0jr2   r  r  rc   alphar   rv   expectedr  s              r4   test_larfg_larfr    s   IINN4			&	!B	"B
))

6
"R		(8(8(@%@
@C
%%**,

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 r6   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r2   ilp64iA%  T)r:  r9  i`DiD)r(   r8   float32r#   )sgesdd_lworkr   r   s      r4    test_sgesdd_lwork_bug_workaroundr  &  sO     $M*57LA<A&*$@E  I)!333!3r6   c                       \ rS rSr\R
                  R                  S\5      S 5       r\R
                  R                  S\5      \R
                  R                  SS5      S 5       5       r	Sr
g)		TestSytrdiB  r2   c                 h    [         R                  " SUS9n[        SU45      n[        [        X25        g )Nr   r   sytrdr8   r   r(   r  rc  )rb   r2   r  r  s       r4   test_sytrd_with_zero_dim_array(TestSytrd.test_sytrd_with_zero_dim_arrayC  s,     HHV5) 1$/j%+r6   r   rR   rT   c                 B   [         R                  " X"4US9n[        SU45      u  pE[         R                  " SX"S-   -  S-  S-   US9U[         R                  " U5      '   U" U5      u  pg[        US5        U" USUS9u  ppn[        US5        [        XS[         R                  " U5      R                  -  SS	9  [        U	[         R                  " U5      5        [        U
S
5        [        US
5        U" X6S9u  ppn[        US5        [         R                  " X1S9n[         R                  " UR                  S   5      nXX4'   [         R                  " UR                  S   S-
  5      nXUS-   U4'   XXS-   4'   [         R                  " X"US9n[        US-
  5       Hu  n[         R                  " X!S9nUS U2US-   4   US U& SUU'   [         R                  " X"US9UU   [         R                  " UU5      -  -
  n[         R                  " UU5      nMw     [         R                   " US5      nUR"                  U   UU'   [         R                  " UR"                  [         R                  " X?5      5      n[        UUS[         R                  " U5      R                  -  SS	9  g )Nr   )r  sytrd_lworkrR   rS   r   r.  r   rV   r   r@          r   r   )r8   r   r(   arangetriu_indices_fromr   r   r   r   rD  r   r1   r   rG  outerr   r   r}   )rb   r2   r   r  r  r  r   rk   datars   erv   r}   rz  k2QrS  r  Hi_lowerQTAQs                        r4   
test_sytrdTestSytrd.test_sytrdJ  sO    HHaV5) 5t< 	
 IIaaC!AU3 	
"

q
!" "!nT1 !&aq >T1a(;(;&;#F2771:&3S! !&a 5T1
 MM!)IIaggaj!!$YYqwwqz!|$"Q$("d( FF1u%qsA(A!QqSMAbqEAaDq5)CFRXXa^,CCAq!A  //!R(SS\'
vvacc266!<( 	aa(;(;&;#Fr6   r   N)r   r   r   r   rB   r  r  r   r  r  r   r   r6   r4   r  r  B  se    [[Wk2, 3, [[Wk2[[S&)7G * 37Gr6   r  c                       \ rS rSr\R
                  R                  S\5      S 5       r\R
                  R                  S\	" \
\5      5      \R
                  R                  SS5      S 5       5       rSrg	)
	TestHetrdi  complex_dtypec                 h    [         R                  " SUS9n[        SU45      n[        [        X25        g )Nr   r   hetrdr  )rb   r  r  r  s       r4   test_hetrd_with_zero_dim_array(TestHetrd.test_hetrd_with_zero_dim_array  s,     HHV=1 1$/j%+r6   zreal_dtype,complex_dtyper   r  c           	         [         R                  " X4US9n[        SU45      u  pV[         R                  " SXS-   -  S-  S-   US9S[         R                  " SXS-   -  S-  S-   US9-  -   U[         R                  " U5      '   [         R
                  " U[         R                  " [         R                  " U5      5      5        S H  nU" XS9u  p[        U	S5        M     [        Xa5      n
U" USU
S	9u  ppn	[        U	S5        [        XS
[         R                  " U5      R                  -  SS9  [        U[         R                  " [         R                  " U5      5      5        [        US5        [        US5        U" XJS9u  ppn	[        U	S5        [         R                  " XBS9n[         R                  " UR                  S   [        S9nXUU4'   [         R                  " UR                  S   S-
  [        S9nXUS-   U4'   XUUS-   4'   [         R                   " XUS9n[#        US-
  5       H  n[         R                  " XS9nUS U2US-   4   US U& SUU'   [         R                   " XUS9UU   [         R$                  " U[         R&                  " U5      5      -  -
  n[         R(                  " UU5      nM     [         R*                  " US5      n[         R&                  " UR,                  U   5      UU'   [         R(                  " [         R&                  " UR,                  5      [         R(                  " UU5      5      n[        UUS[         R                  " U5      R                  -  SS9  g )Nr   )r  hetrd_lworkrR   rS   r.   r   rR   r.  r   r  rV   r   r@  r  r   r   rz   )r8   r   r(   r  r  fill_diagonalr   rD  r   r#   r   r   r   r   r1   r   r   rG  r  r  r   r   r}   )rb   r   
real_dtyper  r  r  r  r   r@   rk   r   r  rs   r  rv   r}   rz  r  r  rS  r  r  r  QHAQs                           r4   
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	r6   r   N)r   r   r   r   rB   r  r  r/   r  zipr   r   r   r   r6   r4   r  r    sp    [[_n=, >, [[7 n=?[[S&)A *?Ar6   r  c            
         [        [        5       GHB  u  p[        SUS9u  p#[        USSSS9nU S:  aV  [        R
                  " / SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/US9n[        R
                  " / SQUS9n[        R
                  " SS/US9nO_[        R
                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R
                  " S/S/S/S/S/S//5      n[        R                  " SUS9n[        R
                  " / SQ/ SQ/US9nU" XXXgUS9u      pn	U S:  a  [        R
                  " / SQ5      nO[        R
                  " / SQ5      n[        XSS 9  GME     g )!N)gglsegglse_lworkr   rW   rU   rS   )r   r   re   )g=
ףp=g{Gzg(\ؿ      ?)zGgHzG?gףp=
ӿQ)ffffff@gQ?g?gffffffֿ)r  g{Gz?Qg{Gz?)333333?g333333?r  g
ףp=
)g{Gz{Gz?gzG      ?)g      r  gGz?gHzGgzGg=
ףp=?r  )yQ?QyQQ?yQ{Gz @y=
ףp=?)y\(\￮Gz?y333333RQ?yQzG?yQQ?)yףp=
?q=
ףpݿy)\(?{Gz?y)\(?(\ſy(\333333?)yGz?RQ?yRQ?HzGy\(\
ףp=
׿y)\(?ɿ)y(\?RQ?y?{Gz?y(\ſq=
ףpݿyQ?q=
ףp?)yHzG?Qѿy?QyQ뱿Gz?yp=
ף?p=
ף?yRQ
ףp=
?yffffff?GzyzG GzyQ?ffffff
@yp=
ף)\(@y(\ @Q?)r   r        r  )r  r   r  r  r   )^"L?\}?r  r  )y!f?$_Kdy^gŵ翸F@y!f?}dy61ŵe_@r   )r   r   r(   r#   r8   r   r   r   )r   r2   func
func_lworkr   rc   r   rs   r   r@   resultr  s               r4   
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 (r6   c                     [        S5        [        [        [        -   5       GH  u  pSnU S:  a1  [	        SUS9n[	        SUS9u  pE[        X"5      R                  U5      nO?[	        SUS9n[	        SUS9u  pE[        X"5      [        X"5      S	-  -   R                  U5      nXfR                  5       R                  -   S
-  S
[        R                  " X!S9-  -   n[        US5      n[        X25      nU" XhSS9u  pnU" XUSS9u  p[        [        SU-  [        R                  R!                  USS9-
  5      U-  S:  5        GM     g )Nr   rz   rU   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr.   rS   rR   r   r.  )rc   ipivr  r.  re   )r   r   r   r/   r(   r   r0   r  r}   r8   r   r   r#   r   r   r  cond)r   r2   r   r  funconfunctrfr  r  r   ldur  r@   rconds                r4   test_sycon_heconr$    s)   J~ 56
7)-uEJ./AOOFa##E*A *-uEJ./AOOFad1jm+33E:A ^Q266!#9!99Q
z-qQ71C%qAAeGbiinnQ!n445e;a?@- 7r6   c                     [        S5        [        [        5       H  u  pSn[        SUS9u  p4pV[	        X"5      R                  U5      nXwR                  -   S-  n[	        X"5      R                  U5      nXR                  -   S-  S[        R                  " X!S9-  -   nU" Xx5      u  pn[        US:H  5        U" U5      u  p[        US:H  5        U" X|5      u  p[        US:H  5        U" U5      u  pn[        US:H  5        [        XSS9  M     g )	Nr   rz   )r)  sygstsyevdsygvdr   rS   r   giUMu?r   )r   r   r   r(   r   r0   r}   r8   r   r   r   )r   r2   r   r)  r&  r'  r(  r  Beig_gvdr@   rk   r   rc   eigs                  r4   
test_sygstr,  !  s   J,
%5 7I<A&C"e Je$WaKJe$WaK!bffQ444 !;D	 (	+	Qx	625 -r6   c                     [        S5        [        [        5       GHG  u  pSn[        SUS9u  p4pV[	        X"5      R                  U5      S[	        X"5      R                  U5      -  -   nXwR                  5       R                  -   S-  n[	        X"5      R                  U5      S[	        X"5      R                  U5      -  -   nXR                  5       R                  -   S-  S[        R                  " X!S9-  -   nU" Xx5      u  pn[        US:H  5        U" U5      u  p[        US:H  5        U" X|5      u  p[        US:H  5        U" U5      u  pn[        US:H  5        [        XSS	9  GMJ     g )
Nr   rz   )r)  hegstheevdhegvdr   r.   rS   r   -C6?r   )r   r   r/   r(   r   r0   r  r}   r8   r   r   r   )r   r2   r   r)  r.  r/  r0  r  r)  r*  r@   rk   r   rc   r+  s                  r4   
test_hegstr2  @  sB   J/
%5 7I<A&C"e Je$rDJ,=,=e,D'DD^QJe$rDJ,=,=e,D'DD^QRVVA%;!;; !;D	 (	+	Qx	405 0r6   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   rz      tzrzftzrzf_lworkr   rS   r.   r   r   Nrz   r   r  r@  )r8   r,  rl  r   r   r(   r#   r   r   r0   r  r  r}   r   rB  r   r   rG  r   r  r   r   r   spacingr   )r3   r   r   r   r2   r7  tzrzf_lwr   r  rzrv   rk   r  VIdr   r   Zs                     r4   
test_tzrzfr?  _  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   rR   r.   r   r}   )trttftfttrtfsmr   rS   r   r   rU   rW   r   r   r   rh  )r   rD  rT   r  )r   rD  r  N)r8   r,  rl  r   r   r   r   r   r0   r(   r   r   r  r}   r  )r3   r   r2   r   r  r   rA  rB  rC  Afpr@   r)  solnB2s                 r4   	test_tfsmrH    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? (r6   c                     [         R                  R                  S5      n Su  pn[        [        5       GH*  u  pE[        SUS9u  pg[        XqU5      nUS:  aV  [        U R                  X5      R                  U5      5      n	U R                  X35      R                  U5      n
[        SUS9u  pOy[        U R                  X5      U R                  X5      S-  -   R                  U5      5      n	U R                  X35      [        X35      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M-     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   )rz   r5  r5  r6  r   rS   )ormrzormrz_lworkr.   )unmrzunmrz_lworkr   Nr}   r   rz   r   r   r  r@  r   r  )r  r   )r  r   r   )r8   r,  rl  r   r   r(   r#   r   r   r0   rB  r   rG  r}   r   r  r   r9  r   r   r   r   )r3   qmqncnr   r2   r7  r:  lwork_rzr  r   orun_mrzorun_mrz_lw	lwork_mrzr;  rv   rk   r<  r=  r   r   r  r   tolcqs                            r4   test_ormrz_unmrzrW    s    ))


%CJBB'
*+C168!(37SXXb%,,U34A ''.A$45M;@%B!Hk chhr&")9")<<DDUKLA"!DLO3;;EBA$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M$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   rR   r.   r   r}   )rA  rB  r   r   r]  r`  rh  )transrr`  rS   Nr   F)order)r8   r,  rl  r   r   r   r0   r(   r   r   r   r  r}   r   r   reshape)r3   r   r2   r   A_fullr[  rA  rB  A_tf_Urk   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                      r4   test_tfttr_trttfrj    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 (r6   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)rY  r   r   rR   r.   )trttptpttrr   r   r]  rZ  rS   N)r8   r,  rl  r   r   r   r0   r(   r   r   r   r   r}   r   r   r   )r3   r   r2   r   r_  rl  rm  A_tp_Urk   A_tp_LindsA_tp_U_mA_tp_L_mrf  rg  s                  r4   test_tpttr_trttprs    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 (r6   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   rR   r.   )pftrfrA  rB  r   r   N)r8   r,  rl  r   r   r   r0   r  r}   r   r(   r   r   r   )r3   r   r2   r   r  ru  rA  rB  rE  rk   	Achol_rfpA_chol_rr@   Achols                 r4   
test_pftrfry  G  s   
 ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("A./J5:<e !H	-		A)!(2% (r6   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   rR   r.   )pftriru  rA  rB  r   r   rS   rU   rW   r   N)r8   r,  rl  r   r   r   r0   r  r}   r   r(   r   r   r   r   )r3   r   r2   r   r  r{  ru  rA  rB  rE  rk   
A_chol_rfp	A_inv_rfpA_inv_rr@   Ainvs                   r4   
test_pftrir  b  s/   
 ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("A%5 7@ =B	&C"e !H	 =
.		1(
1v!'4:/2Qw!|!	D- (r6   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   rR   r.   rT   r   rS   )pftrsru  rA  rB  r   rU   rW   r   N)r8   r,  rl  r   r   r   r0   r  r}   r   r   r(   r   r  r  r   r   )r3   r   r2   r   r  r)  Bf1Bf2r  ru  rA  rB  rE  rk   r|  rF  s                   r4   
test_pftrsr    sz   
 ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("A!Qu%AaC85)AaC85)%5 7@ =B	&C"e !H	 =
1#.
	i:;1!,
	!%+t/2Qw!|!	D7 (r6   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   rR   r.   rS   r   hrA  rB  frkr   r   r   rU   rW   r   N)r8   r,  rl  r   r   r   r0   r  r}   r   r(   r   r   r   )r3   r   r2   r   r  prefixrA  rB  shfrkrE  r@   r   Afp_outA_outs                 r4   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# (r6   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   rz   rR   i   r.   r?  r   )syconvr  r  r   r  F)r.  	hermitianr  r   Nr  r@  r   )r8   r,  rl  r   r   r   r0   r  r}   r   r9  r   r(   r#   r   r   r   r   )r3   r   r2   r   r  rU  r  trf	trf_lworklwr]  Dpermr"  r  rk   rc   r  rh  s                      r4   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 (r6   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   rR   r.   r?  r   )geqrtgemqrtr   r   r   r  r@  r   r}   r]  r  rg  r  r   r]  r]  rg  r  r  rD  )r8   r,  rl  r   r   r   r0   r9  r   r(   r   r   r}   r  r   r   r   r  r  )rb   r3   r   r2   r   r  rU  r  r  rc   trk   r  r  r  r   	transposer  r   r   qqC	c_defaults                          r4   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 ,r6   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   rR   r.   r?  r   )tpqrttpmqrtr   r   rS   r   r  r@  r   r}   r  rg  r  r]  r   r  r  r  rD  )r8   r,  rl  r   r   r   r0   r9  r   r(   r   r   r   rF  r   r}   r  r   r   r  r  )!rb   r3   r   r2   r   r  r)  rU  r  r  lrc   r   r  rk   B_pentb_pentr  r  r  r   r  r  r  r   r   rs   r  cdCDqCDr  	d_defaults!                                    r4   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 $ ,r6   r   N)r   r   r   r   rA   r  r  r   r   r6   r4   r  r    s    
<A|QKr6   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   rz   rS   pstrfr   rR   r.   r    r   rS   rb  r  r8   r,  rl  r   r   r(   r   r0   r  r}   r   r   r   r  r   rJ  r   r   )r3   r   r2   r   r  r  r  r   pivr_crk   rh  single_atoldouble_atolrA  r]  s                   r4   
test_pstrfr  |     
))


%C'
 6 7aC ''.chhqA#6F6M6Me6T1TTAFFHJJAaC ''.ACCA!!HG "'(CGH
T1 RXXbjj1555RXXbjj1555!Vm{a%CE*AFFHJJN$O!!1-G "'(CGH
T1RXXbjj1555RXXbjj1555!Vm{a%CE*A

N$OG (r6   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   rz   rS   pstf2r   rR   r.   r  r  r  rb  r  r  )r3   r   r2   r   r  r  r  r   r  r  rk   rh  r  r  rA  r]  s                   r4   
test_pstf2r    r  r6   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ſFxrS   )g   ЈBg   tBgffffff @g   ٓ )      @gg#fDgffffff)gHzG?gQg'Vgp=
ף)g(\r
  gS7нr  )gq=
ףpg   Ag(\)g333333g   Bg333333ÿ)gZ9=gQgֽr   )gffffff@g   tޅBr8  )g(\g   Zgq=
ףp?)gEop=gQ?gZEqҽr.   geequr   r1  rb  )r8   r   r   r   r0   r(   r   )desired_realdesired_cplxr   r2   r  r  r  r   rowcndcolcndamaxrk   s               r4   
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 (r6   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  r[  rz   r   rS   r   r.   rV   r   syequb)r8   r   r   r   r   rG  rot90rD  r(   r   log2r0   r   )desired_log2sr   r2   r  r  r   rs   r  r   scondr  rk   s               r4   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 )NrS   rV   i  rZ   rR   )rz  r.   r   r  r  r  rW                   i   rV   rV   y              0@)rV   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r8   rD  r   r   zheequbr   r   r  r   r  cheequbr0   	complex64)r  r   r  r  rk   s        r4   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Jr6   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&  rz   r.   rS   getc2r   gesc2r   r;  )overwrite_rhsrU   r   )	r8   r,  rl  r   r   r   r0   r(   r   )r3   r   r  r  r   r2   r  r   r  r  r  r  jpivrk   r   r^   s                   r4   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:+ (r6   r(  )rW   rV   r  jobarW   joburU   jobvjobrrR   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&  r?  gejsvr   rS   rR   r  r[  r   )r  r  r  r  jobtr  NF)r:  r  )r8   r,  rl  r   r   r5   r(   r  r  r  r   r   r   rD  r  r}   identityr  matrix_rankcount_nonzero)r(  r2   r  r  r  r  r  r  r3   r   r   rA  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r  r   r   rk   sigmas                                r4   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 r6   c                    [        SU S9nU" S5      u  p#pEpg[        US5        [        UR                  S5        [        UR                  S5        [        U[        R                  " S/U S95        [        R
                  " SU S9nU" U5      u  p#pEpg[        US5        [        UR                  S5        [        UR                  S5        [        U[        R                  " S/U S95        [        R
                  " SU S9nU" U5      u  p#pEpg[        US5        [        UR                  S5        [        UR                  S5        [        U[        R                  " / U S95        [        R                  " [        R                  " S5      R                  S	S	5      5      R                  U 5      n[        R                  " XR                  -   5      nUR                  S
5      n	U" U5      n
[        X5        g)z*Test edge arguments return expected statusr  r   r   r   rR   rR   )rR   r  r?  rz   r  N)r(   r   r1   r8   r   r   sinr  r^  r0   asfortranarrayr}   r  r   )r2   r  r  r  r  r   r   rk   r  Acr@   s              r4   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r6   kwargsrZ   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)rS   rS   r   r  Nr  )r  r  r  s      r4    test_gejsv_invalid_job_argumentsr     s/     	e$AWE2E)U00r6   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.
r1  r  r   r  N)r(   r2   r   )r  
sva_expectu_expectv_expectrA  r  r  r  r  r   r   rk   s               r4   test_gejsv_NAGr    sG    0 DWAGG4E#(8 CAUJ$/Hd+Hd+r6   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[         R                  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&  rz   r?  rR   r2   r3   r   gttrfgttrsr   r   rS   r  r}   r   rD  z?gttrf: _d[info-1] is , not the illegal value :0.)r8   r,  rl  r   r   r5   r  rD  r   r(   r	   r   r   r   r   r}   r  r  rc  testingr   )"r2   r3   r   rA  durs   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  rk   rh  r]  rS  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos"                                     r4   test_gttrf_gttrsr    s    ))


#C
A%$$$D 
%acV5	BB#QD?A	$acV5	BB	1668RWWY/H

RWWR_$rwwr1~5A
		q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   8NN N0$O
N
N-0
N>
Oz1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)g @r  ffffff?r   )r7  r	        ffffff@)333333@@r         )r	  r  r"  r#  )r$  r%  rX   gC>)r   r   rY   )rS   rT   rU   rV   rV   g@gffffff@      g%@g@g	r  gffffff&g3@r  rV   rX   r[  r  )       @             @      ?            ?      ?      )?r-  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r2  )r-  r.  r/  r0  )r1  r2  r3  r2  y ~:pffffff?)r*  r+  r,  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r2  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   r1  r  )r(   r   )r  rs   r  du_expd_expdu2_expipiv_expr   r   r  r  r  r  r  r  r  rk   r  s                     r4   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr9  X  ss    d $$6A1GLE$)"$4!CStTC!C BD)D##3T5MGTGQr6   )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.   rR   r   r  r  )r  gtconr  r  g      ?r   )r8   r,  r  rD  r  r  r   r0   r  r   r  r(   r   r   r   )r2   r   r   r3   rs   r  r  r  r  r  r;  r  r  rk   rT  r@   r  r  r  r  r   r   s                         r4   
test_gtconr<    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(r6   ))rT   rX   )rX   rT   r  c                 H    [        SU S9nUu  p4U" X4S9u  pV[        US5        g )Ngeqrfp_lworkr   r  r   r  )r2   r1   r>  r   r   r   rk   s          r4   test_geqrfp_lworkr?    s-     $^EBLDA(KEqr6   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&  r?  rz   rU   rR   r   pttrfr   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r8   r,  rl  r   r   r5   rD  r  r  r(   r	   r   r   r   r   r}   )ddtyper2   r3   rA  r   rs   r  r  r  rA  r  _erk   r]  r  r   r   rC  _xs                      r4   test_pttrf_pttrsrG    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%r6   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 )Nrz   r   rA  r   rS   rR   r   )r8   r,  rl  r(   r5   r  rc  )rD  r2   r   r3   rA  rs   r  s          r4   *test_pttrf_pttrs_errors_incompatible_shaperI    sr     	A
))


%CWE2E#QD&6:A#QqSFE7A*esVQ/*e#2/r6   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 )Nrz   r&  rA  r   rS   rR   r   z?pttrf: _d[info-1] is r  z2?pttrf should fail with non-spd matrix, but didn't)r8   r,  rl  r(   r5   r   r   )
rD  r2   r   r3   rA  rs   r  r  rE  rk   s
             r4   'test_pttrf_pttrs_errors_singular_nonSPDrK    s     	A
))


#CWE2E#QD&6:A#QqSFE7AAaDAaD;LBD1Hq)"AX,7RSU 	$QD&6A;LBDDAIKLr6   z%d, e, d_expect, e_expect, b, x_expect)rU   rz      r   rV   )r  r'  r5  rY   )rU   rZ   r      rR   )r(  gK=Ur  r  rS      A      g      @r   r  )rM  )   .      )y      0@      0@y      2@      "      ?      )rM  rZ   rR   rU   )r2  r)  rT  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r1  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 )	Nr1  rA  r   r   r  rC  rR   r  )r(   r   r  r2   r/   )rs   r  d_expecte_expectr   x_expectrA  rA  r  rE  rk   rC  rF  s                r4   test_pttrf_pttrs_NAGrY  	  s    4 DWAaD1E;LBDBt,Bt,WAaD1ERA&HBBt, 	ww. !,40 !r6   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&  rR   rU   rS   r   )	r8   r,  rl  r5   rD  r   r  r}   r    )r2   realtyper   	compute_zr3   A_eigvrrs   r  trir  zs               r4   pteqr_get_d_e_A_zra  9	  sm    ))


#CA~+QFE?ac 122'1,%[^'h<q@'1>ggaj2771a=(2771b>9Hrwwy{{" (h<'1> EGGAJA&B7GGAJB'"''!Q-7!<r6   zdtype,realtyper\  c                 ^   [        S5        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&  r  pteqrr   rz   rs   r  r`  r\  r   zinfo = z, should be 0.r  N)r   r8   r   r   r(   ra  r   r   sortr    r  r}   r  rD  )r2   r[  r\  rA  rc  r   rs   r  r  r`  d_pteqre_pteqrz_pteqrrk   s                 r4   
test_pteqrri  Y	  s     	H###Dge4E
A"5AAJA!&+a&O#GgqGD689 BGGDGAJ')9E"'''"2"4"44bkk!n!	# 	"'''"22RWWW5E5G5GG	& r6   c                 |    [        S5        [        SU S9nSn[        XXB5      u  pVpxU" US-
  XhUS9u  ppUS:  d   eg )Nr&  rc  r   rz   rU   r`  r\  r   r   r(   ra  r2   r[  r\  rc  r   rs   r  r  r`  rf  rg  rh  rk   s                r4   test_pteqr_error_non_spdrn  z	  sP     	Hge4E
A"5AAJA! ',AE1Y&O#Gg!8O8r6   c           	          [        S5        [        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 )Nr&  rc  r   rz   r   rk  )r   r(   ra  r  rc  )	r2   r[  r\  rc  r   rs   r  r  r`  s	            r4   "test_pteqr_raise_error_wrong_shaperp  	  sp     	Hge4E
A"5AAJA!*esVQyI*e#2!Ij%A3B9M r6   c                     [        S5        [        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 )Nr&  rc  r   rz   r   rk  rl  rm  s                r4   test_pteqr_error_singularrr  	  sZ     	Hge4E
A"5AAJA!AaDAaD&+AA&K#Gg!8O8r6   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.
r1  rc  r   rR   r   rd  r  N)r(   r2   r8   rD  r   r   )r\  rs   r  rV  z_expectrA  rc  r`  r  rE  _zrk   s               r4   test_pteqr_NAG_f08jgfrv  	  s|      Dgagg6E

RWWQ]"RWWQ^3Aq@BBBt,BFF2Jx 0t<r6   matrix_size)r  )rX   rW   rW   rW   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&     r?  geqrfpr   orgqrr	  )rv   r   r   r   rb  r   )r8   r,  rl  r   r   r(   r5   r   r   r   r   r1   r  r}   r   allrD  ra   r   rH  )r2   rw  r3   r   rA  r{  gqrr   r   r  qr_Arv   rk   r  qqrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                         r4   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:>"$r6   c                  x    [         R                  " / 5      n [        SU R                  S9n[	        [
        X5        g )Nr{  r   )r8   r   r(   r2   r  r  )A_emptyr{  s     r4   #test_geqrfp_errors_with_empty_arrayr  
  s)    hhrlGhgmm<F)V-r6   driver)evevdevrevxpfxsyhec                    SnU S:X  a  [         O[        n[        X-   S-   US   S9n[        X-   S-   US   S9n [        XBSS9  [        XRSS9  g ! [         a'  n[
        R                  " X-    SU 35         S nAg S nAff = f)	N  r  _lworkr   r   rR   r  $_lwork raised unexpected exception: r   r/   r(   r#   r  rB   failr  r  r   r2   sc_dlwdz_dlwr  s          r4   test_standard_eigh_lworksr  	
  s     	A$;KNEcj1qBFcj1qBFLv*v* Lszl"FqcJKKL   A 
B A;;B gvgvxc                    SnU S:X  a  [         O[        n[        X-   S-   US   S9n[        X-   S-   US   S9n [        XBSS9  [        XRSS9  g ! [         a'  n[
        R                  " X-    S	U 35         S nAg S nAff = f)
Nr  r  r  r   r   rR   r]  rZ  r  r  r  s          r4   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   )rR   rz   r?  r  c                     [        S5        [        SU5      nX-
  nU [        ;   a  SOSnUS-   n[        XPS9n[	        XaX#5      nUS:X  a  UOU4n[        U Vs/ s H  oS:  PM	     sn5      (       d   eg s  snf )Nr   r   orun	csd_lworkr   )r   r   r   r(   r#   r}  )	r  r   re   r  r  dlwr  lwvalr   s	            r4   test_orcsd_uncsd_lworkr  &
  s     	J1A	AK'$TC

C	#	,B2!'ED[EuhEu%u!Au%&&&&%s   A5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)rz  P      r  r  csdr  r   r   lrworkr   r   r  g     @rb  )r   r$   rvsr%   r(   r#   dictr  r   rp  r8   r   rG  cosr  r   r   r   )r  r   re   r  r  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2trk   rh  VHr  n11n12n21n22SonerS  Xcs                                  r4   test_orcsd_uncsdr  4
  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Br6   
trans_boolFfactr\  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&  r?  gtsvxr  r   rz   rR   r	  r   rS   r}   r   rg  r\  NrW   r  r   dlfdfdufr  r  r   z?gtsvx info = z, should be zerorT   r  __len__Trcond should be scalar but is ferr.shape is z but should be berr.shape is )r8   r,  rl  r   r   r(   r5   rD  r   r  r}   r  r   r	   r   r   r1   )!r2   r  r  r3   rA  r  r  r   r  rs   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr#  ferrberrrk   s!                                    r4   
test_gtsvxr  c
  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+> @r6   c                     [         R                  R                  S5      n[        SU S9u  pESn[	        US-
  4XS9n[	        U4XS9n[	        US-
  4XS9n	[         R
                  " US5      [         R
                  " U5      -   [         R
                  " U	S5      -   n
[	        US4XS9nU [        ;   a  S	OS
nU(       a  U
R                  5       R                  OU
U-  nUS:X  a	  U" XxU	5      OS /S-  u  pnnnnU" XxXX,XUUUS9nUu
  nnnnnnnnnnUS:X  a.  SUS'   SUS'   U" XxX5      nUu
  nnnnnnnnnnUS:  d   S5       eg US:X  a6  SUS'   SUS'   SUS'   U" XxXX.UUUUS9
nUu
  nnnnnnnnnnUS:  d   S5       eg g )Nr&  r  r   rz   rR   r	  r   rS   r}   r   r\  rW   r  rg  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )	r8   r,  rl  r(   r5   rD  r   r  r}   )r2   r  r  r3   r  r  r   r  rs   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r  r  rk   s                                  r4   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 
r6   c                 ~   [         R                  R                  S5      n[        SU S9u  pESn[	        US-
  4XS9n[	        U4XS9n[	        US-
  4XS9n	[         R
                  " US5      [         R
                  " U5      -   [         R
                  " U	S5      -   n
[	        US4XS9nU [        ;   a  S	OS
nU(       a  U
R                  5       R                  OU
U-  nUS:X  a	  U" XxU	5      OS /S-  u  pnnnnUS:X  aa  [        [        XGS S XUX,XUUUS9  [        [        XGUS S XX,XUUUS9  [        [        XGXS S UX,XUUUS9  [        [        XGXUS S X,XUUUS9  g [        [        XGXUX,US S UUUUS9  [        [        XGXUX,XS S UUUS9  [        [        XGXUX,XUS S UUS9  [        [        XGXUX,XUUS S US9  g )Nr&  r  r   rz   rR   r	  r   rS   r}   r   r\  rW   rg  r  )r8   r,  rl  r(   r5   rD  r   r  r}   r  rc  r  )r2   r  r  r3   r  r  r   r  rs   r  r  r   r   r   r  r  r  r  r  r  s                       r4   "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	<r6   zdu,d,dl,b,xc           
      f    [        SUR                  S9nU" X!X5      nUu
  pxpppnn[        XL5        g )Nr  r   r(   r2   r   )r  rs   r  r   r   r  r  r  r  r  r  r  r  r#  r  r  rk   s                    r4   test_gtsvx_NAGr    s:    . WAGG4EbR#I@I=CSe4a(r6   zfact,df_de_lambdac                 6    [        SUR                  S9" X5      $ NrA  r   r(   r2   rs   r  s     r4   <lambda>r  )      (8?@ww)HHI)Nr6   c                     gN)NNNr   r  s     r4   r  r  +      -?r6   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&  r?  ptsvxr   rV   rU   rR   r   rS   r	  r  r  efr   zinfo should be 0 but is .r  r  r  )rS   r  z# but should be ({x_soln.shape[1]},)r  N)r8   r,  rl  r   r   r(   r5   rD  r  r  r	   r   r   r   r   r}   r   r1   )r2   r[  r  df_de_lambdar3   rA  r  r   rs   r  r  r  r   r  r  rk   r  r   r#  r  r  r]  r  s                          r4   
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 :r6   c                 6    [        SUR                  S9" X5      $ r  r  r  s     r4   r  r  d  r  r6   c                     gr  r   r  s     r4   r  r  f  r  r6   c                    [         R                  R                  S5      n[        SU S9nSn[	        U4X5      S-   n[	        US-
  4X5      n[         R
                  " U5      [         R
                  " US5      -   [         R
                  " [         R                  " U5      S5      -   n	[	        US4XS	9n
X-  nU" Xx5      u  pn[        [        XWS S XX,US
9  [        [        XWUS S XXS
9  [        [        XWXS S X,US
9  g )Nr&  r  r   rV   rU   rR   r   rS   r	  r  )
r8   r,  rl  r(   r5   rD  r  r  rc  r  )r2   r[  r  r  r3   r  r   rs   r  r  r  r   r  r  rk   s                  r4   test_ptsvx_error_raise_errorsr  `  s     ))


#CWE2E	A#QD(81<A#QqSFE7A

RWWQ^#bggbggaj!&<<A(!QuFF	
A  %LBD *esVQK*e#2K)UqCR&trJr6   c                 6    [        SUR                  S9" X5      $ r  r  r  s     r4   r  r    r  r6   c                     gr  r   r  s     r4   r  r    r  r6   c           	         [         R                  R                  S5      n[        SU S9nSn[	        U4X5      S-   n[	        US-
  4X5      n[         R
                  " U5      [         R
                  " US5      -   [         R
                  " [         R                  " U5      S5      -   n	[	        US4XS	9n
X-  nU" Xx5      u  pnUS
:X  aX  SUS'   U" Xx5      u  pnU" XxU5      u  pnnnnnUS:  a  X::  d   e[	        U4X5      nU" XxU5      u  pnnnnnUS:  a  X::  d   eg U" Xx5      u  pnSUS'   SUS'   U" XxXXS9u  pnnnnnUS:  d   eg )Nr&  r  r   rV   rU   rR   r   rS   r	  rg  r   rT   r  )r8   r,  rl  r(   r5   rD  r  )r2   r[  r  r  r3   r  r   rs   r  r  r  r   r  r  rk   r   r#  r  r  s                      r4   test_ptsvx_non_SPD_singularr  {  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xr6   zd,e,b,xc                 ^    [        SUR                  S9nU" XU5      u  pVpxpn[        X75        g )Nr  r   r  )rs   r  r   r   r  r  r  x_ptsvxr#  r  r  rk   s               r4   test_ptsvx_NAGr    s0    . WAGG4E/4Q1~,BGDa)r6   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   r?  )rz   rU   r	  r   r   rR   )ppsvpptrfpptrspptrippconr  r  r  r   rb  )r  r.  r  )r8   r,  rl  r   r   r5   r  r}   r   rG  r(   r   r   r   r   r   r  r   r   r   r  )r2   r.  r3   rA  r   r   rc   r   yr   rp  apr  r  r  r  r  ulrk   aululiaulibxxvr  r#  s                             r4   !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   r?  rz   r	  )geestrexcr   c                     g Nr   r   s    r4   r  !test_gees_trexc.<locals>.<lambda>      Dr6   Fr  r   r   r[  rx  rb  rX   rR   r  r   r8   r,  rl  r   r   r5   r(   r   r/   r   r   r  r}   )r2   r3   rA  r   rc   r  r  r  r  r`  d2s              r4   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3r6   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.
r1  r  r   r   )wantqr   r  N)r(   r2   r   r   )r  ifstilstexpectrA  r  r  s          r4   test_trexc_NAGr*    sH    < DWAGG4E11-FQq	AFD)r6   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   r?  rz   r	  )ggestgexcr   c                     g r  r   r  s    r4   r  !test_gges_tgexc.<locals>.<lambda>M  r  r6   Fr;  overwrite_br   r   rR   r  r[  r   rx  rb  rX   rS   rT   r  r  )r2   r3   rA  r   rc   r   r,  r-  r  r   r  r  r`  d1r  s                  r4   test_gges_tgexcr3  B  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=r6   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   r?  rz   r	  )r  trsentrsen_lworkr   c                     g r  r   r  s    r4   r  !test_gees_trsen.<locals>.<lambda>}  r  r6   Fr  r   r   r[  rx  rb  rR   rW   r   r   liworkr   r8   r,  rl  r   r   r5   r(   r   r/   r   r   r  r}   r   r#   )r2   r3   rA  r   rc   r  r5  r6  r  r  r`  r  selectr   s                 r4   test_gees_trsenr=  r  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3r6   z*t, q, expect, select, expect_s, expect_sep)g/$?gQIg~jtx?gJ4?)r  58EGrgGr?gyX5;?)r  g?߾r>  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)\(?)rR   r   r   rR   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.
r1  r  )r5  r6  r   r   rR   r9  r   r   rU   rV   rW   r  N)r(   r2   r#   r/   r   r   r  r}   )r  r  r<  r)  expect_s
expect_seprA  atol2r5  r6  r   r  r   seps                 r4   test_trsen_NAGrD    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4r6   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   r?  rz   r	  )r,  tgsentgsen_lworkr   c                     g r  r   r  s    r4   r  !test_gges_tgsen.<locals>.<lambda>  r  r6   Fr0  r   r   rR   r  r[  r   rx  rb  rW   r   ir'  r  r;  )r2   r3   rA  r   rc   r   r,  rF  rG  r  r   r  r  r`  r2  r  r<  r   s                     r4   test_gges_tgsenrJ    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=r6   za, b, c, d, e, f, rans, lans)r   r   r   r   )r  r7  r   r   )r  r   r7  r   )r  r  r  g      @)r   r   r   r   )r  r  r  r   )      r   r   g      (@)g      "r          rL  )rK  r   rL  r   )      r   r&  g      3@)r   r   r   r7  )r  r   r   r   )r  r  r   r   )r  r  r  r   )r   r   r   r   )r  r   r   r   )r  r  r  r   )rM  r   r  r   )r!  r   g       r  )r  r         r   )rN  r   r  r   )r  r   r  r  )r  r   r7  r   )r  r   r  r   )r   r  r   r  )r   r7  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 )Nr1  tgsylr   r   r   r?  zSCALE must be 1.0r   rA  rB  r  zDIF must be nearly 0zSolution for R is incorrect)rA  rB  zSolution for L is incorrect)r(   r   r   r8   r   r   )rc   r   r   rs   r  rf   ranslansr2   rA  rP  routloutr^   difrk   s                   r4   test_tgsyl_NAGrW  $  s    H Dge4E#(qQ#: DDqE3QRXXe_-@-@-D/1C1288E?+>+>s+B24DT9;DT9;r6   r   )rg  r}   ijob)r   rR   rS   rT   rU   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/ r4  irz   r   )outputr  rS   rP  r   )r   rX  r   zINFO is non-zeror  zSCALE must be non-negativer?  zDIF must be 0 for ijob =0rQ  zDIF must be non-negativerg  r}   r  zlhs1 and rhs1 do not match)rA  r   rB  zlhs2 and rhs2 do not match)r8   r  r,  r  r!   uniformr0   r(   r   r   r   r  )r2   r   rX  rA  r3   r   r   rc   rs   r@   r   r  r   rf   rP  rT  rU  r^   rV  rk   lhs1rhs1lhs2rhs2s                           r4   
test_tgsylr`  X  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 <	> r6   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   rV   r'  r.   r  r  r  trsr   r  r  r   )rc   r  r   r.  r?  r  )r   rB   rC   r8   r,  r  r/   r[  r0   r}   r  r(   r   r   r   )ra  r2   r.  r3   r   r   r  r   rJ   r  r  rd  r   r"  r  rk   r   r   s                     r4   test_sy_hetrsre    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+r6   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-23133rc  r   r.   r  r  r_  r   r  r   )rc   r  r.  r?  r  )r   rB   rC   	sysconfigget_platformr/   r8   r,  r  r  r  r   r0   r}   r  r(   r   r   r  r   r   r   r   )r2   r.  ra  r3   r   r  rJ   r  r_  r"  r  rk   A_invr   r   s                  r4   test_sy_he_trirj    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Er6   r   z
uplo, m, n))rh  rV   rz   )rh  rz   rz   )r]  rz   rV   )r]  rz   rz   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   )r`  rD  rh  rR   >r   )
r8   r,  r  r0   r(   r   r   r  rp  r   )r   r`  r   r   rD  r2   r3   r  rl  r   rT  rS  r   s                r4   
test_lantrrn    s     ))

 1
2C


&&u-A#$6=LE
d
.C ck
rwwqzAs{IIc!i Q$
.CC4(r6   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 rz   rS   rS   r.   r   rz   rR   rS   r   r  r  )gbcongbtrf)r   rt  rs  r_  r  r  r  r  r   )r8   r,  r  r  r  r  r  r  r   r0   r   r   r"   r   r  r   r  r(   r   )r2   r   r3   r   rs  rt  r  r  tmpLDABr_  r  rr  rs  lu_bandr  r@   rT  r  r  r  r   s                         r4   
test_gbconrw    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%r6   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 )	Nrp  rq  r.   r   rR   )langbr   rm  r   )r8   r,  r  r  r  r   r0   r   r   r"   r(   r   )r2   r   r3   r   rs  rt  r  r_  ry  r   r   rT  s               r4   
test_langbrz    s     ))


,C IA2

A6SZZ/22A	}}UBKK((FF	A$%Abooaa !%&Abooaq!"	BA	B#$6=LE
.C
"
!CC4(r6   	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rz   r   rR   r   stevd)r{  r   r  r  )r8   r,  r  rD  r  eigvalshr(   r   re  r   r   r}   )r2   r{  r3   r   rs   r  r  r   r}  rh  r<  rk   r   s                r4   
test_stevdr    s    ))

 2
3C
A

1
"A

1q5
&A
2#bggam3A
))

Q
CW%Eqy1JA$199BGGAJ-hhuo!!BGGAJ,a3h? r6   r=  )	functoolsr   r,  rg  numpy.testingr   r   r   r   r   r	   rB   r
   r  numpyr8   r   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r:   r   r   r   r   r   r   r   r   r   r    r!   scipy.linalg._basicr"   scipy.linalg.lapackr#   scipy.statsr$   r%   scipy.sparsesparserm  scipy.__config__r&   ImportErrorr'   r9   r(   scipy.linalg.blasr)   r  rJ  r   r  
complex128r/   r   blas_providerblas_versionr5   rM   rO   r   r   r  r  r  r  r$  r5  rX  r  r  r  r  r  r  r  r  r$  r,  r2  r?  rH  rW  rj  rs  ry  r  r  r  r  r  r  r  r  r  skipifr  r  rG  r  r  r   r   r  r  r9  r<  r?  r  rG  rI  rK  rY  ra  ri  rn  rp  rr  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r3  r=  rD  rJ  rW  r`  re  rj  rF   rn  rw  rz  r  r   r6   r4   <module>r     sD  
   / /  * ! ! ! - ,F F F F * . 2 '0 1 ,zz2::&,,.	~	%# #	/08@M./7	BL*O.]- ]-@
 
p9 p9f &)"BC D *- -*C C(; ;DJ/ J/\ &)1#s,#s,q"g& ) ' - - 2 *
 )F).'4T'6T48AG AGHL L^.?bA63>1>FD&DR7!t7:t&8R36D@"DJD4 LFUK UKp%PP%PP*/Z< DK  MKMK$:> &&!12+.q*q*q*!Q(!Q(b& ) ) + + + / 3b&J +.  / F (!1+!1+!1+!1+!1+!1+'11 988%?%?%@%=%?%?%A B 88$DE88%G%F%E%H%G%G%I J 88%G%H%F%G%I JK LM$,%M$,  &)XK *XKv L88$9:XX&@AXX&;<XX&9:XX&BCXXl3XXo6XXSz(,d|(+T{(+U|(+T{	') *  XXAw()2w()2w(*Bx(*Aw	'0 12&  XX&GHXX '4 5  XX&FGXX 'A BXX ': ;XX&?@XXo6XX*'=(3\'B(4i'@(3['A(1:'>	'@ A
  XX'7(.'7(.'8(/'8(.'7	'9 :%%)* V W* V ( &)1q"g&) ' 2 *)2 &)"BC D * [;6?A,&A,&^ [;6?A0A0 [;6?AMAM& A((#56((?3((#45((#89((QGaVaVb"X%&G$- .((S!Hq"g2wQ%&G$- . ((#34((#>?((=1((#56((VW$57G%+V$4vv6F$H I((T5MD$<$%)4L$2 3	E &1'&1.@ )V[;%>?AeAh/& 0A&< )V[;%>?AeAh/	 0A	 )V[;%>?AeAh/	N 0A	N )V[;%>?AeAh/	 0A	 :88$;<88$5688$DE88%F%G%G%F%H I	J 	=	= &)(@A=$ B *=$@. #>?t-	L . @	L D%=1t-
L . 2
L 6*01	' 2 +	' 6*+C ++C\ &)t}5#s,7@ - 6 *7@t &)1v.#s,-B - / *-B` &(+t}5#s,-< - 6 ,-<` 88$9:88$?@88$9:88c3Z#tsDk&(%[3+%? @88b!Wq"g2wR&(!W%. /0 88$EF88 %> ?88$DE88h
%;&1;%?&2H%=&1;%?&/%<	%> ?
 88ff%57G&,g%6&8I&,f%5%7 89:;());() )3v{1<8= ,> ?,NO  ?@BC
1:C?1:h )3v{1<8= ,> ?,NO  ?@BC
KC?K( )3v{1<8= ,> ?,NO  ?@BC
"C?"J 88$6788O488aWq!fq!fr2h&'W%. /88c1X2wB&(!Wq"g%7 8	9 88$4588$?@88h	%:&.%9&.%9&.%9%; < 88fg%6&,f%5&,f%5&,f%5%7 8	9:;"
*#;"
* 5$-0&)+= * 1+=\ &)!4 *!4H hh))*)+ , 	hh21113 4  	hhJKHHJ K 	hh 55567 8 0*10*  &),> *,>^ &)*4 **4Z 0hh11213 4 	hh03313 4 	hh21324 5 	hh| 	hh 67556 7 	hh 56567 8 	hh 65556 7 	hh|3')T5U)T5B &)5> *5>p "hh((((* + 	hh((((* + 	hh((((* + 	hh((((* + 	hh((((* + 	hh((((* + 	hh((((* + 	hh((((* +9, -!.D +.; /E!.F;" +.*-1-> 2 . /->` 4,/&)&), * * 0,. 4,/&)&)F * * 0F6 m!45 (E F#s,&)) * -F 6
)  &)1!& 2 *!&H m!45&)) * 6)& +.f-@ . /@oo  F
  Gs.   AY 	AY% YAY"Y!AY"Y%AY1Y0AY1