o
    ibw                    @   s  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	d
 Zdd Zdd ZG dd deeZdd Z dd Z!dd Z"dd Z#dd Z$dd Z%ddddZ&dd  Z'ded"d#Z(d$d% Z)dfd'd(Z*d)d* Z+d+d, Z,dgd-d.Z-dgd/d0Z.dgd1d2Z/d3d4 Z0dhd5d6Z1d7d8 Z2dgd9d:Z3d;d< Z4G d=d> d>eeZ5G d?d@ d@eZ6G dAdB dBe5Z7G dCdD dDe5Z8G dEdF dFe5Z9G dGdH dHe5Z:G dIdJ dJe5Z;G dKdL dLe5Z<G dMdN dNe<Z=G dOdP dPe<Z>G dQdR dRe5Z?G dSdT dTe5Z@G dUdV dVe<ZAG dWdX dXe5ZBG dYdZ dZe<ZCG d[d\ d\e5ZDG d]d^ d^e5ZEG d_d` d`e<ZFG dadb dbeZGeHdckrgeI  dS dS )i    N)productcycle)NumberIntegral)jitnjittypeof)errors)TestCasetagneeds_lapack
needs_blas
_is_armv7lEnableNRTStatsMixin   )matmul_usecasec                 C      t | |S Nnpdotab r   f/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_linalg.pydot2      r   c                 C      t j| ||dS Noutr   r   r   r!   r   r   r   dot3      r#   c                 C   r   r   )r   vdotr   r   r   r   r%      r   r%   c                       s   e Zd ZdZejejejejfZ	 fddZ
dd Zdd Zejdd	 Zd
d Zdd Zdd Zd,ddZd-ddZdd Zedd Zedd Zdd Zedd Zd d! Zed"d# Zed$d% Zed&d' Zed(d) Zed*d+ Z   Z!S ).TestProductz!
    Tests for dot products.
    c                       t   tt|   d S r   )gccollectsuperr&   setUpself	__class__r   r   r+   &      zTestProduct.setUpc                 C   s:   t |}t|t jr|d d |S |d d |S Ny      ?      y               @g      ?r   r   arange
issubclassZcomplexfloatingastyper-   ndtypebaser   r   r   sample_vector+      
zTestProduct.sample_vectorc                 C   s   |  || |||fS r   )r:   reshape)r-   mr7   r8   r   r   r   sample_matrix4   s   zTestProduct.sample_matrixc                 c   s    t jdd}t dtj dV  W d   n1 sw   Y  | t|d | |d jtj | 	dt
|d j | |d j|jj | |d j|jjd  dS )zB
        Check performance warning(s) for non-contiguity.
        T)recordalwaysNr   r   zfaster on contiguous arrays)warningscatch_warningssimplefilterr	   ZNumbaPerformanceWarningZassertGreaterEquallenassertIscategoryassertInstrmessageassertEqualfilename__code__co_filenamelinenoco_firstlineno)r-   pyfuncwr   r   r   check_contiguity_warning7   s   z$TestProduct.check_contiguity_warningc                 C   sR   |    || }|| }| j||dd ~~W d    d S 1 s"w   Y  d S )NTZignore_sign_on_zero)assertNoNRTLeakassertPreciseEqual)r-   rP   cfuncargsexpectedgotr   r   r   
check_funcF   s   
"zTestProduct.check_funcc                 C   s   |j d |j d }|j |j }tj|tjd}t|jd D ]}||||  j|jd}|jj	r4 nqt
d|jjrGtj||jdd}n	tj||jdd}|d d  |d d < |jj	s`J |S )Nr   r8   zCould not obtain aligned arrayCorderF)sizeitemsizer   emptyZuint8rangeviewr8   flagsZaligned	Exceptionc_contiguousr<   shape)r-   Zarrr`   Zdatasizetmpinewr   r   r   _aligned_copyN   s   zTestProduct._aligned_copyc                 C   s   t r| jntj}|  1 ||}||}| ||d|i| | ||d|i| | j||dd ~~W d    d S 1 s@w   Y  d S )Nr!   TrS   )r   rl   r   copyrT   rE   rU   )r-   rP   rV   rW   r!   copierrX   rY   r   r   r   check_func_outc   s   
"zTestProduct.check_func_outFc                 C   sT   |  t}||  W d    n1 sw   Y  |rdnd}| |t|j d S )Nzincompatible output array sizezincompatible array sizes)assertRaises
ValueErrorrG   rH   	exception)r-   rV   rW   is_outraisesmsgr   r   r   assert_mismatching_sizesm   s   
z$TestProduct.assert_mismatching_sizesnp.dot()c                 C   sP   |  tj}||  W d    n1 sw   Y  | d|f t|j d S )Nz)%s arguments must all have the same dtype)rp   r	   TypingErrorrG   rH   rr   )r-   rV   rW   	func_namert   r   r   r   assert_mismatching_dtypest   s   
z%TestProduct.assert_mismatching_dtypesc              
   C   s   d}t dd|}| jD ]*}| ||}| ||}| ||||f | |||d d d |d d d f q| |d tj}| |tj}| |||f | |tj}| |tj}| j|||f|d d S )N   TZnopythonr   )ry   )	r   dtypesr:   rZ   r   float64rv   float32rz   )r-   rP   ry   r7   rV   r8   r   r   r   r   r   check_dot_vv{   s   
(zTestProduct.check_dot_vvc                 C      |  td dS )z/
        Test vector * vector np.dot()
        rw   N)r   r   r,   r   r   r   test_dot_vv      zTestProduct.test_dot_vvc                 C   r   )z 
        Test np.vdot()
        z	np.vdot()N)r   r%   r,   r   r   r   	test_vdot   r   zTestProduct.test_vdotc                    s6   fdd}t dd|}|d urt dd|}dD ]L\}}|||D ]\}	}
 |||	|
f  |||
|	jf q#|d urf|||D ]!\}	}
tj||	jd} |||	|
f|  |||
|	jf| qDqd\}} ||d tj}	 	|tj}
 
||	|
f  
||
|	jf |d urt|tj} 
||	|
|f  
||
|	j|f  ||tj}	 	|tj}
t|d tj} j
||	|
|fdd	  j
||
|	j|fdd	  ||tj}	 	|tj}
 ||	|
f| |d ur ||tj}	 	|tj}
t|tj} ||	|
|f| d S d S )
Nc                 3   s    dD ]}  | |tjj|d} |tj}||fV  q jD ]}  | ||} ||}||fV  q!|d d d |d d d fV  d S NCFr]   r}   )r>   r   r   rm   r:   r~   )r=   r7   r^   r   r   r8   r,   r   r   samples   s   
"z)TestProduct.check_dot_vm.<locals>.samplesTr|   )   r{   )r{   r   )r   r{   r[   r   r   rs   )r   rZ   Tr   rb   r8   ro   r>   r   r:   rv   r   rz   )r-   pyfunc2pyfunc3ry   r   cfunc2cfunc3r=   r7   r   r   r!   r   r,   r   check_dot_vm   sJ   
zTestProduct.check_dot_vmc                 C      |  ttd dS )zC
        Test vector * matrix and matrix * vector np.dot()
        rw   N)r   r   r#   r,   r   r   r   test_dot_vm      zTestProduct.test_dot_vmc                    s0   fdd}t dd|}|d urt dd|}dD ]]\}}}	||||	D ]\}
} |||
|f  |||j|
jf q%|d urw||||	D ].\}
}tj||f|
jd} |||
|f| tj||f|
jd} |||j|
jf| qHqd\}}}	 ||	d tj}
 |	|tj} 	||
