a
    ç´«jE ã                   @   sþ
  d Z ddlZddlZddlZddlZddlZddlZddlZddlZ	ddlm
Z
mZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZmZ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)m*Z*m+Z+m,Z,m-Z- zddl.ZW n e/�y    Y n0 dd„ Z0e(Z1�ddd„Z(dd„ Z2dd„ Z3dd„ Z4h d£Z5G dd„ dƒZ6dd„ Z7e	j8 9d¡ g Z:e:e7de6de
dd gd!d"gged#�e
d dged#�ƒe6d$e
dd gd!d"gged#�e
d dged#�ƒe6d%e
dd gd!d"gged#�e
g d&¢g d'¢ged#�ƒe6d(e
d)d*gd+d,gged#�e
d-d)ged#�ƒe6d.e
d)d*gd+d,gged#�e
d-d)ged#�ƒe6d/e
d)d*gd+d,gged#�e
g d0¢g d1¢ged#�ƒe6d2e	j;d3ed#�e	j;d4ed#�d5hd6�e6d7e	j8 <d8d8¡e	j8 <d8¡ƒe6d9e	j8 <d:d:¡e	j8 <d:¡ƒe6d;d:d<gd=d>ggd<d:gƒg
ƒ7 Z:e:e7d?e6d@e
g dA¢g d'¢ged#�e
d dged#�ƒe6dBe
dd gd!d"gdCdDgged#�e
g dE¢ed#�ƒe6dFe
g dA¢g d'¢ged#�e
d dged#�ƒe6dGe
dd gd!d"gdCdDgged#�e
g dE¢ed#�ƒe6dHe
g dI¢g dJ¢ged#�e
d-d)ged#�ƒe6dKe
dLdMgdNdOgdPdQgged#�e
g dR¢ed#�ƒe6dSe
g dI¢g dJ¢ged#�e
d-d)ged#�ƒe6dTe
dLdMgdNdOgdPdQgged#�e
g dR¢ed#�ƒe6dUe
g dI¢g dJ¢ged#�e
d-d)gdVdWgged#�ƒe6dXe
dLdMgdNdOgdPdQgged#�e
d-d)gdVdWgdVdWgged#�ƒe6dYe	j8 <d8dZ¡e	j8 <d8¡ƒe6d[e	j8 <d:d\¡e	j8 <d:¡ƒe6d]e	j8 <d\d:¡e	j8 <d\¡ƒe6d^e	j8 <dd>¡e	j8 <d¡d5hd6�e6d_e	j8 <d>d¡e	j8 <d>¡d5hd6�gƒ7 Z:e:e7d`e6dae
dd gd dgged#�dƒe6dbe
dd gd dgged#�dƒe6dce
dd*gddd:gged#�dƒe6dee
dd*gddd:gged#�dƒe6dfe	j;d3ed#�dd5hd6�e6dgd:d<gd<d:ggdƒe6dhe
dd gd dggƒdƒe6die	j8 <d:d:¡dƒgƒ7 Z:djdk„ Z=e:e=ƒ 7 Z:dldm„ Z>dndo„ Z?e:e?ƒ 7 Z:G dpdq„ dqƒZ@G drds„ dse@ƒZAG dtdu„ due@ƒZBG dvdw„ dwe@ƒZCG dxdy„ dye@ƒZDG dzd{„ d{e@ƒZEG d|d}„ d}e@ƒZFd~d„ ZGG d€d�„ d�eAeDƒZHG d‚dƒ„ dƒeHƒZIG d„d…„ d…eAeDƒZJG d†d‡„ d‡eJƒZKG dˆd‰„ d‰eAeDƒZLG dŠd‹„ d‹eLƒZMG dŒd�„ d�eAeDƒZNG dŽd�„ d�eNƒZOG d�d‘„ d‘ƒZPG d’d“„ d“eAeDƒZQG d”d•„ d•eQePƒZRG d–d—„ d—eCeFƒZSG d˜d™„ d™eSePƒZTG dšd›„ d›eAeDƒZUG dœd�„ d�eUƒZVG dždŸ„ dŸeAeBeDeEƒZWG d d¡„ d¡eWƒZXG d¢d£„ d£eCeFƒZYG d¤d¥„ d¥eYƒZZd¦d§„ Z[G d¨d©„ d©eAeDƒZ\G dªd«„ d«e\ƒZ]G d¬d­„ d­eAeBƒZ^G d®d¯„ d¯e^ƒZ_ej` ad°d±d²„ d³D ƒ¡G d´dµ„ dµƒƒZbG d¶d·„ d·eCeFƒZcG d¸d¹„ d¹ƒZdG dºd»„ d»eCeFƒZeG d¼d½„ d½ƒZfG d¾d¿„ d¿ƒZgG dÀdÁ„ dÁegƒZhG dÂdÃ„ dÃegƒZiG dÄdÅ„ dÅeiehƒZjG dÆdÇ„ dÇƒZkG dÈdÉ„ dÉegƒZlG dÊdË„ dËegƒZmG dÌdÍ„ dÍegƒZnG dÎdÏ„ dÏejelƒZoG dÐdÑ„ dÑejemƒZpG dÒdÓ„ dÓejenƒZqG dÔdÕ„ dÕƒZrdÖd×„ ZsG dØdÙ„ dÙƒZtG dÚdÛ„ dÛƒZuG dÜdÝ„ dÝƒZvdÞdß„ Zwej`jxe-dàdá�dâdã„ ƒZydädå„ Zzej`jxe-dædá�ej`j{dçdè„ ƒƒZ|G dédê„ dêƒZ}G dëdì„ dìƒZ~G dídî„ dîƒZdïdð„ Z€ej`j�dñdá�dòdó„ ƒZ‚ej`jƒe, dôdá�dõdö„ ƒZ„d÷dø„ Z…dùdú„ Z†dûdü„ Z‡dýdþ„ Zˆdÿ�d „ Z‰�d�d„ ZŠ�d�d„ Z‹�d�d„ ZŒdS (  z# Test functions for linalg module

é    N)ÚarrayÚsingleÚdoubleÚcsingleÚcdoubleÚdotÚidentityÚmatmul)Úswapaxes)Ú	AxisError)ÚmultiplyÚ
atleast_2dÚinfÚasarray)Úlinalg)Úmatrix_powerÚnormÚmatrix_rankÚ	multi_dotÚLinAlgError)Ú_multi_dot_matrix_chain_order)
Úassert_Úassert_equalÚassert_raisesÚassert_array_equalÚassert_almost_equalÚassert_allcloseÚsuppress_warningsÚassert_raises_regexÚHAS_LAPACK64ÚIS_WASMc                 C   s"   t | ƒt|tjƒrt |ƒntju S ©N)ÚtypeÚ
isinstanceÚnpÚndarray)ÚoutZin_© r'   ú]/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/numpy/linalg/tests/test_linalg.pyÚconsistent_subclass"   s    ÿr)   é   é   c                 K   s8   t | ƒjjttfv r|}n|}t| |fd|i|¤Ž d S )NÚdecimal)r   Údtyper"   r   r   Úold_assert_almost_equal)ÚaÚbÚsingle_decimalÚdouble_decimalÚkwr,   r'   r'   r(   r   ,   s    r   c                 C   s   t t tttt tti|  S r!   )r   r   r   r   ©r-   r'   r'   r(   Úget_real_dtype4   s
    ÿÿr5   c                 C   s   t ttttttti|  S r!   )r   r   r   r   r4   r'   r'   r(   Úget_complex_dtype9   s
    ÿÿr6   c                 C   s   | t tfv rdS dS d S )Ngñhãˆµøä>g•dyáý¥=)r   r   r4   r'   r'   r(   Úget_rtol>   s    r7   >   ÚstridedÚ	nonsquareÚ	hermitianúsize-0ÚsquareÚgeneralizedc                   @   s*   e Zd Zeƒ fdd„Zdd„ Zdd„ ZdS )Ú
LinalgCasec                 C   s.   t t|tƒƒ || _|| _|| _t|ƒ| _dS )z¢
        A bundle of arguments to be passed to a test case, with an identifying
        name, the operands a and b, and a set of tags to filter the tests
        N)r   r#   ÚstrÚnamer/   r0   Ú	frozensetÚtags)Úselfr@   r/   r0   rB   r'   r'   r(   Ú__init__N   s
    zLinalgCase.__init__c                 C   s   || j | j| jd� dS )zN
        Run the function `do` on this test case, expanding arguments
        ©rB   N)r/   r0   rB   )rC   Údor'   r'   r(   ÚcheckY   s    zLinalgCase.checkc                 C   s   d| j › d�S )Nz<LinalgCase: ú>)r@   ©rC   r'   r'   r(   Ú__repr___   s    zLinalgCase.__repr__N)Ú__name__Ú
