
    (ph}                    d*   S SK Jr  S SKrS SKJrJrJrJrJrJ	r	  S SK
r
S SK
Jr  S SKrS SKJrJrJrJrJrJrJrJr  S SKJrJrJr  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,J-r-  S SK.J/r0   S S
K1J2r2   S SKJ4r5  S SK)J6r6  S SK7J8r8  \Rr                  \Rt                  /r;\Rx                  \Rz                  /r>\;\>-   r?S=r@rA\2b  \2S   S   S   r@\2S   S   S   rAS rBS rC " S S5      rD " S S5      rE " S S5      rF\
R                  R                  S\?5      \
R                  R                  S/ SQ5      S 5       5       rI " S S5      rJ " S  S!5      rK " S" S#5      rL " S$ S%5      rM\
R                  R                  S\?5      \
R                  R                  S&/ S'Q5      \
R                  R                  S(S)S*/5      \
R                  R                  S+S,S)/5      \
R                  R                  S-S.S//5      S0 5       5       5       5       5       rNS1 rOS2 rPS3 rQS4 rR " S5 S65      rS " S7 S85      rTS9 rUS: rVS; rWS< rXS= rYS> rZS? r[S@ r\SA r]SB r^SC r_SD r`SE raSF rb " SG SH5      rcSI rdSJ reSK rfSL rg\
R                  R                  SMSNSO9SP 5       riSQ rj\
R                  R                  SRSSST/5      \
R                  R                  S\;5      \
R                  R                  SU\k" SV5      5      \
R                  R                  SW\k" SX5      5      \
R                  R                  SY\k" SX5      5      \
R                  R                  SZS S[/5      \
R                  R                  S\S S[/5      GSbS] j5       5       5       5       5       5       5       rl\
R                  R                  S\;5      S^ 5       rm\
R                  R                  S_SUS`0SWS`0SYS`0SZS`0SaS`0S\S`045      Sb 5       rn\
R                  R                  Sc\R                  " / SdQ/ SeQ/ SfQ/ SgQ/ ShQ/ SiQ/5      \R                  " / SjQ5      \R                  " / SkQ/ SlQ/ SmQ/ SnQ/ SoQ/ SpQ/5      \R                  " / SqQ/ SrQ/ SsQ/ StQ/5      4/5      Su 5       rp\
R                  R                  S\?5      Sv 5       rq\
R                  R                  Sw\R                  " / SxQ5      \R                  " / SyQ5      \R                  " / SzQ5      \R                  " / S{Q5      \R                  " / S|Q5      \R                  " / S}Q5      \R                  " / S~Q5      \R                  " SS/SS/SS/SS/SS//5      \R                  " SS/SS/S.S/SS/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       rr\
R                  R                  S\?5      \
R                  R                  S&/ SQ5      \
R                  R                  S-S.S//5      S 5       5       5       rs\
R                  R                  S\?5      \
R                  R                  S/ SQ5      S 5       5       rt\
R                  R                  S\u" \;\;-   \?5      5      S 5       rv\
R                  R                  S\u" \;\;-   \?5      5      S 5       rw\
R                  R                  S\u" \;\;-   \?5      5      S 5       rx\
R                  R                  S\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " SVS//S`SX/SS`/SS/SS//5      \R                  " SS/SS/S[S/SSV/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       ryS rz\
R                  R                  S\u" \?\;\;-   5      5      \
R                  R                  S\k" S.5      5      S 5       5       r{\
R                  R                  S\u" \?\;\;-   5      5      \
R                  R                  S\k" S.5      5      S 5       5       r|\
R                  R                  S\u" \?\;\;-   5      5      \
R                  R                  S\k" S.5      5      S 5       5       r}\
R                  R                  S\u" \?\;\;-   5      5      \
R                  R                  S\k" S.5      5      S 5       5       r~\
R                  R                  SS\R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ5      \R                  " / SQ/ SQ/ SQ/ SQ/5      4/5      S 5       r\
R                  R                  S\?5      \
R                  R                  S/ SQ5      S 5       5       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\?5      \
R                  R                  S/ SQ5      S 5       5       r\
R                  R                  S\?5      S 5       r\
R                  R                  S\?5      \
R                  R                  SSSM/5      \
R                  R                  SSS,/5      S 5       5       5       r\
R                  R                  S\?5      \
R                  R                  SS S[/5      \
R                  R                  SSS,/5      S 5       5       5       r\
R                  R                  S\?S-  5      \
R                  R                  SSSM/5      \
R                  R                  SSS,/5      S 5       5       5       r\
R                  R                  S\R                  " / SxQ5      \R                  " / SyQ5      \R                  " / SzQ5      \R                  " SS/SS/SS/SS/SS//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\u" \?\;\;-   5      5      \
R                  R                  SSS 4S,S 4/5      S 5       5       r\
R                  R                  S\u" \?\;\;-   5      5      \
R                  R                  SSS 4S,S 4/5      S 5       5       r\
R                  R                  S\u" \?\;\;-   5      5      \
R                  R                  SSS 4S,S 4/5      S 5       5       r\
R                  R                  GS \R                  " / SQ5      \R                  " / SQ5      \R                  " SVS//S`SX/SS`/SS/SS//5      \R                  " SS/SS/S[S/SSV/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SSM/5      \
R                  R                  S\?5      GS 5       5       r\
R                  R                  S\?5      GS 5       r\
R                  R                  GS\R                  " / GSQ/ GSQ/ GSQ/ GS	Q/5      \R                  " / GS
Q/ GSQ/ GSQ/ GS	Q/5      SS[4\R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      \R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      S[SX4/5      GS 5       r\
R                  R                  S\?5      GS 5       r\
R                  R                  S\?5      GS 5       r\
R                  R                  GS\R                  " / GSQ/ GSQ/ GSQ/ GSQ/5      \R                  " / GSQ/ GSQ/ GSQ/ GS Q/5      \R                  " / GS!Q/ GS"Q/ GS#Q/ GS$Q/5      \R                  " / GS%Q5      GS&GS'4\R                  " / GS(Q/ GS)Q/ GS*Q/ GS+Q/5      \R                  " / GS,Q/ GS-Q/ GS.Q/ GS/Q/5      \R                  " / GS0Q/ GS1Q/ GS2Q/ GS3Q/5      \R                  " / GS%Q5      GS4GS54/5      GS6 5       r\
R                  R                  S\?5      GS7 5       r\
R                  R                  GS8\R                  " / GS9Q/ 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SAQ/ GSBQ/5      \R                  " / GSCQ/ GSDQ/ GSEQ/ GSFQ/5      \R                  " / GSGQ/ GSHQ/ GSEQ/ GSIQ/5      \R                  " / GSJQ/ GSKQ/ GSLQ/ GSMQ/5      \R                  " / GS=Q/ GSNQ/ GSOQ/ GSPQ/5      \R                  " / GSQQ/ GSRQ/ GSSQ/ GSTQ/5      4/5      \
R                  R                  S\;5      GSU 5       5       r\
R                  R                  S\;5      \
R                  R                  GSVGSW5      \
R                  R                  GSX/ GSYQ5      GSZ 5       5       5       r\
R                  R                  GS[SS/5      \
R                  R                  S\?5      \
R                  R                  GSGS\5      GS] 5       5       5       r\
R                  R                  S&\" GS^5      5      \
R                  R                  GS_/ GS`Q5      \
R                  R                  S+S,S)/5      \
R                  R                  S\?5      GSa 5       5       5       5       rg! \3 a    Sr2 GNf = f! \3 a    Sr5 GNf = f(c      )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)_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_arrayr4   1   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       r3   test_lapack_documentedrL   9   s    ~~,-$$&'E	K fGF$$)@!NN4   b=NNN=r5   c                   ,    \ rS rSrS rS rS rS rSrg)TestFlapackSimpleP   c           	         / SQ/ SQ/ SQ/n/ SQ/ SQ/ SQ/ SQ/nS H  n[        [        US	-   S 5      nUc  M  U" U5      u  pVpxn	[        U	(       + [        U	5      5        [	        XQ5        [        Xg4S
[        US
   5      S-
  45        [	        U[        R                  " [        U5      5      5        U" USSS9u  pVpxn	[        U	(       + [        U	5      5        M     g )N)         )         )      	   )rQ   r   r   ga2U0*3?)rT   r   r   gMb`?)rW   rQ   r   r   )r   rQ   r   r   sdzcgebalr   rQ   )permutescale)	getattrr9   r   reprr   r   lenr7   r   )
selfaa1pfbalohipivscaleinfos
             r3   
test_gebalTestFlapackSimple.test_gebalR   s    	9- A7D1Ay)*1&BB$Hd4j)%b,"As1Q4y{#34%hA@)*2q)B&BB$Hd4j) r5   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^   r9   r   r_   )ra   rb   rd   re   httaurj   s          r3   
test_gehrdTestFlapackSimple.test_gehrdg   sU     A7D1AyaDMBTHd4j) r5   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 )NrQ   rR   r   rT   rU   rV   rX   rY   
         TfdFD)trsylr-   C)tranatranbdecimal)isgn)	r7   arrayr/   r'   isupperr   dot	conjugater|   )ra   rb   bctransr1   rc   b1c1r~   xr]   rj   s                r3   
test_trsylTestFlapackSimple.test_trsylr   sy   HHq!fq!f%&HHq!fq!f%&HHq"gBx() E%!((5/188E?BB%j2%8FE}}1"22.NAd%bffRmbffQm&C&+j2 #22%HNAd%FF2<<>++Q/"&&LLN<L<L2MMJ+ #22B7NAd%bffRmbffQm&C&+j!=# r5   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 )Nrn   ro   rq   r}   Mm1OoIiFfEer   r   r-   )langeFfEeFfrS   rW   Mm1Oor   axisIirQ   )r7   r   r/   r   r'   sqrtsumsquareabsr   maxr   )	ra   rb   r1   norm_strrc   r   valuer   refs	            r3   
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 * r5    N)	__name__
__module____qualname____firstlineno__rk   rv   r   r   __static_attributes__r   r5   r3   rN   rN   P   s    **	*=8-r5   rN   c                        \ rS rSrS rS rSrg)
TestLapack   c                 0    [        [        S5      (       a  g g Nempty_module)hasattrr9   ra   s    r3   test_flapackTestLapack.test_flapack       7N++ ,r5   c                 0    [        [        S5      (       a  g g r   )r   r8   r   s    r3   test_clapackTestLapack.test_clapack   r   r5   r   N)r   r   r   r   r   r   r   r   r5   r3   r   r      s    
r5   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  ry      rQ   )gels
gels_lworkr1   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrR   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r/   r'   r"   r   REAL_DTYPESr7   r   r0   r`   r   finfoepsr	   r.   )ra   indr1   mnnrhsrc   r   glsglslwr   r?   rj   r   r   r   lqrr   	lqr_truths                      r3   	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./ $r5   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_lworkrR   rQ   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r7   r   r'   r0   r`   intrealr   r   r   r.   )ra   r1   rc   r   r   r   r   r   r   workiworkrj   r   
iwork_sizer   srankrwork
rwork_sizes                      r3   
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 $r5   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_lworkrR   rQ   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )ra   r1   rc   r   r  r  r   r   r   r   rj   r   vr   r   r   s                   r3   
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 $r5   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  rR   rQ   ry   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r7   r   r'   r0   r`   r   r   r   r   r   int32r   r.   )ra   r1   rc   r   r  gelsy_lworkr   r   r   r   rj   r   jptvr  r   jr   s                    r3   
test_gelsy"TestLeastSquaresSolvers.test_gelsyx  s    [EC:::'.35B ,E:B!12J35("<E 88DA288}!xx{ %Q4BHHUO4G4G1GHJD&E88RXXa[!,BHH=D"'bhhuo6I6I(-ue#=A!T4AcrFBHH.A.@.B38%: "$BHHUO$7$7!79+ !4 $^EHc?$h/$h/18=?B 6eDB!12J35("<E 88DA288}!xx{ %Q4BHHUO4G4G1GHJD&E88RXXa[!,BHH=D"'bhhuo6I6I(-ue#=A!T4AcrFHH&J&J&L+02 "$BHHUO$7$7!7	9+ $r5   r   N)	r   r   r   r   r   r   r  r  r   r   r5   r3   r   r      s    B/H:Px79r59r5   r   r1   r0   )rS   rT   )rU   rR      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   )r1   r0   r  r   r   r   rj   s          r3   test_geqrf_lworkr    s-     #M%@KDA'KEqr5   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,  rR   r   gerqfrR   r   orgrqrQ   ungrq)r   r7   r   r'   assert_raises	Exceptionr   r.   )
ra   r1   rb   r  rqru   r   rj   r  r  s
             r3   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!, r5   r   N)r   r   r   r   r   r   r   r5   r3   r  r    s    -r5   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*   )rS   rS   size)potrfpotri)cleanr   )r7   randomr   normalr   r|   r'   r   r   r   r   )
ra   lowerr*  r   rb   dpotrfdpotrir   rj   dpts
             r3   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 ' #r5   r   N)r   r   r   r   r1  r   r   r5   r3   r#  r#    s    Cr5   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
-  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   rQ   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rS   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootsd   atolr   )r7   r   hstackvstackdiagr   r`   newaxisr   concatenater   r'   rangerH   r   anyisnanr   r   float64r   )ra   sigmasm_vecMSMit_lensgmmvcr=  rootsiress               r3   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 SVq[ $;=>$? @	 " "%RVVBHHUO,,.CDEBHHRZZ,@,D,D(D "**!5!9!99	;r5   r   N)r   r   r   r   rT  r   r   r5   r3   r4  r4    s    ;r5   r4  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  r1   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=
ף0rY  g(\+gףp=
0g333333*@g(\gHzG,gQ#rT   rQ   r   rS   rR   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   r@  N)r   r7   r   r.   
ValueErrorr'   r   r   )ra   r1   r^  r   x_outr[  r   rj   s           r3   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4r5   zdtype,trans)Nr|   r   r   r_  Ur\  rC  rf  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  )rT   rS   rR   r[  r   rg  rQ   r   dia)formatr   )r^  r   r_  r   rC  rf  g-C6
?r   r|   r   zInvalid trans argument)r7   r+  RandomStater'   rF  r   r4   r   spsdiagsr   r   diagonalr   minr   r   r|   r   rb  )ra   r1   r   r_  rC  r2   r   r   kdr[  is_upperkuklband_offsetsr   band_widthswidthbandsrb   r^  rowkr   rj   s                           r3   test_random_matricesTestTbtrs.test_random_matrices2  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)rg  rf  Invalid)rg  r|  rf  )r|  rf  rf  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   rT   rR   N)r'   r7   rI  r   r  r  )ra   r_  r   rC  r[  r^  r   s          r3   &test_invalid_argument_raises_exception0TestTbtrs.test_invalid_argument_raises_exceptionf  s8     !

;!QZAJiAUAr5   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   rT   r[  r   )r   rS   rg  r]  N)r7   r   floatr'   r   )ra   r^  r   r[  r?   rj   s         r3   test_zero_element_in_diagonal'TestTbtrs.test_zero_element_in_diagonals  sQ     WWV5)GGAU# 65	2-T1r5   zldab,n,ldb,nrhs)rU   rU   r   rU   )rU   rU   rS   rU   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r7   r   r  r'   r  r  )ra   ldabr   ldbr   r^  r   r[  s           r3   test_invalid_matrix_shapes$TestTbtrs.test_invalid_matrix_shapes  s@     WWdYe,GGSKu- 6iA.r5   r   N)r   r   r   r   rA   markparametrizer   rd  r   rz  r~  r  r  r   ).0r1   r   r   s   0000r3   rW  rW    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rW  r   )I1Or_  rg  r\  rC  rf  r   rS   ry   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OV[        R*                  " U5      R-                  SS9R/                  5       n[!        SU45      u  nnU" U5      u  nnnU" UXS9u  pSn[1        XUS9  g )Nr   l   a$r&  r-   ry   rg  trcon)r   r_  rC  r  )ordrQ   r   gecongetrfr   r   )r+  r   r7   default_rngr   permutedlogspaceintegers
issubdtypefloatingr   r   r   rC  rD  r/   r'   linalgr   infr   r   r   r   r   )r1   r   r_  rC  r   r2   Aoffsetr  rS  r?   norm_A
norm_inv_Ar   anormr  r  luipvtrj   r   s                        r3   
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&'q	1%))+'(:QDAuqD$r5,
 DC4(r5   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   rS   rT   r-   333333?r   y       皙?)	r'   r7   r   iscomplexobjr   r   
isinstancecomplexr  )r1   r  re   gcssnrs          r3   
test_lartgr    s     6HHQHHQ??1GA!K	G$3??1B	*Jq'*+Jr5)*B(' r5   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  rT   rS   ry   rQ   fdrotr   y             r-   y              @)rU   rU   rU   rU   )r   r   r   r   r@  rR   )r   )rU   rU   rS   rS   r   )offxoffy)rS   rS   rU   rU   )incxr  r   )rU   rS   rU   rS   )r  incyr   )r  r  r  r  r   )rS   rS   rU   rS   r  )r  r  r   )overwrite_xoverwrite_y)r7   fullr   	precisionr(   r'   r   r   )
r1   r   r   ur  r@  r  re   rb   r   s
             r3   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 r5   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   )rT   rT   r-   r}   larfglarfr   FDr   rQ   rQ   r   rR   r   r   Rsider`  r  )r7   r+  r   r|   r   conjr'   copyr0   r   r   r   r   )a0a0jr1   r  r  rb   alphar   ru   expectedr  s              r3   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 r5   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r1   ilp64iA%  T)r9  r8  i`DiD)r'   r7   float32r"   )sgesdd_lworkr   r   s      r3    test_sgesdd_lwork_bug_workaroundr  #  sO     $M*57LA<A&*$@E  I)!333!3r5   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)		TestSytrdi?  r1   c                 h    [         R                  " SUS9n[        SU45      n[        [        X25        g )Nr   r   sytrdr7   r   r'   r  rb  )ra   r1   r  r  s       r3   test_sytrd_with_zero_dim_array(TestSytrd.test_sytrd_with_zero_dim_array@  s,     HHV5) 1$/j%+r5   r   rQ   rS   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_lworkrQ   rR   r   r-  r   rU   r   r?          r   r   )r7   r   r'   arangetriu_indices_fromr   r   r   r   rC  r   r0   r   rF  outerr   r   r|   )ra   r1   r   r  r  r  r   rj   datarr   eru   r|   ry  k2QrR  r  Hi_lowerQTAQs                        r3   
test_sytrdTestSytrd.test_sytrdG  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(;(;&;#Fr5   r   N)r   r   r   r   rA   r  r  r   r  r  r   r   r5   r3   r  r  ?  se    [[Wk2, 3, [[Wk2[[S&)7G * 37Gr5   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  )ra   r  r  r  s       r3   test_hetrd_with_zero_dim_array(TestHetrd.test_hetrd_with_zero_dim_array  s,     HHV=1 1$/j%+r5   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_lworkrQ   rR   r-   r   rQ   r-  r   r  rU   r   r?  r  r   r   ry   )r7   r   r'   r  r  fill_diagonalr   rC  r   r"   r   r   r   r   r0   r   r   rF  r  r  r   r   r|   )ra   r   
real_dtyper  r  r  r  r   r?   rj   r   r  rr   r  ru   r|   ry  r  r  rR  r  r  r  QHAQs                           r3   
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	r5   r   N)r   r   r   r   rA   r  r  r.   r  zipr   r  r   r   r5   r3   r  r    sp    [[_n=, >, [[7 n=?[[S&)A *?Ar5   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   rV   rT   rR   )r   r   rd   )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"   r7   r   r   r   )r   r1   func
func_lworkr   rb   r   rr   r   r?   resultr  s               r3   
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 (r5   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   ry   rT   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr-   rR   rQ   )r   r-  )rb   ipivr  r-  rd   )r   r   r   r.   r'   r   r/   r  r|   r7   r   r   r"   r   r   r  cond)r   r1   r   r  funconfunctrfr  r  r   ldur  r?   rconds                r3   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?@- 7r5   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   ry   )r(  sygstsyevdsygvdr   rR   r   giUMu?r   )r   r   r   r'   r   r/   r|   r7   r   r   r   )r   r1   r   r(  r#  r$  r%  r  Beig_gvdr?   rj   r   rb   eigs                  r3   
test_sygstr)    s   J,
%5 7I<A&C"e Je$WaKJe$WaK!bffQ444 !;D	 (	+	Qx	625 -r5   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   ry   )r(  hegstheevdhegvdr   r-   rR   r   -C6?r   )r   r   r.   r'   r   r/   r  r|   r7   r   r   r   )r   r1   r   r(  r+  r,  r-  r  r&  r'  r?   rj   r   rb   r(  s                  r3   
test_hegstr/  =  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 0r5   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   ry      tzrzftzrzf_lworkr   rR   r-   r   r   Nry   r   r  r?  )r7   r+  rk  r   r   r'   r"   r   r   r/   r  r  r|   r   rA  r   r   rF  r   r  r   r   r   spacingr   )r2   r   r   r   r1   r4  tzrzf_lwr   r  rzru   rj   r  VIdr   r   Zs                     r3   
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   rQ   r-   r   r|   )trttftfttrtfsmr   rR   r   r   rT   rV   r   r   r   rg  )r   rC  rS   r  )r   rC  r  N)r7   r+  rk  r   r   r   r   r   r/   r'   r   r   r  r|   r  )r2   r   r1   r   r  r   r>  r?  r@  Afpr?   r&  solnB2s                 r3   	test_tfsmrE  ~  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? (r5   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   )ry   r2  r2  r3  r   rR   )ormrzormrz_lworkr-   )unmrzunmrz_lworkr   Nr|   r   ry   r   r   r  r?  r   r  )r  r   )r  r   r   )r7   r+  rk  r   r   r'   r"   r   r   r/   rA  r   rF  r|   r   r  r   r6  r   r   r   r   )r2   qmqncnr   r1   r4  r7  lwork_rzr  r   orun_mrzorun_mrz_lw	lwork_mrzr8  ru   rj   r9  r:  r   r   r  r   tolcqs                            r3   test_ormrz_unmrzrT    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   rQ   r-   r   r|   )r>  r?  r   r   r\  r_  rg  )transrr_  rR   Nr   F)order)r7   r+  rk  r   r   r   r/   r'   r   r   r   r  r|   r   r   reshape)r2   r   r1   r   A_fullrX  r>  r?  A_tf_Urj   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                      r3   test_tfttr_trttfrg    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 (r5   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)rV  r   r   rQ   r-   )trttptpttrr   r   r\  rW  rR   N)r7   r+  rk  r   r   r   r/   r'   r   r   r   r   r|   r   r   r   )r2   r   r1   r   r\  ri  rj  A_tp_Urj   A_tp_LindsA_tp_U_mA_tp_L_mrc  rd  s                  r3   test_tpttr_trttprp    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 (r5   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   rQ   r-   )pftrfr>  r?  r   r   N)r7   r+  rk  r   r   r   r/   r  r|   r   r'   r   r   r   )r2   r   r1   r   r  rr  r>  r?  rB  rj   	Achol_rfpA_chol_rr?   Achols                 r3   
test_pftrfrv  D  s   
 ))


