
    xKgbw                    2   d dl Z d dlZd dlmZmZ d dlZd dlZd dlmZm	Z	 d dl
Z
d dlZd dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZ ddlmZ d dlZd	 Zd
 Zd Z G d dee      Zd Z d Z!d Z"d Z#d Z$d Z%dJdZ&d Z'dKdZ(d Z)dLdZ*d Z+d Z,dMdZ-dMdZ.dMdZ/d Z0dNdZ1d  Z2dMd!Z3d" Z4 G d# d$ee      Z5 G d% d&e      Z6 G d' d(e5      Z7 G d) d*e5      Z8 G d+ d,e5      Z9 G d- d.e5      Z: G d/ d0e5      Z; G d1 d2e5      Z< G d3 d4e<      Z= G d5 d6e<      Z> G d7 d8e5      Z? G d9 d:e5      Z@ G d; d<e<      ZA G d= d>e5      ZB G d? d@e<      ZC G dA dBe5      ZD G dC dDe5      ZE G dE dFe<      ZF G dG dHe      ZGeHdIk(  r ej                          yy)O    N)productcycle)NumberIntegral)jitnjittypeof)errors)TestCasetagneeds_lapack
needs_blas
_is_armv7lEnableNRTStatsMixin   )matmul_usecasec                 .    t        j                  | |      S Nnpdotabs     [/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_linalg.pydot2r      s    66!Q<    c                 2    t        j                  | ||      S Noutr   r   r   r!   s      r   dot3r#      s    66!QC  r   c                 .    t        j                  | |      S r   )r   vdotr   s     r   r%   r%          771a=r   c                   b    e Zd ZdZej
                  ej                  ej                  ej                  fZ	 fdZ
d Zd Zej                  d        Zd Zd Zd Zdd	Zdd
Zd Zed        Zed        Zd Zed        Zd Zed        Zed        Zed        Zed        Zed        Z  xZ!S )TestProductz!
    Tests for dot products.
    c                 R    t        j                          t        t        |           y r   )gccollectsuperr(   setUpself	__class__s    r   r-   zTestProduct.setUp&   s    


k4&(r   c                     t        j                  |      }t        |t         j                        r|dz  dz   j	                  |      S |dz  dz
  j	                  |      S Ny      ?      y               @g      ?r   r   arange
issubclasscomplexfloatingastyper/   ndtypebases       r   sample_vectorzTestProduct.sample_vector+   U     yy|eR//0H%*225993JN**511r   c                 N    | j                  ||z  |      j                  ||f      S r   )r<   reshape)r/   mr9   r:   s       r   sample_matrixzTestProduct.sample_matrix4   s(    !!!a%/77A??r   c              #   d  K   t        j                  d      5 }t        j                  dt        j                         d ddd       | j                  t              d       | j                  |d   j                  t        j                         | j                  dt        |d   j                               | j                  |d   j                  |j                  j                         | j                  |d   j                   |j                  j"                  dz          y# 1 sw Y   xY ww)zB
        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)r/   pyfuncws      r   check_contiguity_warningz$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   D0)D$C"D0$D-)D0c                     | j                         5   || } || }| j                  ||d       ~~d d d        y # 1 sw Y   y xY w)NTignore_sign_on_zero)assertNoNRTLeakassertPreciseEqual)r/   rV   cfuncargsexpectedgots         r   
check_funczTestProduct.check_funcF   sF    !!#t}H,C##Ct#LX	 $##s	   !;Ac                 z   |j                   dz   |j                  z  dz   }|j                   |j                  z  }t        j                  |t        j                        }t        |j                  dz         D ]<  }||||z    j                  |j                        }|j                  j                  s< n t        d      |j                  j                  r#t        j                  ||j                  d      }n"t        j                  ||j                  d      }|d d  |d d  |j                  j                  sJ |S )Nr   r:   zCould not obtain aligned arrayCorderF)sizeitemsizer   emptyuint8rangeviewr:   flagsaligned	Exceptionc_contiguousr?   shape)r/   arrri   datasizetmpinews          r   _aligned_copyzTestProduct._aligned_copyN   s     1,q088cll*hht288,s||a'(Aa!h,',,399,=Cyy   )
 <==99!!**S#))37C**S#))37CQAyy    
r   c                 >   t         r| j                  nt        j                  }| j	                         5   ||      } ||      }| j                   ||d|i|       | j                   ||d|i|       | j                  ||d       ~~d d d        y # 1 sw Y   y xY w)Nr!   TrZ   )r   ry   r   copyr\   rK   r]   )r/   rV   r^   r_   r!   copierr`   ra   s           r   check_func_outzTestProduct.check_func_outc   s    '1##rww!!#c{H+CMM&$5H5x@MM%/3/5##Ct#LX $##s   ABBc                     | j                  t              5 } ||  d d d        |rdnd}| j                  |t        j                               y # 1 sw Y   5xY w)Nzincompatible output array sizezincompatible array sizes)assertRaises
ValueErrorrM   rN   	exception)r/   r^   r_   is_outraisesmsgs         r   assert_mismatching_sizesz$TestProduct.assert_mismatching_sizesm   sN    z*f4L +39/) 	c3v//01	 +*s   AAc                     | j                  t        j                        5 } ||  d d d        | j                  |dt	        j
                               y # 1 sw Y   2xY w)Nz' arguments must all have the same dtype)r   r
   TypingErrorrM   rN   r   )r/   r^   r_   	func_namer   s        r   assert_mismatching_dtypesz%TestProduct.assert_mismatching_dtypest   sO    v112f4L 3"%&**+	- 32s   AA c           
      \   d} t        d      |      }| j                  D ]\  }| j                  ||      }| j                  ||      }| j                  ||||f       | j                  |||d d d   |d d d   f       ^ | j                  |dz
  t        j
                        }| j                  |t        j
                        }| j                  |||f       | j                  |t        j                        }| j                  |t        j
                        }| j                  |||f|       y )N   Tnopythonr   )r   )	r   dtypesr<   rb   r   float64r   float32r   )r/   rV   r   r9   r^   r:   r   r   s           r   check_dot_vvzTestProduct.check_dot_vv{   s   "T"6*[[E""1e,A""1e,AOOFEAq62OOFEAddGQttW+=> ! q1ubjj1q"**-%%eaV4q"**-q"**-&&uq!f	&Jr   c                 0    | j                  t        d       y)z/
        Test vector * vector np.dot()
        np.dot()N)r   r   r/   s    r   test_dot_vvzTestProduct.test_dot_vv   s    
 	$
+r   c                 0    | j                  t        d       y)z 
        Test np.vdot()
        z	np.vdot()N)r   r%   r   s    r   	test_vdotzTestProduct.test_vdot   s    
 	$,r   c                 b     fd} t        d      |      }| t        d      |      }dD ]  \  }} |||      D ]9  \  }	}
 j                  |||	|
f        j                  |||
|	j                  f       ; |N |||      D ]\  \  }	}
t        j                  ||	j
                        } j                  ||	|
f|        j                  |||
|	j                  f|       ^  d\  }} j                  ||dz
  t        j                        }	 j                  |t        j                        }
 j                  ||	|
f        j                  ||
|	j                  f       |t        j                  |t        j                        } j                  |	|
|f        j                  ||
|	j                  |f        j                  ||t        j                        }	 j                  |t        j                        }
t        j                  |dz
  t        j                        } j                  ||	|
|fd        j                  ||
|	j                  |fd        j                  ||t        j                        }	 j                  |t        j                        }
 j                  ||	|
f|       || j                  ||t        j                        }	 j                  |t        j                        }
t        j                  |t        j                        } j                  |	|
|f|       y y )	Nc              3   f  K   dD ]Y  }j                  | |t        j                        j                  |      }j	                  |t        j                        }||f [ j
                  D ]-  }j                  | ||      }j	                  ||      }||f / d d d   d d d   f y wNCFrf   r   )rA   r   r   r{   r<   r   )r@   r9   rg   r   r   r:   r/   s         r   samplesz)TestProduct.check_dot_vm.<locals>.samples   s     &&q!RZZ8==E=J&&q"**5d
  &&q!U3&&q%0d
 %
 DbD'1TrT7""s   B.B1Tr   )   r   )r   r   )r   r   rd   r   r   r   )r   rb   Tr   rk   r:   r}   rA   r   r<   r   r   r   )r/   pyfunc2pyfunc3r   r   cfunc2cfunc3r@   r9   r   r   r!   s   `           r   check_dot_vmzTestProduct.check_dot_vm   s   
	# $d#G,'S$'0FDAq  11!Q8!QSS: & "#AqMDAq((1AGG4C''!QE''!QSS3G * 1q!a%4q"**-%%fq!f5%%fq!##h7((1bjj)C))&1a+>))&1acc3-@""1a4A""1bjj1A((1q5"**-C))&1a+d)K))&1acc3-)Mq!RZZ0q"**-&&v1vyA""1a4A""1bjj1A((1bjj)C**6Aq#;	J	 r   c                 :    | j                  t        t        d       y)zC
        Test vector * matrix and matrix * vector np.dot()
        r   N)r   r   r#   r   s    r   test_dot_vmzTestProduct.test_dot_vm       
 	$j1r   c                 4     fd} t        d      |      }| t        d      |      }dD ]  \  }}}	 ||||	      D ]C  \  }
} j                  |||
|f        j                  |||j                  |
j                  f       E |Z ||||	      D ]  \  }
}t        j                  ||f|
j
                        } j                  ||
|f|       t        j                  ||f|
j
                        } j                  |||j                  |
j                  f|         d\  }}}	 j                  ||	dz
  t        j                        }
 j                  |	|t        j                        } j                  ||
|f       |t        j                  ||ft        j                        } j                  |
||f        j                  ||	t        j                        }
 j                  |	|t        j                        }t        j                  ||dz
  ft        j                        } j                  ||
||fd        j                  ||	t        j                        }
 j                  |	|t        j                        } j                  ||
|f|       | j                  ||	t        j                        }
 j                  |	|t        j                        }t        j                  ||ft        j                        } j                  |
