a
    iÝEb, ã                   @   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* d
d„ Z+e&Z,dðdd„Z&dd„ Z-dd„ Z.dd„ Z/h d£Z0G dd„ dƒZ1dd„ Z2e	j3 4d¡ g Z5e5e2de1de
ddgd d!gged"�e
ddged"�ƒe1d#e
ddgd d!gged"�e
ddged"�ƒe1d$e
ddgd d!gged"�e
g d%¢g d&¢ged"�ƒe1d'e
d(d)gd*d+gged"�e
d,d(ged"�ƒe1d-e
d(d)gd*d+gged"�e
d,d(ged"�ƒe1d.e
d(d)gd*d+gged"�e
g d/¢g d0¢ged"�ƒe1d1e	j6d2ed"�e	j6d3ed"�d4hd5�e1d6e	j3 7d7d7¡e	j3 7d7¡ƒe1d8e	j3 7d9d9¡e	j3 7d9¡ƒe1d:d9d;gd<d=ggd;d9gƒg
ƒ7 Z5e5e2d>e1d?e
g d@¢g d&¢ged"�e
ddged"�ƒe1dAe
ddgd d!gdBdCgged"�e
g dD¢ed"�ƒe1dEe
g d@¢g d&¢ged"�e
ddged"�ƒe1dFe
ddgd d!gdBdCgged"�e
g dD¢ed"�ƒe1dGe
g dH¢g dI¢ged"�e
d,d(ged"�ƒe1dJe
dKdLgdMdNgdOdPgged"�e
g dQ¢ed"�ƒe1dRe
g dH¢g dI¢ged"�e
d,d(ged"�ƒe1dSe
dKdLgdMdNgdOdPgged"�e
g dQ¢ed"�ƒe1dTe
g dH¢g dI¢ged"�e
d,d(gdUdVgged"�ƒe1dWe
dKdLgdMdNgdOdPgged"�e
d,d(gdUdVgdUdVgged"�ƒe1dXe	j3 7d7dY¡e	j3 7d7¡ƒe1dZe	j3 7d9d[¡e	j3 7d9¡ƒe1d\e	j3 7d[d9¡e	j3 7d[¡ƒe1d]e	j3 7dd=¡e	j3 7d¡d4hd5�e1d^e	j3 7d=d¡e	j3 7d=¡d4hd5�gƒ7 Z5e5e2d_e1d`e
ddgddgged"�dƒe1dae
ddgddgged"�dƒe1dbe
dd)gdcd9gged"�dƒe1dde
dd)gdcd9gged"�dƒe1dee	j6d2ed"�dd4hd5�e1dfd9d;gd;d9ggdƒe1dge
ddgddggƒdƒe1dhe	j3 7d9d9¡dƒgƒ7 Z5didj„ Z8e5e8ƒ 7 Z5dkdl„ Z9dmdn„ Z:e5e:ƒ 7 Z5G dodp„ dpƒZ;G dqdr„ dre;ƒZ<G dsdt„ dte;ƒZ=G dudv„ dve;ƒZ>G dwdx„ dxe;ƒZ?G dydz„ dze;ƒZ@G d{d|„ d|e;ƒZAd}d~„ ZBdd€„ ZCG d�d‚„ d‚e<e?ƒZDG dƒd„„ d„eDƒZEG d…d†„ d†e<e?ƒZFG d‡dˆ„ dˆeFƒZGG d‰dŠ„ dŠe<e?ƒZHG d‹dŒ„ dŒeHƒZIG d�dŽ„ dŽe<e?ƒZJG d�d�„ d�eJƒZKG d‘d’„ d’ƒZLG d“d”„ d”e<e?ƒZMG d•d–„ d–eMeLƒZNG d—d˜„ d˜e>eAƒZOG d™dš„ dšeOeLƒZPG d›dœ„ dœe<e?ƒZQG d�dž„ džeQƒZRG dŸd „ d e<e=e?e@ƒZSG d¡d¢„ d¢eSƒZTG d£d¤„ d¤e>eAƒZUG d¥d¦„ d¦eUƒZVG d§d¨„ d¨e<e?ƒZWG d©dª„ dªeWƒZXG d«d¬„ d¬e<e=ƒZYG d­d®„ d®eYƒZZej[ \d¯d°d±„ d²D ƒ¡G d³d´„ d´ƒƒZ]G dµd¶„ d¶e>eAƒZ^G d·d¸„ d¸ƒZ_G d¹dº„ dºe>eAƒZ`G d»d¼„ d¼ƒZaG d½d¾„ d¾ƒZbG d¿dÀ„ dÀebƒZcG dÁdÂ„ dÂebƒZdG dÃdÄ„ dÄedecƒZeG dÅdÆ„ dÆƒZfG dÇdÈ„ dÈebƒZgG dÉdÊ„ dÊebƒZhG dËdÌ„ dÌebƒZiG dÍdÎ„ dÎeeegƒZjG dÏdÐ„ dÐeeehƒZkG dÑdÒ„ dÒeeeiƒZlG dÓdÔ„ dÔƒZmdÕdÖ„ ZnG d×dØ„ dØƒZoG dÙdÚ„ dÚƒZpdÛdÜ„ ZqdÝdÞ„ Zrdßdà„ Zsej[jtdádâ„ ƒZuG dãdä„ däƒZvG dådæ„ dæƒZwdçdè„ Zxej[jydédê�dëdì„ ƒZze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_LAPACK64c                 C   s"   t | ƒt|tjƒrt |ƒntju S ©N)ÚtypeÚ
isinstanceÚnpÚndarray)ÚoutZin_© r%   ú^/home/ja/django-apps/lartica_env/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_dtype,   s
    ÿÿr3   c                 C   s   t ttttttti|  S r   )r   r   r   r   r2   r%   r%   r&   Úget_complex_dtype1   s
    ÿÿr4   c                 C   s   | t tfv rdS dS d S )Ngñhãˆµøä>g•dyáý¥=)r   r   r2   r%   r%   r&   Úget_rtol6   s    r5   >   Ú	nonsquareÚstridedÚgeneralizedÚ	hermitianúsize-0Úsquarec                   @   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-   r.   Ú	frozensetÚtags)Úselfr>   r-   r.   r@   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
        ©r@   N)r-   r.   r@   )rA   Údor%   r%   r&   ÚcheckQ   s    zLinalgCase.checkc                 C   s   d| j › d�S )Nz<LinalgCase: ú>)r>   ©rA   r%   r%   r&   Ú__repr__W   s    zLinalgCase.__repr__N)Ú__name__Ú
__module__Ú__qualname__ÚsetrB   rE   rH   r%   r%   r%   r&   r<   E   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_tagsr@   )ÚtagZcasesÚcaser%   r%   r&   Ú	apply_tag[   s    rP   éÒ  r;   r   ç      ð?ç       @ç      @ç      @r2   r   Zdouble_2)rS   rR   rU   )rT   rU   ç      @r   ù      ð?       @y       @      @y      @      @y      @      @ù       @      ð?r   Z	cdouble_2)rX   rW   y      ð?      @)y      ð?       Ày      ð?      Ày      ð?      ÀZ0x0©r   r   ©r   r:   rC   Z8x8é   Z1x1é   Znonarrayé   é   é   r6   Zsingle_nsq_1)rR   rS   rT   Zsingle_nsq_2g      @rV   )rS   rR   rT   Zdouble_nsq_1Zdouble_nsq_2Zcsingle_nsq_1)ù      ð?      ð?ù       @       @ù      @      À)y      @      Ày      @      "@y      @       @Zcsingle_nsq_2r`   ra   rb   y      @      "Ày      @      Ày      @       @)rX   rW   rb   Zcdouble_nsq_1Zcdouble_nsq_2Zcdouble_nsq_1_2y      ð?      ð¿y       @       ÀZcdouble_nsq_2_2Z8x11é   Z1x5é   Z5x1Z0x4Z4x0r9   Z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 u 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 u 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_tile3r8   rC   ©r^   r]   Z_tile213)ÚCASESr!   r-   r"   r#   r   r.   r<   r>   r@   ÚappendÚreshapeÚshape)Ú	new_casesrO   r-   r.   Únew_caser%   r%   r&   Ú_make_generalized_casesë   s*    


ÿ
$
$
ÿrm   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\   ro   éýÿÿÿc                 S   s   g | ]\}}t || ƒ‘qS r%   )Úabs)Ú.0r-   r.   r%   r%   r&   Ú
<listcomp>  ó    z%_stride_comb_iter.<locals>.<listcomp>c                 S   s   g | ]}t d d |ƒ‘qS r   )Úslice)rt   Úrepeatr%   r%   r&   ru     rv   r2   l   ï>[= .Zstride_Ú_c                 S   s   g | ]}d | ‘qS )z%+dr%   )rt   Újr%   r%   r&   ru   (  rv   r   )ÚstridesZstride_xxx_0Zstride_xxx_0_x©r\   r\   Zstride_xxx_0_0)r!   r"   r#   ÚndimÚ	itertoolsÚproductÚtupleÚziprj   Úemptyr+   ÚviewZuint32ÚfillÚ	__class__r   ÚallÚjoinÚlistr{   Ú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 )Nry   r7   rC   )rg   rŽ   r-   r.   r<   r>   r@   rh   )rk   rO   r-   Za_labelr.   Zb_labelrl   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 ]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_CASESr@   rE   rD   Ú	ExceptionÚ	tracebackÚ
format_excÚAssertionError)rA   ÚrequireÚexcluderO   ÚeÚmsgr%   r%   r&   Úcheck_casesQ  s    

