a
    CCCf?                    @   s.  d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZmZmZmZ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, d dl-m.Z.m/Z/ d d	l0m1Z1 d d
l2m3Z3 ejej4ej5fZ6ej7ej8ej9fZ:e6e: Z;dd Z<G dd dZ=G dd dZ>G dd dZ?G dd dZ@G dd dZAG dd dZBd0ddZCG dd dZDG dd dZEG dd  d ZFejGHd!d"ejGHd#eefd$d% ZIG d&d' d'ZJG d(d) d)ZKG d*d+ d+ZLG d,d- d-ZMG d.d/ d/ZNd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)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IS_MUSL)	HAS_ILP64)_NoValuec                 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 r2   Y/var/www/html/django/DPS/env/lib/python3.9/site-packages/scipy/linalg/tests/test_basic.py	_eps_cast   s    

r4   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 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||
|	 qd S )N      ?   r   r         r         r8   r>   r                 r8   r<   r>   r?   r;   r8   rC   r:   r?   rB   r   r>   rA   r   r   r>   r?         $@rE          @g      ,@rA   r?   r>   r:   r;      r?   r   r   r   r   r   r   r?   r   r?   r   r   r   reshaper   r   r   selfaablub4b4by1b4by2b4by4bxr2   r2   r3   	test_real*   s4    zTestSolveBanded.test_realc                 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
}|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||
|	 qd S )Nr6   r9   )               @r?   r8   r`   r@   rE   r8   r<   r`   rF   rG   )r`   rA   r   r   rI   rK   rE   rL   y              ,@rA   r?   r>   r:   r;   rM   rN   )r   r   r                 ?rP   rQ   rS   r2   r2   r3   test_complexB   s4    zTestSolveBanded.test_complexc           	      C   s   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||| qd S )NrD   rF   rG   r   r?   r>   rA   rJ   r:   r;   rM   rN   rO   rP   r?   r?   r   r*   diagrR   r   r   r   	rT   rV   rU   rY   rZ   r[   r\   r]   r^   r2   r2   r3   test_tridiag_realZ   s,    2z!TestSolveBanded.test_tridiag_realc           	      C   s   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||| qd S )Nra   rF   rG   r   r?   r>   rA   rb   r:   r;   rM   rN   rO   rP   re   rf   rh   r2   r2   r3   test_tridiag_complexn   s,    2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 )Nr6   r9   r=   r@   rD   rF   rG   rH   rI   rJ   Fcheck_finite)r   r   r   r   )rT   rU   rV   rW   rX   rY   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 )NrD   rF   rG   rH   rI   )r7   rL         @      @rA   r;   r7   rL   re   )r   rR   assert_raises
ValueErrorr   )rT   rV   rW   rX   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r7   rL   rn   re   r   r>   )      ?r7   g      ?f8)r   r   r   r   dtyper*   )rT   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 )Nr6   r9   r=   r@   rD   rF   rG   rH   rI   rJ   )r   r   r   )rT   rU   rV   rW   rX   r]   r^   r2   r2   r3   test_native_list_arguments   s    z*TestSolveBanded.test_native_list_argumentsN)__name__
__module____qualname__r_   rd   ri   rj   rm   rs   rx   ry   r2   r2   r2   r3   r5   (   s   r5   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   sB   t g dg dg dg}t g d}t||}t|g d d S NrE   rE   rL   rL   r7   r7   r7   ro   ro   ro   ro   r7   ro   r7   rL   rE   r7   rE   rE   r   r   r   rT   rV   r]   r^   r2   r2   r3   test_01_upper   s    
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   r7         @ro   rL   rE   r   rT   rV   r]   r^   expectedr2   r2   r3   test_02_upper   s     
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   rA   r?   r   r   rR   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   r7   r7   r7   r   rL   rL   rE   rE   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   r7   r   ro   rL   Tr   rE   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   rw   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   r7   r   ro   rL   rE   r   r   r2   r2   r3   test_02_float32  s(    
z TestSolveHBanded.test_02_float32c                 C   sB   t g dg dg dg}t g d}t||}t|g d d S )Nr   r                r   r   r   )       @            @            @      ?       @      ?)rE   r7   r7   rE   r   r   r2   r2   r3   test_01_complex,  s    
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   rc   rE   r7   r   r   r2   r2   r3   test_02_complex:  s     
z TestSolveHBanded.test_02_complexc                 C   s<   t g dg dg}t g d}t||}t|g d d S )Nr   r7   r7   ro   ro   ro   r7   ro   r7   rE   r7   rE   r   r   r2   r2   r3   test_tridiag_01_upperO  s    
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   r7   ro   rL   rE   r   r   r2   r2   r3   test_tridiag_02_upperZ  s    
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   rA   r?   r   r   r   r2   r2   r3   test_tridiag_03_upperk  s    
z&TestSolveHBanded.test_tridiag_03_upperc                 C   s@   t g dg dg}t g d}t||dd}t|g d d S )Nr   r7   r7   r   r   Tr   r   r   r   r2   r2   r3   test_tridiag_01_lowerv  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   r7   ro   rL   Tr   rE   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   r7   ro   rL   rE   r   r   r2   r2   r3   test_tridiag_02_float32  s"    
z(TestSolveHBanded.test_tridiag_02_float32c                 C   s<   t g dg dg}t g d}t||}t|g d d S )Nr   r   r   r   )r   r   r   )rE   r7   r7   r   r   r2   r2   r3   test_tridiag_01_complex  s    
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   ro   rE   rc   r7   r   r   r2   r2   r3   test_tridiag_02_complex  s    
z(TestSolveHBanded.test_tridiag_02_complexc                 C   s@   t g dg dg}t g d}t||dd}t|g d d S )Nr   r   r   Frk   r   r   r   r2   r2   r3   rm     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   r7   ro   rL   )r   rp   rq   r   )rT   rV   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 )Nr?   r?   r>   rM   rt   rv   )r   r   r   rw   r*   )rT   r^   r2   r2   r3   rx     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   ry     s    
z+TestSolveHBanded.test_native_list_argumentsN)rz   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rm   r   rx   ry   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!e"j#j$d?d@dAdB Z%dCS )D	TestSolvec                 C   s   t jd d S N  r*   r
   seedrT   r2   r2   r3   setup_method  s    zTestSolve.setup_methodc                 C   sl   ddgddgg}t |ddg}tt||ddg ddgddgg}ddg}t ||}tt||ddg d S )Nr?   r7   r                   333333?r   r   r   )rT   rU   Z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||| q6d S )Nr?   r8   r:   r;   r   r>   r   rT   rU   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>   r`   r;   Drc   r   r?   r   )r   r   r   r   r   r2   r2   r3   test_simple_complex  s    