||f|       y y )	Nc              3     K   t        dd      D ]m  \  }}j                  | |t        j                        j	                  |      }j                  ||t        j                        j	                  |      }||f o j
                  D ].  }j                  | ||      }j                  |||      }||f 0 d d d   d d d   f y wr   )r   rA   r   r   r{   r   )	r@   r9   korder_aorder_br   r   r:   r/   s	           r   r   z)TestProduct.check_dot_mm.<locals>.samples   s     $+D$$7 &&q!RZZ8==G=L&&q!RZZ8==G=Ld
 %8 &&q!U3&&q!U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   rd   r   r   r   )r   rb   r   r   rk   r:   r}   rA   r   r   r   r   )r/   r   r   r   r   r   r   r@   r9   r   r   r   r!   s   `            r   check_dot_mmzTestProduct.check_dot_mm   s   
	# $d#G,'S$'0FGAq!  1a(1!Q8!##qss< ) "#Aq!,DAq((Aq69C''!QE((Aq69C''!##qssSI	 -& 1aq!a%4q!RZZ0%%fq!f5((Aq62::.C))&1a+>""1a4A""1a4A((Aq1u:rzz2C))&1a+d)Kq!RZZ0q!RZZ0&&v1vyA""1a4A""1a4A((Aq62::.C**6Aq#;	J	 r   c                 :    | j                  t        t        d       y)z/
        Test matrix * matrix np.dot()
        r   N)r   r   r#   r   s    r   test_dot_mmzTestProduct.test_dot_mm  r   r   c                 0    | j                  t        d       y)z&
        Test vector @ vector
        '@'N)r   r   r   s    r   test_matmul_vvzTestProduct.test_matmul_vv   s    
 	.%0r   c                 2    | j                  t        dd       y)z:
        Test vector @ matrix and matrix @ vector
        Nr   )r   r   r   s    r   test_matmul_vmzTestProduct.test_matmul_vm'      
 	.$6r   c                 2    | j                  t        dd       y)z&
        Test matrix @ matrix
        Nr   )r   r   r   s    r   test_matmul_mmzTestProduct.test_matmul_mm.  r   r   c                     d\  }}}t         j                  }| j                  |||      d d d   }| j                  |||      d d d   }t        j                  ||f|      } t	        d      t
              }| j                  |j                        5   |||       d d d         t	        d      t              }| j                  |j                        5   ||||       d d d        | j                  ||      d d d   }| j                  ||      d d d   } t	        d      t              }| j                  |j                        5   |||       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   Tr   )r   r   rA   rk   r   r   rX   py_funcr#   r<   r%   )	r/   r@   r   r9   r:   r   r   r!   r^   s	            r   test_contiguity_warningsz$TestProduct.test_contiguity_warnings5  sP   1a

q!U+DbD1q!U+DbD1hh1vu%"T"4(**5==9!QK :"T"4(**5==9!Q : q%(2.q%(2."T"4(**5==9!QK :9 :9 :9 :9s$   
EE(	
E4E%(E14E=)F)r   )"__name__
__module____qualname____doc__r   r   r   
complex128	complex64r   r-   r<   rA   
contextlibcontextmanagerrX   rb   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r0   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                 @    t         j                  j                  |       S r   r   linalginvr   s    r   invert_matrixr   N      99==r   c                 @    t         j                  j                  |       S r   )r   r   choleskyr   s    r   cholesky_matrixr   R      99a  r   c                 @    t         j                  j                  |       S r   )r   r   eigr   s    r   
eig_matrixr   V  r   r   c                 @    t         j                  j                  |       S r   )r   r   eigvalsr   s    r   eigvals_matrixr   Z      99Qr   c                 @    t         j                  j                  |       S r   )r   r   eighr   s    r   eigh_matrixr   ^      99>>!r   c                 @    t         j                  j                  |       S r   )r   r   eigvalshr   s    r   eigvalsh_matrixr   b  r   r   c                 B    t         j                  j                  | |      S r   r   r   svd)r   full_matricess     r   
svd_matrixr   f  s    99==M**r   c                 @    t         j                  j                  |       S r   r   r   qrr   s    r   	qr_matrixr   j  s    99<<?r   c                 D    t         j                  j                  | ||      S r   r   r   lstsq)ABrconds      r   lstsq_systemr   n  s    99??1a''r   c                 B    t         j                  j                  | |      S r   r   r   solve)r   r   s     r   solve_systemr   r  s    99??1a  r   c                 @    t         j                  j                  |       S r   r   r   pinv)r   r   s     r   pinv_matrixr   v  r   r   c                 @    t         j                  j                  |       S r   r   r   slogdetr   s    r   slogdet_matrixr   z  r   r   c                 @    t         j                  j                  |       S r   )r   r   detr   s    r   
det_matrixr   ~  r   r   c                 B    t         j                  j                  | |      S r   )r   r   norm)r   ords     r   norm_matrixr    s    99>>!S!!r   c                 B    t         j                  j                  | |      S r   )r   r   cond)r   ps     r   cond_matrixr    s    99>>!Qr   c                 B    t         j                  j                  | |      S r   r   r   matrix_rank)r   tols     r   matrix_rank_matrixr    s    99  C((r   c                 B    t         j                  j                  | |      S r   )r   r   matrix_power)r   r9   s     r   matrix_power_matrixr    s    99!!!Q''r   c                 .    t        j                  | |      S r   r   trace)r   offsets     r   trace_matrixr    s    88Avr   c                 ,    t        j                  |       S r   r  r   s    r   trace_matrix_no_offsetr    s    88A;r   c                 2    t        j                  | ||      S r   )r   outerr"   s      r   outer_matrixr    s    88Aqc""r   c                 .    t        j                  | |      S r   )r   kronr   s     r   kron_matrixr    r&   r   c                        e Zd ZdZej
                  ej                  ej                  ej                  fZ	 fdZ
d Z	 ddZefdZd Zd ZddZd	 Zd
 Zd ZddZd Zd Z xZS )TestLinalgBasezU
    Provides setUp and common data/error modes for testing np.linalg functions.
    c                 R    t        j                          t        t        |           y r   )r*   r+   r,   r  r-   r.   s    r   r-   zTestLinalgBase.setUp  s    


nd)+r   c                     t        j                  |      }t        |t         j                        r|dz  dz   j	                  |      S |dz  dz   j	                  |      S r2   r3   r8   s       r   r<   zTestLinalgBase.sample_vector  r=   r   c                 l   d}t        |      dk7  rt        d      |dvrt        d      |t        j                  t        j                  t        j
                  t        j                  fvrt        d      ||t        d      ||}|d	k  rt        d
      t        j                  j                  d       |\  }}|dk  s|dk  rt        d      t        ||      }	||	}
n=|dk  rt        d      t        |t              st        d      |}
||	kD  rt        d      |d	k(  s|d	k(  r@||k7  rt        d      t        ||      }| j                  ||      j                  ||      }|S | j                  ||z  |      j                  ||      }t        j                  j!                  |      \  }}| j                  ||z  |      ddd   j                  ||      }t        j                  j!                  |      \  }}t        j"                  |||
      }t        j$                  ||f      }t        j&                  t        j(                  ||            }|||d   d|
 |d	   d|
 f<   t        j*                  t        j*                  ||      |j,                        }t        j.                  |||      }|S )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.)rh   re    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:   rg   )rJ   r   r   r   r   r   r   randomseedmin
isinstancer   maxr<   r?   r   r   linspacezerosnonzeroeyer   r   array)r/   ri   r:   rg   rank	conditiond_condr@   r9   minmnrvmaxmnQrv   U_VsvSidxs                       r   specific_sample_matrixz%TestLinalgBase.specific_sample_matrix  s     t9>=>>
"?@@RZZr}}MMIJJ	 5NOOIq=<==
		q1q5AEJKKAq	<Bqy !BCCdH- !899Be| !EFF6Q!V F" NP P1IE""5%088A>A*  $$QUE2::1a@C99<<$DAq$$QUE24R48@@AFC99<<$DAqVY3B!Q A**RVVAq\*C*,Ac!fSbk3q6#2;&'rvva|QSS)A%u5Ar   c                     | j                  |      5 } ||  d d d        | j                  |t        j                               y # 1 sw Y   /xY wr   )r   rM   rN   r   )r/   r^   r_   r   errr   s         r   assert_errorzTestLinalgBase.assert_error  s@    s#v4L $c3v//01 $#s   AAc                 `    d}| j                  |||t        j                  j                         y )Nz.Last 2 dimensions of the array must be square.rI  r   r   LinAlgErrorr/   r^   r_   r   s       r   assert_non_squarez TestLinalgBase.assert_non_square  s%    >%sBII,A,ABr   c                 R    d|z  }| j                  |||t        j                         y )Nz9np.linalg.%s() only supported on float and complex arraysrI  r
   r   r/   namer^   r_   r   s        r   assert_wrong_dtypez!TestLinalgBase.assert_wrong_dtype  s&    IDP%sF,>,>?r   c                 d    |rdnd}|d|d}| j                  |||t        j                         y )N	np.linalgr   .z() only supported on 2-D arraysrP  r/   rR  r^   r_   	la_prefixprefixr   s          r   assert_wrong_dimensionsz&TestLinalgBase.assert_wrong_dimensions  s/     )t8>E%sF,>,>?r   c                 `    d}| j                  |||t        j                  j                         y )Nz$Array must not contain infs or NaNs.rK  rM  s       r   assert_no_nan_or_infz#TestLinalgBase.assert_no_nan_or_inf  s%    4%sBII,A,ABr   c                 x   t        |t              r|D ]  }| j                  ||        yt        |t              s|j                  j
                  }|j                  j                  }d}| j                  ||z  |       d}|dk(  r| j                  ||       y|dk(  r| j                  ||       yt        d      y)a6  
        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.re   rh   zUnknown contigN)	r2  tupleassert_contig_sanityr   ro   rr   f_contiguous
assertTruer   )r/   ra   expected_contigr   c_contigf_contigr   s          r   r_  z#TestLinalgBase.assert_contig_sanity"  s     c5!))!_=  c6*99119911 O8 3S9H"c)OOHc2$+OOHc2$%566! +r   c                 b    d}| j                  |||t        j                  j                         y )Nz(Matrix is singular to machine precision.rH  rK  rM  s       r   assert_raise_on_singularz'TestLinalgBase.assert_raise_on_singularG  s(    8%s		0E0EFr   c                 p   | j                  |j                  d   |j                  d          t        j                  |j                  d   |j                        }dt        j
                  |j                        j                  z  }|d|z  }|d|z  }t        j                  j                  ||||       y)zE
        Checks if a matrix is equal to the identity matrix.
        r   rd      N
   d   )	rP   rs   r   r7  r:   finfo
resolutiontestingassert_allclose)r/   ra   rtolatolr7  rn  s         r   assert_is_identity_matrixz(TestLinalgBase.assert_is_identity_matrixK  s    
 	2		"6ffSYYr]#))4#)),777
<
?D<#D


""3T48r   c                 8    d}| j                  |||t               y)z5
        For use in norm() and cond() tests.
        z Invalid norm order for matrices.N)rI  r   rM  s       r   assert_invalid_norm_kindz'TestLinalgBase.assert_invalid_norm_kind[  s     1%sJ7r   c                 `    d}| j                  |||t        j                  j                         y )NzArrays cannot be emptyrK  rM  s       r   assert_raise_on_emptyz$TestLinalgBase.assert_raise_on_emptyb  s%    &%sBII,A,ABr   )NNT)r   r   r   r   r   r   r   r   r   r   r-   r<   rF  r   rI  rN  rS  rZ  r\  r_  rg  rs  ru  rw  r   r   s   @r   r  r    s}    
 jj"**bmmR\\BF,