zLinalgTestCase.check_casesN)rI   rJ   rK   rg   r‘   rL   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 )Nr;   r8   r:   ©r–   r—   ©rš   rG   r%   r%   r&   Útest_sq_casesg  s    ÿz"LinalgSquareTestCase.test_sq_casesc                 C   s   | j ddhdhd� d S )Nr;   r:   r8   rœ   r�   rG   r%   r%   r&   Útest_empty_sq_casesk  s    
ÿz(LinalgSquareTestCase.test_empty_sq_casesN)rI   rJ   rK   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 )Nr6   r8   r:   rœ   r�   rG   r%   r%   r&   Útest_nonsq_casesr  s    ÿz(LinalgNonsquareTestCase.test_nonsq_casesc                 C   s   | j ddhdhd� d S )Nr6   r:   r8   rœ   r�   rG   r%   r%   r&   Útest_empty_nonsq_casesv  s    
ÿz.LinalgNonsquareTestCase.test_empty_nonsq_casesN)rI   rJ   rK   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 )Nr9   r8   r:   rœ   r�   rG   r%   r%   r&   Útest_herm_cases}  s    ÿz!HermitianTestCase.test_herm_casesc                 C   s   | j ddhdhd� d S )Nr9   r:   r8   rœ   r�   rG   r%   r%   r&   Útest_empty_herm_cases�  s    
ÿz'HermitianTestCase.test_empty_herm_casesN)rI   rJ   rK   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 )Nr8   r;   r:   rœ   r�   rG   r%   r%   r&   Útest_generalized_sq_casesˆ  s    
ÿz9LinalgGeneralizedSquareTestCase.test_generalized_sq_casesc                 C   s   | j h d£d� d S )N>   r:   r;   r8   ©r–   r�   rG   r%   r%   r&   Útest_generalized_empty_sq_cases�  s    z?LinalgGeneralizedSquareTestCase.test_generalized_empty_sq_casesN)rI   rJ   rK   Ú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 )Nr8   r6   r:   rœ   r�   rG   r%   r%   r&   Útest_generalized_nonsq_cases”  s    
ÿz?LinalgGeneralizedNonsquareTestCase.test_generalized_nonsq_casesc                 C   s   | j h d£d� d S )N>   r6   r:   r8   r¨   r�   rG   r%   r%   r&   Ú"test_generalized_empty_nonsq_cases™  s    zELinalgGeneralizedNonsquareTestCase.test_generalized_empty_nonsq_casesN)rI   rJ   rK   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 )Nr8   r9   r:   rœ   r�   rG   r%   r%   r&   Útest_generalized_herm_cases   s    
ÿz8HermitianGeneralizedTestCase.test_generalized_herm_casesc                 C   s   | j h d£dhd� d S )N>   r9   r:   r8   Únonerœ   r�   rG   r%   r%   r&   Ú!test_generalized_empty_herm_cases¥  s    
ÿz>HermitianGeneralizedTestCase.test_generalized_empty_herm_casesN)rI   rJ   rK   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^   rp   r\   zNot implemented...r2   rq   )r   r}   rj   Ú
ValueErrorr"   r‚   Zcommon_typer~   r   ÚmapÚranger   )r-   r.   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^   r2   rq   .r   )r   r}   r"   r‚   rj   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'   )rA   r-   r.   r@   rŠ   r%   r%   r&   rD   Ê  s    zSolveCases.doN©rI   rJ   rK   rD   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\   ç      à?r2   )r"   r   r   r   r¼   r+   ©rA   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©rI   rJ   rK   r%   r%   r%   r&   ÚArraySubclass×  s   rÄ   r[   r]   r(   r\   r^   r   )r"   r#   Úarangeri   rƒ   r   r¼   r   r   r!   r   r   r´   ©rA   rÄ   r-   r.   Ú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Å   ri   rƒ   r   r¼   r   r   r!   rÆ   r%   r%   r&   Útest_0_size_k÷  s    ""
"8
zTestSolve.test_0_size_kN)rI   rJ   rK   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'   )rA   r-   r.   r@   Za_invr%   r%   r&   rD     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\   r2   rY   )r"   r#   ÚzerosÚint_rƒ   r   rÍ   r   r+   r    Úfloat64r   rj   r!   Ú	complex64©rA   rÄ   r-   Úresr%   r%   r&   rÉ     s    