zTestSolve.test_simple_complexc                 C   s\   ddgddgg}dD ]B}ddgddggddgfD ]$}t ||d|d}tt||| q0qd S )	Nr>   rM   r   r   r?   r?   r   posassume_ar   r   rT   rU   r   r]   r^   r2   r2   r3   test_simple_pos  s    zTestSolve.test_simple_posc                 C   sP   ddgddgg}ddgddgddggfD ]"}t ||dd}tt||| q(d S )Nr   r>   r;   rc   r   r   r   r   r   r2   r2   r3   test_simple_pos_complexb  s    z"TestSolve.test_simple_pos_complexbc                 C   s\   ddgddgg}dD ]B}ddgddggddgfD ]$}t ||d|d}tt||| q0qd S )	Nr>   rM   r   r?   r   symr   r   r   r2   r2   r3   test_simple_sym!  s    zTestSolve.test_simple_symc                 C   sP   ddgddgg}ddgddgddggfD ]"}t ||dd}tt||| q(d S )Nr   r>   rc   r   r   r   r   r   r2   r2   r3   test_simple_sym_complexb*  s    z"TestSolve.test_simple_sym_complexbc                 C   sV   ddgddgg}ddgddgddgddggfD ]"}t ||dd	}tt||| q.d S )
Nr   r   r   rc   r   r?   r>   r   r   r   r   r2   r2   r3   test_simple_sym_complex2  s    z!TestSolve.test_simple_sym_complexc                 C   sb   ddgddgg}dD ]H}ddgddggddgddgfD ]$}t ||d|d	}tt||| q6qd S )
Nr>   rM   r   r   r?   r   rc   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   rc   r   r?   r>   r   r   r   r   r2   r2   r3   test_simple_herE  s    zTestSolve.test_simple_herc                 C   s   d}t ||gt ||gd  }t||fd}t|}t|t|d  }td|D ]*}|d d |f }t|||d d |f< qTt|| d S )Nr>   rc   r   r   r   )r
   r   r   r   r   r   r   )rT   nAXZAinvRirr2   r2   r3   test_nils_20Feb04N  s    zTestSolve.test_nils_20Feb04c                 C   sr   d}t ||g}t|D ] }dd|||f   |||f< qtdD ]*}t |dg}t||}tt||| qBd S )Nr8   皙?r;   rM   r
   ranger   r   r   rT   r   rU   r   r]   r^   r2   r2   r3   test_randomY  s    
zTestSolve.test_randomc                 C   s   d}t ||gdt ||g  }t|D ] }dd|||f   |||f< q(tdD ]*}t |dg}t||}tt||| qRd S )Nr8   rc   r   r>   rM   r   r   r2   r2   r3   test_random_complexd  s    
zTestSolve.test_random_complexc                 C   s   d}t ||g}t|D ]F}tdd|||f   |||f< t|D ]}|||f |||f< qDqtdD ],}t |g}t||dd}tt||| qhd S )Nr8   r   r;   r   r   )r
   r   absr   r   r   rT   r   rU   r   jr]   r^   r2   r2   r3   test_random_symn  s     
