
    shbw                    D   S SK r S SKrS SKJrJr  S SKrS SKrS SKJrJ	r	  S SK
r
S SKrS SKJrJrJr  S SKJr  S SKJrJrJrJrJrJr  SSKJr  S SKrS	 rS
 rS r " S S\\5      rS r S r!S r"S r#S r$S r%SJS jr&S r'SKS jr(S r)SLS jr*S r+S r,SMS jr-SMS jr.SMS jr/S r0SNS jr1S  r2SMS! jr3S" r4 " S# S$\\5      r5 " S% S&\5      r6 " S' S(\55      r7 " S) S*\55      r8 " S+ S,\55      r9 " S- S.\55      r: " S/ S0\55      r; " S1 S2\55      r< " S3 S4\<5      r= " S5 S6\<5      r> " S7 S8\55      r? " S9 S:\55      r@ " S; S<\<5      rA " S= S>\55      rB " S? S@\<5      rC " SA SB\55      rD " SC SD\55      rE " SE SF\<5      rF " SG SH\5      rG\HSI:X  a  \R                  " 5         gg)O    N)productcycle)NumberIntegral)jitnjittypeof)errors)TestCasetagneeds_lapack
needs_blas
_is_armv7lEnableNRTStatsMixin   )matmul_usecasec                 .    [         R                  " X5      $ Nnpdotabs     k/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_linalg.pydot2r      s    66!<    c                 ,    [         R                  " XUS9$ Noutr   r   r   r!   s      r   dot3r#      s    66!C  r   c                 .    [         R                  " X5      $ r   )r   vdotr   s     r   r%   r%          771=r   c                   p  ^  \ rS rSrSr\R                  \R                  \R                  \R                  4r
U 4S jrS rS r\R                  S 5       rS rS rS	 rSS
 jrSS jrS r\S 5       r\S 5       rS r\S 5       rS r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!Sr"U =r#$ )TestProduct   z
Tests for dot products.
c                 T   > [         R                  " 5         [        [        U ]  5         g r   )gccollectsuperr(   setUpself	__class__s    r   r.   TestProduct.setUp&   s    


k4&(r   c                     [         R                  " U5      n[        U[         R                  5      (       a  US-  S-   R	                  U5      $ US-  S-
  R	                  U5      $ Ny      ?      y               @g      ?r   r   arange
issubclasscomplexfloatingastyper0   ndtypebases       r   sample_vectorTestProduct.sample_vector+   X     yy|eR//00H%*225993JN**511r   c                 J    U R                  X-  U5      R                  X45      $ r   )r>   reshape)r0   mr;   r<   s       r   sample_matrixTestProduct.sample_matrix4   s$    !!!%/77??r   c              #   l  #    [         R                  " SS9 n[         R                  " S[        R                  5        Sv   SSS5        U R                  [        W5      S5        U R                  US   R                  [        R                  5        U R                  S[        US   R                  5      5        U R                  US   R                  UR                  R                  5        U R                  US   R                   UR                  R"                  S-   5        g! , (       d  f       N= f7f)z2
Check performance warning(s) for non-contiguity.
T)recordalwaysNr   r   zfaster on contiguous arrays)warningscatch_warningssimplefilterr
   NumbaPerformanceWarningassertGreaterEquallenassertIscategoryassertInstrmessageassertEqualfilename__code__co_filenamelinenoco_firstlineno)r0   pyfuncws      r   check_contiguity_warning$TestProduct.check_contiguity_warning7   s     
 $$D1Q!!(F,J,JK 2 	A*admmV%C%CD3S15FG1(C(CD1foo&D&Dq&HI 21s   D4*D#C"D4#
D1-D4c                     U R                  5          U" U6 nU" U6 nU R                  XTSS9  AAS S S 5        g ! , (       d  f       g = f)NTignore_sign_on_zero)assertNoNRTLeakassertPreciseEqual)r0   rZ   cfuncargsexpectedgots         r   
check_funcTestProduct.check_funcF   sD    !!#t}H,C##Ct#LX	 $##s	   7
Ac                    UR                   S-   UR                  -  S-   nUR                   UR                  -  n[        R                  " U[        R                  S9n[        UR                  S-   5       H=  nXEXS-    R                  UR                  S9nUR                  R                  (       d  M=    O   [        S5      eUR                  R                  (       a   [        R                  " XaR                  SS9nO[        R                  " XaR                  SS9nUS S  US S & UR                  R                  (       d   eU$ )Nr   r<   zCould not obtain aligned arrayCorderF)sizeitemsizer   emptyuint8rangeviewr<   flagsaligned	Exceptionc_contiguousrB   shape)r0   arrro   datasizetmpinews          r   _aligned_copyTestProduct._aligned_copyN   s     1,q088cll*hht288,s||a'(A!,',,399,=Cyy    )
 <==99!!**S))37C**S))37CQAyy    
r   c                 J   [         (       a  U R                  O[        R                  nU R	                  5          U" U5      nU" U5      nU R                  U" USU06U5        U R                  U" USU06U5        U R                  XvSS9  AAS S S 5        g ! , (       d  f       g = f)Nr!   Tr_   )r   r   r   copyra   rO   rb   )r0   rZ   rc   rd   r!   copierre   rf   s           r   check_func_outTestProduct.check_func_outc   s    '1z##rww!!#c{H+CMM&$5H5x@MM%/3/5##Ct#LX $##s   AB
B"c                     U R                  [        5       nU" U6   S S S 5        U(       a  SOSnU R                  U[        WR                  5      5        g ! , (       d  f       N?= f)Nzincompatible output array sizezincompatible array sizes)assertRaises
ValueErrorrQ   rR   	exception)r0   rc   rd   is_outraisesmsgs         r   assert_mismatching_sizes$TestProduct.assert_mismatching_sizesm   sN    z*f4L +39/) 	c3v//01	 +*s   A
A#c                     U R                  [        R                  5       nU" U6   S S S 5        U R                  U< S3[	        WR
                  5      5        g ! , (       d  f       N8= f)Nz' arguments must all have the same dtype)r   r
   TypingErrorrQ   rR   r   )r0   rc   rd   	func_namer   s        r   assert_mismatching_dtypes%TestProduct.assert_mismatching_dtypest   sO    v112f4L 3"%&**+	- 32s   A
