o
    g                     @   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)dtypdt r2   [/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_basic.py	_eps_cast    s   

r4   c                   @   L   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      t g dg dg dg dg}t g dg dg dg dg}d	\}}t g d
}|dd}t ddgddgddgddgg}t g dg dg dg dg}||||fD ]}	t||f||	}
tt||
|	 qVd S )N      ?   r   r         r         r:   r@   r                 r:   r>   r@   rA   r=   r:   rE   r<   rA   rD   r   r@   rC   r   r   r@   rA         $@rG          @g      ,@rC   rA   r@   r<   r=      rA   r   r   r   r   r   r   rA   r   rA   r   r   r   reshaper   r   r   selfaablub4b4by1b4by2b4by4bxr2   r2   r3   	test_real,   6   zTestSolveBanded.test_realc                 C   r7   )Nr8   r;   )               @rA   r:   rc   rB   rG   r:   r>   rc   rH   rI   )rc   rC   r   r   rK   rM   rG   rN   y              ,@rC   rA   r@   r<   r=   rO   rP   )r   r   r                 ?rR   rS   rU   r2   r2   r3   test_complexD   rb   zTestSolveBanded.test_complexc           	      C      t g dg dg dg}t|ddd f dt|dd d f d t|dd df d }t g d}|dd}t ddgd	d
gddgddgg}t g dg dg dg dg}||||fD ]}td||}tt||| qcd S )NrF   rH   rI   r   rA   r@   rC   rL   r<   r=   rO   rP   rQ   rR   rA   rA   r   r)   diagrT   r   r   r   	rV   rX   rW   r[   r\   r]   r^   r_   r`   r2   r2   r3   test_tridiag_real\   .   2z!TestSolveBanded.test_tridiag_realc           	      C   rh   )Nrd   rH   rI   r   rA   r@   rC   re   r<   r=   rO   rP   rQ   rR   ri   rj   rl   r2   r2   r3   test_tridiag_complexp   rn   z$TestSolveBanded.test_tridiag_complexc                 C   s|   t g dg dg dg dg}t g dg dg dg dg}d	\}}t g d
}t||f||dd}tt||| d S )Nr8   r;   r?   rB   rF   rH   rI   rJ   rK   rL   Fcheck_finite)r   r   r   r   )rV   rW   rX   rY   rZ   r[   r`   r2   r2   r3   test_check_finite   s   z!TestSolveBanded.test_check_finitec                 C   s   t g dg dg dg dg}d\}}t g ddd}ttt||f|| ttt||f|d	d
g tttd|d	d
g d S )NrF   rH   rI   rJ   rK   )r9   rN         @      @rC   r=   r9   rN   ri   )r   rT   assert_raises
ValueErrorr   )rV   rX   rY   rZ   badr2   r2   r3   test_bad_shape   s   zTestSolveBanded.test_bad_shapec                 C   s\   t g dg}tddgdgdgg|}t|g dg t|jtd t|g dg d S )Nr9   rN   rs   ri   r   r@   )      ?r9   g      ?f8)r   r   r   r   dtyper)   )rV   r_   r`   r2   r2   r3   test_1x1   s
   zTestSolveBanded.test_1x1c                 C   sl   g dg dg dg dg}g dg dg dg dg}d	\}}g d
}t ||f||}tt||| d S )Nr8   r;   r?   rB   rF   rH   rI   rJ   rK   rL   )r   r   r   )rV   rW   rX   rY   rZ   r_   r`   r2   r2   r3   test_native_list_arguments   s   z*TestSolveBanded.test_native_list_argumentsN)__name__
__module____qualname__ra   rg   rm   ro   rr   rx   r}   r~   r2   r2   r2   r3   r6   *   s    r6   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   B   t g dg dg dg}t g d}t||}t|g d d S NrG   rG   rN   rN   r9   r9   r9   rt   rt   rt   rt   r9   rt   r9   rN   rG   r9   rG   rG   r   r   r   rV   rX   r_   r`   r2   r2   r3   test_01_upper      
zTestSolveHBanded.test_01_upperc                 C   sr   t g dg dg d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   r   r   r9         @rt   rN   rG   r   rV   rX   r_   r`   expectedr2   r2   r3   test_02_upper       
zTestSolveHBanded.test_02_upperc                 C   sV   t g dg dg dg}t g ddd}t||}t|t g ddd d S )Nr   r   r   r   rC   rA   r   r   rT   r   r   r   r2   r2   r3   test_03_upper   s   
zTestSolveHBanded.test_03_upperc                 C   sF   t g dg dg dg}t g d}t||dd}t|g d d S )Nr   r9   r9   r9   r   rN   rN   rG   rG   r   Tlowerr   r   r   r2   r2   r3   test_01_lower   s   zTestSolveHBanded.test_01_lowerc                 C   sv   t g dg dg d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 )Nr   r   r   r9   r   rt   rN   Tr   rG   r   r   r2   r2   r3   test_02_lower   s    zTestSolveHBanded.test_02_lowerc                 C   sJ   t g dg dg dgtd}t g dtd}t||}t|g d d S )Nr   r   r   r|   r   r   r   r	   r   r   r   r2   r2   r3   test_01_float32  s   
z TestSolveHBanded.test_01_float32c                 C   sz   t g dg dg d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   r   r   r   r9   r   rt   rN   rG   r   r   r2   r2   r3   test_02_float32  s(   
z TestSolveHBanded.test_02_float32c                 C   r   )Nr   r                r   r   r   )       @            @            @      ?       @      ?)rG   r9   r9   rG   r   r   r2   r2   r3   test_01_complex.  r   z TestSolveHBanded.test_01_complexc                 C   sr   t g dg dg d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   r   r   r          @      @r               r   y      @       @r   rf   rG   r9   r   r   r2   r2   r3   test_02_complex<  r   z TestSolveHBanded.test_02_complexc                 C   <   t g dg dg}t g d}t||}t|g d d S )Nr   r9   r9   rt   rt   rt   r9   rt   r9   rG   r9   rG   r   r   r2   r2   r3   test_tridiag_01_upperQ     
z&TestSolveHBanded.test_tridiag_01_upperc                 C   s`   t g dg d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 )Nr   r   r9   rt   rN   rG   r   r   r2   r2   r3   test_tridiag_02_upper\     
z&TestSolveHBanded.test_tridiag_02_upperc                 C   sP   t g dg dg}t g ddd}t||}t|t g ddd d S )Nr   r   r   rC   rA   r   r   r   r2   r2   r3   test_tridiag_03_upperm  s   
z&TestSolveHBanded.test_tridiag_03_upperc                 C   @   t g dg dg}t g d}t||dd}t|g d d S )Nr   r9   r9   r   r   Tr   r   r   r   r2   r2   r3   test_tridiag_01_lowerx  s   z&TestSolveHBanded.test_tridiag_01_lowerc                 C   sd   t g dg d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 )	Nr   r   r9   rt   rN   Tr   rG   r   r   r2   r2   r3   test_tridiag_02_lower  s   z&TestSolveHBanded.test_tridiag_02_lowerc                 C   sD   t g dg dgtd}t g dtd}t||}t|g d d S )Nr   r   r   r   r   r   r   r2   r2   r3   test_tridiag_01_float32  s   
z(TestSolveHBanded.test_tridiag_01_float32c                 C   sh   t g dg d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 )Nr   r   r   r9   rt   rN   rG   r   r   r2   r2   r3   test_tridiag_02_float32  s"   
z(TestSolveHBanded.test_tridiag_02_float32c                 C   r   )Nr   r   r   r   )r   r   r   )rG   r9   r9   r   r   r2   r2   r3   test_tridiag_01_complex  r   z(TestSolveHBanded.test_tridiag_01_complexc                 C   s`   t g dg d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 )Nr   r   r                 @r   r   r   rt   rG   rf   r9   r   r   r2   r2   r3   test_tridiag_02_complex  r   z(TestSolveHBanded.test_tridiag_02_complexc                 C   r   )Nr   r   r   Frp   r   r   r   r2   r2   r3   rr     s   z"TestSolveHBanded.test_check_finitec                 C   s\   t g dg d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 )Nr   r   r9   rt   rN   )r   ru   rv   r   )rV   rX   r_   r2   r2   r3   test_bad_shapes  s   z TestSolveHBanded.test_bad_shapesc                 C   s:   t dggg dg}t|g dg t|jtd d S )NrA   rA   r@   rO   ry   r{   )r   r   r   r|   r)   )rV   r`   r2   r2   r3   r}     s   zTestSolveHBanded.test_1x1c                 C   s:   g dg dg dg}g d}t ||}t|g d d S r   )r   r   r   r2   r2   r3   r~     s   
z+TestSolveHBanded.test_native_list_argumentsN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r}   r~   r2   r2   r2   r3   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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      t jd d S N  r)   r
   seedrV   r2   r2   r3   setup_method     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 )NrA   r9   r                   333333?r   r   r   )rV   rW   x0r_   r2   r2   r3   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||| qd S )NrA   r:   r<   r=   r   r@   r   rV   rW   r_   r`   r2   r2   r3   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@   rc   r=   Drf   r   rA   r   )r   r   r   r   r   r2   r2   r3   test_simple_complex  s   
zTestSolve.test_simple_complexc                 C   \   ddgddgg}dD ]!}ddgddggddgfD ]}t ||d|d}tt||| qq
d S )	Nr@   rO   r   r   rA   rA   r   posassume_ar   r   rV   rW   r   r_   r`   r2   r2   r3   test_simple_pos     zTestSolve.test_simple_posc                 C   P   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@   r=   rf   r   r   r   r   r   r2   r2   r3   test_simple_pos_complexb     z"TestSolve.test_simple_pos_complexbc                 C   r   )	Nr@   rO   r   rA   r   symr   r   r   r2   r2   r3   test_simple_sym#  r   zTestSolve.test_simple_symc                 C   r   )Nr   r@   rf   r   r   r   r   r   r2   r2   r3   test_simple_sym_complexb,  r   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   rf   r   rA   r@   r   r   r   r   r2   r2   r3   test_simple_sym_complex4     z!TestSolve.test_simple_sym_complexc                 C   sb   ddgddgg}dD ]$}ddgddggddgddgfD ]}t ||d|d	}tt||| qq
d S )
Nr@   rO   r   r   rA   r   rf   herr   r   r   r2   r2   r3   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   rf   r   rA   r@   r   r   r   r   r2   r2   r3   test_simple_herG  r   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< q*t|| d S )Nr@   rf   r   r   r   )r
   r   r   r   r   r   r   )rV   nAXAinvRirr2   r2   r3   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||| q!d S )Nr:   皙?r=   rO   r
   ranger   r   r   rV   r   rW   r   r_   r`   r2   r2   r3   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||| q)d S )Nr:   rf   r   r@   rO   r   r   r2   r2   r3   test_random_complexf  s   
zTestSolve.test_random_complexc                 C   sH   t jtdd tdggdgdd W d    d S 1 sw   Y  d S )Nz#The 'sym_pos' keyword is deprecated)matchr9   rA   T)sym_pos)pytestwarnsDeprecationWarningr   r   r2   r2   r3   test_sym_pos_depp  s   "zTestSolve.test_sym_pos_depc                 C   s   d}t ||g}t|D ]#}tdd|||f   |||f< t|D ]}|||f |||f< q"qtdD ]}t |g}t||dd}tt||| q4d S )Nr:   r   r=   r   r   )r
   r   absr   r   r   rV   r   rW   r   jr_   r`   r2   r2   r3   test_random_symw  s    
