B
    `@                 @   s8  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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l-m.Z. ejej/ej0gZ1ej2ej3ej4gZ5e1e5 Z6dd	 Z7G d
d de8Z9G dd de8Z:G dd de8Z;G dd de8Z<G dd de8Z=G dd de8Z>d/ddZ?G dd de8Z@G dd de8ZAG dd de8ZBdd ZCejDEd d!ejDEd"e e"e!fd#d$ ZFG d%d& d&e8ZGG d'd( d(e8ZHG d)d* d*e8ZIG d+d, d,e8ZJG d-d. d.e8ZKdS )0    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)solveinvdetlstsqpinvpinv2pinvhnormsolve_bandedsolveh_bandedsolve_triangularsolve_circulant	circulantLinAlgError
block_diagmatrix_balanceLinAlgWarning)assert_no_overwritec             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 r-   L/home/dcms/DCMS/lib/python3.7/site-packages/scipy/linalg/tests/test_basic.py	_eps_cast   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 )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}x4||||gD ]$}	t||f||	}
tt||
|	 qW d S )Ng      ?   r   i                  g        )r4   r5   g      $@g       @g      ,@   )r   reshaper   r   r   )selfaablub4b4by1b4by2b4by4bxr-   r-   r.   	test_real'   s,    





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}x4||||gD ]$}	t||f||	}
tt||
|	 qW d S )Ng      ?r1   r   ir2   r3   y               @r5   r6   r7   r8   g        )r4   r5   g      $@g       @y              ,@r4   r9   y              ?)r   r:   r   r   r   )r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   r-   r-   r.   test_complex?   s,    





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}x0||||gD ] }td||}tt||| qW d S )Ng        r1   r3   r4   r5   r2   r8   ir7   r   r6   g      $@g       @g      ,@r9   )r5   r5   )r   r%   diagr:   r   r   r   )	r;   r=   r<   r@   rA   rB   rC   rD   rE   r-   r-   r.   test_tridiag_realW   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}x0||||gD ] }td||}tt||| qW d S )Ng        r1   r3   y               @r5   r2   r8   ir7   r   r4   r6   g      $@g       @y              ,@r9   )r5   r5   )r   r%   rH   r:   r   r   r   )	r;   r=   r<   r@   rA   rB   rC   rD   rE   r-   r-   r.   test_tridiag_complexk   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 )Ng      ?r1   r   ir2   r3   r4   r5   r6   r7   r8   g        )r4   r5   g      $@g       @g      ,@F)check_finite)r   r   r   r   )r;   r<   r=   r>   r?   r@   rE   r-   r-   r.   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 )Ng        r1   r3   r4   r5   r2   r8   ir7   r   r6   )r4   r5   g      ?g       @g      @g      @)r5   r5   )r   r:   assert_raises
ValueErrorr   )r;   r=   r>   r?   badr-   r-   r.   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 )
Ng      ?g       @g      @)r5   r5   r   r4   g      ?g      ?f8)r   r   r   r   dtyper%   )r;   rD   rE   r-   r-   r.   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 )Ng      ?r1   r   ir2   r3   r4   r5   r6   r7   r8   g        )r4   r5   g      $@g       @g      ,@)r   r   r   )r;   r<   r=   r>   r?   rD   rE   r-   r-   r.   test_native_list_arguments   s    





z*TestSolveBanded.test_native_list_argumentsN)__name__
__module____qualname__rF   rG   rI   rJ   rL   rP   rS   rT   r-   r-   r-   r.   r0   %   s   r0   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 )Ng        g       @ig      ?g      @)r   r   r   )r;   r=   rD   rE   r-   r-   r.   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 )Ng        g       @ig      ?g      @g      @)r   r   r   )r;   r=   rD   rE   expectedr-   r-   r.   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 )Ng        g       @ig      ?g      @r6   r5   )r   r:   r   r   )r;   r=   rD   rE   r-   r-   r.   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 )Ng      @g      ?ig       @g        T)lower)r   r   r   )r;   r=   rD   rE   r-   r-   r.   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 )	Ng      @g      ?ig       @g        g      @T)r]   )r   r   r   )r;   r=   rD   rE   rZ   r-   r-   r.   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 )Ng        g       @ig      ?g      @)rR   )r   r	   r   r   )r;   r=   rD   rE   r-   r-   r.   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 )Ng        g       @ig      ?g      @)rR   g      @)r   r	   r   r   )r;   r=   rD   rE   rZ   r-   r-   r.   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 )Ng        g       @iy             g      @y       @      y      @      y      @      ?y       @      ?g      ?)r   r   r   )r;   r=   rD   rE   r-   r-   r.   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 )Ng        g       @iy             g      @y       @      y       @      @y      @      y            y      @      ?y      @       @y       @      ?y              ?g      ?)r   r   r   )r;   r=   rD   rE   rZ   r-   r-   r.   test_02_complex7  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 )Nig      ?g      @g        )r   r   r   )r;   r=   rD   rE   r-   r-   r.   test_tridiag_01_upperL  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 )Nig      ?g      @g       @g        )r   r   r   )r;   r=   rD   rE   rZ   r-   r-   r.   test_tridiag_02_upperW  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 )Nig      ?g      @r6   r5   g        )r   r:   r   r   )r;   r=   rD   rE   r-   r-   r.   test_tridiag_03_upperh  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 )Ng      @g      ?iT)r]   g        )r   r   r   )r;   r=   rD   rE   r-   r-   r.   test_tridiag_01_lowers  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 )Ng      @g      ?ig       @T)r]   g        )r   r   r   )r;   r=   rD   rE   rZ   r-   r-   r.   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 )Nig      ?g      @)rR   g        )r   r	   r   r   )r;   r=   rD   rE   r-   r-   r.   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 )Nig      ?g      @)rR   g       @g        )r   r	   r   r   )r;   r=   rD   rE   rZ   r-   r-   r.   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 )Niy             g      @y      @      y      @      ?g        g      ?)r   r   r   )r;   r=   rD   rE   r-   r-   r.   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 )Niy             g      @y              @y      @      y            y      @      ?g        y              ?g      ?)r   r   r   )r;   r=   rD   rE   rZ   r-   r-   r.   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 )Nig      ?g      @F)rK   g        )r   r   r   )r;   r=   rD   rE   r-   r-   r.   rL     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 )Nig      ?g      @g       @)r   rM   rN   r   )r;   r=   rD   r-   r-   r.   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 )Nr5   r4   r9   g      ?g       @g      @rQ   )r   r   r   rR   r%   )r;   rE   r-   r-   r.   rS     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 )Ng        g       @ig      ?g      @)r   r   )r;   r=   rD   rE   r-   r-   r.   rT     s    


z+TestSolveHBanded.test_native_list_argumentsN)rU   rV   rW   rY   r[   r\   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rL   rm   rS   rT   r-   r-   r-   r.   rX      s,   	rX   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ejjd5d6d7d8 Z d9S ):	TestSolvec             C   s   t jd d S )Ni  )r%   r
   seed)r;   r-   r-   r.   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 )Nr5   g      ?r   y                g333333?)r   r   r   )r;   r<   Zx0rD   r-   r-   r.   test_20Feb04_bug  s    
zTestSolve.test_20Feb04_bugc             C   s^   ddgddgg}xHddgddggddgddgddggfD ]}t ||}tt||| q8W d S )Nr5   r1   ir2   r   r4   )r   r   r   )r;   r<   rD   rE   r-   r-   r.   test_simple  s
    
zTestSolve.test_simplec             C   sd   ddgddgg}xNdD ]F}x@ddgddggddgfD ]$}t ||d|d}tt||| q4W qW d S )Nr4   r9      )r   r5   r5   r   )sym_posr]   )r   r   r   )r;   r<   r]   rD   rE   r-   r-   r.   test_simple_sym  s
    
zTestSolve.test_simple_symc             C   sT   ddgddgg}x>ddgddgddgggD ]"}t ||dd}tt||| q*W d S )Nrs   r4   r2   y              ?r   r5   )rt   )r   r   r   )r;   r<   rD   rE   r-   r-   r.   test_simple_sym_complex  s    z!TestSolve.test_simple_sym_complexc             C   sh   t ddgddggd}xLddgddgddggdd	gt ddgdgD ]}t||}tt||| qBW d S )
Nrs   r4   y               @r2   Dy              ?r   r5   y                )r   r   r   r   )r;   r<   rD   rE   r-   r-   r.   test_simple_complex  s    
zTestSolve.test_simple_complexc             C   s   d}t ||gt ||gd  }t||fd}t|}t|t|d  }x8td|D ]*}|d d |f }t|||d d |f< qVW t|| d S )Nr4   y              ?rw   y                r   )r
   r   r   r   r   r   r   )r;   nAXZAinvRirr-   r-   r.   test_nils_20Feb04  s    zTestSolve.test_nils_20Feb04c             C   sz   d}t ||g}x,t|D ] }dd|||f   |||f< qW x6tdD ]*}t |dg}t||}tt||| qHW d S )Nr1   g?r2   r9   )r
   ranger   r   r   )r;   ry   r<   r}   rD   rE   r-   r-   r.   test_random'  s     
zTestSolve.test_randomc             C   s   d}t ||gdt ||g  }x,t|D ] }dd|||f   |||f< q*W x6tdD ]*}t |dg}t||}tt||| qXW d S )Nr1   y              ?g?r4   r9   )r
   r   r   r   r   )r;   ry   r<   r}   rD   rE   r-   r-   r.   test_random_complex2  s     
zTestSolve.test_random_complexc             C   s   d}t ||g}xVt|D ]J}tdd|||f   |||f< x$t|D ]}|||f |||f< qHW qW x8tdD ],}t |g}t||dd}tt||| qrW d S )Nr1   g?r2   r5   )rt   )r
   r   absr   r   r   )r;   ry   r<   r}   jrD   rE   r-   r-   r.   test_random_sym<  s     
zTestSolve.test_random_symc             C   s   d}t ||g}|dt ||g  }xZt|D ]N}tdd|||f   |||f< x(t|D ]}t|||f |||f< q\W q.W t |gdt |g  }x.tdD ]"}t||dd}tt||| qW d S )Nr1   y              ?g?y               @r4   r5   )rt   )r
   r   r   r   r   r   r   )r;   ry   r<   r}   r   rD   rE   r-   r-   r.   test_random_sym_complexH  s      z!TestSolve.test_random_sym_complexc             C   sb   ddgddgg}xLddgddggddgddgddggfD ]"}t ||dd}tt||| q8W d S )	Nr5   r1   ir2   r   r4   F)rK   )r   r   r   )r;   r<   rD   rE   r-   r-   r.   rL   U  s
    zTestSolve.test_check_finitec             C   s:   d}dddg}t ||}t| | t|jdkd d S )Nr5   r4   r9   )r9   z'Scalar_a_1D_b test returned wrong shape)r   r   Zravelr   shape)r;   r<   rD   rE   r-   r-   r.   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 ) Ng?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=
g      ?r6   r9   r4   r2   r5   )r%   r   r   r   T)r;   r<   rD   rE   r-   r-   r.   test_simple2c  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            @y              @)r%   r   r   r   )r;   r<   rD   rE   r-   r-   r.   test_simple_complex2r  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@y       @      ?y             @y      @       y      @       y             @y            @y      ?      y      @      her)assume_aT)r   r]   )r%   r   r   r   conjr   )r;   r<   rD   resrE   r-   r-   r.   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 )Nr5   
   r9   	   pos)r   g      "@g?g      ?sym)r%   r   r:   r   trilonesr   )r;   rz   rE   r-   r-   r.   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 )Nr5   r   r   )r%   r   r   rM   r    r   )r;   r<   rD   r-   r-   r.   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 d Q R X d S )Nr5   g      ?g?r4   error)	r%   r   r   warningscatch_warningssimplefilterrM   r#   r   )r;   r<   rD   r-   r-   r.   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 )Nr4   r   zReturned array is not empty)r4   r   z#Returned empty array shape is wrong)r%   eyer   r   sizer   )r;   r<   rD   rE   r-   r-   r.   test_empty_rhs  s
    

zTestSolve.test_empty_rhsc             C   s2   t d}t jddd}t||}t|| d S )Nr4   r9   r2   )r%   r   r
   Zrandr   r   )r;   r<   rD   rE   r-   r-   r.   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   r9   r5   T)
transposedg333333?g?Fgg333333)r%   r   r:   r   r   r   r   )r;   rz   rE   r-   r-   r.   test_transposed_keyword  s
    z!TestSolve.test_transposed_keywordc          	   C   s6   t dt}tt t||dd W d Q R X d S )Nr9   T)r   )r%   r   astypecomplexrM   NotImplementedErrorr   )r;   r<   r-   r-   r.   test_transposed_notimplemented  s    
z(TestSolve.test_transposed_notimplementedc             C   s   t ttddgd d S )Nr5   r4   )rM   rN   r   )r;   r-   r-   r.   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 )Nr9   r2   )r   r   r%   r   r   rM   rN   )r;   r-   r-   r.   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 )Nr5   Zzxcv)r   )rM   rN   r   )r;   r-   r-   r.   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}xt|||D ]\}}}|t jt jfk}|dkrd|sdq:d|||}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rJ|t jt jfkrJ|d9 }t|	|
|d}t|	||
|| || |d |dkr:|t jt jfkr:t|	|
|dd}t|	||
|| || |d q:W d S )Nr   d   genr   r   r   z+Failed for size: {}, assume_a: {},dtype: {}y              ?g?g-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   )r;   sizesZ	assume_asZdtypesr   r   rR   Z
is_complexr   r<   rD   tolrE   r-   r-   r.   'test_all_type_size_routine_combinations  sH    



z1TestSolve.test_all_type_size_routine_combinationsN)!rU   rV   rW   rp   rq   rr   ru   rv   rx   r   r   r   r   r   rL   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmarkskipr   r-   r-   r-   r.   rn     s6   	
rn   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 )z:
        solve_triangular on a simple 2x2 matrix.
        r5   r   r4   T)r]   Fg      ?)r]   transg      ?g      N)r   r   r   r   r   )r;   rz   rD   solr-   r-   r.   rr   	  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
        y      ?      ?r   y              ?r4   Tr5   )r]   r   y      ?      y      п      пg      ?y      ?       @y             y      ?      ?y      ?      y            пFg      N)r   r   r   r   r%   rH   r   )r;   rz   rD   r   r-   r-   r.   rx     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 )z:
        solve_triangular on a simple 2x2 matrix.
        r5   r   r4   TF)r]   rK   N)r   r   r   )r;   rz   rD   r   r-   r-   r.   rL   ;  s    z%TestSolveTriangular.test_check_finiteN)rU   rV   rW   rr   rx   rL   r-   r-   r-   r.   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 )TestInvc             C   s   t jd d S )Ni  )r%   r
   ro   )r;   r-   r-   r.   rp   F  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 )
Nr5   r4   r9   r2   rs   r3   r7      r   )r   r   r   r%   r   )r;   r<   a_invr-   r-   r.   rr   I  s    zTestInv.test_simplec             C   sp   d}xft dD ]Z}t||g}x,t |D ] }dd|||f   |||f< q(W t|}tt||t| qW d S )Nr1   r2   g?)r   r
   r   r   r   r   )r;   ry   r}   r<   r   r-   r-   r.   r   Q  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 )Nr5   r4   r9   y              @r   )r   r   r   )r;   r<   r   r-   r-   r.   rx   [  s    zTestInv.test_simple_complexc             C   s   d}xvt dD ]j}t||gdt||g  }x,t |D ] }dd|||f   |||f< q8W t|}tt||t| qW d S )Nr1   r2   y               @g?)r   r
   r   r   r   r   )r;   ry   r}   r<   r   r-   r-   r.   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 )Nr5   r4   r9   r2   F)rK   r   )r   r   r   )r;   r<   r   r-   r-   r.   rL   j  s    zTestInv.test_check_finiteN)	rU   rV   rW   rp   rr   r   rx   r   rL   r-   r-   r-   r.   r   E  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 )Ni  )r%   r
   ro   )r;   r-   r-   r.   rp   q  s    zTestDet.setup_methodc             C   s&   ddgddgg}t |}t|d d S )Nr5   r4   r9   r2   g       )r   r   )r;   r<   a_detr-   r-   r.   rr   t  s    zTestDet.test_simplec             C   s&   ddgddgg}t |}t|d d S )Nr5   r4   r9   y              @y            @)r   r   )r;   r<   r   r-   r-   r.   rx   y  s    zTestDet.test_simple_complexc             C   sF   t j}d}x6tdD ]*}t||g}t|}||}t|| qW d S )Nr1   r2   )linalgr   r   r
   r   )r;   	basic_detry   r}   r<   d1d2r-   r-   r.   r   ~  s    zTestDet.test_randomc             C   sZ   t j}d}xJtdD ]>}t||gdt||g  }t|}||}t||dd qW d S )Nr1   r2   y               @gvIh%<=)r   )r   r   r   r
   r   )r;   r   ry   r}   r<   r   r   r-   r-   r.   r     s    zTestDet.test_random_complexc             C   s*   ddgddgg}t |dd}t|d d S )Nr5   r4   r9   r2   F)rK   g       )r   r   )r;   r<   r   r-   r-   r.   rL     s    zTestDet.test_check_finiteN)	rU   rV   rW   rp   rr   rx   r   r   rL   r-   r-   r-   r.   r   p  s   		r   c             C   s2   t | }|rt|}t|| }t||}t||S )N)r   r   r   r   )r<   rD   cmplxata1b1r-   r-   r.   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 )Ni  )r%   r
   ro   )r;   r-   r-   r.   rp     s    zTestLstsq.setup_methodc             C   s   xt D ]}tjddgddgg|d}xtjD ]}xdD ]}xdD ]}| }tj||d}| }t|||||d}	|	d	 }
|	d
 }t|d
kd|  tt	||
|dt
|j dt
|j d| d q@W q6W q,W qW d S )Nr5   r1   ir2   )rR   )TF)))r5   r   )r   r5   )r5   r   ))r4   r5   )ir2   )lapack_driveroverwrite_aoverwrite_br   r4   z!expected efficient rank 2, got %s   z
driver: %s)r   r   r   )REAL_DTYPESr%   r   r   lapack_driverscopyr   r   r   r   r/   rR   )r;   rR   r<   r   	overwritebtr   rD   r   outrE   r~   r-   r-   r.   test_simple_exact  s(    



zTestLstsq.test_simple_exactc          
   C   sD  x<t D ]2}tjddgddgddgg|d}tjdddg|d}xtjD ]}xd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 qTW qJW qW d S )Nr5   r4   r2   rs   r9   )rR   )TF)r   r   r   r   r   z!expected efficient rank 2, got %s)axisr   z
driver: %s)r   r   r   )gm۶mۿgm۶m?)r   r%   r   r   r   r   r   sumr   r   r   r   r/   rR   )r;   rR   r<   rD   r   r   r   r   r   rE   	residualsr~   r-   r-   r.   test_simple_overdet  s2     
zTestLstsq.test_simple_overdetc          
   C   sN  xFt D ]<}tjddgddgddgg|d}tjdddg|d}x tjD ]}xd	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 qVW qLW qW d S )Ny      ?       @r4   r2   rs   r9   )rR   r5   y       @      @)TF)r   r   r   r   r   z!expected efficient rank 2, got %s)r   r   z
driver: %s)r   r   r   )yu{޿E(B?yӽu{?(YJV?)COMPLEX_DTYPESr%   r   r   r   r   r   r   r   r   r   r   r   r/   rR   )r;   rR   r<   rD   r   r   r   r   r   rE   r   r   r~   r-   r-   r.   test_simple_overdet_complex  s6     
z%TestLstsq.test_simple_overdet_complexc          
   C   s   xt D ]}tjdddgdddgg|d}tjddg|d}xtjD ]}xzdD ]r}| }| }t|||||d	}|d
 }	|d }
t|
dkd|
  t|	ddt	|j
 dt	|j
 d| d qLW qBW qW d S )Nr5   r4   r9   r2   rs   r3   )rR   )TF)r   r   r   r   z!expected efficient rank 2, got %s)gqqgqq?gdq?r   z
driver: %s)r   r   r   )r   r%   r   r   r   r   r   r   r   r/   rR   )r;   rR   r<   rD   r   r   r   r   r   rE   r~   r-   r-   r.   test_simple_underdet  s"    

zTestLstsq.test_simple_underdetc             C   sp  xht D ]^}xVdD ]L}xDtjD ]8}x0dD ]&}tjt||g|d}x,t|D ] }dd|||f   |||f< qZW xt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 qtt|||dt|j dt|j d| d qW q4W q&W qW qW d S )N)r1      )TF)rR   r1   g?r2   r9   )r   r   r   r   r4   z"expected efficient rank %s, got %si  z
driver: %s)r   r   r   i  )r   r   r   r%   asarrayr
   r   r   r   r   r	   r   r   r/   rR   )r;   rR   ry   r   r   r<   r}   rD   r   r   r   rE   r~   r-   r-   r.   test_random_exact  s<     


zTestLstsq.test_random_exactc             C   s  xxt D ]n}xfdD ]\}xTtjD ]H}x@dD ]6}tjt||gdt||g  |d}x,t|D ] }dd|||f   |||f< qjW xtdD ]}tjt|dg|d}| }| }	t||	|||d	}
|
d
 }|
d }t	||kd||f  |tj
kr8tt|||dt|j dt|j d| d qtt|||dt|j dt|j d| d qW q4W q&W qW qW d S )N)r1   r   )TFy              ?)rR   r1   g?r4   r9   )r   r   r   r   z"expected efficient rank %s, got %si  z
driver: %s)r   r   r   i  )r   r   r   r%   r   r
   r   r   r   r   r   r   r   r/   rR   )r;   rR   ry   r   r   r<   r}   rD   r   r   r   rE   r~   r-   r-   r.   test_random_complex_exact5  s<     


z#TestLstsq.test_random_complex_exactc             C   s4  x,t D ]"}xdD ]\}}xtjD ]}xdD ]}tjt||g|d}x,t|D ] }dd|||f   |||f< qXW xt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 qW q4W q*W qW qW d S )N))r1      )r   r4   )TF)rR   r1   g?r2   r9   )r   r   r   r   r4   z"expected efficient rank %s, got %s)r   r   z
driver: %s)r   r   r   )r   r   r   r%   r   r
   r   r   r   r   r   r   r/   rR   )r;   rR   ry   mr   r   r<   r}   rD   r   r   r   rE   r~   r-   r-   r.   test_random_overdetW  s0    
 
zTestLstsq.test_random_overdetc             C   sH  x@t D ]6}x.dD ]$\}}xtjD ]}xdD ]}tjt||gdt||g  |d}x,t|D ] }dd|||f   |||f< qlW xt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 qW q8W q*W qW qW d S )N))r1   r   )r   r4   )TFy              ?)rR   r1   g?r4   r9   )r   r   r   r   z"expected efficient rank %s, got %sr5   )r   r   z
driver: %s)r   r   r   )r   r   r   r%   r   r
   r   r   r   r   r   r   r/   rR   )r;   rR   ry   r   r   r   r<   r}   rD   r   r   r   rE   r~   r-   r-   r.   test_random_complex_overdetr  s2     
z%TestLstsq.test_random_complex_overdetc          	   C   s   t  }|td W d Q R X td}xt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>W d S )NzIinternal gelsd driver lwork query error,.*Falling back to 'gelss' driver.))r5   r1   )ir2   )))r5   r   )r   r5   )r5   r   ))r4   r5   )ir2   )TF)rR   )r   rK   r   r   r   r4   z!expected efficient rank 2, got %sr   z
driver: %s)r   r   r   )r   filterRuntimeWarningr%   r   r   r   r   r   r   r   r   r   r   r   r   r/   rR   )r;   supr   rR   r   r   r   rK   r<   rD   r   r   r   rE   r~   r-   r-   r.   rL     s0    

zTestLstsq.test_check_finitec       	   	   C   s   xdD ]\}}t |}tt ||\}}}}t|t |d f|dd    |d rdt dnt jj|ddd }t|| t|dkd t|t d qW d S )N)))r   r4   )r   ))r   r2   )r   r4   ))r2   r   )r2   ))r2   r   )r2   r4   r5   )r   r   )r   r4   zexpected rank 0)	r%   r   r   r   r   emptyr   r   r   )	r;   Za_shapeZb_shaperD   rE   ZresiduesZranksZresidues_should_ber-   r-   r.   test_zero_size  s    
"
zTestLstsq.test_zero_sizeN)rU   rV   rW   r   rp   r   r   r   r   r   r   r   r   rL   r   r-   r-   r-   r.   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 )TestPinvc             C   sd   t dddgdddgddd	ggtd
}t|}tt||td t|}tt||td d S )Nr5   r4   r9   r2   rs   r3   r7   r   r   )rR   )r   floatr   r   r   r%   r   r   )r;   r<   a_pinvr-   r-   r.   test_simple_real  s
    $zTestPinv.test_simple_realc             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|}tt||td t|}tt||td d S )Nr5   r4   r9   r2   rs   r3   r7   r   r   )rR   y              ?)r   r   r   r   r   r%   r   r   )r;   r<   r   r-   r-   r.   rx     s    $zTestPinv.test_simple_complexc             C   sB   t dddgdddgddd	ggtd
}t|}t|}t|| d S )Nr5   r4   r9   r2   rs   r3   r7   r   r   )rR   )r   r   r   r   r   )r;   r<   r   a_pinv2r-   r-   r.   test_simple_singular  s    $zTestPinv.test_simple_singularc             C   s:   t dddgdddggtd}t|}t|}t|| d S )Nr5   r4   r9   r2   rs   r3   )rR   )r   r   r   r   r   )r;   r<   r   r   r-   r-   r.   test_simple_cols  s    zTestPinv.test_simple_colsc             C   s<   t ddgddgddggtd}t|}t|}t|| d S )Nr5   r4   r9   r2   rs   r3   )rR   )r   r   r   r   r   )r;   r<   r   r   r-   r-   r.   test_simple_rows  s    zTestPinv.test_simple_rowsc             C   sh   t dddgdddgddd	gg}t|d
d}tt||td t|d
d}tt||td d S )Nr5   r4   r9   r2   rs   g      @r7   r   r   F)rK   )r   r   r   r   r%   r   r   )r;   r<   r   r-   r-   r.   rL     s
     zTestPinv.test_check_finitec             C   s:   dddgdddgddd	gg}t |}t|}t|| d S )
Nr5   r4   r9   r2   rs   r3   r7   r   r   )r   r   r   )r;   r<   r   r   r-   r-   r.   test_native_list_argument  s    z"TestPinv.test_native_list_argumentN)
rU   rV   rW   r   rx   r   r   r   rL   r   r-   r-   r-   r.   r     s   	r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestPinvSymmetricc             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 )Nr5   r4   r9   r2   rs   r3   r7   r   r   )rR   )r   r   r%   r   r   r   r   r   )r;   r<   r   r-   r-   r.   r     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 )Nr5   r4   r9   r2   rs   r3   r7   r   r   )rR   r   r6   )
r   r   r%   r   r   r   Zsvdr   r   r   )r;   r<   r?   r   Zvtr   Za_pinvhr-   r-   r.   test_nonpositive  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 )Nr5   r4   r9   r2   rs   r3   r7   r   r   )rR   y              ?)	r   r   r%   r   r   r   r   r   r   )r;   r<   r   r-   r-   r.   rx     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 )Nr5   r4   r9   r2   rs   r3   r7   r   r   )rR   )	r   r   r%   r   r   r   tolistr   r   )r;   r<   r   r-   r-   r.   r   
  s    $z+TestPinvSymmetric.test_native_list_argumentN)rU   rV   rW   r   r   rx   r   r-   r-   r-   r.   r     s   
r   c              C   s   t d} t jdgd dg ddt jdgdgd  dd }| | }dt | |t ||   }t|t| }}d}t|| | | || | | d	|d
 t|| | | || | | d	|d
 d S )Nr3   r6   r2   )kr5   r   gdy=g        )r   r   )r%   r   rH   Zkronr   r   r   )ZI_6ZTsr   rz   ZApZAp2r   r-   r-   r.   test_pinv_pinv2_comparison  s    
4(r   scale)g#B;g      ?g@xDpinv_c             C   sD   t ddgddgg|  }t dt | }||}t|| d S )Nr5   r   g|=g      ?)r%   r   rH   r   )r   r   rE   rZ   Zx_invr-   r-   r.   test_auto_rcond  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 )TestVectorNormsc             C   s   xpt 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W xpt 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~W d S )NZAllFloatr5   r4   r9   )rR   gV瞯<r1   r8   )r   Complexy              ?y               @y              @)
r%   Z	typecodesr   maxr*   r+   realr   r   sqrt)r;   rR   rE   r   r-   r-   r.   
test_types)  s    zTestVectorNorms.test_typesc             C   s    t dgtd}tt|| d S )Ng@xD)rR   )r   r	   r   r   )r;   r<   r-   r-   r.   test_overflow6  s    zTestVectorNorms.test_overflowc             C   sf   t dgdgd  td}ytt|d ddd W n. tk
r`   d}tt|d d	|d
 Y nX d S )Ng     @r5   i'  )rR   g      ?g{Gz?)r   zO: Result should equal either 0.0 or 0.5 (depending on implementation of snrm2).g        )r   )r   r	   r   r   AssertionErrorr   )r;   r<   msgr-   r-   r.   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 )Nr5   r   r9   r4   )r   r   )r;   r-   r-   r.   test_zero_normI  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 )