%C'
7!#((1."33;;EBAFFHJJ3q6)A!''.ACC!CF("A./J5:<e !H	-		A)!(2% (r5   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   rQ   r-   )pftrirr  r>  r?  r   r   rR   rT   rV   r   N)r7   r+  rk  r   r   r   r/   r  r|   r   r'   r   r   r   r   )r2   r   r1   r   r  rx  rr  r>  r?  rB  rj   
A_chol_rfp	A_inv_rfpA_inv_rr?   Ainvs                   r3   
test_pftrir}  _  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- (r5   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   rQ   r-   rS   r   rR   )pftrsrr  r>  r?  r   rT   rV   r   N)r7   r+  rk  r   r   r   r/   r  r|   r   r   r'   r   r  r  r   r   )r2   r   r1   r   r  r&  Bf1Bf2r  rr  r>  r?  rB  rj   ry  rC  s                   r3   
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 (r5   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   rQ   r-   rR   r   hr>  r?  frkr   r   r   rT   rV   r   N)r7   r+  rk  r   r   r   r/   r  r|   r   r'   r   r   r   )r2   r   r1   r   r  prefixr>  r?  shfrkrB  r?   r   Afp_outA_outs                 r3   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# (r5   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   ry   rQ   i   r-   r>  r   )syconvr  r  r   r  F)r-  	hermitianr  r   Nr  r?  r   )r7   r+  rk  r   r   r   r/   r  r|   r   r6  r   r'   r"   r   r   r   r   )r2   r   r1   r   r  rR  r  trf	trf_lworklwr\  Dpermr  r  rj   rb   r  rg  s                      r3   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 (r5   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   rQ   r-   r>  r   )geqrtgemqrtr   r   r   r  r?  r   r|   r\  r  rf  r  r   r\  r\  rf  r  r  rA  )r7   r+  rk  r   r   r   r/   r6  r   r'   r   r   r|   r  r   r   r   r  r  )ra   r2   r   r1   r   r  rR  r  r  rb   trj   r  r  r  r   	transposer  r   r   qqC	c_defaults                          r3   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 ,r5   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   rQ   r-   r>  r   )tpqrttpmqrtr   r   rR   r   r  r?  r   r|   r  rf  r  r\  r   r  r  r  rA  )r7   r+  rk  r   r   r   r/   r6  r   r'   r   r   r   rE  r   r|   r  r   r   r  r  )!ra   r2   r   r1   r   r  r&  rR  r  r  lrb   r   r  rj   B_pentb_pentr  r  r  r   r  r  r  r   r   rr   r  cdCDqCDr  	d_defaults!                                    r3   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 $ ,r5   r   N)r   r   r   r   r@   r  r  r   r   r5   r3   r  r    s    
<A|QKr5   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   ry   rR   pstrfr   rQ   r-   r    r   rR   ra  r  r7   r+  rk  r   r   r'   r   r/   r  r|   r   r   r   r  r   rI  r   r   )r2   r   r1   r   r  r  r  r   pivr_crj   rg  single_atoldouble_atolr@  r\  s                   r3   
test_pstrfr  y     
))


