o
    V=ºi¯6 ã                   @   sN
  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æƒZwG dçdè„ dèƒZxdédê„ Zyej[jzdë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_LAPACK64c                 C   s$   t | ƒt|tjƒrt |ƒu S tju S ©N)ÚtypeÚ
isinstanceÚnpÚndarray)ÚoutZin_© r%   údC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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,   ó
   ÿÿ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   r4   r5   c                 C   s   | t tfv rdS dS )Ngñhãˆµøä>g•dyáý¥=)r   r   r2   r%   r%   r&   Úget_rtol6   s   r6   >   Ú	hermitianúsize-0ÚsquareÚstridedÚgeneralizedÚ	nonsquarec                   @   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.   rA   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
        ©rA   N)r-   r.   rA   )rB   Údor%   r%   r&   ÚcheckQ   s   zLinalgCase.checkc                 C   s   d| j › d�S )Nz<LinalgCase: ú>)r?   ©rB   r%   r%   r&   Ú__repr__W   s   zLinalgCase.__repr__N)Ú__name__Ú
__module__Ú__qualname__ÚsetrC   rF   rI   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 tagN)Úall_tagsrA   )ÚtagÚcasesÚcaser%   r%   r&   Ú	apply_tag[   s   rR   éÒ  r9   r   ç      ð?ç       @ç      @ç      @r2   r   Zdouble_2)rU   rT   rW   )rV   rW   ç      @r   ù      ð?       @y       @      @y      @      @y      @      @ù       @      ð?r   Z	cdouble_2)rZ   rY   y      ð?      @)y      ð?       Ày      ð?      Ày      ð?      ÀZ0x0©r   r   ©r   r8   rD   Z8x8é   Z1x1é   Znonarrayé   é   é   r<   Zsingle_nsq_1)rT   rU   rV   Zsingle_nsq_2g      @rX   )rU   rT   rV   Zdouble_nsq_1Zdouble_nsq_2Zcsingle_nsq_1)ù      ð?      ð?ù       @       @ù      @      À)y      @      Ày      @      "@y      @       @Zcsingle_nsq_2rb   rc   rd   y      @      "Ày      @      Ày      @       @)rZ   rY   rd   Zcdouble_nsq_1Zcdouble_nsq_2Zcdouble_nsq_1_2y      ð?      ð¿y       @       ÀZcdouble_nsq_2_2Z8x11é   Z1x5é   Z5x1Z0x4Z4x0r7   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 r%d }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 rbd }nt |jgd d ¡ d|jj ¡}t|jd	 |||j	dhB d�}|  
|¡ q| S )
Nr_   r`   é   r(   Z_tile3r;   rD   ©r`   r_   Z_tile213)ÚCASESr!   r-   r"   r#   r   r.   r=   r?   rA   ÚappendÚreshapeÚshape)Ú	new_casesrQ   r-   r.   Únew_caser%   r%   r&   Ú_make_generalized_casesë   s*   

ÿ
$
$
ÿro   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r*d	|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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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  q1dS )z<
    Generate cartesian product of strides for all axes
    ZnopN©r^   )r^   r`   éüÿÿÿéÿÿÿÿr^   éþÿÿÿr_   )r^   rq   éýÿÿÿc                 S   s   g | ]
\}}t || ƒ‘qS r%   )Úabs)Ú.0r-   r.   r%   r%   r&   Ú
<listcomp>  s    z%_stride_comb_iter.<locals>.<listcomp>c                 S   s   g | ]}t d d |ƒ‘qS r   )Úslice)rv   Úrepeatr%   r%   r&   rw     s    r2   l   ï>[= .Zstride_Ú_c                 S   s   g | ]}d | ‘qS )z%+dr%   )rv   Újr%   r%   r&   rw   (  s    r   )ÚstridesZstride_xxx_0Zstride_xxx_0_x©r^   r^   Zstride_xxx_0_0)r!   r"   r#   ÚndimÚ	itertoolsÚproductÚtupleÚziprl   Ú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  sL   €








€ãr�   c               	   C   sn   g } t D ]0}t|jƒD ](\}}t|jƒD ]\}}t|jd | d | |||jdhB d�}|  |¡ qqq| S )Nrz   r:   rD   )ri   r�   r-   r.   r=   r?   rA   rj   )rm   rQ   r-   Za_labelr.   Zb_labelrn   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   sv   | j D ]5}|j|@ |krq|j|@ rqz| | j¡ W q ty8 } zd|›d�}|t ¡ 7 }t|ƒ|‚d}~ww 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_CASESrA   rF   rE   Ú	ExceptionÚ	tracebackÚ
format_excÚAssertionError)rB   ÚrequireÚexcluderQ   ÚeÚmsgr%   r%   r&   Úcheck_casesQ  s   


€ý÷zLinalgTestCase.check_casesN)rJ   rK   rL   ri   r’   rM   r›   r%   r%   r%   r&   r‘   N  s    r‘   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚLinalgSquareTestCasec                 C   ó   | j dhddhd� d S )Nr9   r;   r8   ©r—   r˜   ©r›   rH   r%   r%   r&   Útest_sq_casesg  ó   
ÿz"LinalgSquareTestCase.test_sq_casesc                 C   ó   | j ddhdhd� d S )Nr9   r8   r;   rŸ   r    rH   r%   r%   r&   Útest_empty_sq_casesk  ó   

ÿz(LinalgSquareTestCase.test_empty_sq_casesN)rJ   rK   rL   r¡   r¤   r%   r%   r%   r&   r�   e  ó    r�   c                   @   rœ   )ÚLinalgNonsquareTestCasec                 C   rž   )Nr<   r;   r8   rŸ   r    rH   r%   r%   r&   Útest_nonsq_casesr  r¢   z(LinalgNonsquareTestCase.test_nonsq_casesc                 C   r£   )Nr<   r8   r;   rŸ   r    rH   r%   r%   r&   Útest_empty_nonsq_casesv  r¥   z.LinalgNonsquareTestCase.test_empty_nonsq_casesN)rJ   rK   rL   r¨   r©   r%   r%   r%   r&   r§   p  r¦   r§   c                   @   rœ   )ÚHermitianTestCasec                 C   rž   )Nr7   r;   r8   rŸ   r    rH   r%   r%   r&   Útest_herm_cases}  r¢   z!HermitianTestCase.test_herm_casesc                 C   r£   )Nr7   r8   r;   rŸ   r    rH   r%   r%   r&   Útest_empty_herm_cases�  r¥   z'HermitianTestCase.test_empty_herm_casesN)rJ   rK   rL   r«   r¬   r%   r%   r%   r&   rª   {  r¦   rª   c                   @   ó,   e Zd Zejjdd„ ƒZejjdd„ ƒZdS )ÚLinalgGeneralizedSquareTestCasec                 C   r£   )Nr;   r9   r8   rŸ   r    rH   r%   r%   r&   Útest_generalized_sq_casesˆ  ó   

ÿz9LinalgGeneralizedSquareTestCase.test_generalized_sq_casesc                 C   ó   | j h d£d� d S )N>   r;   r8   r9   ©r—   r    rH   r%   r%   r&   Útest_generalized_empty_sq_cases�  ó   z?LinalgGeneralizedSquareTestCase.test_generalized_empty_sq_casesN)rJ   rK   rL   ÚpytestÚmarkÚslowr¯   r³   r%   r%   r%   r&   r®   †  ó
    
r®   c                   @   r­   )Ú"LinalgGeneralizedNonsquareTestCasec                 C   r£   )Nr;   r<   r8   rŸ   r    rH   r%   r%   r&   Útest_generalized_nonsq_cases”  r°   z?LinalgGeneralizedNonsquareTestCase.test_generalized_nonsq_casesc                 C   r±   )N>   r;   r8   r<   r²   r    rH   r%   r%   r&   Ú"test_generalized_empty_nonsq_cases™  r´   zELinalgGeneralizedNonsquareTestCase.test_generalized_empty_nonsq_casesN)rJ   rK   rL   rµ   r¶   r·   rº   r»   r%   r%   r%   r&   r¹   ’  r¸   r¹   c                   @   r­   )ÚHermitianGeneralizedTestCasec                 C   r£   )Nr;   r7   r8   rŸ   r    rH   r%   r%   r&   Útest_generalized_herm_cases   r°   z8HermitianGeneralizedTestCase.test_generalized_herm_casesc                 C   s   | j h d£dhd� d S )N>   r;   r7   r8   ÚnonerŸ   r    rH   r%   r%   r&   Ú!test_generalized_empty_herm_cases¥  r°   z>HermitianGeneralizedTestCase.test_generalized_empty_herm_casesN)rJ   rK   rL   rµ   r¶   r·   r½   r¿   r%   r%   r%   r&   r¼   ž  r¸   r¼   c                 C   s¾   t | ƒ} | jdkrZ| 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| | || ƒ||< qJ|S t| |ƒS )Nr`   rr   r^   zNot implemented...r2   rs   )r   r~   rl   Ú
ValueErrorr"   rƒ   Zcommon_typer   r€   ÚmapÚranger   )r-   r.   rŒ   ÚrÚcr%   r%   r&   Údot_generalized«  s   