|f |d urt||ftj} 	||
||f  ||	tj}
 |	|tj}t||d ftj} j	||
||fdd	  ||	tj
}
 |	|tj} ||
|f| |d ur ||	tj}
 |	|tj}t||ftj
} ||
||f| d S d S )
Nc                 3   s    t ddD ]!\}} | |tjj|d} ||tjj|d}||fV  q jD ]} | ||} |||}||fV  q+|d d d |d d d fV  d S r   )r   r>   r   r   rm   r~   )r=   r7   kZorder_aZorder_br   r   r8   r,   r   r   r      s   
"z)TestProduct.check_dot_mm.<locals>.samplesTr|   )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   rb   r8   ro   r>   r   rv   r   rz   )r-   r   r   ry   r   r   r   r=   r7   r   r   r   r!   r   r,   r   check_dot_mm   sF   

zTestProduct.check_dot_mmc                 C   r   )z/
        Test matrix * matrix np.dot()
        rw   N)r   r   r#   r,   r   r   r   test_dot_mm  r   zTestProduct.test_dot_mmc                 C   r   )z&
        Test vector @ vector
        '@'N)r   r   r,   r   r   r   test_matmul_vv   r   zTestProduct.test_matmul_vvc                 C      |  tdd dS )z:
        Test vector @ matrix and matrix @ vector
        Nr   )r   r   r,   r   r   r   test_matmul_vm'  r   zTestProduct.test_matmul_vmc                 C   r   )z&
        Test matrix @ matrix
        Nr   )r   r   r,   r   r   r   test_matmul_mm.  r   zTestProduct.test_matmul_mmc           	      C   sP  d\}}}t j}| |||d d d }| |||d d d }t ||f|}tddt}| |j ||| W d    n1 sEw   Y  tddt}| |j |||| W d    n1 shw   Y  | 	||d d d }| 	||d d d }tddt
}| |j ||| W d    d S 1 sw   Y  d S )Nr   r}   Tr|   )r   r   r>   rb   r   r   rR   py_funcr#   r:   r%   )	r-   r=   r   r7   r8   r   r   r!   rV   r   r   r   test_contiguity_warnings5  s&   
"z$TestProduct.test_contiguity_warnings)F)rw   )"__name__
__module____qualname____doc__r   r   r   
complex128	complex64r~   r+   r:   r>   
contextlibcontextmanagerrR   rZ   rl   ro   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   r   r.   r   r&      s@    	





8
>



r&   c                 C      t j| S r   r   linalginvr   r   r   r   invert_matrixN  r   r   c                 C   r   r   )r   r   choleskyr   r   r   r   cholesky_matrixR  r   r   c                 C   r   r   )r   r   eigr   r   r   r   
eig_matrixV  r   r   c                 C   r   r   )r   r   eigvalsr   r   r   r   eigvals_matrixZ  r   r   c                 C   r   r   )r   r   eighr   r   r   r   eigh_matrix^  r   r   c                 C   r   r   )r   r   eigvalshr   r   r   r   eigvalsh_matrixb  r   r   c                 C      t j| |S r   r   r   svd)r   full_matricesr   r   r   
svd_matrixf     r   c                 C   r   r   r   r   qrr   r   r   r   	qr_matrixj  r   r   r}   c                 C   s   t j| ||S r   r   r   lstsq)ABrcondr   r   r   lstsq_systemn  r$   r   c                 C   r   r   r   r   solve)r   r   r   r   r   solve_systemr  r   r   V瞯<c                 C   r   r   r   r   pinv)r   r   r   r   r   pinv_matrixv  r   r   c                 C   r   r   r   r   slogdetr   r   r   r   slogdet_matrixz  r   r   c                 C   r   r   )r   r   detr   r   r   r   
det_matrix~  r   r   c                 C   r   r   )r   r   norm)r   ordr   r   r   norm_matrix  r   r   c                 C   r   r   )r   r   cond)r   pr   r   r   cond_matrix  r   r   c                 C   r   r   r   r   matrix_rank)r   tolr   r   r   matrix_rank_matrix  r   r   c                 C   r   r   )r   r   matrix_power)r   r7   r   r   r   matrix_power_matrix  r   r   c                 C   r   r   r   trace)r   offsetr   r   r   trace_matrix  r   r   c                 C   
   t | S r   r   r   r   r   r   trace_matrix_no_offset  s   
r   c                 C   r   r   )r   outerr"   r   r   r   outer_matrix  r$   r   c                 C   r   r   )r   kronr   r   r   r   kron_matrix  r   r   c                       s   e Zd ZdZejejejejfZ	 fddZ
dd Z	dddZefd	d
Zdd Zdd ZdddZdd Zdd Zdd ZdddZdd Zdd Z  ZS ) TestLinalgBasezU
    Provides setUp and common data/error modes for testing np.linalg functions.
    c                    r'   r   )r(   r)   r*   r   r+   r,   r.   r   r   r+     r0   zTestLinalgBase.setUpc                 C   s:   t |}t|t jr|d d |S |d d |S r1   r2   r6   r   r   r   r:     r;   zTestLinalgBase.sample_vectorNc                 C   s  d}t |dkrtd|dvrtd|tjtjtjtjfvr$td|dur0|dur0td|du r6|}|d	k r>td
tjd |\}}|dk sP|dk rTtdt	||}	|du r`|	}
n|dkrhtdt
|tsqtd|}
||	kr{td|d	ks|d	kr||krtdt||}| ||||}|S | || |||}tj|\}}| || |ddd ||}tj|\}}t|||
}t||f}tt||}|||d d|
 |d	 d|
 f< tt|||j}tj|||d}|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.)r_   r\    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}   r8   r^   )rD   rq   r   r   r   r   r   randomseedmin
isinstancer   maxr:   r<   r   r   Zlinspacezerosnonzeroeyer   r   array)r-   r`   r8   r^   rank	conditionZd_condr=   r7   minmnrvZmaxmnQri   U_VsvSidxr   r   r   specific_sample_matrix  s\   