__module__Ú__qualname__ÚsetrD   rG   rJ   r'   r'   r'   r(   r>   M   s   r>   c                 C   s,   | t v sJ dƒ‚|D ]}|j| hB |_q|S )z^
    Add the given tag (a string) to each of the cases (a list of LinalgCase
    objects)
    zInvalid tag)Úall_tagsrB   )ÚtagZcasesÚcaser'   r'   r(   Ú	apply_tagc   s    rR   éÒ  r<   r   ç      ð?ç       @ç      @ç      @r4   r   Zdouble_2)rU   rT   rW   )rV   rW   ç      @r   ù      ð?       @y       @      @y      @      @y      @      @ù       @      ð?r   Z	cdouble_2)rZ   rY   y      ð?      @)y      ð?       Ày      ð?      Ày      ð?      ÀZ0x0©r   r   ©r   r;   rE   Z8x8é   Z1x1é   Znonarrayé   é   é   r9   Zsingle_nsq_1)rT   rU   rV   Zsingle_nsq_2g      @rX   )rU   rT   rV   Zdouble_nsq_1Zdouble_nsq_2Zcsingle_nsq_1)ù      ð?      ð?ù       @       @ù      @      À)y      @      Ày      @      "@y      @       @Zcsingle_nsq_2rb   rc   rd   y      @      "Ày      @      Ày      @       @)rZ   rY   rd   Zcdouble_nsq_1Zcdouble_nsq_2Zcdouble_nsq_1_2y      ð?      ð¿y       @       ÀZcdouble_nsq_2_2Z8x11é   Z1x5é   Z5x1Z0x4Z4x0r:   ZhsingleZhdoubleZhcsingley       @      ÀZhcdoubleZhemptyZ	hnonarrayZmatrix_b_onlyZhmatrix_1x1c                  C   sr  g } t D �]b}t|jtjƒsqt |jd|j d|j g¡}|jd u rLd }n2|jjdkr`|j}nt |jd|j d|j g¡}t|j	d |||j
dhB d�}|  |¡ t |jgd d ¡ d	|jj ¡}|jd u rÚd }nj|jjdk�r t |jgd d |jd
  ¡ d	|jjdd …  ¡}n$t |jgd d ¡ d	|jj ¡}t|j	d |||j
dhB d�}|  |¡ q| S )Nr_   r`   r^   é   r*   Z_tile3r=   rE   ©r`   r_   éÿÿÿÿéþÿÿÿZ_tile213)ÚCASESr#   r/   r$   r%   r   r0   Úndimr>   r@   rB   ÚappendÚreshapeÚshape)Ú	new_casesrQ   r/   r0   Únew_caser'   r'   r(   Ú_make_generalized_casesó   s6    


ÿ
$
 ÿ$
ÿrr   c                 c   sè  t | tjƒs| dfV  dS dg| j }d|d< | jdkr@d|d< | jdkrRd	|d
< tjt|ƒŽ D �]€}dd„ t| j|ƒD ƒ}tdd„ |D ƒƒ}tj	|| j
d�}| tj¡ d¡ || }| |d< | | j¡}tt || k¡ƒ |dd dd„ |D ƒ¡ fV  | jdk�rF| jd dk�rFt| jƒ}d|d< tjjj| |d�}|dfV  | jdk�r�| jd dk�r�t| jƒ}d|d< tjjj| |d�}|dfV  | jdkr`| jdd… dkr`t| jƒ}d|d< d|d< tjjj| |d�}|dfV  q`dS )z<
    Generate cartesian product of strides for all axes
    ZnopN©r^   )r^   r`   éüÿÿÿri   r^   rj   r_   )r^   rt   éýÿÿÿc                 S   s   g | ]\}}t || ƒ‘qS r'   )Úabs)Ú.0r/   r0   r'   r'   r(   Ú
<listcomp>+  ó    z%_stride_comb_iter.<locals>.<listcomp>c                 S   s   g | ]}t d d |ƒ‘qS r!   )Úslice)rw   Úrepeatr'   r'   r(   rx   ,  ry   r4   l   ï>[= .Zstride_Ú_c                 S   s   g | ]}d | ‘qS )z%+dr'   )rw   Újr'   r'   r(   rx   5  ry   r   )ÚstridesZstride_xxx_0Zstride_xxx_0_x©r^   r^   Zstride_xxx_0_0)r#   r$   r%   rl   Ú	itertoolsÚproductÚtupleÚzipro   Úemptyr-   ÚviewZuint32ÚfillÚ	__class__r   ÚallÚjoinÚlistr~   ÚlibZstride_tricksZ
as_strided)ÚxZ
stride_setZrepeatsZ	new_shapeZslicesÚxiÚsr'   r'   r(   Ú_stride_comb_iter  sF    







r�   c               	   C   sn   g } t D ]`}t|jƒD ]P\}}t|jƒD ]<\}}t|jd | d | |||jdhB d�}|  |¡ q(qq| S )Nr|   r8   rE   )rk   r�   r/   r0   r>   r@   rB   rm   )rp   rQ   r/   Za_labelr0   Zb_labelrq   r'   r'   r(   Ú_make_strided_casesJ  s    
ÿr�   c                   @   s"   e Zd ZeZeƒ eƒ fdd„ZdS )ÚLinalgTestCasec                 C   s„   | j D ]x}|j|@ |krq|j|@ r&qz| | j¡ W q ty| } z.d|›d�}|t ¡ 7 }t|ƒ|‚W Y d}~qd}~0 0 qdS )zx
        Run func on each of the cases with all of the tags in require, and none
        of the tags in exclude
        zIn test case: z

N)Ú
TEST_CASESrB   rG   rF   Ú	ExceptionÚ	tracebackÚ
format_excÚAssertionError)rC   ÚrequireÚexcluderQ   ÚeÚmsgr'   r'   r(   Úcheck_cases^  s    

zLinalgTestCase.check_casesN)rK   rL   rM   rk   r’   rN   r›   r'   r'   r'   r(   r‘   [  s   r‘   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚLinalgSquareTestCasec                 C   s   | j dhddhd� d S )Nr<   r=   r;   ©r—   r˜   ©r›   rI   r'   r'   r(   Útest_sq_casest  s    ÿz"LinalgSquareTestCase.test_sq_casesc                 C   s   | j ddhdhd� d S )Nr<   r;   r=   r�   rž   rI   r'   r'   r(   Útest_empty_sq_casesx  s    
ÿz(LinalgSquareTestCase.test_empty_sq_casesN)rK   rL   rM   rŸ   r    r'   r'   r'   r(   rœ   r  s   rœ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚLinalgNonsquareTestCasec                 C   s   | j dhddhd� d S )Nr9   r=   r;   r�   rž   rI   r'   r'   r(   Útest_nonsq_cases  s    ÿz(LinalgNonsquareTestCase.test_nonsq_casesc                 C   s   | j ddhdhd� d S )Nr9   r;   r=   r�   rž   rI   r'   r'   r(   Útest_empty_nonsq_casesƒ  s    
ÿz.LinalgNonsquareTestCase.test_empty_nonsq_casesN)rK   rL   rM   r¢   r£   r'   r'   r'   r(   r¡   }  s   r¡   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚHermitianTestCasec                 C   s   | j dhddhd� d S )Nr:   r=   r;   r�   rž   rI   r'   r'   r(   Útest_herm_casesŠ  s    ÿz!HermitianTestCase.test_herm_casesc                 C   s   | j ddhdhd� d S )Nr:   r;   r=   r�   rž   rI   r'   r'   r(   Útest_empty_herm_casesŽ  s    
ÿz'HermitianTestCase.test_empty_herm_casesN)rK   rL   rM   r¥   r¦   r'   r'   r'   r(   r¤   ˆ  s   r¤   c                   @   s,   e Zd Zejjdd„ ƒZejjdd„ ƒZdS )ÚLinalgGeneralizedSquareTestCasec                 C   s   | j ddhdhd� d S )Nr=   r<   r;   r�   rž   rI   r'   r'   r(   Útest_generalized_sq_cases•  s    
ÿz9LinalgGeneralizedSquareTestCase.test_generalized_sq_casesc                 C   s   | j h d£d� d S )N>   r;   r<   r=   ©r—   rž   rI   r'   r'   r(   Útest_generalized_empty_sq_casesš  s    z?LinalgGeneralizedSquareTestCase.test_generalized_empty_sq_casesN)rK   rL   rM   ÚpytestÚmarkÚslowr¨   rª   r'   r'   r'   r(   r§   “  s   
r§   c                   @   s,   e Zd Zejjdd„ ƒZejjdd„ ƒZdS )Ú"LinalgGeneralizedNonsquareTestCasec                 C   s   | j ddhdhd� d S )Nr=   r9   r;   r�   rž   rI   r'   r'   r(   Útest_generalized_nonsq_cases¡  s    
ÿz?LinalgGeneralizedNonsquareTestCase.test_generalized_nonsq_casesc                 C   s   | j h d£d� d S )N>   r;   r=   r9   r©   rž   rI   r'   r'   r(   Ú"test_generalized_empty_nonsq_cases¦  s    zELinalgGeneralizedNonsquareTestCase.test_generalized_empty_nonsq_casesN)rK   rL   rM   r«   r¬   r­   r¯   r°   r'   r'   r'   r(   r®   Ÿ  s   
r®   c                   @   s,   e Zd Zejjdd„ ƒZejjdd„ ƒZdS )ÚHermitianGeneralizedTestCasec                 C   s   | j ddhdhd� d S )Nr=   r:   r;   r�   rž   rI   r'   r'   r(   Útest_generalized_herm_cases­  s    
ÿz8HermitianGeneralizedTestCase.test_generalized_herm_casesc                 C   s   | j h d£dhd� d S )N>   r;   r=   r:   Únoner�   rž   rI   r'   r'   r(   Ú!test_generalized_empty_herm_cases²  s    
ÿz>HermitianGeneralizedTestCase.test_generalized_empty_herm_casesN)rK   rL   rM   r«   r¬   r­   r²   r´   r'   r'   r'   r(   r±   «  s   
r±   c                 C   sL   t | ƒ} | jdkr:tj| j| jd�}t| jd ƒ|d< |S t| jd ƒS d S )Nr`   r4   rj   .r   )r   rl   r$   r„   ro   r-   r   )r/   Úrr'   r'   r(   Úidentity_like_generalized¸  s    
r¶   c                   @   s   e Zd Zdd„ ZdS )Ú
SolveCasesc                 C   sj   t  ||¡}t |¡jdkrDt||d ƒd }tt ||j¡|ƒ nt||ƒ}t||ƒ t	t
||ƒƒ d S )Nr^   ).N©.r   )r   Úsolver$   r   rl   r	   r   Úbroadcast_toro   r   r)   )rC   r/   r0   rB   rŒ   Zadotxr'   r'   r(   rF   Ä  s    

zSolveCases.doN©rK   rL   rM   rF   r'   r'   r'   r(   r·   Â  s   r·   c                   @   sB   e Zd Zej deeee	g¡dd„ ƒZ
dd„ Zdd„ Zdd	„ Zd
S )Ú	TestSolver-   c                 C   s2   t jddgddgg|d�}tt ||¡j|ƒ d S ©Nr^   ç      à?r4   )r$   r   r   r   r¹   r-   ©rC   r-   rŒ   r'   r'   r(   Ú
test_typesÒ  s    zTestSolve.test_typesc                 C   s®   G dd„ dt jƒ}t  d¡ ddd¡}t  d¡ |¡}t ||¡}|jdksPJ ‚t  d¡ dd¡ |¡}t ||¡}|jdks‚J ‚t  d¡ dd¡ |¡}tt	tj||ƒ d S )	Nc                   @   s   e Zd ZdS )z)TestSolve.test_1_d.<locals>.ArraySubclassN©rK   rL   rM   r'   r'   r'   r(   ÚArraySubclassØ  s   rÂ   r]   r_   ©r_   r_   ra   )r_   r_   r_   r^   )
r$   r%   Úarangern   r…   r   r¹   ro   r   Ú
ValueError)rC   rÂ   r/   r0   Úresultr'   r'   r(   Útest_1_d×  s    zTestSolve.test_1_dc              	   C   s  G dd„ dt jƒ}t  d¡ ddd¡}t  d¡ ddd¡ |¡}t ||¡d d …dd…d d …f }t |d d …dd…dd…f |d d …dd…d d …f ¡}t||ƒ tt	||ƒƒ t
tjtj|d d …dd…dd…f |ƒ t
ttj||d d …dd…d d …f ƒ t  d¡ ddd¡}t
ttj||ƒ t
ttj|dd… |dd… ƒ t  d¡ |¡}t ||¡d d …dd…f }t |d d …dd…dd…f |dd… ¡}t||ƒ tt	||ƒƒ t  d¡ dd¡}t
ttj||ƒ t
ttj|dd… |dd… ƒ t
ttj|d d …dd…dd…f |ƒ d S )	Nc                   @   s   e Zd ZdS )z,TestSolve.test_0_size.<locals>.ArraySubclassNrÁ   r'   r'   r'   r(   rÂ   é  s   rÂ   r]   r_   r*   r^   r`   r   )r$   r%   rÄ   rn   r…   r   r¹   r   r   r#   r   r   rÅ   ©rC   rÂ   r/   r0   ÚexpectedrÆ   r'   r'   r(   Útest_0_sizeè  s*    "8
(& *
 zTestSolve.test_0_sizec                 C   s  G dd„ dt jƒ}t  d¡ ddd¡}t  d¡ ddd¡ |¡}t ||¡d d …d d …dd…f }t ||d d …d d …dd…f ¡}t||ƒ tt	||ƒƒ t ||¡d d …dd…dd…f }t |d d …dd…dd…f |d d …dd…dd…f ¡}t||ƒ tt	||ƒƒ d S )	Nc                   @   s   e Zd ZdS )z.TestSolve.test_0_size_k.<locals>.ArraySubclassNrÁ   r'   r'   r'   r(   rÂ     s   rÂ   ra   r^   r_   r*   r`   r   )
r$   r%   rÄ   rn   r…   r   r¹   r   r   r#   rÈ   r'   r'   r(   Útest_0_size_k	  s    ""
"8
zTestSolve.test_0_size_kN)rK   rL   rM   r«   r¬   Úparametrizer   r   r   r   rÀ   rÇ   rÊ   rË   r'   r'   r'   r(   r¼   Ñ  s
   
