U
    »mœdý  ã                   @   s>  d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlZd dlmZ d dlmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 d d	l2m3Z3 d d
l4m5Z5 ejej6ej7fZ8ej9ej:ej;fZ<e8e< Z=dd„ Z>G dd„ dƒZ?G dd„ dƒZ@G dd„ dƒZAG dd„ dƒZBG dd„ dƒZCG dd„ dƒZDd0dd„ZEG dd„ dƒZFG dd„ dƒZGG dd „ d ƒZHejI Jd!d"¡ejI Jd#e#e$f¡d$d%„ ƒƒZKG d&d'„ d'ƒZLG d(d)„ d)ƒZMG d*d+„ d+ƒZNG d,d-„ d-ƒZOG d.d/„ d/ƒZPdS )1é    N)ÚarangeÚarrayÚdotÚzerosÚidentityÚ	conjugateÚ	transposeÚfloat32)Úrandom)Úassert_equalÚassert_almost_equalÚassert_Úassert_array_almost_equalÚassert_allcloseÚassert_array_equalÚsuppress_warnings)Úraises)Ú_pep440)ÚsolveÚinvÚdetÚlstsqÚpinvÚpinvhÚnormÚsolve_bandedÚsolveh_bandedÚsolve_triangularÚsolve_circulantÚ	circulantÚLinAlgErrorÚ
block_diagÚmatrix_balanceÚqrÚLinAlgWarning©Úassert_no_overwrite)Úcheck_free_memory)Ú	HAS_ILP64c                 C   s2   | }|t jkrt j}n|t jkr&t j}t  |¡jS )z;Get the epsilon for dtype, possibly downcast to BLAS types.)ÚnpÚ
longdoubleÚfloat64ÚclongdoubleÚ
complex128ÚfinfoÚeps)ZdtypÚdt© r1   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/linalg/tests/test_basic.pyÚ	_eps_cast    s    

r3   c                   @   sL   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S )ÚTestSolveBandedc                 C   s
  t ddddgddddgddddgdd	d
dggƒ}t ddddgddddgddd
dgdd	ddggƒ}d\}}t ddddgƒ}| d	d¡}t ddgddgddgddggƒ}t ddddgddddgddddgddddggƒ}||||fD ]$}	t||f||	ƒ}
tt||
ƒ|	ƒ qàd S )Nç      ð?é   r   éâÿÿÿé   é   é   é   éÿÿÿÿé   é   ç        ©r:   r;   ç      $@ç       @ç      ,@é   ©r   Úreshaper   r   r   ©ÚselfÚaÚabÚlÚuÚb4Úb4by1Úb4by2Úb4by4ÚbÚxr1   r1   r2   Ú	test_real,   s4    


ý


ýý


ýzTestSolveBanded.test_realc                 C   s
  t ddddgddddgddddgdd	d
dggƒ}t ddddgddddgddd
dgdd	ddggƒ}d\}}t ddddgƒ}| d	d¡}t ddgddgddgddggƒ}t ddddgddddgddddgddddggƒ}||||fD ]$}	t||f||	ƒ}
tt||
ƒ|	ƒ qàd S )Nr5   r6   r   r7   r8   r9   ù               @r;   r<   r=   r>   r?   r@   rA   rB   ù              ,@r:   rD   ù              ð?rE   rG   r1   r1   r2   Útest_complexD   s4    


ý


ýý


ýzTestSolveBanded.test_complexc           	      C   s  t ddddgddddgddd	d
ggƒ}t |d
dd …f d¡t |dd d …f d
¡ t |dd d…f d¡ }t ddddgƒ}| dd¡}t ddgddgddgddggƒ}t dd
d
d
gd
d
d
dgd
dd
d
gd
dd
d
ggƒ}||||fD ] }td||ƒ}tt||ƒ|ƒ qæd S )Nr?   r6   r9   r:   r;   r8   r>   r7   r=   r   r<   rA   rB   rC   rD   ©r;   r;   ©r   r)   ÚdiagrF   r   r   r   ©	rH   rJ   rI   rM   rN   rO   rP   rQ   rR   r1   r1   r2   Útest_tridiag_real\   s.    

þ2 ÿý


ýz!TestSolveBanded.test_tridiag_realc           	      C   s  t ddddgddddgddd	d
ggƒ}t |d
dd …f d¡t |dd d …f d
¡ t |dd d…f d¡ }t ddddgƒ}| dd¡}t ddgddgddgddggƒ}t dd
d
d
gd
d
d
dgd
dd
d
gd
dd
d
ggƒ}||||fD ] }td||ƒ}tt||ƒ|ƒ qæd S )Nr?   r6   r9   rT   r;   r8   r>   r7   r=   r   r:   r<   rA   rB   rU   rD   rX   rY   r[   r1   r1   r2   Útest_tridiag_complexp   s.    

þ2 ÿý


ýz$TestSolveBanded.test_tridiag_complexc                 C   s    t ddddgddddgddddgdd	d
dggƒ}t ddddgddddgddd
dgdd	ddggƒ}d\}}t ddddgƒ}t||f||dd�}tt||ƒ|ƒ d S )Nr5   r6   r   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   F©Úcheck_finite)r   r   r   r   )rH   rI   rJ   rK   rL   rM   rR   r1   r1   r2   Útest_check_finite„   s    


ý


ýz!TestSolveBanded.test_check_finitec                 C   s”   t ddddgddddgddd	d
gddd
d
ggƒ}d\}}t ddddgƒ dd¡}ttt||f||ƒ ttt||f|ddgƒ tttd|ddgƒ d S )Nr?   r6   r9   r:   r;   r8   r>   r7   r=   r   r<   r@   r5   rB   ç      @ç      @rX   )r   rF   Úassert_raisesÚ
ValueErrorr   )rH   rJ   rK   rL   Úbadr1   r1   r2   Útest_bad_shape’   s    


ýzTestSolveBanded.test_bad_shapec                 C   sb   t dddggƒ}tddgdgdgg|ƒ}t|dddggƒ t|jt d	¡ƒ t|dddggƒ d S )
Nr5   rB   ra   rX   r   r:   ç      à?g      ø?Úf8)r   r   r   r   Údtyper)   )rH   rQ   rR   r1   r1   r2   Útest_1x1Ÿ   s
    zTestSolveBanded.test_1x1c                 C   s�   ddddgddddgddddgdd	d
dgg}ddddgddddgddd
dgdd	ddgg}d\}}ddddg}t ||f||ƒ}tt||ƒ|ƒ d S )Nr5   r6   r   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   )r   r   r   )rH   rI   rJ   rK   rL   rQ   rR   r1   r1   r2   Útest_native_list_arguments¦   s    



ý