"$z%TestLinalgBase.specific_sample_matrixc                 C   sH   |  |}||  W d    n1 sw   Y  | |t|j d S r   )rp   rG   rH   rr   )r-   rV   rW   ru   errrt   r   r   r   assert_error  s   
zTestLinalgBase.assert_errorc                 C      d}|  |||tjj d S )Nz.Last 2 dimensions of the array must be square.r  r   r   ZLinAlgErrorr-   rV   rW   ru   r   r   r   assert_non_square     z TestLinalgBase.assert_non_squarec                 C      d| }|  |||tj d S )Nz9np.linalg.%s() only supported on float and complex arraysr  r	   rx   r-   namerV   rW   ru   r   r   r   assert_wrong_dtype     z!TestLinalgBase.assert_wrong_dtypeTc                 C   .   |rdnd}d||f }|  |||tj d S )N	np.linalgr   z$%s.%s() only supported on 2-D arraysr  r-   r  rV   rW   Z	la_prefixprefixru   r   r   r   assert_wrong_dimensions     z&TestLinalgBase.assert_wrong_dimensionsc                 C   r  )Nz$Array must not contain infs or NaNs.r  r  r   r   r   assert_no_nan_or_inf  r  z#TestLinalgBase.assert_no_nan_or_infc                 C   s   t |tr|D ]}| || qdS t |tsG|jj}|jj}d}| ||B | d}|dkr7| || dS |dkrC| || dS tddS )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.r\   r_   zUnknown contigN)	r   tupleassert_contig_sanityr   re   rg   f_contiguous
assertTruerq   )r-   rY   Zexpected_contigr   Zc_contigZf_contigru   r   r   r   r"  "  s    

z#TestLinalgBase.assert_contig_sanityc                 C   s   d}| j |||tjjd d S )Nz(Matrix is singular to machine precision.r  r  r  r   r   r   assert_raise_on_singularG  s   z'TestLinalgBase.assert_raise_on_singularc                 C   sv   |  |jd |jd  tj|jd |jd}dt|jj }|du r(d| }|du r0d| }tj|||| dS )zE
        Checks if a matrix is equal to the identity matrix.
        r}   r[      N
   d   )	rJ   rh   r   r   r8   finfo
resolutiontestingassert_allclose)r-   rY   rtolatolr   r,  r   r   r   assert_is_identity_matrixK  s   z(TestLinalgBase.assert_is_identity_matrixc                 C   s   d}|  |||t dS )z5
        For use in norm() and cond() tests.
        z Invalid norm order for matrices.N)r  rq   r  r   r   r   assert_invalid_norm_kind[  s   z'TestLinalgBase.assert_invalid_norm_kindc                 C   r  )NzArrays cannot be emptyr  r  r   r   r   assert_raise_on_emptyb  r  z$TestLinalgBase.assert_raise_on_empty)NNT)r   r   r   r   r   r   r   r   r   r~   r+   r:   r  rq   r  r  r  r  r   r"  r&  r1  r2  r3  r   r   r   r.   r   r     s"    

T
%
r   c                   @   s   e Zd ZdZdd ZdS )TestTestLinalgBasez
    The sample matrix code TestLinalgBase.specific_sample_matrix()
    is a bit involved, this class tests it works as intended.
    c                    s  t d g d}t| jdD ]\}}}|\}}t||} |||}|j| tj	|| |dkrW|d }	 j||||	d}|j| tj	||	 dt
|j }
 |||}|j| tjjtj|d|
|
d |dkrd	} j||||d
}|j| tjjtj|d	|
|
d qtf fdd	}t}d}|dtjdf|td W d    n1 sw   Y  d}|dtjdf|td d}|dtjdf|td d}|dtjdf|td d}|dtjdddf|td d}|dtjdd df|td d}|dtjdf|td d}|dtjddf|td d}|dtjddf|td d}|dtjdd d f|td d!}|dtjdd"f|td d S )#Nr     r      r(  r(  r:  r{   r{   r   r8  FCr   r  r(  r   r/  r0        $@r  c                    sJ    |} j|   W d    n1 sw   Y  |t|j d S r   )rp   r  rG   rH   rr   )rW   ru   r  rt   instr-   r   r   check_error  s   zCTestTestLinalgBase.test_specific_sample_matrix.<locals>.check_errorblankr   r_   r%  r   r   r   zr   r   r   r}   r   )r   r   r   r   r   )r   r{   r)  r   g      ?)r   r   r~   r   r  rJ   rh   r   r   r   r+  r,  r-  r.  r   rq   rp   AssertionErrorr   int32)r-   sizesr`   r8   r^   r=   r7   r  r   r  r,  r  rE  rt   ru   r   rC  r   test_specific_sample_matrixm  st   
z.TestTestLinalgBase.test_specific_sample_matrixN)r   r   r   r   rM  r   r   r   r   r5  g  s    r5  c                   @   (   e Zd ZdZedd Zedd ZdS )TestLinalgInvz"
    Tests for np.linalg.inv.
    c                    s   d}t ddt  fdd}tjdD ]\}}||f||}|| q|td  tdf 	d	 tjd
tj
df d	 tdf  td
f dS )z$
        Test np.linalg.inv
        r)  Tr|   c                    s   t | } | }|d d}ztjj||dd W n ty&   d}Y nw |r4t|| }|    |  W d    d S 1 sHw   Y  d S )Nr_   Fr)  ZnulpT)	r   r"  r   r-  assert_array_almost_equal_nulprJ  r   r1  rT   )r   kwargsrX   rY   use_reconstructionrecrV   r-   r   r   check  s"   




"z,TestLinalgInv.test_linalg_inv.<locals>.checkr   r   r   r   r   r   r   r[   N)r   r   r   r~   r  r   rb   r  onesr  rK  r  r&  r   )r-   r7   rV  r8   r^   r   r   rU  r   test_linalg_inv  s   
zTestLinalgInv.test_linalg_invc                 C      t jg dg dg dg dgdd}t |}tddd	d
 }||d}t j|| ||d}t j|| t j|| d S )Nr   r{   r   r8  r   r   r{   	   rI  r   r   r   r'  r      r_   r]   Tr|   c                 S   $   |r| ddd d f } t j| S Nr   r   r   Xtestr   r   r   ainv     z2TestLinalgInv.test_no_input_mutation.<locals>.ainvFr   r   rm   r   r   r-  r.  )r-   rf  X_origrh  rX   rY   r   r   r   test_no_input_mutation	     



z$TestLinalgInv.test_no_input_mutationN)r   r   r   r   r   rZ  rl  r   r   r   r   rO    s    
2rO  c                   @   s,   e Zd ZdZdd Zdd Zedd ZdS )	TestLinalgCholeskyz'
    Tests for np.linalg.cholesky.
    c           	      C   sj   t jd t j||}t j|\}}t d|d }t t |jt 	||}t j
|||d}|S )Nr   r   r   )r   r   r   randr   r   r3   r   r   diagr   )	r-   r=   r8   r^   r   qr  Lr  r   r   r   r>   '  s   z TestLinalgCholesky.sample_matrixc                 C   r  )Nz Matrix is not positive definite.r  r  r   r   r   assert_not_pd3  r  z TestLinalgCholesky.assert_not_pdc                    s   d}t ddt  fdd}tjdD ]\}}|||}|| q|td d} tjd	tj	d
f 
| tjdtjd
f | tjdtj	d
f  tjdtj	d
ddf dS )z)
        Test np.linalg.cholesky
        r)  Tr|   c                    s   t | } | }d}|d ztjj||dd W n ty&   d}Y nw |rFt|t|j}dt	| j
j }tjj| |||d    |  W d    d S 1 sZw   Y  d S )NFr\   r)  rP  Tr(  r@  )r   r"  r   r-  rQ  rJ  r   conjr   r+  r8   r,  r.  rT   )r   rX   rY   rS  rT  r,  rU  r   r   rV  ?  s.   