zTestSolve.test_random_symc                 C   s   d}t ||g}|dt ||g  }t|D ]J}tdd|||f   |||f< t|D ]}t|||f |||f< qXq,t |gdt |g  }tdD ]"}t||dd}tt||| qd S )Nr8   rc   r   r`   r>   r   r   )r
   r   r   r   r   r   r   r   r2   r2   r3   test_random_sym_complexz  s     z!TestSolve.test_random_sym_complexc                 C   s^   ddgddgg}ddgddggddgddgddggfD ]"}t ||dd}tt||| q6d S )	Nr?   r8   r:   r;   r   r>   Frk   r   r   r2   r2   r3   rm     s    zTestSolve.test_check_finitec                 C   s8   d}g d}t ||}t| | t|jdkd d S )Nr?   r   rM   z'Scalar_a_1D_b test returned wrong shape)r   r   Z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=
)r7   rA   rM   r   )rM   r>   r;   r?   )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      @      r   r   Tr   )r*   r   r   r   conjr   )rT   rU   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 )	Nr?   
   rM   	   r   r   )      "@r   r7   r   r*   r   rR   r   trilonesr   rT   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)	r?   r   r   r   r   r   r?   r   r?   )	r?   r?   r?   r   r   r   r?   r   r?   )	r   r?   r?   r   r   r   r?   r   r?   )	r?   r   r?   r?   r?   r?   r   r   r   )	r?   r?   r?   r?   r?   r?   r?   r?   r?   r   )r*   r   r   rp   r   r   rT   rU   r]   r2   r2   r3   test_singularity  s    
	zTestSolve.test_singularityc                 C   sd   t ddgddgg}t d}t ( td ttt|| W d    n1 sV0    Y  d S )Nr?   r7   g?r>   error)	r*   r   r   warningscatch_warningssimplefilterrp   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>   rM   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   rM   r?   T
transposed)r   g?r?   F)r   gg333333r   r   r2   r2   r3   test_transposed_keyword  s
    z!TestSolve.test_transposed_keywordc                 C   sJ   t dt}tt t||dd W d    n1 s<0    Y  d S )NrM   Tr  )r*   r  astypecomplexrp   NotImplementedErrorr   rT   rU   r2   r2   r3   test_transposed_notimplemented  s    
z(TestSolve.test_transposed_notimplementedc                 C   s   t ttddgd d S )Nr?   r>   rp   rq   r   r   r2   r2   r3   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 )NrM   r;   )r   r   r*   r  r   rp   rq   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 )Nr?   Zzxcvr   r  r   r2   r2   r3   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}g d}t jt jt jt jg}t|||D ]\}}}|t jt jfv }|dkr\|s\q2d| d| 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v r"dnd}|dv rJ|t jt jfv rJ|d9 }t|	|
|d}t|	||
|| || |d |d	kr2|t jt jfvr2t|	|
|dd}t|	||
|| || |d q2d S )Nr   d   )genr   r   r   r   zFailed for size: z, assume_a: z,dtype: rc   r   r   r   -q=gư>)r  r   r   r   atolrtolerr_msgT)r   r  )r*   r	   r,   	complex64r.   	itertoolsproductr
   randnr
  r   r   r   r  r   r   )rT   sizesZ	assume_asZdtypesr  r   rw   Z
is_complexr  rU   r]   tolr^   r2   r2   r3   'test_all_type_size_routine_combinations  sR    

z1TestSolve.test_all_type_size_routine_combinationsN)&rz   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rm   r   r   r   r   r   r   r  r  r  r	  r  r  r  r  pytestmarkskipr"  r2   r2   r2   r3   r     sB   	
			
	
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestSolveTriangularc                 C   s   t ddgddgg}ddg}t||dd}t|ddg t|j|dd}t|ddg t||ddd}t|ddg td}t||ddd}t|d	d
gddgg dS ):
        solve_triangular on a simple 2x2 matrix.
        r?   r   r>   Tr   Fru   r   Ztransr7         N)r   r   r   r   r   rT   r   r]   Zsolr2   r2   r3   r   ;  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   rc   r>   Tr?   r(  y      ?      y      п      пru         ?       @y             y      ?      ?y      ?      y            пFr)  N)r   r   r   r   r*   rg   r   r*  r2   r2   r3   r   P  s"    z'TestSolveTriangular.test_simple_complexc                 C   s>   t ddgddgg}ddg}t||ddd}t|ddg dS )r'  r?   r   r>   TF)r   rl   N)r   r   r   r*  r2   r2   r3   rm   m  s    z%TestSolveTriangular.test_check_finiteN)rz   r{   r|   r   r   rm   r2   r2   r2   r3   r&  9  s   r&  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestInvc                 C   s   t jd d S r   r   r   r2   r2   r3   r   x  s    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 )Nr?   r>   rM   r;   r   r;   r   r<   rB      r   )r   r   r   r*   r  rT   rU   a_invr2   r2   r3   r   {  s    zTestInv.test_simplec                 C   sh   d}t dD ]V}t||g}t |D ] }dd|||f   |||f< q$t|}tt||t| qd S )Nr8   r;   r   r   r
   r   r   r   r   rT   r   r   rU   r1  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 )Nr?   r>   rM   r   r   r   r   r   r0  r2   r2   r3   r     s    zTestInv.test_simple_complexc                 C   sx   d}t dD ]f}t||gdt||g  }t |D ] }dd|||f   |||f< q4t|}tt||t| qd S )Nr8   r;   r`   r   r2  r3  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 )Nr?   r>   rM   r;   Frk   r   r4  r0  r2   r2   r3   rm     s    zTestInv.test_check_finiteN)	rz   r{   r|   r   r   r   r   r   rm   r2   r2   r2   r3   r,  w  s   

r,  c                   @   s   e Zd Zdd Zdd Zdd Zejdddgd	d	gg d
gdd Z	dd Z
ejddd ejd dd	 D 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 )Nl   *n`/ )r*   r
   Zdefault_rngrngr   r2   r2   r3   r     s    zTestDet.setup_methodc                 C   s   t dgg}t|}|jjdks&J t |s4J |dks@J t jdggggdd}t|}|jjdksnJ t |s|J |dksJ t jdgggt jd}t|}|jjdksJ t |sJ |dksJ d S )Nr?   dr7   fr   y      ?      @r   )r*   r   r   rw   charZisscalarr  rT   rU   detar2   r2   r3   test_1x1_all_singleton_dims  s    z#TestDet.test_1x1_all_singleton_dimsc                 C   s   | j jg dtjd}t|}|jjdks.J |jdks<J t|t	| | j jg dtjdt
