U
    U‚g/ ã                   @   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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+ d
d„ Z,e&Z-dódd„Z&dd„ Z.dd„ Z/dd„ Z0ddddddhZ1G dd„ dƒZ2dd„ Z3e	j4 5d ¡ g Z6e6e3de2d!e
d"d#gd$d%gged&�e
d#d"ged&�ƒe2d'e
d"d#gd$d%gged&�e
d#d"ged&�ƒe2d(e
d"d#gd$d%gged&�e
d#d"d%gd$d%d)gged&�ƒe2d*e
d+d,gd-d.gged&�e
d/d+ged&�ƒe2d0e
d+d,gd-d.gged&�e
d/d+ged&�ƒe2d1e
d+d,gd-d.gged&�e
d/d+d2gd3d4d5gged&�ƒe2d6e	j7d7ed&�e	j7d8ed&�dhd9�e2d:e	j4 8d;d;¡e	j4 8d;¡ƒe2d<e	j4 8d=d=¡e	j4 8d=¡ƒe2d>d=d?gd@dAggd?d=gƒg
ƒ7 Z6e6e3de2dBe
d"d#d$gd$d%d)gged&�e
d#d"ged&�ƒe2dCe
d"d#gd$d%gdDd)gged&�e
d#d"d$ged&�ƒe2dEe
d"d#d$gd$d%d)gged&�e
d#d"ged&�ƒe2dFe
d"d#gd$d%gdDd)gged&�e
d#d"d$ged&�ƒe2dGe
dHdIdJgdKdLdMgged&�e
d/d+ged&�ƒe2dNe
dHdIgdJdOgdPdQgged&�e
d/d+dJged&�ƒe2dRe
dHdIdJgdKdLdMgged&�e
d/d+ged&�ƒe2dSe
dHdIgdJdOgdPdQgged&�e
d/d+dJged&�ƒe2dTe
dHdIdJgdKdLdMgged&�e
d/d+gdUdVgged&�ƒe2dWe
dHdIgdJdOgdPdQgged&�e
d/d+gdUdVgdUdVgged&�ƒe2dXe	j4 8d;dY¡e	j4 8d;¡ƒe2dZe	j4 8d=d[¡e	j4 8d=¡ƒe2d\e	j4 8d[d=¡e	j4 8d[¡ƒe2d]e	j4 8ddA¡e	j4 8d¡dhd9�e2d^e	j4 8dAd¡e	j4 8dA¡dhd9�gƒ7 Z6e6e3de2d_e
d"d#gd#d"gged&�dƒe2d`e
d"d#gd#d"gged&�dƒe2dae
d"d,gdbd=gged&�dƒe2dce
d"d,gdbd=gged&�dƒe2dde	j7d7ed&�ddhd9�e2ded=d?gd?d=ggdƒe2dfe
d"d#gd#d"ggƒdƒe2dge	j4 8d=d=¡dƒgƒ7 Z6dhdi„ Z9e6e9ƒ 7 Z6djdk„ Z:dldm„ Z;e6e;ƒ 7 Z6G dndo„ doƒZ<G dpdq„ dqe<ƒZ=G drds„ dse<ƒZ>G dtdu„ due<ƒZ?G dvdw„ dwe<ƒZ@G dxdy„ dye<ƒZAG dzd{„ d{e<ƒZBd|d}„ ZCd~d„ ZDG d€d�„ d�e=e@ƒZEG d‚dƒ„ dƒeEƒZFG d„d…„ d…e=e@ƒZGG d†d‡„ d‡eGƒZHG dˆd‰„ d‰e=e@ƒZIG dŠd‹„ d‹eIƒZJG dŒd�„ d�e=e@ƒZKG dŽd�„ d�eKƒZLG d�d‘„ d‘ƒZMG d’d“„ d“e=e@ƒZNG d”d•„ d•eNeMƒZOG d–d—„ d—e?eBƒZPG d˜d™„ d™ePeMƒZQG dšd›„ d›e=e@ƒZRG dœd�„ d�eRƒZSG dždŸ„ dŸe=e>e@eAƒZTG d d¡„ d¡eTƒZUG d¢d£„ d£e?eBƒZVG d¤d¥„ d¥eVƒZWG d¦d§„ d§e=e@ƒZXG d¨d©„ d©eXƒZYG dªd«„ d«e=e>ƒZZG d¬d­„ d­eZƒZ[ej\ ]d®d¯d°„ d±D ƒ¡G d²d³„ d³ƒƒZ^G d´dµ„ dµe?eBƒZ_G d¶d·„ d·ƒZ`G d¸d¹„ d¹e?eBƒZaG dºd»„ d»ƒZbG d¼d½„ d½ƒZcG d¾d¿„ d¿ecƒZdG dÀdÁ„ dÁecƒZeG dÂdÃ„ dÃeeedƒZfG dÄdÅ„ dÅƒZgG dÆdÇ„ dÇecƒZhG dÈdÉ„ dÉecƒZiG dÊdË„ dËecƒZjG dÌdÍ„ dÍefehƒZkG dÎdÏ„ dÏefeiƒZlG dÐdÑ„ dÑefejƒZmG dÒdÓ„ dÓƒZndÔdÕ„ ZoG dÖd×„ d×ƒZpG dØdÙ„ dÙƒZqdÚdÛ„ Zrej\jse+dÜdÝ�dÞdß„ ƒZtdàdá„ Zuej\jse+dâdÝ�ej\jvdãdä„ ƒƒZwG dådæ„ dæƒZxG dçdè„ dèƒZyG dédê„ dêƒZzdëdì„ Z{ej\j|dídÝ�dîdï„ ƒZ}ej\j~e* dðdÝ�dñdò„ ƒZdS )ôz# Test functions for linalg module

é    N)ÚarrayÚsingleÚdoubleÚcsingleÚcdoubleÚdotÚidentityÚmatmul)Úswapaxes)Ú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kS ©N)ÚtypeÚ
isinstanceÚnpÚndarray)ÚoutÚin_© r'   úB/tmp/pip-unpacked-wheel-qf11kc36/numpy/linalg/tests/test_linalg.pyÚconsistent_subclass   s    ÿr)   é   é   c                 K   s8   t | ƒjjttfk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_dtype,   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_dtype1   s       ÿÿr6   c                 C   s   | t tfkrdS dS d S )Ngñhãˆµøä>g•dyáý¥=)r   r   r4   r'   r'   r(   Úget_rtol6   s    r7   ÚsquareÚ	nonsquareÚ	hermitianÚgeneralizedúsize-0Ústridedc                   @   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__F   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(   ÚcheckQ   s    zLinalgCase.checkc                 C   s   d| j › d�S )Nz<LinalgCase: ú>)r@   ©rC   r'   r'   r(   Ú__repr__W   s    zLinalgCase.__repr__N)Ú__name__Ú
__module__Ú__qualname__ÚsetrD   rG   rJ   r'   r'   r'   r(   r>   E   s   r>   c                 C   s,   | t kst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_tagsÚAssertionErrorrB   )ÚtagZcasesÚcaser'   r'   r(   Ú	apply_tag[   s    rS   éÒ  r   ç      ð?ç       @ç      @ç      @r4   r   Zdouble_2ç      @r   y      ð?       @y       @      @y      @      @y      @      @y       @      ð?r   Z	cdouble_2y      ð?      @y      ð?       Ày      ð?      Ày      ð?      ÀZ0x0©r   r   ©r   rE   Z8x8é   Z1x1é   Znonarrayé   é   é   Zsingle_nsq_1Zsingle_nsq_2g      @Zdouble_nsq_1Zdouble_nsq_2Zcsingle_nsq_1y      ð?      ð?y       @       @y      @      Ày      @      Ày      @      "@y      @       @Zcsingle_nsq_2y      @      "Ày      @      Ày      @       @Zcdouble_nsq_1Zcdouble_nsq_2Zcdouble_nsq_1_2y      ð?      ð¿y       @       ÀZcdouble_nsq_2_2Z8x11é   Z1x5é   Z5x1Z0x4Z4x0ZhsingleZhdoubleZhcsingley       @      ÀZhcdoubleZhemptyZ	hnonarrayZmatrix_b_onlyZhmatrix_1x1c                  C   s  g } t D �]}t|jtjƒsqt |jd|j d|j g¡}|jd krLd }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 krÆd }n$t |jgd d ¡ d|jj ¡}t|jd	 |||j	dhB d�}|  
|¡ q| S )
Nr^   r_   é   r*   Z_tile3r;   rE   ©r_   r^   Z_tile213)ÚCASESr"   r/   r#   r$   r   r0   r>   r@   rB   ÚappendÚreshapeÚshape)Ú	new_casesrR   r/   r0   Únew_caser'   r'   r(   Ú_make_generalized_casesë   s*    