rÅ   c                 C   sH   t | ƒ} | jdkrtj| j| jd�}t| jd ƒ|d< |S t| jd ƒS )Nr`   r2   rs   .r   )r   r~   r"   rƒ   rl   r+   r   )r-   rÃ   r%   r%   r&   Úidentity_like_generalized¾  s   
rÆ   c                   @   ó   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'   )rB   r-   r.   rA   r‹   r%   r%   r&   rE   Ê  s   zSolveCases.doN©rJ   rK   rL   rE   r%   r%   r%   r&   rÈ   È  ó    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+   ©rB   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                   @   ó   e Zd ZdS )z,TestSolve.test_0_size.<locals>.ArraySubclassN©rJ   rK   rL   r%   r%   r%   r&   ÚArraySubclass×  ó    rÓ   r]   r_   r(   r^   r`   r   )r"   r#   Úarangerk   r„   r   rÉ   r   r   r!   r   r   rÀ   ©rB   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                   @   rÑ   )z.TestSolve.test_0_size_k.<locals>.ArraySubclassNrÒ   r%   r%   r%   r&   rÓ   ù  rÔ   rÓ   ra   r^   r_   r(   r`   r   )
r"   r#   rÕ   rk   r„   r   rÉ   r   r   r!   rÖ   r%   r%   r&   Útest_0_size_k÷  s   ""
"8
zTestSolve.test_0_size_kN)rJ   rK   rL   rµ   r¶   Úparametrizer   r   r   r   rÐ   rÙ   rÚ   r%   r%   r%   r&   rÌ   Ð  s
    
!rÌ   c                   @   rÇ   )ÚInvCasesc                 C   s0   t  |¡}tt||ƒt|ƒƒ tt||ƒƒ d S r   )r   Úinvr   rÅ   rÆ   r   r'   )rB   r-   r.   rA   Za_invr%   r%   r&   rE     s
   

ÿzInvCases.doNrÊ   r%   r%   r%   r&   rÜ   
  rË   rÜ   c                   @   ó2   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                   @   rÑ   )z*TestInv.test_0_size.<locals>.ArraySubclassNrÒ   r%   r%   r%   r&   rÓ     rÔ   rÓ   ©r   r^   r^   r2   r[   )r"   r#   ÚzerosÚint_r„   r   rÝ   r   r+   r    Úfloat64r   rl   r!   Ú	complex64©rB   rÓ   r-   Úresr%   r%   r&   rÙ     s   

zTestInv.test_0_sizeN©rJ   rK   rL   rµ   r¶   rÛ   r   r   r   r   rÐ   rÙ   r%   r%   r%   r&   rß     s    
rß   c                   @   rÇ   )ÚEigvalsCasesc                 C   s&   t  |¡}t  |¡\}}t||ƒ d S r   )r   ÚeigvalsÚeigr   )rB   r-   r.   rA   ÚevÚevaluesÚevectorsr%   r%   r&   rE   ,  s   
zEigvalsCases.doNrÊ   r%   r%   r%   r&   rè   *  rË   rè   c                   @   rÞ   )Ú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   rr   )r"   r   r   r   ré   r+   r5   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                   @   rÑ   )z.TestEigvals.test_0_size.<locals>.ArraySubclassNrÒ   r%   r%   r%   r&   rÓ   <  rÔ   rÓ   rà   r2   ©r   r^   r[   r\   )r"   r#   rá   râ   r„   r   ré   r   r+   r    rã   r   rl   r!   rä   rå   r%   r%   r&   rÙ   :  ó   