ýz*TestSolveBanded.test_native_list_argumentsN)Ú__name__Ú
__module__Ú__qualname__rS   rW   r\   r]   r`   rf   rj   rk   r1   r1   r1   r2   r4   *   s   r4   c                   @   s¼   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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 ).ÚTestSolveHBandedc                 C   sV   t ddddgddddgddddggƒ}t ddddgƒ}t||ƒ}t|ddddgƒ d S ©Nr?   rB   é�ÿÿÿr5   rb   ©r   r   r   ©rH   rJ   rQ   rR   r1   r1   r2   Útest_01_upper·   s    

þ
zTestSolveHBanded.test_01_upperc                 C   s~   t ddddgddddgddddggƒ}t ddgddgddgddggƒ}t||ƒ}t ddgddgddgddggƒ}t||ƒ d S )Nr?   rB   rq   r5   rb   ç      @rr   ©rH   rJ   rQ   rR   Úexpectedr1   r1   r2   Útest_02_upperÅ   s     

þý
ýzTestSolveHBanded.test_02_upperc                 C   sj   t ddddgddddgddddggƒ}t ddddgƒ dd¡}t||ƒ}t|t ddddgƒ dd¡ƒ d S )Nr?   rB   rq   r5   rb   r<   r;   ©r   rF   r   r   rs   r1   r1   r2   Útest_03_upperÚ   s    

þ
zTestSolveHBanded.test_03_upperc                 C   sZ   t ddddgddddgddddggƒ}t ddddgƒ}t||dd�}t|ddddgƒ d S )Nrb   r5   rq   rB   r?   T©Úlowerrr   rs   r1   r1   r2   Útest_01_lowerè   s    

þzTestSolveHBanded.test_01_lowerc                 C   s‚   t ddddgddddgddddggƒ}t ddgddgddgddggƒ}t||dd�}t ddgddgddgddggƒ}t||ƒ d S )	Nrb   r5   rq   rB   r?   ru   Tr{   rr   rv   r1   r1   r2   Útest_02_lowerö   s     

þýýzTestSolveHBanded.test_02_lowerc                 C   s^   t ddddgddddgddddggtd�}t ddddgtd�}t||ƒ}t|ddddgƒ d S )Nr?   rB   rq   r5   rb   ©ri   ©r   r	   r   r   rs   r1   r1   r2   Útest_01_float32  s    

þþ
z TestSolveHBanded.test_01_float32c                 C   s†   t ddddgddddgddddggtd�}t ddgddgddgddggtd�}t||ƒ}t ddgddgddgddggƒ}t||ƒ d S )Nr?   rB   rq   r5   rb   r   ru   r€   rv   r1   r1   r2   Útest_02_float32  s(    

þþýý
ýz TestSolveHBanded.test_02_float32c                 C   sV   t ddddgddddgddddggƒ}t dddd	gƒ}t||ƒ}t|dd
d
dgƒ d S )Nr?   rB   rq   ù       €      ð¿rb   ù       @      ð¿ù      @      ð¿ù      @      ð?ù       @      ð?r5   rr   rs   r1   r1   r2   Útest_01_complex.  s    

þ
z TestSolveHBanded.test_01_complexc                 C   s~   t ddddgddddgddddggƒ}t ddgdd	gd
dgddggƒ}t||ƒ}t ddgddgddgddggƒ}t||ƒ d S )Nr?   rB   rq   rƒ   rb   r„   ù       @      @r…   ù      ð¿      ð¿r†   y      @       @r‡   rV   r5   rr   rv   r1   r1   r2   Útest_02_complex<  s     

þý
ýz TestSolveHBanded.test_02_complexc                 C   sD   t dddgdddggƒ}t dddgƒ}t||ƒ}t|dddgƒ d S )Nrq   r5   rb   r?   rr   rs   r1   r1   r2   Útest_tridiag_01_upperQ  s    
z&TestSolveHBanded.test_tridiag_01_upperc                 C   sd   t dddgdddggƒ}t ddgddgddggƒ}t||ƒ}t ddgddgddggƒ}t||ƒ d S )Nrq   r5   rb   rB   r?   rr   rv   r1   r1   r2   Útest_tridiag_02_upper\  s    
ÿþ
þz&TestSolveHBanded.test_tridiag_02_upperc                 C   sX   t dddgdddggƒ}t dddgƒ dd¡}t||ƒ}t|t dddgƒ dd¡ƒ d S )Nrq   r5   rb   r<   r;   r?   ry   rs   r1   r1   r2   Útest_tridiag_03_upperm  s    
z&TestSolveHBanded.test_tridiag_03_upperc                 C   sH   t dddgdddggƒ}t dddgƒ}t||dd�}t|dddgƒ d S )Nrb   r5   rq   Tr{   r?   rr   rs   r1   r1   r2   Útest_tridiag_01_lowerx  s    
ÿz&TestSolveHBanded.test_tridiag_01_lowerc                 C   sh   t dddgdddggƒ}t ddgddgddggƒ}t||dd�}t ddgddgddggƒ}t||ƒ d S )Nrb   r5   rq   rB   Tr{   r?   rr   rv   r1   r1   r2   Útest_tridiag_02_lower„  s    
ÿþþz&TestSolveHBanded.test_tridiag_02_lowerc                 C   sL   t dddgdddggtd�}t dddgtd�}t||ƒ}t|dddgƒ d S )Nrq   r5   rb   r   r?   r€   rs   r1   r1   r2   Útest_tridiag_01_float32•  s    
z(TestSolveHBanded.test_tridiag_01_float32c                 C   sl   t dddgdddggtd�}t ddgddgddggtd�}t||ƒ}t ddgddgddggƒ}t||ƒ d S )Nrq   r5   rb   r   rB   r?   r€   rv   r1   r1   r2   Útest_tridiag_02_float32   s"    
ÿÿþþ
þz(TestSolveHBanded.test_tridiag_02_float32c                 C   sD   t dddgdddggƒ}t dddgƒ}t||ƒ}t|dddgƒ d S )Nrq   rƒ   rb   r…   r†   r?   r5   rr   rs   r1   r1   r2   Útest_tridiag_01_complex±  s    
z(TestSolveHBanded.test_tridiag_01_complexc                 C   sd   t dddgdddggƒ}t ddgddgddggƒ}t||ƒ}t dd	gd
dgd
d
ggƒ}t||ƒ d S )Nrq   rƒ   rb   ù              @r…   rŠ   r†   r?   rV   r5   rr   rv   r1   r1   r2   Útest_tridiag_02_complex¼  s    
ÿþ
þz(TestSolveHBanded.test_tridiag_02_complexc                 C   sH   t dddgdddggƒ}t dddgƒ}t||dd�}t|dddgƒ d S )Nrq   r5   rb   Fr^   r?   rr   rs   r1   r1   r2   r`   Í  s    z"TestSolveHBanded.test_check_finitec                 C   s`   t dddgdddggƒ}t ddgddggƒ}ttt||ƒ ttt|ddgƒ ttt|dgƒ d S )Nrq   r5   rb   rB   )r   rc   rd   r   )rH   rJ   rQ   r1   r1   r2   Útest_bad_shapesØ  s    
ÿÿz TestSolveHBanded.test_bad_shapesc                 C   s>   t dggdddggƒ}t|dddggƒ t|jt d¡ƒ d S )Nr;   r:   rD   r5   rB   ra   rh   )r   r   r   ri   r)   )rH   rR   r1   r1   r2   rj   á  s    zTestSolveHBanded.test_1x1c                 C   sN   ddddgddddgddddgg}ddddg}t ||ƒ}t|ddddgƒ d S rp   )r   r   rs   r1   r1   r2   rk   æ  s    