ÿ
$
$
ÿrk   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_   éüÿÿÿéÿÿÿÿr]   éþÿÿÿr^   )r]   rm   éýÿÿÿc                 S   s   g | ]\}}t || ƒ‘qS r'   )Úabs)Ú.0r/   r0   r'   r'   r(   Ú
<listcomp>  s     z%_stride_comb_iter.<locals>.<listcomp>c                 S   s   g | ]}t d d |ƒ‘qS r    )Úslice)rr   Úrepeatr'   r'   r(   rs     s     r4   l   ï>[= .Zstride_Ú_c                 S   s   g | ]}d | ‘qS )z%+dr'   )rr   Újr'   r'   r(   rs   (  s     r   )ÚstridesZstride_xxx_0Zstride_xxx_0_x©r]   r]   Zstride_xxx_0_0)r"   r#   r$   ÚndimÚ	itertoolsÚproductÚtupleÚziprh   Úemptyr-   ÚviewZuint32ÚfillÚ	__class__r   ÚallÚjoinÚlistrx   ÚlibZstride_tricksZ
as_strided)ÚxZ
stride_setZrepeatsÚ	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 )Nrv   r=   rE   )re   r‹   r/   r0   r>   r@   rB   rf   )ri   rR   r/   Za_labelr0   Zb_labelrj   r'   r'   r(   Ú_make_strided_cases=  s    
ÿrŒ   c                   @   s"   e Zd ZeZeƒ eƒ fdd„ZdS )ÚLinalgTestCasec                 C   s‚   | j D ]v}|j|@ |krq|j|@ r&qz| | j¡ W q tk
rz } z&d|›d�}|t ¡ 7 }t|ƒ|‚W 5 d}~X Y qX 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_excrP   )rC   ÚrequireÚexcluderR   ÚeÚmsgr'   r'   r(   Úcheck_casesQ  s    

zLinalgTestCase.check_casesN)rK   rL   rM   re   rŽ   rN   r–   r'   r'   r'   r(   r�   N  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 )Nr8   r;   r<   ©r’   r“   ©r–   rI   r'   r'   r(   Útest_sq_casesg  s    ÿz"LinalgSquareTestCase.test_sq_casesc                 C   s   | j ddhdhd� d S )Nr8   r<   r;   r˜   r™   rI   r'   r'   r(   Útest_empty_sq_casesk  s    
ÿz(LinalgSquareTestCase.test_empty_sq_casesN)rK   rL   rM   rš   r›   r'   r'   r'   r(   r—   e  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_casesr  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_casesv  s    
ÿz.LinalgNonsquareTestCase.test_empty_nonsq_casesN)rK   rL   rM   r�   rž   r'   r'   r'   r(   rœ   p  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;   r8   r<   r˜   r™   rI   r'   r'   r(   Útest_generalized_sq_casesˆ  s    
ÿz9LinalgGeneralizedSquareTestCase.test_generalized_sq_casesc                 C   s   | j dddhd� d S )Nr;   r8   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 dddhd� d S )Nr;   r9   r<   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 dddhdhd� d S )Nr;   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   sÂ   t | ƒ} | jdkr´| j|jkr<| jd d… |jdd …  }n(| j|jd kr\| jd d… }ntdƒ‚tj|t | |¡d�}tjt	t
| jd d… ƒŽ D ]}t| | || ƒ||< q”|S t| |ƒS d S )Nr_   rn   r]   zNot implemented...r4   ro   )r   rz   rh   Ú
ValueErrorr#   r   Zcommon_typer{   r|   ÚmapÚranger   )r/   r0   rˆ   ÚrÚcr'   r'   r(   Údot_generalized«  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   ro   .r   )r   rz   r#   r   rh   r-   r   )r/   r³   r'   r'   r(   Úidentity_like_generalized¾  s    
r¶   c                   @   s   e Zd Zdd„ ZdS )Ú
SolveCasesc                 C   s.   t  ||¡}t|t||ƒƒ tt||ƒƒ d S r    )r   Úsolver   rµ   r   r)   )rC   r/   r0   rB   r‡   r'   r'   r(   rF   Ê  s    zSolveCases.doN©rK   rL   rM   rF   r'   r'   r'   r(   r·   È  s   r·   c                   @   s:   e Zd Zej deeee	g¡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¡ 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¡ dd¡ |¡}t ||¡d d …dd…f }t |d d …dd…dd…f |d d …dd…f ¡}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>.ArraySubclassN©rK   rL   rM   r'   r'   r'   r(   ÚArraySubclass×  s   rÀ   r\   r^   r*   r]   r_   r   )r#   r$   Úarangerg   r€   r   r¸   r   r   r"   r   r   r°   ©rC   rÀ   r/   r0   ÚexpectedÚresultr'   r'   r(   Útest_0_sizeÖ  s*    "8
(& 2
 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À   r`   r]   r^   r*   r_   r   )
r#   r$   rÁ   rg   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º   Ð  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
kƒ t|j|jƒ tt||ƒƒ t jdt jd� |¡}t |¡}t|jj	t jkƒ 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   rZ   )r#   r$   ÚzerosÚint_r€   r   rÉ   r   r-   r!   Úfloat64r   rh   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   rn   )r#   r   r   r   rÔ   r-   r6   r½   r'   r'   r(   r¾   3  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
kƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡}t|jj	t jkƒ 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À   <  s   rÀ   rË   r4   ©r   r]   rZ   r[   )r#   r$   rÌ   rÍ   r€   r   rÔ   r   r-   r!   rÎ   r   rh   r"   rÏ   rÐ   r'   r'   r(   rÅ   :  s    

zTestEigvals.test_0_sizeNrÒ   r'   r'   r'   r(   rÙ   2  s   
rÙ   c                   @   s   e Zd Zdd„ ZdS )ÚEigCasesc                 C   sX   t  |¡\}}tt||ƒt |¡t |¡dd d d …f  t|jƒd� tt	||ƒƒ d S )N.©Úrtol)
r   rÕ   r   rµ   r#   r   r7   r-   r   r)   )rC   r/   r0   rB   r×   rØ   r'   r'   r(   rF   O  s    
 þzEigCases.doNr¹   r'   r'   r'   r(   rÜ   M  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¾   X  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
kƒ t|jj	t j
kƒ t|j|jƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡\}}t|jj	t jkƒ t|jj	t jkƒ 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À   f  s   rÀ   rË   r4   rÛ   rZ   r[   )r#   r$   rÌ   rÍ   r€   r   rÕ   r   r-   r!   rÎ   r   rh   r"   rÏ   ©rC   rÀ   r/   rÑ   Zres_vr'   r'   r(   rÅ   d  s    zTestEig.test_0_sizeNrÒ   r'   r'   r'   r(   rß   W  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   sx   t jddgddgg|d�}t |¡\}}}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   Úsvdr   r-   r5   r:   )rC   r-   r‡   ÚurŠ   Úvhr'   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   rè   rŠ   Ú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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 )r`   r   Trå   ©r`   r`   rZ   r`   )r   r`   N)r#   r   r   rç   r:   r   rh   Úeye)rC   r‡   rè   rŠ   ré   r'   r'   r(   Útest_empty_identity•  s    