2 <@Rh 2< 2
C@@
C#7JG9 8Cr   r  c                       e Zd ZdZd Zy)TestTestLinalgBasez
    The sample matrix code TestLinalgBase.specific_sample_matrix()
    is a bit involved, this class tests it works as intended.
    c                     t        d      g d}t        |j                  d      D ]  \  }}}|\  }}t        ||      }j	                  |||      } j                  |j                  |        j                  t        j                  j                  |      |       |dkD  re|dz
  }	j	                  ||||	      } j                  |j                  |        j                  t        j                  j                  |      |	       dt        j                  |      j                  z  }
j	                  |||      } j                  |j                  |       t        j                  j                  t        j                  j                  |      d|
|
       |dkD  syd	}j	                  ||||
      } j                  |j                  |       t        j                  j                  t        j                  j                  |      d	|
|
        t        f fd	} j!                  t"              5 }d} |dt        j$                  df|t               d d d        d} |dt        j$                  df|t               d} |dt        j$                  df|t               d} |dt        j&                  df|t               d} |dt        j$                  dddf|t               d} |dt        j$                  dd df|t               d} |dt        j$                  df|t               d} |dt        j$                  ddf|t               d} |dt        j$                  ddf|t               d} |dt        j$                  dd df|t               d } |dt        j$                  dd!f|t               y # 1 sw Y   hxY w)"NrF     r      rj  rj  r  r   r   r   r~  FCr   r9  rj  r#  rq  rr        $@r:  c                     j                  |      5 } j                  |   d d d        j                  |t        j                               y # 1 sw Y   /xY wr   )r   rF  rM   rN   r   )r_   r   rH  r   instr/   s       r   check_errorzCTestTestLinalgBase.test_specific_sample_matrix.<locals>.check_error  sJ    ""3'6+++T2 (MM#s6#3#345 ('s   AAblankr   rh   rf  r$  r   r%  zr&  r'  r(  r   r)  )r   r*  r,  r   r-  )r   r   rk  r+  g      ?)r  r   r   r1  rF  rP   rs   r   r   r  rm  rn  ro  rp  r  r   r   AssertionErrorr   int32)r/   sizesri   r:   rg   r@   r9   r<  r   r9  rn  r:  r  r   r   r  s   `              @r   test_specific_sample_matrixz.TestTestLinalgBase.test_specific_sample_matrixm  sZ    67: #*%d"CD%DAq1IE ++D%?AQWWd+RYY2215u= qyqy//eU/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 ~.&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   9#OON)r   r   r   r   r   r   r   rz  rz  g  s    
aIr   rz  c                   0    e Zd ZdZed        Zed        Zy)TestLinalgInvz"
    Tests for np.linalg.inv.
    c                 D    d} t        d      t               fd}t         j                  d      D ]"  \  }} j	                  ||f||      } ||       $  |t        j                  d              j                  t        j                  d      f        j                  dt        j                  d	t
        j                  
      f        j                  dt        j                  d      f        j                  t        j                  d	      f       y)z$
        Test np.linalg.inv
        rk  Tr   c                 h   t        |       } |       }j                  |d       d}	 t        j                  j	                  ||d       |r't        j                  ||       }j                  |       j                         5   |        d d d        y # t
        $ r d}Y Xw xY w# 1 sw Y   y xY w)Nrh   Frk  nulpT)	r   r_  r   ro  assert_array_almost_equal_nulpr  r   rs  r\   )r   kwargsr`   ra   use_reconstructionrecr^   r/   s         r   checkz,TestLinalgInv.test_linalg_inv.<locals>.check  s    $Q'H(C%%c3/!&*

99#x?A : C "ffS!n..s3 %%'a (' " *%)"* ('s   "B 	B(B%$B%(B1r   r   r   r   r   r   r   rd   N)r   r   r   r   rF  r   rk   rN  onesrS  r  rZ  rg  r5  )r/   r9   r  r:   rg   r   r^   s   `     @r   test_linalg_invzTestLinalgInv.test_linalg_inv  s    
 "T"=1	. $DKK6LE5++QFE5AA!H 7
 	bhhv 	urwwv&89 	u!#rxx!@ B	D 	$$UEBGGBK>B 	%%ebhhv.>-@Ar   c                    t        j                  g dg dg dg dgd      }t        j                  |      }t        d      d	        }|j	                  |d
      }t         j
                  j                  ||        ||d
      }t         j
                  j                  ||       t         j
                  j                  ||       y )Nr#  r   r   r~  r   r   r   	   r  r   r   r   ri  r      rh   rf   Tr   c                 Z    |r| ddd d f   } t         j                  j                  |       S Nr   r   r   Xtests     r   ainvz2TestLinalgInv.test_no_input_mutation.<locals>.ainv  )    ac1fI99==##r   Fr   r8  r{   r   r   ro  rp  )r/   r  X_origr  r`   ra   s         r   test_no_input_mutationz$TestLinalgInv.test_no_input_mutation	  s    HHn$$$& .12
 	d		$ 
	$ <<5)


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


""1f-


""8S1r   N)r   r   r   r   r   r  r  r  r   r   r  r    s2     0B 0Bd 2 2r   r  c                   ,    e Zd ZdZd Zd Zed        Zy)TestLinalgCholeskyz'
    Tests for np.linalg.cholesky.
    c                    t         j                  j                  d       t         j                  j                  ||      }t         j                  j                  |      \  }}t        j                  d|dz         }t        j                  t        j                  |j                  t        j                  |            |      }t        j                  |||      }|S )Nr   r   r.  )r   r/  r0  randr   r   r4   r   r   diagr8  )	r/   r@   r:   rg   r   qrA  Lr?  s	            r   rA   z TestLinalgCholesky.sample_matrix'  s    
		qIINN1a  yy||A1IIaQFF266!##rwwqz*A.HHQe51r   c                 `    d}| j                  |||t        j                  j                         y )Nz Matrix is not positive definite.rK  rM  s       r   assert_not_pdz TestLinalgCholesky.assert_not_pd3  s%    0%sBII,A,ABr   c                     d} t        d      t               fd}t         j                  d      D ]   \  }} j	                  |||      } ||       "  |t        j                  d             d} j                  t        j                  dt
        j                  	      f        j                  |t        j                  d
t
        j                  	      f        j                  |t        j                  dt
        j                  	      f        j                  t        j                  dt
        j                  	      j                  dd      f       y)z)
        Test np.linalg.cholesky
        rk  Tr   c                    t        |       } |       }d}j                  |d       	 t        j                  j	                  ||d       |rt        j                  |t        j                  |j                              }dt        j                  | j                        j                  z  }t        j                  j                  | |||       j                         5   |        d d d        y # t
        $ r d}Y w xY w# 1 sw Y   y xY w)NFre   rk  r  Trj  r  )r   r_  r   ro  r  r  r   conjr   rm  r:   rn  rp  r\   )r   r`   ra   r  r  rn  r^   r/   s         r   r  z6TestLinalgCholesky.test_linalg_cholesky.<locals>.check?  s    &q)H(C!&%%c3/*

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

**##	 +  %%'a ('! " *%)"*  ('s   "C2  	D2D ?D Dr  r  r   r   rd   r  r   r   N)r   r   r   r   rA   r   rk   rN  r  r   rS  r  rZ  r  r?   )r/   r9   r  r:   rg   r   rnr^   s   `      @r   test_linalg_choleskyz'TestLinalgCholesky.test_linalg_cholesky7  s   
 "T"?3	< $DKK6LE5""1eU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   N)r   r   r   r   rA   r  r   r  r  r   r   r  r  "  s(    