%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 (r5   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   ry   rR   pstf2r   rQ   r-   r  r  r  ra  r  r  )r2   r   r1   r   r  r  r  r   r  r  rj   rg  r  r  r@  r\  s                   r3   
test_pstf2r    r  r5   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ſFxrR   )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ޅBr7  )g(\g   Zgq=
ףp?)gEop=gQ?gZEqҽr-   geequr   r.  ra  )r7   r   r   r   r/   r'   r   )desired_realdesired_cplxr   r1   r  r  r  r   rowcndcolcndamaxrj   s               r3   
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 (r5   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  rZ  ry   r   rR   r   r-   rU   r   syequb)r7   r   r   r   r   rF  rot90rC  r'   r   log2r/   r   )desired_log2sr   r1   r  r  r   rr   r  r   scondr  rj   s               r3   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 )NrR   rU   i  rY   rQ   )ry  r-   r   r  r  r  rV                   i   rU   rU   y              0@)rU   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r7   rC  r   r   zheequbr   r   r  r   r  cheequbr/   	complex64)r  r   r  r  rj   s        r3   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Jr5   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%  ry   r-   rR   getc2r   gesc2r   r:  )overwrite_rhsrT   r   )	r7   r+  rk  r   r   r   r/   r'   r   )r2   r   r  r  r   r1   r  r   r  r  r  r  jpivrj   r   r]   s                   r3   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:+ (r5   r'  )rV   rU   r  jobarV   joburT   jobvjobrrQ   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   rR   rQ   r  rZ  r   )r  r  r  r  jobtr  NF)r9  r  )r7   r+  rk  r   r   r4   r'   r  r  r  r   r   r   rC  r  r|   identityr  matrix_rankcount_nonzero)r'  r1   r  r  r  r  r  r  r2   r   r   r@  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r  r   r   rj   sigmas                                r3   test_gejsv_generalr  8  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 r5   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   rQ   rQ   )rQ   r  r>  ry   r  N)r'   r   r0   r7   r   r   sinr  r[  r/   asfortranarrayr|   r  r   )r1   r  r  r  r  r   r   rj   r  Acr?   s              r3   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r5   kwargsrY   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)rR   rR   r   r  Nr  )r  r  r  s      r3    test_gejsv_invalid_job_argumentsr    s/     	e$AWE2E)U00r5   zA,sva_expect,u_expect,v_expect)g)\(@gp=
ףgffffff?g
ףp=
)gQ?gQgGz?g(\)gQ޿gQgGz?gzGʿ)gQ?gQ?gHzG?g)\(?)ggq=
ףp@g333333r  )ףp=
?g(\r
  g(\)g cZB#@gI.!v@g?ܵ?r  )gC?g=yX5gc=yXga4?)gB`"?g:pΈҞgʡE?gn4@?)g[B>٬?g٬\m?gJ{/L?gOe?)gc]Fgꕲq׿g\m?fc]F)g؁sFڿgZB>?g0L
F%?gq=
ףp)g ?gR!u?guVſg&Sٿ)gǘ?gV-g	^)p?g()gFx$g6[ ٿgUN@giq?)g1Zd?gOnӿgΈ?g_vO?)g}?5^Iؿg58EGr?gi o?g7[ Ac                     Sn[        SU R                  S9nU" U 5      u  pgpp[        XUS9  [        X'US9  [        X8US9  g)zr
This test implements the example found in the NAG manual, f08khf.
An example was not found for the complex case.
r.  r  r   r  N)r'   r1   r   )r  
sva_expectu_expectv_expectr@  r  r  r  r  r   r   rj   s               r3   test_gejsv_NAGr    sG    0 DWAGG4E#(8 CAUJ$/Hd+Hd+r5   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%  ry   r>  rQ   r1   r2   r   gttrfgttrsr   r   rR   r  r|   r   rA  z?gttrf: _d[info-1] is , not the illegal value :0.)r7   r+  rk  r   r   r4   r  rC  r   r'   r	   r   r   r   r   r|   r  r  rb  testingr   )"r1   r2   r   r@  durr   dldiag_cpyr  r   r   r  r	  _dl_d_dudu2r  rj   rg  r\  rR  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos"                                     r3   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   )r6  r        ffffff@)333333@@r         )r  r  r  r   )r!  r"  rW   gC>)r   r  rX   )rR   rS   rT   rU   rU   g@gffffff@      g%@g@g	r  gffffff&g3@r  rU   rW   rZ  r  )       @             @      ?            ?      ?      )?r*  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r/  )r*  r+  r,  r-  )r.  r/  r0  r/  y ~:pffffff?)r'  r(  r)  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r/  r&  y      @      y      ?       @y      @      @r(  y             r'  r)  y       @       c	                     [        SU S   U S   45      u  pU	" X!U 5      u  ppnn[        X5        [        X5        [        XSS9  [        X5        U
" XXX5      u  nn[        UU5        g )Nr  r   r.  r  )r'   r   )r  rr   r  du_expd_expdu2_expipiv_expr   r   r  r	  r  r  r  r  r  rj   r  s                     r3   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr6  U  ss    d $$6A1GLE$)"$4!CStTC!C BD)D##3T5MGTGQr5   )r  r  r  c           
      b   [         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                  " U5      R                  SS9R                  5       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-   rQ   r   r   r   )r  gtconr  r  g      ?r   )r7   r+  r  rC  r  r  r   r/   r   r   r   r'   r   r   r   )r1   r   r   r2   rr   r  r  r  r  r  r8  r  r  rj   rS  r?   r  r  r  r  r   r   s                         r3   
test_gtconr9    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"FF1IMMqM!%%'E#$6=LE!&rb!1B2D2"4T:FC#$6=LE51XNBd2u(FC88E?$DC4(r5   ))rS   rW   )rW   rS   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  )r1   r0   r;  r   r   r   rj   s          r3   test_geqrfp_lworkr<    s-     $^EBLDA(KEqr5   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>  ry   rT   rQ   r   pttrfr   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r7   r+  rk  r   r   r4   rC  r  r  r'   r	   r   r   r   r   r|   )ddtyper1   r2   r@  r   rr   r  r  r  r>  r  _erj   r\  r  r   r   r@  _xs                      r3   test_pttrf_pttrsrD    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%r5   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 )Nry   r   r>  r   rR   rQ   r   )r7   r+  rk  r'   r4   r  rb  )rA  r1   r   r2   r>  rr   r  s          r3   *test_pttrf_pttrs_errors_incompatible_shaperF    sr     	A
))