zTestEigvals.test_0_sizeNrç   r%   r%   r%   r&   rî   2  s    
rî   c                   @   rÇ   )Ú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   r6   r+   r   r'   )rB   r-   r.   rA   rì   rí   r%   r%   r&   rE   O  s   
 þzEigCases.doNrÊ   r%   r%   r%   r&   rò   M  rË   rò   c                   @   rÞ   )Ú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+   r5   ©rB   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                   @   rÑ   )z*TestEig.test_0_size.<locals>.ArraySubclassNrÒ   r%   r%   r%   r&   rÓ   f  rÔ   rÓ   rà   r2   rð   r[   r\   )r"   r#   rá   râ   r„   r   rê   r   r+   r    rã   r   rl   r!   rä   ©rB   rÓ   r-   ræ   Zres_vr%   r%   r&   rÙ   d  ó   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_uvr7   )r"   r   r   Úsvdr   r+   r3   r7   )rB   r+   r‹   ÚurŽ   Úvhr%   r%   r&   rÐ   ~  s   zSVDBaseTests.test_typesN)rJ   rK   rL   r7   rµ   r¶   rÛ   r   r   r   r   rÐ   r%   r%   r%   r&   rû   {  s    rû   c                   @   rÇ   )Ú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   r6   r+   r   r'   )rB   r-   r.   rA   rÿ   rŽ   Úvtr%   r%   r&   rE   ‹  s   &ÿþzSVDCases.doNrÊ   r%   r%   r%   r&   r  ‰  rË   r  c                   @   rÇ   )ÚTestSVDc                 C   s˜   t  d¡}tj|d| jd�\}}}t|jdƒ t|jdƒ t|t  d¡ƒ t  d¡}tj|d| jd�\}}}t|jdƒ t|jdƒ t|t  d¡ƒ dS )	z6 Empty input should put an identity matrix in u or vh )ra   r   Trü   ©ra   ra   r[   ra   )r   ra   N)r"   rƒ   r   rþ   r7   r   rl   Úeye)rB   r‹   rÿ   rŽ   r   r%   r%   r&   Útest_empty_identity•  s   

zTestSVD.test_empty_identityN)rJ   rK   rL   r  r%   r%   r%   r&   r  ”  s    r  c                   @   rÇ   )Ú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©r7   .ró   c                 S   s<   t t| jƒƒ}|d |d |d< |d< t tj| |d�¡S )Nrs   rr   ©Úaxes)r‰   rÂ   r~   r"   ÚconjÚ	transpose)Úmatr
  r%   r%   r&   r7   «  s   z'SVDHermitianCases.do.<locals>.hermitianrr   )r   rþ   r   rÅ   r"   r   r6   r+   r   r	   Úbroadcast_tor  rl   r   Úsortr   r'   )rB   r-   r.   rA   rÿ   rŽ   r  r7   r%   r%   r&   rE   ¦  s   &ÿþ,,zSVDHermitianCases.doNrÊ   r%   r%   r%   r&   r  ¤  rË   r  c                   @   s   e Zd ZdZdS )ÚTestSVDHermitianTN)rJ   rK   rL   r7   r%   r%   r%   r&   r  ·  s    r  c                   @   rÇ   )Ú	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 )Nr8   F)rý   ).r   ).rr   rf   re   ©r/   r0   r_   rs   r^   rr   Úfro)r   r   r   r   Úcondrþ   r   r"   rÝ   ru   ÚsumÚmaxÚminr   Úsqrt)rB   r-   r.   rA   rÄ   rŽ   Zcinvr%   r%   r&   rE   ¾  sZ   þþþ
&ý
&ý&ý&ý
ÿ
üzCondCases.doNrÊ   r%   r%   r%   r&   r  »  s    r  c                   @   s>   e Zd Zdd„ Zdd„ Zejjdddd�d	d
„ ƒZdd„ Z	dS )ÚTestCondc                 C   s€   t g d¢g d¢g d¢gƒ}tt |t¡dƒ tt |t ¡dƒ tt |d¡dƒ tt |d¡dƒ tt |d	¡t d
¡ƒ d S )N)rT   r   r^   )r   g       Àr   )r   r   rV   ra   gUUUUUUå?r^   rr   rÎ   r  gUUUUU6@)r   r   r   r  r   r"   r  ©rB   Ú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ƒ qt ||¡D ]
\}}t ||¡ q-d S )N©r_   r_   ©Nr^   r_   r  rr   rs   ç  4&õkC)r"   rá   Úonesr   r€   r   r   r  )rB   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  |d ¡ƒ ||v r^t|d d	kƒ t|d
 d	kƒ q8tt  |d ¡ ƒ tt  |d
 ¡ ƒ q8d S )N)Nr^   rr   r_   rs   r  r  r  rð   )r`   r_   r_   ©r^   r   r^   r^   r   r  r_   )	r"   r   Únanr   r  r   r!   Zfloat_Úisnan)rB   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|d t jƒ t|d t jƒ tt  	|d ¡ƒ tt  	|d ¡ƒ qd S )	NrS   r_   r   r[   r}   )Nr^   r_   r  rr   rs   rð   ©r^   r   )
r"   ÚrandomÚseedÚrandr   r  r   r   r   Úisfinite)rB   r  r"  rÄ   r%   r%   r&   Útest_stacked_singular  s   ûzTestCond.test_stacked_singularN)
rJ   rK   rL   r  r#  rµ   r¶   Úxfailr)  r/  r%   r%   r%   r&   r  é  s    	
ÿ
r  c                   @   rÇ   )Ú	PinvCasesc                 C   s<   t  |¡}t}t||||ƒ|ƒ|ddd� tt||ƒƒ d S )Nrf   re   r  ©r   ÚpinvrÅ   r   r   r'   ©rB   r-   r.   rA   Za_ginvr   r%   r%   r&   rE   1  s   
zPinvCases.doNrÊ   r%   r%   r%   r&   r1  ,  s    r1  c                   @   rÑ   )ÚTestPinvNrÒ   r%   r%   r%   r&   r5  9  rÔ   r5  c                   @   rÇ   )ÚPinvHermitianCasesc                 C   s@   t j|dd�}t}t||||ƒ|ƒ|ddd� tt||ƒƒ d S )NTr  rf   re   r  r2  r4  r%   r%   r&   rE   ?  s   zPinvHermitianCases.doNrÊ   r%   r%   r%   r&   r6  =  rË   r6  c                   @   rÑ   )ÚTestPinvHermitianNrÒ   r%   r%   r%   r&   r7  G  rÔ   r7  c                   @   rÇ   )Ú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 )Nrr   ©Úaxisr   r^   )r   ÚdetÚslogdetr   r+   r    r   r   Úastyper   ré   r   r   Úreducer"   ÚexpZ
atleast_1dru   r   r   )
rB   r-   r.   rA   ÚdrŽ   ÚldÚadrë   Úmr%   r%   r&   rE   M  s   



zDetCases.doNrÊ   r%   r%   r%   r&   r8  K  rË   r8  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   rH   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   )rB   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 )Nr[   r2   rT   r*  r   r^   )r"   rá   rä   r   r;  r   r   r+   r    r<  Úfloat32rã   )rB   r-   ræ   r%   r%   r&   rÙ   u  s    







zTestDet.test_0_sizeN)rJ   rK   rL   rF  rµ   r¶   rÛ   r   r   r   r   rÐ   rÙ   r%   r%   r%   r&   rD  _  s
    
rD  c                   @   rÇ   )Ú
LstsqCasesc                 C   sL  t  |¡}|j\}}t |d¡\}}}	tj||dd�\}
}}}|dkr+t|
dk ¡ ƒ ||kr=t|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 )	NFrr   ©Zrcondr   r_   r9  r^   rp   )r"   r   rl   r   rþ   Úlstsqr   r‡   r   r   r   Z__array_wrap__ru   r  r~   r   r„   r    Ú
issubdtyper+   Úfloatingr'   )rB   r-   r.   rA   ÚarrrC  Únrÿ   rŽ   r  r‹   Ú	residualsÚrankÚsvZexpect_residsr%   r%   r&   rE   ‹  s0   


 ÿ
€
zLstsqCases.doNrÊ   r%   r%   r%   r&   rI  ‰  rË   rI  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ƒ �K}| 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   ƒ d S 1 sjw   Y  d S )N)rE  rT   rE  rT   rU   rE  )rE  rU   rE  rE  rT   rE  )rT   rE  rT   rE  rE  rW   )rE  rE  rE  rU   rV   rE  )r^   r   r   r   r   r   z`rcond` parameter will changera   rr   rJ  r`   r^   )
r"   r   ÚTr   ÚrecordÚFutureWarningr   rK  r   Úlen)	rB   r-   r.   Úsupr÷   r‹   rP  rQ  rŽ   r%   r%   r&   Útest_future_rcond¨  s$   
ýý"÷zTestLstsq.test_future_rcond)rC  rO  Ún_rhs))ra   r_   r_   )r   ra   r^   )r   ra   r_   )ra   r   r^   )ra   r   r_   )ra   r_   r   )r   r   r   c                 C   sÜ   t  || ¡ ||¡}t  ||f¡}tj||d d�\}}}}	|dkr*t|dk ¡ ƒ t|j	||fƒ t|j	||kr<|fndƒ ||krZ|dkrZ|t  
||¡ }
t||
|
 jdd�ƒ t|t||ƒƒ t|	j	t||ƒfƒ d S )NrJ  r   r\   rs   r9  )r"   rÕ   rk   r   r   rK  r   r‡   r   rl   r   r   r  r  )rB   rC  rO  rZ  r-   r.   r‹   rP  rQ  rŽ   rÃ   r%   r%   r&   Útest_empty_a_bº  s   