þ
z+TestSolveHBanded.test_native_list_argumentsN)rl   rm   rn   rt   rx   rz   r}   r~   r�   r‚   rˆ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r•   r`   r–   rj   rk   r1   r1   r1   r2   ro   µ   s,   	ro   c                   @   s"  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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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"e#j$j%dAdB�dCdD„ ƒZ&dES )FÚ	TestSolvec                 C   s   t j d¡ d S ©NéÒ  ©r)   r
   Úseed©rH   r1   r1   r2   Úsetup_methodñ  s    zTestSolve.setup_methodc                 C   sl   ddgddgg}t |ddgƒ}tt||ƒddgƒ ddgddgg}ddg}t ||ƒ}tt||ƒddgƒ d S )Nr;   r5   r   ù                ç333333ó?©r   r   r   )rH   rI   Zx0rQ   r1   r1   r2   Útest_20Feb04_bugô  s    
zTestSolve.test_20Feb04_bugc                 C   sZ   ddgddgg}ddgddggddgddgddggfD ]}t ||ƒ}tt||ƒ|ƒ q6d S )Nr;   r6   r7   r8   r   r:   r    ©rH   rI   rQ   rR   r1   r1   r2   Útest_simpleÿ  s    þ
zTestSolve.test_simplec                 C   sd   t ddgddggdƒ}ddgddgddggdd	gt ddgdƒfD ]}t||ƒ}tt||ƒ|ƒ q@d S )
Né   r:   rT   r8   ÚDrV   r   r;   rž   )r   r   r   r   r¢   r1   r1   r2   Útest_simple_complex  s    ý
zTestSolve.test_simple_complexc                 C   s\   ddgddgg}dD ]B}ddgddggddgfD ]$}t ||d|d�}tt||ƒ|ƒ q0qd S )	Nr:   rD   r¤   ©r   r;   r;   r   Úpos©Úassume_ar|   r    ©rH   rI   r|   rQ   rR   r1   r1   r2   Útest_simple_pos  s    ÿzTestSolve.test_simple_posc                 C   sP   ddgddgg}ddgddgddggfD ]"}t ||dd�}tt||ƒ|ƒ q(d S )Nr¤   r:   r8   rV   r   r¨   ©rª   r    r¢   r1   r1   r2   Útest_simple_pos_complexb  s    ÿz"TestSolve.test_simple_pos_complexbc                 C   s\   ddgddgg}dD ]B}ddgddggddgfD ]$}t ||d|d�}tt||ƒ|ƒ q0qd S )	Nr:   rD   éûÿÿÿr§   r;   r   Úsymr©   r    r«   r1   r1   r2   Útest_simple_sym#  s    ÿzTestSolve.test_simple_symc                 C   sP   ddgddgg}ddgddgddggfD ]"}t ||dd�}tt||ƒ|ƒ q(d S )Nr¤   r:   éüÿÿÿrV   r   r°   r­   r    r¢   r1   r1   r2   Útest_simple_sym_complexb,  s    ÿz"TestSolve.test_simple_sym_complexbc                 C   sV   ddgddgg}ddgddgddgddggfD ]"}t ||dd	�}tt||ƒ|ƒ q.d S )
Nr¤   r‡   r²   rV   r   r;   r:   r°   r­   r    r¢   r1   r1   r2   Útest_simple_sym_complex4  s    þz!TestSolve.test_simple_sym_complexc                 C   sb   ddgddgg}dD ]H}ddgddggddgddgfD ]$}t ||d|d	�}tt||ƒ|ƒ q6qd S )
Nr:   rD   r¯   r§   r;   r   rV   Úherr©   r    r«   r1   r1   r2   Útest_simple_her_actuallysym=  s    þz%TestSolve.test_simple_her_actuallysymc                 C   sV   ddgddgg}ddgddgddgddggfD ]"}t ||d	d
�}tt||ƒ|ƒ q.d S )Nr¤   r‡   r„   r²   rV   r   r;   r:   rµ   r­   r    r¢   r1   r1   r2   Útest_simple_herG  s    þzTestSolve.test_simple_herc                 C   sŽ   d}t ||gƒt ||gƒd  }t||fdƒ}t|ƒ}t|ƒt|ƒd  }td|ƒD ]*}|d d …|f }t||ƒ|d d …|f< qTt||ƒ d S )Nr:   rV   r¥   rž   r   )r
   r   r   r   r   r   r   )rH   ÚnÚAÚXZAinvÚRÚiÚrr1   r1   r2   Útest_nils_20Feb04P  s    zTestSolve.test_nils_20Feb04c                 C   sr   d}t ||gƒ}t|ƒD ] }dd|||f   |||f< qtdƒD ]*}t |dgƒ}t||ƒ}tt||ƒ|ƒ qBd S )Nr6   çš™™™™™¹?r8   rD   ©r
   Úranger   r   r   ©rH   r¸   rI   r¼   rQ   rR   r1   r1   r2   Útest_random[  s    
zTestSolve.test_randomc                 C   s‚   d}t ||gƒdt ||gƒ  }t|ƒD ] }dd|||f   |||f< q(tdƒD ]*}t |dgƒ}t||ƒ}tt||ƒ|ƒ qRd S )Nr6   rV   r¿   r:   rD   rÀ   rÂ   r1   r1   r2   Útest_random_complexf  s    
zTestSolve.test_random_complexc              	   C   s2   t jtdd�� tdggdgdd� W 5 Q R X d S )Nz#The 'sym_pos' keyword is deprecated)Úmatchr5   r;   T)Zsym_pos)ÚpytestZwarnsÚDeprecationWarningr   rœ   r1   r1   r2   Útest_sym_pos_depp  s
    þzTestSolve.test_sym_pos_depc                 C   sš   d}t ||gƒ}t|ƒD ]F}tdd|||f   ƒ|||f< t|ƒD ]}|||f |||f< qDqtdƒD ],}t |gƒ}t||dd�}tt||ƒ|ƒ qhd S )Nr6   r¿   r8   r¨   r­   )r
   rÁ   Úabsr   r   r   ©rH   r¸   rI   r¼   ÚjrQ   rR   r1   r1   r2   Útest_random_symw  s     
zTestSolve.test_random_symc                 C   sÀ   d}t ||gƒ}|dt ||gƒ  }t|ƒD ]J}tdd|||f   ƒ|||f< t|ƒD ]}t|||f ƒ|||f< qXq,t |gƒdt |gƒ  }tdƒD ]"}t||dd�}tt||ƒ|ƒ q˜d S )Nr6   rV   r¿   rT   r:   r¨   r­   )r
   rÁ   rÉ   r   r   r   r   rÊ   r1   r1   r2   Útest_random_sym_complexƒ  s     z!TestSolve.test_random_sym_complexc                 C   s^   ddgddgg}ddgddggddgddgddggfD ]"}t ||dd�}tt||ƒ|ƒ q6d S )	Nr;   r6   r7   r8   r   r:   Fr^   r    r¢   r1   r1   r2   r`   �  s    ÿzTestSolve.test_check_finitec                 C   s:   d}dddg}t ||ƒ}t| ¡ |ƒ t|jdkdƒ d S )Nr;   r:   rD   ©rD   z'Scalar_a_1D_b test returned wrong shape)r   r   Zravelr   Úshaper¢   r1   r1   r2   Útest_scalar_a_and_1D_b—  s
    

z TestSolve.test_scalar_a_and_1D_bc              	   C   sˆ   t  ddddgddddgd	d
ddgddddgg¡}t  ddgddgddgddgg¡}t||ƒ}t|t  ddddgddddgg¡jƒ d S ) NçÍÌÌÌÌÌü?g
×£p=
@gffffff @g{®Gázì¿g     h€@g     prÀg     ÀWÀg     ÀwÀgHáz®Gù?g…ëQ¸…Àg333333Àg¤p=
×£ð¿gÃõ(\�Âñ¿g…ëQ¸å¿gáz®Gáâ¿gš™™™™™é?g
×£p=
#@g¸…ëQx2@g     £@g      l@g¤p=
×£è?g�Âõ(\�*Àgáz®GáÀg×£p=
×Àr5   r<   rD   r¯   r:   r8   r;   )r)   r   r   r   ÚTr¢   r1   r1   r2   Útest_simple2ž  s    


ý
ý

ÿzTestSolve.test_simple2c              	   C   sŠ   t  ddddgddddgd	d
ddgddddgg¡}t  ddgddgddgddgg¡}t||ƒ}t|t  ddgddgddgddgg¡ƒ d S ) Nyq=
×£põ¿ffffff@yìQ¸…ëÑ?\�Âõ(\	@y�Âõ(\�Àš™™™™™Ày
×£p=
ç?q=
×£pí¿y333333û¿333333,ÀyÍÌÌÌÌŒ@@      ø¿y      ø¿ÍÌÌÌÌÌ*@yÍÌÌÌÌÌ)@š™™™™™+@yR¸…ëQ
À…ëQ¸Ày�Âõ(\�þ¿®Gáz®@yìQ¸…ëÁ¿š™™™™™õ¿y…ëQ¸…û?š™™™™™õ?yHáz®G@ö(\�ÂõØ?yìQ¸…ëá¿…ëQ¸…÷?y�Âõ(\�ê¿®Gázæ¿y\�Âõ(\ÿ¿q=
×£på?yÃõ(\�B:@¤p=
×ãI@yR¸…ëQ?@ÍÌÌÌÌÌÀy33333P@33333³UÀy33333Óc@ffffff,Ày      À�Âõ(\O9@y333333Àq=
×£0>@y�Âõ(\�ò?�Âõ(\�@y{®GázÀ333333@ù      ð?      ð?y      ð¿       Ày       @      Ày      @      ð?y      À      Ày      À      @y              @)r)   r   r   r   r¢   r1   r1   r2   Útest_simple_complex2­  s     


ý
ý
ýzTestSolve.test_simple_complex2c              	   C   s²   t  ddddgddddgddd	d
gddddgg¡}t  ddgddgddgddgg¡}t  ddgddgddgddgg¡}t||dd�}t||ƒ t| ¡ j|ddd�}t||ƒ d S ) Ngq=
×£pý¿y)\�Âõ(¼?)\�Âõ(¼¿y{®Gázü¿áz®Gáò¿yHáz®G@      ø¿r   g…ëQ¸…Àyq=
×£pý¿¸…ëQ¸ž?y®Gáz®@áz®GáÊ?g=
×£p½!ÀyHáz®Gù?ÍÌÌÌÌÌì¿gÃõ(\�Âõ¿y×£p=
×@\�Âõ(\$Ày®Gáz®<@R¸…ëñCÀy)\�Âõ(#À
×£p=
@y
×£p=Ê8ÀÍÌÌÌÌÌ Ày¤p=
×£è¿ÍÌÌÌÌ0ÀyìQ¸…ë@áz®G�QÀy)\�Âõ(@ìQ¸…ë@yR¸…ë±AÀÃõ(\�2@r‡   y       À      @y      @       Ày      @       Ày      ð¿       @y      ð¿      @y      ð?      ð¿y      @      Àrµ   r­   Tr©   )r)   r   r   r   ÚconjrÒ   )rH   rI   rQ   ÚresrR   r1   r1   r2   Útest_hermitian¾  s&    


ý
ý
ý
zTestSolve.test_hermitianc                 C   st   t  dd¡ dd¡}tt  |¡d t  d¡dd�}t|ddd	gƒ tt  |¡d t  d¡d
d�}t|ddd	gƒ d S )Nr;   é
   rD   é	   r¨   r­   g      "@rÑ   r5   r°   ©r)   r   rF   r   ÚtrilÚonesr   ©rH   r¹   rR   r1   r1   r2   Útest_pos_and_symÒ  s
    zTestSolve.test_pos_and_symc                 C   sæ   t  dddddddddg	dddddddddg	dddddddddg	dddddddddg	dddddddddg	dddddddddg	dddddddddg	dddddddddg	dddddddddg	g	¡}t  d¡d d …d f }ttt||ƒ d S )Nr;   r   rÚ   )r)   r   r   rc   r    r   ©rH   rI   rQ   r1   r1   r2   Útest_singularityÙ  s    ø	zTestSolve.test_singularityc              	   C   sP   t  ddgddgg¡}t  d¡}t ¡ � t d¡ ttt||ƒ W 5 Q R X d S )Nr;   r5   gÿÿÿÿÿÿï?r:   Úerror)	r)   r   rÝ   ÚwarningsÚcatch_warningsÚsimplefilterrc   r$   r   rà   r1   r1   r2   Útest_ill_condition_warningæ  s
    