zTestSVD.test_empty_identityN)rK   rL   rM   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 )Nro   rn   ©Úaxes)r…   r²   rz   r#   ÚconjÚ	transpose)Úmatró   r'   r'   r(   r:   «  s    z'SVDHermitianCases.do.<locals>.hermitianrn   )r   rç   r   rµ   r#   r   r7   r-   r   r	   Úbroadcast_torî   rh   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|k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   ).rn   rb   ra   ©r1   r2   r^   ro   r]   rn   Úfro)r   r   r   r   Úcondrç   r   r#   rÉ   rq   ÚsumÚmaxÚminr   Úsqrt)rC   r/   r0   rB   r´   rŠ   Zcinvr'   r'   r(   rF   ¾  sp      þ
  þ
  þ
& ý
& ý& ý& ý
ÿ ü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 dddgdddgdddggƒ}tt |t¡dƒ tt |t ¡dƒ tt |d¡dƒ tt |d¡d	ƒ tt |d
¡t d¡ƒ d S )NrU   r   r]   g       ÀrW   r`   gUUUUUUå?rn   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   sx   t  d¡t  d¡g}d dddg}ddg}t ||¡D ]\}}tt ||¡dkƒ q4t ||¡D ]\}}t ||¡ q^d S )N©r^   r^   r]   r^   rü   rn   ro   ç  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ö   d dddddg}d dddg}t  d¡}t j|d< |D ].}t ||¡}tt|t jƒƒ tt  |¡ƒ q4t  d¡}t j|d	< |D ]t}t ||¡}tt  |d ¡ƒ ||krÈt|d
 dkƒ t|d dkƒ q|tt  |d
 ¡ ƒ tt  |d ¡ ƒ q|d S )Nr]   rn   r^   ro   rü   r  rÛ   )r_   r^   r^   )r]   r   r]   r   r  )	r#   r  Únanr   rý   r   r"   Zfloat_Úisnan)rC   Ú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 )	NrT   r^   r   rZ   ry   )Nr]   r^   rü   rn   ro   rÛ   ©r]   r   )
r#   ÚrandomÚseedÚrandr   rý   r   r   r   Úisfinite)rC   r  r
  r´   r'   r'   r(   Útest_stacked_singular  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 )Nrb   ra   rû   ©r   Úpinvrµ   r   r   r)   ©rC   r/   r0   rB   Za_ginvr   r'   r'   r(   rF   1  s    
zPinvCases.doNr¹   r'   r'   r'   r(   r  ,  s   r  c                   @   s   e Zd ZdS )ÚTestPinvNr¿   r'   r'   r'   r(   r  9  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ñ   rb   ra   rû   r  r  r'   r'   r(   rF   ?  s    zPinvHermitianCases.doNr¹   r'   r'   r'   r(   r  =  s   r  c                   @   s   e Zd ZdS )ÚTestPinvHermitianNr¿   r'   r'   r'   r(   r  G  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚDetCasesc           
      C   sÌ   t  |¡}t  |¡\}}t|ƒjjttfkr<t|ƒ 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 )Nrn   ©Úaxisr   r]   )r   ÚdetÚslogdetr   r-   r!   r   r   Úastyper   rÔ   r   r   Úreducer#   ÚexpZ
atleast_1drq   r   r   )
rC   r/   r0   rB   ÚdrŠ   ZldÚadrÖ   Úmr'   r'   r(   rF   M  s    



zDetCases.doNr¹   r'   r'   r'   r(   r   K  s   r   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   r#  r!   r   r   r$  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   r#  r-   r$  r5   )rC   r-   r‡   ÚphrŠ   r'   r'   r(   r¾   m  s
    zTestDet.test_typesc                 C   sð   t jdt jd�}t |¡}t|dƒ t|jjt jkƒ t 	|¡}t|dƒ t|d jjt jkƒ t|d jjt j
kƒ t jdt jd�}t |¡}t|dƒ t|jjt jkƒ t 	|¡}t|dƒ t|d jjt jkƒ t|d jjt jkƒ d S )NrZ   r4   rU   r  r   r]   )r#   rÌ   rÏ   r   r#  r   r   r-   r!   r$  Úfloat32rÎ   )rC   r/   rÑ   r'   r'   r(   rÅ   u  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 )	NFrn   ©Zrcondr   r^   r!  r]   rl   )r#   r   rh   r   rç   Úlstsqr   rƒ   r   r   r   Z__array_wrap__rq   rþ   rz   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(   r0  ‰  s   r0  c                
   @   sF   e Zd Zdd„ Zej dddgdddd	d
ddg¡dd„ ƒZdd„ ZdS )Ú	TestLstsqc           	      C   sô   t  ddddddgddddddgddddddgddddddgg¡j}t  ddddddg¡}tƒ �Š}| td¡}t ||¡\}}}}t|d	kƒ tj||d
d�\}}}}t|d	kƒ tj||d d�\}}}}t|dkƒ tt	|ƒdkƒ W 5 Q R X d S )Nr,  rU   rV   rX   rW   r]   r   z`rcond` parameter will changer`   rn   r1  r_   )
r#   r   ÚTr   ÚrecordÚFutureWarningr   r2  r   Úlen)	rC   r/   r0   Úsuprá   r‡   r7  r8  rŠ   r'   r'   r(   Útest_future_rcond¨  s    ýzTestLstsq.test_future_rcondr*  r6  Ún_rhs)r`   r^   r^   )r   r`   r]   )r   r`   r^   )r`   r   r]   )r`   r   r^   )r`   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 )Nr1  r   r[   ro   r!  )r#   rÁ   rg   r  r   r2  r   rƒ   r   rh   r   r   rþ   r   )rC   r*  r6  rA  r/   r0   r‡   r7  r8  rŠ   r³   r'   r'   r(   Útest_empty_a_bº  s    
zTestLstsq.test_empty_a_bc              	   C   sj   t  ddddg¡}t  ddddd	g¡}t  |t  t|ƒ¡g¡j}ttd
ƒ� tj	||d d� W 5 Q R X d S )Nr   r]   r^   r_   rn   gš™™™™™É?gÍÌÌÌÌÌì?gÍÌÌÌÌÌ @gffffff
@zIncompatible dimensionsr1  )
r#   r   Zvstackr  r>  r;  r   r   r   r2  )rC   r‡   Úyr  r'   r'   r(   Útest_incompatible_dimsÒ  s
    z TestLstsq.test_incompatible_dimsN)	rK   rL   rM   r@  r¦   r§   rÇ   rB  rD  r'   r'   r'   r(   r:  §  s   ù	