d }t|}|jjdksJ |jdksJ t|t	| d S )N)r;   r   r?   r?   r   r7  r;   r   rc   r   )r6  r
   r*   r	   r   rw   r9  r   r   Zsqueezer  r:  r2   r2   r3   test_1by1_stacked_input_output  s     z&TestDet.test_1by1_stacked_input_outputr   r>   r8   )rM   r>   r8   r8   c                 C   s   | j jdd|d}t|tj| }}t|| | j jdd|dd }|| j jdd|d7 }t|tj| }}t|| d S )N      r7   )r  rc   r)  ru   )r6  uniformr   r*   linalgr   )rT   r   rU   Zd1Zd2r]   Zd3Zd4r2   r2   r3   #test_simple_det_shapes_real_complex  s    
z+TestDet.test_simple_det_shapes_real_complexc                 C   s   t g dg dg dg dg dg dg dg dg}tt|d	 ttt d
ddd t jg dg dg dg dgt jd}tt|d t g dg dg dg dg dg dg dg dgd }tt|d d S )N)r?   r?   r?   r?   r?   r?   r?   r?   )r?   rA   r?   rA   r?   rA   r?   rA   )r?   r?   rA   rA   r?   r?   rA   rA   )r?   rA   rA   r?   r?   rA   rA   r?   )r?   r?   r?   r?   rA   rA   rA   rA   )r?   rA   r?   rA   rA   r?   rA   r?   )r?   r?   rA   rA   rA   rA   r?   r?   )r?   rA   rA   r?   rA   r?   r?   rA   g      @   r   rE   )r   r                 r   )r   r         ?        rD  )rc   r   r   r   )rE  rc   r   r   r   y      @        )g             r7   rE   rE   rE   rE   rE   )r7   rE   rE   rE   rE   rE   rE   rE   )rE   g      rE   g      r7   rE   rE   rE   )rE   r7   rE   rE   rE   rE   rE   rE   )rE   rE   rE   g      rE   g      r7   rE   )rE   rE   rE   r7   rE   rE   rE   rE   )rE   rE   rE   rE   rE   g       rE   g      ")rE   rE   rE   rE   rE   r7   rE   rE   rc   r   )r*   r   r   r   r   rR   r  r  r2   r2   r3   test_for_known_det_values  s>    


z!TestDet.test_for_known_det_valuestypc                 C   s   g | ]}|d vr|qS )ZgGr2   ).0r^   r2   r2   r3   
<listcomp>  s   zTestDet.<listcomp>ZAllNc                 C   s8   d}| j ||g|}tt|tjtjfs4J d S )Nr;   )r6  r
   r
  
isinstancer   r*   r,   r.   )rT   rH  r   rU   r2   r2   r3   "test_sample_compatible_dtype_input  s    z*TestDet.test_sample_compatible_dtype_inputc              	   C   sB  d}t dg dD ]P\}}tt|d, ttjddggd |d W d    q1 sX0    Y  qtt|d, ttjd	d
ggd dd W d    n1 s0    Y  tt|d, ttjddggd dd W d    n1 s0    Y  tt|d, ttjddggd dd W d    n1 s40    Y  d S )Nz!cannot be cast to float\(32, 64\)ZSUO)Zbytes8Zstr32objectmatchrU   r]   r>   r      a   bVr     zdatetime64[s]ztimedelta64[s])ziprp   	TypeErrorr   r*   r   )rT   msgctr2   r2   r3   test_incompatible_dtype_input  s    <::z%TestDet.test_incompatible_dtype_inputc                 C   sR  t ttddgd t ttg dtg  t ttg dtg d ttdd" ttg d W d    n1 s0    Y  ttd	d ttg  W d    n1 s0    Y  ttdd  ttg g W d    n1 s0    Y  ttdd" ttg gg W d    n1 sD0    Y  d S )
Nr   r7   )r   r   r   )rM   r   r   r7   r7   r7   zLast 2 dimensionsrN  )r   r   rM   zat least two-dimensional)r   r   r*   emptyr   rp   rq   r   r2   r2   r3   test_empty_edge_cases	  s    "0,0zTestDet.test_empty_edge_casesc                 C   sL   t dddt j}| }t|dd}t|d ||k rHJ d S )Nr   rM   Toverwrite_arE   )	r*   r   rR   r
  r	   copyr   r   all)rT   rU   acr;  r2   r2   r3   test_overwrite_a  s
    