zTestSolve.test_random_symc                 C   s   d}t ||g}|dt ||g  }t|D ]%}tdd|||f   |||f< t|D ]}t|||f |||f< q,qt |gdt |g  }tdD ]}t||dd}tt||| qLd S )Nr:   rf   r   rc   r@   r   r   )r
   r   r   r   r   r   r   r   r2   r2   r3   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||| qd S )	NrA   r:   r<   r=   r   r@   Frp   r   r   r2   r2   r3   rr     s   zTestSolve.test_check_finitec                 C   s8   d}g d}t ||}t| | t|jdkd d S )NrA   r   rO   z'Scalar_a_1D_b test returned wrong shape)r   r   ravelr   shaper   r2   r2   r3   test_scalar_a_and_1D_b  s
   
z TestSolve.test_scalar_a_and_1D_bc                 C   sp   t g dg dg dg dg}t ddgddgd	d
gddgg}t||}t|t g dg dgj d S )N)?g
ףp=
@gffffff @g{Gz)g     h@g     prg     Wg     w)gHzG?gQg333333gp=
ף)g(\gQgzGg?g
ףp=
#@gQx2@g     @g      l@gp=
ף?g(\*gzGgףp=
)r9   rC   rO   r   )rO   r@   r=   rA   )r)   r   r   r   Tr   r2   r2   r3   test_simple2  s    