zTestLstsq.test_empty_a_bc                 C   sv   t  g d¢¡}t  g d¢¡}t  |t  t|ƒ¡g¡j}ttdƒ� tj	||d d� W d   ƒ d S 1 s4w   Y  d S )N)r   r^   r_   r`   )rr   gš™™™™™É?gÍÌÌÌÌÌì?gÍÌÌÌÌÌ @gffffff
@zIncompatible dimensionsrJ  )
r"   r   Zvstackr   rW  rT  r   r   r   rK  )rB   r‹   Úyr  r%   r%   r&   Útest_incompatible_dimsÒ  s   "ÿz TestLstsq.test_incompatible_dimsN)	rJ   rK   rL   rY  rµ   r¶   rÛ   r[  r]  r%   r%   r%   r&   rS  §  s
    
	rS  Údtc                 C   s   g | ]}t  |¡‘qS r%   )r"   r+   )rv   rÄ   r%   r%   r&   rw   Û  s    rw   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 )ÚTestMatrixPowerra   )r`   r   r^   r_   )r_   r`   r   r^   )r^   r_   r`   r   r^   r   r_   r™   ÚgÚGc                 C   s˜   | j  |¡}tt|dd d d d ƒ| jƒ tt|dd d d d ƒ| j ƒ tt|dd d d d ƒ| jƒ tt|dd d d d ƒ| jƒ d S )Nr_   éd   i   é    r   r^   r`   )Úrshft_1r=  r   r   Úrshft_0Úrshft_2Úrshft_3)rB   r^  Zrshftr%   r%   r&   Útest_large_powerè  s   ÿÿÿÿz TestMatrixPower.test_large_powerc                 C   ó>   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©rB   r^  rl  r  r%   r%   r&   Útest_power_is_zeroó  ó   
€ýz"TestMatrixPower.test_power_is_zeroc                 C   ri  )Nc                 S   s&   t | dƒ}t|| ƒ t|j| jƒ d S )Nr^   )r   r   r+   )r  rk  r%   r%   r&   rl  ÿ  s   

z-TestMatrixPower.test_power_is_one.<locals>.tzrm  rq  r%   r%   r&   Útest_power_is_oneþ  rs  z!TestMatrixPower.test_power_is_onec                 C   ri  )Nc                 S   s>   t | dƒ}| jtkrtnt}t||| | ƒƒ t|j| jƒ d S )Nr_   )r   r+   ro  r	   r   r   )r  rk  Úmmulr%   r%   r&   rl  
  s   
z-TestMatrixPower.test_power_is_two.<locals>.tzrm  rq  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 ©Nrr   )r   r+   ro  r	   r   r   rÆ   )r  Zinvmatru  r%   r%   r&   rl    s
   
ÿz3TestMatrixPower.test_power_is_minus_one.<locals>.tz)rn  Údtnoinvr=  rq  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^   )re  r=  r   Ú	TypeErrorr   ©rB   r^  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_   )ra   r`   r_   )r   r   r   r"   r   r   )rB   r^  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 rw  )rx  Únoninvr=  r   r   r   r{  r%   r%   r&   Útest_exceptions_not_invertible*  s   
z.TestMatrixPower.test_exceptions_not_invertibleN)rJ   rK   rL   r"   r  re  rd  rf  rg  rn  r   r~  Úblockrp  ro  r+   rx  rh  rr  rt  rv  ry  r|  r}  r  r%   r%   r%   r&   r_  Û  s"    
r_  c                   @   rÇ   )ÚTestEigvalshCasesc                 C   s^   t  |d¡}t  |¡\}}|jdd� t||t|jƒd� t  |d¡}t||t|jƒd� d S )NÚLrr   r9  ró   ÚU)r   Úeigvalshrê   r  r   r6   r+   )rB   r-   r.   rA   rë   rì   rí   Úev2r%   r%   r&   rE   3  s   zTestEigvalshCases.doNrÊ   r%   r%   r%   r&   r�  1  rË   r�  c                   @   óB   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   r„  r   r+   r3   )rB   r+   r‹   r÷   r%   r%   r&   rÐ   @  s   zTestEigvalsh.test_typesc                 C   óX   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   rH  r   rÀ   r   r„  ©rB   r‹   r%   r%   r&   Útest_invalidF  ó   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   rr   ró   r‚  rŠ  Úlrƒ  rÿ   )r"   r   r   r6   r   r„  r   )rB   Ú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                   @   rÑ   )z/TestEigvalsh.test_0_size.<locals>.ArraySubclassNrÒ   r%   r%   r%   r&   rÓ   d  rÔ   rÓ   rà   r2   rð   r[   r\   )r"   r#   rá   râ   r„   r   r„  r   r+   r    rã   r   rl   r!   rä   rH  rå   r%   r%   r&   rÙ   b  rñ   zTestEigvalsh.test_0_sizeN©rJ   rK   rL   rµ   r¶   rÛ   r   r   r   r   rÐ   rŽ  r•  rÙ   r%   r%   r%   r&   r‡  ?  s    
r‡  c                   @   rÇ   )Ú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 )Nrr   r9  .ró   rƒ  )rô   Úerr_msg)r   Úeighrê   r  r   r   rÅ   r"   r   r6   r+   Úrepr)
rB   r-   r.   rA   rë   Zevcrì   rí   r…  Zevc2r%   r%   r&   rE   w  s   

 þ

 