z$TestSolve.test_ill_condition_warningc                 C   s@   t  d¡}g g g}t||ƒ}t|jdkdƒ t|jdkdƒ d S )Nr:   r   zReturned array is not empty)r:   r   z#Returned empty array shape is wrong)r)   Úeyer   r   ÚsizerÏ   r¢   r1   r1   r2   Útest_empty_rhsí  s
    

zTestSolve.test_empty_rhsc                 C   s2   t  d¡}t j ddd¡}t||ƒ}t||ƒ d S )Nr:   rD   r8   )r)   rç   r
   Úrandr   r   r¢   r1   r1   r2   Útest_multiple_rhsô  s    

zTestSolve.test_multiple_rhsc                 C   sv   t  d¡ dd¡d }tt  |¡d t  d¡dd�}t|dddgƒ tt  |¡d t  d¡dd�}t|dd	d
gƒ d S )NrÚ   rD   r;   T©Ú
transposedrŸ   gš™™™™™É?Fgš™™™™™Àg333333ó¿rÛ   rÞ   r1   r1   r2   Útest_transposed_keywordú  s
    z!TestSolve.test_transposed_keywordc              	   C   s6   t  d¡ t¡}ttƒ� t||dd� W 5 Q R X d S )NrD   Trì   )r)   rç   ÚastypeÚcomplexrc   ÚNotImplementedErrorr   ©rH   rI   r1   r1   r2   Útest_transposed_notimplemented  s    
z(TestSolve.test_transposed_notimplementedc                 C   s   t ttddgdƒ d S )Nr;   r:   ©rc   rd   r   rœ   r1   r1   r2   Útest_nonsquare_a  s    zTestSolve.test_nonsquare_ac                 C   s@   t tt d¡t d¡ƒt d¡ƒ tttt d¡t d¡ƒ d S )NrD   r8   )r   r   r)   rç   rÝ   rc   rd   rœ   r1   r1   r2   Útest_size_mismatch_with_1D_b	  s    "z&TestSolve.test_size_mismatch_with_1D_bc                 C   s   t ttdddd� d S )Nr;   Zzxcvr­   rô   rœ   r1   r1   r2   Útest_assume_a_keyword  s    zTestSolve.test_assume_a_keywordz5Failure on OS X (gh-7500), crash on Windows (gh-8064)©Úreasonc                 C   sÂ  ddg}ddddg}t jt jt jt jg}t |||¡D �]„\}}}|t jt jfk}|dkr`|s`q6d |||¡}t j 	||¡ 
|¡}	t j 	|¡ 
|¡}
|r´|	dt j 	||¡  
|¡ }	|dkrÈ|	|	j }	n@|dkrà|	|	j ¡  }	n(|dk�r|	 ¡ j |	¡d	t  |¡  }	|t jt jfk�rd
nd}|dk�rF|t jt jfk�rF|d9 }t|	|
|d�}t|	 |¡|
|| || |d� |dkr6|t jt jfkr6t|	|
|dd�}t|	 |¡|
|| || |d� q6d S )NrÙ   éd   Úgenr°   r¨   rµ   z+Failed for size: {}, assume_a: {},dtype: {}rV   r¿   çê-�™—q=g�íµ ÷Æ°>)rû   r°   rµ   r­   ©ÚatolÚrtolÚerr_msgT)rª   rí   )r)   r	   r+   Ú	complex64r-   Ú	itertoolsÚproductÚformatr
   Úrandnrï   rÒ   rÖ   r   rç   r   r   )rH   ÚsizesZ	assume_asZdtypesrè   rª   ri   Z
is_complexr   rI   rQ   ÚtolrR   r1   r1   r2   Ú'test_all_type_size_routine_combinations  sV    ÿ  ÿ

ýÿýz1TestSolve.test_all_type_size_routine_combinationsN)'rl   rm   rn   r�   r¡   r£   r¦   r¬   r®   r±   r³   r´   r¶   r·   r¾   rÃ   rÄ   rÈ   rÌ   rÍ   r`   rÐ   rÓ   rÕ   rØ   rß   rá   ræ   ré   rë   rî   ró   rõ   rö   r÷   rÆ   ÚmarkÚskipr  r1   r1   r1   r2   r—   ð  sD   	
			
	
r—   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestSolveTriangularc                 C   s¦   t ddgddggƒ}ddg}t||dd�}t|ddgƒ t|j|dd�}t|ddgƒ t||ddd�}t|ddgƒ tdƒ}t||ddd�}t|d	d
gddggƒ dS )ú:
        solve_triangular on a simple 2x2 matrix.
        r;   r   r:   Tr{   Frg   ©r|   Ztransr5   ç      à¿N)r   r   r   rÒ   r   ©rH   r¹   rQ   Zsolr1   r1   r2   r£   D  s    zTestSolveTriangular.test_simplec                 C   s>  t ddgddggƒ}tdƒ}t||ddd�}t|dd	gdd
ggƒ t ddg¡}t||ddd�}t|ddgddggƒ t||ddd�}t|ddgddggƒ t||ddd�}t|ddgddggƒ t|j|ddd�}t|ddgddggƒ t|j|ddd�}t|ddgddggƒ t|j|ddd�}t|ddgddggƒ dS )zA
        solve_triangular on a simple 2x2 complex matrix
        rÔ   r   rV   r:   Tr;   r  y      à?      à¿y      Ð¿      Ð¿rg   ù      ð?       @y       €      à¿y      à?      ð?y      Ð?      è¿y      è¿      Ð¿Fr  N)r   r   r   r   r)   rZ   rÒ   r  r1   r1   r2   r¦   Y  s"    z'TestSolveTriangular.test_simple_complexc                 C   s>   t ddgddggƒ}ddg}t||ddd�}t|ddgƒ dS )r  r;   r   r:   TF)r|   r_   N)r   r   r   r  r1   r1   r2   r`   v  s    z%TestSolveTriangular.test_check_finiteN)rl   rm   rn   r£   r¦   r`   r1   r1   r1   r2   r  B  s   r  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestInvc                 C   s   t j d¡ d S r˜   rš   rœ   r1   r1   r2   r�   �  s    zTestInv.setup_methodc                 C   sl   ddgddgg}t |ƒ}tt||ƒt d¡ƒ dddgdddgddd	gg}t |ƒ}tt||ƒt d¡ƒ d S )
Nr;   r:   rD   r8   r¤   r9   r=   é   rÙ   )r   r   r   r)   rç   ©rH   rI   Úa_invr1   r1   r2   r£   „  s    zTestInv.test_simplec                 C   sh   d}t dƒD ]V}t||gƒ}t |ƒD ] }dd|||f   |||f< q$t|ƒ}tt||ƒt|ƒƒ qd S )Nr6   r8   r¿   ©rÁ   r
   r   r   r   r   ©rH   r¸   r¼   rI   r  r1   r1   r2   rÃ   Œ  s    
ÿzTestInv.test_randomc                 C   s8   ddgddgg}t |ƒ}tt||ƒddgddggƒ d S )Nr;   r:   rD   r”   r   ©r   r   r   r  r1   r1   r2   r¦   –  s    zTestInv.test_simple_complexc                 C   sx   d}t dƒD ]f}t||gƒdt||gƒ  }t |ƒD ] }dd|||f   |||f< q4t|ƒ}tt||ƒt|ƒƒ qd S )Nr6   r8   rT   r¿   r  r  r1   r1   r2   rÄ   ›  s    
ÿzTestInv.test_random_complexc                 C   s<   ddgddgg}t |dd�}tt||ƒddgddggƒ d S )Nr;   r:   rD   r8   Fr^   r   r  r  r1   r1   r2   r`   ¥  s    zTestInv.test_check_finiteN)	rl   rm   rn   r�   r£   rÃ   r¦   rÄ   r`   r1   r1   r1   r2   r  €  s   