%CWE2E#QD&6:A#QqSFE7A*esVQ/*e#2/r5   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 )Nry   r%  r>  r   rR   rQ   r   z?pttrf: _d[info-1] is r
  z2?pttrf should fail with non-spd matrix, but didn't)r7   r+  rk  r'   r4   r   r   )
rA  r1   r   r2   r>  rr   r  r  rB  rj   s
             r3   'test_pttrf_pttrs_errors_singular_nonSPDrH    s     	A
))


#CWE2E#QD&6:A#QqSFE7AAaDAaD;LBD1Hq)"AX,7RSU 	$QD&6A;LBDDAIKLr5   z%d, e, d_expect, e_expect, b, x_expect)rT   ry      r   rU   )r  r$  r2  rX   )rT   rY   r      rQ   )r%  gK=Ur  r  rR      A      g      @r   r  )rJ  )   .      )y      0@      0@y      2@      "      ?      )rJ  rY   rQ   rT   )r/  r&  rQ  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r.  c                    Sn[        SUS   S9nU" X5      u  pn
[        XUS9  [        XUS9  [        SUS   S9nU" XR                  5       U5      u  p[        XUS9  UR                  [        ;   a  U" XUSS9u  p[        XUS9  g g )	Nr.  r>  r   r   r  r@  rQ   r  )r'   r   r  r1   r.   )rr   r  d_expecte_expectr   x_expectr@  r>  r  rB  rj   r@  rC  s                r3   test_pttrf_pttrs_NAGrV  	  s    4 DWAaD1E;LBDBt,Bt,WAaD1ERA&HBBt, 	ww. !,40 !r5   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%  rQ   rT   rR   r   )	r7   r+  rk  r4   rC  r   r  r|   r    )r1   realtyper   	compute_zr2   A_eigvrrr   r  trir  zs               r3   pteqr_get_d_e_A_zr^  6	  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!<r5   zdtype,realtyperY  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   ry   rr   r  r]  rY  r   zinfo = z, should be 0.r  N)r   r7   r   r   r'   r^  r   r   sortr    r  r|   r  rC  )r1   rX  rY  r@  r`  r   rr   r  r  r]  d_pteqre_pteqrz_pteqrrj   s                 r3   
test_pteqrrf  V	  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	& r5   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%  r`  r   ry   rT   r]  rY  r   r   r'   r^  r1   rX  rY  r`  r   rr   r  r  r]  rc  rd  re  rj   s                r3   test_pteqr_error_non_spdrk  w	  sP     	Hge4E
A"5AAJA! ',AE1Y&O#Gg!8O8r5   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%  r`  r   ry   r   rh  )r   r'   r^  r  rb  )	r1   rX  rY  r`  r   rr   r  r  r]  s	            r3   "test_pteqr_raise_error_wrong_shaperm  	  sp     	Hge4E
A"5AAJA!*esVQyI*e#2!Ij%A3B9M r5   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%  r`  r   ry   r   rh  ri  rj  s                r3   test_pteqr_error_singularro  	  sZ     	Hge4E
A"5AAJA!AaDAaD&+AA&K#Gg!8O8r5   zcompute_z,d,e,d_expect,z_expect)gp=
ף@r  gq=
ףp?r  )g\(\	@g
ףp=
g?)gŏ1w- @gR'?g/n?g&䃞ͪ?)g cZB>?gCl?g:pΈڿg??)gaTR'?gSۿg}гY?g%uο)g\mg٬\m?gAf?gL
F%u)gǘgŏ1w-!?g333333?gz6?c                 J   Sn[        SUR                  S9n[        R                  " U5      [        R                  " US5      -   [        R                  " US5      -   nU" XXpS9u  pp[	        XUS9  [	        [        R
                  " U
5      [        R
                  " U5      US9  g)	zV
Implements real (f08jgf) example from NAG Manual Mark 26.
Tests for correct outputs.
r.  r`  r   rQ   r   ra  r  N)r'   r1   r7   rC  r   r   )rY  rr   r  rS  z_expectr@  r`  r]  r  rB  _zrj   s               r3   test_pteqr_NAG_f08jgfrs  	  s|      Dgagg6E

RWWQ]"RWWQ^3Aq@BBBt,BFF2Jx 0t<r5   matrix_size)r  )rW   rV   rV   rV   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  )ru   r   r   r   ra  r   )r7   r+  rk  r   r   r'   r4   r   r   r   r   r0   r  r|   r   allrC  r`   r   rG  )r1   rt  r2   r   r@  rx  gqrr   r   r  qr_Aru   rj   r  qqrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                         r3   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:>"$r5   c                  x    [         R                  " / 5      n [        SU R                  S9n[	        [
        X5        g )Nrx  r   )r7   r   r'   r1   r  r  )A_emptyrx  s     r3   #test_geqrfp_errors_with_empty_arrayr  	  s)    hhrlGhgmm<F)V-r5   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   rQ   r  $_lwork raised unexpected exception: r   r.   r'   r"   r  rA   failr  r  r   r1   sc_dlwdz_dlwr  s          r3   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   rQ   r\  rW  r  r  r  s          r3   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   )rQ   ry   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"   rz  )	r  r   rd   r  r  dlwr  lwvalr   s	            r3   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)rw  rO      r  r  csdr  r   r   lrworkr   r   r  g     @ra  )r   r#   rvsr$   r'   r"   dictr   r   ro  r7   r   rF  cosr  r   r   r   )r  r   rd   r  r  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2trj   rg  VHr  n11n12n21n22SonerR  Xcs                                  r3   test_orcsd_uncsdr  1
  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Br5   
trans_boolFfactrY  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   ry   rQ   r  r   rR   r|   r   rf  rY  NrV   r  r   dlfdfdufr  r  r   z?gtsvx info = z, should be zerorS   r  __len__Trcond should be scalar but is ferr.shape is z but should be berr.shape is )r7   r+  rk  r   r   r'   r4   rC  r   r  r|   r  r   r	   r   r   r0   )!r1   r  r  r2   r@  r  r  r   r  rr   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr   ferrberrrj   s!                                    r3   
test_gtsvxr  `
  so    ))


#C%$$$D#$6eDLE
A	$acV5	BB#QD?A	$acV5	BB
B"''!*$rwwr1~5A#QF%AA6@E[(SccE!qA-A '')QVVXrwwy!&&(;J !CKbRdVAX )D#tUE5 bRE7I@I=CS$feT4DAIv-=>? ra=)qQ-(ra=)qQ-( AvD) GE9%T1,UG46 DJJqMQWWQZ'N4::a=/ J112+> @ DJJqMQWWQZ'N4::a=/ J112+> @r5   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   ry   rQ   r  r   rR   r|   r   rY  rV   r  rf  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )	r7   r+  rk  r'   r4   rC  r   r  r|   )r1   r  r  r2   r  r  r   r  rr   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  rj   s                                  r3   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 
r5   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   ry   rQ   r  r   rR   r|   r   rY  rV   rf  r  )r7   r+  rk  r'   r4   rC  r   r  r|   r  rb  r  )r1   r  r  r2   r  r  r   r  rr   r  r  r   r   r   r  r  r  r  r  r  s                       r3   "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	<r5   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'   r1   r   )r  rr   r  r   r   r  r  r  r  r  r  r  r  r   r  r  rj   s                    r3   test_gtsvx_NAGr    s:    . WAGG4EbR#I@I=CSe4a(r5   zfact,df_de_lambdac                 6    [        SUR                  S9" X5      $ Nr>  r   r'   r1   rr   r  s     r3   <lambda>r  &      (8?@ww)HHI)Nr5   c                     gN)NNNr   r  s     r3   r  r  (      -?r5   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   rU   rT   rQ   r   rR   r  r  r  efr   zinfo should be 0 but is .r  r  r  )rR   r  z# but should be ({x_soln.shape[1]},)r  N)r7   r+  rk  r   r   r'   r4   rC  r  r  r	   r   r   r   r   r|   r   r0   )r1   rX  r  df_de_lambdar2   r@  r  r   rr   r  r  r  r   r  r  rj   r  r   r   r  r  r\  r  s                          r3   
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 :r5   c                 6    [        SUR                  S9" X5      $ r  r  r  s     r3   r  r  a  r  r5   c                     gr  r   r  s     r3   r  r  c  r  r5   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   rU   rT   rQ   r   rR   r  r  )
r7   r+  rk  r'   r4   rC  r  r  rb  r  )r1   rX  r  r  r2   r  r   rr   r  r  r  r   r  r  rj   s                  r3   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Jr5   c                 6    [        SUR                  S9" X5      $ r  r  r  s     r3   r  r  |  r  r5   c                     gr  r   r  s     r3   r  r  ~  r  r5   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   rU   rT   rQ   r   rR   r  rf  r   rS   r  )r7   r+  rk  r'   r4   rC  r  )r1   rX  r  r  r2   r  r   rr   r  r  r  r   r  r  rj   r   r   r  r  s                      r3   test_ptsvx_non_SPD_singularr  x  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xr5   zd,e,b,xc                 ^    [        SUR                  S9nU" XU5      u  pVpxpn[        X75        g )Nr  r   r  )rr   r  r   r   r  r  r  x_ptsvxr   r  r  rj   s               r3   test_ptsvx_NAGr    s0    . WAGG4E/4Q1~,BGDa)r5   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>  )ry   rT   r  r   r   rQ   )ppsvpptrfpptrspptrippconr  r  r  r   ra  )r  r-  r  )r7   r+  rk  r   r   r4   r  r|   r   rF  r'   r   r   r   r   r   r  r   r   r   r  )r1   r-  r2   r@  r   r   rb   r   yr   rm  apr   r  r  r  r  ulrj   aululiaulibxxvr  r   s                             r3   !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>  ry   r  )geestrexcr   c                     g Nr   r   s    r3   r  !test_gees_trexc.<locals>.<lambda>      Dr5   Fr  r   r   rZ  ru  ra  rW   rQ   r  r   r7   r+  rk  r   r   r4   r'   r   r.   r   r   r  r|   )r1   r2   r@  r   rb   r  r  r  r  r]  d2s              r3   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3r5   zt, expect, ifst, ilst)r  g)\({Gz?gQ?)r  皙r  ffffff?)r  gr  g?)r  r  r  r  )r  lV}gV_?g|?5^?)g?r  gV/?g;On?)r  r  r  ggj+)            y
ףp=
?
ףp=
׿yRQȿQ?y)\(?      п)r               @yQ
ףp=
yq=
ףpͿp=
ף?)r  r         @      yGz?(\?)r  r  r        @      )r  y1%Ŀq?ys??ܵ|ȿyHzG??ܵ?)r  r  yV/?ݓ?yjt?vտ)r  r  r   yB>٬?=U?)r  r  r  r  c                 |    Sn[        SU R                  S9nU" X XSS9n[        US   S5        US   n [        X0US9  g)	z[
This test implements the example found in the NAG manual,
f08qfc, f08qtc, f08qgc, f08quc.
r.  r  r   r   )wantqr   r  N)r'   r1   r   r   )r  ifstilstexpectr@  r  r  s          r3   test_trexc_NAGr&    sH    < DWAGG4E11-FQq	AFD)r5   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>  ry   r  )ggestgexcr   c                     g r  r   r  s    r3   r  !test_gges_tgexc.<locals>.<lambda>J  r  r5   Fr:  overwrite_br   r   rQ   r  rZ  r   ru  ra  rW   rR   rS   r  r  )r1   r2   r@  r   rb   r   r(  r)  r  r   r  r  r]  d1r  s                  r3   test_gges_tgexcr/  ?  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=r5   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>  ry   r  )r  trsentrsen_lworkr   c                     g r  r   r  s    r3   r  !test_gees_trsen.<locals>.<lambda>z  r  r5   Fr  r   r   rZ  ru  ra  rQ   rV   r   r   liworkr   r7   r+  rk  r   r   r4   r'   r   r.   r   r   r  r|   r   r"   )r1   r2   r@  r   rb   r  r1  r2  r  r  r]  r  selectr   s                 r3   test_gees_trsenr9  o  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3r5   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)\(?)rQ   r   r   rQ   g      ?g(\	@)yqh yfc]F?ڊe׿yMbȿ&S?y&1??п)r  y      ?5^I @yo0*yZd;OͿ~:p?)r  r  yx$(@4@y[ A?&?)r  r  r  y?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p	cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}?	cZy+eXw?-ٿ)y"u?	c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47)yS!uqF%u@yyտGx$(?y3ı.n?rh|)yv?
F%uyd`TR?I&ۿyN@?ݓy4@
@	^)?)ys{
@ o_yH.@|Pk@y0*?*:Hy]m{?Gz)y)0[<?yI.!? ryqh 
@ׁsF?y1w-!?h ogRQ?gK?c                    SnSn[        SU R                  S9u  p[        XU 5      n
U R                  [        ;   a  U" X XS9nOU" X XU
S   S9n[	        US   S	5        US	   n US   nU R                  [        ;   a  US
   nUS   nO
US   nUS   n[        X1U -  UR                  5       R                  -  US9  [        USU-  US9  [        USU-  US9  g)zK
This test implements the example found in the NAG manual,
f08qgc, f08quc.
r.  r  )r1  r2  r   r   rQ   r5  r   r   rT   rU   rV   r  N)r'   r1   r"   r.   r   r   r  r|   )r  r  r8  r%  expect_s
expect_sepr@  atol2r1  r2  r   r  r   seps                 r3   test_trsen_NAGr@    s    ` DE) 1E ;2Eww. v!1v!qBQq	Aq	Aww. 1IQi1IQiFEAFFHJJ.T:Ha!e%0JCe4r5   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>  ry   r  )r(  tgsentgsen_lworkr   c                     g r  r   r  s    r3   r  !test_gges_tgsen.<locals>.<lambda>  r  r5   Fr,  r   r   rQ   r  rZ  r   ru  ra  rV   r   ir$  r  r7  )r1   r2   r@  r   rb   r   r(  rB  rC  r  r   r  r  r]  r.  r  r8  r   s                     r3   test_gges_tgsenrF    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=r5   za, b, c, d, e, f, rans, lans)r   r   r   r   )r  r6  r   r   )r  r   r6  r   )r  r  r  g      @)r   r   r   r   )r  r  r  r   )      r   r   g      (@)g      "r          rH  )rG  r   rH  r   )      r   r#  g      3@)r   r   r   r6  )r  r   r   r   )r  r  r   r   )r  r  r  r   )r   r   r   r   )r  r   r   r   )r  r  r  r   )rI  r   r  r   )r  r   g       r  )r  r         r   )rJ  r   r  r   )r  r   r  r  )r  r   r6  r   )r  r   r  r   )r   r  r   r  )r   r6  r  r   )r  r   r   r  )r   r  r   r   c	                 4   Sn	[        SUS9n
U
" XX#XE5      u  ppn[        US5        [        USS[        R                  " U5      R
                  S-  SS9  [        US	S[        R                  " U5      R
                  S-  S
S9  [        XU	SS9  [        XU	SS9  g )Nr.  tgsylr   r   r   r>  zSCALE must be 1.0r   r@  r?  r  zDIF must be nearly 0zSolution for R is incorrect)r@  r?  zSolution for L is incorrect)r'   r   r   r7   r   r   )rb   r   r   rr   r  re   ranslansr1   r@  rL  routloutr]   difrj   s                   r3   test_tgsyl_NAGrS  !  s    H Dge4E#(qQ#: DDqE3QRXXe_-@-@-D/1C1288E?+>+>s+B24DT9;DT9;r5   r   )rf  r|   ijob)r   rQ   rR   rS   rT   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/ r1  iry   r   )outputr  rR   rL  r   )r   rT  r   zINFO is non-zeror  zSCALE must be non-negativer>  zDIF must be 0 for ijob =0rM  zDIF must be non-negativerf  r|   r  zlhs1 and rhs1 do not match)r@  r   r?  zlhs2 and rhs2 do not match)r7   r  r+  r  r!   uniformr/   r'   r   r   r   r  )r1   r   rT  r@  r2   r   r   rb   rr   r?   r   r  r   re   rL  rP  rQ  r]   rR  rj   lhs1rhs1lhs2rhs2s                           r3   
test_tgsylr\  U  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 <	> r5   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	" XlS9u  pnUS:X  d   eU" XUS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.l   *M/t|0 )r   rU   r&  r-   r  r  r  trsr   r  r   r   )rb   r  r   r>  r  )r   rA   rB   r7   r+  r  r.   rW  r/   r|   r  r'   r   r   r   )r]  r1   r-  r2   r   r   r  r   rI   r  r  r_  r   r  r  rj   r   r   s                     r3   test_sy_hetrsr`    si    }+-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!)OCt199Ca(GAt199
((5/

CAaCQs+r5   r   z
uplo, m, n))rg  rU   ry   )rg  ry   ry   )r\  ry   rU   )r\  ry   ry   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_  rC  rg  rQ   g>r   )
r7   r+  r  r/   r'   r   r   r  ro  r   )r   r_  r   r   rC  r1   r2   r  rb  r   rS  rR  r   s                r3   
test_lantrrc    s     ))

 1