zTestInv.test_0_sizeN©rI   rJ   rK   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   )rA   r-   r.   r@   ÚevÚevaluesÚevectorsr%   r%   r&   rD   ,  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À   r2   rp   )r"   r   r   r   rØ   r+   r4   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
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Ä   <  s   rÄ   rÏ   r2   ©r   r\   rY   rZ   )r"   r#   rÐ   rÑ   rƒ   r   rØ   r   r+   r    rÒ   r   rj   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   r5   r+   r   r'   )rA   r-   r.   r@   rÛ   rÜ   r%   r%   r&   rD   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+   r4   ©rA   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
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Ä   f  s   rÄ   rÏ   r2   rß   rY   rZ   )r"   r#   rÐ   rÑ   rƒ   r   rÙ   r   r+   r    rÒ   r   rj   r!   rÓ   ©rA   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À   r2   F©Ú
compute_uvr9   )r"   r   r   Úsvdr   r+   r3   r9   )rA   r+   rŠ   Úur�   Úvhr%   r%   r&   rÂ   ~  s    zSVDBaseTests.test_typesN)rI   rJ   rK   r9   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   r5   r+   r   r'   )rA   r-   r.   r@   rì   r�   Úvtr%   r%   r&   rD   ‹  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_   rY   r_   )r   r_   N)r"   r‚   r   rë   r9   r   rj   Úeye)rA   rŠ   rì   r�   rí   r%   r%   r&   Útest_empty_identity•  s    