!r¼   c                   @   s   e Zd Zdd„ ZdS )ÚInvCasesc                 C   s0   t  |¡}tt||ƒt|ƒƒ tt||ƒƒ d S r!   )r   Úinvr   r	   r¶   r   r)   )rC   r/   r0   rB   Za_invr'   r'   r(   rF     s
    

ÿzInvCases.doNr»   r'   r'   r'   r(   rÍ     s   rÍ   c                   @   s2   e Zd Zej deeee	g¡dd„ ƒZ
dd„ ZdS )ÚTestInvr-   c                 C   s0   t jddgddgg|d�}tt |¡j|ƒ d S r½   )r$   r   r   r   rÎ   r-   r¿   r'   r'   r(   rÀ   &  s    zTestInv.test_typesc                 C   s²   G dd„ dt jƒ}t jdt jd� |¡}t |¡}t|jj	t j
u ƒ t|j|jƒ tt||ƒƒ t jdt jd� |¡}t |¡}t|jj	t ju ƒ t|j|jƒ tt||ƒƒ d S )Nc                   @   s   e Zd ZdS )z*TestInv.test_0_size.<locals>.ArraySubclassNrÁ   r'   r'   r'   r(   rÂ   -  s   rÂ   ©r   r^   r^   r4   r[   )r$   r%   ÚzerosÚint_r…   r   rÎ   r   r-   r"   Úfloat64r   ro   r#   Ú	complex64©rC   rÂ   r/   Úresr'   r'   r(   rÊ   +  s    

zTestInv.test_0_sizeN©rK   rL   rM   r«   r¬   rÌ   r   r   r   r   rÀ   rÊ   r'   r'   r'   r(   rÏ   %  s   
rÏ   c                   @   s   e Zd Zdd„ ZdS )ÚEigvalsCasesc                 C   s&   t  |¡}t  |¡\}}t||ƒ d S r!   )r   ÚeigvalsÚeigr   )rC   r/   r0   rB   ÚevÚevaluesÚevectorsr'   r'   r(   rF   >  s    
zEigvalsCases.doNr»   r'   r'   r'   r(   rØ   <  s   rØ   c                   @   s2   e Zd Zej deeee	g¡dd„ ƒZ
dd„ ZdS )ÚTestEigvalsr-   c                 C   s`   t jddgddgg|d�}tt |¡j|ƒ t jddgddgg|d�}tt |¡jt|ƒƒ d S ©Nr^   r¾   r4   ri   )r$   r   r   r   rÙ   r-   r6   r¿   r'   r'   r(   rÀ   E  s    zTestEigvals.test_typesc                 C   s²   G dd„ dt jƒ}t jdt jd� |¡}t |¡}t|jj	t j
u ƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡}t|jj	t ju ƒ td|jƒ tt|t jƒƒ d S )Nc                   @   s   e Zd ZdS )z.TestEigvals.test_0_size.<locals>.ArraySubclassNrÁ   r'   r'   r'   r(   rÂ   N  s   rÂ   rÐ   r4   ©r   r^   r[   r\   )r$   r%   rÑ   rÒ   r…   r   rÙ   r   r-   r"   rÓ   r   ro   r#   rÔ   rÕ   r'   r'   r(   rÊ   L  s    

zTestEigvals.test_0_sizeNr×   r'   r'   r'   r(   rÞ   D  s   
rÞ   c                   @   s   e Zd Zdd„ ZdS )ÚEigCasesc                 C   sb   t  |¡}|j|j }}tt||ƒt |¡t |¡dd d d …f  t|j	ƒd� t
t||ƒƒ d S )N.©Úrtol)r   rÚ   ÚeigenvaluesÚeigenvectorsr   r	   r$   r   r7   r-   r   r)   )rC   r/   r0   rB   rÖ   rä   rå   r'   r'   r(   rF   a  s    

 þzEigCases.doNr»   r'   r'   r'   r(   rá   _  s   rá   c                   @   s2   e Zd Zej deeee	g¡dd„ ƒZ
dd„ ZdS )ÚTestEigr-   c                 C   s�   t jddgddgg|d�}t j |¡\}}t|j|ƒ t|j|ƒ t jddgddgg|d�}t j |¡\}}t|jt|ƒƒ t|jt|ƒƒ d S rß   )r$   r   r   rÚ   r   r-   r6   ©rC   r-   rŒ   ÚwÚvr'   r'   r(   rÀ   k  s    zTestEig.test_typesc                 C   sú   G dd„ dt jƒ}t jdt jd� |¡}t |¡\}}t|jj	t j
u ƒ t|jj	t j
u ƒ t|j|jƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡\}}t|jj	t ju ƒ t|jj	t ju ƒ t|j|jƒ td|jƒ tt|t jƒƒ d S )Nc                   @   s   e Zd ZdS )z*TestEig.test_0_size.<locals>.ArraySubclassNrÁ   r'   r'   r'   r(   rÂ   y  s   rÂ   rÐ   r4   rà   r[   r\   )r$   r%   rÑ   rÒ   r…   r   rÚ   r   r-   r"   rÓ   r   ro   r#   rÔ   ©rC   rÂ   r/   rÖ   Zres_vr'   r'   r(   rÊ   w  s    zTestEig.test_0_sizeNr×   r'   r'   r'   r(   ræ   j  s   
ræ   c                   @   s.   e Zd ZdZej deee	e
g¡dd„ ƒZdS )ÚSVDBaseTestsFr-   c                 C   sˆ   t jddgddgg|d�}t |¡}|j|j|j  }}}t|j|ƒ t|jt	|ƒƒ t|j|ƒ tj|d| j
d�}t|jt	|ƒƒ d S )Nr^   r¾   r4   F©Ú
compute_uvr:   )r$   r   r   ÚsvdÚUÚSÚVhr   r-   r5   r:   )rC   r-   rŒ   rÖ   rï   rð   rñ   rŽ   r'   r'   r(   rÀ   ‘  s    
zSVDBaseTests.test_typesN)rK   rL   rM   r:   r«   r¬   rÌ   r   r   r   r   rÀ   r'   r'   r'   r(   rë   Ž  s   rë   c                   @   s   e Zd Zdd„ ZdS )ÚSVDCasesc              	   C   sp   t  |d¡\}}}t|tt |¡t |¡dd d d …f  t |¡ƒt|jƒd� tt	||ƒƒ tt	||ƒƒ d S )NF.râ   )
r   rî   r   r	   r$   r   r7   r-   r   r)   )rC   r/   r0   rB   ÚurŽ   Úvtr'   r'   r(   rF   Ÿ  s    &ÿþzSVDCases.doNr»   r'   r'   r'   r(   rò   �  s   rò   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSVDc                 C   s˜   t  d¡}tj|d| jd�\}}}t|jdƒ t|jdƒ t|t  d¡ƒ t  d¡}tj|d| jd�\}}}t|jdƒ t|jdƒ t|t  d¡ƒ dS )	z6 Empty input should put an identity matrix in u or vh )ra   r   Trì   ©ra   ra   r[   ra   )r   ra   N)r$   r„   r   rî   r:   r   ro   Úeye)rC   rŒ   ró   rŽ   Zvhr'   r'   r(   Útest_empty_identity©  s    

zTestSVD.test_empty_identityc                 C   s@   t  ddgddgg¡}tj|d| jd�}t |¡}t||ƒ d S )Nr^   r¾   Frì   )r$   r   r   rî   r:   Zsvdvalsr   )rC   rŒ   Z
s_from_svdZs_from_svdvalsr'   r'   r(   Útest_svdvals·  s    
zTestSVD.test_svdvalsN)rK   rL   rM   rø   rù   r'   r'   r'   r(   rõ   ¨  s   rõ   c                   @   s   e Zd Zdd„ ZdS )ÚSVDHermitianCasesc              	   C   sò   t j|ddd�\}}}t|tt |¡t |¡dd d d …f  t |¡ƒt|jƒd� dd„ }tt |||ƒ¡t 	t 
|jd ¡|j¡ƒ tt |||ƒ¡t 	t 
|jd ¡|j¡ƒ tt |¡dd d d…f |ƒ tt||ƒƒ tt||ƒƒ d S )	NFT©r:   .râ   c                 S   s<   t t| jƒƒ}|d |d  |d< |d< t tj| |d�¡S )Nrj   ri   ©Úaxes)rŠ   Úrangerl   r$   ÚconjÚ	transpose)Úmatrý   r'   r'   r(   r:   Å  s    z'SVDHermitianCases.do.<locals>.hermitianri   )r   rî   r   r	   r$   r   r7   r-   r   rº   r÷   ro   r   Úsortr   r)   )rC   r/   r0   rB   ró   rŽ   rô   r:   r'   r'   r(   rF   À  s    &ÿþ,,zSVDHermitianCases.doNr»   r'   r'   r'   r(   rú   ¾  s   rú   c                   @   s   e Zd ZdZdS )ÚTestSVDHermitianTN)rK   rL   rM   r:   r'   r'   r'   r(   r  Ñ  s   r  c                   @   s   e Zd Zdd„ ZdS )Ú	CondCasesc                 C   sê  t |ƒ}d|v r"tttj|ƒ d S tj|dd�}tt |¡|d |d  ddd� tt |d	¡|d |d  ddd� tt |d
¡|d |d  ddd� tj |¡}tt |d¡t	|ƒ 
d
¡ d¡t	|ƒ 
d
¡ d¡ ddd� tt |d¡t	|ƒ 
d
¡ d¡t	|ƒ 
d
¡ d¡ ddd� tt |tj¡t	|ƒ 
d¡ d¡t	|ƒ 
d¡ d¡ ddd� tt |tj ¡t	|ƒ 
d¡ d¡t	|ƒ 
d¡ d¡ ddd� tt |d¡t t	|ƒd	  
d¡ 
d¡t	|ƒd	  
d¡ 
d¡ ¡ddd� d S )Nr;   F)rí   r¸   ).ri   rf   re   ©r1   r2   r_   rj   r^   ri   Úfro)r   r   r   r   Úcondrî   r   r$   rÎ   rv   ÚsumÚmaxÚminr   Úsqrt)rC   r/   r0   rB   ÚcrŽ   Zcinvr'   r'   r(   rF   Ø  sZ    þþþ
&ý
&ý&ý&ý
ÿüzCondCases.doNr»   r'   r'   r'   r(   r  Õ  s   r  c                   @   s>   e Zd Zdd„ Zdd„ Zejjdddd�d	d
„ ƒZdd„ Z	dS )ÚTestCondc                 C   s€   t g d¢g d¢g d¢gƒ}tt |t¡dƒ tt |t ¡dƒ tt |d¡dƒ tt |d¡dƒ tt |d	¡t d
¡ƒ d S )N)rT   r   r^   )r   g       Àr   )r   r   rV   ra   gUUUUUUå?r^   ri   r¾   r  gUUUUU6@)r   r   r   r  r   r$   r  ©rC   ÚAr'   r'   r(   Útest_basic_nonsvd  s    zTestCond.test_basic_nonsvdc                 C   st   t  d¡t  d¡g}g d¢}ddg}t ||¡D ]\}}tt ||¡dkƒ q0t ||¡D ]\}}t ||¡ qZd S )NrÃ   ©Nr^   r_   r  ri   rj   ç  4&õkC)r$   rÑ   Úonesr€   r�   r   r   r  )rC   ZAsÚp_posZp_negr  Úpr'   r'   r(   Útest_singular  s    zTestCond.test_singularTFz/Platform/LAPACK-dependent failure, see gh-18914)ÚrunÚreasonc                 C   sê   g d¢}g d¢}t  d¡}t j|d< |D ].}t ||¡}tt|t jƒƒ tt  |¡ƒ q(t  d¡}t j|d< |D ]t}t ||¡}tt  |d ¡ƒ ||v r¼t|d d	kƒ t|d
 d	kƒ qptt  |d ¡ ƒ tt  |d
 ¡ ƒ qpd S )N)Nr^   ri   r_   rj   r  r  rÃ   rà   )r`   r_   r_   ©r^   r   r^   r^   r   r  r_   )	r$   r  Únanr   r  r   r#   rÓ   Úisnan)rC   Zpsr  r  r  r  r'   r'   r(   Útest_nan  s$    