r:  Údtc                 C   s   g | ]}t  |¡‘qS r'   )r#   r-   )rr   r´   r'   r'   r(   rs   Û  s     rs   z?bBhHiIqQefdgFDGOc                   @   sè   e Zd Ze d¡Zeddddg Zeddddg Zeddddg 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 )ÚTestMatrixPowerr`   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_1r%  r   r   Úrshft_0Úrshft_2Úrshft_3)rC   rE  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_allr%  ÚobjectÚstacked©rC   rE  rR  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ö   rQ  r'   r'   r(   rR  ÿ  s    

z-TestMatrixPower.test_power_is_one.<locals>.tzrS  rW  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-   rU  r	   r   r   )rö   rQ  Úmmulr'   r'   r(   rR  
  s    
z-TestMatrixPower.test_power_is_two.<locals>.tzrS  rW  r'   r'   r(   Útest_power_is_two	  s
    
z!TestMatrixPower.test_power_is_twoc                 C   s0   dd„ }| j D ]}|| jkr|| |¡ƒ qd S )Nc                 S   s4   t | dƒ}| jtkrtnt}t||| ƒt| ƒƒ d S ©Nrn   )r   r-   rU  r	   r   r   r¶   )rö   ZinvmatrZ  r'   r'   r(   rR    s    
 ÿz3TestMatrixPower.test_power_is_minus_one.<locals>.tz)rT  Údtnoinvr%  rW  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]   )rL  r%  r   Ú	TypeErrorr   ©rC   rE  rö   r'   r'   r(   Útest_exceptions_bad_power   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^   )r`   r_   r^   )r   r   r   r#   r   r  )rC   rE  r'   r'   r(   Útest_exceptions_non_square%  s    z*TestMatrixPower.test_exceptions_non_squareúfp errors don't work in wasm©r  c                 C   s,   || j krd S | j |¡}ttt|dƒ d S r\  )r]  Únoninvr%  r   r   r   r`  r'   r'   r(   Útest_exceptions_not_invertible*  s    
z.TestMatrixPower.test_exceptions_not_invertibleN)rK   rL   rM   r#   rî   rL  rK  rM  rN  rT  r   re  ÚblockrV  rU  r-   r]  rO  rX  rY  r[  r^  ra  rb  r¦   r§   Úskipifr   rf  r'   r'   r'   r(   rF  Û  s"   
rF  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ÚLrn   r!  rÝ   ÚU)r   ÚeigvalshrÕ   rø   r   r7   r-   )rC   r/   r0   rB   rÖ   r×   rØ   Úev2r'   r'   r(   rF   4  s    zTestEigvalshCases.doNr¹   r'   r'   r'   r(   ri  2  s   ri  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   rl  r   r-   r5   )rC   r-   r‡   rá   r'   r'   r(   r¾   A  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   r/  r   r°   r   rl  ©rC   r‡   r'   r'   r(   Útest_invalidG  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   rn   rÝ   rj  rp  Úlrk  rè   )r#   r   r   r7   r   rl  r   )rC   ÚKloÚKupÚtgtrÞ   rá   r'   r'   r(   Ú	test_UPLOM  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
kƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡}t|jj	t jkƒ 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À   e  s   rÀ   rË   r4   rÛ   rZ   r[   )r#   r$   rÌ   rÍ   r€   r   rl  r   r-   r!   rÎ   r   rh   r"   rÏ   r/  rÐ   r'   r'   r(   rÅ   c  s    