zTestSVD.test_empty_identityN)rI   rJ   rK   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©r9   .rá   c                 S   s<   t t| jƒƒ}|d |d  |d< |d< t tj| |d�¡S )Nrq   rp   )Úaxes)rˆ   r¶   r}   r"   ÚconjÚ	transpose)Úmatrö   r%   r%   r&   r9   «  s    z'SVDHermitianCases.do.<locals>.hermitianrp   )r   rë   r   r¹   r"   r   r5   r+   r   r	   Úbroadcast_torò   rj   r   Úsortr   r'   )rA   r-   r.   r@   rì   r�   rï   r9   r%   r%   r&   rD   ¦  s    &ÿþ,,zSVDHermitianCases.doNr½   r%   r%   r%   r&   rô   ¤  s   rô   c                   @   s   e Zd ZdZdS )ÚTestSVDHermitianTN)rI   rJ   rK   r9   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   ).rp   rd   rc   ©r/   r0   r]   rq   r\   rp   Úfro)r   r   r   r   Úcondrë   r   r"   rÍ   rs   ÚsumÚmaxÚminr   Úsqrt)rA   r-   r.   r@   r¸   r�   Zcinvr%   r%   r&   rD   ¾  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)rR   r   r\   )r   g       Àr   )r   r   rT   r_   gUUUUUUå?r\   rp   rÀ   rÿ   gUUUUU6@)r   r   r   r   r   r"   r  ©rA   Ú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 )N©r]   r]   ©Nr\   r]   rÿ   rp   rq   ç  4&õkC)r"   rÐ   Úonesr~   r   r   r   r   )rA   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\   rp   r]   rq   rÿ   r
  r	  rß   )r^   r]   r]   ©r\   r   r\   r\   r   r  r]   )	r"   r  Únanr   r   r   r!   Zfloat_Úisnan)rA   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 )	NrQ   r]   r   rY   r|   )Nr\   r]   rÿ   rp   rq   rß   ©r\   r   )
r"   ÚrandomÚseedÚrandr   r   r   r   r   Úisfinite)rA   r  r  r¸   r%   r%   r&   Útest_stacked_singular  s    zTestCond.test_stacked_singularN)
rI   rJ   rK   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 )Nrd   rc   rþ   ©r   Úpinvr¹   r   r   r'   ©rA   r-   r.   r@   Za_ginvr   r%   r%   r&   rD   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õ   rd   rc   rþ   r  r   r%   r%   r&   rD   ?  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v 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 )Nrp   ©Úaxisr   r\   )r   ÚdetÚslogdetr   r+   r    r   r   Úastyper   rØ   r   r   Úreducer"   ÚexpZ
atleast_1drs   r   r   )
rA   r-   r.   r@   Údr�   ÚldÚadrÚ   Úmr%   r%   r&   rD   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   rG   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(  r3   )rA   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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 )NrY   r2   rR   r  r   r\   )r"   rÐ   rÓ   r   r'  r   r   r+   r    r(  Úfloat32rÒ   )rA   r-   rÕ   r%   r%   r&   rÉ   u  s     







zTestDet.test_0_sizeN)rI   rJ   rK   r2  rª   r«   rË   r   r   r   r   rÂ   rÉ   r%   r%   r%   r&   r0  _  s   
r0  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 )	NFrp   ©Zrcondr   r]   r%  r\   rn   )r"   r   rj   r   rë   Úlstsqr   r†   r   r   r   Z__array_wrap__rs   r  r}   r   rƒ   r    Ú
issubdtyper+   Úfloatingr'   )rA   r-   r.   r@   Úarrr/  Únrì   r�   rï   rŠ   Ú	residualsÚrankÚsvZexpect_residsr%   r%   r&   rD   ‹  s2    


ÿÿ

zLstsqCases.doNr½   r%   r%   r%   r&   r5  ‰  s   r5  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ƒ �”}| 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 d   ƒ n1 sÒ0    Y  d S )N)r1  rR   r1  rR   rS   r1  )r1  rS   r1  r1  rR   r1  )rR   r1  rR   r1  r1  rU   )r1  r1  r1  rS   rT   r1  )r\   r   r   r   r   r   z`rcond` parameter will changer_   rp   r6  r^   r\   )
r"   r   ÚTr   ÚrecordÚFutureWarningr   r7  r   Úlen)	rA   r-   r.   Úsuprå   rŠ   r<  r=  r�   r%   r%   r&   Útest_future_rcond¨  s    
ýzTestLstsq.test_future_rcond)r/  r;  Ú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 )Nr6  r   rZ   rq   r%  )r"   rÅ   ri   r  r   r7  r   r†   r   rj   r   r   r  r  )rA   r/  r;  rF  r-   r.   rŠ   r<  r=  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^   )rp   gš™™™™™É?gÍÌÌÌÌÌì?gÍÌÌÌÌÌ @gffffff
@zIncompatible dimensionsr6  )
r"   r   Zvstackr  rC  r@  r   r   r   r7  )rA   rŠ   Úyr  r%   r%   r&   Útest_incompatible_dimsÒ  s
    z TestLstsq.test_incompatible_dimsN)	rI   rJ   rK   rE  rª   r«   rË   rG  rI  r%   r%   r%   r&   r?  §  s   	
