U
    /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jIJd!d"ejIJd#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   A/tmp/pip-unpacked-wheel-9gxwnfpp/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||
|	 qd 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||
|	 qd 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||| qd 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||| qd 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||| qd 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{Gzg     h@g     prg     Wg     wgHzG?gQg333333gp=
ףg(\gQgzGg?g
ףp=
#@gQx2@g     @g      l@gp=
ף?g(\*gz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=
ףpffffff@yQ?\(\	@y(\y
ףp=
?q=
ףpy333333333333,y̌@@      y      *@y)@+@yRQ
Qy(\Gz@yQyQ??yHzG@(\?yQ῅Q?y(\Gzy\(\q=
ףp?y(\B:@p=
I@yRQ?@y33333P@33333Uy33333c@ffffff,y      (\O9@y333333q=
ף0>@y(\?(\@y{Gz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=
ףpy)\(?)\(y{GzzGyHzG@      r   gQyq=
ףpQ?yGz@zG?g=
ףp!yHzG?g(\yףp=
@\(\$yGz<@RCy)\(#
ףp=
@y
ףp=8 yp=
ף0yQ@zGQy)\(@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g333333r   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   Z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   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   gvIh%<=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rt|||	 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   )gm۶mۿgm۶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:  )yu{޿E(B?yӽu{?(YJV?)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.  )gqqg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< qt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 qtt|||dt|	j dt|	j d| d qqdqZqNqDd 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 qq&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?:87ȿ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֋8g#q?g#qg#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   gDpTUUgQUUտgvWUU?gDpTUU?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   gMbP?)r   r   h㈵>g?r?   r   r   gMb@?r   gvIh%,=g;O@{Gz?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^  Z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  g1?ry  r   r  r   gdy=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)   Z	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  5D+@6f~@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 ||st jj|	||d
}t|| qq0q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 )Nx   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||	|| qd 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   Z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