Nr4   r5   r9   r2   d)r   g5D+@g6f~@g      @)r%   r   r   r   )r;   r<   r-   r-   r.   test_axis_kwdM  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 )Nr4   r5   r9   r2   r  T)r   keepdimsg5D+@g6f~@)r4   r5   r4   g      @g      @)r%   r   r   r   r   r   )r;   r<   rD   r-   r-   r.   test_keepdims_kwdR  s
    z!TestVectorNorms.test_keepdims_kwdN)	rU   rV   rW   r  r  r  r  r  r  r-   r-   r-   r.   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 xdD ]\}}xt 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}xjd ddddd	t jt j fD ]L}t||d
}t jj||d
}t ||st jj|	||d
}t|| qW q4W qW d S )Ni  ))r5   r5   )r5   r9   )r9   r5   )r2   r2   )r2   rs   )rs   r2   r   y              $@Zfror5   r6   r4   r   )ord)r%   r
   ro   ZsingledoubleZcsingleZcdoubleint64r   r   Z
issubdtyperR   Zcomplexfloatinginfr   r   Zallcloser   )	r;   ry   r   trz   Zt_highorderactualZdesiredr-   r-   r.   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 )
Nr4   r5   r9   r2   r  )r5   r   )r  r   r   )r   r5   )r%   r   r   r  swapaxesr   r   r   )r;   r<   rD   cr  r-   r-   r.   r  p  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  )rR   r4   r9   r2   rs   )r5   r   T)r  r   r  r5   )r   r5   )r%   r   r:   r   r  r   r   r   )r;   r<   rD   r  r-   r-   r.   r    s
    