r?  Údtc                 C   s   g | ]}t  |¡‘qS r%   )r"   r+   )rt   r¸   r%   r%   r&   ru   Û  rv   ru   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dd„ ZdS )ÚTestMatrixPowerr_   )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_1r)  r   r   Úrshft_0Úrshft_2Úrshft_3)rA   rJ  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©rA   rJ  rW  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ù   rV  r%   r%   r&   rW  ÿ  s    

z-TestMatrixPower.test_power_is_one.<locals>.tzrX  r\  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+   rZ  r	   r   r   )rù   rV  Úmmulr%   r%   r&   rW  
  s    
z-TestMatrixPower.test_power_is_two.<locals>.tzrX  r\  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 ©Nrp   )r   r+   rZ  r	   r   r   rº   )rù   Zinvmatr_  r%   r%   r&   rW    s
    
ÿz3TestMatrixPower.test_power_is_minus_one.<locals>.tz)rY  Údtnoinvr)  r\  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\   )rQ  r)  r   Ú	TypeErrorr   ©rA   rJ  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  )rA   rJ  r%   r%   r&   Útest_exceptions_non_square%  s    z*TestMatrixPower.test_exceptions_non_squarec                 C   s,   || j v rd S | j |¡}ttt|dƒ d S ra  )rb  Únoninvr)  r   r   r   re  r%   r%   r&   Útest_exceptions_not_invertible*  s    
z.TestMatrixPower.test_exceptions_not_invertibleN)rI   rJ   rK   r"   rò   rQ  rP  rR  rS  rY  r   rh  Úblockr[  rZ  r+   rb  rT  r]  r^  r`  rc  rf  rg  ri  r%   r%   r%   r&   rK  Û  s    
rK  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ÚLrp   r%  rá   ÚU)r   ÚeigvalshrÙ   rû   r   r5   r+   )rA   r-   r.   r@   rÚ   rÛ   rÜ   Úev2r%   r%   r&   rD   3  s    zTestEigvalshCases.doNr½   r%   r%   r%   r&   rk  1  s   rk  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   rn  r   r+   r3   )rA   r+   rŠ   rå   r%   r%   r&   rÂ   @  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À   r2   Zlrong©ZUPLOÚlowerÚupper)r"   r   r4  r   r´   r   rn  ©rA   rŠ   r%   r%   r&   Útest_invalidF  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\   r2   rp   rá   rl  rr  Úlrm  rì   )r"   r   r   r5   r   rn  r   )rA   ÚKloÚKupÚtgtrâ   rå   r%   r%   r&   Ú	test_UPLOL  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Ä   d  s   rÄ   rÏ   r2   rß   rY   rZ   )r"   r#   rÐ   rÑ   rƒ   r   rn  r   r+   r    rÒ   r   rj   r!   rÓ   r4  rÔ   r%   r%   r&   rÉ   b  s    

zTestEigvalsh.test_0_sizeN©rI   rJ   rK   rª   r«   rË   r   r   r   r   rÂ   rv  r|  rÉ   r%   r%   r%   r&   rp  ?  s
   
rp  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 )Nrp   r%  .rá   rm  )râ   Úerr_msg)r   ÚeighrÙ   rû   r   r   r¹   r"   r   r5   r+   Úrepr)
rA   r-   r.   r@   rÚ   ZevcrÛ   rÜ   ro  Zevc2r%   r%   r&   rD   w  s    

 þ

 þzTestEighCases.doNr½   r%   r%   r%   r&   r~  u  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+   r3   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 rq  )r"   r   r4  r   r´   r   r€  ru  r%   r%   r&   rv  “  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 rw  )r"   r   r   r5   r   r€  r   )rA   ry  rz  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Ï   r2   rß   rY   rZ   )r"   r#   rÐ   rÑ   rƒ   r   r€  r   r+   r    rÒ   r   rj   r!   rÓ   r4  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dS )Ú_TestNormBaseN)rI   rJ   rK   rJ  Údecr%   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 )Nr1  r2   )r   r   r   rJ  r   rG   r%   r%   r&   Ú