zTestEigvalsh.test_0_sizeN©rK   rL   rM   r¦   r§   rÇ   r   r   r   r   r¾   rt  rz  rÅ   r'   r'   r'   r(   rn  @  s
   
rn  c                   @   s   e Zd Zdd„ ZdS )ÚTestEighCasesc           
      C   sÆ   t  |¡\}}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 )Nrn   r!  .rÝ   rk  )rÞ   Úerr_msg)r   ÚeighrÕ   rø   r   r   rµ   r#   r   r7   r-   Úrepr)
rC   r/   r0   rB   rÖ   Zevcr×   rØ   rm  Zevc2r'   r'   r(   rF   x  s    

 þ

  þzTestEighCases.doNr¹   r'   r'   r'   r(   r|  v  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 ro  )r#   r   r/  r   r°   r   r~  rs  r'   r'   r(   rt  ”  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 ru  )r#   r   r   r7   r   r~  r   )rC   rw  rx  ry  rÞ   rá   râ   r'   r'   r(   rz  š  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
kƒ t|jj	t j
kƒ t|j|jƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡\}}t|jj	t jkƒ t|jj	t jkƒ 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Û   rZ   r[   )r#   r$   rÌ   rÍ   r€   r   r~  r   r-   r!   rÎ   r   rh   r"   rÏ   r/  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   r4  )r‡   rÑ   r'   r'   r(   Úcheck_dtypeË  s    z_TestNormBase.check_dtype)rK   rL   rM   rE  Ú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   rE  r   rI   r'   r'   r(   Ú
test_emptyÖ  s    z_TestNormGeneral.test_emptyc           	   
   C   sr  t  dddg¡}t jd }t jd }|| }|D �]:}| |¡}t|t j ƒ}|  ||¡ t|dƒ tƒ �2}| 	t