"z6TestLinalgCholesky.test_linalg_cholesky.<locals>.checkr>  rW  r   r   r[   rX  r   r   N)r   r   r   r~   r>   r   rb   r  rY  r   r  rK  r  rs  r<   )r-   r7   rV  r8   r^   r   rnr   rU  r   test_linalg_cholesky7  s$   
z'TestLinalgCholesky.test_linalg_choleskyN)r   r   r   r   r>   rs  r   rv  r   r   r   r   rn  "  s    rn  c                   @   sp   e Zd ZdZdd Zdd Zdd Z	dd	d
Zedd Z	edd Z
edd Zedd Zedd ZdS )TestLinalgEigenSystemsz*
    Tests for np.linalg.eig/eigvals.
    c                 C   s   |  ||}t|}tt|jd |jd d}|dd  ||< tt|jd |jd d}|d d ||< tj|||d}|S )Nr   r   r}   r   )r:   r   rp  r   r   rh   r   )r-   r=   r8   r^   vr  r  r   r   r   r>   z  s   
  z$TestLinalgEigenSystems.sample_matrixc                 C   s   |d }|  ||| d S )Nz+() argument must not cause a domain change.)r  r  r   r   r   assert_no_domain_change  s   z.TestLinalgEigenSystems.assert_no_domain_changec                    s    fdd}|S )Nc               	      s   j |  } |  }| d }t|t| d}t|tr)d}t| n|j |d d}tt|D ]}ztj	j
|| || dd W q> tyZ   d}Y q>w dt|jj }|r|r|\}}	d d	krtt|jd |jd
 d}
tt|jd |jd
 d
} |   t||
 ||< tt||t|jd < t||	}t|	t|}tj	j|j|j||d t|	rtj	j|j|j||d ntj	jt|t|||d    |   W d    d S 1 sw   Y  d S )Nr   FTr_   r)  rP  r(  r}   hr   r@  )r   rJ   rD   r   r!  ndimr"  rc   r   r-  rQ  rJ  r+  r8   r,  r   r   rh   rt  realrp  Zdiag_indicesr   r.  iscomplexobjimagsortrT   )rW   rX   rY   r   Zres_is_tuplerS  r   r,  rQ   rx  ZidxlZidxulhsrhsrV   expected_res_lenr  r-   r   r   rV    sl   


   


$z3TestLinalgEigenSystems._check_worker.<locals>.checkr   )r-   rV   r  r  check_for_domain_changerV  r   r  r   _check_worker  s   \z$TestLinalgEigenSystems._check_workerNc              	   C   s`  d}t dd|}| ||||}t| jdD ]\}}	| |||	}
||
 qtjtjfD ]F}|tjd|d | 	|tj
d|df | ||tj
dtjdf | ||tj
d|df | |tjd	d
gtjtjgg|df q-|rtddgddgg}||tj ||\}}| t|j tjtjfD ]}| ||||f qdS dS )z$
        Test np.linalg.eig
        r)  Tr|   r>  rW  r[   r   rX  r          @r   r'  r   N)r   r  r   r~   r>   r   r   r   rb   r  rY  r  rK  r  r   r   infnanr5   r   r$  anyr~  r   ry  )r-   r  funcr  r  r7   rV   rV  r8   r^   r   tyr   lr  r   r   r   checker_for_linalg_eig  s:   

z-TestLinalgEigenSystems.checker_for_linalg_eigc                 C      |  dtdd d S )Nr   r   T)r  r   r,   r   r   r   test_linalg_eig'     z&TestLinalgEigenSystems.test_linalg_eigc                 C   r  )Nr   r   T)r  r   r,   r   r   r   test_linalg_eigvals+  r  z*TestLinalgEigenSystems.test_linalg_eigvalsc                 C   r  )Nr   r   F)r  r   r,   r   r   r   test_linalg_eigh/  r  z'TestLinalgEigenSystems.test_linalg_eighc                 C   r  )Nr   r   F)r  r   r,   r   r   r   test_linalg_eigvalsh3  r  z+TestLinalgEigenSystems.test_linalg_eigvalshc              
      s   dD ]w}|\}}}t tj| tdd fdd}| ||||}tjtjfD ]P}| j |d? tjg dg dg d	g d
gd|d}t	|}	|
|d}
tj||	 ||d}tj||	 ||d W d    n1 ssw   Y  q(qd S )N))r   r   T)r   r   T)r   r   F)r   r   FTr|   c                    s    |r| ddd d f }  | S rd  r   re  methr   r   r  D  s   z;TestLinalgEigenSystems.test_no_input_mutation.<locals>.func)r  r8   )rA  r   r   r   )r   r`  r   r   )r   r   rb  r   )r   r   r   r8  r_   )r^   r8   F)getattrr   r   r   r  r   r   ZsubTestr   rm   r   r-  r.  )r-   cr=   ZnoutZdomain_changer  rV  r8   rf  rk  rX   rY   r   r  r   rl  7  s2   



z-TestLinalgEigenSystems.test_no_input_mutationr   )r   r   r   r   r>   ry  r  r  r   r  r  r  r  rl  r   r   r   r   rw  u  s"    a
>



rw  c                   @   s0   e Zd ZdZdd Zedd Zedd ZdS )	TestLinalgSvdz"
    Tests for np.linalg.svd.
    c                 C   s   |\}}}t t|D ]}| || j|| j qt|jd |jd f}t|| tt|||}	t|j	j
}
tjj||	d|
 d|
 d d S )Nr   r   r)  r*  r@  )rc   rD   rJ   rh   r   r   Zfill_diagonalr   r+  r8   r,  r-  r.  )r-   r   rY   rX   ur	  vtr   srT  r,  r   r   r   check_reconstructionm  s   

z"TestLinalgSvd.check_reconstructionc                    s   t ddt  fdd}g d}d}t|j|dD ]\}}}}|||}|||d qd	}	|	 tjd
tjdf 	|	 tjdtj
df  tjddgtjtjggtj
df dD ]}
t|
df} | qedS )z$
        Test np.linalg.svd
        Tr|   c              	      s   t | fi |} | fi |}t|t| t|d |d d}tt|D ]}ztjj|| || dd W q0 tyL   d}Y q0w |rV	| || 
   | fi | W d    d S 1 snw   Y  d S )Nr{   r_   Fr)  rP  T)r   rJ   rD   r"  rc   r   r-  rQ  rJ  r  rT   )r   rR  rX   rY   rS  r   rU  r   r   rV    s&   

"z,TestLinalgSvd.test_linalg_svd.<locals>.check)r7  )r8  r(  )r(  r8  r<  r=  )TFr>  )r   r   rX  r[   r)  r   r  r   r   r   r   rW  N)r   r   r   r~   r  r  r   rY  rK  r  r   r   r   r  r  rb   r3  )r-   rV  rL  r   r`   r8   Zfmatr^   r   ru  szrW   r   rU  r   test_linalg_svd  s0   zTestLinalgSvd.test_linalg_svdc                 C   s   t jg dg dg dg dgdd}t |}tddd	d
 }||d}t j|| ||d}t j|| zt||D ]\}}t j|| q@W d S  ty_   | 	||| Y d S w )Nr\  r]  r_  ra  r_   r]   Tr|   c                 S   rc  rd  r   re  r   r   r   r    ri  z2TestLinalgSvd.test_no_input_mutation.<locals>.funcF)