r  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestDetc                 C   s   t j d¡ d S r˜   rš   rœ   r1   r1   r2   r�   ¬  s    zTestDet.setup_methodc                 C   s&   ddgddgg}t |ƒ}t|dƒ d S )Nr;   r:   rD   r8   ç       À©r   r   ©rH   rI   Za_detr1   r1   r2   r£   ¯  s    zTestDet.test_simplec                 C   s&   ddgddgg}t |ƒ}t|dƒ d S )Nr;   r:   rD   r”   y      À      @r  r  r1   r1   r2   r¦   ´  s    zTestDet.test_simple_complexc                 C   sB   t j}d}tdƒD ]*}t||gƒ}t|ƒ}||ƒ}t||ƒ qd S )Nr6   r8   )Úlinalgr   rÁ   r
   r   ©rH   Z	basic_detr¸   r¼   rI   Zd1Zd2r1   r1   r2   rÃ   ¹  s    zTestDet.test_randomc                 C   sV   t j}d}tdƒD ]>}t||gƒdt||gƒ  }t|ƒ}||ƒ}t||dd� qd S )Nr6   r8   rT   g‚vIhÂ%<=©rÿ   )r  r   rÁ   r
   r   r  r1   r1   r2   rÄ   Â  s    zTestDet.test_random_complexc                 C   s*   ddgddgg}t |dd�}t|dƒ d S )Nr;   r:   rD   r8   Fr^   r  r  r  r1   r1   r2   r`   Ë  s    zTestDet.test_check_finiteN)	rl   rm   rn   r�   r£   r¦   rÃ   rÄ   r`   r1   r1   r1   r2   r  «  s   		r  c                 C   s2   t | ƒ}|rt|ƒ}t|| ƒ}t||ƒ}t||ƒS )N)r   r   r   r   )rI   rQ   ÚcmplxÚatÚa1Úb1r1   r1   r2   Údirect_lstsqÑ  s    

r#  c                   @   sh   e Zd 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 )Ú	TestLstsq)ZgelsdZgelssÚgelsyNc                 C   s   t j d¡ d S r˜   rš   rœ   r1   r1   r2   r�   Þ  s    zTestLstsq.setup_methodc                 C   sÊ   t D ]À}tjddgddgg|d�}tjD ]š}dD ]�}dD ]†}| ¡ }tj||d�}| ¡ }t|||||d�}	|	d	 }
|	d
 }t|d
kd| ƒ tt	||
ƒ|dt
|jƒ dt
|jƒ d| d� q8q0q(qd S )Nr;   r6   r7   r8   r   ©TF©)©r;   r   r§   r(  )r@   ©r7   r8   ©Úlapack_driverÚoverwrite_aÚoverwrite_br   r:   ú!expected efficient rank 2, got %sé   ú
driver: %srý   )ÚREAL_DTYPESr)   r   r$  Úlapack_driversÚcopyr   r   r   r   r3   ri   )rH   ri   rI   r+  Ú	overwriteÚbtr!  rQ   r"  ÚoutrR   r½   r1   r1   r2   Útest_simple_exactá  s.    
ýÿýzTestLstsq.test_simple_exactc              
   C   s6  t D �]*}tjddgddgddgg|d�}tjdddg|d�}tjD ]ê}dD ]à}| ¡ }| ¡ }t|||||d�}|d	 }	|d
krœt || |	¡ d ¡}
n|d }
|d }t	|dkd| ƒ t
tt||	ƒ| d ƒjd	d�|
dt|jƒ dt|jƒ d| d� t
|	ddt|jƒ dt|jƒ d| d� qLqDqd S )Nr;   r:   r8   r¤   rD   r   r&  r*  r   r%  r.  ©Úaxisr/  r0  ©rÿ   rþ   r   )gã¶mÛ¶mÛ¿g›¶mÛ¶më?)r1  r)   r   r$  r2  r3  r   Úsumr   r   r   rÉ   r3   ri   )rH   ri   rI   rQ   r+  r4  r!  r"  r6  rR   Ú	residualsr½   r1   r1   r2   Útest_simple_overdetú  s8    
 
þüýzTestLstsq.test_simple_overdetc              
   C   s>  t D �]2}tjddgddgddgg|d�}tjdddg|d�}tjD ]ò}d	D ]è}| ¡ }| ¡ }t|||||d
�}|d }	|dkr¤|| |	¡ }
t |
|
 	¡  ¡}n|d }|d }t
|dkd| ƒ ttt||	ƒ| d ƒjdd�|dt|jƒ dt|jƒ d| d� t|	ddt|jƒ dt|jƒ d| d� qLqDqd S )Nr  r:   r8   r¤   rD   r   r;   r‰   r&  r*  r   r%  r.  r8  r/  r0  r:  )yîu¯{ÝëÞ¿E(BŠÐ?yÓ½îu¯{í?(YÉJV²Ò?)ÚCOMPLEX_DTYPESr)   r   r$  r2  r3  r   r   r;  rÖ   r   r   rÉ   r3   ri   )rH   ri   rI   rQ   r+  r4  r!  r"  r6  rR   r×   r<  r½   r1   r1   r2   Útest_simple_overdet_complex  s>    
 
þü ûz%TestLstsq.test_simple_overdet_complexc              
   C   sÂ   t D ]¸}tjdddgdddgg|d�}tjddg|d�}tjD ]|}dD ]r}| ¡ }| ¡ }t|||||d	�}|d
 }	|d }
t|
dkd|
 ƒ t|	ddt	|j
ƒ dt	|j
ƒ d| d� qFq>qd S )Nr;   r:   rD   r8   r¤   r9   r   r&  r*  r   r.  )gÌÆqÇq¬¿gÇqÇq¼?gdÇqÇÑ?r/  r0  r:  )r1  r)   r   r$  r2  r3  r   r   r   r3   ri   )rH   ri   rI   rQ   r+  r4  r!  r"  r6  rR   r½   r1   r1   r2   Útest_simple_underdet8  s&    
þüzTestLstsq.test_simple_underdetc                 C   sP  t D �]D}dD �]8}tjD �]*}dD �]}tjt||gƒ|d�}t|ƒD ] }dd|||f   |||f< qHtdƒD ]Ð}tjt|dgƒ|d�}| ¡ }| ¡ }	t||	|||d�}
|
d	 }|
d
 }t	||kd||f ƒ |tj
k�rtt||ƒ|dt|jƒ dt|jƒ d| d� qrtt||ƒ|dt|jƒ dt|jƒ d| d� qrq$qqqd S )N©r6   éÈ   r&  r   r6   r¿   r8   rD   r*  r   r:   ú"expected efficient rank %s, got %siô  r0  r:  éè  )r1  r$  r2  r)   Úasarrayr
   rÁ   r3  r   r   r	   r   r   r3   ri   )rH   ri   r¸   r+  r4  rI   r¼   rQ   r!  r"  r6  rR   r½   r1   r1   r2   Útest_random_exactN  sH    


ý
ÿ ü üzTestLstsq.test_random_exactc                 C   s   t  ¡ dkr@t tj¡t d¡kr@t  ¡ d }|dkr@t 	d¡ t
D �]T}dD �]H}tjD �]:}dD �].}tjt||gƒdt||gƒ  |d	�}t|ƒD ] }d
d|||f   |||f< q˜tdƒD ]Ð}tjt|dgƒ|d	�}| ¡ }	| ¡ }
t|	|
|||d�}|d }|d }t||kd||f ƒ |tjk�rbtt||ƒ|dt|	jƒ dt|	jƒ d| d� qÂtt||ƒ|dt|	jƒ dt|	jƒ d| d� qÂqdqZqNqDd S )NÚWindowsz1.24.0r   Úglibcz(segfault observed on alpine per gh-17630rA  r&  rV   r   r6   r¿   r:   rD   r*  rC  i�  r0  r:  rD  )ÚplatformÚsystemr   Úparser)   Ú__version__ÚVersionÚlibc_verrÆ   r
  r>  r$  r2  rE  r
   rÁ   r3  r   r   r  r   r   r3   ri   )rH   Zlibc_flavorri   r¸   r+  r4  rI   r¼   rQ   r!  r"  r6  rR   r½   r1   r1   r2   Útest_random_complex_exactp  sT    