2C


&&u-A#$6=LE
d
.C ck
rwwqzAs{IIc!i Q$
.CC4(r5   r<  )	functoolsr   r+  numpy.testingr   r   r   r   r   r	   rA   r
   r  numpyr7   r   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r9   r   r   r   r   r   r   r   r   r   r    r!   scipy.linalg.lapackr"   scipy.statsr#   r$   scipy.sparsesparserl  scipy.__config__r%   ImportErrorr&   r8   r'   scipy.linalg.blasr(   r  rI  r   r  
complex128r.   r   blas_providerblas_versionr4   rL   rN   r   r   r  r  r  r  r#  r4  rW  r  r  r  r  r  r  r  r  r!  r)  r/  r<  rE  rT  rg  rp  rv  r}  r  r  r  r  r  r  r  r  skipifr  r  rF  r  r  r  r   r  r  r6  r9  r<  r   rD  rF  rH  rV  r^  rf  rk  rm  ro  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r/  r9  r@  rF  rS  r\  r`  rE   rc  r   r5   r3   <module>rt     s!  
  / /  * ! ! ! - ,F F F F / 2 '0 1 ,zz2::&,,.	~	%# #	/08@M./7	BL*O.]- ]-@
 
p9 p9f &)"BC D *- -*C C(; ;@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,. m!45 (E F#s,&)) * -F 6
)Ul  F
  Gs.   8AT ?AT# TAT TAT T#AT/T.AT/