d¡ t|dƒ}|  ||¡ t|dƒ W 5 Q R X 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ƒ q0d S )Nr]   r   Ú
AllIntegerZAllFloatr,  údivide by zero encounteredrn   r^   rV   r¼   r`   g      Ð?rU   )r#   r   Ú	typecodesr%  r   r   r„  r   r   ÚfilterÚRuntimeWarningr-   r!   ©	rC   r/   Zexact_typesZinexact_typesZ	all_typesZ	each_typeÚatZanr?  r'   r'   r(   Útest_vector_return_typeÛ  s:    











z(_TestNormGeneral.test_vector_return_typec                    s‚   ddddg}ddddg}ddddg}‡ fd	d
„}|||fD ]}||ƒ q:t |ˆ jd�t |ˆ jd�t |ˆ jd�fD ]}||ƒ qpd S )Nr]   r^   r_   r`   rn   ro   rp   rm   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,   rX   rU   r]   ç      $@rn   g¸…ëQ¸Þ?r^   ro   gÊsÔcÙÑê?r   r`   )r#   Útestingr   r   r…  r   )râ   rI   r'   r(   Ú_test	  s0    ÿÿÿÿÿÿÿÿz+_TestNormGeneral.test_vector.<locals>._testr4   )r   rE  )rC   r/   r0   r´   r”  râ   r'   rI   r(   Útest_vector  s    
ÿz_TestNormGeneral.test_vectorc           	   	      s¼  t dddgdddg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�|ƒ q8t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�rDt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]   r^   r_   r`   rb   r*   r4   rn   r   c                    s$   g | ]}t ˆ d d …|f ˆd�‘qS ©N©Úord©r   ©rr   Úk©r  Úorderr'   r(   rs   (  s     z._TestNormGeneral.test_axis.<locals>.<listcomp>©r˜  r"  c                    s$   g | ]}t ˆ |d d …f ˆd�‘qS r–  r™  rš  rœ  r'   r(   rs   *  s     é   ro   rü   c                    s*   g | ]"}t ˆ d d … j|ˆd�ˆd�‘qS ©Nr!  r—  )r   Útakerš  ©ÚBÚk_indexr�  r'   r(   rs   @  s   ÿc                    s,   g | ]$}t ˆ d d … j|ˆd�jˆd�‘qS r   )r   r¡  r;  rš  r¢  r'   r(   rs   C  s   ÿ)r   rE  r#   ÚInfr²   rh   r   r   rÁ   rg   rz   r{   Úcombinationsr   r°   )	rC   Z	expected0Z	expected1Zndr"  Zrow_axisZcol_axisr6  rÃ   r'   )r  r£  r¤  r�  r(   Ú	test_axis"  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_   r`   zorder {0}, axis = {1}z;Shape mismatch found {0}, expected {1}, order={2}, axis={3}rž  T)r˜  r"  Zkeepdims)r}  )r]   r]   r]   rn   r   ro   rü   Únuc)r#   rÁ   rE  rg   r   r   ZsqueezeÚformatr   rh   r¥  r²   rz   r…   r}   r{   Úpermutations)	rC   r  Zallclose_errZ	shape_errrÃ   ÚfoundZexpected_shaper�  r›  r'   r'   r(   Útest_keepdimsG  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   rE  rI   r'   r'   r(   Útest_matrix_emptyw  s    z_TestNorm2D.test_matrix_emptyc           	   
   C   sv  |   dddgdddgg¡}tjd }d}|| }|D �]:}| |¡}t|tj ƒ}|  ||¡ t|dƒ tƒ �2}| 	t
d¡ t|dƒ}|  ||¡ t|dƒ W 5 Q R X 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� q4d S )Nr]   r   r‰  ZfdFDrV   rŠ  rn   rU   r^   gªLXèz¶û?ro   rü   r¨  gU&,t=Û@r*   r‘  )r   r#   r‹  r%  r   r   r„  r   r   rŒ  r�  r“  rŽ  r'   r'   r(   Útest_matrix_return_typez  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_   rb   rc   r4   g…¹ŽT"@rü   r¨  r’  g      (@rX   rn   rY   r^   g„öW³?"@ro   gÑ—€Ê„ì?Znofrorp   r   )r   rE  r   r   r   r   r°   r  r'   r'   r(   Útest_matrix_2x2­  s    z_TestNorm2D.test_matrix_2x2c                 C   sÀ   d| j dddgdddgd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ƒ d S )Ngš™™™™™¹?r]   r^   r_   r*   r   rb   r4   grj=Q0î?rü   r¨  gþB+pcõ?gš™™™™™ñ?g333333ã?rU   rn   gš™™™™™Ù?gû&Þê.dì?ro   gÜ¸Õ ˆçÈ?)r   rE  r   r   r   r  r'   r'   r(   Útest_matrix_3x3½  s    &ÿz_TestNorm2D.test_matrix_3x3c                 C   s
  | j dddgdddg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jt|d dƒ ttjt|d dƒ ttt|d dƒ d S )Nr]   r^   r_   r`   rb   r*   r4   rŸ  rü   r   r¨  Útest©r   r_   rÛ   )r]   r^   ©r^   r_   )r   r]   r^   )	r   rE  r#   rÁ   rg   r   r°   r   Z	AxisError)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­  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   rs  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        rb   r‘  )r#   r   Zint32r.   r   rs  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‘  é	   rb   )	r#   r   Zclongdoubler.   r   r   r%  Ú
complex128rÏ   )rC   r(  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   rE  r…  r'   r'   r'   r(   r¿  
  s   r¿  c                   @   s   e Zd ZejZdZdS )Ú_TestNormSingleBaser*   N)rK   rL   rM   r#   r/  rE  r…  r'   r'   r'   r(   rÀ    s   rÀ  c                   @   s   e Zd ZejZdZdS )Ú_TestNormInt64Baser+   N)rK   rL   rM   r#   Zint64rE  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Ã    s   rÃ  c                   @   s   e Zd ZdS )ÚTestNormInt64Nr¿   r'   r'   r'   r(   rÄ  !  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ddddgƒdƒ t tt d¡ƒdƒ t tdgƒdƒ t |t d¡t d¡g¡}t t|ƒt dddg¡ƒ t tdƒdƒ d S )	Nr`   r,  ©rn   rn   r_   rí   r   r]   )r`   )r   r   r#   rî   rÌ   r   )rC   ÚIÚmsr'   r'   r(   Útest_matrix_rank'  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 )Nr`   Trñ   r]   rí   r   r,  rÆ  r_   g:Œ0âŽyE>g¾Ü|"•BE>)r:   Ztolgµ;ä¡ˆ°E>)r   r   r#   rî   r  rÌ   )rC   rÇ  r'   r'   r(   Útest_symmetric_rank;  s    