zTestSolve.test_simple2c              	   C   sz   t g dg dg dg d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 )N)yq=
ףpffffff@yQ?\(\	@y(\y
ףp=
?q=
ףp)y333333333333,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   r2   r2   r3   test_simple_complex2  s    


zTestSolve.test_simple_complex2c                 C   s   t g dg dg dg d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 )N)gq=
ףpy)\(?)\(y{GzzGyHzG@      )r   gQyq=
ףpQ?yGz@zG?)r   r   g=
ףp!yHzG?)r   r   r   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  )rV   rW   r_   resr`   r2   r2   r3   test_hermitian  s&   



zTestSolve.test_hermitianc                 C   sp   t dddd}tt |d t ddd}t|g d tt |d t ddd}t|g d d S )	NrA   
   rO   	   r   r   )g      "@r  r9   r   r)   r   rT   r   trilonesr   rV   r   r`   r2   r2   r3   test_pos_and_sym  s
   zTestSolve.test_pos_and_symc                 C   sh   t g dg dg dg dg dg dg dg dg dg	}t dd d d f }ttt|| d S )N)	rA   r   r   r   r   r   rA   r   rA   )	rA   rA   rA   r   r   r   rA   r   rA   )	r   rA   rA   r   r   r   rA   r   rA   )	rA   r   rA   rA   rA   rA   r   r   r   )	rA   rA   rA   rA   rA   rA   rA   rA   rA   r  )r)   r   r   ru   r    r   rV   rW   r_   r2   r2   r3   test_singularity  s   
	zTestSolve.test_singularityc                 C   sf   t ddgddgg}t d}t  td ttt|| W d    d S 1 s,w   Y  d S )NrA   r9   g?r@   error)	r)   r   r  warningscatch_warningssimplefilterru   r$   r   r  r2   r2   r3   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   r2   r2   r3   test_empty_rhs  s
   

zTestSolve.test_empty_rhsc                 C   s2   t d}t jddd}t||}t|| d S )Nr@   rO   r=   )r)   r  r
   randr   r   r   r2   r2   r3   test_multiple_rhs  s   

zTestSolve.test_multiple_rhsc                 C   sr   t dddd }tt |d t ddd}t|g d tt |d t ddd}t|g d d S )	Nr  rO   rA   T
transposed)r   g?rA   F)r  gg333333r  r  r2   r2   r3   test_transposed_keyword  s
   z!TestSolve.test_transposed_keywordc                 C   sL   t dt}tt t||dd W d    d S 1 sw   Y  d S )NrO   Tr!  )r)   r  astypecomplexru   NotImplementedErrorr   rV   rW   r2   r2   r3   test_transposed_notimplemented  s   