test_emptyÍ  s    z_TestNormGeneral.test_emptyc           	   	   C   s¼  t  g d¢¡}t jd }t jd }|| }|D �]†}| |¡}t|t j ƒ}tt|jj	t j
ƒƒ t|dƒ tƒ �D}| td¡ t|dƒ}tt|jj	t j
ƒƒ t|dƒ W d   ƒ n1 sº0    Y  t|dƒ}tt|jj	t j
ƒƒ t|dƒ t|d	ƒ}tt|jj	t j
ƒƒ t|d
ƒ t|dƒ}tt|jj	t j
ƒƒ t||j 	d
¡|j 	d¡ ƒ t|dƒ}tt|jj	t j
ƒƒ t||j 	d
¡|j 	d¡ ƒ t|t jƒ}tt|jj	t j
ƒƒ t|dƒ q.d S )Nr  Ú
AllIntegerZAllFloatr1  údivide by zero encounteredrp   r   r]   r\   rS   rÀ   r_   g      Ð?rR   )r"   r   Ú	typecodesr)  r   r   r   Ú
issubclassr+   r    r9  r   r   ÚfilterÚRuntimeWarning©	rA   r-   Zexact_typesZinexact_typesZ	all_typesZeach_inexact_typesÚatZanrD  r%   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^   r_   )rp   rq   rr   ro   )rp   r]   rr   r_   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*   rU   rR   r\   ç      $@rp   g¸…ëQ¸Þ?r]   rq   gÊsÔcÙÑê?r   r_   )r"   Útestingr   r   r„  r   )ræ   rG   r%   r&   Ú_test   s0    ÿÿÿÿÿÿÿÿz+_TestNormGeneral.test_vector.<locals>._testr2   )r   rJ  )rA   r-   r.   r¸   r“  ræ   r%   rG   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 )N©r\   r]   r^   ©r_   rd   r(   r2   rp   r   r\   r]   r^   c                    s$   g | ]}t ˆ d d …|f ˆd�‘qS ©N©Úord©r   ©rt   Úk©r  Úorderr%   r&   ru     rv   z._TestNormGeneral.test_axis.<locals>.<listcomp>©r™  r&  c                    s$   g | ]}t ˆ |d d …f ˆd�‘qS r—  rš  r›  r�  r%   r&   ru   !  rv   é   r_   rq   rÿ   c                    s*   g | ]"}t ˆ d d … j|ˆd�ˆd�‘qS ©Nr%  r˜  )r   Útaker›  ©ÚBÚk_indexrž  r%   r&   ru   7  s   ÿc                    s,   g | ]$}t ˆ d d … j|ˆd�jˆd�‘qS r¡  )r   r¢  r@  r›  r£  r%   r&   ru   :  s   ÿ)r   rJ  r"   ÚInfr¶   rj   r   r   rÅ   ri   r}   r~   Úcombinationsr   r´   )	rA   Z	expected0Z	expected1Úndr&  Zrow_axisZcol_axisr;  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   r2   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\   rp   r   rq   rÿ   Únuc)r"   rÅ   rJ  ri   r   r   ZsqueezeÚformatr   rj   r¦  r¶   r}   rˆ   r€   r~   Úpermutations)	rA   r  Zallclose_errZ	shape_errrÇ   ÚfoundZexpected_shaperž  rœ  r%   r%   r&   Útest_keepdims>  sN    
ÿ
ÿ
ÿ

ÿ 
ÿ

ÿz_TestNormGeneral.test_keepdimsN)rI   rJ   rK   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 )Nr2   r1  )r   r   r   rJ  rG   r%   r%   r&   Útest_matrix_emptyn  s    z_TestNorm2D.test_matrix_emptyc           	   	   C   sÆ  |   g d¢g d¢g¡}tjd }d}|| }|D �]Ž}| |¡}t|tj ƒ}tt|jj	tj
ƒƒ t|dƒ tƒ �D}| td¡ t|dƒ}tt|jj	tj
ƒƒ t|dƒ W d   ƒ n1 s¼0    Y  t|d	ƒ}tt|jj	tj
ƒƒ t|dƒ t|d
ƒ}tt|jj	tj
ƒƒ t|dƒ t|dƒ}tt|jj	tj
ƒƒ t|dƒ t|tjƒ}tt|jj	tj
ƒƒ t|dƒ t|dƒ}tt|jj	tj
ƒƒ t|dƒ t|dƒ}tt|jj	tj
ƒƒ tjj|ddd� q0d S )Nr  rÏ   r‡  ZfdFDrS   rˆ  rp   rR   r\   r]   gªLXèz¶û?rq   rÿ   rª  gU&,t=Û@r(   r�  )r   r"   r‰  r)  r   r   r   rŠ  r+   r    r9  r   r   r‹  rŒ  r’  r�  r%   r%   r&   Útest_matrix_return_typeq  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^   rd   re   r2   g…¹ŽT"@rÿ   rª  r‘  g      (@rU   rp   rV   r]   g„öW³?"@rq   gÑ—€Ê„ì?Znofrorr   r   )r   rJ  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   rd   )r^   r]   r\   r2   grj=Q0î?rÿ   rª  gþB+pcõ?gš™™™™™ñ?g333333ã?r\   rR   rp   gš™™™™™Ù?r]   gû&Þê.dì?rq   gÜ¸Õ ˆçÈ?)r   rJ  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jt|d dƒ ttjt|d dƒ ttt|d dƒ d S )Nr•  r–  r2   r\   r   r]   r^   r_   rÿ   r   rª  Útest©r   r^   rß   )r\   r]   ©r]   r^   )r   r\   r]   )	r   rJ  r"   rÅ   ri   r   r´   r   Z	AxisError)rA   r  r¤  rž  r%   r%   r&   Útest_bad_argsÅ  s    z_TestNorm2D.test_bad_argsN)
rI   rJ   rK   r"   r   r°  r±  r²  r³  r·  r%   r%   r%   r&   r¯  i  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é
   r2   r^   r˜  gÍÌÌÌÌL)@r]   r�  )r"   rÅ   Z