z"TestMatrixRank.test_symmetric_rankN)rK   rL   rM   rÉ  rÊ  r'   r'   r'   r(   rÅ  %  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rI  )é(   r¸  ©Úsizer]   r^   r   r¼  r`   rb   r_   r\   )r#   r  ZRandomStater²   Únormalr   r   )ÚrngÚiÚXr'   r'   r(   Útest_reduced_rankI  s    ,,rÒ  c                	   @   s¤   e Zd ZejZdd„ Zej ddgdddg¡dd	„ ƒZ	d
d„ Z
dd„ Zdd„ Zej ddddddg¡ej ddddg¡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�\}}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-   rh   r   r   Úqrr   r"   r   r   r;  rô   r#   rî   Útriu)rC   r/   Úa_typeÚa_dtyper*  r6  r›  Úqr³   Úq1Úr1Úr2r'   r'   r(   Úcheck_qrZ  s8    

zTestQR.check_qrr*  r6  )r_   r   r³  rZ   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   rh   )rC   r*  r6  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_   r`   rb   r*   r4   rá  rÕ  r´  r»  rd   )	r   r#   r   r   rØ  r   r-   rh   r;  )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_   r`   rb   r*   Úfdù              ð?)r   r%  rà  r;  )rC   r/   r0   rE  Ú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 )	Nro   rÔ  rÕ  rn   r^   .r×  r³   )r!   r-   rh   r   r   rØ  r   r"   r   r	   r#   r   r÷   r
   rô   rÙ  )rC   r/   rÚ  rÛ  r*  r6  r›  rÜ  r³   ZI_matZstack_I_matrÝ  rÞ  rß  r'   r'   r(   Úcheck_qr_stacked¹  sL    
ÿ"ÿÿ"zTestQR.check_qr_stackedrÍ  )r_   r`   )r`   r_   rí   Ú
outer_sizer  r»  )r^   r_   r`   rE  c                 C   sP   t jj|| d� |¡}t jj|| d� |¡}|  |¡ |  |d|  ¡ d S )NrÌ  rç  )r#   r  rÎ  r%  rë  )rC   rì  rÍ  rE  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Ó  V  s<   'ý
-   þ  ÿ  þrÓ  c                   @   sR   e Zd Zej ddddddg¡ej dejejej	ej
f¡dd	„ ƒƒZd
d„ ZdS )ÚTestCholeskyrh   ry   r  ©r_   r_   )é2   rð  )r_   r¸  r¸  r-   c                 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 |¡}t  	|| 
|¡ ¡ ¡}t  ¡ �  d|jd  t  |¡j }W 5 Q R X t||||› d|› d	|› d	|› �d
� d S )Nr]   rç  )rn   ro   ro   r4   iô  r   ú Ú
)Úatolr}  )r#   r  r  Úrandnr3  Zcomplexfloatingr…   r²   r>  r	   rõ   rô   r   r   ÚcholeskyZ_no_nep50_warningrh   ZfinfoZepsr   )rC   rh   r-   r/   Útr´   r0   ró  r'   r'   r(   Útest_basic_propertyù  s    
$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kƒ t	t|t jƒƒ t jdt jd� |¡}t |¡}t|j|jƒ t	|j
jt jkƒ 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À     s   rÀ   rË   r4   )r]   r   r   )r#   r$   rÌ   rÍ   r€   r   rõ  r   rh   r   r-   r!   rÎ   r"   rÏ   rÐ   r'   r'   r(   rÅ     s    

zTestCholesky.test_0_sizeN)rK   rL   rM   r¦   r§   rÇ   r#   r/  rÎ   rÏ   r½  r÷  rÅ   r'   r'   r'   r(   rî  ö  s    ÿ ÿrî  c                  C   s˜   t jdkrd} nd} tjtjfD ]r}tjd|d�}| | ¡}| d¡ ¡ }t|j	jdƒ t
jt
jt
jfD ](}||ƒ}t|||ƒƒ t|||ƒƒ qhq d S )NÚlittleú<rH   r`   r4   ÚSú=)ÚsysÚ	byteorderr#   r/  rÎ   rî   ZnewbyteorderZbyteswapr   r-   r   rÉ   r#  r  r   )ZnativeZdttr5  Zn_arrZsw_arrZroutinerÑ   r'   r'   r(   Útest_byteorder_check$  s    

rþ  rc  rd  c                  C   sp   t  ddgddgg¡} t  ddgddgg¡}t  ddddg¡dd d… }| |d< ||d< tt jjt jj|ƒ d S )Nr]   r^   r_   r`   .rZ   )r#   r   rÌ   r   r   r   rÉ   )Z
invertibleZnon_invertibler‡   r'   r'   r(   Ú test_generalized_raise_multiloop9  s    rÿ  c                  C   sR  d} zt  ¡ }W n" ttfk
r2   t d¡ Y nX |dk�r(t  d¡ t  d¡ dd l}| |j	d¡ zt
jj ¡  W n2 tk
rŒ   Y n  tk
rª   t  t j¡ Y nX z0t
 dgg¡}t
jj ddd|d||dd¡	 W n< tk
�r } zdt|ƒk�rt  | ¡ W 5 d }~X Y nX t  t j¡ n&t  ¡ \}}t  |¡| k�rNt d¡ d S )	Néÿ   zNot POSIX or fork failed.r   r]   rZ   rU   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_overrideH  sH    


      ý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  r  )ÚtextwrapÚdedentr©  Ú
subprocessÚ
check_callrü  Ú
executable)Zbad_libsÚtemplater  Úcoder'   r'   r(   Útest_sdot_bug_8577y  s    
ÿÿr  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   rh   )rC   ÚA1dr£  r!  r%  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*   r'  )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'   r'  )rC   r(  r£  r!  r*  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�}||ksLt‚t|| |¡ |¡ƒ t|t  |t  ||¡¡ƒ d S )Nr  r  ©r%   ©r#   r  rÌ   r   rP   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�}||ks>t‚t|| |¡ƒ t|t  ||¡ƒ d S )Nr  r  )r*   r*   r-  r.  )rC   r  r£  r%   r/  r'   r'   r(   Útest_two_arguments_and_outå  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�}||ksZt‚t|| |¡ |¡ |¡ƒ d S )Nr  r  r$  )r*   r]   r-  r.  )rC   r  r£  r!  r%  r%   r/  r'   r'   r(   Ú-test_dynamic_programming_optimization_and_outï  s    
z:TestMultiDot.test_dynamic_programming_optimization_and_outc                 C   sh  t j d¡t j d¡t j d¡t j d¡t j d¡t j d¡g}t  ddd	d
ddgddddddgddddddgddddddgddddddgddddddgg¡}t jddddddgddddddgddddddgddddddgddddddgddddddg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)é   é#   )r4  é   )r5  rb   )rb   r¸  )r¸  é   )r6  rŸ  r,  g     ÃÎ@g     Ã¾@g    €OÂ@g    €1Ç@g    €ŠÍ@g     ‚¤@g     ±@g     Õ»@g     ‚Ä@g     p‡@g     ˆ£@g     ÿ´@g     @�@g     X«@g     ˆ³@r   r]   r_   r^   r`   rb   r4   T)Zreturn_costsrn   )r#   r  r   Úintr   r   rÙ  )rC   ZarraysZ
m_expectedZ
s_expectedrŠ   r*  r'   r'   r(   Útest_dynamic_programming_logicû  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_arrays  s    z&TestMultiDot.test_too_few_input_arraysN)rK   rL   rM   r"  r#  r&  r)  r+  r,  r0  r1  r2  r8  r9  r'   r'   r'   r(   r  �  s   
	