ÿþ
ÿ ü üz#TestLstsq.test_random_complex_exactc                 C   s  t D �]}dD ]þ\}}tjD ]î}dD ]ä}tjt||gƒ|d�}t|ƒD ] }dd|||f   |||f< qFtdƒD ]–}tjt|dgƒ|d�}| ¡ }	| ¡ }
t|	|
|||d�}|d	 }|d
 }t	||kd||f ƒ t
|t||d	d�dt|	jƒ dt|	jƒ d| d� qpq$qqqd S )N©)r6   é   )rB  r:   r&  r   r6   r¿   r8   rD   r*  r   r:   rC  ©r  r/  r0  r:  )r1  r$  r2  r)   rE  r
   rÁ   r3  r   r   r   r#  r3   ri   ©rH   ri   r¸   Úmr+  r4  rI   r¼   rQ   r!  r"  r6  rR   r½   r1   r1   r2   Útest_random_overdet—  s8    

ý
ÿ üzTestLstsq.test_random_overdetc                 C   s&  t D �]}dD �]\}}tjD ]þ}dD ]ô}tjt||gƒdt||gƒ  |d�}t|ƒD ] }dd|||f   |||f< qXtdƒD ]–}tjt|dgƒ|d�}| ¡ }	| ¡ }
t|	|
|||d	�}|d
 }|d }t	||kd||f ƒ t
|t||dd�dt|	jƒ dt|	jƒ d| d� q‚q&qqqd S )NrP  r&  rV   r   r6   r¿   r:   rD   r*  r   rC  r;   rR  r/  r0  r:  )r>  r$  r2  r)   rE  r
   rÁ   r3  r   r   r   r#  r3   ri   rS  r1   r1   r2   Útest_random_complex_overdet²  s<    

ÿý
ÿ üz%TestLstsq.test_random_complex_overdetc              	   C   sÞ   t ƒ �}| td¡ W 5 Q R X t d¡}t tdtj	dd¡D ]œ\}}}}}| 
|¡}tj||d�}	| ¡ }
|	 ¡ }t|
|||||d�}|d }|d }t|dkd	| ƒ tt||ƒ|	d
t|jƒ d
t|jƒ d| d� q<d S )NzIinternal gelsd driver lwork query error,.*Falling back to 'gelss' driver.))r;   r6   r)  r'  r&  r   )r+  r_   r,  r-  r   r:   r.  r/  r0  r:  )r   ÚfilterÚRuntimeWarningr)   r   r  r  r1  r$  r2  rï   r3  r   r   r   r   r3   ri   )rH   Úsupr   ri   r5  r+  r4  r_   rI   rQ   r!  r"  r6  rR   r½   r1   r1   r2   r`   Ï  s:    ÿ
üÿ
 þýzTestLstsq.test_check_finitec           	   	   C   s¤   dD ]š\}}t  |¡}tt  |¡|ƒ\}}}}t|t  |d f|dd …  ¡ƒ |d rbt  d¡nt jj|dd�d }t||ƒ t|dkdƒ t|t  d¡ƒ qd S )N))©r   r:   ©r   ))r   r8   rZ  )©r8   r   )r8   )r\  )r8   r:   r;   r[  r   r8  r:   zexpected rank 0)	r)   rÝ   r   r   r   Úemptyr  r   r   )	rH   Za_shapeZb_shaperQ   rR   ZresiduesZrankÚsZresidues_should_ber1   r1   r2   Útest_zero_sizeï  s    
"ÿ
zTestLstsq.test_zero_sizeN)rl   rm   rn   r2  r�   r7  r=  r?  r@  rF  rO  rU  rV  r`   r_  r1   r1   r1   r2   r$  Ú  s   !"' r$  c                   @   sT   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S )ÚTestPinvc                 C   s   t j d¡ d S r˜   rš   rœ   r1   r1   r2   r�   ÿ  s    zTestPinv.setup_methodc                 C   sF   t dddgdddgddd	ggtd
�}t|ƒ}tt||ƒt d¡ƒ d S ©Nr;   r:   rD   r8   r¤   r9   r=   r  rÙ   r   ©r   Úfloatr   r   r   r)   rç   ©rH   rI   Úa_pinvr1   r1   r2   Útest_simple_real  s    $zTestPinv.test_simple_realc                 C   sn   t dddgdddgddd	ggtd
�dt d	ddgdddgdddggtd
�  }t|ƒ}tt||ƒt d¡ƒ d S ©Nr;   r:   rD   r8   r¤   r9   r=   r  rÙ   r   rV   rb  rd  r1   r1   r2   r¦     s    ÿÿÿzTestPinv.test_simple_complexc                 C   sZ   t dddgdddgddd	ggtd
�}t|ƒ}t dddgdddgdddggƒ}t||ƒ d S )Nr;   r:   rD   r8   r¤   r9   r=   r  rÚ   r   ç|�Çqä¿çÔ•VUUÅ¿çãcä8ŽÓ?çƒÓÇq¬¿çù°^©0Á¢<çƒÓÇq¬?çù9Žãà?çÔ•VUUÅ?ç:8ï7ŽãÈ¿©r   rc  r   r   ©rH   rI   re  rw   r1   r1   r2   Útest_simple_singular  s    $
þzTestPinv.test_simple_singularc                 C   sL   t dddgdddggtd�}t|ƒ}t dd	gd
dgddggƒ}t||ƒ d S )Nr;   r:   rD   r8   r¤   r9   r   g’Ö‹ã8î¿g#¬ÇqÜ?g#¬Çq¼¿g#¬Çq¼?gIëÅqç?g#¬ÇqÌ¿rq  rr  r1   r1   r2   Útest_simple_cols  s    þzTestPinv.test_simple_colsc                 C   sL   t ddgddgddggtd�}t|ƒ}t dd	d
gdddggƒ}t||ƒ d S )Nr;   r:   rD   r8   r¤   r9   r   g·DpTUUõ¿gÚÁQUUÕ¿g“vWUUå?g·DpTUUñ?gÚÁQUUÕ?g&í>®ªªÚ¿rq  rr  r1   r1   r2   Útest_simple_rows  s    
ÿzTestPinv.test_simple_rowsc                 C   sF   t dddgdddgddd	ggƒ}t|d
d�}tt||ƒt d¡ƒ d S )Nr;   r:   rD   r8   r¤   ru   r=   r  rÙ   Fr^   )r   r   r   r   r)   rç   rd  r1   r1   r2   r`   %  s     zTestPinv.test_check_finitec                 C   sR   dddgdddgddd	gg}t |ƒ}td
ddgdddgdddggƒ}t||ƒ d S )Nr;   r:   rD   r8   r¤   r9   r=   r  rÚ   rh  ri  rj  rk  rl  rm  rn  ro  rp  )r   r   r   rr  r1   r1   r2   Útest_native_list_argument*  s    
þz"TestPinv.test_native_list_argumentc                 C   sü   d}t tj ||¡ƒ\}}t d¡ dd¡}| ¡ }d|d< d}d}t||d	d
�}|| | | }	|| | | }
ttj	 
|	¡ddd� ttj	 
|
¡ddd� t|||d
�}|| | | }	|| | | }
ttj	 
|	¡ddd� ttj	 
|
¡ddd� d S )Né   g     €A@r=   r¤   gü©ñÒMbP?)r   r   çñhãˆµøä>gš™™™™™©?r?   ©rþ   rÿ   gü©ñÒMb@?©rþ   g‚vIhÂ%,=g;ßO�—î@ç{®Gáz„?r  )r#   r)   r
   rê   r   rF   r3  r   r   r  r   )rH   r¸   ÚqÚ_Úa_mrI   rþ   rÿ   Úa_pÚadiff1Úadiff2r1   r1   r2   Útest_atol_rtol2  s"    zTestPinv.test_atol_rtolN)rl   rm   rn   r�   rf  r¦   rs  rt  ru  r`   rv  r‚  r1   r1   r1   r2   r`  þ  s   r`  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestPinvSymmetricc                 C   s   t j d¡ d S r˜   rš   rœ   r1   r1   r2   r�   P  s    zTestPinvSymmetric.setup_methodc                 C   sV   t dddgdddgddd	ggtd