"z(TestSolve.test_transposed_notimplementedc                 C   s   t ttddgd d S )NrA   r@   ru   rv   r   r   r2   r2   r3   test_nonsquare_a     zTestSolve.test_nonsquare_ac                 C   s@   t ttdtdtd ttttdtd d S )NrO   r=   )r   r   r)   r  r  ru   rv   r   r2   r2   r3   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 )NrA   zxcvr   r)  r   r2   r2   r3   test_assume_a_keyword  r+  zTestSolve.test_assume_a_keywordz5Failure on OS X (gh-7500), crash on Windows (gh-8064)reasonc                 C   s  ddg}g d}t jt jt jt jg}t|||D ]\}}}|t jt jfv }|dkr-|s-qd|||}t j	||
|}	t j	|
|}
|rW|	dt j	|| 
| }	|dkra|	|	j }	n|dkrm|	|	j  }	n|dkr|	 j|	d	t |  }	|t jt jfv rd
nd}|dv r|t jt jfv r|d9 }t|	|
|d}t|	||
|| || |d |dkr|t jt jfvrt|	|
|dd}t|	||
|| || |d qd S )Nr  d   )genr   r   r   r   z+Failed for size: {}, assume_a: {},dtype: {}rf   r   r   r   -q=gư>)r2  r   r   r   atolrtolerr_msgT)r   r"  )r)   r	   r+   	complex64r-   	itertoolsproductformatr
   randnr$  r  r  r   r  r   r   )rV   sizes	assume_asdtypesr  r   r|   
is_complexr7  rW   r_   tolr`   r2   r2   r3   'test_all_type_size_routine_combinations  sV   
z1TestSolve.test_all_type_size_routine_combinationsN)'r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rr   r  r  r
  r  r  r  r  r  r   r#  r(  r*  r,  r.  r   markskiprB  r2   r2   r2   r3   r     sF    	
			
	
r   c                   @   $   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.
        rA   r   r@   Tr   Frz   r   transr9         N)r   r   r   r  r   rV   r   r_   solr2   r2   r3   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   rf   r@   TrA   rH  y      ?      y      п      пrz         ?       @y             y      ?      ?y      ?      y            пFrJ  N)r   r   r   r   r)   rk   r  rK  r2   r2   r3   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 )rG  rA   r   r@   TF)r   rq   N)r   r   r   rK  r2   r2   r3   rr   v  s   z%TestSolveTriangular.test_check_finiteN)r   r   r   r   r   rr   r2   r2   r2   r3   rF  B  s    rF  c                   @   <   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   r   r   r   r   r2   r2   r3   r     r   zTestInv.setup_methodc                 C   sf   ddgddgg}t |}tt||td g dg dg dg}t |}tt||td d S )NrA   r@   rO   r=   r   r=   r   r>   rD      r  )r   r   r   r)   r  rV   rW   a_invr2   r2   r3   r     s   zTestInv.test_simplec                 C   sh   d}t dD ]+}t||g}t |D ]}dd|||f   |||f< qt|}tt||t| qd S )Nr:   r=   r   r   r
   r   r   r   r   rV   r   r   rW   rT  r2   r2   r3   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 )NrA   r@   rO   r   r   r   r   r   rS  r2   r2   r3   r     s    zTestInv.test_simple_complexc                 C   sx   d}t dD ]3}t||gdt||g  }t |D ]}dd|||f   |||f< qt|}tt||t| qd S )Nr:   r=   rc   r   rU  rV  r2   r2   r3   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 )NrA   r@   rO   r=   Frp   r   rW  rS  r2   r2   r3   rr     s    zTestInv.test_check_finiteN)	r   r   r   r   r   r   r   r   rr   r2   r2   r2   r3   rO    s    

rO  c                   @   rN  )TestDetc                 C   r   r   r   r   r2   r2   r3   r     r   zTestDet.setup_methodc                 C   &   ddgddgg}t |}t|d d S )NrA   r@   rO   r=          r   r   rV   rW   a_detr2   r2   r3   r        zTestDet.test_simplec                 C   rY  )NrA   r@   rO   r   y            @r[  r\  r2   r2   r3   r     r^  zTestDet.test_simple_complexc                 C   sB   t j}d}tdD ]}t||g}t|}||}t|| q	d S )Nr:   r=   )linalgr   r   r
   r   rV   	basic_detr   r   rW   d1d2r2   r2   r3   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 )Nr:   r=   rc   gvIh%<=r6  )r_  r   r   r
   r   r`  r2   r2   r3   r     s   zTestDet.test_random_complexc                 C   s*   ddgddgg}t |dd}t|d d S )NrA   r@   rO   r=   Frp   rZ  r[  r\  r2   r2   r3   rr     s   zTestDet.test_check_finiteN)	r   r   r   r   r   r   r   r   rr   r2   r2   r2   r3   rX    s    		rX  c                 C   s2   t | }|r
t|}t|| }t||}t||S )N)r   r   r   r   )rW   r_   cmplxata1b1r2   r2   r3   direct_lstsq  s   