zTestDet.test_overwrite_ac                 C   s>   t g dg dg dg}|jdd tt|ddd d S )	N)rL   rE   r7   )      @rn   r?  rZ  F)writeTr]  rK   )r*   r   Zsetflagsr   r   r  r2   r2   r3   test_readonly_array!  s    zTestDet.test_readonly_arrayc                 C   sJ   ddgdt jgg}ttdd t| W d    n1 s<0    Y  d S )Nr?   r>   rM   zarray must not containrN  )r*   infrp   rq   r   r  r2   r2   r3   test_simple_check_finite'  s    z TestDet.test_simple_check_finite)rz   r{   r|   r   r<  r>  r#  r$  parametrizerB  rG  r*   	typecodesrL  rY  r\  rb  re  rg  r2   r2   r2   r3   r5    s   

%$
r5  c                 C   s2   t | }|rt|}t|| }t||}t||S )N)r   r   r   r   )rU   r]   cmplxata1b1r2   r2   r3   direct_lstsq-  s    

rn  c                   @   sp   e Zd Z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d Zdd Zdd Zdd ZdS )	TestLstsq)ZgelsdZgelssgelsyNc                 C   s   t D ]}tjddgddgg|d}tjD ]}dD ]}dD ]}| }tj||d}| }t|||||d}	|	d	 }
|	d
 }t|d
kd|  tt	||
|dt
|j dt
|j d| d q8q0q(qd S )Nr?   r8   r:   r;   r   TF)r?   r   r   rs  )rI   r:   r;   lapack_driverr^  overwrite_br   r>   !expected efficient rank 2, got %srC  
driver: %sr  )REAL_DTYPESr*   r   ro  lapack_driversr_  r   r   r   r   r4   rw   )rT   rw   rU   rv  	overwritebtrl  r]   rm  outr^   r   r2   r2   r3   test_simple_exact9  s.    
zTestLstsq.test_simple_exactc              
   C   s4  t D ](}tjddgddgddgg|d}tjg d|d}tjD ]}dD ]}| }| }t|||||d	}|d
 }	|dkrt|||	 d }
n|d }
|d }t	|dkd|  t
tt||	| d jd
d|
dt|j dt|j d| d t
|	ddt|j dt|j d| d qJqBqd S )Nr?   r>   r;   r   rM   r   r   rq  ru  r   rp  rx  axisrC  ry  r  r  r  )gm۶mۿgm۶m?)rz  r*   r   ro  r{  r_  r   sumr   r   r   r   r4   rw   )rT   rw   rU   r]   rv  r|  rl  rm  r~  r^   	residualsr   r2   r2   r3   test_simple_overdetR  s8    
 
zTestLstsq.test_simple_overdetc              
   C   s<  t D ]0}tjddgddgddgg|d}tjg d|d}tjD ]}dD ]}| }| }t|||||d	}|d
 }	|dkr|||	 }
t|
|
	  }n|d }|d }t
|dkd|  ttt||	| d jd
d|dt|j dt|j d| d t|	ddt|j dt|j d| d qJqBqd S )Nr+  r>   r;   r   rM   r   )r?   r   rM   rq  ru  r   rp  r?   rx  r  rC  ry  r  )yu{޿E(B?yӽu{?(YJV?)COMPLEX_DTYPESr*   r   ro  r{  r_  r   r   r  r   r   r   r   r4   rw   )rT   rw   rU   r]   rv  r|  rl  rm  r~  r^   r   r  r   r2   r2   r3   test_simple_overdet_complexo  s<    
 
z%TestLstsq.test_simple_overdet_complexc              
   C   s   t D ]}tjg dg dg|d}tjddg|d}tjD ]|}dD ]r}| }| }t|||||d}|d }	|d }
t|
dkd	|
  t|	d
dt	|j
 dt	|j
 d| d qBq:qd S )Nr   r-  r   r?   r>   rq  ru  r   rx  )gqqgqq?gdq?rC  ry  r  )rz  r*   r   ro  r{  r_  r   r   r   r4   rw   )rT   rw   rU   r]   rv  r|  rl  rm  r~  r^   r   r2   r2   r3   test_simple_underdet  s&    
zTestLstsq.test_simple_underdetc                 C   sd  t jd}tD ]L}dD ]@}tjD ]2}dD ]&}t j|||g|d}t|D ] }dd|||f   |||f< qVtdD ]}t j||dg|d}| }	| }
t	|	|
|||d	}|d
 }|d }t