zTestCond.test_nanc                 C   sŒ   t j d¡ t j dddd¡}d|d< d|d< dD ]T}t ||¡}t|d t jƒ t|d t jƒ tt  	|d ¡ƒ tt  	|d ¡ƒ q2d S )	NrS   r_   r   r[   r   )Nr^   r_   r  ri   rj   rà   ©r^   r   )
r$   ÚrandomÚseedÚrandr   r  r   r   r   Úisfinite)rC   r  r  r  r'   r'   r(   Útest_stacked_singular6  s    zTestCond.test_stacked_singularN)
rK   rL   rM   r  r  r«   r¬   Úxfailr  r"  r'   r'   r'   r(   r    s   	
ÿ
r  c                   @   s   e Zd Zdd„ ZdS )Ú	PinvCasesc                 C   s<   t  |¡}t}t||||ƒ|ƒ|ddd� tt||ƒƒ d S )Nrf   re   r  ©r   Úpinvr	   r   r   r)   ©rC   r/   r0   rB   Za_ginvr   r'   r'   r(   rF   K  s    
zPinvCases.doNr»   r'   r'   r'   r(   r$  F  s   r$  c                   @   s   e Zd ZdS )ÚTestPinvNrÁ   r'   r'   r'   r(   r(  S  s   r(  c                   @   s   e Zd Zdd„ ZdS )ÚPinvHermitianCasesc                 C   s@   t j|dd�}t}t||||ƒ|ƒ|ddd� tt||ƒƒ d S )NTrû   rf   re   r  r%  r'  r'   r'   r(   rF   Y  s    zPinvHermitianCases.doNr»   r'   r'   r'   r(   r)  W  s   r)  c                   @   s   e Zd ZdS )ÚTestPinvHermitianNrÁ   r'   r'   r'   r(   r*  a  s   r*  c                  C   s‚   t  g d¢g d¢g d¢g¡} tt jj| dd�t jj| dd�ƒ tjtdd��" t jj| ddd	� W d   ƒ n1 st0    Y  d S )
N©r^   r_   r`   )ra   r^   r^   )r_   r`   r^   r¾   ©Úrcondrâ   z%`rtol` and `rcond` can't be both set.)Úmatch)r-  rã   )r$   r   r   r   r&  r«   ZraisesrÅ   )r/   r'   r'   r(   Útest_pinv_rtol_arge  s    þÿr/  c                   @   s   e Zd Zdd„ ZdS )ÚDetCasesc                 C   sÖ   t  |¡}t  |¡}|j|j }}t|ƒjjtt	fv rFt|ƒ 
t	¡}nt|ƒ 
t¡}t  |¡}	t|tj|	dd�ƒ t|t |¡ tj|	dd�ƒ t |¡}t |¡}|dk}
tt ||
 ¡dƒ t||
  t ƒ d S )Nri   ©Úaxisr   r^   )r   ÚdetÚslogdetÚsignZ	logabsdetr   r-   r"   r   r   Úastyper   rÙ   r   r   Úreducer$   ÚexpZ
atleast_1drv   r   r   )rC   r/   r0   rB   ÚdrÖ   rŽ   ÚldÚadrÛ   Úmr'   r'   r(   rF   u  s    




zDetCases.doNr»   r'   r'   r'   r(   r0  s  s   r0  c                   @   s:   e Zd Zdd„ Zej deee	e
g¡dd„ ƒZdd„ ZdS )	ÚTestDetc                 C   s   t t dgg¡dƒ t tt dgg¡ƒtƒ t t dgg¡dƒ t tt dgg¡ƒtƒ t t dgg¡dt fƒ t tt dgg¡d ƒtƒ t tt dgg¡d ƒtƒ t t dgg¡dt fƒ t tt dgg¡d ƒtƒ t tt dgg¡d ƒtƒ d S )Nç        y                r   r^   )r   r   r3  r"   r   r   r4  r   rI   r'   r'   r(   Ú	test_zero‰  s    zTestDet.test_zeror-   c                 C   s^   t jddgddgg|d�}tt j |¡j|ƒ t j |¡\}}t|jt|ƒƒ t|j|ƒ d S r½   )r$   r   r   r   r3  r-   r4  r5   )rC   r-   rŒ   ÚphrŽ   r'   r'   r(   rÀ   –  s
    zTestDet.test_typesc                 C   sð   t jdt jd�}t |¡}t|dƒ t|jjt ju ƒ t 	|¡}t|dƒ t|d jjt ju ƒ t|d jjt j
u ƒ t jdt jd�}t |¡}t|dƒ t|jjt ju ƒ t 	|¡}t|dƒ t|d jjt ju ƒ t|d jjt ju ƒ d S )Nr[   r4   rT   r  r   r^   )r$   rÑ   rÔ   r   r3  r   r   r-   r"   r4  Úfloat32rÓ   )rC   r/   rÖ   r'   r'   r(   rÊ   ž  s     







zTestDet.test_0_sizeN)rK   rL   rM   r?  r«   r¬   rÌ   r   r   r   r   rÀ   rÊ   r'   r'   r'   r(   r=  ˆ  s   
r=  c                   @   s   e Zd Zdd„ ZdS )Ú
LstsqCasesc                 C   sL  t  |¡}|j\}}t |d¡\}}}	tj||dd�\}
}}}|dkrVt|
dk ¡ ƒ ||krzt|t	||
ƒƒ t
||ƒ n
t
||ƒ t|| |¡ƒ ||krú||krút  tt  	||
¡| ƒ¡d jdd�}t  |¡}t  |¡jdkrød|_t
|j|jƒ nt  g ¡ t|
ƒ¡}t||ƒ tt  |jt j¡ƒ tt|
|ƒƒ tt||ƒƒ d S )	NFri   r,  r   r_   r1  r^   rs   )r$   r   ro   r   rî   Úlstsqr   rˆ   r   r   r   Z__array_wrap__rv   r  rl   r   r…   r"   Ú
issubdtyper-   Úfloatingr)   )rC   r/   r0   rB   Úarrr<  Únró   rŽ   rô   rŒ   Ú	residualsÚrankÚsvZexpect_residsr'   r'   r(   rF   ´  s2    


ÿÿ

zLstsqCases.doNr»   r'   r'   r'   r(   rB  ²  s   rB  c                   @   s:   e Zd Zdd„ Zej g d¢g d¢¡dd„ ƒZdd„ Zd	S )
Ú	TestLstsqc                 C   sž   t  g d¢g d¢g d¢g d¢g¡j}t  g d¢¡}tj||dd�\}}}}t|dkƒ t ||¡\}}}}t|d	kƒ tj||d d�\}}}}t|d	kƒ d S )
N)r>  rT   r>  rT   rU   r>  )r>  rU   r>  r>  rT   r>  )rT   r>  rT   r>  r>  rW   )r>  r>  r>  rU   rV   r>  )r^   r   r   r   r   r   ri   r,  ra   r`   )r$   r   ÚTr   rC  r   )rC   r/   r0   rŒ   rH  rI  rŽ   r'   r'   r(   Ú
test_rcondÑ  s    
ýzTestLstsq.test_rcond)r<  rG  Ún_rhs))ra   r_   r_   )r   ra   r^   )r   ra   r_   )ra   r   r^   )ra   r   r_   )ra   r_   r   ©r   r   r   c                 C   sÜ   t  || ¡ ||¡}t  ||f¡}tj||d d�\}}}}	|dkrTt|dk ¡ ƒ t|j	||fƒ t|j	||krx|fndƒ ||kr´|dkr´|t  
||¡ }
t||
|
 jdd�ƒ t|t||ƒƒ t|	j	t||ƒfƒ d S )Nr,  r   r\   rj   r1  )r$   rÄ   rn   r  r   rC  r   rˆ   r   ro   r   r   r  r
  )rC   r<  rG  rN  r/   r0   rŒ   rH  rI  rŽ   rµ   r'   r'   r(   Útest_empty_a_bà  s    
zTestLstsq.test_empty_a_bc                 C   st   t  g d¢¡}t  g d¢¡}t  |t  t|ƒ¡g¡j}ttdƒ�  tj	||d d� W d   ƒ n1 sf0    Y  d S )N)r   r^   r_   r`   )ri   gš™™™™™É?gÍÌÌÌÌÌì?gÍÌÌÌÌÌ @gffffff
@zIncompatible dimensionsr,  )
r$   r   Zvstackr  ÚlenrL  r   r   r   rC  )rC   rŒ   Úyr  r'   r'   r(   Útest_incompatible_dimsø  s
    z TestLstsq.test_incompatible_dimsN)	rK   rL   rM   rM  r«   r¬   rÌ   rP  rS  r'   r'   r'   r(   rK  Ð  s   	