r   r   rm   r   r   r-  r.  ziprJ  r  r-   rf  rk  r  rX   rY   Ze_aZg_ar   r   r   rl    s*   



z$TestLinalgSvd.test_no_input_mutationN)r   r   r   r   r  r   r  rl  r   r   r   r   r  b  s    

Cr  c                   @   rN  )TestLinalgQrz!
    Tests for np.linalg.qr.
    c           	         s   t ddt  fdd}g d}t|jdD ]\}}}|||}|| qd}| tjdtjd	f 	| tjd
tj
d	f  tjddgtjtjggtj
d	f dD ]} t|f q_dS )z#
        Test np.linalg.qr
        Tr|   c           
   	      s^  t | fi |} | fi |}t|t| t|d |d d}tt|D ]}ztjj|| || dd W q0 tyL   d}Y q0w |r|\}}tt|D ]}|| j	|| j	 qYt
||}t| jj}	tjj| |d|	 d|	 d t
t|j|    | fi | W d    d S 1 sw   Y  d S )	Nr   r_   Fr)  rP  Tr*  r@  )r   rJ   rD   r"  rc   r   r-  rQ  rJ  rh   r   r+  r8   r,  r.  r1  	conjugater   rT   )
r   rR  rX   rY   rS  r   rq  rrT  r,  rU  r   r   rV    s<   

"z*TestLinalgQr.test_linalg_qr.<locals>.checkr6  r>  r   rX  r[   r)  r   r  r  N)r   r   r   r~   r  r  r   rY  rK  r  r   r   r   r  r  r3  rb   )	r-   rV  rL  r`   r8   r^   r   ru  r  r   rU  r   test_linalg_qr  s,   7
zTestLinalgQr.test_linalg_qrc                 C   s   t jg dg dg dg dgdd}t |}tddd	d
 }||d}t j|| ||d}t j|| t||D ]\}}t j|| q?d S )Nr\  r]  r_  ra  r_   r]   Tr|   c                 S   rc  rd  r   re  r   r   r   r  I  ri  z1TestLinalgQr.test_no_input_mutation.<locals>.funcF)r   r   rm   r   r   r-  r.  r  r  r   r   r   rl  @  s"   



z#TestLinalgQr.test_no_input_mutationN)r   r   r   r   r   r  rl  r   r   r   r   r    s    
Xr  c                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )TestLinalgSystemszu
    Base class for testing "system" solvers from np.linalg.
    Namely np.linalg.solve() and np.linalg.lstsq().
    Tc                 C   r  )Nr  r   z*%s.%s() only supported on 1 and 2-D arraysr  r  r   r   r   assert_wrong_dimensions_1Da  r  z,TestLinalgSystems.assert_wrong_dimensions_1Dc                 C   r  )Nz<Incompatible array sizes, system is not dimensionally valid.r  r  r   r   r   assert_dimensionally_invalidg  r  z.TestLinalgSystems.assert_dimensionally_invalidc                 C   r  )NzAnp.linalg.%s() only supports inputs that have homogeneous dtypes.r  r  r   r   r   assert_homogeneous_dtypesl  r  z+TestLinalgSystems.assert_homogeneous_dtypesNr4  )r   r   r   r   r  r  r  r   r   r   r   r  Z  s
    
r  c                   @   rN  )TestLinalgLstsqz$
    Tests for np.linalg.lstsq.
    c                    s  t ddt  fddg d}tj}ddg}t|d}fd	d
}|D ]Q}t|}t}|||}	||	| |\}
}t|
|}|
dkr||dkr||d }j||||d}	||	| j||||d}	d| }|| }||	||d q+ddgddgddgddgg}|D ]\}	}t|	t|f}	 | qtj
ddgddggtjd} ||ff d}tj
ddgddggtjd}| ||f | ||f tj
ddgddggtjd}| ||f | ||f tj
ddgtjd}| ||f tj
ddgtjtjggtjd} ||f  ||f tj
ddgtjd} ||ff tj
ddgddggddgdd gggtjd}| ||f tj
dgtjd}tj
dgdgdggtjd} ||f  ||f d!S )"z&
        Test np.linalg.lstsq
        Tr|   c                    s  t | |fi |} | |fi |}t|t| t|d |d d}z/|d |d  tt|D ]}ztjj|| || dd W q= tyY   d}Y q=w W n tyf   d}Y nw |r-|\}}}	}
g d}z#|	|d  |D ]}t	|| tj
r|| j|| j qW n ty   t|	|d  dk  Y nw t| jj}zt| |}tjj||d| d| d	 W na ty,   |D ]T}ztjj|| || d
| d
| d	 W n ty   tj| }d| d|  Y nw tj|t| |d  }tj|t| | }tjj||dd qY nw    | |fi | W d    d S 1 sGw   Y  d S )Nr   r\   Fr   r)  rP  T)r   r   r{   r@  r*  r   r   rA  r/  )r   rJ   rD   r"  rc   r   r-  rQ  rJ  r   Zndarrayrh   r$  absr+  r8   r,  r   r.  r   r   ZassertGreaterr   rT   )r   r   rR  rX   rY   rS  r   xresr  r  Zout_array_idxr,  rT  r  Zres_expectedZres_gotrU  r   r   rV    s   



$z0TestLinalgLstsq.test_linalg_lstsq.<locals>.checkr6  r_   r\   rA  c                    sv   d}|D ]4}t }| jd |f||} | |fi | t }|d d df j|d} | |fi | qd S )Nr      r   r]   )nextr  rh   rm   )r   dtrR  b_sizesb_sizeb_orderr   ri   )rV  cycle_orderr-   r   r   inner_test_loop_fn  s   z=TestLinalgLstsq.test_linalg_lstsq.<locals>.inner_test_loop_fnr   r?  rB  r   r   r  rG  r  r   r   r   r        @      @r[   r   r   r{   r   r(     r8  rb  N)r   r   r   r~   r  r  r   r   rb   r3  r   r   rK  r  r   r  r  r  r  r   r  r  )r-   rL  Zcycle_dtordersspecific_condr  Za_sizer  Za_orderr   r=   r7   r  r  r   approx_half_rank_rcondZemptiesr   rW   okru  badZoneDbad1Dbad2Dr   )rV   rV  r  r-   r   test_linalg_lstsq  sx   \



 ,z!TestLinalgLstsq.test_linalg_lstsqc                 C   sz   t jg dg dg dg dg dg dgdd}t |}t g d	}td
ddd }|||d t j|| d S )N)r   g)\(@gGz@)r   g@r  )r   g      @gffffff@)r   gffffff?g(\@)r   gzG@g)\(
@)r   g(\?g@r_   r]   )r   r  r  r        @g      @Tr|   c                 S   &   |r| ddd d f } t j| |S rd  r   rf  yrg  r   r   r   f2n     z*TestLinalgLstsq.test_issue3368.<locals>.f2F)r   r   rm   r   r-  r.  )r-   rf  rk  r  r  r   r   r   test_issue3368b  s   