ri  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)gelsdgelssgelsyNc                 C   r   r   r   r   r2   r2   r3   r     r   zTestLstsq.setup_methodc                 C   s   t D ]`}tjddgddgg|d}tjD ]M}dD ]H}dD ]C}| }tj||d}| }t|||||d}	|	d	 }
|	d
 }t|d
kd|  tt	||
|dt
|j dt
|j d| d qqqqd S )NrA   r:   r<   r=   r   TF)rA   r   r   rp  )rK   r<   r=   lapack_driveroverwrite_aoverwrite_br   r@   !expected efficient rank 2, got %s   
driver: %sr4  )REAL_DTYPESr)   r   rj  lapack_driverscopyr   r   r   r   r4   r|   )rV   r|   rW   rs  	overwritebtrg  r_   rh  outr`   r   r2   r2   r3   test_simple_exact  s6   
zTestLstsq.test_simple_exactc              
   C   s2  t D ]}tjddgddgddgg|d}tjg d|d}tjD ]u}dD ]p}| }| }t|||||d	}|d
 }	|dkrLt|||	 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 q$q qd S )NrA   r@   r=   r   rO   r   r   rn  rr  r   rm  rv  axisrw  rx  r6  r5  r7  )gm۶mۿgm۶m?)ry  r)   r   rj  rz  r{  r   sumr   r   r   r   r4   r|   )rV   r|   rW   r_   rs  r|  rg  rh  r~  r`   	residualsr   r2   r2   r3   test_simple_overdet  s>    
zTestLstsq.test_simple_overdetc              
   C   s:  t D ]}tjddgddgddgg|d}tjg d|d}tjD ]y}dD ]t}| }| }t|||||d	}|d
 }	|dkrP|||	 }
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 q$q qd S )NrM  r@   r=   r   rO   r   )rA   r   rO   rn  rr  r   rm  rA   rv  r  rw  rx  r  )yu{޿E(B?yӽu{?(YJV?)COMPLEX_DTYPESr)   r   rj  rz  r{  r   r   r  r  r   r   r   r4   r|   )rV   r|   rW   r_   rs  r|  rg  rh  r~  r`   r  r  r   r2   r2   r3   test_simple_overdet_complex  sB    
z%TestLstsq.test_simple_overdet_complexc              
   C   s   t D ]Z}tjg dg dg|d}tjddg|d}tjD ]>}dD ]9}| }| }t|||||d}|d }	|d }
t|
dkd	|
  t|	d
dt	|j
 dt	|j
 d| d q!qqd S )Nr   rP  r   rA   r@   rn  rr  r   rv  )gqqgqq?gdq?rw  rx  r  )ry  r)   r   rj  rz  r{  r   r   r   r4   r|   )rV   r|   rW   r_   rs  r|  rg  rh  r~  r`   r   r2   r2   r3   test_simple_underdet8  s,   
zTestLstsq.test_simple_underdetc                 C   sF  t D ]}dD ]}tjD ]}dD ]}tjt||g|d}t|D ]}dd|||f   |||f< q tdD ]g}tjt|dg|d}| }| }	t||	|||d}
|
d	 }|
d
 }t	||kd||f  |tj
u rtt|||dt|j dt|j d| d q5tt|||dt|j dt|j d| d q5qqqqd S )Nr:      rn  r   r:   r   r=   rO   rr  r   r@   "expected efficient rank %s, got %si  rx  r    )ry  rj  rz  r)   asarrayr
   r   r{  r   r   r	   r   r   r4   r|   )rV   r|   r   rs  r|  rW   r   r_   rg  rh  r~  r`   r   r2   r2   r3   test_random_exactN  sN   




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 ]}dD ]}tjD ]}dD ]}tjt||gdt||g  |d	}t|D ]}d
d|||f   |||f< qHtdD ]g}tjt|dg|d	}| }	| }
t|	|
|||d}|d }|d }t||kd||f  |tju rtt|||dt|	j dt|	j d| d q]tt|||dt|	j dt|	j d| d q]q/q+q&q"d S )NWindowsz1.24.0r   glibcz(segfault observed on alpine per gh-17630r  rn  rf   r   r:   r   r@   rO   rr  r  i  rx  r  r  )platformsystemr   parser)   __version__Versionlibc_verr   rD  r  rj  rz  r  r
   r   r{  r   r   r8  r   r   r4   r|   )rV   libc_flavorr|   r   rs  r|  rW   r   r_   rg  rh  r~  r`   r   r2   r2   r3   test_random_complex_exactp  sZ   





z#TestLstsq.test_random_complex_exactc                 C   s  t D ]}dD ]\}}tjD ]w}dD ]r}tjt||g|d}t|D ]}dd|||f   |||f< q"tdD ]K}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 q7qqqqd S )N)r:      )r  r@   rn  r   r:   r   r=   rO   rr  r   r@   r  re  rw  rx  r  )ry  rj  rz  r)   r  r
   r   r{  r   r   r   ri  r4   r|   rV   r|   r   mrs  r|  rW   r   r_   rg  rh  r~  r`   r   r2   r2   r3   test_random_overdet  s@   

zTestLstsq.test_random_overdetc                 C   s"  t D ]}dD ]\}}tjD ]}dD ]z}tjt||gdt||g  |d}t|D ]}dd|||f   |||f< q*tdD ]K}tjt|dg|d}| }	| }
t|	|
|||d	}|d
 }|d }t	||kd||f  t