rK  Údtc                 C   s   g | ]}t  |¡‘qS r'   )r$   r-   )rw   r  r'   r'   r(   rx     ry   rx   z?bBhHiIqQefdgFDGOc                   @   sÜ   e Zd Ze d¡Zeg d¢ Zeg d¢ Zeg d¢ ZeeeegZ	e
ddgddggƒZe egggd ¡Zee d¡e d	¡e d
¡gZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejjedd�dd„ ƒZdS )ÚTestMatrixPowerra   )r`   r   r^   r_   )r_   r`   r   r^   )r^   r_   r`   r   r^   r   r_   r™   ÚgÚGc                 C   s˜   | j  |¡}tt|dd d d d ƒ| jƒ tt|dd d d d ƒ| j ƒ tt|dd d d d ƒ| jƒ tt|dd d d d ƒ| jƒ d S )Nr_   éd   i   é    r   r^   r`   )Úrshft_1r6  r   r   Úrshft_0Úrshft_2Úrshft_3)rC   rT  Zrshftr'   r'   r(   Útest_large_power  s    ÿÿÿÿz TestMatrixPower.test_large_powerc                 C   s>   dd„ }| j D ]*}|| |¡ƒ |tkr|| j |¡ƒ qd S )Nc                 S   s*   t | dƒ}t|t| ƒƒ t|j| jƒ d S )Nr   )r   r   r¶   r-   )ÚMÚmzr'   r'   r(   Útz  s    
z.TestMatrixPower.test_power_is_zero.<locals>.tz©Ú	rshft_allr6  ÚobjectÚstacked©rC   rT  ra  r  r'   r'   r(   Útest_power_is_zero  s
    
z"TestMatrixPower.test_power_is_zeroc                 C   s>   dd„ }| j D ]*}|| |¡ƒ |tkr|| j |¡ƒ qd S )Nc                 S   s&   t | dƒ}t|| ƒ t|j| jƒ d S )Nr^   )r   r   r-   )r  r`  r'   r'   r(   ra  %  s    

z-TestMatrixPower.test_power_is_one.<locals>.tzrb  rf  r'   r'   r(   Útest_power_is_one$  s
    
z!TestMatrixPower.test_power_is_onec                 C   s>   dd„ }| j D ]*}|| |¡ƒ |tkr|| j |¡ƒ qd S )Nc                 S   s>   t | dƒ}| jtkrtnt}t||| | ƒƒ t|j| jƒ d S )Nr_   )r   r-   rd  r	   r   r   )r  r`  Úmmulr'   r'   r(   ra  0  s    
z-TestMatrixPower.test_power_is_two.<locals>.tzrb  rf  r'   r'   r(   Útest_power_is_two/  s
    
z!TestMatrixPower.test_power_is_twoc                 C   s0   dd„ }| j D ]}|| jvr|| |¡ƒ qd S )Nc                 S   s4   t | dƒ}| jtkrtnt}t||| ƒt| ƒƒ d S ©Nri   )r   r-   rd  r	   r   r   r¶   )r  Zinvmatri  r'   r'   r(   ra  <  s
    
ÿz3TestMatrixPower.test_power_is_minus_one.<locals>.tz)rc  Údtnoinvr6  rf  r'   r'   r(   Útest_power_is_minus_one;  s    

z'TestMatrixPower.test_power_is_minus_onec                 C   s.   | j  |¡}ttt|dƒ ttt|dgƒ d S )Ng      ø?r^   )r[  r6  r   Ú	TypeErrorr   ©rC   rT  r  r'   r'   r(   Útest_exceptions_bad_powerF  s    z)TestMatrixPower.test_exceptions_bad_powerc                 C   sP   t ttt dg|¡dƒ t ttt dgdgg|¡dƒ t ttt d|¡dƒ d S )Nr^   r_   )ra   r`   r_   )r   r   r   r$   r   r  )rC   rT  r'   r'   r(   Útest_exceptions_non_squareK  s    z*TestMatrixPower.test_exceptions_non_squareúfp errors don't work in wasm©r  c                 C   s,   || j v rd S | j |¡}ttt|dƒ d S rk  )rl  Únoninvr6  r   r   r   ro  r'   r'   r(   Útest_exceptions_not_invertibleP  s    
z.TestMatrixPower.test_exceptions_not_invertibleN)rK   rL   rM   r$   r÷   r[  rZ  r\  r]  rc  r   rt  Úblockre  rd  r-   rl  r^  rg  rh  rj  rm  rp  rq  r«   r¬   Úskipifr    ru  r'   r'   r'   r(   rU    s"   
rU  c                   @   s   e Zd Zdd„ ZdS )ÚTestEigvalshCasesc                 C   s^   t  |d¡}t  |¡\}}|jdd� t||t|jƒd� t  |d¡}t||t|jƒd� d S )NÚLri   r1  râ   rï   )r   ÚeigvalshrÚ   r  r   r7   r-   )rC   r/   r0   rB   rÛ   rÜ   rÝ   Úev2r'   r'   r(   rF   Z  s    zTestEigvalshCases.doNr»   r'   r'   r'   r(   rx  X  s   rx  c                   @   sB   e Zd Zej deeee	g¡dd„ ƒZ
dd„ Zdd„ Zdd	„ Zd
S )ÚTestEigvalshr-   c                 C   s:   t jddgddgg|d�}t j |¡}t|jt|ƒƒ d S r½   )r$   r   r   rz  r   r-   r5   )rC   r-   rŒ   rè   r'   r'   r(   rÀ   g  s    zTestEigvalsh.test_typesc                 C   sX   t jddgddggt jd�}ttt jj|dd� ttt jj|dƒ ttt jj|dƒ d S ©Nr^   r¾   r4   Zlrong©ZUPLOÚlowerÚupper)r$   r   rA  r   rÅ   r   rz  ©rC   rŒ   r'   r'   r(   Útest_invalidm  s    zTestEigvalsh.test_invalidc                 C   sì   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ddgt jd�}tt jƒ}t j |¡}t|||d� t jj|dd�}t|||d� t jj|dd�}t|||d� t jj|d	d�}t|||d� t jj|d
d�}t|||d� d S ©Nr   r^   r4   ri   râ   ry  r~  Úlrï   ró   )r$   r   r   r7   r   rz  r   )rC   ÚKloÚKupÚtgtrã   rè   r'   r'   r(   Ú	test_UPLOs  s    
zTestEigvalsh.test_UPLOc                 C   s²   G dd„ dt jƒ}t jdt jd� |¡}t |¡}t|jj	t j
u ƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡}t|jj	t ju ƒ td|jƒ tt|t jƒƒ d S )Nc                   @   s   e Zd ZdS )z/TestEigvalsh.test_0_size.<locals>.ArraySubclassNrÁ   r'   r'   r'   r(   rÂ   ‹  s   rÂ   rÐ   r4   rà   r[   r\   )r$   r%   rÑ   rÒ   r…   r   rz  r   r-   r"   rÓ   r   ro   r#   rÔ   rA  rÕ   r'   r'   r(   rÊ   ‰  s    

zTestEigvalsh.test_0_sizeN©rK   rL   rM   r«   r¬   rÌ   r   r   r   r   rÀ   r‚  rˆ  rÊ   r'   r'   r'   r(   r|  f  s
   
r|  c                   @   s   e Zd Zdd„ ZdS )ÚTestEighCasesc                 C   sÐ   t  |¡}|j|j }}t  |¡\}}|jdd� t||ƒ tt||ƒt	 
|¡dd d d …f t	 
|¡ t|jƒd� t  |d¡\}	}
t|	|ƒ tt||
ƒt	 
|	¡dd d d …f t	 
|
¡ t|jƒt|ƒd� d S )Nri   r1  .râ   rï   )rã   Úerr_msg)r   Úeighrä   rå   rÚ   r  r   r   r	   r$   r   r7   r-   Úrepr)rC   r/   r0   rB   rÖ   rÛ   ZevcrÜ   rÝ   r{  Zevc2r'   r'   r(   rF   ž  s    


 þ

 þzTestEighCases.doNr»   r'   r'   r'   r(   rŠ  œ  s   rŠ  c                   @   sB   e Zd Zej deeee	g¡dd„ ƒZ
dd„ Zdd„ Zdd	„ Zd
S )ÚTestEighr-   c                 C   sJ   t jddgddgg|d�}t j |¡\}}t|jt|ƒƒ t|j|ƒ d S r½   )r$   r   r   rŒ  r   r-   r5   rç   r'   r'   r(   rÀ   ´  s    zTestEigh.test_typesc                 C   sX   t jddgddggt jd�}ttt jj|dd� ttt jj|dƒ ttt jj|dƒ d S r}  )r$   r   rA  r   rÅ   r   rŒ  r�  r'   r'   r(   r‚  »  s    zTestEigh.test_invalidc                 C   s   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ddgt jd�}tt jƒ}t j |¡\}}t|||d� t jj|dd�\}}t|||d� t jj|dd�\}}t|||d� t jj|d	d�\}}t|||d� t jj|d
d�\}}t|||d� d S rƒ  )r$   r   r   r7   r   rŒ  r   )rC   r…  r†  r‡  rã   rè   ré   r'   r'   r(   rˆ  Á  s    
zTestEigh.test_UPLOc                 C   sú   G dd„ dt jƒ}t jdt jd� |¡}t |¡\}}t|jj	t j
u ƒ t|jj	t j
u ƒ t|j|jƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡\}}t|jj	t ju ƒ t|jj	t ju ƒ t|j|jƒ td|jƒ tt|t jƒƒ d S )Nc                   @   s   e Zd ZdS )z+TestEigh.test_0_size.<locals>.ArraySubclassNrÁ   r'   r'   r'   r(   rÂ   Ù  s   rÂ   rÐ   r4   rà   r[   r\   )r$   r%   rÑ   rÒ   r…   r   rŒ  r   r-   r"   rÓ   r   ro   r#   rÔ   rA  rê   r'   r'   r(   rÊ   ×  s    zTestEigh.test_0_sizeNr‰  r'   r'   r'   r(   rŽ  ³  s
   
rŽ  c                   @   s    e Zd ZdZdZedd„ ƒZdS )Ú_TestNormBaseNc                 C   s:   t | jjtjƒr"t|j| jjƒ ntt |jjtjƒƒ d S r!   )	Ú
issubclassr-   r"   r$   Zinexactr   Úrealr   rE  )rŒ   rÖ   r'   r'   r(   Úcheck_dtypeò  s    z_TestNormBase.check_dtype)rK   rL   rM   rT  ÚdecÚstaticmethodr’  r'   r'   r'   r(   r�  î  s   r�  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú_TestNormGeneralc                 C   sF   t tg ƒdƒ t ttg | jd�ƒdƒ t tttg | jd�ƒƒdƒ d S )Nr>  r4   )r   r   r   rT  r   rI   r'   r'   r(   Ú
test_emptyý  s    z_TestNormGeneral.test_emptyc           	   	   C   s„  t  g d¢¡}t jd }t jd }|| }|D �]N}| |¡}t|t j ƒ}|  ||¡ t|dƒ tƒ �<}| 	t
d¡ t|dƒ}|  ||¡ t|dƒ W d   ƒ n1 sª0    Y  t|dƒ}|  ||¡ t|dƒ t|d	ƒ}|  ||¡ t|d
ƒ t|dƒ}|  ||¡ t||j d
¡|j d¡ ƒ t|dƒ}|  ||¡ t||j d
¡|j d¡ ƒ t|t jƒ}|  ||¡ t|dƒ q.d S )Nr  Ú
AllIntegerZAllFloatr>  údivide by zero encounteredri   r   r_   r^   rU   r¾   ra   g      Ð?rT   )r$   r   Ú	typecodesr6  r   r   r’  r   r   ÚfilterÚRuntimeWarningr-   r"   ©	rC   r/   Zexact_typesZinexact_typesZ	all_typesZ	each_typeÚatZanÚsupr'   r'   r(   Útest_vector_return_type  s:    





(





z(_TestNormGeneral.test_vector_return_typec                    sv   g d¢}g d¢}g d¢}‡ fdd„}|||fD ]}||ƒ q.t |ˆ jd�t |ˆ jd�t |ˆ jd�fD ]}||ƒ qdd S )N)r^   r_   r`   ra   )ri   rj   ru   rt   )ri   r_   ru   ra   c                    sÔ   t jjt| ƒdˆ jd� t jjt| tƒdˆ jd� t jjt| t ƒdˆ jd� t jjt| dƒdˆ jd� t jjt| dƒdˆ jd� t jjt| d	ƒdˆ jd� t jjt| d
ƒdˆ jd� t jjt| dƒdˆ jd� d S )Ng�¥6Ò­è@©r,   rW   rT   r^   ç      $@ri   g¸…ëQ¸Þ?r_   rj   gÊsÔcÙÑê?r   ra   )r$   Útestingr   r   r“  r   )ré   rI   r'   r(   Ú_test0  s0    ÿÿÿÿÿÿÿÿz+_TestNormGeneral.test_vector.<locals>._testr4   )r   rT  )rC   r/   r0   r  r£  ré   r'   rI   r(   Útest_vector+  s    
ÿz_TestNormGeneral.test_vectorc           	   	      s¸  t g d¢g d¢g| jd�‰ d dddddtjtj fD ]h‰‡ ‡fd	d
„tˆ jd ƒD ƒ}ttˆ ˆdd�|ƒ ‡ ‡fdd
„tˆ jd ƒD ƒ}ttˆ ˆdd�|ƒ q4tjdd| jd� 	ddd¡‰ˆj
}d ddddtjtj dfD ]Ø‰t t| |ƒd¡D ]¾}|\}}|dk �r||7 }|dk �r"||7 }||k�r@tttˆˆ|d� qòtˆˆ|d�}|||  ‰||k �r†‡‡‡fdd
„tˆjˆ ƒD ƒ}n ‡‡‡fdd
„tˆjˆ ƒD ƒ}t||ƒ qòqÚd S )Nr+  ©ra   rf   r*   r4   ri   r   r^   r_   r`   c                    s$   g | ]}t ˆ d d …|f ˆd�‘qS ©N©Úord©r   ©rw   Úk©r  Úorderr'   r(   rx   O  ry   z._TestNormGeneral.test_axis.<locals>.<listcomp>©r¨  r2  c                    s$   g | ]}t ˆ |d d …f ˆd�‘qS r¦  r©  rª  r¬  r'   r(   rx   Q  ry   é   ra   rj   r  c                    s*   g | ]"}t ˆ d d … j|ˆd�ˆd�‘qS ©Nr1  r§  )r   Útakerª  ©ÚBÚk_indexr­  r'   r(   rx   g  s   ÿc                    s,   g | ]$}t ˆ d d … j|ˆd�jˆd�‘qS r°  )r   r±  rL  rª  r²  r'   r(   rx   j  s   ÿ)r   rT  r$   r   rþ   ro   r   r   rÄ   rn   rl   r€   Úcombinationsr   rÅ   )	rC   Z	expected0Z	expected1Úndr2  Zrow_axisZcol_axisrG  rÉ   r'   )r  r³  r´  r­  r(   Ú	test_axisI  s6    