zTestLinalgLstsq.test_issue3368N)r   r   r   r   r   r  r  r   r   r   r   r  q  s    
 cr  c                   @   rN  )TestLinalgSolvez$
    Tests for np.linalg.solve.
    c                    s  t ddt  fdd}g d}t|jdD ]:\}}}|||}d}t|dD ]&\}}	|jd |f||	}
|||
 |
d	d	df j|	d
}||| q,q tdtd tj	ddgddggtj
d} || d}tj	ddgddggtjd}| ||f | ||f tj	ddgddggtjd}| ||f | ||f tj	ddgtj
d}| ||f tj	ddgtjtjggtj
d} ||f  ||f tj	ddgtj
d} || tj	ddgddggddgddgggtj
d}| ||f tj	dgtj
d}tj	dgdgdggtj
d} ||f  ||f jdtj
ddd} ||f d	S )z&
        Test np.linalg.solve
        Tr|   c                    s   t | |fi |} | |fi |}|d d}ztjj||dd W n ty0   d}Y nw |rV|j|j t| |}t	| j
j}tjj||d| d| d    | |fi | W d    d S 1 sow   Y  d S )Nr_   Fr)  rP  Tr*  r@  )r   r"  r   r-  rQ  rJ  rJ   rh   r   r+  r8   r,  r.  rT   )r   r   rR  rX   rY   rS  rT  r,  rU  r   r   rV    s0   

"z0TestLinalgSolve.test_linalg_solve.<locals>.check)r  r<  r8  r8  r>  r  r   Nr]   rW  r  r           r[   r   r   r   r{   r   r  r(  r  r8  rb  r  rX  r\   r?  )r   r   r   r~   r  rh   rm   r   rb   r   r   rK  r  r   r  r  r  r  r   r  r  r&  )r-   rV  rL  r`   r8   r^   r   r  r  r  r   ri   r  ru  r  Zok_oneDr  r  r   rU  r   test_linalg_solve~  sP   +

 
,z!TestLinalgSolve.test_linalg_solvec                 C   s   t jg dg dg dg dgdd}t |}t g d}t |}tdd	d
d }|||d}t j|| t j|| |||d}t j|| t j|| t j|| d S )N)r   r   r   r   )r  r   r   r   )r  r   r   r   )r   r   r   r   r_   r]   )r   r  r  r   Tr|   c                 S   r  rd  r   r  r   r   r   r    r  z4TestLinalgSolve.test_no_input_mutation.<locals>.funcFrj  )r-   rf  rk  r  Zy_origr  rX   rY   r   r   r   rl    s&   



z&TestLinalgSolve.test_no_input_mutationN)r   r   r   r   r   r  rl  r   r   r   r   r  y  s    
tr  c                   @   rN  )TestLinalgPinvz#
    Tests for np.linalg.pinv.
    c                    s*  t ddt  fdd}g d}d}t|jdD ]8\}}}|||}|| |\}}	|dkrS|	dkrSt||	}
j||||d	}d
| }|
| }|||d qdD ]	}|t| qVd}| tj	dtj
df | tj	dtjdf  tjd
dgtjtjggtjdf dS )z%
        Test np.linalg.pinv
        Tr|   c           	   	      s  t | fi |} | fi |}|d d}ztjj||dd W n ty.   d}Y nw |r|j|j t|| }z	| W nd ty   dt
| jj } |}tjj|| d| d| d | jd	 | jd
 krtddt}|| t| jd	 | jfi |d	 }tjj||d| d| d tj|| | Y nw    | fi | W d    d S 1 sw   Y  d S )Nr_   Fr)  rP  Tr(  r*  r@  r   r   r|   )r   r"  r   r-  rQ  rJ  rJ   rh   r   r1  r+  r8   r,  r.  r   r   r   r5   Z
assertLessr   r   rT   )	r   rR  rX   rY   rS  rT  r,  r   Z
lstsq_pinvrU  r   r   rV    sd   


"z.TestLinalgPinv.test_linalg_pinv.<locals>.checkr6  rA  r>  r   rB  r   r  )r  r  r   rX  r[   r)  r  N)r   r   r   r~   r  r   r   rb   r  rY  rK  r  r   r   r   r  r  )r-   rV  rL  r  r`   r8   r^   r   r=   r7   r  r   r  r  ru  r   rU  r   test_linalg_pinv  s@   D

zTestLinalgPinv.test_linalg_pinvc                 C   s   t dddd }tjg dg dg dg dgd	d
}t|}|d}||}tj|| ||}tj|| tj|| d S )NTr|   c                 S   s   t j| d S )Nr   r   )rx  r   r   r   some_fn  s   z.TestLinalgPinv.test_issue5870.<locals>.some_fnr\  r]  r_  ra  r_   r]   )r   r   r   )r   r   r   rm   r<   r   r-  r.  )r-   r  Zv_dataZv_origZ
reshaped_vrX   rY   r   r   r   test_issue5870  s    




zTestLinalgPinv.test_issue5870N)r   r   r   r   r   r  r  r   r   r   r   r    s    
sr  c                   @   sL   e Zd ZdZdd Zdd Zdd Zedd	 Zed
d Z	edd Z
dS )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                 K   s   t |fi |}||fi |}dt|jj }tjj|||d |   ||fi | W d    d S 1 s:w   Y  d S Nr(  r  )r   r   r+  r8   r,  r-  r.  rT   )r-   rV   r   rR  rX   rY   r,  r   r   r   	check_det  s   
"z!TestLinalgDetAndSlogdet.check_detc           	      K   s  t |fi |}||fi |}| t|t| | t|d tdD ]}| t|| t||  q&|j|d }tjj	||d dd dt
|jj }tjj|d |d ||d |   ||fi | W d    d S 1 s{w   Y  d S )Nr   r   r)  rP  r(  r   r@  )r   rJ   rD   rc   r   r}  r8   typer-  rQ  r+  r,  r.  rT   )	r-   rV   r   rR  rX   rY   r   Zgot_convr,  r   r   r   check_slogdet  s(   

"z%TestLinalgDetAndSlogdet.check_slogdetc           	      C   s   g d}t || jdD ]\}}}| |||}||| qt | jdD ]\}}tjd|d}||| q#||td | ||tjdtjdf | 	||tjdtj
df | |tjdd	gtjtjggtj
df d S )
N)r  )r   r   r  r>  r<  r[   rW  rX  r)  r   r  )r   r~   r  r   r   rb   r  rY  rK  r  r   r   r   r  r  )	r-   ru  rV  rV   rL  r`   r8   r^   r   r   r   r   do_test  s(   zTestLinalgDetAndSlogdet.do_testc                 C   "   t ddt}| d| j| d S )NTr|   r   )r   r   r  r  r-   rV   r   r   r   test_linalg_det     z'TestLinalgDetAndSlogdet.test_linalg_detc                 C   r  )NTr|   r   )r   r   r  r  r  r   r   r   test_linalg_slogdet  r  z+TestLinalgDetAndSlogdet.test_linalg_slogdetc                 C   r[  )Nr\  r]  r_  ra  r_   r]   Tr|   c                 S   rc  rd  r   re  r   r   r   r    ri  z<TestLinalgDetAndSlogdet.test_no_input_mutation.<locals>.funcFrj  r-   rf  rk  r  rX   rY   r   r   r   rl    rm  z.TestLinalgDetAndSlogdet.test_no_input_mutationN)r   r   r   r   r  r  r  r   r  r  rl  r   r   r   r   r    s    #!

r  c                   @      e Zd ZdZedd ZdS )TestLinalgNormz#
    Tests for np.linalg.norm.
    c           
         sz  t ddt  fdd}g d}dtjtj ddd	d
ddddg}t|j|D ]\}}}||}|||d q)tj|D ]\}}d|ddd }|||d qAg d}dtjtj dd	d
dg}t|jd|D ]\}}}}|||}|||d qodg}tj|dD ]1\}}}d||}||dd |d ||ddddf |d ||ddddf |d qtj|dD ]'\}}}tjd||d}	 ||d tjd||d}	 ||d qd}	
|	 tjdtjdf |	 tjdtjdd
d
df  tjddgtjtjggtjdd
f  tjddgd d!ggtjdd"f dS )#z%
        Test np.linalg.norm
        Tr|   c                       t | fi |} | fi |}t|  dt| jj }tjj|||d 	   | fi | W d    d S 1 sCw   Y  d S r  )
r   r$  r   r}  r+  r8   r,  r-  r.  rT   r   rR  rX   rY   r,  rU  r   r   rV  ,     
"z.TestLinalgNorm.test_linalg_norm.<locals>.check)r   r   r8  Nr   r   r}   r   r'  r(  g@g333333)r   r)  r{   r6  r>  )   r  r   r  r   r  rW  r   rX  r[      r   r  r  r  r  )r   r   r   r  r   r~   r:   r  rb   rJ   r  rY  rK  r  r   r<   r   r   r  r2  )
r-   rV  rL  Z	nrm_typesr`   r8   Znrm_typer   r^   ru  r   rU  r   test_linalg_norm%  sp    