|t||dddt|	j dt|	j d| d q?qqqqd S )Nr  rn  rf   r   r:   r   r@   rO   rr  r   r  rA   r  rw  rx  r  )r  rj  rz  r)   r  r
   r   r{  r   r   r   ri  r4   r|   r  r2   r2   r3   test_random_complex_overdet  sD   

z%TestLstsq.test_random_complex_overdetc              	   C   s   t  }|td W d    n1 sw   Y  td}ttdtj	ddD ]N\}}}}}|
|}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.))rA   r:   rq  ro  rn  r   )rs  rq   rt  ru  r   r@   rv  rw  rx  r  )r   filterRuntimeWarningr)   r   r9  r:  ry  rj  rz  r$  r{  r   r   r   r   r4   r|   )rV   suprf  r|   r}  rs  r|  rq   rW   r_   rg  rh  r~  r`   r   r2   r2   r3   rr     s<   

zTestLstsq.test_check_finitec           	   	   C   s   dD ]M\}}t |}tt ||\}}}}t|t |d f|dd    |d r1t dn	t jj|ddd }t|| t|dkd t|t d qd S )N))r   r@   r   ))r   r=   r  )r=   r   )r=   )r  )r=   r@   rA   r  r   r  r@   zexpected rank 0)	r)   r  r   r   r   emptyr_  r   r   )	rV   a_shapeb_shaper_   r`   residuesranksresidues_should_ber2   r2   r3   test_zero_size  s   
"
zTestLstsq.test_zero_sizeN)r   r   r   rz  r   r  r  r  r  r  r  r  r  rr   r  r2   r2   r2   r3   rj    s    !"' rj  c                   @   T   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   r   r   r   r   r2   r2   r3   r     r   zTestPinv.setup_methodc                 C   s@   t g dg dg dgtd}t|}tt||td d S Nr   rP  rQ  r   rO   r   floatr   r   r   r)   r  rV   rW   a_pinvr2   r2   r3   test_simple_real  s   zTestPinv.test_simple_realc                 C   sb   t g dg dg dgtddt g dg dg dgtd  }t|}tt||td	 d S 
Nr   rP  rQ  r   rf   )r  rR  rD   )r>   r   r=   )rO   r@   rA   rO   r  r  r2   r2   r3   r     s   zTestPinv.test_simple_complexc                 C   sN   t g dg dg dgtd}t|}t g dg dg dg}t|| d S )Nr   rP  rD   rR  r  r   g|qgԕVUUſgc8?gqg^0<gq?g9?gԕVUU?g:87ȿr   r  r   r   rV   rW   r  r   r2   r2   r3   test_simple_singular  s   zTestPinv.test_simple_singularc                 C   sH   t g dg dgtd}t|}t ddgddgdd	gg}t|| d S )
Nr   rP  r   g֋8g#q?g#qg#q?gIq?g#q̿r  r  r2   r2   r3   test_simple_cols  s   zTestPinv.test_simple_colsc                 C   sH   t ddgddgddggtd}t|}t g dg d	g}t|| d S )
NrA   r@   rO   r=   r   r>   r   )gDpTUUgQUUտgvWUU?)gDpTUU?gQUU?g&>ڿr  r  r2   r2   r3   test_simple_rows  s   zTestPinv.test_simple_rowsc                 C   s@   t g dg dg dg}t|dd}tt||td d S )Nr   )r=   r   r   rQ  Frp   rO   )r   r   r   r   r)   r  r  r2   r2   r3   rr   %  s   zTestPinv.test_check_finitec                 C   sF   g dg dg dg}t |}tg dg dg dg}t|| d S )Nr   rP  r  r  r  r  )r   r   r   r  r2   r2   r3   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@rD   r   gMbP?)r   r   h㈵>g?rG   r5  r6  gMb@?r5  gvIh%,=g;O@{Gz?rd  )r#   r)   r
   r  r   rT   r{  r   r   r_  r   )rV   r   q_a_mrW   r5  r6  a_padiff1adiff2r2   r2   r3   test_atol_rtol2  s"   zTestPinv.test_atol_rtolN)r   r   r   r   r  r   r  r  r  rr   r  r  r2   r2   r2   r3   r    s    r  c                   @   rN  )TestPinvSymmetricc                 C   r   r   r   r   r2   r2   r3   r   P  r   zTestPinvSymmetric.setup_methodc                 C   sP   t g dg dg dgtd}t||j}t|}tt||td d S r  )r   r  r)   r   r  r   r   r  r  r2   r2   r3   r  S  s   z"TestPinvSymmetric.test_simple_realc                 C   s|   t g dg dg dgtd}t||j}tj|\}}}|d  d9  < t|| |}t|}t|}t	|| d S )Nr   rP  r  r   r   rC   )