C :J :Jr   r  c                   |    e Zd ZdZd Zd Zd Z	 ddZed        Z	ed        Z
ed	        Zed
        Zed        Zy)TestLinalgEigenSystemsz*
    Tests for np.linalg.eig/eigvals.
    c                    | j                  ||      }t        j                  |      }t        j                  t        j                  |j
                  d   |j
                  d   d            }|dd  ||<   t        j                  t        j                  |j
                  d   |j
                  d   d            }|d d ||<   t        j                  |||      }|S )Nr   r   r   r.  )r<   r   r  r6  r7  rs   r8  )r/   r@   r:   rg   vr?  rE  s          r   rA   z$TestLinalgEigenSystems.sample_matrixz  s    q%(GGAJjj
AGGAJ:;12#jj
AGGAJ;<3B#HHQe51r   c                 4    |dz   }| j                  |||       y )Nz+() argument must not cause a domain change.)rI  rQ  s        r   assert_no_domain_changez.TestLinalgEigenSystems.assert_no_domain_change  s    BB%s+r   c                       fd}|S )Nc                      j                   |  } |  }| d   }j                  t        |      t        |             d}t        |t              rd}j                  t        |             nj                  |j
                         j                  |d       d}t        t        |            D ]+  }	 t        j                  j                  ||   ||   d       - dt        j                  |j                        j                  z  }|r|r|\  }}	d   d	k(  rt        j                  t        j                   |j"                  d   |j"                  d
   d            }
t        j                  t        j                   |j"                  d   |j"                  d
   d
            } |   t        j$                  ||
         ||<   t        j&                  t        j(                  |            |t        j*                  |j"                  d         <   t        j,                  ||	      }t        j,                  |	t        j(                  |            }t        j                  j/                  |j&                  |j&                  ||       t        j0                  |	      rt        j                  j/                  |j2                  |j2                  ||       nIt        j                  j/                  t        j4                  |      t        j4                  |      ||       j7                         5   |   d d d        y # t        $ r d}Y w xY w# 1 sw Y   y xY w)Nr   FTrh   rk  r  rj  r   hr   r  )r   rP   rJ   r2  r^  ndimr_  rm   r   ro  r  r  rm  r:   rn  r6  r7  rs   r  realr  diag_indicesr   rp  iscomplexobjimagsortr\   )r_   r`   ra   r   res_is_tupler  r   rn  rW   r  idxlidxulhsrhsr^   expected_res_lenrR  r/   s                 r   r  z3TestLinalgEigenSystems._check_worker.<locals>.check  s   $u}}d+H,CQAS]CH5 L#u%#  S+;<  +;< %%c3/!&3x=).JJ==A" > 6 *$ RXXagg.999J!DAq Bx3!zz"&&QWWQZ*LM!zz"&&QWWQZ*KLt #%''!D'"2$ :<9L"//!''!*56&&A,C&&BGGAJ/CJJ..''	 /  q)

22HHHH!+!+	 3  JJ..)''	 /  %%'t ('G & .)-&.F ('s   7(L>/M>MMMr  )r/   r^   rR  r  check_for_domain_changer  s   ````  r   _check_workerz$TestLinalgEigenSystems._check_worker  s    [	x r   Nc           	      v   d} t        d      |      }| j                  ||||      }t        | j                  d      D ]   \  }}	| j	                  |||	      }
 ||
       " t
        j                  t
        j                  fD ]  } |t        j                  d|             | j                  |t        j                  d|      f       | j                  ||t        j                  dt
        j                        f       | j                  ||t        j                  d|      f       | j                  |t        j                  d	d
gt
        j                   t
        j"                  gg|      f        |rt        j                  ddgddgg      } ||j%                  t
        j&                                ||      \  }}| j)                  t        j*                  |j,                               t
        j                  t
        j.                  fD ]%  }| j1                  |||j%                  |      f       ' yy)z$
        Test np.linalg.eig
        rk  Tr   r  r  rd   r   r  r#         @r   ri  r   N)r   r  r   r   rA   r   r   r   rk   rN  r  rS  r  rZ  r\  r8  infnanr7   r   ra  anyr  r   r  )r/   rR  funcr  r  r9   r^   r  r:   rg   r   tyr   lrA  s                  r   checker_for_linalg_eigz-TestLinalgEigenSystems.checker_for_linalg_eig  s   
 "T"4(""5$0@#:<
 $DKK6LE5""1eU3A!H 7
 ::r||,B "((6,- ""52776+D*FG ##D%%'WWV288%D$FH ((urwwr7L6NO %%e')xx"bbffbff=M0N68(: '<=! -( # 1b'Aq6*+A!((2==)*7DAqOOBFF166N+ zz2::.,,T5188B</J /- #r   c                 4    | j                  dt        dd       y )Nr   r   T)r  r   r   s    r   test_linalg_eigz&TestLinalgEigenSystems.test_linalg_eig'  s    ##E:q$?r   c                 4    | j                  dt        dd       y )Nr   r   T)r  r   r   s    r   test_linalg_eigvalsz*TestLinalgEigenSystems.test_linalg_eigvals+  s    ##I~q$Gr   c                 4    | j                  dt        dd       y )Nr   r   F)r  r   r   s    r   test_linalg_eighz'TestLinalgEigenSystems.test_linalg_eigh/  s    ##FKEBr   c                 4    | j                  dt        dd       y )Nr   r   F)r  r   r   s    r   test_linalg_eigvalshz+TestLinalgEigenSystems.test_linalg_eigvalsh3  s    ##JEJr   c           
      |   dD ])  }|\  }}}t        t        j                  |      t        d      fd       }| j	                  ||||      }t        j
                  t        j                  fD ]  }| j                  |      5  t        j                  g dg dg dg d	gd
|      }t        j                  |      }	|j                  |d      }
t        j                  j                  ||	        ||d      }t        j                  j                  ||	        ||d       d d d         , y # 1 sw Y   xY w)N))r   r   T)r   r   T)r   r   F)r   r   FTr   c                 .    |r| ddd d f   }  |       S r  r  )r  r  meths     r   r  z;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~  rh   )rg   r:   F)getattrr   r   r   r  r   r   subTestr8  r{   r   ro  rp  )r/   cr@   noutdomain_changer  r  r:   r  r  r`   ra   r  s               @r   r  z-TestLinalgEigenSystems.test_no_input_mutation7  s   *A
 &'"At]299a(D$   &&tQmDE**bmm4\\t5\9 . , , ,"" *-E	;A  WWQZF#||Au5HJJ..q&9q%.CJJ..q&9!UO# :9 5%*& :9s   BD22D;r   )r   r   r   r   rA   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                   6    e Zd ZdZd Zed        Zed        Zy)TestLinalgSvdz"
    Tests for np.linalg.svd.
    c                     |\  }}}t        t        |            D ].  }| j                  ||   j                  ||   j                         0 t	        j
                  |j                  d   |j                  d   f      }t	        j                  ||       t	        j                  t	        j                  ||      |      }	t	        j                  |j                        j                  }
t        j                  j                  ||	d|
z  d|
z         y )Nr   r   rk  rl  r  )rm   rJ   rP   rs   r   r5  fill_diagonalr   rm  r:   rn  ro  rp  )r/   r   ra   r`   urC  vtr   sr  rn  s              r   check_reconstructionz"TestLinalgSvd.check_reconstructionm  s    	2r s8}%ASV\\8A;+<+<= & HHaggaj"((1+./
BffRVVAq\2&XXagg&11



""jz!	 	# 	
r   c                      t        d      t               fd}g d}d}t        | j                  |d      D ]$  \  }}}} j	                  |||      } |||       & d}	 j                  |	t        j                  d	t        j                  
      f        j                  |	t        j                  dt        j                  
      f        j                  t        j                  ddgt        j                  t        j                  ggt        j                  
      f       dD ]+  }
t        j                  |
      df} j!                  |       - y)z$
        Test np.linalg.svd
        Tr   c                    t        | fi |} | fi |}j                  t        |      t        |             j                  t        |      d       j                  |d       d}t	        t        |            D ]+  }	 t
        j                  j                  ||   ||   d       - |rj                  | ||       j                         5   | fi | d d d        y # t        $ r d}Y sw xY w# 1 sw Y   y xY w)Nr   rh   Frk  r  T)r   rP   rJ   r_  rm   r   ro  r  r  r  r\   )r   r  r`   ra   r  r   r^   r/   s         r   r  z,TestLinalgSvd.test_linalg_svd.<locals>.check  s    !!.v.H$V$CS]CH5SXq)%%c3/!&3x=).JJ==A" > 6 * "))!S(; %%'a"6" (' & .)-&. ('s   (C$
C5$C21C25C>)r}  )r~  rj  )rj  r~  r  r  )TFr  )r   r   r  rd   rk  r#  r  r   r   r   r   r  N)r   r   r   r   rF  rS  r   r  r  rZ  r   r\  r8  r  r  rk   rw  )r/   r  r  r   ri   r:   fmatrg   r   r  szr_   r^   s   `           @r   test_linalg_svdzTestLinalgSvd.test_linalg_svd  s=   
 #T":.	#< 9 & t{{M4@ %D%u ++D%?A!4( A
  	E!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	!!%#%88b"Z"&&"&&9I,J24**$> #@	A +BHHRL$'D&&ud3 +r   c                    t        j                  g dg dg dg dgd      }t        j                  |      }t        d      d	        }|j	                  |d
      }t         j
                  j                  ||        ||d
      }t         j
                  j                  ||       	 t        ||      D ]%  \  }}t         j
                  j                  ||       ' y # t        $ r | j                  |||       Y y w xY w)Nr  r  r  r  rh   rf   Tr   c                 Z    |r| ddd d f   } t         j                  j                  |       S r  r   r  s     r   r  z2TestLinalgSvd.test_no_input_mutation.<locals>.func  r  r   F)