z!TestMatrixNorms.test_keepdims_kwdN)rU   rV   rW   r  r  r  r-   r-   r-   r.   r  Z  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d Z	dd Z
dd Zdd ZdS )TestOverwritec             C   s   t tddg d S )N)r9   r9   )r9   )r$   r   )r;   r-   r-   r.   
test_solve  s    zTestOverwrite.test_solvec             C   s   t tddg d S )N)r9   r9   )r9   )r$   r   )r;   r-   r-   r.   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 )N)r4   r5   )r   )r=   rD   r-   r-   r.   <lambda>      z1TestOverwrite.test_solve_banded.<locals>.<lambda>)r2   r3   )r3   )r$   )r;   r-   r-   r.   test_solve_banded  s    zTestOverwrite.test_solve_bandedc             C   s   t tddg d S )N)r4   r3   )r3   )r$   r   )r;   r-   r-   r.   test_solveh_banded  s    z TestOverwrite.test_solveh_bandedc             C   s   t tdg d S )N)r9   r9   )r$   r   )r;   r-   r-   r.   test_inv  s    zTestOverwrite.test_invc             C   s   t tdg d S )N)r9   r9   )r$   r   )r;   r-   r-   r.   test_det  s    zTestOverwrite.test_detc             C   s   t tddg d S )N)r9   r4   )r9   )r$   r   )r;   r-   r-   r.   
test_lstsq  s    zTestOverwrite.test_lstsqc             C   s   t tdg d S )N)r9   r9   )r$   r   )r;   r-   r-   r.   	test_pinv  s    zTestOverwrite.test_pinvc             C   s   t tdg d S )N)r9   r9   )r$   r   )r;   r-   r-   r.   
test_pinv2  s    zTestOverwrite.test_pinv2c             C   s   t tdg d S )N)r9   r9   )r$   r   )r;   r-   r-   r.   
test_pinvh  s    zTestOverwrite.test_pinvhN)rU   rV   rW   r  r  r"  r#  r$  r%  r&  r'  r(  r)  r-   r-   r-   r.   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 )Nr5   r4   r9   rs   r6   r   )r%   r   r   r   r   r   )r;   r  rD   rE   yr-   r-   r.   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 )Nr5   r4   r      r2   r9   )r%   r   r   r:   r   r   r   r   )r;   r  rD   rE   r+  r-   r-   r.   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 )Nr5   r4   r-  r      r2   r9   )r%   r   r   r:   r   r   r   r   )r;   r  rD   rE   r+  r-   r-   r.   test_basic3  s
    