ÿÿz_TestNormGeneral.test_axisc           	   
   C   sæ  t jdd| jd� ddd¡}d}d}t|d d d	�}t|d d d
d�}tt  |¡|| d d ¡d� d}t|j	|k| |j	|d d ¡ƒ d dddddt j
t j
 fD ]†}t|jƒD ]v}t|||d	�}t|||d
d�}tt  |¡|| ||¡d� t|j	ƒ}d||< t|ƒ}t|j	|k| |j	|||¡ƒ q¨qšd ddddt j
t j
 ddf	D ]¢}t t|jƒd¡D ]ˆ}t|||d	�}t|||d
d�}tt  |¡|| ||¡d� t|j	ƒ}d||d < d||d < t|ƒ}t|j	|k| |j	|||¡ƒ �qT�q>d S )Nr^   r¯  r4   r_   r`   ra   zorder {0}, axis = {1}z;Shape mismatch found {0}, expected {1}, order={2}, axis={3}r®  T)r¨  r2  Úkeepdims)r‹  )r^   r^   r^   ri   r   rj   r  Únuc)r$   rÄ   rT  rn   r   r   ZsqueezeÚformatr   ro   r   rþ   rl   rŠ   r‚   r€   Úpermutations)	rC   r  Zallclose_errZ	shape_errrÉ   ÚfoundZexpected_shaper­  r«  r'   r'   r(   Útest_keepdimsn  sN    
ÿ
ÿ
ÿ

ÿ 
ÿ

ÿz_TestNormGeneral.test_keepdimsN)rK   rL   rM   r–  rŸ  r¤  r·  r½  r'   r'   r'   r(   r•  û  s
   )%r•  c                   @   s:   e Zd ZejZdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dS )Ú_TestNorm2Dc                 C   s    t t| jg g| jd�ƒdƒ d S )Nr4   r>  )r   r   r   rT  rI   r'   r'   r(   Útest_matrix_emptyž  s    z_TestNorm2D.test_matrix_emptyc           	   	   C   s†  |   g d¢g d¢g¡}tjd }d}|| }|D �]N}| |¡}t|tj ƒ}|  ||¡ t|dƒ tƒ �<}| 	t
d¡ t|dƒ}|  ||¡ t|dƒ W d   ƒ n1 s¬0    Y  t|d	ƒ}|  ||¡ t|dƒ t|d
ƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ t|dƒ t|tjƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ tjj|ddd� q0d S )Nr  rÐ   r—  ZfdFDrU   r˜  ri   rT   r^   r_   gªLXèz¶û?rj   r  r¹  gU&,t=Û@r*   r   )r   r$   r™  r6  r   r   r’  r   r   rš  r›  r¢  rœ  r'   r'   r(   Útest_matrix_return_type¡  s@    




(









z#_TestNorm2D.test_matrix_return_typec                 C   sÚ   | j ddgddgg| jd�}tt|ƒdƒ tt|dƒdƒ tt|dƒd	ƒ tt|tƒd
ƒ tt|t ƒdƒ tt|dƒd	ƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ ttt|dƒ ttt|dƒ ttt|dƒ d S )Nr^   r`   rf   rg   r4   g…¹ŽT"@r  r¹  r¡  g      (@rW   ri   rX   r_   g„öW³?"@rj   gÑ—€Ê„ì?Znofroru   r   )r   rT  r   r   r   r   rÅ   r  r'   r'   r(   Útest_matrix_2x2Ô  s    z_TestNorm2D.test_matrix_2x2c                 C   sº   d| j g d¢g d¢g d¢g| jd� }tt|ƒdƒ tt|dƒdƒ tt|dƒd	ƒ tt|tƒd
ƒ tt|t ƒdƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ d S )Ngš™™™™™¹?r+  )r*   r   rf   )r`   r_   r^   r4   grj=Q0î?r  r¹  gþB+pcõ?gš™™™™™ñ?g333333ã?r^   rT   ri   gš™™™™™Ù?r_   gû&Þê.dì?rj   gÜ¸Õ ˆçÈ?)r   rT  r   r   r   r  r'   r'   r(   Útest_matrix_3x3ä  s     ÿz_TestNorm2D.test_matrix_3x3c                 C   s  | j g d¢g d¢g| jd�}tjdd| jd� ddd¡}ttt|d	d
ƒ ttt|dd
ƒ tttddgd	d ƒ tttddgdd ƒ tttddgdd ƒ dD ]4}ttt||d ƒ ttt||dƒ ttt||dƒ q˜ttt|d dƒ ttt|d dƒ ttt|d dƒ d S )Nr+  r¥  r4   r^   r¯  r_   r`   ra   r  r   r¹  Útest©r   r`   rà   )r^   r_   ©r_   r`   ©r   r^   r_   )	r   rT  r$   rÄ   rn   r   rÅ   r   r   )rC   r  r³  r­  r'   r'   r(   Útest_bad_argsõ  s    z_TestNorm2D.test_bad_argsN)
rK   rL   rM   r$   r   r¿  rÀ  rÁ  rÂ  rÇ  r'   r'   r'   r(   r¾  ™  s   3r¾  c                   @   s   e Zd ZdS )Ú	_TestNormNrÁ   r'   r'   r'   r(   rÈ    s   rÈ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestNorm_NonSystematicc                 C   s*   t jdt jd�}tt|dd�ddd� d S )Né
   r4   r`   r§  gÍÌÌÌÌL)@r_   r   )r$   rÄ   Z
longdoubler.   r   r�  r'   r'   r(   Útest_longdouble_norm  s    z+TestNorm_NonSystematic.test_longdouble_normc                 C   s,   t jdgt jd�}tt|dd�ddd� d S )Ni   €r4   r`   r§  l        rf   r   )r$   r   Zint32r.   r   r�  r'   r'   r(   Útest_intmin  s    z"TestNorm_NonSystematic.test_intminc                 C   sŽ   t jdt jd�}d|d< d|d< d}tt jj|dd	�|d
d� | t j¡}tt jj|dd	�|dd� | t j¡}tt jj|dd	�|dd� d S )N©r_   r4   y      @      @r   y      À      @r^   g¨ËþÿV;'@r`   r§  rÊ  r   é	   rf   )	r$   r„   Zclongdoubler.   r   r   r6  Ú
complex128rÔ   )rC   r9  rÖ   r'   r'   r(   Útest_complex_high_ord#  s    z,TestNorm_NonSystematic.test_complex_high_ordN)rK   rL   rM   rË  rÌ  rÐ  r'   r'   r'   r(   rÉ    s   rÉ  c                   @   s   e Zd ZejZdZdS )Ú_TestNormDoubleBaser+   N)rK   rL   rM   r$   r   rT  r“  r'   r'   r'   r(   rÑ  1  s   rÑ  c                   @   s   e Zd ZejZdZdS )Ú_TestNormSingleBaser*   N)rK   rL   rM   r$   rA  rT  r“  r'   r'   r'   r(   rÒ  6  s   rÒ  c                   @   s   e Zd ZejZdZdS )Ú_TestNormInt64Baser+   N)rK   rL   rM   r$   Zint64rT  r“  r'   r'   r'   r(   rÓ  ;  s   rÓ  c                   @   s   e Zd ZdS )ÚTestNormDoubleNrÁ   r'   r'   r'   r(   rÔ  @  s   rÔ  c                   @   s   e Zd ZdS )ÚTestNormSingleNrÁ   r'   r'   r'   r(   rÕ  D  s   rÕ  c                   @   s   e Zd ZdS )ÚTestNormInt64NrÁ   r'   r'   r'   r(   rÖ  H  s   rÖ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestMatrixRankc                 C   sü   t dtt d¡ƒƒ t d¡}d|d< t t|ƒdƒ t tt d¡ƒdƒ t tg d¢ƒdƒ t tt d	¡ƒdƒ t tdgƒdƒ t |t d¡t d¡g¡}t t|ƒt g d
¢¡ƒ t tdƒdƒ ttdƒ� t|ddd� W d   ƒ n1 sî0    Y  d S )Nra   r>  ©ri   ri   r`   rö   r   )r^   r   r   r   r^   )ra   )r`   ra   r   z#`tol` and `rtol` can't be both set.g{®Gáz„?)Útolrã   )r   r   r$   r÷   rÑ   r   r   rÅ   )rC   ÚIÚmsr'   r'   r(   Útest_matrix_rankN  s    
ÿzTestMatrixRank.test_matrix_rankc                 C   s    t dtt d¡dd�ƒ t dtt d¡dd�ƒ t dtt d¡dd�ƒ t d¡}d|d< t d	t|dd�ƒ d
|d< t dt|ddd�ƒ t d	t|ddd�ƒ d S )Nra   Trû   r^   rö   r   r>  rØ  r`   g:Œ0âŽyE>g¾Ü|"•BE>)r:   rÙ  gµ;ä¡ˆ°E>)r   r   r$   r÷   r  rÑ   )rC   rÚ  r'   r'   r(   Útest_symmetric_rankg  s    
z"TestMatrixRank.test_symmetric_rankN)rK   rL   rM   rÜ  rÝ  r'   r'   r'   r(   r×  L  s   r×  c                  C   sž   t j d¡} tdƒD ]„}| jdd�}|d d …df |d d …df  |d d …df< tt|ƒdƒ |d d …d	f |d d …d
f  |d d …df< tt|ƒdƒ qd S )NiŠ3rX  )é(   rÊ  ©Úsizer^   r_   r   rÎ  ra   rf   r`   r]   )r$   r  ZRandomStaterþ   Únormalr   r   )ÚrngÚiÚXr'   r'   r(   Útest_reduced_ranku  s    ,,rå  c                	   @   sš   e Zd ZejZdd„ Zej ddgg d¢¡dd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zej dg d¢¡ej dg d¢¡ej dejejejejg¡dd„ ƒƒƒZdS )ÚTestQRc                 C   s¸  t |ƒ}|j}|j\}}t||ƒ}tj|dd�}|j|j }}	t|j|kƒ t|	j|kƒ tt	||ƒƒ tt	|	|ƒƒ t|j||fkƒ t|	j||fkƒ t
t||	ƒ|ƒ t
t|j ¡ |ƒt |¡ƒ t
t |	¡|	ƒ tj|dd�\}
}t|
j|kƒ t|j|kƒ tt	|
|ƒƒ tt	||ƒƒ t|
j||fkƒ t|j||fkƒ t
t|
|ƒ|ƒ t
t|
j ¡ |
ƒt |¡ƒ t
t |¡|ƒ tj|dd�}t|j|kƒ tt	||ƒƒ t
||ƒ d S )NÚcomplete©ÚmodeÚreducedrµ   )r"   r-   ro   r
  r   ÚqrÚQÚRr   r#   r   r   rL  rÿ   r$   r÷   Útriu)rC   r/   Úa_typeÚa_dtyper<  rG  r«  rÖ   rì  rí  Úq1Úr1Úr2r'   r'   r(   Úcheck_qr†  s:    