�}t ||j¡}t|ƒ}tt ||¡t d¡ƒ d S ra  )r   rc  r)   r   rÒ   r   r   rç   rd  r1   r1   r2   rf  S  s    $z"TestPinvSymmetric.test_simple_realc                 C   s‚   t dddgdddgddd	ggtd
�}t ||j¡}tj |¡\}}}|d  d9  < t || |¡}t|ƒ}t|ƒ}t	||ƒ d S )Nr;   r:   rD   r8   r¤   r9   r=   r  rÚ   r   r   r<   )
r   rc  r)   r   rÒ   r  Zsvdr   r   r   )rH   rI   rL   r^  Úvtre  Za_pinvhr1   r1   r2   Útest_nonpositiveY  s    $z"TestPinvSymmetric.test_nonpositivec                 C   s‚   t dddgdddgddd	ggtd
�dt d	ddgdddgdddggtd
�  }t || ¡ j¡}t|ƒ}tt ||¡t d¡ƒ d S rg  )	r   rc  r)   r   rÖ   rÒ   r   r   rç   rd  r1   r1   r2   r¦   c  s    ÿÿÿz%TestPinvSymmetric.test_simple_complexc                 C   sZ   t dddgdddgddd	ggtd
�}t ||j¡}t| ¡ ƒ}tt ||¡t d¡ƒ d S ra  )	r   rc  r)   r   rÒ   r   Útolistr   rç   rd  r1   r1   r2   rv  k  s    $z+TestPinvSymmetric.test_native_list_argumentc                 C   s.  d}t tj ||¡ƒ\}}t ddddddgdg|d	   ¡}|j| | }t dddddd
gd
g|d	   ¡}|j| | }d}d}t||d
d�}|| | | }	|| | | }
tt|	ƒ|dd� tt|
ƒddd� t|||d�}|| | | }	|| | | }
tt|	ƒddd� tt|
ƒddd� d S )Nrw  r8   rD   r:   r;   gvk™Çó?g’ï­£Ãä>guŒñ‚œ°>r9   r?   rx  gü‹ 1“¨?ry  r¿   r  rü   g•dyáý¥=rz  ç-Cëâ6?)	r#   r)   r
   rê   rZ   rÒ   r   r   r   )rH   r¸   r|  r}  rI   r~  rþ   rÿ   r  r€  r�  r1   r1   r2   r‚  q  s$    $$z TestPinvSymmetric.test_atol_rtolN)	rl   rm   rn   r�   rf  r…  r¦   rv  r‚  r1   r1   r1   r2   rƒ  N  s   
rƒ  Úscale)g#B’¡œÇ;r5   ç@Œµx¯DÚpinv_c                 C   sD   t  ddgddgg¡|  }t  dt  |¡ ¡}||ƒ}t||ƒ d S )Nr;   r   g»½×Ùß|Û=r5   )r)   r   rZ   r   )rˆ  rŠ  rR   rw   Zx_invr1   r1   r2   Útest_auto_rcond�  s    r‹  c                   @   sV   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
je dd�dd„ ƒZdS )ÚTestVectorNormsc                 C   sà   t jd D ]b}t jdddg|d�}tdt  |¡jjd ƒ}tt|ƒt  	d¡|d	� tt|dƒt  	d¡|d	� q
t jd
 D ]b}t jdddg|d�}tdt  |¡jjd ƒ}tt|ƒt  	d¡|d	� tt|dƒt  	d¡|d	� qxd S )NZAllFloatr;   r:   rD   r   gVçž¯Ò<r6   r>   r  ÚComplexrV   rT   y              @)