r   r8  r{   r   r   ro  rp  zipr  r  r/   r  r  r  r`   ra   e_ag_as           r   r  z$TestLinalgSvd.test_no_input_mutation  s    HHn$$$& .12
 	d		$ 
	$ <<5)


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


""1f-	8#.S

**34 / 	8%%ah7	8s   '4C C;:C;N)r   r   r   r   r  r   r  r  r  r   r   r  r  b  s7    
( A4 A4F 8 8r   r  c                   0    e Zd ZdZed        Zed        Zy)TestLinalgQrz!
    Tests for np.linalg.qr.
    c                    	  t        d      t              		 fd}g d}t        | j                  d      D ]!  \  }}} j	                  |||      } ||       # d} j                  |	t        j                  dt        j                        f        j                  |	t        j                  d	t        j                        f        j                  	t        j                  d
dgt        j                  t        j                  ggt        j                        f       dD ](  } j                  	t        j                   |      f       * y)z#
        Test np.linalg.qr
        Tr   c                    t        | fi |} 
| fi |}j                  t        |      t        |             j                  t        |      d       j                  |d       d}t	        t        |            D ]+  }	 t
        j                  j                  ||   ||   d       - |r|\  }}t	        t        |            D ].  }j                  ||   j                  ||   j                         0 t        j                  ||      }t        j                  | j                        j                  }	t
        j                  j                  | |d|	z  d|	z         j                  t        j                  t        j                   |j"                        |             j%                         5   
| fi | d d d        y # t        $ r d}Y Uw xY w# 1 sw Y   y xY w)	Nr   rh   Frk  r  Trl  r  )r   rP   rJ   r_  rm   r   ro  r  r  rs   r   rm  r:   rn  rp  rs  	conjugater   r\   )r   r  r`   ra   r  r   r  rr  rn  r^   r/   s             r   r  z*TestLinalgQr.test_linalg_qr.<locals>.check  s    -f-H$V$C S]CH5SXq)%%c3/!&3x=).JJ==A" > 6 *  "1 s8}-A$$SV\\8A;3D3DE . ffQlXXagg.99


**jz)	 +  ..rvvbll1336G/KL %%'a"6" ('C & .)-&.B ('s   (G2
GGGG r|  r  r   r  rd   rk  r#  r  r  N)r   r   r   r   rF  rS  r   r  r  rZ  r   r\  r8  r  r  rw  rk   )
r/   r  r  ri   r:   rg   r   r  r  r^   s
   `        @r   test_linalg_qrz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                    t        j                  g dg dg dg dgd      }t        j                  |      }t        d      d	        }|j	                  |d
      }t         j
                  j                  ||        ||d
      }t         j
                  j                  ||       t        ||      D ]%  \  }}t         j
                  j                  ||       ' y )Nr  r  r  r  rh   rf   Tr   c                 Z    |r| ddd d f   } t         j                  j                  |       S r  r   r  s     r   r  z1TestLinalgQr.test_no_input_mutation.<locals>.funcI  s(    ac1fI99<<?"r   F)r   r8  r{   r   r   ro  rp  r  r  s           r   r  z#TestLinalgQr.test_no_input_mutation@  s    HHn$$$& .12
 	d		# 
	# <<5)


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


""1f-Hc*HCJJ&&sC0 +r   N)r   r   r   r   r   r  r  r  r   r   r  r    s2     V? V?p 1 1r   r  c                   $    e Zd ZdZddZd Zd Zy)TestLinalgSystemszu
    Base class for testing "system" solvers from np.linalg.
    Namely np.linalg.solve() and np.linalg.lstsq().
    c                 d    |rdnd}|d|d}| j                  |||t        j                         y )NrU  r   rV  z%() only supported on 1 and 2-D arraysrP  rW  s          r   assert_wrong_dimensions_1Dz,TestLinalgSystems.assert_wrong_dimensions_1Da  s/     )t>DdK%sF,>,>?r   c                 `    d}| j                  |||t        j                  j                         y )Nz<Incompatible array sizes, system is not dimensionally valid.rK  rM  s       r   assert_dimensionally_invalidz.TestLinalgSystems.assert_dimensionally_invalidg  s%    L%sBII,A,ABr   c                 R    d|z  }| j                  |||t        j                         y )NzAnp.linalg.%s() only supports inputs that have homogeneous dtypes.rP  rQ  s        r   assert_homogeneous_dtypesz+TestLinalgSystems.assert_homogeneous_dtypesl  s'    QTXX%sF,>,>?r   Nrx  )r   r   r   r   r  r  r  r  r   r   r  r  Z  s    @C
@r   r  c                   0    e Zd ZdZed        Zed        Zy)TestLinalgLstsqz$
    Tests for np.linalg.lstsq.
    c                      t        d      t               fdg d}t         j                        }ddg}t        |      d} fd}|D ]  }t	        |      }t	              } j                  |||      }	 ||	|       |\  }
}t        |
|      }|
d	k7  sL|d	k7  sR|d	z
  } j                  ||||
      }	 ||	|        j                  ||||      }	d|z  }||z  } ||	||        ddgddgddgddgg}|D ]A  \  }	}t        j                  |	      t        j                  |      f} j                  |       C t        j                  ddgddggt        j                        }||ff d}t        j                  d	dgddggt        j                        } j                  |||f        j                  |||f       t        j                  d	dgddggt        j                        } j                  |||f        j                  |||f       t        j                  d	dgt        j                        } j!                  |||f       t        j                  ddgt        j"                  t        j$                  ggt        j                        } j'                  ||f        j'                  ||f       t        j                  ddgt        j                        }||ff t        j                  d	dgddggddgddgggt        j                        } j)                  |||f       t        j                  dgt        j                        }t        j                  dgdgdggt        j                        } j+                  ||f        j+                  ||f       y) z&
        Test np.linalg.lstsq
        Tr   c           
         t        | |fi |} | |fi |}j                  t        |      t        |             j                  t        |      d       j                  |d       d}	 j                  |d   |d          t	        t        |            D ]+  }	 t
        j                  j                  ||   ||   d       - 	 |r|\  }}}	}
g d}	 j                  |	|d          |D ]L  }t        ||   t
        j                        s!j                  ||   j                  ||   j                         N 	 t        j                  | j                        j                   }	 t        j"                  | |      }t
        j                  j%                  ||d|z  d|z  	       j/                         5   | |fi | d d d        y # t        $ r d}Y ?w xY w# t        $ r d}Y "w xY w# t        $ r& j                  t        |	|d   z
        dk         Y w xY w# t        $ r |D ]  }	 t
        j                  j%                  ||   ||   d
|z  d
|z  	       nF# t        $ r: t
        j&                  j)                  |       }j+                  d|z  d|z         Y nw xY wt
        j&                  j-                  |t        j"                  | |d         z
        }t
        j&                  j-                  |t        j"                  | |      z
        }t
        j                  j%                  ||d        Y w xY w# 1 sw Y   y xY w)Nr   re   Fr   rk  r  T)r   r   r   r  rl  r#  r   r  rq  )r   rP   rJ   r_  rm   r   ro  r  r  r2  ndarrayrs   ra  absrm  r:   rn  r   rp  r   r  assertGreaterr  r\   )r   r   r  r`   ra   r  r   xresr9  r  out_array_idxrn  r  r  res_expectedres_gotr^   r/   s                    r   r  z0TestLinalgLstsq.test_linalg_lstsq.<locals>.check  s   #Aq3F3H1''C S]CH5SXq)%%c3/!&
*  Q!5s8}-A2

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

22(' 3 =+ +	=: ('s   -/G (G
G 7G. .G. '?H  6M
GG GG G+*G+.,HH L?1/I! L?!A J$!L?#J$$BL?>L?Mr|  rh   re   r  c                     d}|D ]g  }t        	      }
j                  | j                  d   |f||      } | |fi | t        	      }|d d df   j                  |      } | |fi | i y )Nr      r   rf   )nextrF  rs   r{   )r   dtr  b_sizesb_sizeb_orderr   rv   r  cycle_orderr/   s           r   inner_test_loop_fnz=TestLinalgLstsq.test_linalg_lstsq.<locals>.inner_test_loop_fn  s    G! {+//WWQZ("g7a%f% {+1glll1a'' "r   r   r  r  r#  r   r  r  r   r   r   r   r        @      @rd   r   r   r   r   rj     r~  r  N)r   r   r   r   r+  rF  r1  r   rk   rw  r8  r   r  rS  r   r  rZ  r  r  r\  r  r  )r/   r  cycle_dtordersspecific_condr1  a_sizer,  a_orderr   r@   r9   r<  r  r   approx_half_rank_rcondemptiesr   r_   okr  badoneDbad1Dbad2Dr^   r  r0  s   `                        @@@r   test_linalg_lstsqz!TestLinalgLstsq.test_linalg_lstsq  s   
 #T"<0X	&x ; %sFm 	($ FhB;'G ++FB@A q"%DAq1IE Av!q& AI//Ba 0 1 #1b) //B= 0 B ]*).&"1b)?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           	      &   t        j                  g dg dg dg dg dg dgd      }t        j                  |      }t        j                  g d	      }t        d
      d        } |||d       t         j                  j                  ||       y )N)r#  g)\(@gGz@)r#  g@r6  )r#  g      @gffffff@)r#  gffffff?g(\@)r#  gzG@g)\(
@)r#  g(\?g@rh   rf   )r#  r  r5  r6        @g      @Tr   c                 \    |r| ddd d f   } t         j                  j                  | |      S r  r   r  yr  s      r   f2z*TestLinalgLstsq.test_issue3368.<locals>.f2n  +    ac1fI99??1a((r   F)r   r8  r{   r   ro  rp  )r/   r  r  rI  rJ  s        r   test_issue3368zTestLinalgLstsq.test_issue3368b  s    HH&&&&&&)
 145 HH-.	d		) 
	) 	1a


""1f-r   N)r   r   r   r   r   rD  rL  r  r   r   r  r  q  s2     `> `>D . .r   r  c                   0    e Zd ZdZed        Zed        Zy)TestLinalgSolvez$
    Tests for np.linalg.solve.
    c                 8     t        d      t               fd}g d}t        | j                  d      D ]|  \  }}} j	                  |||      }d}t        |d      D ]R  \  }}	 j	                  |j
                  d   |f||	      }
 |||
       |