zTestQR.check_qrr<  rG  )©r`   r   rÄ  r[   c                 C   st   t ||ƒ}t ||f¡}|  |¡ tjj|dd�\}}t|jtjƒ t|jtjƒ t|j	||fƒ t|j	|fƒ d S )NÚrawrè  )
r
  r$   r„   rô  r   rë  r   r-   r   ro   )rC   r<  rG  r«  r/   ÚhÚtaur'   r'   r(   Útest_qr_empty®  s    

zTestQR.test_qr_emptyc                 C   sÄ   | j ddgddgddggtjd�}tj|dd	�\}}t|jtjkƒ t|jtjkƒ t|jd
kƒ t|jdkƒ tj|jdd	�\}}t|jtjkƒ t|jtjkƒ t|jdkƒ t|jdkƒ d S )Nr^   r_   r`   ra   rf   r*   r4   rö  rè  rÅ  rÍ  rh   )	r   r$   r   r   rë  r   r-   ro   rL  )rC   r/   r÷  rø  r'   r'   r(   Útest_mode_raw¿  s    "zTestQR.test_mode_rawc                 C   sÂ   |   ddgddgg¡}|   ddgddgddgg¡}dD ]8}| |¡}| |¡}|  |¡ |  |¡ |  |j¡ q6dD ]H}dd| |¡  }dd| |¡  }|  |¡ |  |¡ |  |j¡ qtd S )	Nr^   r_   r`   ra   rf   r*   Úfdù              ð?)r   r6  rô  rL  )rC   r/   r0   rT  Úm1Úm2r'   r'   r(   Útest_mode_all_but_economicÕ  s    





z!TestQR.test_mode_all_but_economicc                 C   sf  t |ƒ}|j}|jdd … \}}t||ƒ}tj|dd�\}}t|j|kƒ t|j|kƒ tt||ƒƒ tt||ƒƒ t|jdd … ||fkƒ t|jdd … ||fkƒ tt	||ƒ|ƒ t
 |jd ¡}	t
 |	|jd d… |jd fd  ¡}
tt	t|ddƒ ¡ |ƒ|
ƒ tt
 |dd d …d d …f ¡|ƒ tj|dd�\}}t|j|kƒ t|j|kƒ tt||ƒƒ tt||ƒƒ t|jdd … ||fkƒ t|jdd … ||fkƒ tt	||ƒ|ƒ t
 |jd ¡}	t
 |	|jd d… |jd fd  ¡}
tt	t|ddƒ ¡ |ƒ|
ƒ tt
 |dd d …d d …f ¡|ƒ tj|dd�}t|j|kƒ tt||ƒƒ t||ƒ d S )	Nrj   rç  rè  ri   r_   .rê  rµ   )r"   r-   ro   r
  r   rë  r   r#   r   r	   r$   r   rº   r
   rÿ   rî  )rC   r/   rï  rð  r<  rG  r«  Úqrµ   ZI_matZstack_I_matrñ  rò  ró  r'   r'   r(   Úcheck_qr_stackedæ  sL    
ÿ"ÿÿ"zTestQR.check_qr_stackedrà  ))r`   ra   )ra   r`   rö   rõ  rÄ  Ú
outer_size)rÃ   rÍ  )r_   r`   ra   rT  c                 C   sX   t j d¡}|j|| d� |¡}|j|| d� |¡}|  |¡ |  |d|  ¡ d S )Né{   rß  rü  )r$   r  Zdefault_rngrá  r6  r  )rC   r  rà  rT  râ  r  r³  r'   r'   r(   Útest_stacked_inputs  s
    

zTestQR.test_stacked_inputsN)rK   rL   rM   r$   r   rô  r«   r¬   rÌ   rù  rú  rÿ  r  r   r   r   r   r  r'   r'   r'   r(   ræ  ‚  s   (
-þræ  c                   @   sf   e Zd Zej dg d¢¡ej dejejej	ej
f¡ej dddg¡dd„ ƒƒƒZd	d
„ Zdd„ ZdS )ÚTestCholeskyro   )r   rÃ   ©r`   r`   )é2   r  )r`   rÊ  rÊ  r-   r€  FTc           
      C   s^  t j d¡ t jj|Ž }t  |t j¡r:|dt jj|Ž   }ttt|ƒƒƒ}d|dd …< t  	| 
|¡ ¡ |¡}t j||d�}t jj||d�}|r¦t  	| 
|¡ ¡ |¡}nt  	|| 
|¡ ¡ ¡}t  ¡ �* d|jd  t  |¡j }W d   ƒ n1 sô0    Y  t||||› d	|› d
|› d
|› �d� t j|ddd�}	tt  t  |	¡¡ƒ tt  |	dk¡ƒ d S )Nr^   rü  )ri   rj   rj   r4   ©r€  iô  r   ú Ú
)Úatolr‹  ri   )Zaxis1Zaxis2)r$   r  r  ÚrandnrD  ZcomplexfloatingrŠ   rþ   rQ  r	   r   rÿ   r   r   ÚcholeskyZ_no_nep50_warningro   ZfinfoZepsr   Údiagonalr   rˆ   Zisreal)
rC   ro   r-   r€  r/   Útr  r0   r  r9  r'   r'   r(   Útest_basic_property&  s$    	
8&z TestCholesky.test_basic_propertyc                 C   s¶   G dd„ dt jƒ}t jdt jd� |¡}t |¡}t|j|jƒ t	|j
jt ju ƒ t	t|t jƒƒ t jdt jd� |¡}t |¡}t|j|jƒ t	|j
jt ju ƒ t	t|t jƒƒ d S )Nc                   @   s   e Zd ZdS )z/TestCholesky.test_0_size.<locals>.ArraySubclassNrÁ   r'   r'   r'   r(   rÂ   K  s   rÂ   rÐ   r4   )r^   r   r   )r$   r%   rÑ   rÒ   r…   r   r  r   ro   r   r-   r"   rÓ   r#   rÔ   rÕ   r'   r'   r(   rÊ   J  s    

zTestCholesky.test_0_sizec                 C   sT   t  ddgddgg¡}tt |¡tj|dd�ƒ ttj|dd�t |¡j ¡ ƒ d S )Ny      ð?        y               Ày               @y      @        Fr  T)r$   r   r   r   r  rL  rÿ   )rC   r/   r'   r'   r(   Útest_upper_lower_argZ  s    þz!TestCholesky.test_upper_lower_argN)rK   rL   rM   r«   r¬   rÌ   r$   rA  rÓ   rÔ   rÏ  r  rÊ   r  r'   r'   r'   r(   r  $  s   ÿÿÿr  c                   @   s–   e Zd Ze d¡Ze d¡Ze g d¢g d¢g d¢g¡Ze	ej
 ee¡eƒ eedƒ�, ej
 edd…ejf e¡ W d  ƒ n1 sˆ0    Y  dS )Ú	TestOuterr`   rO  rÆ  )r   r_   ra   z$Input arrays must be one-dimensionalN)rK   rL   rM   r$   rÄ   Zarr1Zarr2r   rÉ   r   r   Úouterr   rÅ   Znewaxisr'   r'   r'   r(   r  f  s   

þÿÿr  c                  C   s¨   t jdkrd} nd} tjtjfD ]‚}tjd|d�}| |j | ¡¡}| |j d¡¡ 	¡ }t
|jjdƒ tjtjtjfD ](}||ƒ}t|||ƒƒ t|||ƒƒ qxq d S )NÚlittleú<rH   ra   r4   rð   ú=)ÚsysÚ	byteorderr$   rA  rÓ   r÷   r…   r-   ZnewbyteorderÚbyteswapr   r   rÎ   r3  r&  r   )ÚnativeZdttrF  Zn_arrZsw_arrZroutinerÖ   r'   r'   r(   Útest_byteorder_checkw  s    
r  rr  rs  c                  C   sl   t  ddgddgg¡} t  ddgddgg¡}t  g d¢¡dd d… }| |d< ||d< tt jjt jj|ƒ d S )Nr^   r_   r`   ra   )ra   ra   r_   r_   .r[   )r$   r   rÑ   r   r   r   rÎ   )Z
invertibleZnon_invertiblerŒ   r'   r'   r(   Ú test_generalized_raise_multiloopŒ  s    r  c                  C   sL  d} zt  ¡ }W n  ttfy0   t d¡ Y n0 |dk�r"t  d¡ t  d¡ dd l}| |j	d¡ zt
jj ¡  W n. tyˆ   Y n ty¤   t  t j¡ Y n0 z0t
 dgg¡}t
jj ddd|d||dd¡	 W n< t�y } z"dt|ƒv rþt  | ¡ W Y d }~n
d }~0 0 t  t j¡ n&t  ¡ \}}t  |¡| k�rHt d¡ d S )	Néÿ   zNot POSIX or fork failed.r   r^   r[   rT   zDORGQR parameter number 5zNumpy xerbla not linked in.)ÚosÚforkÚOSErrorÚAttributeErrorr«   ÚskipÚcloseÚresourceZ	setrlimitZRLIMIT_COREr$   r   Úlapack_liteZxerblarÅ   r“   Ú_exitÚ	EX_CONFIGr   Zdorgqrr?   ÚwaitÚWEXITSTATUS)Z	XERBLA_OKÚpidr$  r/   r™   Ústatusr'   r'   r(   Útest_xerbla_override›  s<    


ý r,  zCannot start subprocessc                  C   sd   ddg} t  d¡}| D ]H}|jdd|d�}t tjd|g¡ |jdd|d�}t tjd|g¡ qd S )	NzPyQt5.QtWidgetsZIPythonzÕ
    import sys
    {before}
    try:
        import {bad_lib}
    except ImportError:
        sys.exit(0)
    {after}
    x = np.ones(2, dtype=np.float32)
    sys.exit(0 if np.allclose(x.dot(x), 2.0) else 1)
    zimport numpy as npÚ )ÚbeforeÚafterÚbad_libz-c)r/  r.  r0  )ÚtextwrapÚdedentrº  Ú
subprocessÚ
check_callr  Ú
executable)Zbad_libsÚtemplater0  Úcoder'   r'   r(   Útest_sdot_bug_8577Ì  s    
ÿÿr8  c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestMultiDotc              	   C   sl   t j d¡}t j d¡}t j d¡}tt|||gƒ| |¡ |¡ƒ tt|||gƒt  |t  ||¡¡ƒ d S ©N©r*   r_   ©r_   r*   ©r$   r  r   r   r   )rC   r  r³  ÚCr'   r'   r(   Ú(test_basic_function_with_three_argumentsò  s
     z5TestMultiDot.test_basic_function_with_three_argumentsc                 C   sN   t j d¡}t j d¡}tt||gƒ| |¡ƒ tt||gƒt  ||¡ƒ d S r:  r=  )rC   r  r³  r'   r'   r(   Ú&test_basic_function_with_two_argumentsü  s    z3TestMultiDot.test_basic_function_with_two_argumentsc                 C   s\   t j d¡}t j d¡}t j d¡}t j d¡}tt||||gƒ| |¡ |¡ |¡ƒ d S )Nr;  r<  ©r_   r^   r=  )rC   r  r³  r>  ÚDr'   r'   r(   Ú9test_basic_function_with_dynamic_programming_optimization  s
    zFTestMultiDot.test_basic_function_with_dynamic_programming_optimizationc                 C   sL   t j d¡}t j d¡}t j d¡}t j d¡}tt||||gƒjdƒ d S )Nr_   r<  r;  rÃ   rÍ  ©r$   r  r   r   ro   )rC   ÚA1dr³  r>  rB  r'   r'   r(   Útest_vector_as_first_argument  s
    z*TestMultiDot.test_vector_as_first_argumentc                 C   sL   t j d¡}t j d¡}t j d¡}t j d¡}tt||||gƒjdƒ d S )Nr;  r<  r_   )r*   rD  )rC   r  r³  r>  ÚD1dr'   r'   r(   Útest_vector_as_last_argument  s
    z)TestMultiDot.test_vector_as_last_argumentc                 C   sL   t j d¡}t j d¡}t j d¡}t j d¡}tt||||gƒjdƒ d S )Nr_   r<  r;  r'   rD  )rC   rE  r³  r>  rG  r'   r'   r(   Ú&test_vector_as_first_and_last_argument!  s
    z3TestMultiDot.test_vector_as_first_and_last_argumentc              	   C   s€   t j d¡}t j d¡}t j d¡}t  d¡}t|||g|d�}||u sLJ ‚t|| |¡ |¡ƒ t|t  |t  ||¡¡ƒ d S )Nr;  r<  ©r&   ©r$   r  rÑ   r   r   r   )rC   r  r³  r>  r&   Úretr'   r'   r(   Útest_three_arguments_and_out+  s    
z)TestMultiDot.test_three_arguments_and_outc                 C   sd   t j d¡}t j d¡}t  d¡}t||g|d�}||u s>J ‚t|| |¡ƒ t|t  ||¡ƒ d S )Nr;  r<  )r*   r*   rJ  rK  )rC   r  r³  r&   rL  r'   r'   r(   Útest_two_arguments_and_out8  s    
z'TestMultiDot.test_two_arguments_and_outc                 C   sz   t j d¡}t j d¡}t j d¡}t j d¡}t  d¡}t||||g|d�}||u sZJ ‚t|| |¡ |¡ |¡ƒ d S )Nr;  r<  rA  )r*   r^   rJ  rK  )rC   r  r³  r>  rB  r&   rL  r'   r'   r(   Ú-test_dynamic_programming_optimization_and_outB  s    
z:TestMultiDot.test_dynamic_programming_optimization_and_outc              	   C   s  t j d¡t j d¡t j d¡t j d¡t j d¡t j d¡g}t  g d¢g d¢g d	¢g d
¢g d¢g d¢g¡}t jg d¢g d¢g d¢g d¢g d¢g d¢gtd�}|d8 }t|dd�\}}tt  |d d…dd …f ¡t  |d d…dd …f ¡ƒ tt  |¡t  |¡ƒ d S )N)é   é#   )rQ  é   )rR  rf   )rf   rÊ  )rÊ  é   )rS  r¯  )r>  g     ÃÎ@g     Ã¾@g    €OÂ@g    €1Ç@g    €ŠÍ@)r>  r>  g     ‚¤@g     ±@g     Õ»@g     ‚Ä@)r>  r>  r>  g     p‡@g     ˆ£@g     ÿ´@)r>  r>  r>  r>  g     @�@g     X«@)r>  r>  r>  r>  r>  g     ˆ³@)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   r   r   r   ra   rf   )r   r   r   r   r   rf   )r   r   r   r   r   r   r4   r^   T)Zreturn_costsri   )r$   r  r   Úintr   r   rî  )rC   ZarraysZ
m_expectedZ
s_expectedrŽ   r<  r'   r'   r(   Útest_dynamic_programming_logicN  s:    





û
û
ûûÿz+TestMultiDot.test_dynamic_programming_logicc                 C   s&   t ttg ƒ t tttj d¡gƒ d S )Nr  )r   rÅ   r   r$   r  rI   r'   r'   r(   Útest_too_few_input_arraysl  s    z&TestMultiDot.test_too_few_input_arraysN)rK   rL   rM   r?  r@  rC  rF  rH  rI  rM  rN  rO  rU  rV  r'   r'   r'   r(   r9  ð  s   
	