þzTestEighCases.doNrÊ   r%   r%   r%   r&   r—  u  rË   r—  c                   @   r†  )Ú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   rˆ  r‰  )r"   r   rH  r   rÀ   r   r™  r�  r%   r%   r&   rŽ  “  r�  zTestEigh.test_invalidc                 C   s   t jddgddggt jd�}t jddgddggt jd�}t jddgt jd�}tt jƒ}t j |¡\}}t|||d� t jj|dd�\}}t|||d� t jj|dd�\}}t|||d� t jj|d	d�\}}t|||d� t jj|d
d�\}}t|||d� d S r�  )r"   r   r   r6   r   r™  r   )rB   r’  r“  r”  rô   r÷   rø   r%   r%   r&   r•  ™  s   
zTestEigh.test_UPLOc                 C   sú   G dd„ dt jƒ}t jdt jd� |¡}t |¡\}}t|jj	t j
u ƒ t|jj	t j
u ƒ t|j|jƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡\}}t|jj	t ju ƒ t|jj	t ju ƒ t|j|jƒ td|jƒ tt|t jƒƒ d S )Nc                   @   rÑ   )z+TestEigh.test_0_size.<locals>.ArraySubclassNrÒ   r%   r%   r%   r&   rÓ   ±  rÔ   rÓ   rà   r2   rð   r[   r\   )r"   r#   rá   râ   r„   r   r™  r   r+   r    rã   r   rl   r!   rä   rH  rù   r%   r%   r&   rÙ   ¯  rú   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ƒ d S tt |jjtjƒƒ d S r   )	Ú
issubclassr+   r    r"   Zinexactr   Úrealr   rM  )r‹   ræ   r%   r%   r&   Úcheck_dtypeÊ  s   z_TestNormBase.check_dtype)rJ   rK   rL   r^  Ú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 )NrE  r2   )r   r   r   r^  r   rH   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|dƒ tƒ �}| 	t
d¡ t|dƒ}|  ||¡ t|dƒ W d   ƒ n1 sTw   Y  t|dƒ}|  ||¡ t|dƒ t|d	ƒ}|  ||¡ t|d
ƒ t|dƒ}|  ||¡ t||j d
¡|j d¡ ƒ t|dƒ}|  ||¡ t||j d
¡|j d¡ ƒ t|t jƒ}|  ||¡ t|dƒ qd S )Nr&  Ú
AllIntegerZAllFloatrE  údivide by zero encounteredrr   r   r_   r^   rU   rÎ   ra   g      Ð?rT   )r"   r   Ú	typecodesr=  r   r   rŸ  r   r   ÚfilterÚRuntimeWarningr+   r    ©	rB   r-   Zexact_typesZinexact_typesZ	all_typesZ	each_typeÚatZanrX  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 ]}||ƒ q2d S )N)r^   r_   r`   ra   )rr   rs   rt   rq   )rr   r_   rt   ra   c                    sÔ   t jjt| ƒdˆ jd� t jjt| tƒdˆ jd� t jjt| t ƒdˆ jd� t jjt| dƒdˆ jd� t jjt| dƒdˆ jd� t jjt| d	ƒdˆ jd� t jjt| d
ƒdˆ jd� t jjt| dƒdˆ jd� d S )Ng�¥6Ò­è@©r*   rW   rT   r^   ç      $@rr   g¸…ëQ¸Þ?r_   rs   gÊsÔcÙÑê?r   ra   )r"   Útestingr   r   r   r   )rø   rH   r%   r&   Ú_test  s0   ÿÿÿÿÿÿÿ
ÿz+_TestNormGeneral.test_vector.<locals>._testr2   )r   r^  )rB   r-   r.   rÄ   r¯  rø   r%   rH   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 ]4‰‡ ‡fd	d
„tˆ jd ƒD ƒ}ttˆ ˆdd�|ƒ ‡ ‡fdd
„tˆ jd ƒD ƒ}ttˆ ˆdd�|ƒ qtjdd| jd� 	ddd¡‰ˆj
}d ddddtjtj dfD ]h‰t t| |ƒd¡D ][}|\}}|dk r‡||7 }|dk r�||7 }||kr�tttˆˆ|d� qytˆˆ|d�}|||  ‰||k r¿‡‡‡fdd
„tˆjˆ ƒD ƒ}n‡‡‡fdd
„tˆjˆ ƒD ƒ}t||ƒ qyqmd S )N©r^   r_   r`   ©ra   rf   r(   r2   rr   r   r^   r_   r`   c                    s$   g | ]}t ˆ d d …|f ˆd�‘qS ©N©Úord©r   ©rv   Úk©r  Úorderr%   r&   rw   '  ó   $ z._TestNormGeneral.test_axis.<locals>.<listcomp>©rµ  r:  c                    s$   g | ]}t ˆ |d d …f ˆd�‘qS r³  r¶  r·  r¹  r%   r&   rw   )  r»  é   ra   rs   r  c                    s*   g | ]}t ˆ d d … j|ˆd�ˆd�‘qS ©Nr9  r´  )r   Útaker·  ©ÚBÚk_indexrº  r%   r&   rw   ?  s    "ÿc                    s,   g | ]}t ˆ d d … j|ˆd�jˆd�‘qS r¾  )r   r¿  rT  r·  rÀ  r%   r&   rw   B  s    $ÿ)r   r^  r"   ÚInfrÂ   rl   r   r   rÕ   rk   r~   r   Úcombinationsr   rÀ   )	rB   Z	expected0Z	expected1Úndr:  Zrow_axisZcol_axisrO  r×   r%   )r  rÁ  rÂ  rº  r&   Ú	test_axis!  s:   ÿÿìÿ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 ]C}t|jƒD ];}t|||d	�}t|||d
d�}tt  |¡|| ||¡d� t|j	ƒ}d||< t|ƒ}t|j	|k| |j	|||¡ƒ qTqMd ddddt j
t j
 ddf	D ]O}t t|jƒd¡D ]C}t|||d	�}t|||d