||kd| d|  |t ju r&tt|||dt|	j dt|	j d| d qtt|||dt|	j dt|	j d| d qq0q&qqd S )Nr   r8   rS  rq  r   r8   r   r;   rM   ru  r   r>   expected efficient rank , got i  ry  r    )r*   r
   RandomStaterz  ro  r{  asarrayr   r_  r   r   r	   r   r   r4   rw   rT   r6  rw   r   rv  r|  rU   r   r]   rl  rm  r~  r^   r   r2   r2   r3   test_random_exact  sF    




zTestLstsq.test_random_exactz$may segfault on Alpine, see gh-17630r  c                 C   sv  t jd}tD ]^}dD ]R}tjD ]D}dD ]8}t j|||gd|||g  |d}t|D ] }dd|||f   |||f< qhtdD ]}t j||d	g|d}| }	| }
t	|	|
|||d
}|d }|d }t
||kd| d|  |t ju r8tt|||dt|	j dt|	j d| d qtt|||dt|	j dt|	j d| d qq0q&qqd S )Nr   r  rq  rc   r   r8   r   r>   rM   ru  r   r  r  i  ry  r  r  )r*   r
   r  r  ro  r{  r  r   r_  r   r   r  r   r   r4   rw   r  r2   r2   r3   test_random_complex_exact  sH    


"

z#TestLstsq.test_random_complex_exactc                 C   s*  t jd}tD ]}dD ]\}}tjD ]}dD ]}t j|||g|d}t|D ] }dd|||f   |||f< qVtdD ]}t j||dg|d}	| }
|	 }t	|
||||d	}|d
 }|d }t
||kd| d|  t|t||	d
ddt|
j dt|
j d| d qq2q*qqd S )Nr   )r8      )rS  r>   rq  r   r8   r   r;   rM   ru  r   r>   r  r  rj  rC  ry  r  )r*   r
   r  rz  ro  r{  r  r   r_  r   r   r   rn  r4   rw   rT   r6  rw   r   mrv  r|  rU   r   r]   rl  rm  r~  r^   r   r2   r2   r3   test_random_overdet  s8    

zTestLstsq.test_random_overdetc                 C   s>  t jd}tD ]&}dD ]\}}tjD ]}dD ]}t j|||gd|||g  |d}t|D ] }dd|||f   |||f< qjtdD ]}t j||d	g|d}	| }
|	 }t	|
||||d
}|d }|d }t
||kd| d|  t|t||	dddt|
j dt|
j d| d qq4q*qqd S )Nr   r  rq  rc   r   r8   r   r>   rM   ru  r   r  r  r?   r  rC  ry  r  )r*   r
   r  r  ro  r{  r  r   r_  r   r   r   rn  r4   rw   r  r2   r2   r3   test_random_complex_overdet	  s<    
"z%TestLstsq.test_random_complex_overdetc              	   C   s   t  }|td W d    n1 s(0    Y  td}ttdtj	ddD ]\}}}}}|
|}tj||d}	| }
|	 }t|
|||||d}|d }|d }t|dkd	|  tt|||	d
t|j d
t|j d| d qPd S )NzIinternal gelsd driver lwork query error,.*Falling back to 'gelss' driver.))r?   r8   rt  rr  rq  r   )rv  rl   r^  rw  r   r>   rx  rC  ry  r  )r   filterRuntimeWarningr*   r   r  r  rz  ro  r{  r
  r_  r   r   r   r   r4   rw   )rT   suprk  rw   r}  rv  r|  rl   rU   r]   rl  rm  r~  r^   r   r2   r2   r3   rm   '  s8    "

zTestLstsq.test_check_finitec           	   	   C   s   dD ]\}}t |}tt ||\}}}}t|t |d f|dd    |d rbt dnt jj|ddd }t|| t|dkd t|t d qd S )N))r   r>   r   ))r   r;   r  )r;   r   )r;   )r  )r;   r>   r?   r  r   r  r>   zexpected rank 0)	r*   r   r   r   r   r[  rA  r   r   )	rT   Za_shapeZb_shaper]   r^   ZresiduesZranksZresidues_should_ber2   r2   r3   test_zero_sizeG  s    
"
zTestLstsq.test_zero_sizeN)rz   r{   r|   r{  r  r  r  r  r  r#  r$  skipifr'   r  r  r  rm   r  r2   r2   r2   r3   ro  6  s   !#
# ro  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zejdddegejdddegdd Zdd ZdS )TestPinvc                 C   s   t jd d S r   r   r   r2   r2   r3   r   W  s    zTestPinv.setup_methodc                 C   s@   t g dg dg dgtd}t|}tt||td d S Nr   r-  r.  r   rM   r   floatr   r   r   r*   r  rT   rU   a_pinvr2   r2   r3   test_simple_realZ  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   r-  r.  r   rc   )r   r/  rB   )r<   r   r;   )rM   r>   r?   rM   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   r-  rB   r/  r   r   g|qgԕVUUſgc8?gqg^0<gq?g9?gԕVUU?g:87ȿr   r  r   r   rT   rU   r  r   r2   r2   r3   test_simple_singularf  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   r-  r   g֋8g#q?g#qg#q?gIq?g#q̿r  r  r2   r2   r3   test_simple_colsn  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 )
Nr?   r>   rM   r;   r   r<   r   )gDpTUUgQUUտgvWUU?)gDpTUU?gQUU?g&>ڿr  r  r2   r2   r3   test_simple_rowsv  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   r.  Frk   rM   )r   r   r   r   r*   r  r  r2   r2   r3   rm   }  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   r-  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@rB   r   gMbP?)r   r   h㈵>g?rE   r  r  gMb@?r  gvIh%,=g;O@{Gz?r  )r"   r*   r
   r  r   rR   r_  r   r   rA  r   )rT   r   q_a_mrU   r  r  a_padiff1adiff2r2   r2   r3   test_atol_rtol  s"    zTestPinv.test_atol_rtolcondr?   Nrcondc                 C   sj   |t u r&|t u r&ttd||d n@tjdd$ ttd||d W d    n1 s\0    Y  d S )Nr>   r>   )r  r  z"cond" and "rcond"rN  )r)   r   r*   r   r#  deprecated_call)rT   r  r  r2   r2   r3   test_cond_rcond_deprecation  s    z$TestPinv.test_cond_rcond_deprecationc                 C   sB   t jdd" ttddd W d    n1 s40    Y  d S )Nzuse keyword argumentsrN  r  rE   绽|=)r#  r  r   r*   r   r   r2   r2   r3   test_positional_deprecation  s    z$TestPinv.test_positional_deprecation)rz   r{   r|   r   r  r   r  r  r  rm   r  r  r#  r$  rh  r)   r  r  r2   r2   r2   r3   r  V  s   	r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestPinvSymmetricc                 C   s   t jd d S r   r   r   r2   r2   r3   r     s    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    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   r-  r  r   r   rA   )