longdoubler,   r   ru  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   €r2   r^   r˜  l        rd   r�  )r"   r   Zint32r,   r   ru  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]   r2   y      @      @r   y      À      @r\   g¨ËþÿV;'@r^   r˜  rº  r�  é	   rd   )	r"   r‚   Zclongdoubler,   r   r   r)  Ú
complex128rÓ   )rA   r,  rÕ   r%   r%   r&   Útest_complex_high_ordó  s    z,TestNorm_NonSystematic.test_complex_high_ordN)rI   rJ   rK   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)rI   rJ   rK   r"   r   rJ  r„  r%   r%   r%   r&   rÁ    s   rÁ  c                   @   s   e Zd ZejZdZdS )Ú_TestNormSingleBaser(   N)rI   rJ   rK   r"   r4  rJ  r„  r%   r%   r%   r&   rÂ    s   rÂ  c                   @   s   e Zd ZejZdZdS )Ú_TestNormInt64Baser)   N)rI   rJ   rK   r"   Zint64rJ  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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ƒ d S )Nr_   r1  ©rp   rp   r^   rñ   r   )r\   r   r   r   r\   )r_   )r^   r_   r   )r   r   r"   rò   rÐ   r   )rA   Ú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   r1  rÈ  r^   g:Œ0âŽyE>g¾Ü|"•BE>)r9   Ztolgµ;ä¡ˆ°E>)r   r   r"   rò   r  rÐ   )rA   rÉ  r%   r%   r&   Útest_symmetric_rank2  s    
z"TestMatrixRank.test_symmetric_rankN)rI   rJ   rK   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rN  )é(   rº  ©Úsizer\   r]   r   r¾  r_   rd   r^   r[   )r"   r  ZRandomStater¶   Únormalr   r   )ÚrngÚiÚXr%   r%   r&   Útest_reduced_rank@  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�\}}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+   rj   r  r   Úqrr   r!   r   r   r@  r÷   r"   rò   Útriu)rA   r-   Úa_typeÚa_dtyper/  r;  rœ  Úqr·   Úq1Úr1Úr2r%   r%   r&   Úcheck_qrQ  s8    

zTestQR.check_qrr/  r;  )©r^   r   rµ  rY   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   rj   )rA   r/  r;  rœ  r-   ÚhÚtaur%   r%   r&   Útest_qr_emptyx  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_   rd   r(   r2   rä  r×  r¶  r½  rf   )	r   r"   r   r   rÚ  r   r+   rj   r@  )rA   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_   rd   r(   Úfdù              ð?)r   r)  râ  r@  )rA   r-   r.   rJ  Ú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 )	Nrq   rÖ  r×  rp   r]   .rÙ  r·   )r    r+   rj   r  r   rÚ  r   r!   r   r	   r"   r   rú   r
   r÷   rÛ  )rA   r-   rÜ  rÝ  r/  r;  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ñ   rã  rµ  Ú
outer_size)r	  r½  )r]   r^   r_   rJ  c                 C   sP   t jj|| d� |¡}t jj|| d� |¡}|  |¡ |  |d|  ¡ d S )NrÎ  rê  )r"   r  rÐ  r)  rî  )rA   rï  rÏ  rJ  r  r¤  r%   r%   r&   Útest_stacked_inputsÝ  s    

zTestQR.test_stacked_inputsN)rI   rJ   rK   r"   r   râ  rª   r«   rË   rç  rè  rí  rî  r   r   r   r   rð  r%   r%   r%   r&   rÕ  M  s   '
-þrÕ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCholeskyc           	      C   s  g d¢}t jt jt jt jf}t ||¡D ]à\}}t j d¡ t jj	|Ž }t  
|t j¡rj|dt jj	|Ž   }ttt|ƒƒƒ}d|dd …< t  | |¡ ¡ |¡}t j||d�}t j |¡}t  || |¡ ¡ ¡}t|||› d|› d|› d|› �d	|jd
  t  |¡j d� q(d S )N)r|   r	  ©r^   r^   )é2   ró  )r^   rº  rº  r\   rê  )rp   rq   rq   r2   ú Ú
iô  r   )r  Zatol)r"   r4  rÒ   rÓ   r¿  r~   r   r  r  Zrandnr8  Zcomplexfloatingrˆ   r¶   rC  r	   rø   r÷   r   r   Úcholeskyr   rj   ZfinfoZeps)	rA   ZshapesZdtypesrj   r+   r-   Útr¸   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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Ä   	  s   rÄ   rÏ   r2   )r\   r   r   )r"   r#   rÐ   rÑ   rƒ   r   rö  r   rj   r   r+   r    rÒ   r!   rÓ   rÔ   r%   r%   r&   rÉ     s    