zTestSolveCirculant.test_basic3c             C   sN   t ddddg}t dddd }t||}tt||}t|| d S )	Ny      ?       @r-  y              @rs   r   r2   r4   y              ?)r%   r   r   r:   r   r   r   r   )r;   r  rD   rE   r+  r-   r-   r.   rG     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
   ro   r   r   r   r   r   )r;   r  rD   rE   r+  r-   r-   r.   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 )Nr5   r   r4   r9   r2   r   )Zsingular)r%   r   r   r   r   r   rM   r    )r;   r  rD   rE   r+  r   Zrnkr   r-   r-   r.   test_singular  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| tt |dd|jdd}t|jd
 t	|| d S )Nr6   g      @r9   g      @r5   r3   g      @r   )baxis)r2   r4   r9   )r5  Zoutaxis)r4   r9   r2   r4   )Zcaxis)r%   r   r   r   r   
empty_liker   r   r   r   Zrollaxisr  )r;   r  rD   rE   rZ   r-   r-   r.   test_axis_args  s    "(
&&
z!TestSolveCirculant.test_axis_argsc             C   s>   ddddg}ddddg}t ||}tt||}t|| d S )Nr5   r4   r9   rs   r6   r   )r   r   r   r   )r;   r  rD   rE   r+  r-   r-   r.   rT     s
    