r   r  r*   r   r   rA  Zsvdr   r   r   )rT   rU   rX   r  vtr  Za_pinvhr2   r2   r3   test_nonpositive  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     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    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;   rM   r>   r?   vk?gﭣ>gu>r<   )r;   rM   r>   r?   r  rE   rE   r  g1?r  r   r  r  gdy=r  -C6?)	r"   r*   r
   r  rg   r   r   r   r   )rT   r   r  r  rU   r  r  r  r  r  r  r2   r2   r3   r    s$    z TestPinvSymmetric.test_atol_rtolN)	rz   r{   r|   r   r  r  r   r  r  r2   r2   r2   r3   r    s   
r  scale)g#B;r7   @xDpinv_c                 C   sD   t ddgddgg|  }t dt | }||}t|| d S )Nr?   r   r  r7   )r*   r   rg   r   )r  r  r^   r   Z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 ]`}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 ]`}t jg d
|d}tdt |jjd }tt|t 	d|d tt|dt 	d|d qvd S )NZAllFloatr   r   gV瞯<r8   rC   r  r>   Complex)rc   r`   y              @)
r*   ri  r   maxr/   r0   realr   r   sqrt)rT   rw   r^   r!  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 n, ty^   d}tt|d d	|d
 Y n0 d S )N     @r?   i'  r   ru   r  r  zO: Result should equal either 0.0 or 0.5 (depending on implementation of snrm2).rE   )r  )r   r	   r   r   AssertionErrorr   )rT   rU   rV  r2   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)r?   r   rM   r   r>   r   rM   )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>   r?   rM   r;   r7  r  5D+@6f~@rc  )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>   r?   rM   r;   r7  T)r  keepdimsr  r  )r>   r?   r>   rn   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  )Zfree_mbl        r   r?   rA   r7   )r&   r*   r   r,   r   r   )rT   r^   r   r2   r2   r3   test_large_vector/  s    
z!TestVectorNorms.test_large_vectorN)rz   r{   r|   r  r  r  r  r  r  r#  r$  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S )TestMatrixNormsc           	   
   C   s   t jd dD ]\}}t jt jt jt jt jfD ]}dt j||	| }t 
|jt jr|dt j||  	|}t j}nt j}d ddddd	t jt j fD ]L}t||d
}t jj||d
}t ||st jj|	||d
}t|| qq0qd S )Nr   )re   )r?   rM   )rM   r?   )r;   r;   r=  )r   r;   r   y              $@Zfror?   rA   r>   )ord)r*   r
   r   r	   r,   r  r.   Zint64r  r
  Z
issubdtyperw   Zcomplexfloatingrf  r   rA  Zallcloser   )	rT   r   r  rX  r   Zt_highorderactualZ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o|jkn   t|ddd}tt |dddd	d}t|t jd	d}t|| t|| t|| t|j|j  ko|jkn   d S )
Nr>   r?   rM   r;   r7  rs  )r  r  r   r   )r*   r   r   rf  swapaxesr   r   r   )rT   rU   r]   rW  r7  r2   r2   r3   r  O  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   r7  r   r>   rM   r;   r   rs  T)r  r  r  r?   r   )r*   r   rR   r   rf  r   r   r   )rT   rU   r]   rW  r2   r2   r3   r  `  s
    