d�}tt  |¡|| ||¡d� t|j	ƒ}d||d < d||d < t|ƒ}t|j	|k| |j	|||¡ƒ qªqŸd S )Nr^   r½  r2   r_   r`   ra   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^   rr   r   rs   r  Únuc)r"   rÕ   r^  rk   r   r   ZsqueezeÚformatr   rl   rÃ  rÂ   r~   r‰   r�   r   Úpermutations)	rB   r  Zallclose_errZ	shape_errr×   ÚfoundZexpected_shaperº  r¸  r%   r%   r&   Útest_keepdimsF  sT   
ÿ
ÿ
ÿ

ÿø 
ÿ

ÿ÷ÿz_TestNormGeneral.test_keepdimsN)rJ   rK   rL   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   rE  )r   r   r   r^  rH   r%   r%   r&   Útest_matrix_emptyv  s    z_TestNorm2D.test_matrix_emptyc           	   	   C   s„  |   g d¢g d¢g¡}tjd }d}|| }|D ]§}| |¡}t|tj ƒ}|  ||¡ t|dƒ tƒ �}| 	t
d¡ t|dƒ}|  ||¡ t|dƒ W d   ƒ n1 sUw   Y  t|d	ƒ}|  ||¡ t|dƒ t|d
ƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ t|dƒ t|tjƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ tjj|ddd� qd S )Nr&  rà   r¤  ZfdFDrU   r¥  rr   rT   r^   r_   gªLXèz¶û?rs   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_typey  sD   



ü









Ûz#_TestNorm2D.test_matrix_return_typec                 C   sÚ   | j ddgddgg| jd�}tt|ƒdƒ tt|dƒdƒ tt|dƒd	ƒ tt|tƒd
ƒ tt|t ƒdƒ tt|dƒd	ƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ ttt|dƒ ttt|dƒ ttt|dƒ d S )Nr^   r`   rf   rg   r2   g…¹ŽT"@r  rÇ  r­  g      (@rW   rr   rX   r_   g„öW³?"@rs   gÑ—€Ê„ì?Znofrort   r   )r   r^  r   r   r   r   rÀ   r  r%   r%   r&   Útest_matrix_2x2¬  s   z_TestNorm2D.test_matrix_2x2c                 C   sº   d| j g d¢g d¢g d¢g| jd� }tt|ƒdƒ tt|dƒdƒ tt|dƒd	ƒ tt|tƒd
ƒ tt|t ƒdƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ d S )Ngš™™™™™¹?r±  )r(   r   rf   )r`   r_   r^   r2   grj=Q0î?r  rÇ  gþB+pcõ?gš™™™™™ñ?g333333ã?r^   rT   rr   gš™™™™™Ù?r_   gû&Þê.dì?rs   gÜ¸Õ ˆçÈ?)r   r^  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 ]}ttt||d ƒ ttt||dƒ ttt||dƒ qLt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`   ra   r  r   rÇ  Útest©r   r`   rð   )r^   r_   ©r_   r`   )r   r^   r_   )	r   r^  r"   rÕ   rk   r   rÀ   r   Z	AxisError)rB   r  rÁ  rº  r%   r%   r&   Útest_bad_argsÍ  s   z_TestNorm2D.test_bad_argsN)
rJ   rK   rL   r"   r   rÍ  rÎ  rÏ  rÐ  rÔ  r%   r%   r%   r&   rÌ  q  s    3rÌ  c                   @   rÑ   )Ú	_TestNormNrÒ   r%   r%   r%   r&   rÕ  é  rÔ   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   r�  r%   r%   r&   Útest_longdouble_normï  s   z+TestNorm_NonSystematic.test_longdouble_normc                 C   s,   t jdgt jd�}tt|dd�ddd� d S )Ni   €r2   r`   r´  l        rf   r¬  )r"   r   Zint32r,   r   r�  r%   r%   r&   Útest_intminõ  s   z"TestNorm_NonSystematic.test_intminc                 C   sŽ   t jdt jd�}d|d< d|d< d}tt jj|dd	�|d
d� | t j¡}tt jj|dd	�|dd� | t j¡}tt jj|dd	�|dd� d S )N©r_   r2   y      @      @r   y      À      @r^   g¨ËþÿV;'@r`   r´  r×  r¬  é	   rf   )	r"   rƒ   Zclongdoubler,   r   r   r=  Ú
complex128rä   )rB   r@  ræ   r%   r%   r&   Útest_complex_high_ordû  s   z,TestNorm_NonSystematic.test_complex_high_ordN)rJ   rK   rL   rØ  rÙ  rÝ  r%   r%   r%   r&   rÖ  í  s    rÖ  c                   @   ó   e Zd ZejZdZdS )Ú_TestNormDoubleBaser)   N)rJ   rK   rL   r"   r   r^  r   r%   r%   r%   r&   rß  	  ó    rß  c                   @   rÞ  )Ú_TestNormSingleBaser(   N)rJ   rK   rL   r"   rH  r^  r   r%   r%   r%   r&   rá    rà  rá  c                   @   rÞ  )Ú_TestNormInt64Baser)   N)rJ   rK   rL   r"   Zint64r^  r   r%   r%   r%   r&   râ    rà  râ  c                   @   rÑ   )ÚTestNormDoubleNrÒ   r%   r%   r%   r&   rã    rÔ   rã  c                   @   rÑ   )ÚTestNormSingleNrÒ   r%   r%   r%   r&   rä    rÔ   rä  c                   @   rÑ   )ÚTestNormInt64NrÒ   r%   r%   r%   r&   rå     rÔ   rå  c                   @   rœ   )Ú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 )Nra   rE  ©rr   rr   r`   r  r   )r^   r   r   r   r^   )ra   )r`   ra   r   )r   r   r"   r  rá   r   )rB   Ú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 )Nra   Tr  r^   r  r   rE  rç  r`   g:Œ0âŽyE>g¾Ü|"•BE>)r7   Ztolgµ;ä¡ˆ°E>)r   r   r"   r  r   rá   )rB   rè  r%   r%   r&   Útest_symmetric_rank:  s   
z"TestMatrixRank.test_symmetric_rankN)rJ   rK   rL   rê  rë  r%   r%   r%   r&   ræ  $  s    ræ  c                  C   sž   t j d¡} tdƒD ]B}| 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rb  )é(   r×  ©Úsizer^   r_   r   rÛ  ra   rf   r`   r]   )r"   r+  ZRandomStaterÂ   Únormalr   r   )ÚrngÚiÚXr%   r%   r&   Útest_reduced_rankH  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+   rl   r  r   Úqrr   r!   r   r   rT  r  r"   r  Útriu)rB   r-   Úa_typeÚa_dtyperC  rO  r¸  ÚqrÃ   Úq1Úr1Úr2r%   r%   r&   Úcheck_qrY  s8   