r  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©r`   r*   r\   r^   r^   ©r_   r_   r^   r]   c              	   C   s&   t tƒ� tj||d� W 5 Q R X d S )N©Úind)r   r   r   Ú	tensorinv)rC   r5  r>  r'   r'   r(   Útest_non_square_handling   s    
z&TestTensorinv.test_non_square_handlingz
shape, ind)©r`   r*   r\   r_   r^   )©é   r\   r_   r]   c                 C   sN   t  d¡}||_tj||d�}|j|d … |jd |…  }|j}t||ƒ d S )NrC  ©r/   r>  )r#   rî   rh   r   r?  r   )rC   rh   r>  r/   ÚainvrÃ   Úactualr'   r'   r(   Útest_tensorinv_shape(  s    
z"TestTensorinv.test_tensorinv_shaper>  r   ro   c              	   C   s6   t  d¡}d|_ttƒ� tj||d� W 5 Q R X d S )NrC  rA  rD  )r#   rî   rh   r   r°   r   r?  )rC   r>  r/   r'   r'   r(   Útest_tensorinv_ind_limit5  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 )NrC  rB  r]   r=  )	r#   rî   rh   r   r?  r  r   Ú	tensordotÚtensorsolve)rC   r/   rE  r0   r'   r'   r(   Útest_tensorinv_result>  s
    

z#TestTensorinv.test_tensorinv_resultN)rK   rL   rM   r¦   r§   rÇ   r#   r  r@  rG  rH  rK  r'   r'   r'   r(   r:    s    þ
ý
 ÿ
r:  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
dg¡dd„ ƒZ	dS )ÚTestTensorsolveza, axesr;  Nr<  )r   r^   c              	   C   s<   t tƒ�* t |jd d… ¡}tj|||d� W 5 Q R X d S ©Nr^   rò   )r   r   r#   r  rh   r   rJ  )rC   r/   ró   r0   r'   r'   r(   r@  I  s    
z(TestTensorsolve.test_non_square_handlingrh   )r^   r_   r*   )r_   r`   r`   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 rM  )
r#   r  rô  r  rh   r   rJ  r   rI  r>  )rC   rh   r/   r0   r‡   r'   r'   r(   Útest_tensorsolve_resultR  s    z'TestTensorsolve.test_tensorsolve_result)
rK   rL   rM   r¦   r§   rÇ   r#   r  r@  rN  r'   r'   r'   r(   rL  G  s   þ
ÿrL  c               	   C   s>   t jddgddggdd�} ttdƒ� t | ¡ W 5 Q R X d S )Nr]   ro   r^   rb   Zfloat16r4   zunsupported in linalg)r#   r   r   r_  r   rõ  )r5  r'   r'   r(   Útest_unsupported_commontype\  s    rO  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   rn   )r#   rÌ   r/  r  r   r   )r6  r/   r0   r´   r'   r'   r(   Útest_blas64_dotg  s    rQ  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   rn   r   Úinfor*  r6  rP  l        )
r#   rÎ   r   r  ZdgeqrfrÌ   r   r7  Úitemr   )
r-   Zlapack_routiner*  r6  Zldar/   Zworkrã  ÚresultsZlworkr'   r'   r(   Ú!test_blas64_geqrf_lwork_smoketestq  s    
rU  )r*   r+   )€Ú__doc__r  rü  r{   r�   r  r  r¦   Znumpyr#   r   r   r   r   r   r   r   r	   Z
numpy.corer
   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   r)   r.   r5   r6   r7   rO   r>   rS   r  r  re   r   r  rk   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  r   r+  r0  r:  r§   rÇ   rF  ri  rn  r|  r€  r�  r‡  r­  r¶  r·  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÒ  rÓ  rî  rþ  rh  rÿ  r  r¨   r  r  r:  rL  rO  r  rQ  r  rU  r'   r'   r'   r(   Ú<module>   s$  (0

    þþþþþþþý
þ
þþã#þþþþ ÿý ÿý ÿý ÿý ÿý ÿý
þ
þ
þ
ý
ýÎ9þþþþýþþþé 
0

:	
$.Cý
*4V6; x$ !.
1" )
	
ÿ