z!TestMatrixNorms.test_keepdims_kwdN)rz   r{   r|   r  r  r  r2   r2   r2   r3   r  9  s   r  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestOverwritec                 C   s   t tddg d S NrM   rM   r   )r%   r   r   r2   r2   r3   
test_solvei  s    zTestOverwrite.test_solvec                 C   s   t tddg d S r  )r%   r   r   r2   r2   r3   test_solve_triangularl  s    z#TestOverwrite.test_solve_triangularc                 C   s   t dd ddg d S )Nc                 S   s   t d| |S )NrI   )r   )rV   r]   r2   r2   r3   <lambda>p      z1TestOverwrite.test_solve_banded.<locals>.<lambda>)r;   r<   r<   r$   r   r2   r2   r3   test_solve_bandedo  s    zTestOverwrite.test_solve_bandedc                 C   s   t tddg d S )N)r>   r<   r  )r%   r   r   r2   r2   r3   test_solveh_bandeds  s    z TestOverwrite.test_solveh_bandedc                 C   s   t tdg d S Nr  )r%   r   r   r2   r2   r3   test_invv  s    zTestOverwrite.test_invc                 C   s   t tdg d S r  )r%   r   r   r2   r2   r3   test_dety  s    zTestOverwrite.test_detc                 C   s   t tddg d S )N)rM   r>   r   )r%   r   r   r2   r2   r3   
test_lstsq|  s    zTestOverwrite.test_lstsqc                 C   s   t tdg d S r  )r%   r   r   r2   r2   r3   	test_pinv  s    zTestOverwrite.test_pinvc                 C   s   t tdg d S r  )r%   r   r   r2   r2   r3   
test_pinvh  s    zTestOverwrite.test_pinvhN)rz   r{   r|   r  r  r  r  r  r  r  r  r  r2   r2   r2   r3   r  h  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   sB   t g d}t g d}t||}tt||}t|| d S N)r?   r>   rM   r   )r?   rA   r?   r   )r*   r   r   r   r   r   rT   rW  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r?   r>   r   r  r;   rM   r*   r   r   rR   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;   rM   r>   r  r  r2   r2   r3   test_basic3  s
    
zTestSolveCirculant.test_basic3c                 C   sJ   t g d}t dddd }t||}tt||}t|| d S )N)r+  r  r   r   r/  r;   r>   y              ?r  r  r2   r2   r3   rd     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r?   r?   r   r   )r?   r>   rM   r;   r   )Zsingular)r*   r   r   r   r   r   rp   r   )rT   rW  r]   r^   r  r   Zrnkr  r2   r2   r3   test_singular  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)rA   g      @rM   g      @)r?   r<   r<   g      @)r   r   r?   r?   r  )r?   rA   r   r   r?   )baxis)r;   r>   rM   r   rA   )r
  Zoutaxis)r>   rM   r;   r>   )Zcaxis)r*   r   r   r   r   
empty_liker   r   r   r   Zmoveaxisr  )rT   rW  r]   r^   r   r2   r2   r3   test_axis_args  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   ry     s
    
z-TestSolveCirculant.test_native_list_argumentsN)rz   r{   r|   r  r  r  rd   r  r	  r  ry   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)rp   rq   r!   r   r2   r2   r3   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 )Nr?   r>   rM   )rp   rq   r!   r*   r   rf  nanr   r2   r2   r3   test_infnan_arg  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  r?   r   r   )r!   r*   r   r   difflog2rg   )rT   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)r?   r   r  )r?   r?   r  )r  g      Y@r?   )r*   r   r!   r   r   r   )rT   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  r?   r   Zseparater   r>   )r!   r*   r   r   r  r  r   r   )rT   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 )Nr  r  r?   r  )r   r?   r<   r   r;   rM   r>   )r    r*   r   r   r!   r   Z	ones_liker   )rT   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|\}}t|dd\}\}}t |}t |jd ||< t|t ||d d f  tt||	|| qnd S )N)rE   rE   rE   rE   >)rE   rE   rE   rE   rE   )rL   rL   rE   rE   rE   )rE   rE   r  rE   rE   )r)  rE   rE   rE   )rE   r?  rE   rE   )r7   rE   r)  rE   )rE   r7   rE   r?  )rF  rE   r7   rE   )r?  r?         r7   )rF  r  r  rE   )r?  r  r7   r?  r?   r  r   )
r*   r   r!   r  r   r   r   rg   r   r   )rT   Zcasesr   r^   r  r  pipr2   r2   r3   test_perm_and_scaling  s0    



z(TestMatrix_Balance.test_perm_and_scalingN)
rz   r{   r|   r  r  r  r  r  r  r  r2   r2   r2   r3   r    s   r  )r   )Or  r   numpyr*   r   r   r   r   r   r   r   r	   Znumpy.randomr
   Znumpy.testingr   r   r   r   r   r   r   r#  r   rp   Zscipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Zscipy.linalg._testutilsr%   Zscipy._lib._testutilsr&   r'   Zscipy.linalg.blasr(   Zscipy._lib.deprecationr)   r,   r+   rz  r  r.   r-   r  ZDTYPESr4   r5   r}   r   r&  r,  r5  rn  ro  r  r  r$  rh  r  r  r  r  r  r  r2   r2   r2   r3   <module>   sT   ($L
   =  M>+ 
	  "_?</U