dddf   j                  |		      } |||       T ~  t        j                  d
      t        j                  d             t        j                  ddgddggt        j                        } ||       d}t        j                  ddgddggt        j                        } j                  |||f        j                  |||f       t        j                  ddgddggt        j                        } j                  |||f        j                  |||f       t        j                  ddgt        j                        } j                  |||f       t        j                  ddgt        j                   t        j"                  ggt        j                        } j%                  ||f        j%                  ||f       t        j                  ddgt        j                        } ||       t        j                  ddgddggddgddgggt        j                        } j'                  |||f       t        j                  dgt        j                        }t        j                  dgdgdggt        j                        } j)                  ||f        j)                  ||f        j	                  dt        j                  dd      } j+                  ||f       y)z&
        Test np.linalg.solve
        Tr   c                 B   t        | |fi |} | |fi |}	j                  |d       d}	 t        j                  j	                  ||d       |r	j                  |j                  |j                         t        j                  | |      }t        j                  | j                        j                  }t        j                  j                  ||d|z  d|z         	j                         5   | |fi | d d d        y # t
        $ r d}Y w xY w# 1 sw Y   y xY w)Nrh   Frk  r  Trl  r  )r   r_  r   ro  r  r  rP   rs   r   rm  r:   rn  rp  r\   )
r   r   r  r`   ra   r  r  rn  r^   r/   s
           r   r  z0TestLinalgSolve.test_linalg_solve.<locals>.check  s   #Aq3F3H1''C %%c3/!&*

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

**jz)	 +  %%'a%f% ('7 " *%)"*6 ('s   "D 0DDDD)r3  r  r~  r~  r  r)  r   Nrf   r  r4  r#          rd   r   r   r   r   r   r  rj  r7  r~  r  r5  r  re   r  )r   r   r   r   rF  rs   r{   r   rk   r8  r   r  rS  r   r  rZ  r  r  r\  r  r  rg  )r/   r  r  ri   r:   rg   r   r-  r.  r/  r   rv   r?  r  r@  ok_oneDrB  rC  r^   s   `                 @r   test_linalg_solvez!TestLinalgSolve.test_linalg_solve~  s8   
 #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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 ((B82::6b'hh!Q!Q(Aq6Aq6*:;2::N''EB9= "RZZ02$rd+2::>))%"e=))%"e= ++FBJJ!+L%%eeR[9r   c                 j   t        j                  g dg dg dg dgd      }t        j                  |      }t        j                  g d      }t        j                  |      }t        d	      d
        }|j	                  ||d      }t         j
                  j                  ||       t         j
                  j                  ||        |||d      }t         j
                  j                  ||       t         j
                  j                  ||       t         j
                  j                  ||       y )N)r#  r   r   r   )rR  r   r   r   )rR  r   r   r   )r#  r   r   r   rh   rf   )r#  r  r5  r   Tr   c                 \    |r| ddd d f   } t         j                  j                  | |      S r  r   rH  s      r   r  z4TestLinalgSolve.test_no_input_mutation.<locals>.func  rK  r   Fr  )r/   r  r  rI  y_origr  r`   ra   s           r   r  z&TestLinalgSolve.test_no_input_mutation  s    HHm###& .12
 HH_%	d		) 
	) <<1e,


""1f-


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


""1f-


""1f-


""8S1r   N)r   r   r   r   r   rT  r  r  r   r   rN  rN  y  s2     r: r:h 2 2r   rN  c                   0    e Zd ZdZed        Zed        Zy)TestLinalgPinvz#
    Tests for np.linalg.pinv.
    c                 "     t        d      t               fd}g d}d}t        | j                  d      D ]g  \  }}} j	                  |||      } ||       |\  }}	|dk7  s-|	dk7  s3t        ||	      }
 j	                  ||||      }d	|z  }|
|z  } |||
       i dD ]  } |t        j                  |              d} j                  |t        j                  dt        j                        f        j                  |t        j                  dt        j                        f        j                  t        j                  d	dgt        j                  t        j                   ggt        j                        f       y)z%
        Test np.linalg.pinv
        Tr   c                 D   t        | fi |} 	| fi |}
j                  |d       d}	 t        j                  j	                  ||d       |rN
j                  |j                  |j                         t        j                  ||       }	 
j                  |       
j+                         5   	| fi | d d d        y # t
        $ r d}Y w xY w# t
        $ r7 dt        j                  | j                        j                  z  } 	|      }t        j                  j                  || d|z  d|z         | j                  d	   | j                  d
   k\  r t        d      t              } || t        j                   | j                  d	         j#                  | j                        fi |d	   }t        j                  j                  ||d|z  d|z         
j%                  t        j&                  j)                  ||z
        |       Y tw xY w# 1 sw Y   y xY w)Nrh   Frk  r  Trj  rl  r  r   r   r   )r   r_  r   ro  r  r  rP   rs   r   rs  rm  r:   rn  rp  r   r   r7  r7   
assertLessr   r  r\   )r   r  r`   ra   r  r  rn  r   
lstsq_pinvr^   r/   s            r   r  z.TestLinalgPinv.test_linalg_pinv.<locals>.check  s   "1//H$V$C %%c3/!&*

99 : , "   HNN;
 ffS!nP2237< %%'a"6" ('e " *%)"** & P!"RXXagg%6%A%A!AJ*CJJ..*_ :-	 /  wwqzQWWQZ/ !3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D=HHHr|  r  r  r   r  r#  r2  )r  r   r   r  rd   rk  r  N)r   r   r   r   rF  r1  r   rk   rS  r  r  rZ  r   r\  r8  r  r  )r/   r  r  r:  ri   r:   rg   r   r@   r9   r<  r   r=  r  r  r^   s   `              @r   test_linalg_pinvzTestLinalgPinv.test_linalg_pinv  s   
 #T";/@	#H ;  t{{D1 D% ++D%?A!HDAqAv!q&Aq	//eU:G 0 I]*).&a56 2  #B"((2, #  	E!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	!!%#%88b"Z"&&"&&9I,J24**$> #@	Ar   c                    t        d      d        }t        j                  g dg dg dg dgd	      }t        j                  |      }|j	                  d
      }|j                  |      }t        j                  j                  ||        ||      }t        j                  j                  ||       t        j                  j                  ||       y )NTr   c                 F    t         j                  j                  | d         S )Nr   r   )r  s    r   some_fnz.TestLinalgPinv.test_issue5870.<locals>.some_fn  s    99>>!A$''r   r  r  r  r  rh   rf   )r   r   r   )r   r   r8  r{   r?   r   ro  rp  )r/   ra  v_datav_orig
reshaped_vr`   ra   s          r   test_issue5870zTestLinalgPinv.test_issue5870  s     
d		( 
	( >)))+ 367
 ^^I.
??:.


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


""662


""8S1r   N)r   r   r   r   r   r^  re  r  r   r   rY  rY    s4     qA qAf 2 2r   rY  c                   R    e Zd ZdZd Zd Zd Zed        Zed        Z	ed        Z
y)	TestLinalgDetAndSlogdetz
    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                 &   t        |fi |} ||fi |}dt        j                  |j                        j                  z  }t        j
                  j                  |||       | j                         5   ||fi | d d d        y # 1 sw Y   y xY wNrj  r  )r   r   rm  r:   rn  ro  rp  r\   )r/   r^   r   r  r`   ra   rn  s          r   	check_detz!TestLinalgDetAndSlogdet.check_det  s    a*6*A  !''*555
 	

""3z"B !!#!v $##s   4
BBc                    t        |fi |} ||fi |}| j                  t        |      t        |             | j                  t        |      d       t        d      D ]@  }| j                  t	        j
                  ||         t	        j
                  ||                B |j                  j                  |d         }t        j                  j                  ||d   d       dt	        j                  |j                        j                  z  }t        j                  j                  |d   |d   ||       | j                         5   ||fi | d d d        y # 1 sw Y   y xY w)Nr   r   rk  r  rj  r   r  )r   rP   rJ   rm   r   r  r:   typero  r  rm  rn  rp  r\   )	r/   r^   r   r  r`   ra   r   got_convrn  s	            r   check_slogdetz%TestLinalgDetAndSlogdet.check_slogdet  s5   !!.v.A   	XC1S1% qAA',.  77<<A'


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


""FHQKjz 	# 	C !!#!v $##s   
EE'c                    g d}t        || j                  d      D ]"  \  }}}| j                  |||      } |||       $ t        | j                  d      D ]%  \  }}t        j                  d|      } |||       '  ||t        j
                  d             | j                  ||t        j                  dt        j                        f       | j                  ||t        j                  dt        j                        f       | j                  |t        j                  dd	gt        j                  t        j                  ggt        j                        f       y )
N)r3  )r   r   rQ  r  r  rd   r  r  rk  r#  r  )r   r   rF  r   r5  rk   rS  r  r  rZ  r   r\  r8  r  r  )	r/   r  r  r^   r  ri   r:   rg   r   s	            r   do_testzTestLinalgDetAndSlogdet.do_test  s+    ) t{{D1 D% ++D%?A%O 2 $DKK6LE5u-A%O 7
 	eRXXf%& 	E!#rxx!@ B	D 	$$R&(ggb