zTestQR.check_qrrC  rO  )©r`   r   rÒ  r[   c                 C   st   t ||ƒ}t ||f¡}|  |¡ tjj|dd�\}}t|jtjƒ t|jtjƒ t|j	||fƒ t|j	|fƒ d S )NÚrawrö  )
r  r"   rƒ   r  r   rù  r   r+   r   rl   )rB   rC  rO  r¸  r-   ÚhÚtaur%   r%   r&   Útest_qr_empty€  s   

zTestQR.test_qr_emptyc                 C   sÄ   | j ddgddgddggtjd�}tj|dd	�\}}t|jtjkƒ t|jtjkƒ t|jd
kƒ t|jdkƒ tj|jdd	�\}}t|jtjkƒ t|jtjkƒ t|jdkƒ t|jdkƒ d S )Nr^   r_   r`   ra   rf   r(   r2   r  rö  rÓ  rÚ  rh   )	r   r"   r   r   rù  r   r+   rl   rT  )rB   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 ]}| |¡}| |¡}|  |¡ |  |¡ |  |j¡ qdD ]$}dd| |¡  }dd| |¡  }|  |¡ |  |¡ |  |j¡ q:d S )	Nr^   r_   r`   ra   rf   r(   Úfdù              ð?)r   r=  r  rT  )rB   r-   r.   r^  Ú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 )	Nrs   rõ  rö  rr   r_   .rø  rÃ   )r    r+   rl   r  r   rù  r   r!   r   r	   r"   r   r  r
   r  rú  )rB   r-   rû  rü  rC  rO  r¸  rý  rÃ   ZI_matZstack_I_matrþ  rÿ  r   r%   r%   r&   Úcheck_qr_stacked¸  sL   
ÿ"ÿÿ"zTestQR.check_qr_stackedrî  ))r`   ra   )ra   r`   r  r  rÒ  Ú
outer_size)r  rÚ  )r_   r`   ra   r^  c                 C   sP   t jj|| d� |¡}t jj|| d� |¡}|  |¡ |  |d|  ¡ d S )Nrí  r	  )r"   r+  rï  r=  r  )rB   r  rî  r^  r  rÁ  r%   r%   r&   Útest_stacked_inputså  s   

zTestQR.test_stacked_inputsN)rJ   rK   rL   r"   r   r  rµ   r¶   rÛ   r  r  r  r  r   r   r   r   r  r%   r%   r%   r&   rô  U  s    '
-þrô  c                   @   sL   e Zd Zej dg d¢¡ej dejejej	ej
f¡dd„ ƒƒZdd„ ZdS )	ÚTestCholeskyrl   )r}   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|› d|› d|› �d|jd	  t  |¡j d
� d S )Nr^   r	  )rr   rs   rs   r2   ú Ú
iô  r   )r˜  Zatol)r"   r+  r,  ÚrandnrL  Zcomplexfloatingr‰   rÂ   rW  r	   r  r  r   r   Úcholeskyr   rl   ZfinfoZeps)rB   rl   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                   @   rÑ   )z/TestCholesky.test_0_size.<locals>.ArraySubclassNrÒ   r%   r%   r%   r&   rÓ     rÔ   rÓ   rà   r2   )r^   r   r   )r"   r#   rá   râ   r„   r   r  r   rl   r   r+   r    rã   r!   rä   rå   r%   r%   r&   rÙ     s   

zTestCholesky.test_0_sizeN)rJ   rK   rL   rµ   r¶   rÛ   r"   rH  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 ]9}tjd|d�}| | ¡}| d¡ ¡ }t|j	jdƒ t
jt
jt
jfD ]}||ƒ}t|||ƒƒ t|||ƒƒ q4qd S )NÚlittleú<rG   ra   r2   ÚSú=)ÚsysÚ	byteorderr"   rH  rã   r  ZnewbyteorderZbyteswapr   r+   r   rÝ   r;  r3  r   )ZnativeZdttrN  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`   ra   )ra   ra   r_   r_   .r[   )r"   r   rá   r   r   r   rÝ   )Z
invertibleZnon_invertibler‹   r%   r%   r&   Ú test_generalized_raise_multiloop8  s   r   c                  C   sL  d} zt  ¡ }W n ttfy   t d¡ Y nw |dkr�t  d¡ t  d¡ dd l}| |j	d¡ zt
jj ¡  W n tyC   Y n tyQ   t  t j¡ Y nw zt
 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 }~ww t  t j¡ d S t  ¡ \}}t  |¡| kr¤t d¡ d S d S )	Néÿ   zNot POSIX or fork failed.r   r^   r[   rT   zDORGQR parameter number 5zNumpy xerbla not linked in.)ÚosZforkÚOSErrorÚAttributeErrorrµ   ÚskipÚcloseÚresourceZ	setrlimitZRLIMIT_COREr"   r   Úlapack_liteZxerblarÀ   r“   Ú_exitZ	EX_CONFIGr   Zdorgqrr>   ÚwaitZWEXITSTATUS)Z	XERBLA_OKÚpidr'  r-   r™   Ústatusr%   r%   r&   Útest_xerbla_overrideF  sF   þ

ÿý
€üÿr-  c                  C   sd   ddg} t  d¡}| D ]$}|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)r0  r/  r1  )ÚtextwrapÚdedentrÈ  Ú
subprocessÚ
check_callr  Ú
executable)Zbad_libsÚtemplater1  Úcoder%   r%   r&   Útest_sdot_bug_8577w  s   