zTestLinalgNorm.test_linalg_normN)r   r   r   r   r   r  r   r   r   r   r         r  c                   @   r  )TestLinalgCondz#
    Tests for np.linalg.cond.
    c                    s  t ddt  fdd}dtjtj dddd	g}d
dg}t|jd|D ]\}}}}|||}|||d q&g d}t|jdD ]\}}}|||}|| qEdD ]}	 t|	f qXtj	ddgddggtj
d}
||
 ||
dd tj	ddgddggtj
d}
||
d	d t   tj	ddgddggtj
d}tdt || W d   n1 sw   Y  d}| tjdtjdf | tjdtj
df  tj	ddgtjtjggtj
df  tj	ddgddggtj
ddf dS )z%
        Test np.linalg.cond
        Tr|   c                    r  r  )
r   r$  r   r}  r+  r8   r,  r-  r.  rT   r  rU  r   r   rV    r  z.TestLinalgCond.test_linalg_cond.<locals>.checkNr   r}   r   r'  r<  r  r>  )r   )r7  r9  r;  r=  r  r   r[   gg?ignorer   rX  r)  r   r  r  r  r  )r   r   r   r  r   r~   r  r3  rb   r   r   rA   rB   rC   RuntimeWarningr  rY  rK  r  r   r  r2  )r-   rV  ZpsrL  r`   r8   r^   r   r   r  r  ru  r   rU  r   test_linalg_cond  sT   



zTestLinalgCond.test_linalg_condN)r   r   r   r   r   r  r   r   r   r   r    r  r  c                   @   rN  )TestLinalgMatrixRankz*
    Tests for np.linalg.matrix_rank.
    c              	      s  t ddt  fdd}g d}t|jdD ]\}}}|||}|| d}tdt|d D ]}}j||||d	} || || |j\}	}
d
|ddddf< t	
t	|	|
}t	|rdt	j| d dt	j|  }d|d< ndt	j| }d|d< ||||d d| |d d| f<  |||d  |||d q4d
|ddddf<  |d || t	|rd|d< nd|d<  ||d |||d qjD ]%}t	jd|d} |d || d|d<  |d || qdD ]}dD ]} t	||f qqd}| t	jdt	jdf | t	jdt	jddddf  t	jddgt	jt	jggt	jdf dS )z,
        Test np.linalg.matrix_rank
        Tr|   c                    sl   t | fi |} | fi |}tj||    | fi | W d    d S 1 s/w   Y  d S r   )r   r   r-  r.  rT   )r   rR  rX   rY   rU  r   r   rV    s   
"z;TestLinalgMatrixRank.test_linalg_matrix_rank.<locals>.checkr6  r>  vIh%<=r   r?  r  Nr                 ?y+=+=r   g+=)r   )r}   r}   r(  r[   r  )Nr  r   rX  r  r   r{   r  )r   r   r   r~   r  rc   r   rJ   rh   r   r   r   r}  r   ro  r5   r   r3  rb   r  rY  rK  r  r   r<   r   r   r  r  )r-   rV  rL  r`   r8   r^   r   r   r   r=   r7   r  r   r  r  ru  r   rU  r   test_linalg_matrix_rank  s|   


*



z,TestLinalgMatrixRank.test_linalg_matrix_rankc                 C   r[  )Nr\  r]  r_  ra  r_   r]   Tr|   c                 S   rc  rd  r   re  r   r   r   r  T	  ri  z9TestLinalgMatrixRank.test_no_input_mutation.<locals>.funcFrj  r  r   r   r   rl  G	  s   



z+TestLinalgMatrixRank.test_no_input_mutationN)r   r   r   r   r   r  rl  r   r   r   r   r    s    
dr  c                   @   s$   e Zd ZdZdd Zedd ZdS )TestLinalgMatrixPowerz+
    Tests for np.linalg.matrix_power.
    c                 C   sH   ||d d |  tj ||  W d    d S 1 sw   Y  d S )Nr   r   rp   r	   rx   )r-   rV   rW   r   r   r   assert_int_exponenenti	  s   
"z+TestLinalgMatrixPower.assert_int_exponenentc                    sL  t ddt  fdd}g d}ddgttdd	 d
dg }t||jdD ]\}}}}|||}||| tjd||d}||| q)d}		|	 tj
dtjddf 	|	 tj
dtjddf t
ddf}
d} |
| |	 tj
d	tjddf  t
ddf  tddgddggdf d S )NTr|   c                    s~   t | |} | |}|d dt| jj }tjj||||d    | | W d    d S 1 s8w   Y  d S )Nr\   r(  r@  )	r   r"  r   r+  r8   r,  r-  r.  rT   )r   pwrrX   rY   r  rU  r   r   rV  t	  s   