&C%E	G 	!!%#%88b"Z"&&"&&9I,J24**$> #@	Ar   c                 j     t        d      t              }| j                  d| j                  |       y )NTr   r   )r   r   rp  rj  r/   r^   s     r   test_linalg_detz'TestLinalgDetAndSlogdet.test_linalg_det  s'    "T":.UDNNE2r   c                 j     t        d      t              }| j                  d| j                  |       y )NTr   r   )r   r   rp  rn  rr  s     r   test_linalg_slogdetz+TestLinalgDetAndSlogdet.test_linalg_slogdet  s)    "T">2Y 2 2E:r   c                    t        j                  g dg dg dg dgd      }t        j                  |      }t        d      d	        }|j	                  |d
      }t         j
                  j                  ||        ||d
      }t         j
                  j                  ||       t         j
                  j                  ||       y )Nr  r  r  r  rh   rf   Tr   c                 Z    |r| ddd d f   } t         j                  j                  |       S r  r   r  s     r   r  z<TestLinalgDetAndSlogdet.test_no_input_mutation.<locals>.func  s+    ac1fI99$$Q''r   Fr  r/   r  r  r  r`   ra   s         r   r  z.TestLinalgDetAndSlogdet.test_no_input_mutation  s    HHn$$$& .12
 	d		( 
	( <<5)


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


""1f-


""8S1r   N)r   r   r   r   rj  rn  rp  r   rs  ru  r  r  r   r   rg  rg    sU    !FAB 3 3 ; ; 2 2r   rg  c                        e Zd ZdZed        Zy)TestLinalgNormz#
    Tests for np.linalg.norm.
    c                 h   
  t        d      t              

 fd}g d}dt        j                  t        j                   dddd	d
dddg}t	        | j
                  |      D ]"  \  }}} j                  ||      } |||       $ t	         j
                  |      D ]'  \  }} j                  d|      ddd   } |||       ) g d}dt        j                  t        j                   ddd	d
g}t	        | j
                  d|      D ]$  \  }}}} j                  |||      } |||       & dg}t	         j
                  |d      D ]K  \  }}} j                  d||      } ||dd |        ||ddddf   |        ||ddddf   |       M t	         j
                  |d      D ]h  \  }}}t        j                  d||      } j                   
||      d       t        j                  d||      } j                   
||      d       j d}	 j                  |	
t        j                  dt        j                        f        j                  |	
t        j                  dt        j                        j                  d	d	d      f        j!                  
t        j"                  ddgt        j                  t        j$                  ggt        j                        d	f        j'                  
t        j"                  ddgdd ggt        j                        d!f       y)"z%
        Test np.linalg.norm
        Tr   c                 r   t        | fi |} | fi |}j                  t        j                  |              dt        j                  | j
                        j                  z  }t        j                  j                  |||       j                         5   | fi | d d d        y # 1 sw Y   y xY wri  )
r  ra  r   r  rm  r:   rn  ro  rp  r\   r   r  r`   ra   rn  r^   r/   s        r   r  z.TestLinalgNorm.test_linalg_norm.<locals>.check,      "1//H$V$C OO 445RXXagg.999J JJ&&sH:&F %%'a"6" (''   
B--B6)r   r   r~  Nr   r   r   r   ri  rj  g@g333333)r  rk  r   r|  r  )   r*  r   r4  r.  rR  r  r  r  rd      r#  r  r5  r6  r7  )r   r  r   r  r   r   r<   rF  rk   rP   rS  r  r  r  r   r?   r\  r8  r  ru  )r/   r  r  	nrm_typesri   r:   nrm_typer   rg   r  r^   s   `         @r   test_linalg_normzTestLinalgNorm.test_linalg_norm%  s   
 #T";/	#" 266BFF7Aq"aQTJ	 t{{I6 "D%""4/A!" 7 Y/ E8""2u-cc2A!" 0 ;266BFF7Ar1b9	 t{{D)< )D% ++D%?A!" = F	Y5 #E8U++HeUCA!BQ%X& !AqrE() !Aqt!tG*(+ 6  Y5 #E8UU%8AU1h/5uE:AU1h/5	 6  	E!#rxx!@ B	D 	''"**&&-g1a'	 	!!%#%88b"X7G,H24**$>?@#B	C
 	%%ebhhR2r(7K=?ZZ/IJK.M 	Nr   N)r   r   r   r   r   r  r  r   r   rz  rz     s     `N `Nr   rz  c                        e Zd ZdZed        Zy)TestLinalgCondz#
    Tests for np.linalg.cond.
    c                      t        d      t               fd}dt        j                  t        j                   ddddg}d	d
g}t	        | j
                  d|      D ]$  \  }}}} j                  |||      } |||       & g d}t	        | j
                  d      D ]!  \  }}} j                  |||      } ||       # dD ](  }	 j                  t        j                  |	      f       * t        j                  ddgddggt        j                        }
 ||
        ||
d       t        j                  ddgddggt        j                        }
 ||
d       t        j                         5  t        j                  ddgddggt        j                        }t        j                  dt                ||       ddd       d} j                  |t        j                   dt        j"                        f        j%                  |t        j                   dt        j                        f        j'                  t        j                  ddgt        j                  t        j(                  ggt        j                        f        j+                  t        j                  ddgddggt        j                        df       y# 1 sw Y   xY w)z%
        Test np.linalg.cond
        Tr   c                 r   t        | fi |} | fi |}j                  t        j                  |              dt        j                  | j
                        j                  z  }t        j                  j                  |||       j                         5   | fi | d d d        y # 1 sw Y   y xY wri  )
r  ra  r   r  rm  r:   rn  ro  rp  r\   r}  s        r   r  z.TestLinalgCond.test_linalg_cond.<locals>.check  r~  r  Nr   r   r   ri  r  rQ  r  )r  )r}  r  r  r  r  r   rd   gg?ignorer  r  rk  r#  r  r5  r6  r7  )r   r  r   r  r   r   rF  rw  rk   r8  r   rE   rF   rG   RuntimeWarningrS  r  r  rZ  r\  r  ru  )r/   r  psr  ri   r:   rg   r  r   r  r#  r  r^   s   `           @r   test_linalg_condzTestLinalgCond.test_linalg_cond  s~    #T";/	#" BFFRVVGQAr2  t{{D"5 "D%++D%?A!qM 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 N)r   r   r   r   r   r  r  r   r   r  r    s     KN KNr   r  c                   0    e Zd ZdZed        Zed        Zy)TestLinalgMatrixRankz*
    Tests for np.linalg.matrix_rank.
    c           	      j     t        d      t               fd}g d}t        | j                  d      D ]  \  }}} j	                  |||      } ||       d}t        dt        |      dz
        D ]M  } j	                  ||||      } j                   |      |        ||       |j                  \  }	}
d	|d
d
d
d
f<   t        j                  t        j                  |	|
            }t        j                  |      rNdt        j                  j                  |      z   dz   dt        j                  j                  |      z  z   }d|d<   n'dt        j                  j                  |      z   }d|d<   |j                  |      ||d   d
| |d   d
| f<    j                   ||      |dz
          |||       P d	|d
d
d
d
f<    j                   |      d        ||       t        j                  |      rd|d<   nd|d<    j                   ||      d        |||         j                  D ]^  }t        j                   d|      } j                   |      d        ||       d|d<    j                   |      d        ||       ` dD ]0  }dD ])  } j#                  t        j$                  |      |f       + 2 d} j'                  |t        j(                  dt        j*                        f        j-                  |t        j(                  dt        j.                        j1                  ddd      f        j3                  t        j4                  ddgt        j6                  t        j8                  ggt        j.                        f       y
)z,
        Test np.linalg.matrix_rank
        Tr   c                     t        | fi |} | fi |}t        j                  j                  ||       j	                         5   | fi | d d d        y # 1 sw Y   y xY wr   )r  r   ro  rp  r\   )r   r  r`   ra   r^   r/   s       r   r  z;TestLinalgMatrixRank.test_linalg_matrix_rank.<locals>.check  s^    )!6v6H$V$C JJ&&sH5 %%'a"6" (''s   
AA#r|  r  vIh%<=r   r  rR  Nr#                ?y+=+=r   g+=)r  )r   r   rj  rd   r  )Nr  r  r  r  r   r   r  )r   r  r   r   rF  rm   r1  rP   rs   r   r6  r7  r  r/  r  r7   r5  rw  rk   rS  r  r  r  r   r?   r\  r8  r  r  )r/   r  r  ri   r:   rg   r   r  r   r@   r9   rE  r   r,  r  r  r^   s   `               @r   test_linalg_matrix_rankz,TestLinalgMatrixRank.test_linalg_matrix_rank  sV    #T"#56
	# ; t{{D1 D% ++D%?A!H C1c$i!m,//eU/K  q1-a ww1!Q$jj1.??1%RYY^^A..4biinnQ//0A *AaDRYY^^A..A AaD,-HHUO#a&!*c!fRaj()  q#A6aS!- -0 AadGU1Xq)!Hq!*&	!&	U1c]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                    t        j                  g dg dg dg dgd      }t        j                  |      }t        d      d	        }|j	                  |d
      }t         j
                  j                  ||        ||d
      }t         j
                  j                  ||       t         j
                  j                  ||       y )Nr  r  r  r  rh   rf   Tr   c                 Z    |r| ddd d f   } t         j                  j                  |       S r  r
  r  s     r   r  z9TestLinalgMatrixRank.test_no_input_mutation.<locals>.funcT	  s+    ac1fI99((++r   Fr  rx  s         r   r  z+TestLinalgMatrixRank.test_no_input_mutationG	  s     HHn$$$& .12
 	d		, 
	, <<5)


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


""1f-


""8S1r   N)r   r   r   r   r   r  r  r  r   r   r  r    s4     bA bAH 2 2r   r  c                   &    e Zd ZdZd Zed        Zy)TestLinalgMatrixPowerz+
    Tests for np.linalg.matrix_power.
    c                      ||d   d       | j                  t        j                        5   ||  d d d        y # 1 sw Y   y xY w)Nr   r   r   r
   r   )r/   r^   r_   s      r   assert_int_exponenentz+TestLinalgMatrixPower.assert_int_exponenenti	  s7    d1gqv1124L 322s	   ;Ac                      t        d      t               fd}g d}ddgt        t        dd            z   d	d
gz   }t	        || j
                  d      D ]D  \  }}}} j                  |||      } |||       t        j                  d||      } |||       F d}	 j                  |	t        j                  dt        j                        df        j                  |	t        j                  dt        j                        df       t        j                  d      df}
d} j                  |
|        j                  |	t        j                  dt        j                        df        j                  t        j                  d      df        j!                  t        j"                  ddgddgg      df       y )NTr   c                 N   t        | |      } | |      }j                  |d       dt        j                  | j                        j
                  z  }t        j                  j                  ||||       j                         5   | |       d d d        y # 1 sw Y   y xY w)Nre   r~  r  )	r  r_  r   rm  r:   rn  ro  rp  r\   )r   pwrr`   ra   r$  r^   r/   s        r   r  z=TestLinalgMatrixPower.test_linalg_matrix_power.<locals>.checkt	  s    *1c2H3-C %%c3/bhhqww'222CJJ&&sH3S&I %%'a (''s   