ÿÿør9  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   )rB   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>  )rB   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>  )rB   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   rl   )rB   ÚA1drÁ  r?  rC  r%   r%   r&   Útest_vector_as_first_argument·  ó
   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(   rE  )rB   r  rÁ  r?  ÚD1dr%   r%   r&   Útest_vector_as_last_argumentÁ  rH  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%   rE  )rB   rF  rÁ  r?  rI  r%   r%   r&   Ú&test_vector_as_first_and_last_argumentË  rH  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 s&J ‚t|| |¡ |¡ƒ t|t  |t  ||¡¡ƒ d S )Nr<  r=  ©r$   ©r"   r+  rá   r   r   r   )rB   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(   rL  rM  )rB   r  rÁ  r$   rN  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 s-J ‚t|| |¡ |¡ |¡ƒ d S )Nr<  r=  rB  )r(   r^   rL  rM  )rB   r  rÁ  r?  rC  r$   rN  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)é   é#   )rS  é   )rT  rf   )rf   r×  )r×  é   )rU  r½  )rE  g     ÃÎ@g     Ã¾@g    €OÂ@g    €1Ç@g    €ŠÍ@)rE  rE  g     ‚¤@g     ±@g     Õ»@g     ‚Ä@)rE  rE  rE  g     p‡@g     ˆ£@g     ÿ´@)rE  rE  rE  rE  g     @�@g     X«@)rE  rE  rE  rE  rE  g     ˆ³@)rE  rE  rE  rE  rE  rE  )r   r^   r^   r`   r`   r`   )r   r   r_   r`   r`   r`   )r   r   r   r`   r`   r`   )r   r   r   r   ra   rf   )r   r   r   r   r   rf   )r   r   r   r   r   r   r2   r^   T)Zreturn_costsrr   )r"   r+  r   Úintr   r   rú  )rB   ZarraysZ
m_expectedZ
s_expectedrŽ   rC  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+  rH   r%   r%   r&   Útest_too_few_input_arrays  s   z&TestMultiDot.test_too_few_input_arraysN)rJ   rK   rL   r@  rA  rD  rG  rJ  rK  rO  rP  rQ  rW  rX  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©ra   r(   r]   r_   r_   ©r`   r`   r_   r^   c                 C   s<   t tƒ� tj||d� W d   ƒ d S 1 sw   Y  d S )N©Úind)r   r   r   Ú	tensorinv)rB   rN  r]  r%   r%   r&   Útest_non_square_handling  s   
"ÿz&TestTensorinv.test_non_square_handlingz
shape, ind)©ra   r(   r]   r`   r_   )©é   r]   r`   r^   c                 C   sN   t  d¡}||_tj||d�}|j|d … |jd |…  }|j}t||ƒ d S )Nrb  ©r-   r]  )r"   r  rl   r   r^  r   )rB   rl   r]  r-   Úainvr×   Úactualr%   r%   r&   Útest_tensorinv_shape%  s   
z"TestTensorinv.test_tensorinv_shaper]  r   rs   c                 C   sL   t  d¡}d|_ttƒ� tj||d� W d   ƒ d S 1 sw   Y  d S )Nrb  r`  rc  )r"   r  rl   r   rÀ   r   r^  )rB   r]  r-   r%   r%   r&   Útest_tensorinv_ind_limit2  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 )Nrb  ra  r^   r\  )	r"   r  rl   r   r^  r   r   Ú	tensordotÚtensorsolve)rB   r-   rd  r.   r%   r%   r&   Útest_tensorinv_result;  s
   

"z#TestTensorinv.test_tensorinv_resultN)rJ   rK   rL   rµ   r¶   rÛ   r"   r   r_  rf  rg  rj  r%   r%   r%   r&   rY    s     þ
ý
ÿ
rY  c                   @   sT   e Zd Zej de d¡dfe d¡dfg¡dd„ ƒZej dg d	¢¡d
d„ ƒZ	dS )ÚTestTensorsolveza, axesrZ  Nr[  )r   r_   c                 C   sR   t tƒ� t |jd d… ¡}tj|||d� W d   ƒ d S 1 s"w   Y  d S ©Nr_   r	  )r   r   r"   r   rl   r   ri  )rB   r-   r
  r.   r%   r%   r&   r_  F  s   
"þz(TestTensorsolve.test_non_square_handlingrl   ))r_   r`   r(   )r`   ra   ra   r`   )r   r`   r`   r   c                 C   sN   t jj|Ž }t  |jd d… ¡}t j ||¡}tt j||t	|jƒd�|ƒ d S rl  )
r"   r+  r  r   rl   r   ri  r   rh  rW  )rB   rl   r-   r.   r‹   r%   r%   r&   Útest_tensorsolve_resultO  s    z'TestTensorsolve.test_tensorsolve_result)
rJ   rK   rL   rµ   r¶   rÛ   r"   r   r_  rm  r%   r%   r%   r&   rk  D  s    þ
ÿrk  c                  C   sT   t jddgddggdd�} ttdƒ� t | ¡ W d   ƒ d S 1 s#w   Y  d S )Nr^   rs   r_   rf   Zfloat16r2   zunsupported in linalg)r"   r   r   rz  r   r  )rN  r%   r%   r&   Útest_unsupported_commontypeY  s   "ÿrn  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   rr   )r"   rá   rH  r   r   r   )rO  r-   r.   rÄ   r%   r%   r&   Útest_blas64_dotd  s   rp  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 oZd
k ƒ d S   ƒ d S )Nl       r^   r2   rr   r   ÚinforC  rO  ro  l        )
r"   rã   r   r(  Zdgeqrfrá   r   rV  Úitemr   )
r+   Zlapack_routinerC  rO  Zldar-   Zworkr  ÚresultsZlworkr%   r%   r&   Ú!test_blas64_geqrf_lwork_smoketestn  s   
&rt  )r(   r)   )~Ú__doc__r"  r  r   r”   r2  r4  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,   r3   r5   r6   rN   r=   rR   r+  r,  ri   rƒ   r-  ro   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  r1  r5  r6  r7  r8  rD  rI  rS  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·   r9  r:  rY  rk  rn  r%  rp  r0  rt  r%   r%   r%   r&   Ú<module>   s
   (,
	þþþþþþý
þ
þþã#þþþþÿýÿýÿýÿýÿýÿý
þ
þ
þ
ý
ýÎ9þþþþýþþþé 
0

:	
$.Cý
*4U6; x$ !.1
" )

	ÿ