r   r  r)   r   r  r_  svdr   r   r   )rV   rW   rZ   r  vtr  a_pinvhr2   r2   r3   test_nonpositiveY  s   z"TestPinvSymmetric.test_nonpositivec                 C   sv   t g dg dg dgtddt g dg dg dgtd  }t|| j}t|}tt||td	 d S r  )	r   r  r)   r   r  r  r   r   r  r  r2   r2   r3   r   c  s   z%TestPinvSymmetric.test_simple_complexc                 C   sT   t g dg dg dgtd}t||j}t| }tt||td d S r  )	r   r  r)   r   r  r   tolistr   r  r  r2   r2   r3   r  k  s   z+TestPinvSymmetric.test_native_list_argumentc                 C   s  d}t tj||\}}tg ddg|d   }|j| | }tg d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 )Nr  )r=   rO   r@   rA   vk?gﭣ>gu>r>   )r=   rO   r@   rA   r  rG   rG   r  g1?r  r   rd  r3  gdy=r  -C6?)	r#   r)   r
   r  rk   r  r   r   r   )rV   r   r  r  rW   r  r5  r6  r  r  r  r2   r2   r3   r  q  s$   z TestPinvSymmetric.test_atol_rtolN)	r   r   r   r   r  r  r   r  r  r2   r2   r2   r3   r  N  s    
r  scale)g#B;r9   @xDpinv_c                 C   sD   t ddgddgg|  }t dt | }||}t|| d S )NrA   r   g|=r9   )r)   r   rk   r   )r  r  r`   r   x_invr2   r2   r3   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 ]0}t jg d|d}tdt |jjd }tt|t 	d|d tt|dt 	d|d qt jd	 D ]0}t jg d
|d}tdt |jjd }tt|t 	d|d tt|dt 	d|d q;d S )NAllFloatr   r   gV瞯<r:   rE   rd  r@   Complex)rf   rc   y              @)
r)   	typecodesr   maxr.   r/   realr   r   sqrt)rV   r|   r`   rA  r2   r2   r3   
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'  r2   r2   r3   test_overflow  s   zTestVectorNorms.test_overflowc                 C   sd   t dgdgd  td}ztt|d ddd W d S  ty1   d}tt|d d	|d
 Y d S w )N     @rA   i'  r   rz   r  r  zO: Result should equal either 0.0 or 0.5 (depending on implementation of snrm2).rG   )r7  )r   r	   r   r   AssertionErrorr   )rV   rW   msgr2   r2   r3   test_stable  s   zTestVectorNorms.test_stablec                 C   s,   t tg ddd t tg ddd d S )N)rA   r   rO   r   r@   r   rO   )r   r   r   r2   r2   r3   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@   rA   rO   r=   dr  5D+@6f~@g      @)r)   r   r   r   r'  r2   r2   r3   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@   rA   rO   r=   r  T)r  keepdimsr  r  )r@   rA   r@   rs   g      @)r)   r   r   r   r   r  r  r2   r2   r3   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  )free_mbl        r   rA   rC   r9   )r'   r)   r   r+   r   r   )rV   r`   r  r2   r2   r3   test_large_vector  s   
z!TestVectorNorms.test_large_vectorN)r   r   r   r  r  r  r  r  r  r   rC  skipifr(   r  r2   r2   r2   r3   r    s    r  c                   @   rE  )TestMatrixNormsc           	   
   C   s   t jd dD ]p\}}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 ]&}t||d
}t jj||d
}t ||svt jj|	||d
}t|| qPqqd S )Nr   )ri   )rA   rO   )rO   rA   )r=   r=   )r=   r   )r   r=   r  y              $@frorA   rC   r@   )ord)r)   r
   r   singledoublecsinglecdoubleint64r<  r$  
issubdtyper|   complexfloatinginfr   r_  allcloser   )	rV   r   r  tr   t_highorderactualdesiredr2   r2   r3   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oG|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 d S    d S )
Nr@   rA   rO   r=   r  rp  )r  r  r   r   )r)   r   r   r  swapaxesr   r   r  )rV   rW   r_   cr  r2   r2   r3   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@   rO   r=   r   rp  T)r  r  r  rA   r   )r)   r   rT   r   r  r   r   r  )rV   rW   r_   r  r2   r2   r3   r    s
   
z!TestMatrixNorms.test_keepdims_kwdN)r   r   r   r  r  r  r2   r2   r2   r3   r    s    r  c                   @   r  )TestOverwritec                 C      t tddg d S NrO   rO   r  )r&   r   r   r2   r2   r3   
test_solve     zTestOverwrite.test_solvec                 C   r  r	  )r&   r   r   r2   r2   r3   test_solve_triangular  r  z#TestOverwrite.test_solve_triangularc                 C   s   t dd ddg d S )Nc                 S   s   t d| |S )NrK   )r   )rX   r_   r2   r2   r3   <lambda>	  s    z1TestOverwrite.test_solve_banded.<locals>.<lambda>)r=   r>   r>   r%   r   r2   r2   r3   test_solve_banded  s   zTestOverwrite.test_solve_bandedc                 C   r  )N)r@   r>   r  )r&   r   r   r2   r2   r3   test_solveh_banded  r  z TestOverwrite.test_solveh_bandedc                 C      t tdg d S Nr
  )r&   r   r   r2   r2   r3   test_inv  r   zTestOverwrite.test_invc                 C   r  r  )r&   r   r   r2   r2   r3   test_det  r   zTestOverwrite.test_detc                 C   r  )N)rO   r@   r  )r&   r   r   r2   r2   r3   