BB$)r3  rj  rj  rQ  iirk  r  !   r  r  r.  r  r  rd   r   )r   rj  zinput must be a square array333333?rR  r   r   )r   r  listrm   r   r   rF  r   rk   rS  r  r  rI  rZ  r   r  rg  r8  )r/   r  r  powersri   r  r:   rg   r   r  r_   r   r^   s   `           @r   test_linalg_matrix_powerz.TestLinalgMatrixPower.test_linalg_matrix_powerp	  s   "T"#67	 )sd5b>22b"X= vt{{D9 $D#ue++D%?A!SMuE:A!SM	 :  	E!#rxx!@! D	F 	E!#rxx!@! D	F #,%s+ 	$$R&(ggb

&CQ%G	I 	""52776?C*@A 	%%ebhhQ!Q7H.I2-NOr   N)r   r   r   r   r  r   r  r  r   r   r  r  d	  s"     2P 2Pr   r  c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )	TestTracez
    Tests for np.trace.
    c                     t         t        |            t        d      t              | _         t        d      t              | _        y )NTr   )r,   r  r-   r   r  cfunc_w_offsetr  cfunc_no_offsetr.   s    r   r-   zTestTrace.setUp	  s9    i$&0c40>1sD12HIr   c                      ||       | j                  t        j                        5   ||fi | d d d        y # 1 sw Y   y xY wr   r  )r/   r^   r   r  s       r   assert_int_offsetzTestTrace.assert_int_offset	  s6    av112!v 322s	   
;Ac                      fd}g d}g dt        t        dd            z   g dz   }t        || j                  d      D ]a  \  }}}} j	                  |||      } |||       |d	k(  r ||       t        j                  d
||      } |||       |d	k(  sZ ||       c d}	 j                  |	 j                  t        j                  dt
        j                        dfd        j                  |	 j                  t        j                  dt
        j                        fd        j                   j                  t        j                  d      d       y )Nc                 |   d|v rt        | fi |}j                  }nt        | fi |}j                  } || fi |}dt	        j
                  | j                        j                  z  }t        j                  j                  ||||       j                         5   || fi | d d d        y # 1 sw Y   y xY w)Nr  rj  r  )r  r  r  r  r   rm  r:   rn  ro  rp  r\   )r   r  r`   r^   ra   r$  r/   s         r   r  z#TestTrace.test_trace.<locals>.check	  s    6!'4V4++1!>v>,,$V$Cbhhqww'222CJJ&&sH3S&I %%'a"6" (''s   
B22B;r|  )iiir  rk  )r  r  r*  r  )r  r   r  r.  r  rd   r   Fr  r  )r  rm   r   r   rF  r   rk   rZ  r  r  r   r  r  )
r/   r  r  offsetsri   r  r:   rg   r   r  s
   `         r   
test_tracezTestTrace.test_trace	  sA   	#& ; "DsB$88<G wT: 'D&%++D%?A!F#{auE:A!F#{a ;  	$$R)<)<&(ggb

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

&C%Eu	N 	" # 	 	%r   c                 6   t        dd      d        }t        j                  dt        j                        } ||       | j	                  t
              5 } |d       ddd       t        j                        }| j                  d|       y# 1 sw Y   1xY w)	z
Issue 2314z(optional(float64[:,:]),)Tr   c                 ,    t        j                  |       S r   r  r   s    r   testedz5TestTrace.test_trace_w_optional_input.<locals>.tested	  s    88A;r   r  rd   Nz(expected array(float64, 2d, A), got None)	r   r   r  r   r   	TypeErrorrN   r   rP   )r/   r  r   r   errmsgs        r   test_trace_w_optional_inputz%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   s   @r   r  r  	  s    J0%dMr   r  c                   Z    e Zd Z eg d      Z eg d      Zg dZd Zd Zd Z	d Z
d Zy	)

TestBasics)rh   re   re   rh   )re   rh   re   rh   )r}  r  r  )r~  r  )r   r5  rF  c           	      @   | j                  ||t        j                  dgggt        j                        t        j                  d      fd       | j                  ||t        j                  d      t        j                  dgggt        j                        fd       y )Nr   rd   F)r  r   r8  r   r  )r/   r  r^   s      r   _assert_wrong_dimzTestBasics._assert_wrong_dim
  sv    ''A3%

;RWWQZH%	Q''
BHHseWBJJ$GH%	Qr   c                     t        |t              s|S t        |      dk(  r| j                  |d   |      S | j                  |d   |d   z  |      j	                  ||      S )Nr   r   rf   )r2  r^  rJ   r<   r?   )r/   ri   r:   rg   s       r   
_gen_inputzTestBasics._gen_input

  sm    $&K4yA~))$q'599))Gd1g%"7 # ''r   c                 
   | j                  ||t        | j                              }| j                  ||t        | j                              }t	        j
                  |      r|dz   }t	        j
                  |      r|dz   }||fS )Nr  )r  r+  order1order2r   r  )r/   size1size2r:   r   r   s         r   
_get_inputzTestBasics._get_input
  sk    OOE5$t{{*;<OOE5$t{{*;<??1BA??1BA1vr   c                 (   	  t        d      t              		 fd}t         j                        }t	         j
                   j
                        D ]  \  }}t        |      } j                  |||      \  }} |||       t        j                  t        j                  |      j                  t        j                  |      j                  ft        j                  |      j                        } ||||         j                  d	       y )NTr   c                     t        | |      } | |      }dt        j                  t        j                  |       j                        j
                  z  }t        j                  j                  ||||       d|v rS | |fi |}t        j                  j                  ||||       t        j                  j                  |d   |||       j                         5   | |fi | d d d        y # 1 sw Y   y xY w)Nrj  r  r!   )	r  r   rm  asarrayr:   rn  ro  rp  r\   r   r   r  r`   ra   r$  r^   r/   s         r   r  z$TestBasics.test_outer.<locals>.check#
  s     $Aq)H1+Cbhhrzz!}223>>>CJJ&&sH3S&I Aq+F+

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

**6%=(03# + ? %%'a%f% (''s    C44C=rd   r    r  )r   r  r   r   r   r  r+  r  r   rk   r  ri   r:   r  )
r/   r  dtsr  r  r:   r   r   r  r^   s
   `        @r   
test_outerzTestBasics.test_outer 
  s    "T"<0	&* DKK #DJJ

;LE5IE__UE59FQ!QK"**Q-,,bjjm.@.@A"$**Q-"5"57A!QA < 	w.r   c                    	  t        d      t              		 fd}t         j                   j                   j                        D ]%  \  }}} j                  |||      \  }} |||       '  j                  d	       t        j                  d      d d d   t        j                  d      d d d   f}d} j                  	||t        j                         y )	NTr   c                 P   t        | |      } | |      }dt        j                  t        j                  |       j                        j
                  z  }t        j                  j                  ||||       j                         5   | |       d d d        y # 1 sw Y   y xY w)Nrj  r  )	r  r   rm  r  r:   rn  ro  rp  r\   r  s         r   r  z#TestBasics.test_kron.<locals>.checkF
  s    "1a(H1+Cbhhrzz!}223>>>CJJ&&sH3S&I %%'a (''s   	
BB%r  rk  r   zonly supports 'C' or 'F' layoutrf  )r   r  r   r  r   r  r  r   rk   rI  r
   r   )
r/   r  r  r  r:   r   r   r_   r   r^   s
   `        @r   	test_kronzTestBasics.test_kronC
  s    "T";/
	 

DJJ<  E5%__UE59FQ!QK = 	vu-SqS!288B<!#45/%s0B0BCr   N)r   r   r   r   r  r  r  r  r  r  r  r  r  r   r   r  r  	  s;    '(F'(F ?EQ
'!/FDr   r  c                       e Zd Zd Zy)TestHelpersc                     ddl m  fd}t        fd       }ddg}t        j                  g}ddg} ||t        j
                  |||       t        fd	       }d
dg}t        j                  g}ddg}d } ||||||       y )Nr   )_copy_to_fortran_orderc                 X   t        |||      D ]  \  }}}t        j                  t        j                  |            j	                  ||      } | |      }	
j                   ||      |	       
j                  |j                  j                  |	j                  j                          y )Nrf   )	r   r   r4   prodr?   r]   assertNotEqualctypesdata)udtexpectfnshapesr   r9  rs   r:   rg   r   r  r/   s             r   r  z5TestHelpers.test_copy_to_fortran_order.<locals>.checkb
  s    '.vvv'F#ueIIbggen-55e55IF''Q7##AHHMM188==A (Gr   c                      |       S r   r  )r   r  s    r   direct_callz;TestHelpers.test_copy_to_fortran_order.<locals>.direct_calll
  s    )!,,r   )r   r   )r   r   rj  re   rh   c                 *    | d d d   d   } |      S Nr   r   r  )r   slicedr  s     r   slice_to_anyz<TestHelpers.test_copy_to_fortran_order.<locals>.slice_to_anyv
  s!     ssVAYF)&11r   )r   r   r   )r   r   r   rj  c                 B    | d d d   d   }t        j                  |      S r  )r   asfortranarray)r   r  s     r   expected_slice_to_anyzETestHelpers.test_copy_to_fortran_order.<locals>.expected_slice_to_any
  s$    ssVAYF$$V,,r   )numba.np.linalgr  r   r   intpr  )	r/   r  r  r  r   r9  r  r  r  s	   `       @r   test_copy_to_fortran_orderz&TestHelpers.test_copy_to_fortran_order_
  s    :	B 
	- 
	- )$''sk2,,fffE 
	2 
	2
 \*''s	-
 	l1666Jr   N)r   r   r   r  r  r   r   r  r  ^
  s    &Kr   r  __main__r  )r   )gV瞯<r   r4  )Jr   r*   	itertoolsr   r   sysrE   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  r  r  r  r  rz  r  r  r  r  r  r  r  rN  rY  rg  rz  r  r  r  r  r  r  r   mainr  r   r   <module>r     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HMMO r   