"z=TestLinalgMatrixPower.test_linalg_matrix_power.<locals>.check)r  r(  r(  r  iir)  r  !   r>  rW  r   r   rX  r[   r   )r{   r(  zinput must be a square array333333?r  r   r}   )r   r   listrc   r   r~   r  r   rb   r  rY  rK  r  r  r   r  r&  r   )r-   rV  rL  Zpowersr`   r  r8   r^   r   ru  rW   ru   r   rU  r   test_linalg_matrix_powerp	  s2   
&z.TestLinalgMatrixPower.test_linalg_matrix_powerN)r   r   r   r   r  r   r  r   r   r   r   r  d	  s
    r  c                       s8   e Zd ZdZ fddZdd Zdd Zdd	 Z  ZS )
	TestTracez
    Tests for np.trace.
    c                    s2   t t|   tddt| _tddt| _d S )NTr|   )r*   r  r+   r   r   cfunc_w_offsetr   cfunc_no_offsetr,   r.   r   r   r+   	  s   zTestTrace.setUpc                 K   sJ   || |  tj ||fi | W d    d S 1 sw   Y  d S r   r  )r-   rV   r   rR  r   r   r   assert_int_offset	  s   "zTestTrace.assert_int_offsetc           
         s   fdd}g d}g dt tdd g d }t|| jdD ]1\}}}} |||}|||d	 |d
kr<|| tjd||d}|||d	 |d
krR|| q!d}	 |	 jtj	dtj
ddfd  |	 jtj	dtj
dfd  j jt	ddd	 d S )Nc                    s   d|v rt | fi |} j}nt| fi |} j}|| fi |}dt| jj }tjj	||||d  
  || fi | W d    d S 1 sNw   Y  d S )Nr   r(  r@  )r   r  r   r   r   r+  r8   r,  r-  r.  rT   )r   rR  rX   rV   rY   r  r,   r   r   rV  	  s   
"z#TestTrace.test_trace.<locals>.checkr6  )iiir  r)  )r:  r  r  r>  )r   r   rW  r   r   r[   r   FrX  r  )r  rc   r   r~   r  r   rb   r  r  rY  r   r   r  )
r-   rV  rL  offsetsr`   r   r8   r^   r   ru  r   r,   r   
test_trace	  s6   


zTestTrace.test_tracec                 C   sx   t ddddd }tjdtjd}|| | t}|d W d   n1 s*w   Y  t|j}| d	| dS )
z
Issue 2314z(optional(float64[:,:]),)Tr|   c                 S   r   r   r   r   r   r   r   tested	  s   
z5TestTrace.test_trace_w_optional_input.<locals>.testedr  r[   Nz(expected array(float64, 2d, A), got None)	r   r   rY  r   rp   	TypeErrorrH   rr   rJ   )r-   r  r   rt   errmsgr   r   r   test_trace_w_optional_input	  s   



z%TestTrace.test_trace_w_optional_input)	r   r   r   r   r+   r  r  r  r   r   r   r.   r   r  	  s    2r  c                   @   sT   e Zd Zeg dZeg dZg dZdd Zdd Zdd	 Z	d
d Z
dd ZdS )
TestBasics)r_   r\   r\   r_   )r\   r_   r\   r_   )r7  r<  r=  )r8  rG  )r{   r  r  c              	   C   s\   |  ||tjdgggtjdtdfd |  ||tdtjdgggtjdfd d S )Nr   r[   F)r  r   r   r   rY  )r-   ru  rV   r   r   r   _assert_wrong_dim
  s   $$zTestBasics._assert_wrong_dimc                 C   sL   t |ts|S t|dkr| |d |S | |d |d  |j||dS )Nr   r   r]   )r   r!  rD   r:   r<   )r-   r`   r8   r^   r   r   r   
_gen_input

  s   
zTestBasics._gen_inputc                 C   sT   |  ||t| j}|  ||t| j}t|r|d }t|r&|d }||fS )Nr  )r
  r  order1order2r   r}  )r-   size1size2r8   r   r   r   r   r   
_get_input
  s   

zTestBasics._get_inputc           	         s   t ddt  fdd}tj}tjjD ]2\}}t|}|||\}}||| tj	t
|jt
|jft
|jd}||||d qd  d S )NTr|   c                    s   t | |} | |}dtt| jj }tjj||||d d|v rC | |fi |}tjj||||d tjj|d |||d    | |fi | W d    d S 1 s\w   Y  d S )Nr(  r@  r!   )	r   r   r+  asarrayr8   r,  r-  r.  rT   r   r   rR  rX   rY   r  rU  r   r   rV  #
  s   


"z$TestBasics.test_outer.<locals>.checkr[   r    r   )r   r   r   r~   r   rL  r  r  r   rb   r  r`   r8   r	  )	r-   rV  dtsr  r  r8   r   r   r  r   rU  r   
test_outer 
  s   


zTestBasics.test_outerc           	         s   t ddt  fdd}tjjjD ]\}}}|||\}}||| qd  tdd d d tdd d d f}d}j	 ||t
jd	 d S )
NTr|   c                    sx   t | |} | |}dtt| jj }tjj||||d    | | W d    d S 1 s5w   Y  d S )Nr(  r@  )	r   r   r+  r  r8   r,  r-  r.  rT   r  rU  r   r   rV  F
  s   


"z#TestBasics.test_kron.<locals>.checkr   r)  r   zonly supports 'C' or 'F' layoutr%  )r   r   r   rL  r~   r  r	  r   rb   r  r	   rx   )	r-   rV  r  r  r8   r   r   rW   ru   r   rU  r   	test_kronC
  s   (zTestBasics.test_kronN)r   r   r   r   r  r  rL  r	  r
  r  r  r  r   r   r   r   r  	  s    
#r  c                   @   s   e Zd Zdd ZdS )TestHelpersc                    s   ddl m  fdd}t fdd}ddg}tjg}d	d
g}||tj||| t fdd}ddg}tjg}d	d
g}dd }|||||| d S )Nr   _copy_to_fortran_orderc           
         sb   t |||D ](\}}}tt|j||d}| |}	 |||	  |jj|	jj qd S )Nr]   )	r   r   r3   prodr<   rU   ZassertNotEqualctypesdata)
ZudtZexpectfnshapesr~   r  rh   r8   r^   r   r  r,   r   r   rV  b
  s   z5TestHelpers.test_copy_to_fortran_order.<locals>.checkc                    s    | S r   r   r   r  r   r   direct_calll
  s   z;TestHelpers.test_copy_to_fortran_order.<locals>.direct_call)r{   r   )r{   r   r(  r\   r_   c                    s   | d d d d } |S Nr   r   r   r   Zslicedr  r   r   slice_to_anyv
  s   z<TestHelpers.test_copy_to_fortran_order.<locals>.slice_to_any)r{   r{   r   )r{   r{   r   r(  c                 S   s   | d d d d }t |S r  )r   asfortranarrayr  r   r   r   expected_slice_to_any
  s   
zETestHelpers.test_copy_to_fortran_order.<locals>.expected_slice_to_any)Znumba.np.linalgr  r   r   Zintpr   )r-   rV  r  r  r~   r  r  r!  r   )r  r-   r   test_copy_to_fortran_order_
  s   
z&TestHelpers.test_copy_to_fortran_orderN)r   r   r   r"  r   r   r   r   r  ^
  s    r  __main__rG  )r}   )r   r   r  )Jr   r(   	itertoolsr   r   sysrA   numbersr   r   platformnumpyr   Znumbar   r   r   Z
numba.corer	   Znumba.tests.supportr
   r   r   r   r   r   r   Z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   r5  rO  rn  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   mainr   r   r   r   <module>   s       1







 FjQS n x  
  iT BTd
)