r9  c                   @   sv   e Zd Zej de d¡dfe d¡dfg¡dd„ ƒZej dd	d
g¡dd„ ƒZ	ej dddg¡dd„ ƒZ
dd„ ZdS )ÚTestTensorinvzarr, ind©ra   r*   r]   r_   r_   ©r`   r`   r_   r^   c                 C   s:   t tƒ� tj||d� W d   ƒ n1 s,0    Y  d S )N©Úind)r   r   r   Ú	tensorinv)rC   rF  r[  r'   r'   r(   Útest_non_square_handlings  s    
z&TestTensorinv.test_non_square_handlingz
shape, ind)©ra   r*   r]   r`   r_   )©é   r]   r`   r^   c                 C   sN   t  d¡}||_tj||d�}|j|d … |jd |…  }|j}t||ƒ d S )Nr`  ©r/   r[  )r$   r÷   ro   r   r\  r   )rC   ro   r[  r/   ÚainvrÉ   Úactualr'   r'   r(   Útest_tensorinv_shape{  s    
z"TestTensorinv.test_tensorinv_shaper[  r   rj   c                 C   sJ   t  d¡}d|_ttƒ� tj||d� W d   ƒ n1 s<0    Y  d S )Nr`  r^  ra  )r$   r÷   ro   r   rÅ   r   r\  )rC   r[  r/   r'   r'   r(   Útest_tensorinv_ind_limitˆ  s    

z&TestTensorinv.test_tensorinv_ind_limitc                 C   sJ   t  d¡}d|_tj|dd�}t  d¡}tt  ||d¡t j ||¡ƒ d S )Nr`  r_  r^   rZ  )	r$   r÷   ro   r   r\  r  r   Ú	tensordotÚtensorsolve)rC   r/   rb  r0   r'   r'   r(   Útest_tensorinv_result‘  s
    

z#TestTensorinv.test_tensorinv_resultN)rK   rL   rM   r«   r¬   rÌ   r$   r  r]  rd  re  rh  r'   r'   r'   r(   rW  q  s   þ
ý
ÿ
rW  c                   @   sT   e Zd Zej de d¡dfe d¡dfg¡dd„ ƒZej dg d	¢¡d
d„ ƒZ	dS )ÚTestTensorsolveza, axesrX  NrY  )r   r_   c                 C   sP   t tƒ�4 t |jd d… ¡}tj|||d� W d   ƒ n1 sB0    Y  d S ©Nr_   rü   )r   r   r$   r  ro   r   rg  )rC   r/   rý   r0   r'   r'   r(   r]  œ  s    
z(TestTensorsolve.test_non_square_handlingro   ))r_   r`   r*   )r`   ra   ra   r`   )r   r`   r`   r   c                 C   sN   t jj|Ž }t  |jd d… ¡}t j ||¡}tt j||t	|jƒd�|ƒ d S rj  )
r$   r  r  r  ro   r   rg  r   rf  rQ  )rC   ro   r/   r0   rŒ   r'   r'   r(   Útest_tensorsolve_result¥  s    z'TestTensorsolve.test_tensorsolve_result)
rK   rL   rM   r«   r¬   rÌ   r$   r  r]  rk  r'   r'   r'   r(   ri  š  s   þ
ÿri  c                  C   sR   t jddgddggdd�} ttdƒ� t | ¡ W d   ƒ n1 sD0    Y  d S )Nr^   rj   r_   rf   Zfloat16r4   zunsupported in linalg)r$   r   r   rn  r   r  )rF  r'   r'   r(   Útest_unsupported_commontype¯  s    rl  z,Bad memory reports lead to OOM in ci testingc                  C   sR   d} t jd| gt jd�}t jddgt jd�}d|d< t  ||¡}t|d dƒ d S )Nì        r^   r4   )r   ri   )r$   rÑ   rA  r  r   r   )rG  r/   r0   r  r'   r'   r(   Útest_blas64_dotº  s    rn  z*Numpy not compiled with 64-bit BLAS/LAPACKc            
   	   C   sº   t j} t jjj}d}d}|}t jddg| d�}t jdg| d�}t jdg| d�}|||||||ddƒ}t|d dƒ t|d |ƒ t|d |ƒ t| ¡ ƒ}	t	d	|	  k o®d
k n  ƒ d S )Nl       r^   r4   ri   r   Úinfor<  rG  rm  l        )
r$   rÓ   r   r%  ZdgeqrfrÑ   r   rT  Úitemr   )
r-   Zlapack_routiner<  rG  Zldar/   Zworkrø  ÚresultsZlworkr'   r'   r(   Ú!test_blas64_geqrf_lwork_smoketestÄ  s    
rr  c                  C   sF   t  d¡ d¡} t j | ¡}t  g d¢g d¢g d¢g¡}t||ƒ d S )Né<   ©r`   ra   rf   )r   r*   r+   é   )rS  é   rY  é&   )rÞ  é.   é4   é:   )r$   rÄ   rn   r   r  r   r   ©rŒ   rc  rÉ   r'   r'   r(   Útest_diagonalà  s    ýÿr|  c                  C   s8   t  d¡ d¡} t j | ¡}t  g d¢¡}t||ƒ d S )Nrs  rt  )é$   ét   éÄ   )r$   rÄ   rn   r   Útracer   r   r{  r'   r'   r(   Ú
test_traceð  s    r�  c                  C   sÌ   t  d¡ d¡} t j | | d ¡}t  g d¢g d¢g d¢g¡}t||ƒ g d¢}g d¢}t j ||¡}tg d¢ƒ}t||ƒ ttdƒ�2 | d d …dd …f }t j ||¡ W d   ƒ n1 s¾0    Y  d S )	NrÎ  r  r^   )ri   r_   ri   r+  r¥  )ru   r*   ru   z8input arrays must be \(arrays of\) 3-dimensional vectors)	r$   rÄ   rn   r   Úcrossr   r   r   rÅ   )rŒ   rc  rÉ   ró   ré   Zx_2dimr'   r'   r(   Ú
test_crossû  s&    ý

þrƒ  c                  C   sH   t  d¡ d¡} t j | | ¡dks&J ‚t jj| | ddgd�dksDJ ‚d S )Nr*   rÅ  é7   rà   rü   )r$   rÄ   rn   r   rf  )rŒ   r'   r'   r(   Útest_tensordot	  s    r…  c                  C   sD   t  d¡ d¡} t j | | j¡}t  ddgddgg¡}t||ƒ d S )Nr*   rÅ  rf   é   r  )r$   rÄ   rn   r   r	   rL  r   r   r{  r'   r'   r(   Útest_matmul	  s    r‡  c                  C   sr   t  d¡ d¡} t j | ¡}| j}t||ƒ ttdƒ�( t j | d d …df ¡ W d   ƒ n1 sd0    Y  d S )Nr*   rÅ  z$array must be at least 2-dimensionalr   )	r$   rÄ   rn   r   Zmatrix_transposerL  r   r   rÅ   r{  r'   r'   r(   Útest_matrix_transpose(	  s    
ÿrˆ  c                  C   s\   t  d¡ d¡} t j | ¡}t|t  d¡dd� t jj| dd�}t|t  dgg¡dd� d S )NrÎ  r  çž^)Ë�,@r`   ©r2   T©r¸  )r$   rÄ   rn   r   Zmatrix_normr   rÓ   r   )rŒ   rc  r'   r'   r(   Útest_matrix_norm5	  s
    rŒ  c                  C   s˜   t  d¡ d¡} t j | ¡}t|t  d¡dd� t jj| dd�}t|t  g d¢¡dd� t jj| d	d
�}t jdddd�}t	|j
|j
ƒ t||dd� d S )NrÎ  r  r‰  r`   rŠ  r   r1  )gÚ|a2Õ@gsh‘í|? @gDioð…I#@Tr‹  r   rÓ   r4   )r$   rÄ   rn   r   Zvector_normr   rÓ   r   Úfullr   ro   r{  r'   r'   r(   Útest_vector_norm@	  s    ÿrŽ  )r*   r+   )�Ú__doc__r  r  r€   r”   r1  r3  r«   Únumpyr$   r   r   r   r   r   r   r   r	   Znumpy._corer
   Znumpy.exceptionsr   r   r   r   r   r   Znumpy.linalgr   r   r   r   r   Znumpy.linalg._linalgr   Znumpy.testingr   r   r   r   r   r   r   r   r   r    Znumpy.linalg.lapack_liteÚImportErrorr)   r.   r5   r6   r7   rO   r>   rR   r  r  rk   r„   r   rr   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  r$  r(  r)  r*  r/  r0  r=  rB  rK  r¬   rÌ   rU  rx  r|  rŠ  rŽ  r�  r•  r¾  rÈ  rÉ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rå  ræ  r  r  r  rw  r  r,  r­   r8  r9  rW  ri  rl  r"  rn  r#  rr  r|  r�  rƒ  r…  r‡  rˆ  rŒ  rŽ  r'   r'   r'   r(   Ú<module>   s(  (0	þþþþþþý
þ
þþã#þþþþÿýÿýÿýÿýÿýÿý
þ
þ
þ
ý
ýÎ9þþþþýþþþé !
0

K	$.Cý
*1V6; x) #B
1" )
	
ÿ