r)   Ú	typecodesr   Úmaxr.   r/   Úrealr   r   Úsqrt)rH   ri   rR   r  r1   r1   r2   Ú
test_types˜  s    zTestVectorNorms.test_typesc                 C   s    t dgtd�}tt|ƒ|ƒ d S )Nr‰  r   )r   r	   r   r   rò   r1   r1   r2   Útest_overflow¥  s    zTestVectorNorms.test_overflowc                 C   sf   t dgdgd  td�}ztt|ƒd ddd� W n. tk
r`   d}tt|ƒd d	|d
� Y nX d S )Nç     ˆÃ@r;   i'  r   rg   r{  rz  zO: Result should equal either 0.0 or 0.5 (depending on implementation of snrm2).r?   )r   )r   r	   r   r   ÚAssertionErrorr   )rH   rI   Úmsgr1   r1   r2   Útest_stable«  s    zTestVectorNorms.test_stablec                 C   s0   t tdddgdƒdƒ t tdddgdƒdƒ d S )Nr;   r   rD   r:   )r   r   rœ   r1   r1   r2   Útest_zero_norm¸  s    zTestVectorNorms.test_zero_normc                 C   s^   t  ddgddgggd d¡}tt|dd�ddggd ƒ tt|ddd�d	gd gd ƒ d S )
Nr:   r;   rD   r8   Údr8  ç5ýD+Ø@çÃ6ûf~@g      @)r)   r   r   r   rò   r1   r1   r2   Útest_axis_kwd¼  s    zTestVectorNorms.test_axis_kwdc                 C   sx   t  ddgddgggd d¡}t|ddd�}t|dd	gggd ƒ t|jd
kƒ tt|dddd�dgdgggd ƒ d S )Nr:   r;   rD   r8   r™  T)r9  Úkeepdimsrš  r›  )r:   r;   r:   ra   g      @)r)   r   r   r   r   rÏ   rà   r1   r1   r2   Útest_keepdims_kwdÁ  s
    z!TestVectorNorms.test_keepdims_kwdz64-bit BLAS requiredrø   c                 C   s<   t dd� tjdgtjd�}d|d< t|ƒ}~t|dƒ d S )NihB  )Zfree_mbl        r   r;   r<   r5   )r'   r)   r   r+   r   r   )rH   rR   r×   r1   r1   r2   Útest_large_vectorÈ  s    
z!TestVectorNorms.test_large_vectorN)rl   rm   rn   r’  r“  r—  r˜  rœ  rž  rÆ   r	  Zskipifr(   rŸ  r1   r1   r1   r2   rŒ  –  s   rŒ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestMatrixNormsc           	   
   C   sö   t j d¡ dD ]à\}}t jt jt jt jt jfD ]¾}dt j ||¡ 	|¡ }t  
|jt j¡r€|dt j ||¡   	|¡}t j}nt j}d ddddd	t jt j fD ]L}t||d
�}t jj||d
�}t  ||¡s t jj| 	|¡|d
�}t||ƒ q q0qd S )Nr™   )rX   )r;   rD   )rD   r;   )r8   r8   )r8   r¤   )r¤   r8   rÙ   y              $@Zfror;   r<   r:   éþÿÿÿ)Úord)r)   r
   r›   ZsingleÚdoubleZcsingleZcdoubleZint64r  rï   Z
issubdtyperi   ZcomplexfloatingÚinfr   r  Zallcloser   )	rH   r¸   rT  Útr¹   Zt_highÚorderÚactualZdesiredr1   r1   r2   Útest_matrix_normsÔ  s    z!TestMatrixNorms.test_matrix_normsc                 C   s  t  ddgddgggd d¡}t|t jdd�}tt  |dd¡t jd	d�}t|dd	d�}t||ƒ t||ƒ t||ƒ t|j|j  koŽ|jkn  ƒ t|ddd�}tt  |dd¡dd	d�}t|t jd	d�}t||ƒ t||ƒ t||ƒ t|j|j  k�o|jkn  ƒ d S )
Nr:   r;   rD   r8   r™  r(  )r¢  r9  r   r§   )r)   r   r   r¤  Úswapaxesr   r   rÏ   )rH   rI   rQ   Úcr™  r1   r1   r2   rœ  è  s    


"


zTestMatrixNorms.test_axis_kwdc                 C   sZ   t jddd� dddd¡}t|t jdd	d
�}t|ddd	d
�}t||ƒ t|j|jkƒ d S )Néx   r™  r   r:   rD   r8   r¤   r(  T)r¢  r9  r�  r;   r§   )r)   r   rF   r   r¤  r   r   rÏ   )rH   rI   rQ   rª  r1   r1   r2   rž  ù  s
    
z!TestMatrixNorms.test_keepdims_kwdN)rl   rm   rn   r¨  rœ  rž  r1   r1   r1   r2   r   Ò  s   r   c                   @   sT   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S )ÚTestOverwritec                 C   s   t tddgƒ d S ©N©rD   rD   rÎ   )r&   r   rœ   r1   r1   r2   Ú
test_solve  s    zTestOverwrite.test_solvec                 C   s   t tddgƒ d S r­  )r&   r   rœ   r1   r1   r2   Útest_solve_triangular  s    z#TestOverwrite.test_solve_triangularc                 C   s   t dd„ ddgƒ d S )Nc                 S   s   t d| |ƒS )Nr@   )r   )rJ   rQ   r1   r1   r2   Ú<lambda>	  ó    z1TestOverwrite.test_solve_banded.<locals>.<lambda>)r8   r9   ©r9   r%   rœ   r1   r1   r2   Útest_solve_banded  s    ÿzTestOverwrite.test_solve_bandedc                 C   s   t tddgƒ d S )N)r:   r9   r³  )r&   r   rœ   r1   r1   r2   Útest_solveh_banded  s    z TestOverwrite.test_solveh_bandedc                 C   s   t tdgƒ d S ©Nr®  )r&   r   rœ   r1   r1   r2   Útest_inv  s    zTestOverwrite.test_invc                 C   s   t tdgƒ d S r¶  )r&   r   rœ   r1   r1   r2   Útest_det  s    zTestOverwrite.test_detc                 C   s   t tddgƒ d S )N)rD   r:   rÎ   )r&   r   rœ   r1   r1   r2   Ú
test_lstsq  s    zTestOverwrite.test_lstsqc                 C   s   t tdgƒ d S r¶  )r&   r   rœ   r1   r1   r2   Ú	test_pinv  s    zTestOverwrite.test_pinvc                 C   s   t tdgƒ d S r¶  )r&   r   rœ   r1   r1   r2   Ú
test_pinvh  s    zTestOverwrite.test_pinvhN)rl   rm   rn   r¯  r°  r´  rµ  r·  r¸  r¹  rº  r»  r1   r1   r1   r2   r¬    s   r¬  c                   @   sL   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S )ÚTestSolveCirculantc                 C   sJ   t  ddddg¡}t  ddddg¡}t||ƒ}tt|ƒ|ƒ}t||ƒ d S ©Nr;   r:   rD   r¤   r<   r   )r)   r   r   r   r   r   ©rH   rª  rQ   rR   Úyr1   r1   r2   Útest_basic1!  s
    
zTestSolveCirculant.test_basic1c                 C   sJ   t  ddddg¡}t  d¡ dd¡}t||ƒ}tt|ƒ|ƒ}t||ƒ d S )Nr;   r:   éýÿÿÿr¯   rw  r8   rD   ©r)   r   r   rF   r   r   r   r   r¾  r1   r1   r2   Útest_basic2(  s
    
zTestSolveCirculant.test_basic2c                 C   sL   t  ddddg¡}t  d¡ ddd¡}t||ƒ}tt|ƒ|ƒ}t||ƒ d S )Nr;   r:   rÁ  r¯   é   r8   rD   rÂ  r¾  r1   r1   r2   Útest_basic30  s
    
zTestSolveCirculant.test_basic3c                 C   sN   t  ddddg¡}t  d¡ dd¡d }t||ƒ}tt|ƒ|ƒ}t||ƒ d S )	Nr  rÁ  r”   r¤   r  r8   r:   y              à?rÂ  r¾  r1   r1   r2   rW   8  s
    
zTestSolveCirculant.test_complexc                 C   sJ   t j d¡ t j d¡}t j d¡}t||ƒ}tt|ƒ|ƒ}t||ƒ d S )Ni1Ô  é2   )r)   r
   r›   r  r   r   r   r   r¾  r1   r1   r2   Útest_random_b_and_c@  s    
z&TestSolveCirculant.test_random_b_and_cc                 C   sd   t  ddddg¡}t  ddddg¡}t||dd�}tt|ƒ|ƒ\}}}}t||ƒ ttt||ƒ d S )Nr;   r   r:   rD   r8   r   )Zsingular)r)   r   r   r   r   r   rc   r    )rH   rª  rQ   rR   r¿  r×   Zrnkr^  r1   r1   r2   Útest_singularI  s    
z TestSolveCirculant.test_singularc                 C   s(  t  ddddggddddggg¡}t  ddddgddddgddddgg¡}t||dd	�}t|jd
ƒ t  |¡}tt|d ƒ|jƒ|d d …dd d …f< tt|d ƒ|jƒ|d d …dd d …f< t	||ƒ t||ddd�}t|jdƒ t	t  
|dd¡|ƒ tt  |dd¡|jdd�}t|jd
ƒ t	||ƒ d S )Nr<   g      @rD   g      @r;   r9   g      @r   )Úbaxis)r8   r:   rD   )rÉ  Zoutaxis)r:   rD   r8   r:   )Zcaxis)r)   r   r   r   rÏ   Ú
empty_liker   r   rÒ   r   Zmoveaxisr©  )rH   rª  rQ   rR   rw   r1   r1   r2   Útest_axis_argsR  s    "(
&&
z!TestSolveCirculant.test_axis_argsc                 C   s>   ddddg}ddddg}t ||ƒ}tt|ƒ|ƒ}t||ƒ d S r½  )r   r   r   r   r¾  r1   r1   r2   rk   k  s
    
z-TestSolveCirculant.test_native_list_argumentsN)rl   rm   rn   rÀ  rÃ  rÅ  rW   rÇ  rÈ  rË  rk   r1   r1   r1   r2   r¼    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S )ÚTestMatrix_Balancec                 C   s   t ttdƒ d S )NzSome string for fail)rc   rd   r"   rœ   r1   r1   r2   Útest_string_argv  s    z"TestMatrix_Balance.test_string_argc                 C   sD   t ttt ddgdtjgg¡ƒ t ttt ddgdtjgg¡ƒ d S )Nr;   r:   rD   )rc   rd   r"   r)   r   r¤  Únanrœ   r1   r1   r2   Útest_infnan_argy  s    ÿÿz"TestMatrix_Balance.test_infnan_argc                 C   s@   t t ddgddgg¡ƒ\}}tt t t |¡¡¡dgƒ d S )NrD  r;   r   r¤   )r"   r)   r   r   ÚdiffÚlog2rZ   )rH   r}  r¿  r1   r1   r2   Útest_scaling  s    zTestMatrix_Balance.test_scalingc                 C   sH   t  dddgdddgdddgg¡}t|ƒ\}}tt||ƒ |¡|ƒ d S )Nr;   r   r‡  r{  r”  g      Y@)r)   r   r"   r   r   r   )rH   r¹   rR   r¿  r1   r1   r2   Útest_scaling_order†  s    "z%TestMatrix_Balance.test_scaling_orderc                 C   sR   t t ddgddgg¡dd�\}\}}tt t |¡¡dgƒ t|t d¡ƒ d S )NrD  r;   r   ©Zseparater¤   r:   )r"   r)   r   r   rÐ  rÑ  r   r   )rH   r}  r¿  Úzr1   r1   r2   Útest_separate‹  s
    ÿz TestMatrix_Balance.test_separatec                 C   sj   t t d¡t t d¡¡t d¡ƒ}t|dd�\}\}}t|t |¡ƒ t|t dddddd	d
g¡ƒ d S )N)r:   r:   r®  r;   rÔ  r   r9   r¤   r8   rD   r:   )r!   r)   rÝ   rÜ   r"   r   Z	ones_liker   )rH   r¹   rR   r¿  rÕ  r1   r1   r2   Útest_permutation‘  s    ÿz#TestMatrix_Balance.test_permutationc                 C   s&  t  dddddgdddddgdddddgdddddgdddddgg¡t  ddddgddddgddddgddddgg¡t  ddddgddddgddddgddddgg¡f}|D ]t}t|ƒ\}}t|d	d
�\}\}}t  |¡}t  |jd ¡||< t|t  |¡|d d …f ƒ tt||ƒ 	|¡|ƒ q¬d S )Nr?   g�íµ ÷ÆÀ>rB   r  g      ð¿r5   g      Àg       €r;   rÔ  r   )
r)   r   r"   rÊ  r   rÏ   r   rZ   r   r   )rH   Zcasesr¹   rR   r¿  r^  ÚpÚipr1   r1   r2   Útest_perm_and_scaling˜  s0    ü


ý


ýô
z(TestMatrix_Balance.test_perm_and_scalingN)
rl   rm   rn   rÍ  rÏ  rÒ  rÓ  rÖ  r×  rÚ  r1   r1   r1   r2   rÌ  t  s   rÌ  )r   )QrI  r  rã   Únumpyr)   r   r   r   r   r   r   r   r	   Znumpy.linalgr  Znumpy.randomr
   Znumpy.testingr   r   r   r   r   r   r   rÆ   r   rc   Z
scipy._libr   Zscipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Zscipy.linalg._testutilsr&   Zscipy._lib._testutilsr'   Zscipy.linalg.blasr(   r+   r*   r1  r  r-   r,   r>  ZDTYPESr3   r4   ro   r—   r  r  r  r#  r$  r`  rƒ  r	  Zparametrizer‹  rŒ  r   r¬  r¼  rÌ  r1   r1   r1   r2   Ú<module>   sV   ($L
   =  T>+&
	  &P?</U