A&c           
      F   Sn[        SS9" U5      nU R                   HX  nU R                  X55      nU R                  X55      nU R                  XXg45        U R                  XUS S S2   US S S2   45        MZ     U R                  US-
  [        R
                  5      nU R                  U[        R
                  5      nU R                  XFU45        U R                  U[        R                  5      nU R                  U[        R
                  5      nU R                  XFU4US9  g )N   Tnopythonr   )r   )	r   dtypesr>   rg   r   float64r   float32r   )r0   rZ   r   r;   rc   r<   r   r   s           r   check_dot_vvTestProduct.check_dot_vv{   s    T"6*[[E""1,A""1,AOOFA62OOFAddGQttW+=> ! q1ubjj1q"**-%%eV4q"**-q"**-&&u!f	&Jr   c                 0    U R                  [        S5        g)z
Test vector * vector np.dot()
np.dot()N)r   r   r0   s    r   test_dot_vvTestProduct.test_dot_vv   s    
 	$
+r   c                 0    U R                  [        S5        g)z
Test np.vdot()
z	np.vdot()N)r   r%   r   s    r   	test_vdotTestProduct.test_vdot   s    
 	$,r   c                 .  ^  U 4S jn[        SS9" U5      nUb  [        SS9" U5      nS H  u  pxU" Xx5       H5  u  pT R                  XX45        T R                  XXR                  45        M7     Uc  MK  U" Xx5       HV  u  p[        R                  " XyR
                  S9nT R                  UWX4U5        T R                  X&XR                  4U5        MX     M     Su  pxT R                  XxS-
  [        R                  5      n	T R                  U[        R                  5      n
T R                  XYU
45        T R                  XZU	R                  45        Ub  [        R                  " U[        R                  5      nT R                  WXU45        T R                  XjU	R                  U45        T R                  Xw[        R                  5      n	T R                  U[        R                  5      n
[        R                  " US-
  [        R                  5      nT R                  XiX4SS9  T R                  XjU	R                  U4SS9  T R                  Xx[        R                  5      n	T R                  U[        R                  5      n
T R                  XYU
4U5        Ub{  T R                  Xx[        R                  5      n	T R                  U[        R                  5      n
[        R                  " U[        R                  5      nT R                  WXU4U5        g g )	Nc              3   ^  >#    S HU  nTR                  X[        R                  5      R                  US9nTR	                  U[        R                  5      nX44v   MW     TR
                   H+  nTR                  XU5      nTR	                  X5      nX44v   M-     WS S S2   WS S S2   4v   g 7fNCFrl   r   )rD   r   r   r   r>   r   )rC   r;   rm   r   r   r<   r0   s         r   samples)TestProduct.check_dot_vm.<locals>.samples   s     &&qRZZ8==E=J&&q"**5d
  &&qU3&&q0d
 %
 DbD'1TrT7""s   B*B-Tr   )   r   )r   r   )r   r   rj   r   r   r   )r   rg   Tr   rq   r<   r   rD   r   r>   r   r   r   )r0   pyfunc2pyfunc3r   r   cfunc2cfunc3rC   r;   r   r   r!   s   `           r   check_dot_vmTestProduct.check_dot_vm   s   
	# d#G,$'0FDA  !8!SS: & "#AMDA((1GG4C''!E''!SS3G * qa%4q"**-%%f!f5%%f!##h7((1bjj)C))&1+>))&acc3-@""14A""1bjj1A((1q5"**-C))&a+d)K))&acc3-)MqRZZ0q"**-&&v1vyA""14A""1bjj1A((1bjj)C**6A#;	J	 r   c                 :    U R                  [        [        S5        g)z3
Test vector * matrix and matrix * vector np.dot()
r   N)r   r   r#   r   s    r   test_dot_vmTestProduct.test_dot_vm       
 	$j1r   c                   ^  U 4S jn[        SS9" U5      nUb  [        SS9" U5      nS H  u  pxn	U" XxU	5       H@  u  pT R                  XX45        T R                  XUR                  U
R                  45        MB     Uc  MX  U" XxU	5       H  u  p[        R                  " Xx4U
R
                  S9nT R                  UWX4U5        [        R                  " X4U
R
                  S9nT R                  X&UR                  U
R                  4U5        M     M     Su  pxn	T R                  XyS-
  [        R                  5      n
T R                  X[        R                  5      nT R                  XZU45        Ub  [        R                  " Xx4[        R                  5      nT R                  WXU45        T R                  Xy[        R                  5      n
T R                  X[        R                  5      n[        R                  " XxS-
  4[        R                  5      nT R                  XjX4SS9  T R                  Xy[        R                  5      n
T R                  X[        R                  5      nT R                  XZU4U5        Ub|  T R                  Xy[        R                  5      n
T R                  X[        R                  5      n[        R                  " Xx4[        R                  5      nT R                  WXU4U5        g g )	Nc              3     >#    [        SS5       Hd  u  p4TR                  X[        R                  5      R	                  US9nTR                  X![        R                  5      R	                  US9nXV4v   Mf     TR
                   H,  nTR                  XU5      nTR                  X!U5      nXV4v   M.     WS S S2   WS S S2   4v   g 7fr   )r   rD   r   r   r   r   )	rC   r;   korder_aorder_br   r   r<   r0   s	           r   r   )TestProduct.check_dot_mm.<locals>.samples   s     $+D$$7 &&qRZZ8==G=L&&qRZZ8==G=Ld
 %8 &&qU3&&qU3d
 %
 DbD'1TrT7""s   CCTr   )r   r      )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   rj   r   r   r   )r   rg   r   r   rq   r<   r   rD   r   r   r   r   )r0   r   r   r   r   r   r   rC   r;   r   r   r   r!   s   `            r   check_dot_mmTestProduct.check_dot_mm   su   
	# d#G,$'0FGA!  a(!8!##qss< ) "#A!,DA((A69C''!E((A69C''!##qssSI	 -& aqa%4qRZZ0%%f!f5((A62::.C))&1+>""14A""14A((A1u:rzz2C))&a+d)KqRZZ0qRZZ0&&v1vyA""14A""14A((A62::.C**6A#;	J	 r   c                 :    U R                  [        [        S5        g)z
Test matrix * matrix np.dot()
r   N)r   r   r#   r   s    r   test_dot_mmTestProduct.test_dot_mm  r   r   c                 0    U R                  [        S5        g)z
Test vector @ vector
'@'N)r   r   r   s    r   test_matmul_vvTestProduct.test_matmul_vv   s    
 	.%0r   c                 2    U R                  [        SS5        g)z*
Test vector @ matrix and matrix @ vector
Nr   )r   r   r   s    r   test_matmul_vmTestProduct.test_matmul_vm'      
 	.$6r   c                 2    U R                  [        SS5        g)z
Test matrix @ matrix
Nr   )r   r   r   s    r   test_matmul_mmTestProduct.test_matmul_mm.  r   r   c                    Su  pn[         R                  nU R                  XU5      S S S2   nU R                  X#U5      S S S2   n[         R                  " X4U5      n[	        SS9" [
        5      nU R                  UR                  5         U" XV5        S S S 5        [	        SS9" [        5      nU R                  UR                  5         U" XVU5        S S S 5        U R                  X45      S S S2   nU R                  X45      S S S2   n[	        SS9" [        5      nU R                  UR                  5         U" XV5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   Tr   )r   r   rD   rq   r   r   r\   py_funcr#   r>   r%   )	r0   rC   r   r;   r<   r   r   r!   rc   s	            r   test_contiguity_warnings$TestProduct.test_contiguity_warnings5  s8   a

qU+DbD1qU+DbD1hhvu%T"4(**5==9!K :T"4(**5==9! : q(2.q(2.T"4(**5==9!K :9 :9 :9 :9s$   	E
E9	E-
E
E*-
E; )F)r   )$__name__
__module____qualname____firstlineno____doc__r   r   r   
complex128	complex64r   r.   r>   rD   
contextlibcontextmanagerr\   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes____classcell__r1   s   @r   r(   r(      s!    jj"**bmmR\\BF)
2@ J J*2-K& , , - -6Kp 2 2<K| 2 2 1 1 7 7 7 7  r   r(   c                 @    [         R                  R                  U 5      $ r   r   linalginvr   s    r   invert_matrixr   N      99==r   c                 @    [         R                  R                  U 5      $ r   )r   r   choleskyr   s    r   cholesky_matrixr   R      99a  r   c                 @    [         R                  R                  U 5      $ r   )r   r   eigr   s    r   
eig_matrixr   V  r   r   c                 @    [         R                  R                  U 5      $ r   )r   r   eigvalsr   s    r   eigvals_matrixr   Z      99Qr   c                 @    [         R                  R                  U 5      $ r   )r   r   eighr   s    r   eigh_matrixr   ^      99>>!r   c                 @    [         R                  R                  U 5      $ r   )r   r   eigvalshr   s    r   eigvalsh_matrixr   b  r   r   c                 @    [         R                  R                  X5      $ r   r   r   svd)r   full_matricess     r   
svd_matrixr   f  s    99==**r   c                 @    [         R                  R                  U 5      $ r   r   r   qrr   s    r   	qr_matrixr  j  s    99<<?r   c                 B    [         R                  R                  XU5      $ r   r   r   lstsq)ABrconds      r   lstsq_systemr  n  s    99??1''r   c                 @    [         R                  R                  X5      $ r   r   r   solve)r  r	  s     r   solve_systemr  r  s    99??1  r   c                 @    [         R                  R                  U 5      $ r   r   r   pinv)r  r
  s     r   pinv_matrixr  v  r   r   c                 @    [         R                  R                  U 5      $ r   r   r   slogdetr   s    r   slogdet_matrixr  z  r   r   c                 @    [         R                  R                  U 5      $ r   )r   r   detr   s    r   
det_matrixr  ~  r   r   c                 @    [         R                  R                  X5      $ r   )r   r   norm)r   ords     r   norm_matrixr    s    99>>!!!r   c                 @    [         R                  R                  X5      $ r   )r   r   cond)r   ps     r   cond_matrixr"    s    99>>!r   c                 @    [         R                  R                  X5      $ r   r   r   matrix_rank)r   tols     r   matrix_rank_matrixr'    s    99  ((r   c                 @    [         R                  R                  X5      $ r   )r   r   matrix_power)r   r;   s     r   matrix_power_matrixr*    s    99!!!''r   c                 .    [         R                  " X5      $ r   r   trace)r   offsets     r   trace_matrixr/    s    88Ar   c                 .    [         R                  " U 5      $ r   r,  r   s    r   trace_matrix_no_offsetr1    s    88A;r   c                 ,    [         R                  " XUS9$ r   )r   outerr"   s      r   outer_matrixr4    s    88Ac""r   c                 .    [         R                  " X5      $ r   )r   kronr   s     r   kron_matrixr7    r&   r   c                      ^  \ rS rSrSr\R                  \R                  \R                  \R                  4r
U 4S jrS r SS jr\4S jrS rS rSS	 jrS
 rS rS rSS jrS rS rSrU =r$ )TestLinalgBasei  zM
Provides setUp and common data/error modes for testing np.linalg functions.
c                 T   > [         R                  " 5         [        [        U ]  5         g r   )r+   r,   r-   r9  r.   r/   s    r   r.   TestLinalgBase.setUp  s    


nd)+r   c                     [         R                  " U5      n[        U[         R                  5      (       a  US-  S-   R	                  U5      $ US-  S-   R	                  U5      $ r4   r5   r:   s       r   r>   TestLinalgBase.sample_vector  r@   r   c                    Sn[        U5      S:w  a  [        S5      eUS;  a  [        S5      eU[        R                  [        R                  [        R
                  [        R                  4;  a  [        S5      eUb  Ub  [        S5      eUc  UnUS	:  a  [        S
5      e[        R                  R                  S5        Uu  pxUS:  d  US:  a  [        S5      e[        Xx5      n	Uc  U	n
OCUS::  a  [        S5      e[        U[        5      (       d  [        S5      eUn
XI:  a  [        S5      eUS	:X  d  US	:X  a=  XV:w  a  [        S5      e[        Xx5      nU R                  X5      R                  Xx5      nU$ U R                  Xw-  U5      R                  Xw5      n[        R                  R!                  U5      u  pU R                  X-  U5      SSS2   R                  X5      n[        R                  R!                  U5      u  nn[        R"                  " XeU
5      n[        R$                  " Xx45      n[        R&                  " [        R(                  " Xx5      5      nUUUS   SU
 US	   SU
 4'   [        R*                  " [        R*                  " UU5      UR,                  5      n[        R.                  " XUS9nU$ )a  
Provides a sample matrix with an optionally specified rank or condition
number.

size: (rows, columns), the dimensions of the returned matrix.
dtype: the dtype for the returned matrix.
order: the memory layout for the returned matrix, 'F' or 'C'.
rank: the rank of the matrix, an integer value, defaults to full rank.
condition: the condition number of the matrix (defaults to 1.)

NOTE: Only one of rank or condition may be set.
      ?r   size must be a length 2 tuple.)rn   rk    order must be one of 'F' or 'C'.*dtype must be a numpy floating point type.N/Only one of rank or condition can be specified.r   Condition number must be >=1.r   +Negative dimensions given for matrix shape.Rank must be greater than zero.Rank must an integer."Rank given greater than full rank.8Condition number was specified for a vector (always 1.).r   r<   rm   )rN   r   r   r   r   r   r   randomseedmin
isinstancer   maxr>   rB   r   r  linspacezerosnonzeroeyer   r   array)r0   ro   r<   rm   rank	conditiond_condrC   r;   minmnrvmaxmnQr|   U_VsvSidxs                       r   specific_sample_matrix%TestLinalgBase.specific_sample_matrix  sl     t9>=>>
"?@@RZZr}}MMIJJ	 5NOOIq=<==
		qq5AEJKKA	<Bqy !BCCdH-- !899B| !EFF6Q!V " NP PIE""5088>A*  $$QUE2::1@C99<<$DA$$QUE24R48@@FC99<<$DAqV3B! A**RVVA\*C*,Ac!fSbk3q6#2;&'rvva|QSS)Au5Ar   c                     U R                  U5       nU" U6   S S S 5        U R                  U[        WR                  5      5        g ! , (       d  f       N4= fr   )r   rQ   rR   r   )r0   rc   rd   r   errr   s         r   assert_errorTestLinalgBase.assert_error  s@    s#v4L $c3v//01 $#s   A
Ac                 ^    SnU R                  XU[        R                  R                  5        g )Nz.Last 2 dimensions of the array must be square.rf  r   r   LinAlgErrorr0   rc   rd   r   s       r   assert_non_square TestLinalgBase.assert_non_square  s#    >%sBII,A,ABr   c                 P    SU-  nU R                  X#U[        R                  5        g )Nz9np.linalg.%s() only supported on float and complex arraysrf  r
   r   r0   namerc   rd   r   s        r   assert_wrong_dtype!TestLinalgBase.assert_wrong_dtype  s$    IDP%sF,>,>?r   c                 p    U(       a  SOSnU< SU< S3nU R                  X#U[        R                  5        g )N	np.linalgr   .z() only supported on 2-D arraysro  r0   rq  rc   rd   	la_prefixprefixr   s          r   assert_wrong_dimensions&TestLinalgBase.assert_wrong_dimensions  s-     )t8>E%sF,>,>?r   c                 ^    SnU R                  XU[        R                  R                  5        g )Nz$Array must not contain infs or NaNs.ri  rk  s       r   assert_no_nan_or_inf#TestLinalgBase.assert_no_nan_or_inf  s#    4%sBII,A,ABr   c                    [        U[        5      (       a  U H  nU R                  X25        M     g[        U[        5      (       d  UR                  R
                  nUR                  R                  nSnU R                  XE-  U5        SnUS:X  a  U R                  XF5        gUS:X  a  U R                  XV5        g[        S5      eg)a  
This checks that in a computed result from numba (array, possibly tuple
of arrays) all the arrays are contiguous in memory and that they are
all at least one of "C_CONTIGUOUS" or "F_CONTIGUOUS". The computed
result of the contiguousness is then compared against a hardcoded
expected result.

got: is the computed results from numba
expected_contig: is "C" or "F" and is the expected type of
                contiguousness across all input values
                (and therefore tests).
z6Results are not at least one of all C or F contiguous.z0Computed contiguousness does not match expected.rk   rn   zUnknown contigN)	rN  tupleassert_contig_sanityr   ru   rx   f_contiguous
assertTruer   )r0   rf   expected_contigr   c_contigf_contigr   s          r   r  #TestLinalgBase.assert_contig_sanity"  s     c5!!))!=  c6**99119911 O 3S9H"c)OOH2$+OOH2$%566! +r   c                 Z    SnU R                  XU[        R                  R                  S9  g )Nz(Matrix is singular to machine precision.re  ri  rk  s       r   assert_raise_on_singular'TestLinalgBase.assert_raise_on_singularG  s&    8%s		0E0EFr   c                 n   U R                  UR                  S   UR                  S   5        [        R                  " UR                  S   UR                  S9nS[        R
                  " UR                  5      R                  -  nUc  SU-  nUc  SU-  n[        R                  R                  XX#5        g)z5
Checks if a matrix is equal to the identity matrix.
r   rj      N
   d   )	rT   ry   r   rS  r<   finfo
resolutiontestingassert_allclose)r0   rf   rtolatolrS  r  s         r   assert_is_identity_matrix(TestLinalgBase.assert_is_identity_matrixK  s    
 	2		"6ffSYYr]#))4#)),777
<
?D<#D


""3T8r   c                 6    SnU R                  XU[        5        g)z%
For use in norm() and cond() tests.
z Invalid norm order for matrices.N)rf  r   rk  s       r   assert_invalid_norm_kind'TestLinalgBase.assert_invalid_norm_kind[  s     1%sJ7r   c                 ^    SnU R                  XU[        R                  R                  5        g )NzArrays cannot be emptyri  rk  s       r   assert_raise_on_empty$TestLinalgBase.assert_raise_on_emptyb  s#    &%sBII,A,ABr   r   )NNT)r   r   r   r   r   r   r   r   r   r   r   r.   r>   rb  r   rf  rl  rr  rz  r}  r  r  r  r  r  r   r   r   s   @r   r9  r9    s    
 jj"**bmmR\\BF,
2 <@Rh 2< 2
C@@
C#7JG9 8C Cr   r9  c                       \ rS rSrSrS rSrg)TestTestLinalgBaseig  zz
The sample matrix code TestLinalgBase.specific_sample_matrix()
is a bit involved, this class tests it works as intended.
c                 L  ^ ^ [        S5      m/ SQn[        UTR                  S5       GH  u  p#nUu  pV[        XV5      nTR	                  X#U5      nT R                  UR                  U5        T R                  [        R                  R                  U5      U5        US:  a`  US-
  n	TR	                  X#XIS9nT R                  UR                  U5        T R                  [        R                  R                  U5      U	5        S[        R                  " U5      R                  -  n
TR	                  X#U5      nT R                  UR                  U5        [        R                  R                  [        R                  R                  U5      SU
U
S9  US:  d  GMp  S	nTR	                  X#XKS
9nT R                  UR                  U5        [        R                  R                  [        R                  R                  U5      S	U
U
S9  GM     [        4UU 4S jjnT R!                  ["        5       nSnU" S[        R$                  S4U[        S9  S S S 5        SnU" S[        R$                  S4U[        S9  SnU" S[        R$                  S4U[        S9  SnU" S[        R&                  S4U[        S9  SnU" S[        R$                  SSS4U[        S9  SnU" S[        R$                  SS S4U[        S9  SnU" S[        R$                  S4U[        S9  SnU" S[        R$                  SS4U[        S9  SnU" S[        R$                  SS4U[        S9  SnU" S[        R$                  SS S4U[        S9  S nU" S[        R$                  SS!4U[        S9  g ! , (       d  f       GNO= f)"Nrb     r      r  r  r  r   r   r   r  FCr   rU  r  r?  r  r        $@rV  c                    > TR                  U5       nTR                  " U 6   S S S 5        TR                  U[        WR                  5      5        g ! , (       d  f       N4= fr   )r   rb  rQ   rR   r   )rd   r   re  r   instr0   s       r   check_errorCTestTestLinalgBase.test_specific_sample_matrix.<locals>.check_error  sH    ""3'6++T2 (MM#s6#3#345 ('s   A
Ablankr   rn   r  r@  r   rA  zrB  rC  rD  r   rE  )r   rF  rH  r   rI  )r   r   r  rG  g      ?)r9  r   r   rM  rb  rT   ry   r   r   r%  r  r  r  r  r   r   r   AssertionErrorr   int32)r0   sizesro   r<   rm   rC   r;   rX  r  rU  r  rV  r  r   r   r  s   `              @r   test_specific_sample_matrix.TestTestLinalgBase.test_specific_sample_matrixm  sM    67: #*%d"CDDAIE ++D?AQWWd+RYY2215u= qyqy//U/N  $/  !6!6q!94@RXXe_777J ++D?AQWWd+JJ&&ryy~~a'8'),6,6 ' 8 qy	// 0 =  $/

**299>>!+<+.0:0: + <C #DN (2 	6 	6 ~.&CS13JG / /T2::s+SjA 1VRZZ-s
C ;VRXXs+SjA @VRZZa3SjI .VRZZdB7*M <Wbjj#.D 0VRZZb13JG 3VRZZa0#:F IVRZZdB7*M &VRZZc2CZHY /.s   , N
N#r   N)r   r   r   r   r   r  r   r   r   r   r  r  g  s    
aIr   r  c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)TestLinalgInvi  z
Tests for np.linalg.inv.
c           	      B  ^ ^ Sn[        SS9" [        5      mUU 4S jn[        T R                  S5       H   u  p4T R	                  X4X45      nU" U5        M"     U" [
        R                  " S5      5        T R                  T[
        R                  " S5      45        T R                  ST[
        R                  " S	[
        R                  S
945        T R                  ST[
        R                  " S5      45        T R                  T[
        R                  " S	5      45        g)z
Test np.linalg.inv
r  Tr   c                 v  > [        U 5      nT" U 5      nTR                  US5        Sn [        R                  R	                  X2SS9  U(       a'  [        R                  " X05      nTR                  U5        TR                  5          T" U 5        S S S 5        g ! [
         a    Sn N^f = f! , (       d  f       g = f)Nrn   Fr  nulpT)	r   r  r   r  assert_array_almost_equal_nulpr  r   r  ra   )r   kwargsre   rf   use_reconstructionrecrc   r0   s         r   check,TestLinalgInv.test_linalg_inv.<locals>.check  s    $Q'H(C%%c3/!&*

99#?A : C "ffSn..s3 %%'a (' " *%)"* ('s   B 	B*B'&B'*
B8r   r   r   r   r   r   r   rj   N)r   r   r   r   rb  r   rq   rl  onesrr  r  rz  r  rQ  )r0   r;   r  r<   rm   r   rc   s   `     @r   test_linalg_invTestLinalgInv.test_linalg_inv  s    
 T"=1	. $DKK6LE++QFEAA!H 7
 	bhhv 	urwwv&89 	u!#rxx!@ B	D 	$$UEBGGBK>B 	%%ebhhv.>-@Ar   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/SS9n[         R                  " U5      n[        SS9S	 5       nUR	                  US
5      n[         R
                  R                  X5        U" US
5      n[         R
                  R                  X5        [         R
                  R                  XE5        g )Nr?  r   r   r  r   r   r   	   r  r   r   r   r  r      rn   rl   Tr   c                 d    U(       a  U SS2S S 24   n [         R                  R                  U 5      $ Nr   r   r   Xtests     r   ainv2TestLinalgInv.test_no_input_mutation.<locals>.ainv  )    ac1fI99==##r   Fr   rT  r   r   r   r  r  )r0   r  X_origr  re   rf   s         r   test_no_input_mutation$TestLinalgInv.test_no_input_mutation	  s    HHn$$$& .12
 	d		$ 
	$ <<5)


""1-1en


""1-


""81r   r   N)	r   r   r   r   r   r   r  r  r   r   r   r   r  r    s2     0B 0Bd 2 2r   r  c                   4    \ rS rSrSrS rS r\S 5       rSr	g)TestLinalgCholeskyi"  z
Tests for np.linalg.cholesky.
c                    [         R                  R                  S5        [         R                  R                  X5      n[         R                  R                  U5      u  pV[         R                  " SUS-   5      n[         R                  " [         R                  " UR                  [         R                  " U5      5      U5      n[         R                  " XUS9nU$ )Nr   r   rJ  )r   rK  rL  randr   r  r6   r   r   diagrT  )	r0   rC   r<   rm   r  qr]  Lr[  s	            r   rD    TestLinalgCholesky.sample_matrix'  s    
		qIINN1  yy||AIIaQFF266!##rwwqz*A.HHQ51r   c                 ^    SnU R                  XU[        R                  R                  5        g )Nz Matrix is not positive definite.ri  rk  s       r   assert_not_pd TestLinalgCholesky.assert_not_pd3  s#    0%sBII,A,ABr   c           	        ^ ^ Sn[        SS9" [        5      mUU 4S jn[        T R                  S5       H  u  p4T R	                  XU5      nU" U5        M!     U" [
        R                  " S5      5        SnT R                  T[
        R                  " S[
        R                  S	945        T R                  UT[
        R                  " S
[
        R                  S	945        T R                  UT[
        R                  " S[
        R                  S	945        T R                  T[
        R                  " S[
        R                  S	9R                  SS5      45        g)z
Test np.linalg.cholesky
r  Tr   c                 ,  > [        U 5      nT" U 5      nSnTR                  US5         [        R                  R	                  X!SS9  U(       a  [        R                  " U[        R                  " UR                  5      5      nS[        R                  " U R                  5      R                  -  n[        R                  R                  U UUUS9  TR                  5          T" U 5        S S S 5        g ! [
         a    Sn Nf = f! , (       d  f       g = f)NFrk   r  r  Tr  r  )r   r  r   r  r  r  r   conjr   r  r<   r  r  ra   )r   re   rf   r  r  r  rc   r0   s         r   r  6TestLinalgCholesky.test_linalg_cholesky.<locals>.check?  s    &q)H(C!&%%c3/*

99#?A : C "ffS"''#%%.1!''!2!=!==


**##	 +  %%'a ('! " *%)"*  ('s   C3 !	D3DD
Dr  r  r   r   rj   r  r   r   N)r   r   r   r   rD   r   rq   rl  r  r   rr  r  rz  r  rB   )r0   r;   r  r<   rm   r   rnrc   s   `      @r   test_linalg_cholesky'TestLinalgCholesky.test_linalg_cholesky7  s   
 T"?3	< $DKK6LE""1U3A!H 7
 	bhhvurwwvRZZ'H&JK 	E!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	5GGARZZ8@@AFH	Jr   r   N)
r   r   r   r   r   rD   r  r   r  r   r   r   r   r  r  "  s(    
C :J :Jr   r  c                       \ rS rSrSrS rS rS r SS jr\	S 5       r
\	S	 5       r\	S
 5       r\	S 5       r\	S 5       rSrg)TestLinalgEigenSystemsiu  z"
Tests for np.linalg.eig/eigvals.
c                    U R                  X5      n[        R                  " U5      n[        R                  " [        R                  " UR
                  S   UR
                  S   S5      5      nUSS  XV'   [        R                  " [        R                  " UR
                  S   UR
                  S   S5      5      nUS S XV'   [        R                  " XRUS9nU$ )Nr   r   r   rJ  )r>   r   r  rR  rS  ry   rT  )r0   rC   r<   rm   vr[  ra  s          r   rD   $TestLinalgEigenSystems.sample_matrixz  s    q(GGAJjj
AGGAJ:;12jj
AGGAJ;<3BHHQ51r   c                 2    US-   nU R                  X#U5        g )Nz+() argument must not cause a domain change.)rf  rp  s        r   assert_no_domain_change.TestLinalgEigenSystems.assert_no_domain_change  s    BB%s+r   c                     ^ ^^^ UUUU 4S jnU$ )Nc                    > TR                   " U 6 nT" U 6 nU S   nTR                  [        U5      [        U5      5        Sn[        U[        5      (       a  SnTR                  [        U5      T5        OTR                  UR
                  T5        TR                  US5        Sn[        [        U5      5       H'  n [        R                  R                  X&   X   SS9  M)     S[        R                  " UR                  5      R                  -  nU(       Ga  U(       Ga  Uu  pTS   S	:X  a  [        R                  " [        R                   " UR"                  S   UR"                  S
   S5      5      n
[        R                  " [        R                   " UR"                  S   UR"                  S
   S
5      5      nT" U 6   [        R$                  " X:   5      X;'   [        R&                  " [        R(                  " U5      5      U[        R*                  " UR"                  S   5      '   [        R,                  " X95      n[        R,                  " U	[        R(                  " U5      5      n[        R                  R/                  UR&                  UR&                  UUS9  [        R0                  " U	5      (       a4  [        R                  R/                  UR2                  UR2                  UUS9  OH[        R                  R/                  [        R4                  " U5      [        R4                  " U5      UUS9  TR7                  5          T" U 6   S S S 5        g ! [         a    Sn GM  f = f! , (       d  f       g = f)Nr   FTrn   r  r  r  r   hr   r  )r   rT   rN   rN  r  ndimr  rs   r   r  r  r  r  r<   r  rR  rS  ry   r  realr  diag_indicesr   r  iscomplexobjimagsortra   )rd   re   rf   r   res_is_tupler  r   r  r[   r  idxlidxulhsrhsrc   expected_res_lenrq  r0   s                 r   r  3TestLinalgEigenSystems._check_worker.<locals>.check  s   }}d+H,CQAS]CH5 L#u%%#  S+;<  +;< %%c3/!&3x=).JJ==" > 6 *$ RXXagg.999J!DA Bx3!zz"&&QWWQZ*LM!zz"&&QWWQZ*KLt #%''!'"2 :<9L"//!''!*56&&,C&&BGGAJ/CJJ..''	 /  q))

22HHHH!+!+	 3  JJ..)''	 /  %%'t ('G & .)-&.F ('s   <#MM&M#"M#&
M4r   )r0   rc   rq  r
  check_for_domain_changer  s   ````  r   _check_worker$TestLinalgEigenSystems._check_worker  s    [	 [	x r   Nc           
      h   Sn[        SS9" U5      nU R                  XaUU5      n[        U R                  S5       H  u  pU R	                  XXU	5      n
U" U
5        M!     [
        R                  [
        R                  4 H  nU" [
        R                  " SUS95        U R                  U[
        R                  " SUS945        U R                  X[
        R                  " S[
        R                  S945        U R                  X[
        R                  " SUS945        U R                  U[
        R                  " S	S
/[
        R                   [
        R"                  //US945        M     U(       a  [
        R                  " SS/SS//5      nU" UR%                  [
        R&                  5      5        U" U5      u  pU R)                  [
        R*                  " UR,                  5      5        [
        R                  [
        R.                  4 H%  nU R1                  XUR%                  U5      45        M'     gg)z
Test np.linalg.eig
r  Tr   r  r  rj   r   r  r?         @r   r  r   N)r   r  r   r   rD   r   r   r   rq   rl  r  rr  r  rz  r}  rT  infnanr9   r   r  anyr  r   r  )r0   rq  funcr
  r  r;   rc   r  r<   rm   r   tyr  lr]  s                  r   checker_for_linalg_eig-TestLinalgEigenSystems.checker_for_linalg_eig  s   
 T"4(""50@#:<
 $DKK6LE""1U3A!H 7
 ::r||,B "((6,- ""52776+D*FG ##D%'WWV288%D$FH ((rwwr7L6NO %%e')xx"bbffbff=M0N68(: '<=! -( # 1b'Aq6*+A!((2==)*7DAOOBFF166N+ zz2::.,,T188B</J /- #r   c                 4    U R                  S[        SS5        g )Nr   r   T)r  r   r   s    r   test_linalg_eig&TestLinalgEigenSystems.test_linalg_eig'  s    ##E:q$?r   c                 4    U R                  S[        SS5        g )Nr   r   T)r  r   r   s    r   test_linalg_eigvals*TestLinalgEigenSystems.test_linalg_eigvals+  s    ##I~q$Gr   c                 4    U R                  S[        SS5        g )Nr   r   F)r  r   r   s    r   test_linalg_eigh'TestLinalgEigenSystems.test_linalg_eigh/  s    ##FKEBr   c                 4    U R                  S[        SS5        g )Nr   r   F)r  r   r   s    r   test_linalg_eigvalsh+TestLinalgEigenSystems.test_linalg_eigvalsh3  s    ##JEJr   c           
      z  ^ S GH!  nUu  p#n[        [        R                  U5      m[        SS9U4S j5       nU R	                  XRX45      n[        R
                  [        R                  4 H  nU R                  TUS9   [        R                  " / SQ/ SQ/ SQ/ S	Q/S
US9n[        R                  " U5      n	UR                  US5      n
[        R                  R                  X5        U" US5      n[        R                  R                  X5        U" US5        S S S 5        M     GM$     g ! , (       d  f       M  = f)N))r   r   T)r   r   T)r   r   F)r   r   FTr   c                 8   > U(       a  U SS2S S 24   n T" U 5      $ r  r   )r  r  meths     r   r  ;TestLinalgEigenSystems.test_no_input_mutation.<locals>.funcD  s     !A#q&	AAwr   )r'  r<   )r  r   r   r   )r   r  r   r   )r   r   r  r   )r   r   r   r  rn   )rm   r<   F)getattrr   r   r   r  r   r   subTestrT  r   r   r  r  )r0   crC   noutdomain_changer  r  r<   r  r  re   rf   r'  s               @r   r  -TestLinalgEigenSystems.test_no_input_mutation7  s   *A
 &'"A]299a(D$   &&tDE**bmm4\\t5\9 . , , ,"" *-E	;A  WWQZF#||Au5HJJ..q9q%.CJJ..q9!UO# :9 5%*& :9s   >BD++
D:r   r   )r   r   r   r   r   rD   r  r  r  r   r  r  r   r#  r  r   r   r   r   r  r  u  s    	,^B IM<K| @ @ H H C C K K '$ '$r   r  c                   >    \ rS rSrSrS r\S 5       r\S 5       rSr	g)TestLinalgSvdib  z
Tests for np.linalg.svd.
c                    Uu  pEn[        [        U5      5       H-  nU R                  X'   R                  X7   R                  5        M/     [        R
                  " UR                  S   UR                  S   45      n[        R                  " X5        [        R                  " [        R                  " XH5      U5      n	[        R                  " UR                  5      R                  n
[        R                  R                  UU	SU
-  SU
-  S9  g )Nr   r   r  r  r  )rs   rN   rT   ry   r   rQ  fill_diagonalr   r  r<   r  r  r  )r0   r   rf   re   ur_  vtr   sr  r  s              r   check_reconstruction"TestLinalgSvd.check_reconstructionm  s    	r s8}%ASV\\8;+<+<= & HHaggaj"((1+./
ffRVVA\2&XXagg&11



""jz!	 	# 	
r   c           	        ^ ^ [        SS9" [        5      mUU 4S jn/ SQnSn[        UT R                  US5       H  u  pEpgT R	                  XEU5      nU" XS9  M      Sn	T R                  U	T[        R                  " S	[        R                  S
945        T R                  U	T[        R                  " S[        R                  S
945        T R                  T[        R                  " SS/[        R                  [        R                  //[        R                  S
945        S H-  n
[        R                  " U
5      S4nT R!                  TU5        M/     g)z
Test np.linalg.svd
Tr   c                   > [        U 40 UD6nT" U 40 UD6nTR                  [        U5      [        U5      5        TR                  [        U5      S5        TR                  US5        Sn[	        [        U5      5       H'  n [
        R                  R                  X5   X%   SS9  M)     U(       a  TR                  XU5        TR                  5          T" U 40 UD6  S S S 5        g ! [         a    Sn Mv  f = f! , (       d  f       g = f)Nr   rn   Fr  r  T)r   rT   rN   r  rs   r   r  r  r  r6  ra   )r   r  re   rf   r  r   rc   r0   s         r   r  ,TestLinalgSvd.test_linalg_svd.<locals>.check  s    !!.v.H$V$CS]CH5SXq)%%c3/!&3x=).JJ==" > 6 * "))!(; %%'a"6" (' & .)-&. ('s   #C%
C8%C54C58
D)r  )r  r  )r  r  r  r  )TFr  )r   r   r  rj   r  r?  r  r   r   r   r   r  N)r   r   r   r   rb  rr  r   r  r  rz  r   r}  rT  r  r  rq   r  )r0   r  r  r   ro   r<   fmatrm   r   r  szrd   rc   s   `           @r   test_linalg_svdTestLinalgSvd.test_linalg_svd  s3   
 T":.	#< 9 & t{{M4@ %D ++D?A!( A
  	E!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	!!%#%88b"Z"&&"&&9I,J24**$> #@	A +BHHRL$'D&&ud3 +r   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/SS9n[         R                  " U5      n[        SS9S	 5       nUR	                  US
5      n[         R
                  R                  X5        U" US
5      n[         R
                  R                  X5         [        XE5       H$  u  pg[         R
                  R                  Xg5        M&     g ! [         a    U R                  XU5         g f = f)Nr  r  r  r  rn   rl   Tr   c                 d    U(       a  U SS2S S 24   n [         R                  R                  U 5      $ r  r   r  s     r   r  2TestLinalgSvd.test_no_input_mutation.<locals>.func  r  r   F)
r   rT  r   r   r   r  r  zipr  r6  r0   r  r  r  re   rf   e_ag_as           r   r  $TestLinalgSvd.test_no_input_mutation  s    HHn$$$& .12
 	d		$ 
	$ <<5)


""1-1en


""1-	8.

**34 / 	8%%ah7	8s   !3C C43C4r   N)
r   r   r   r   r   r6  r   r@  r  r   r   r   r   r0  r0  b  s7    
( A4 A4F 8 8r   r0  c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)TestLinalgQri  z
Tests for np.linalg.qr.
c           	        ^ ^	 [        SS9" [        5      m	U	U 4S jn/ SQn[        UT R                  S5       H   u  p4nT R	                  X4U5      nU" U5        M"     SnT R                  UT	[        R                  " S[        R                  S945        T R                  UT	[        R                  " S	[        R                  S945        T R                  T	[        R                  " S
S/[        R                  [        R                  //[        R                  S945        S H*  nT R                  T	[        R                   " U5      45        M,     g)z
Test np.linalg.qr
Tr   c                   > [        U 40 UD6nT
" U 40 UD6nTR                  [        U5      [        U5      5        TR                  [        U5      S5        TR                  US5        Sn[	        [        U5      5       H'  n [
        R                  R                  X5   X%   SS9  M)     U(       a  Uu  pg[	        [        U5      5       H-  nTR                  X5   R                  X%   R                  5        M/     [
        R                  " Xg5      n[
        R                  " U R                  5      R                  n	[
        R                  R                  U USU	-  SU	-  S9  TR                  [
        R                  " [
        R                   " UR"                  5      U5      5        TR%                  5          T
" U 40 UD6  S S S 5        g ! [         a    Sn GMX  f = f! , (       d  f       g = f)	Nr   rn   Fr  r  Tr  r  )r  rT   rN   r  rs   r   r  r  r  ry   r   r  r<   r  r  r  	conjugater   ra   )r   r  re   rf   r  r   r  rr  r  rc   r0   s             r   r  *TestLinalgQr.test_linalg_qr.<locals>.check  s    -f-H$V$C S]CH5SXq)%%c3/!&3x=).JJ==" > 6 *  " s8}-A$$SV\\8;3D3DE . ffQlXXagg.99


**jz)	 +  ..rvvbll1336G/KL %%'a"6" ('C & .)-&.B ('s   #G3
GGG
G(r  r  r  r  rj   r  r?  r  r;  N)r   r  r   r   rb  rr  r   r  r  rz  r   r}  rT  r  r  r  rq   )
r0   r  r  ro   r<   rm   r   r  r?  rc   s
   `        @r   test_linalg_qrTestLinalgQr.test_linalg_qr  s   
 T"9-3	#n ; t{{D1 D++D?A!H 2  	E!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	!!%#%88b"Z"&&"&&9I,J24**$> #@	A
 +B&&urxx|o> +r   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/SS9n[         R                  " U5      n[        SS9S	 5       nUR	                  US
5      n[         R
                  R                  X5        U" US
5      n[         R
                  R                  X5        [        XE5       H$  u  pg[         R
                  R                  Xg5        M&     g )Nr  r  r  r  rn   rl   Tr   c                 d    U(       a  U SS2S S 24   n [         R                  R                  U 5      $ r  r  r  s     r   r  1TestLinalgQr.test_no_input_mutation.<locals>.funcI  s(    ac1fI99<<?"r   F)r   rT  r   r   r   r  r  rE  rF  s           r   r  #TestLinalgQr.test_no_input_mutation@  s    HHn$$$& .12
 	d		# 
	# <<5)


""1-1en


""1-H*HCJJ&&s0 +r   r   N)	r   r   r   r   r   r   rQ  r  r   r   r   r   rK  rK    s2     V? V?p 1 1r   rK  c                   .    \ rS rSrSrSS jrS rS rSrg)	TestLinalgSystemsiZ  zi
Base class for testing "system" solvers from np.linalg.
Namely np.linalg.solve() and np.linalg.lstsq().
c                 p    U(       a  SOSnU< SU< S3nU R                  X#U[        R                  5        g )Nru  r   rv  z%() only supported on 1 and 2-D arraysro  rw  s          r   assert_wrong_dimensions_1D,TestLinalgSystems.assert_wrong_dimensions_1Da  s-     )t>DdK%sF,>,>?r   c                 ^    SnU R                  XU[        R                  R                  5        g )Nz<Incompatible array sizes, system is not dimensionally valid.ri  rk  s       r   assert_dimensionally_invalid.TestLinalgSystems.assert_dimensionally_invalidg  s#    L%sBII,A,ABr   c                 P    SU-  nU R                  X#U[        R                  5        g )NzAnp.linalg.%s() only supports inputs that have homogeneous dtypes.ro  rp  s        r   assert_homogeneous_dtypes+TestLinalgSystems.assert_homogeneous_dtypesl  s%    QTXX%sF,>,>?r   r   Nr  )	r   r   r   r   r   rZ  r]  r`  r   r   r   r   rX  rX  Z  s    @C
@r   rX  c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)TestLinalgLstsqiq  z
Tests for np.linalg.lstsq.
c                 F  ^ ^^^ [        SS9" [        5      mUU 4S jm/ SQn[        T R                  5      nSS/n[        U5      mSnUUU 4S jnU H  n[	        U5      n[	        T5      nT R                  XgU5      n	U" X5        Uu  p[        X5      nU
S	:w  d  MJ  US	:w  d  MR  US	-
  nT R                  XgXS
9n	U" X5        T R                  XgXS9n	SU-  nX-  nU" XUS9  M     SS/SS/SS/SS//nU HD  u  n	n[        R                  " U	5      [        R                  " U5      4nT R                  TU5        MF     [        R                  " SS/SS//[        R                  S9nTUU44  Sn[        R                  " S	S/SS//[        R                  S9nT R                  UTUU45        T R                  UTUU45        [        R                  " S	S/SS//[        R                  S9nT R                  UTUU45        T R                  UTUU45        [        R                  " S	S/[        R                  S9nT R!                  UTUU45        [        R                  " SS/[        R"                  [        R$                  //[        R                  S9nT R'                  TUU45        T R'                  TUU45        [        R                  " SS/[        R                  S9nTUU44  [        R                  " S	S/SS//SS/SS///[        R                  S9nT R)                  UTUU45        [        R                  " S/[        R                  S9n[        R                  " S/S/S//[        R                  S9nT R+                  TUU45        T R+                  TUU45        g) z
Test np.linalg.lstsq
Tr   c           
        > [        X40 UD6nT" X40 UD6nTR                  [        U5      [        U5      5        TR                  [        U5      S5        TR                  US5        Sn TR                  US   US   5        [	        [        U5      5       H'  n [
        R                  R                  XF   X6   SS9  M)     U(       a  Uu  pxp/ SQn TR                  XS   5        U HP  n[        X6   [
        R                  5      (       d  M&  TR                  XF   R                  X6   R                  5        MR     [
        R                  " U R                  5      R                   n [
        R"                  " X5      n[
        R                  R%                  UUSU-  SU-  S	9  TR/                  5          T" X40 UD6  S S S 5        g ! [         a    Sn GM@  f = f! [         a    Sn GN(f = f! [         a%    TR                  [        XS   -
  5      S:  5         Nf = f! [         Ga    U GH  n [
        R                  R%                  X6   XF   S
U-  S
U-  S	9  OG! [         a:    [
        R&                  R)                  U 5      nTR+                  SU-  SU-  5         Of = f[
        R&                  R-                  U[
        R"                  " XS   5      -
  5      n[
        R&                  R-                  U[
        R"                  " X5      -
  5      n[
        R                  R%                  UUSS9  GM      GNf = f! , (       d  f       g = f)Nr   rk   Fr   r  r  T)r   r   r   r  r  r?  r   r  r  )r  rT   rN   r  rs   r   r  r  r  rN  ndarrayry   r  absr  r<   r  r   r  r   r   assertGreaterr  ra   )r  r	  r  re   rf   r  r   xresrU  r5  out_array_idxr  r  r+  res_expectedres_gotrc   r0   s                    r   r  0TestLinalgLstsq.test_linalg_lstsq.<locals>.check  s    #A3F3H''C S]CH5SXq)%%c3/!&
*  Q!5s8}-A2

AAFHKb B : . ""% !*	A$$TA;7*%hk2::>> ,,SV\\8;;L;LM +  XXagg.99
$= &&,CJJ..*_*_	 / F %%'a%f% ('A * 2-1*2 " *%)"*  & AOOC{(:$;a$?@A  & = +
JJJ66 ( #%(:%5%(:%5	 7   . J "		q 1A ..rAvZIJ (*yy~~q1+ 66(8"$))..RVVA\1A"B 

22(' 3 =+ +	=: ('s   +/G #G>G 8G. .G. (<H  4
L>GG GG G+*G+.,HH L;2*IL;AJ!L; J!!BL;:L;>
Mr  rn   rk   r  c                    > SnU Hb  n[        T	5      nT
R                  U R                  S   U4X5      nT" X40 UD6  [        T	5      nUS S 2S4   R                  US9nT" X40 UD6  Md     g )Nr      r   rl   )nextrb  ry   r   )r  dtr  b_sizesb_sizeb_orderr	  r|   r  cycle_orderr0   s           r   inner_test_loop_fn=TestLinalgLstsq.test_linalg_lstsq.<locals>.inner_test_loop_fn  s~    G! {+//WWQZ("7a%f% {+1glll1a'' "r   r   r  r  r?  r
  r<  r  r=  r   r   r   r        @      @rj   r  r   r   r   r     r  r  N)r   r  r   r   rs  rb  rM  r   rq   r  rT  r   r  rr  r   r`  rz  r  r  r}  rZ  r]  )r0   r  cycle_dtordersspecific_condry  a_sizert  a_orderr  rC   r;   rX  rO  r
  approx_half_rank_rcondemptiesr   rd   okr  badoneDbad1Dbad2Drc   r  rx  s   `                        @@@r   test_linalg_lstsq!TestLinalgLstsq.test_linalg_lstsq  s   
 T"<0X	&x ; %sFm 	($ FhB;'G ++F@A q%DAIE Av!q& AI// 0 1 #1) // 0 B ]*).&"1)?AE N 
				
 DAqHHQK!-D&&ud3 
 XXBx"b*"**= 	Bx  hhAA'rxx8EB95EC95 hhAA'rzz:&&r52s)<&&r53)< hh1vRZZ0$$Rb	: hhR
RVVRVV$45RZZH!!%"c3!!%#r3 xxR

3Dzhh!Q!Q(Aq6Aq6*:;2::N''EB9= "RZZ02$rd+2::>))%"e=))%"e=r   c           	         [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/SS9n[         R                  " U5      n[         R                  " / S	Q5      n[        S
S9S 5       nU" XS5        [         R                  R                  X5        g )N)r?  g)\(@gGz@)r?  g@r  )r?  g      @gffffff@)r?  gffffff?g(\@)r?  gzG@g)\(
@)r?  g(\?g@rn   rl   )r?  r  r~  r        @g      @Tr   c                 d    U(       a  U SS2S S 24   n [         R                  R                  X5      $ r  r  r  yr  s      r   f2*TestLinalgLstsq.test_issue3368.<locals>.f2n  )    ac1fI99??1((r   F)r   rT  r   r   r  r  )r0   r  r  r  r  s        r   test_issue3368TestLinalgLstsq.test_issue3368b  s~    HH&&&&&&)
 145 HH-.	d		) 
	) 	1


""1-r   r   N)	r   r   r   r   r   r   r  r  r   r   r   r   rc  rc  q  s2     `> `>D . .r   rc  c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)TestLinalgSolveiy  z
Tests for np.linalg.solve.
c                   ^ ^ [        SS9" [        5      mUU 4S jn/ SQn[        UT R                  S5       Hv  u  p4nT R	                  X4U5      nSn[        US5       HL  u  pT R	                  UR
                  S   U4XI5      n
U" Xj5        U
SS2S4   R                  U	S	9nU" Xk5        MN     Mx     T" [        R                  " S
5      [        R                  " S5      5        [        R                  " SS/SS//[        R                  S9nT" X5        Sn[        R                  " SS/SS//[        R                  S9nT R                  UTX45        T R                  UTX45        [        R                  " SS/SS//[        R                  S9nT R                  UTX45        T R                  UTX45        [        R                  " SS/[        R                  S9nT R                  UTX45        [        R                  " SS/[        R                   [        R"                  //[        R                  S9nT R%                  TX45        T R%                  TX45        [        R                  " SS/[        R                  S9nT" X5        [        R                  " SS/SS//SS/SS///[        R                  S9nT R'                  UTX45        [        R                  " S/[        R                  S9n[        R                  " S/S/S//[        R                  S9nT R)                  TUU45        T R)                  TUU45        T R	                  S[        R                  SSS9nT R+                  TUU45        g)z
Test np.linalg.solve
Tr   c                 F  > [        X40 UD6nT" X40 UD6nT	R                  US5        Sn [        R                  R	                  XCSS9  U(       a  T	R                  UR                  UR                  5        [        R                  " X5      n[        R                  " U R                  5      R                  n[        R                  R                  UUSU-  SU-  S9  T	R                  5          T" X40 UD6  S S S 5        g ! [
         a    Sn Nf = f! , (       d  f       g = f)Nrn   Fr  r  Tr  r  )r  r  r   r  r  r  rT   ry   r   r  r<   r  r  ra   )
r   r   r  re   rf   r  r  r  rc   r0   s
           r   r  0TestLinalgSolve.test_linalg_solve.<locals>.check  s   #A3F3H''C %%c3/!&*

99 : , "  HNN; ffQnXXagg.99


**jz)	 +  %%'a%f% ('7 " *%)"*6 ('s   D  -
D DD
D )r|  r  r  r  r  rq  r   Nrl   r  r}  r?          rj   r  r   r   r   r   r  r  r  r  r  r~  r  rk   r  )r   r  r   r   rb  ry   r   r   rq   rT  r   r  rr  r   r`  rz  r  r  r}  rZ  r]  r  )r0   r  r  ro   r<   rm   r  ru  rv  rw  r	  r|   r  r  r  ok_oneDr  r  rc   s   `                 @r   test_linalg_solve!TestLinalgSolve.test_linalg_solve~  s   
 T"<0(	&V ) t{{D1 D++D?AG#*7D#9//WWQZ(%:a 1glll1a $: 2  	bhhv/ XXBx"b*"**= 	b  hhAA'rxx8EB95EC95 hhAA'rzz:&&r52)<&&r53)< hh1vRZZ0$$R	: hhR
RVVRVV$45RZZH!!%"3!!%#3 ((B82::6bhh!Q!Q(Aq6Aq6*:;2::N''EB9= "RZZ02$rd+2::>))%"e=))%"e= ++FBJJ!+L%%eeR[9r   c                 X   [         R                  " / SQ/ SQ/ SQ/ SQ/SS9n[         R                  " U5      n[         R                  " / SQ5      n[         R                  " U5      n[        SS	9S
 5       nUR	                  XS5      n[         R
                  R                  X5        [         R
                  R                  X45        U" XS5      n[         R
                  R                  X5        [         R
                  R                  X45        [         R
                  R                  Xg5        g )N)r?  r   r   r   )r  r   r   r   )r  r   r   r   )r?  r   r   r   rn   rl   )r?  r  r~  r   Tr   c                 d    U(       a  U SS2S S 24   n [         R                  R                  X5      $ r  r  r  s      r   r  4TestLinalgSolve.test_no_input_mutation.<locals>.func  r  r   Fr  )r0   r  r  r  y_origr  re   rf   s           r   r  &TestLinalgSolve.test_no_input_mutation  s    HHm###& .12
 HH_%	d		) 
	) <<e,


""1-


""1-1


""1-


""1-


""81r   r   N)	r   r   r   r   r   r   r  r  r   r   r   r   r  r  y  s2     r: r:h 2 2r   r  c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)TestLinalgPinvi  z
Tests for np.linalg.pinv.
c           	      
  ^ ^ [        SS9" [        5      mUU 4S jn/ SQnSn[        UT R                  S5       H_  u  pEnT R	                  XEU5      nU" U5        Uu  pUS:w  d  M,  U	S:w  d  M4  [        X5      n
T R	                  XEUUS9nS	U-  nX-  nU" X|S
9  Ma     S H  nU" [        R                  " U5      5        M!     SnT R                  UT[        R                  " S[        R                  S945        T R                  UT[        R                  " S[        R                  S945        T R                  T[        R                  " S	S/[        R                  [        R                   //[        R                  S945        g)z
Test np.linalg.pinv
Tr   c                 F  > [        U 40 UD6nT	" U 40 UD6nT
R                  US5        Sn [        R                  R	                  X2SS9  U(       aN  T
R                  UR                  UR                  5        [        R                  " X05      n T
R                  U5        T
R+                  5          T	" U 40 UD6  S S S 5        g ! [
         a    Sn Nf = f! [
         Ga0    S[        R                  " U R                  5      R                  -  nT	" U5      n[        R                  R                  UU SU-  SU-  S9  U R                  S	   U R                  S
   :  a  [        SS9" [        5      nU" U [        R                   " U R                  S	   5      R#                  U R                  5      40 UD6S	   n[        R                  R                  UUSU-  SU-  S9  T
R%                  [        R&                  R)                  X2-
  5      U5         GNof = f! , (       d  f       g = f)Nrn   Fr  r  Tr  r  r  r   r   r   )r  r  r   r  r  r  rT   ry   r   r  r  r<   r  r  r   r  rS  r9   
assertLessr   r  ra   )r   r  re   rf   r  r  r  r  
lstsq_pinvrc   r0   s            r   r  .TestLinalgPinv.test_linalg_pinv.<locals>.check  s   "1//H$V$C %%c3/!&*

99 : , "   HNN;
 ffSnP2237< %%'a"6" ('e " *%)"** & P!"RXXagg%6%A%A!AJ*CJJ..*_ :-	 /  wwqzQWWQZ/ !$T 2< @%*rvv !
 ,,2F !-)&4 -3&4 56&7
 

22&!#j!$z!1	 3  OOBIINN3>$BJO5P: ('s0   C C /
HCCD7HH
H r  r  r  r   r  r?  r{  )r<  r=  r  r  rj   r  r  N)r   r  r   r   rb  rM  r   rq   rr  r  r  rz  r   r}  rT  r  r  )r0   r  r  r  ro   r<   rm   r   rC   r;   rX  r
  r  r?  r  rc   s   `              @r   test_linalg_pinvTestLinalgPinv.test_linalg_pinv  ss   
 T";/@	#H ;  t{{D1 D ++D?A!HDAAv!q&A	//U:G 0 I]*).&a6 2  #B"((2, #  	E!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	!!%#%88b"Z"&&"&&9I,J24**$> #@	Ar   c                    [        SS9S 5       n[        R                  " / SQ/ SQ/ SQ/ SQ/SS	9n[        R                  " U5      nUR	                  S
5      nUR                  U5      n[        R                  R                  X#5        U" U5      n[        R                  R                  X#5        [        R                  R                  XV5        g )NTr   c                 F    [         R                  R                  U S   5      $ )Nr   r  )r  s    r   some_fn.TestLinalgPinv.test_issue5870.<locals>.some_fn  s    99>>!A$''r   r  r  r  r  rn   rl   )r   r   r   )r   r   rT  r   rB   r   r  r  )r0   r  v_datav_orig
reshaped_vre   rf   s          r   test_issue5870TestLinalgPinv.test_issue5870  s     
d		( 
	( >)))+ 367
 ^^I.
??:.


""62j!


""62


""81r   r   N)	r   r   r   r   r   r   r  r  r   r   r   r   r  r    s4     qA qAf 2 2r   r  c                   Z    \ rS rSrSrS rS rS r\S 5       r	\S 5       r
\S 5       rS	rg
)TestLinalgDetAndSlogdeti  z
Tests for np.linalg.det. and np.linalg.slogdet.
Exactly the same inputs are used for both tests as
det() is a trivial function of slogdet(), the tests
are therefore combined.
c                 *   [        U40 UD6nU" U40 UD6nS[        R                  " UR                  5      R                  -  n[        R
                  R                  XTUS9  U R                  5          U" U40 UD6  S S S 5        g ! , (       d  f       g = fNr  rf  )r  r   r  r<   r  r  r  ra   )r0   rc   r   r  re   rf   r  s          r   	check_det!TestLinalgDetAndSlogdet.check_det  s}    a*6*A  !''*555
 	

""3z"B !!#!v $##s   1
B
Bc                    [        U40 UD6nU" U40 UD6nU R                  [        U5      [        U5      5        U R                  [        U5      S5        [        S5       HA  nU R                  [        R
                  " XV   5      [        R
                  " XF   5      5        MC     UR                  R                  US   5      n[        R                  R                  XtS   SS9  S[        R                  " UR                  5      R                  -  n[        R                  R                  US   US   XS9  U R                  5          U" U40 UD6  S S S 5        g ! , (       d  f       g = f)Nr   r   r  r  r  r   r  )r  rT   rN   rs   r   r  r<   typer  r  r  r  r  ra   )	r0   rc   r   r  re   rf   r   got_convr  s	            r   check_slogdet%TestLinalgDetAndSlogdet.check_slogdet  s-   !!.v.A   	XC1S1% qA',.  77<<A'


11qk 	2 	, !''*555



""FHQKj 	# 	C !!#!v $##s   
E
E'c           	         / SQn[        X@R                  S5       H   u  pVnU R                  XVU5      nU" X85        M"     [        U R                  S5       H"  u  pg[        R                  " SUS9nU" X85        M$     U" U[        R
                  " S5      5        U R                  X[        R                  " S[        R                  S945        U R                  X[        R                  " S[        R                  S945        U R                  U[        R                  " SS	/[        R                  [        R                  //[        R                  S945        g )
N)r|  )r   r   r  r  r  rj   r  r  r  r?  r  )r   r   rb  r   rQ  rq   rr  r  r  rz  r   r}  rT  r  r  )	r0   r  r  rc   r  ro   r<   rm   r   s	            r   do_testTestLinalgDetAndSlogdet.do_test  s    ) {{D1 D ++D?A%O 2 $DKK6LEu-A%O 7
 	eRXXf%& 	!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	!!%#%88b"Z"&&"&&9I,J24**$> #@	Ar   c                 d    [        SS9" [        5      nU R                  SU R                  U5        g )NTr   r  )r   r  r  r  r0   rc   s     r   test_linalg_det'TestLinalgDetAndSlogdet.test_linalg_det  s%    T":.UDNNE2r   c                 d    [        SS9" [        5      nU R                  SU R                  U5        g )NTr   r  )r   r  r  r  r  s     r   test_linalg_slogdet+TestLinalgDetAndSlogdet.test_linalg_slogdet  s'    T">2Y 2 2E:r   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/SS9n[         R                  " U5      n[        SS9S	 5       nUR	                  US
5      n[         R
                  R                  X5        U" US
5      n[         R
                  R                  X5        [         R
                  R                  XE5        g )Nr  r  r  r  rn   rl   Tr   c                 d    U(       a  U SS2S S 24   n [         R                  R                  U 5      $ r  r  r  s     r   r  <TestLinalgDetAndSlogdet.test_no_input_mutation.<locals>.func  s+    ac1fI99$$Q''r   Fr  r0   r  r  r  re   rf   s         r   r  .TestLinalgDetAndSlogdet.test_no_input_mutation  s    HHn$$$& .12
 	d		( 
	( <<5)


""1-1en


""1-


""81r   r   N)r   r   r   r   r   r  r  r  r   r  r  r  r   r   r   r   r  r    sU    !FAB 3 3 ; ; 2 2r   r  c                   (    \ rS rSrSr\S 5       rSrg)TestLinalgNormi   z
Tests for np.linalg.norm.
c                   ^ ^
 [        SS9" [        5      m
U
U 4S jn/ SQnS[        R                  [        R                  * SSSS	S
SSS/n[	        UT R
                  U5       H  u  pEnT R                  XE5      nU" XvS9  M     [	        T R
                  U5       H#  u  pVT R                  SU5      SSS2   nU" XvS9  M%     / SQnS[        R                  [        R                  * SSS	S
/n[	        UT R
                  SU5       H  u  pEpT R                  XEU5      nU" XvS9  M      S/n[	        T R
                  US5       HA  u  pVnT R                  SXX5      nU" USS US9  U" USS2SS24   US9  U" USSSS24   US9  MC     [	        T R
                  US5       H`  u  pVn[        R                  " SXXS9nT R                  T
" Xv5      S5        [        R                  " SXXS9nT R                  T
" Xv5      S5        Mb     Sn	T R                  U	T
[        R                  " S[        R                  S945        T R                  U	T
[        R                  " S[        R                  S9R                  S	S	S5      45        T R!                  T
[        R"                  " SS/[        R                  [        R$                  //[        R                  S9S	45        T R'                  T
[        R"                  " SS/SS //[        R                  S9S!45        g)"z
Test np.linalg.norm
Tr   c                   > [        U 40 UD6nT" U 40 UD6nTR                  [        R                  " U5      (       + 5        S[        R                  " U R
                  5      R                  -  n[        R                  R                  X2US9  TR                  5          T" U 40 UD6  S S S 5        g ! , (       d  f       g = fr  )
r  r  r   r  r  r<   r  r  r  ra   r   r  re   rf   r  rc   r0   s        r   r  .TestLinalgNorm.test_linalg_norm.<locals>.check,      "1//H$V$C OO 445RXXagg.999J JJ&&s:&F %%'a"6" (''   
B//
B=)r   r   r  Nr   r   r   r   r  r  g@g333333)r  r  r   r  r  )   rr  r   r}  rJ  r  r  r  r  rj      r?  r  r~  r  r  )r   r  r   r  r   r   r>   rb  rq   rT   rr  r  r  rZ  r   rB   r}  rT  r  r  )r0   r  r  	nrm_typesro   r<   nrm_typer   rm   r  rc   s   `         @r   test_linalg_normTestLinalgNorm.test_linalg_norm%  s   
 T";/	#" 266BFF7Aq"aQTJ	 t{{I6 "D""4/A!" 7 Y/ E""2u-cc2A!" 0 ;266BFF7Ar1b9	 t{{D)< )D ++D?A!" = F	Y5 #EU++HeCA!BQ%X& !AqrE() !Aqt!tG*(+ 6  Y5 #EUU8AU1/5u:AU1/5	 6  	E!#rxx!@ B	D 	''"**&&-g1a'	 	!!%#%88b"X7G,H24**$>?@#B	C
 	%%ebhhR2r(7K=?ZZ/IJK.M 	Nr   r   N)r   r   r   r   r   r   r  r   r   r   r   r  r     s     `N `Nr   r  c                   (    \ rS rSrSr\S 5       rSrg)TestLinalgCondi  z
Tests for np.linalg.cond.
c           	        ^ ^ [        SS9" [        5      mUU 4S jnS[        R                  [        R                  * SSSS/nS	S
/n[	        UT R
                  SU5       H  u  pEpgT R                  XEU5      nU" XS9  M      / SQn[	        UT R
                  S5       H   u  pEnT R                  XEU5      nU" U5        M"     S H*  n	T R                  T[        R                  " U	5      45        M,     [        R                  " SS/SS//[        R                  S9n
U" U
5        U" U
SS9  [        R                  " SS/SS//[        R                  S9n
U" U
SS9  [        R                  " 5          [        R                  " SS/SS//[        R                  S9n[        R                  " S[        5        U" U5        SSS5        SnT R                  UT[        R                   " S[        R"                  S945        T R%                  UT[        R                   " S[        R                  S945        T R'                  T[        R                  " SS/[        R                  [        R(                  //[        R                  S945        T R+                  T[        R                  " SS/SS//[        R                  S9S45        g! , (       d  f       GN= f)z
Test np.linalg.cond
Tr   c                   > [        U 40 UD6nT" U 40 UD6nTR                  [        R                  " U5      (       + 5        S[        R                  " U R
                  5      R                  -  n[        R                  R                  X2US9  TR                  5          T" U 40 UD6  S S S 5        g ! , (       d  f       g = fr  )
r"  r  r   r  r  r<   r  r  r  ra   r  s        r   r  .TestLinalgCond.test_linalg_cond.<locals>.check  r  r  Nr   r   r   r  r  r  r  )r!  )r  r  r  r  r;  r   rj   gg?ignorer   r  r  r?  r  r~  r  r  )r   r"  r   r  r   r   rb  r  rq   rT  r   rI   rJ   rK   RuntimeWarningrr  r  r  rz  r}  r  r  )r0   r  psr  ro   r<   rm   r!  r   r?  rj  r  rc   s   `           @r   test_linalg_condTestLinalgCond.test_linalg_cond  sp    T";/	#" BFFRVVGQAr2  t{{D"5 "D++D?A!M 6
 3t{{D1 D++D?A!H 2
 +B&&urxx|o> + HHq!fq!f%RZZ8aa1HHq!fq!f%RZZ8a2
 $$&61+3x0

CA!!(N;!H '
  	E!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	!!%#%88b"Z"&&"&&9I,J24**$> #@	A
 	%%ebhhR2r(7K=?ZZ/IJK.M 	N+ '&s   -AK  
Kr   N)r   r   r   r   r   r   r  r   r   r   r   r  r    s     KN KNr   r  c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)TestLinalgMatrixRanki  z"
Tests for np.linalg.matrix_rank.
c           	      `  ^ ^ [        SS9" [        5      mUU 4S jn/ SQn[        UT R                  S5       GH  u  p4nT R	                  X4U5      nU" U5        Sn[        S[        U5      S-
  5       GHI  nT R	                  X4XXS9nT R                  T" U5      U5        U" U5        UR                  u  pS	US
S
2S
S
24'   [        R                  " [        R                  " X5      5      n[        R                  " U5      (       aN  S[        R                  R                  U5      -   S-   S[        R                  R                  U5      -  -   nSUS'   O'S[        R                  R                  U5      -   nSUS'   UR                  U5      XkS   S
U US   S
U 4'   T R                  T" Xg5      US-
  5        U" XgS9  GML     S	US
S
2S
S
24'   T R                  T" U5      S5        U" U5        [        R                  " U5      (       a  SUS'   OSUS'   T R                  T" Xg5      S5        U" XgS9  GM     T R                   H]  n[        R                   " SUS9nT R                  T" U5      S5        U" U5        SUS'   T R                  T" U5      S5        U" U5        M_     S H4  nS H+  nT R#                  T[        R$                  " U5      U45        M-     M6     SnT R'                  UT[        R(                  " S[        R*                  S945        T R-                  UT[        R(                  " S[        R.                  S9R1                  SSS5      45        T R3                  T[        R4                  " SS/[        R6                  [        R8                  //[        R.                  S945        g
)z
Test np.linalg.matrix_rank
Tr   c                    > [        U 40 UD6nT" U 40 UD6n[        R                  R                  X25        TR	                  5          T" U 40 UD6  S S S 5        g ! , (       d  f       g = fr   )r'  r   r  r  ra   )r   r  re   rf   rc   r0   s       r   r  ;TestLinalgMatrixRank.test_linalg_matrix_rank.<locals>.check  s\    )!6v6H$V$C JJ&&s5 %%'a"6" (''s   
A
A'r  r  vIh%<=r   r  r  Nr?                ?y+=+=r   g+=)r&  )r   r   r  rj   r;  )Nr  r%  r  r  r   r   r  )r   r'  r   r   rb  rs   rM  rT   ry   r   rR  rS  r  rK  r  r9   rQ  r  rq   rr  r  r  rZ  r   rB   r}  rT  r  r  )r0   r  r  ro   r<   rm   r   r&  r   rC   r;   ra  r   rt  r?  r  rc   s   `               @r   test_linalg_matrix_rank,TestLinalgMatrixRank.test_linalg_matrix_rank  sD    T"#56
	# ; t{{D1 D ++D?A!H C1c$i!m,//U/K  q1-a ww!Q$jj.??1%%RYY^^A..4biinnQ//0A *AaDRYY^^A..A AaD,-HHUOa&!*c!fRaj()  qA6a!- -0 AadGU1Xq)!Hq!!*&	!&	U1]A.!W 2^ ++B!B'AU1Xq)!HAaDU1Xq)!H  +B$**5288B<2EF % +  	E!#rxx!@ B	D 	''"**&&-g1a'	 	!!%#%88b"Z"&&"&&9I,J24**$> #@	Ar   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/SS9n[         R                  " U5      n[        SS9S	 5       nUR	                  US
5      n[         R
                  R                  X5        U" US
5      n[         R
                  R                  X5        [         R
                  R                  XE5        g )Nr  r  r  r  rn   rl   Tr   c                 d    U(       a  U SS2S S 24   n [         R                  R                  U 5      $ r  r$  r  s     r   r  9TestLinalgMatrixRank.test_no_input_mutation.<locals>.funcT	  s+    ac1fI99((++r   Fr  r  s         r   r  +TestLinalgMatrixRank.test_no_input_mutationG	  s     HHn$$$& .12
 	d		, 
	, <<5)


""1-1en


""1-


""81r   r   N)	r   r   r   r   r   r   r  r  r   r   r   r   r  r    s4     bA bAH 2 2r   r  c                   .    \ rS rSrSrS r\S 5       rSrg)TestLinalgMatrixPowerid	  z#
Tests for np.linalg.matrix_power.
c                     U" US   S5        U R                  [        R                  5         U" U6   S S S 5        g ! , (       d  f       g = f)Nr   r   r   r
   r   )r0   rc   rd   s      r   assert_int_exponenent+TestLinalgMatrixPower.assert_int_exponenenti	  s7    d1gqv1124L 322s	   ;
A	c           	      ~  ^ ^ [        SS9" [        5      mUU 4S jn/ SQnSS/[        [        SS5      5      -   S	S
/-   n[	        X#T R
                  S5       H=  u  pEpgT R                  XFU5      nU" X5        [        R                  " SXgS9nU" X5        M?     Sn	T R                  U	T[        R                  " S[        R                  S9S45        T R                  U	T[        R                  " S[        R                  S9S45        [        R                  " S5      S4n
SnT R                  TX5        T R                  U	T[        R                  " S[        R                  S9S45        T R                  T[        R                  " S5      S45        T R!                  T[        R"                  " SS/SS//5      S45        g )NTr   c                 J  > [        X5      nT" X5      nTR                  US5        S[        R                  " U R                  5      R
                  -  n[        R                  R                  X2XDS9  TR                  5          T" X5        S S S 5        g ! , (       d  f       g = f)Nrk   r  r  )	r*  r  r   r  r<   r  r  r  ra   )r   pwrre   rf   rk  rc   r0   s        r   r  =TestLinalgMatrixPower.test_linalg_matrix_power.<locals>.checkt	  s}    *12H-C %%c3/bhhqww'222CJJ&&s3&I %%'a (''s   	B
B")r|  r  r  r  iir  r  !   r  r  rJ  r)  r  rj   r   )r   r  zinput must be a square array333333?r  r   r   )r   r*  listrs   r   r   rb  r   rq   rr  r  r  rf  rz  r   r  r  rT  )r0   r  r  powersro   r  r<   rm   r   r  rd   r   rc   s   `           @r   test_linalg_matrix_power.TestLinalgMatrixPower.test_linalg_matrix_powerp	  s   T"#67	 )sd5b>22b"X= t{{D9 $Du++D?A!Mu:A!M	 :  	E!#rxx!@! D	F 	E!#rxx!@! D	F #,%+ 	$$R&(ggb

&CQ%G	I 	""52776?C*@A 	%%ebhhQ!Q7H.I2-NOr   r   N)	r   r   r   r   r   r  r   r	  r   r   r   r   r  r  d	  s"     2P 2Pr   r  c                   >   ^  \ rS rSrSrU 4S jrS rS rS rSr	U =r
$ )	TestTracei	  z
Tests for np.trace.
c                    > [         [        U ]  5         [        SS9" [        5      U l        [        SS9" [        5      U l        g )NTr   )r-   r  r.   r   r/  cfunc_w_offsetr1  cfunc_no_offsetr/   s    r   r.   TestTrace.setUp	  s5    i$&!40>"D12HIr   c                     U" U5        U R                  [        R                  5         U" U40 UD6  S S S 5        g ! , (       d  f       g = fr   r  )r0   rc   r   r  s       r   assert_int_offsetTestTrace.assert_int_offset	  s6    av112!v 322s	   
;
A	c           	        ^  U 4S jn/ SQn/ SQ[        [        SS5      5      -   / SQ-   n[        X#T R                  S5       HW  u  pEpgT R	                  XFU5      nU" XS9  US	:X  a  U" U5        [
        R                  " S
XgS9nU" XS9  US	:X  d  MO  U" U5        MY     Sn	T R                  U	T R                  [
        R                  " S[
        R                  S9S4S5        T R                  U	T R                  [
        R                  " S[
        R                  S94S5        T R                  T R                  [
        R                  " S5      SS9  g )Nc                   > SU;   a  [        U 40 UD6nTR                  nO[        U 40 UD6nTR                  nU" U 40 UD6nS[        R
                  " U R                  5      R                  -  n[        R                  R                  XBXUS9  TR                  5          U" U 40 UD6  S S S 5        g ! , (       d  f       g = f)Nr.  r  r  )r/  r  r1  r  r   r  r<   r  r  r  ra   )r   r  re   rc   rf   rk  r0   s         r   r  #TestTrace.test_trace.<locals>.check	  s    6!'4V4++1!>v>,,$V$Cbhhqww'222CJJ&&s3&I %%'a"6" (''s   
B00
B>r  )iiir  r  )r  r  rr  r  )r.  r   r  rJ  r-  rj   r   Fr  r  )r  rs   r   r   rb  r   rq   rz  r  r  r   r  r  )
r0   r  r  offsetsro   r.  r<   rm   r   r  s
   `         r   
test_traceTestTrace.test_trace	  s3   	#& ; "DsB$88<G T: 'D%++D?A!#{au:A!#{a ;  	$$R)<)<&(ggb

&CQ%G	P$$R)=)=&(ggb

&C%Eu	N 	" # 	 	%r   c                 6   [        SSS9S 5       n[        R                  " S[        R                  S9nU" U5        U R	                  [
        5       nU" S5        SSS5        [        WR                  5      nU R                  SU5        g! , (       d  f       N6= f)	z
Issue 2314z(optional(float64[:,:]),)Tr   c                 .    [         R                  " U 5      $ r   r,  r   s    r   tested5TestTrace.test_trace_w_optional_input.<locals>.tested	  s    88A;r   r  rj   Nz(expected array(float64, 2d, A), got None)	r   r   r  r   r   	TypeErrorrR   r   rT   )r0   r  r   r   errmsgs        r   test_trace_w_optional_input%TestTrace.test_trace_w_optional_input	  s    	(4	8	 
9	 GGF"**-q	y)V4L * V%%&CVL	 *)s   	B


B)r  r  )r   r   r   r   r   r.   r  r  r   r   r   r   s   @r   r  r  	  s%    J0%dM Mr   r  c                   b    \ rS rSr\" / SQ5      r\" / SQ5      r/ SQrS rS r	S r
S rS	 rS
rg)
TestBasicsi	  )rn   rk   rk   rn   )rk   rn   rk   rn   )r  r  r  )r  r  )r   r~  r  c           
      8   U R                  X[        R                  " S///[        R                  S9[        R                  " S5      4S5        U R                  X[        R                  " S5      [        R                  " S///[        R                  S94S5        g )Nr   rj   F)rZ  r   rT  r   r  )r0   r  rc   s      r   _assert_wrong_dimTestBasics._assert_wrong_dim
  sr    ''A3%

;RWWQZH%	Q''
BHHseWBJJ$GH%	Qr   c                     [        U[        5      (       d  U$ [        U5      S:X  a  U R                  US   U5      $ U R                  US   US   -  U5      R	                  XS9$ )Nr   r   rl   )rN  r  rN   r>   rB   )r0   ro   r<   rm   s       r   
_gen_inputTestBasics._gen_input

  sn    $&&K4yA~))$q'599))Gd1g%"7 # ''r   c                    U R                  X[        U R                  5      5      nU R                  X#[        U R                  5      5      n[        R
                  " U5      (       a  US-   n[        R
                  " U5      (       a  US-   nXE4$ )Nr  )r(  rs  order1order2r   r  )r0   size1size2r<   r   r   s         r   
_get_inputTestBasics._get_input
  sk    OOE$t{{*;<OOE$t{{*;<??1BA??1BAvr   c                   ^ ^	 [        SS9" [        5      m	U	U 4S jn[        T R                  5      n[	        T R
                  T R
                  5       H  u  p4[        U5      nT R                  X4U5      u  pgU" Xg5        [        R                  " [        R                  " U5      R                  [        R                  " U5      R                  4[        R                  " U5      R                  S9nU" XgUS9  M     T R                  ST	5        g )NTr   c                   > [        X5      nT" X5      nS[        R                  " [        R                  " U 5      R                  5      R
                  -  n[        R                  R                  XCXUS9  SU;   aJ  T" X40 UD6n[        R                  R                  XCUUS9  [        R                  R                  US   UXUS9  TR                  5          T" X40 UD6  S S S 5        g ! , (       d  f       g = f)Nr  r  r!   )	r4  r   r  asarrayr<   r  r  r  ra   r   r   r  re   rf   rk  rc   r0   s         r   r  $TestBasics.test_outer.<locals>.check#
  s     $A)H+Cbhhrzz!}223>>>CJJ&&s3&I A+F+

**3s03 + 5

**6%=(03 + ? %%'a%f% (''s   
C''
C5rj   r    r3  )r   r4  r   r   r   r  rs  r/  r   rq   r3  ro   r<   r%  )
r0   r  dtsr-  r.  r<   r   r   r+  rc   s
   `        @r   
test_outerTestBasics.test_outer 
  s    T"<0	&* DKK #DJJ

;LEIE__U59FQ!K"**Q-,,bjjm.@.@A"$**Q-"5"57A!A < 	w.r   c                   ^ ^	 [        SS9" [        5      m	U	U 4S jn[        T R                  T R                  T R                  5       H"  u  p#nT R                  X#U5      u  pVU" XV5        M$     T R                  ST	5        [        R                  " S5      S S S2   [        R                  " S5      S S S2   4nSnT R                  T	Xx[        R                  S9  g )	NTr   c                 N  > [        X5      nT" X5      nS[        R                  " [        R                  " U 5      R                  5      R
                  -  n[        R                  R                  XCXUS9  TR                  5          T" X5        S S S 5        g ! , (       d  f       g = f)Nr  r  )	r7  r   r  r3  r<   r  r  r  ra   r4  s         r   r  #TestBasics.test_kron.<locals>.checkF
  su    "1(H+Cbhhrzz!}223>>>CJJ&&s3&I %%'a (''s   	B
B$r6  r  r   zonly supports 'C' or 'F' layoutr  )r   r7  r   r  r   r/  r%  r   rq   rf  r
   r   )
r0   r  r-  r.  r<   r   r   rd   r   rc   s
   `        @r   	test_kronTestBasics.test_kronC
  s    T";/
	 

DJJ<  E%__U59FQ!K = 	vu-SqS!288B<!#45/%0B0BCr   r   N)r   r   r   r   r   r+  r,  r  r%  r(  r/  r7  r<  r   r   r   r   r#  r#  	  s;    '(F'(F ?EQ
'!/FDr   r#  c                       \ rS rSrS rSrg)TestHelpersi^
  c                   ^ ^ SSK Jm  U 4S jn[        U4S j5       nSS/n[        R                  /nSS/nU" U[        R
                  X4U5        [        U4S	 j5       nS
S/n[        R                  /nSS/nS nU" XgX4U5        g )Nr   )_copy_to_fortran_orderc                 T  > [        X#U5       H  u  pVn[        R                  " [        R                  " U5      5      R	                  XWS9nU " U5      n	T
R                  U" U5      U	5        T
R                  UR                  R                  U	R                  R                  5        M     g )Nrl   )	r   r   r6   prodrB   rb   assertNotEqualctypesdata)udtexpectfnshapesr   r  ry   r<   rm   r   rO  r0   s             r   r  5TestHelpers.test_copy_to_fortran_order.<locals>.checkb
  s{    '.vv'F#eIIbggen-55e5IF''Q7##AHHMM188==A (Gr   c                    > T" U 5      $ r   r   )r   rA  s    r   direct_call;TestHelpers.test_copy_to_fortran_order.<locals>.direct_calll
  s    )!,,r   )r   r   )r   r   r  rk   rn   c                 *   > U S S S2   S   nT" U5      $ Nr   r   r   )r   slicedrA  s     r   slice_to_any<TestHelpers.test_copy_to_fortran_order.<locals>.slice_to_anyv
  s!     ssVAYF)&11r   )r   r   r   )r   r   r   r  c                 D    U S S S2   S   n[         R                  " U5      $ rO  )r   asfortranarray)r   rP  s     r   expected_slice_to_anyETestHelpers.test_copy_to_fortran_order.<locals>.expected_slice_to_any
  s$    ssVAYF$$V,,r   )numba.np.linalgrA  r   r   intprT  )	r0   r  rL  rI  r   r  rQ  rU  rA  s	   `       @r   test_copy_to_fortran_order&TestHelpers.test_copy_to_fortran_order_
  s    :	B 
	- 
	- )$''sk2,,ffE 
	2 
	2
 \*''s	-
 	l66Jr   r   N)r   r   r   r   rY  r   r   r   r   r?  r?  ^
  s    &Kr   r?  __main__r  )r   )gV瞯<r   r}  )Jr   r+   	itertoolsr   r   sysrI   numbersr   r   platformnumpyr   numbar   r   r	   
numba.corer
   numba.tests.supportr   r   r   r   r   r   r   unittestr   r#   r%   r(   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r"  r'  r*  r/  r1  r4  r7  r9  r  r  r  r  r0  rK  rX  rc  r  r  r  r  r  r  r  r  r#  r?  r   mainr   r   r   <module>rf     s    	 $ 
  $   # # B B * !j%x j^	! !+(! " )(#BC(( BCJgI gITN2N N2bPJ PJfj$^ j$Z}8N }8@u1> u1p@ @.E.' E.PT2' T2nN2^ N2by2n y2~fN& fNRQN^ QNhD2, D2N?PN ?PDQM QMhaD" aDH'K( 'KR zMMO r   