zTestCholesky.test_0_sizeN)rI   rJ   rK   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ú<rF   r_   r2   ÚSú=)ÚsysÚ	byteorderr"   r4  rÒ   rò   ZnewbyteorderÚbyteswapr   r+   r   rÍ   r'  r  r   )ÚnativeZdttr:  Zn_arrZsw_arrZroutinerÕ   r%   r%   r&   Útest_byteorder_check  s    

r  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^   r_   )r_   r_   r]   r]   .rY   )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\   rY   rR   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  c                  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_8577m  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   )rA   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#  )rA   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#  )rA   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   rj   )rA   Ú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*  )rA   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*  )rA   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�}||u sLJ ‚t|| |¡ |¡ƒ t|t  |t  ||¡¡ƒ d S )Nr!  r"  ©r$   ©r"   r  rÐ   r   r   r   )rA   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(   r0  r1  )rA   r  r¤  r$   r2  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�}||u sZJ ‚t|| |¡ |¡ |¡ƒ d S )Nr!  r"  r'  )r(   r\   r0  r1  )rA   r  r¤  r$  r(  r$   r2  r%   r%   r&   Ú-test_dynamic_programming_optimization_and_outâ  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)é   é#   )r7  é   )r8  rd   )rd   rº  )rº  é   )r9  r   )r1  g     ÃÎ@g     Ã¾@g    €OÂ@g    €1Ç@g    €ŠÍ@)r1  r1  g     ‚¤@g     ±@g     Õ»@g     ‚Ä@)r1  r1  r1  g     p‡@g     ˆ£@g     ÿ´@)r1  r1  r1  r1  g     @�@g     X«@)r1  r1  r1  r1  r1  g     ˆ³@)r1  r1  r1  r1  r1  r1  )r   r\   r\   r^   r^   r^   )r   r   r]   r^   r^   r^   )r   r   r   r^   r^   r^   )r   r   r   r   r_   rd   )r   r   r   r   r   rd   )r   r   r   r   r   r   r2   r\   T)Zreturn_costsrp   )r"   r  r   Úintr   r   rÛ  )rA   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  rG   r%   r%   r&   Útest_too_few_input_arrays  s    z&TestMultiDot.test_too_few_input_arraysN)rI   rJ   rK   r%  r&  r)  r,  r.  r/  r3  r4  r5  r;  r<  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 d   ƒ n1 s,0    Y  d S )N©Úind)r   r   r   Ú	tensorinv)rA   r:  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 )NrD  ©r-   r?  )r"   rò   rj   r   r@  r   )rA   rj   r?  r-   ÚainvrÇ   Úactualr%   r%   r&   Útest_tensorinv_shape  s    
z"TestTensorinv.test_tensorinv_shaper?  r   rq   c                 C   sJ   t  d¡}d|_ttƒ� tj||d� W d   ƒ n1 s<0    Y  d S )NrD  rB  rE  )r"   rò   rj   r   r´   r   r@  )rA   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 )NrD  rC  r\   r>  )	r"   rò   rj   r   r@  r  r   Z	tensordotZtensorsolve)rA   r-   rF  r.   r%   r%   r&   Útest_tensorinv_result1  s
    

z#TestTensorinv.test_tensorinv_resultN)rI   rJ   rK   rª   r«   rË   r"   r  rA  rH  rI  rJ  r%   r%   r%   r&   r=    s   þ
ý
ÿ
r=  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\   rq   r]   rd   Zfloat16r2   zunsupported in linalg)r"   r   r   rd  r   rö  )r:  r%   r%   r&   Útest_unsupported_commontype:  s    rK  z,Bad memory reports lead to OOM in ci testing)r  c                  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\   r2   )r   rp   )r"   rÐ   r4  r  r   r   )r;  r-   r.   r¸   r%   r%   r&   Útest_blas64_dotE  s    rM  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\   r2   rp   r   Úinfor/  r;  rL  l        )
r"   rÒ   r   r  ZdgeqrfrÐ   r   r:  Úitemr   )
r+   Zlapack_routiner/  r;  Zldar-   Zworkræ  ÚresultsZlworkr%   r%   r&   Ú!test_blas64_geqrf_lwork_smoketestO  s    
rQ  )r(   r)   )}Ú__doc__r  rý  r~   r“   r  r  rª   Ú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,   r3   r4   r5   rM   r<   rP   r  r  rg   r‚   r  rm   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  r5  r?  r«   rË   rK  rk  rp  r~  r‚  rƒ  r…  r¯  r¸  r¹  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÔ  rÕ  rñ  r  r  r  r¬   r  r  r=  rK  r  rM  r  rQ  r%   r%   r%   r&   Ú<module>   s  (,
	þþþþþþý
þ
þþã#þþþþÿýÿýÿýÿýÿýÿý
þ
þ
þ
ý
ýÎ9þþþþýþþþé 
0

:	
$.Cý
*4U6; x$ !,1
" )
	
ÿ