z-TestSolveCirculant.test_native_list_argumentsN)rU   rV   rW   r,  r/  r1  rG   r3  r4  r7  rT   r-   r-   r-   r.   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)rM   rN   r"   )r;   r-   r-   r.   test_string_arg  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 )Nr5   r4   r9   )rM   rN   r"   r%   r   r  nan)r;   r-   r-   r.   test_infnan_arg  s    z"TestMatrix_Balance.test_infnan_argc          	   C   sB   t tddgddgg\}}ttttt|d d S )Ni  r5   r   rs   )r"   r%   r   r   intdifflog2rH   )r;   _r+  r-   r-   r.   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 )Nr5   r   g-C6?g{Gz?g     @g      Y@)r%   r   r"   r   r   r   )r;   rz   rE   r+  r-   r-   r.   test_scaling_order  s    "z%TestMatrix_Balance.test_scaling_orderc             C   sT   t tddgddggdd\}\}}tttt|d t|td d S )Ni  r5   r   )separaters   r4   )	r"   r%   r   r   r<  r=  r>  r   r   )r;   r?  r+  zr-   r-   r.   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)r4   r4   )r9   r9   r5   )rB  r   r3   rs   r2   r9   r4   )r!   r%   r   r   r"   r   Z	ones_liker   )r;   rz   rE   r+  rC  r-   r-   r.   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}x||D ]t}t|\}}t|d	d
\}\}}t |}t |jd ||< t|t ||d d f  tt||	|| qW d S )Ng        g>g       @g      g      g      ?g      g       r5   )rB  r   )
r%   r   r"   r6  r   r   r   rH   r   r   )r;   Zcasesrz   rE   r+  r   pipr-   r-   r.   test_perm_and_scaling#  s(    





z(TestMatrix_Balance.test_perm_and_scalingN)
rU   rV   rW   r9  r;  r@  rA  rD  rE  rH  r-   r-   r-   r.   r8    s   r8  )r   )Lr   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   rM   Zscipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Zscipy.linalg._testutilsr$   r'   r&   r   r   r)   r(   r   ZDTYPESr/   objectr0   rX   rn   r   r   r   r   r   r   r   r   r   Zparametrizer  r  r  r  r*  r8  r-   r-   r-   r.   <module>   sN   ($L
   =  >+&
	  !2!3/!U