test_lstsq  r  zTestOverwrite.test_lstsqc                 C   r  r  )r&   r   r   r2   r2   r3   	test_pinv  r   zTestOverwrite.test_pinvc                 C   r  r  )r&   r   r   r2   r2   r3   
test_pinvh  r   zTestOverwrite.test_pinvhN)r   r   r   r  r  r  r  r  r  r  r  r  r2   r2   r2   r3   r    s    r  c                   @   r5   )TestSolveCirculantc                 C   sB   t g d}t g d}t||}tt||}t|| d S N)rA   r@   rO   r   )rA   rC   rA   r   )r)   r   r   r   r   r   rV   r  r_   r`   yr2   r2   r3   test_basic1!  s
   
zTestSolveCirculant.test_basic1c                 C   sF   t g d}t ddd}t||}tt||}t|| d S )NrA   r@   r   r  r=   rO   r)   r   r   rT   r   r   r   r   r  r2   r2   r3   test_basic2(  s
   
zTestSolveCirculant.test_basic2c                 C   sH   t g d}t dddd}t||}tt||}t|| d S )Nr     r=   rO   r@   r   r  r2   r2   r3   test_basic30  s
   
zTestSolveCirculant.test_basic3c                 C   sJ   t g d}t dddd }t||}tt||}t|| d S )N)rM  r  r   r   rR  r=   r@   y              ?r   r  r2   r2   r3   rg   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  r2   r2   r3   test_random_b_and_c@  s   
z&TestSolveCirculant.test_random_b_and_cc                 C   s\   t g d}t g d}t||dd}tt||\}}}}t|| ttt|| d S )NrA   rA   r   r   )rA   r@   rO   r=   r   )singular)r)   r   r   r   r   r   ru   r    )rV   r  r_   r`   r  r  rnkr  r2   r2   r3   test_singularI  s   
z TestSolveCirculant.test_singularc                 C   s  t g dgg dgg}t g dg dg d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 )N)rC   g      @rO   g      @)rA   r>   r>   g      @)r   r   rA   rA   r&  )rA   rC   r   r   rA   )baxis)r=   r@   rO   r   rC   )r*  outaxis)r@   rO   r=   r@   )caxis)r)   r   r   r   r  
empty_liker   r   r  r   moveaxisr  )rV   r  r_   r`   r   r2   r2   r3   test_axis_argsR  s   
&&
z!TestSolveCirculant.test_axis_argsc                 C   s6   g d}g d}t ||}tt||}t|| d S r  )r   r   r   r   r  r2   r2   r3   r~   k  s
   
z-TestSolveCirculant.test_native_list_argumentsN)r   r   r   r  r!  r#  rg   r%  r)  r/  r~   r2   r2   r2   r3   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)ru   rv   r"   r   r2   r2   r3   test_string_argv  r   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 )NrA   r@   rO   )ru   rv   r"   r)   r   r  nanr   r2   r2   r3   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 )Nr  rA   r   r   )r"   r)   r   r   difflog2rk   )rV   r  r  r2   r2   r3   test_scaling  s   "zTestMatrix_Balance.test_scalingc                 C   sB   t g dg dg dg}t|\}}tt|||| d S )N)rA   r   r  )rA   rA   r  )r  g      Y@rA   )r)   r   r"   r   r   r   )rV   r   r`   r  r2   r2   r3   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 )Nr  rA   r   separater   r@   )r"   r)   r   r   r4  r5  r   r   )rV   r  r  zr2   r2   r3   test_separate  s
   z TestMatrix_Balance.test_separatec                 C   s`   t tdttdtd}t|dd\}\}}t|t| t|tg d d S )N)r@   r@   r
  rA   r8  )r   rA   r>   r   r=   rO   r@   )r!   r)   r  r  r"   r   	ones_liker   )rV   r   r`   r  r:  r2   r2   r3   test_permutation  s   z#TestMatrix_Balance.test_permutationc              	   C   s   t g dg dg dg dg dgt g dg dg dg dgt g d	g d
g dg dgf}|D ]:}t|\}}t|dd\}\}}t |}t |jd ||< t|t ||d d f  tt||	|| q7d S )N)rG   rG   rG   rG   >)rG   rG   rG   rG   rG   )rN   rN   rG   rG   rG   )rG   rG   r>  rG   rG   )rJ  rG   rG   rG   )rG         rG   rG   )r9   rG   rJ  rG   )rG   r9   rG   r?  )      rG   r9   rG   )r?  r?         r9   )r@  rA  rA  rG   )r?  rA  r9   r?  rA   r8  r   )
r)   r   r"   r-  r   r  r   rk   r   r   )rV   casesr   r`   r  r  pipr2   r2   r3   test_perm_and_scaling  s2   



z(TestMatrix_Balance.test_perm_and_scalingN)
r   r   r   r1  r3  r6  r7  r;  r=  rE  r2   r2   r2   r3   r0  t  s    r0  r  )Qr  r9  r  numpyr)   r   r   r   r   r   r   r   r	   numpy.linalgr_  numpy.randomr
   numpy.testingr   r   r   r   r   r   r   r   r   ru   
scipy._libr   scipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   scipy.linalg._testutilsr&   scipy._lib._testutilsr'   scipy.linalg.blasr(   r+   r*   ry  r8  r-   r,   r  DTYPESr4   r6   r   r   rF  rO  rX  ri  rj  r  r  rC  parametrizer  r  r  r  r  r0  r2   r2   r2   r3   <module>   sX    ($L
   =  T>+
&	  &P?</U