o
    ?Hh#4                    @   s  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	l/m0Z0 ej
ej1ej2fZ3ej4ej5ej6fZ7e3e7 Z8d
d Z9G d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Z?d/ddZ@G dd dZAG dd dZBG dd dZCejDEd d!ejDEd"eefd#d$ ZFG d%d& d&ZGG d'd( d(ZHG d)d* d*ZIG d+d, d,ZJG d-d. d.ZKdS )0    N)arangearraydotzerosidentity	conjugate	transposefloat32)random)assert_equalassert_almost_equalassert_assert_array_almost_equalassert_allcloseassert_array_equalsuppress_warnings)raises)solveinvdetlstsqpinv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_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/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_basic.py	_eps_cast   s   

r4   c                
   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
ejjejdeeejeejgejdeeejeejg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         r9   r?   r                 r9   r=   r?   r@   r<   r9   rD   r;   r@   rC   r   r?   rB   r   r   r?   r@         $@rF          @g      ,@rB   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(   6   zTestSolveBanded.test_realc                 C   r6   )Nr7   r:   )               @r@   r9   rb   rA   rF   r9   r=   rb   rG   rH   )rb   rB   r   r   rJ   rL   rF   rM   y              ,@rB   r@   r?   r;   r<   rN   rO   )r   r   r                 ?rQ   rR   rT   r2   r2   r3   test_complex@   ra   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 )NrE   rG   rH   r   r@   r?   rB   rK   r;   r<   rN   rO   rP   rQ   r@   r@   r   r)   diagrS   r   r   r   	rU   rW   rV   rZ   r[   r\   r]   r^   r_   r2   r2   r3   test_tridiag_realX   .   2z!TestSolveBanded.test_tridiag_realc           	      C   rg   )Nrc   rG   rH   r   r@   r?   rB   rd   r;   r<   rN   rO   rP   rQ   rh   ri   rk   r2   r2   r3   test_tridiag_complexl   rm   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 )Nr7   r:   r>   rA   rE   rG   rH   rI   rJ   rK   Fcheck_finite)r   r   r   r   )rU   rV   rW   rX   rY   rZ   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 )NrE   rG   rH   rI   rJ   )r8   rM         @      @rB   r<   r8   rM   rh   )r   rS   assert_raises
ValueErrorr   )rU   rW   rX   rY   badr2   r2   r3   test_bad_shape   s   zTestSolveBanded.test_bad_shapec                 C   s   t g dg}t g dg}tddgg|}t||dd tddgdgdgg|}t||dd t|jtd	 t|g dg d S )
Nr8   rM   rr   )      ?r8   g      ?r   r   r?   V瞯<rtolrh   r   f8)r   r   r   r   dtyper)   r   )rU   r^   refr_   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 )Nr7   r:   r>   rA   rE   rG   rH   rI   rJ   rK   )r   r   r   )rU   rV   rW   rX   rY   r^   r_   r2   r2   r3   test_native_list_arguments   s   z*TestSolveBanded.test_native_list_argumentsdt_abdt_bc                 C   s   t jg g|d}t jg |d}td||}|jdksJ |jtt jd|dt jd|djks1J t jd|d}td||}|jdksEJ |jtt jd|dt jd|djksZJ d S )Nr   rz   r   r@   )	r)   r   r   shaper   r   eyeonesemptyrU   r   r   rW   r^   r_   r2   r2   r3   
test_empty   s   *.zTestSolveBanded.test_emptyN)__name__
__module____qualname__r`   rf   rl   rn   rq   rw   r   r   pytestmarkthread_unsafeparametrizeintfloatr)   r	   complex	complex64r   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ejd-eeeje ej!gejd.eeeje ej!gd/d0 Z"d1S )2TestSolveHBandedc                 C   B   t g dg dg dg}t g d}t||}t|g d d S NrF   rF   rM   rM   r8   r8   r8   rs   rs   rs   rs   r8   rs   r8   rM   rF   r8   rF   rF   r   r   r   rU   rW   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   r8         @rs   rM   rF   r   rU   rW   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   rB   r@   r   r   rS   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   r8   r8   r8   r   rM   rM   rF   rF   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   r8   r   rs   rM   Tr   rF   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   r8   r   rs   rM   rF   r   r   r2   r2   r3   test_02_float321  s(   
z TestSolveHBanded.test_02_float32c                 C   r   )Nr   r                r   r   r   )       @            @            @      ?       @      ?)rF   r8   r8   rF   r   r   r2   r2   r3   test_01_complexF  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   re   rF   r8   r   r   r2   r2   r3   test_02_complexT  r   z TestSolveHBanded.test_02_complexc                 C   <   t g dg dg}t g d}t||}t|g d d S )Nr   r8   r8   rs   rs   rs   r8   rs   r8   rF   r8   rF   r   r   r2   r2   r3   test_tridiag_01_upperi     
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   r8   rs   rM   rF   r   r   r2   r2   r3   test_tridiag_02_uppert     
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   rB   r@   r   r   r   r2   r2   r3   test_tridiag_03_upper  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   r8   r8   r   r   Tr   r   r   r   r2   r2   r3   test_tridiag_01_lower  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   r8   rs   rM   Tr   rF   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   r8   rs   rM   rF   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   )rF   r8   r8   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   rs   rF   re   r8   r   r   r2   r2   r3   test_tridiag_02_complex  r   z(TestSolveHBanded.test_tridiag_02_complexc                 C   r   )Nr   r   r   Fro   r   r   r   r2   r2   r3   rq     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   r8   rs   rM   )r   rt   ru   r   )rU   rW   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?   rN   rx   r~   )r   r   r   r   r)   )rU   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_argumentsr   r   c                 C   s   t jg g|d}t jg |d}t||}|jdksJ |jtt jd|dt jd|djks0J t jd|d}t||}|jdksCJ |jtt jd|dt jd|djksXJ d S )Nr   r   r@   rz   )	r)   r   r   r   r   r   r   r   r   r   r2   r2   r3   r     s   
*
.zTestSolveHBanded.test_emptyN)#r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   r   r   r   r   r)   r	   r   r   r   r2   r2   r2   r3   r      s4    		r   c                
   @   s  e Zd Zdd Zejj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ejjejd/d0d1d2 Zd3d4 Zd5d6 Z d7d8 Z!d9d: Z"d;d< Z#d=d> Z$ejj%d?d@dAdB Z&ejjejdCe'e(e)j*e+e)j,gejdDe'e(e)j*e+e)j,gdEdF Z-dGdH Z.ejdIe)j/e)j0gejdJg dKejdLdMdNgejdOdPdQgejdRdPdQgejdSdPdQgdTdU Z1dVS )W	TestSolvec                 C      t jd d S N  r)   r
   seedrU   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 )Nr@   r8   r                   333333?r   r   r   )rU   rV   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 )Nr@   r9   r;   r<   r   r?   r   rU   rV   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?   rb   r<   Dre   r   r@   r   )r   r   r   r   r   r2   r2   r3   test_simple_complex2  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?   rN   r   r   r@   r@   r   posassume_ar   r   rU   rV   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<   re   r   r   r   r   r   r2   r2   r3   test_simple_pos_complexbE     z"TestSolve.test_simple_pos_complexbc                 C   r   )	Nr?   rN   r   r@   r   symr   r   r   r2   r2   r3   test_simple_symM  r   zTestSolve.test_simple_symc                 C   r   )Nr   r?   re   r   r   r   r   r   r2   r2   r3   test_simple_sym_complexbV  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   re   r   r@   r?   r   r   r   r   r2   r2   r3   test_simple_sym_complex^     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?   rN   r   r   r@   r   re   herr   r   r   r2   r2   r3   test_simple_her_actuallysymg  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   re   r   r@   r?   r   r   r   r   r2   r2   r3   test_simple_herq  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?   re   r   r   r   )r
   r   r   r   r   r   r   )rU   nAXAinvRirr2   r2   r3   test_nils_20Feb04z  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 )Nr9   皙?r<   rN   r
   ranger   r   r   rU   r   rV   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 )Nr9   re   r  r?   rN   r  r	  r2   r2   r3   test_random_complex  s   
zTestSolve.test_random_complexc                 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 )Nr9   r  r<   r   r   )r
   r  absr   r   r   rU   r   rV   r  jr^   r_   r2   r2   r3   test_random_sym  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 )Nr9   re   r  rb   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 )	Nr@   r9   r;   r<   r   r?   Fro   r   r   r2   r2   r3   rq     s   zTestSolve.test_check_finitec                 C   s8   d}g d}t ||}t| | t|jdkd d S )Nr@   r   rN   z'Scalar_a_1D_b test returned wrong shape)r   r   ravelr   r   r   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=
)r8   rB   rN   r   )rN   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  )rU   rV   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@   
   rN   	   r   r   )      "@r  r8   r   r)   r   rS   r   trilr   r   rU   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   rt   r   r   rU   rV   r^   r2   r2   r3   test_singularity  s   
	zTestSolve.test_singularity	structure)	diagonaltridiagonallower triangularupper triangular	symmetric	hermitianpositive definitegeneralNc                 C   sz   t jd}d}t dd|}t |}|j|d}d}tjt|d t|||d W d    d S 1 s6w   Y  d S )	Nl   Ej] r  r   2   sizezIll-conditioned matrix...matchr   )	r)   r
   default_rnglogspacerj   r   warnsr#   r   )rU   r&  rngr   dr   r^   messager2   r2   r3   test_ill_condition_warning	  s   
"z$TestSolve.test_ill_condition_warningc                 C   s2   t d}t jddd}t||}t|| d S )Nr?   rN   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  rN   r@   T
transposed)r   g?r@   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 )NrN   Tr=  )r)   r   astyper   rt   NotImplementedErrorr   rU   rV   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?   rt   ru   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 )NrN   r<   )r   r   r)   r   r   rt   ru   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@   zxcvr   rD  r   r2   r2   r3   test_assume_a_keyword1  rF  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| d| d| }t j||	|}	t j|	|}
|r[|	dt j|| 	| }	|d	kre|	|	j
 }	n|dkrq|	|	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: z, assume_a: z,dtype: re   r   r   r  -q=gư>)rM  r   r   r   atolr}   err_msgT)r   r>  )r)   r	   r+   r   r-   	itertoolsproductr
   randnr@  r  r  r   r   r   r   )rU   sizes	assume_asdtypesr1  r   r   
is_complexrQ  rV   r^   tolr_   r2   r2   r3   'test_all_type_size_routine_combinations4  sV   z1TestSolve.test_all_type_size_routine_combinationsdt_ar   c                 C   f   t jd|d}t jd|d}t||}|jdksJ tt jd|dt jd|dj}|j|ks1J d S Nrz   r   r   r?   )r)   r   r   r1  r   r   r   rU   r[  r   rV   r^   r_   dt_nonemptyr2   r2   r3   r   e  s   
 zTestSolve.test_emptyc                 C   @   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)   r   r   r   r1  r   r   r2   r2   r3   test_empty_rhsq  
   

zTestSolve.test_empty_rhsr   r   )r'  r(  bandedr)  r*  r+  r,  r.  r   r   rM  nrhsr2   )r   r>  TF	overwritefortranc                 C   sj  t jd}|dksdnd}|j|f| d}	|j||fd}
t |t jr?|	|j|f| dd  }	|
|j||fdd  }
|dkrLt t |
}
nn|dkrVt |
}
nd|d	kr`t |
}
nZ|d
krt t |
t t |
dd t t |
dd }
n9|dkrt t |
dd}
n*|dv r|
|
j }
n |dv r|
|
	 j }
n|dv r|
|
j }
|
t |
j
dd7 }
|rt |
}
|
jdd}|	 }t |t jr|rd}tjt|d t|
|	|||d W d    d S 1 sw   Y  d S t|
|	||||d}t j|r|jn||}t|| |dkr$tt|||d| |s3t|
| t|	| d S d S )Nl   q~u rd  r   r9   r0  re   r'  r)  r*  r(  rB   r@   r?   >   r   r+  >   r   r,  >   r   r-  axisr   )orderz#scipy.linalg.solve can currently...r2  )overwrite_aoverwrite_br>  )rk  rl  r>  r   r=  )r)   r
   r4  
issubdtypecomplexfloatingrj   r!  triur  r  sumasfortranarraycopyr   r   rA  r   linalgr   r   )rU   r   r   re  r>  rf  rg  r7  r   r^   r   A_copyb_copyr9  r  r   r2   r2   r3   test_structure_detectionx  sj   







z"TestSolve.test_structure_detectionN)2r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  rq   r  r  r  r  r#  r%  r   r:  r<  r?  rC  rE  rG  rI  skiprZ  r   r   r)   r	   r   r   r   rb  r+   r-   rv  r2   r2   r2   r3   r     sd    
	
			
	


/	r   c                	   @   sl   e Zd Zdd Zdd Zdd Zejde	e
ejeejgejde	e
ejeejg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   Fry   r   transr8         N)r   r   r   r  r   rU   r   r^   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   re   r?   Tr@   rz  y      ?      y      п      пry         ?       @y             y      ?      ?y      ?      y            пFr|  N)r   r   r   r   r)   rj   r  r}  r2   r2   r3   r     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 )ry  r@   r   r?   TF)r   rp   N)r   r   r   r}  r2   r2   r3   rq     s   z%TestSolveTriangular.test_check_finiter[  r   c                 C   r\  r]  )r)   r   r   r1  r   r   r   r^  r2   r2   r3   r     s   
zTestSolveTriangular.test_emptyc                 C   r`  ra  )r)   r   r   r   r1  r   r   r2   r2   r3   rb  
  rc  z"TestSolveTriangular.test_empty_rhsN)r   r   r   r   r   rq   r   r   r   r   r   r)   r	   r   r   r   rb  r2   r2   r2   r3   rx    s    	rx  c                   @   s`   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
deeejeejg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 )Nr@   r?   rN   r<   r   r<   r   r=   rC      r  )r   r   r   r)   r   rU   rV   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 )Nr9   r<   r  r  r
   r   r   r   r   rU   r   r  rV   r  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?   rN   r   r   r   r   r   r  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 )Nr9   r<   rb   r  r  r  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?   rN   r<   Fro   r   r  r  r2   r2   r3   rq   7  s    zTestInv.test_check_finiter1   c                 C   F   t jd|d}t|}|jdksJ |jtt jd|djks!J d S r]  )r)   r   r   r1  r   r   )rU   r1   rV   r  r2   r2   r3   r   <     "zTestInv.test_emptyN)r   r   r   r   r   r
  r   r  rq   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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ejdeeejeejg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
   r4  r7  r   r2   r2   r3   r   E     zTestDet.setup_methodc                 C   s   t dgg}t|}|jjdksJ t |sJ |dks J t jdggggdd}t|}|jjdks7J |jdks>J t|dgg t jdgggt jd}t|}|jjdks\J |jd	kscJ t|dg d S )
Nr@   r8  r8   fr   rh   y      ?      @r   )r@   )	r)   r   r   r   charisscalarr   r   r   rU   rV   detar2   r2   r3   test_1x1_all_singleton_dimsH  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sBJ |jdksIJ t|t	| d S )N)r<   r   r@   r@   r   r8  r<   r   re   r   )r7  r
   r)   r	   r   r   r  r   r   squeezer   r  r2   r2   r3   test_1by1_stacked_input_outputY  s    z&TestDet.test_1by1_stacked_input_outputr   r?   r9   )rN   r?   r9   r9   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      r8   r0  re   r|  ry   )r7  uniformr   r)   rs  r   )rU   r   rV   d1d2r^   d3d4r2   r2   r3   #test_simple_det_shapes_real_complexf  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@   rB   r@   rB   r@   rB   r@   rB   )r@   r@   rB   rB   r@   r@   rB   rB   )r@   rB   rB   r@   r@   rB   rB   r@   )r@   r@   r@   r@   rB   rB   rB   rB   )r@   rB   r@   rB   rB   r@   rB   r@   )r@   r@   rB   rB   rB   rB   r@   r@   )r@   rB   rB   r@   rB   r@   r@   rB   g      @   r   rF   )r   r                 r  )r   r         ?        r  )re   r  r   r   )r  re   r   r   r   y      @        )g             r8   rF   rF   rF   rF   rF   )r8   rF   rF   rF   rF   rF   rF   rF   )rF   g      rF   g      r8   rF   rF   rF   )rF   r8   rF   rF   rF   rF   rF   rF   )rF   rF   rF   g      rF   g      r8   rF   )rF   rF   rF   r8   rF   rF   rF   rF   )rF   rF   rF   rF   rF   g       rF   g      ")rF   rF   rF   rF   rF   r8   rF   rF   re   r  )r)   r   r   r   r   rS   r   rB  r2   r2   r3   test_for_known_det_valuesq  s>   


z!TestDet.test_for_known_det_valuestypc                 C   s   g | ]}|d vr|qS )gGr2   ).0r_   r2   r2   r3   
<listcomp>  s    zTestDet.<listcomp>AllNc                 C   s8   d}| j ||g|}tt|tjtjB sJ d S )Nr<   )r7  r
   r@  
isinstancer   r)   r+   r-   )rU   r  r   rV   r2   r2   r3   "test_sample_compatible_dtype_input  s   z*TestDet.test_sample_compatible_dtype_inputc              	   C   sB  d}t dg dD ](\}}tt|d ttjddggd |d W d    n1 s,w   Y  q	tt|d ttjd	d
ggd dd W d    n1 sQw   Y  tt|d ttjddggd dd W d    n1 suw   Y  tt|d ttjddggd dd W d    d S 1 sw   Y  d S )Nz!cannot be cast to float\(32, 64\)SUO)bytes8str32objectr2  rV   r^   r?   r      a   bVrL     zdatetime64[s]ztimedelta64[s])ziprt   	TypeErrorr   r)   r   )rU   msgctr2   r2   r3   test_incompatible_dtype_input  s   "z%TestDet.test_incompatible_dtype_inputc                 C   sP  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 sFw   Y  ttd	d ttg  W d    n1 scw   Y  ttdd ttg g W d    n1 sw   Y  ttdd ttg gg W d    d S 1 sw   Y  d S )
Nr   r8   )r   r   r   rN   r   r   r8   r8   r8   zLast 2 dimensionsr2  )r   r   rN   zat least two-dimensional)r   r   r)   r   r   rt   ru   r   r2   r2   r3   test_empty_edge_cases  s   ""zTestDet.test_empty_edge_casesr1   c                 C   s   t jd|d}t|}|jdksJ |jtt jd|djks!J t jd|d}t|}|jdks3J |jtt jd|djksBJ d S )Nrz   r   r2   r?   r  r  )rN   r@   r@   )r)   r   r   r   r   r   r   )rU   r1   rV   r8  r2   r2   r3   test_empty_dtype  s   "zTestDet.test_empty_dtypec                 C   sL   t dddt j}| }t|dd}t|d ||k r$J d S )Nr  rN   Trk  rF   )	r)   r   rS   r@  r	   rr  r   r   all)rU   rV   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)rM   rF   r8   )      @rr   r  r  F)writeTr  rL   )r)   r   setflagsr   r   rB  r2   r2   r3   test_readonly_array  s   zTestDet.test_readonly_arrayc                 C   sL   ddgdt jgg}ttdd t| W d    d S 1 sw   Y  d S )Nr@   r?   rN   zarray must not containr2  )r)   infrt   ru   r   rB  r2   r2   r3   test_simple_check_finite  s   
"z TestDet.test_simple_check_finite)r   r   r   r   r  r  r   r   r   r  r  r)   	typecodesr  r  r  r   r   r	   r   r   r  r  r  r  r2   r2   r2   r3   r  D  s     

$%

r  c                 C   s2   t | }|r
t|}t|| }t||}t||S )N)r   r   r   r   )rV   r^   cmplxata1b1r2   r2   r3   direct_lstsq  s   


r  c                	   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zej	
d
eej	
ddej	
deej	
dddd Zej	jeddej	
d
eej	
ddej	
deej	
dddd Zdd Zdd Zdd Zdd Zej	
deeejeejgej	
deeejeejgd d! Zd"S )#	TestLstsq)gelsdgelssgelsyNc                 C   s   t D ]b}tjddgddgg|d}tjD ]O}dD ]J}dD ]E}| }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 )Nr@   r9   r;   r<   r   TF)r@   r   r   r  )rJ   r;   r<   lapack_driverrk  rl  r   r?   expected efficient rank 2, got r  driver: rO  )REAL_DTYPESr)   r   r  lapack_driversrr  r   r   r   r   r4   r   )rU   r   rV   r  rf  btr  r^   r  outr_   r  r2   r2   r3   test_simple_exact  s6   
zTestLstsq.test_simple_exactc              
   C   s8  t D ]}tjddgddgddgg|d}tjg d|d}tjD ]x}dD ]s}| }| }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 )Nr@   r?   r<   r   rN   r   r   r  r  r   r  r  rh  r  r  r}   rP  rQ  )gm۶mۿgm۶m?)r  r)   r   r  r  rr  r   rp  r   r   r   r  r4   r   )rU   r   rV   r^   r  rf  r  r  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 ]|}dD ]w}| }| }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 )Nr  r?   r<   r   rN   r   )r@   r   rN   r  r  r   r  r@   r  rh  r  r  r  )yu{޿E(B?yӽu{?(YJV?)COMPLEX_DTYPESr)   r   r  r  rr  r   r   rp  r  r   r   r  r4   r   )rU   r   rV   r^   r  rf  r  r  r  r_   r  r  r  r2   r2   r3   test_simple_overdet_complex  sB    
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 ];}| }| }t|||||d}|d }	|d }
t|
dkd	|
  t|	d
dt	|j
 dt	|j
 d| d q!qqd S )Nr   r  r   r@   r?   r  r  r   r  )gqqgqq?gdq?r  r  r  )r  r)   r   r  r  rr  r   r   r   r4   r   )rU   r   rV   r^   r  rf  r  r  r  r_   r  r2   r2   r3   test_simple_underdet>  s,   
zTestLstsq.test_simple_underdetr   r   )r9   r  r  rf  r  c                 C   s4  t jd}t j|||g|d}t|D ]}dd|||f   |||f< qtdD ]l}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 q+t	t
|||dt|	j dt|	j d| d q+d S )Nr   r   r9   r  r<   rN   r  r   r?   expected efficient rank , got i  r  r    )r)   r
   RandomStateasarrayr  rr  r   r   r	   r   r   r4   r   rU   r   r   r  rf  r7  rV   r  r^   r  r  r  r_   r  r2   r2   r3   test_random_exactT  s@   


zTestLstsq.test_random_exactz$may segfault on Alpine, see gh-17630rJ  c                 C   sF  t jd}t j|||gd|||g  |d}t|D ]}dd|||f   |||f< qtdD ]l}t j||dg|d}| }	| }
t|	|
|||d}|d	 }|d }t||kd
| d|  |t ju rt	t
|||dt|	j dt|	j d| d q4t	t
|||dt|	j dt|	j d| d q4d S )Nr   re   r   r9   r  r?   rN   r  r   r  r  i  r  r  r  )r)   r
   r  r  r  rr  r   r   r   r   r   r4   r   r  r2   r2   r3   test_random_complex_exactx  sB   "


z#TestLstsq.test_random_complex_exactc                 C   s(  t jd}tD ]}dD ]\}}tjD ]|}dD ]w}t j|||g|d}t|D ]}dd|||f   |||f< q)tdD ]O}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 q>qqqqd S )Nr   )r9      )r  r?   r  r   r9   r  r<   rN   r  r   r?   r  r  r  r  r  r  )r)   r
   r  r  r  r  r  r  rr  r   r   r   r  r4   r   rU   r7  r   r   mr  rf  rV   r  r^   r  r  r  r_   r  r2   r2   r3   test_random_overdet  sB   
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< q2tdD ]O}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 qGqqqqd S )Nr   r  r  re   r   r9   r  r?   rN   r  r   r  r  r@   r  r  r  r  )r)   r
   r  r  r  r  r  r  rr  r   r   r   r  r4   r   r  r2   r2   r3   test_random_complex_overdet  sF   
"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 ]P\}}}}}|
|}tj||d}	| }
|	 }t|
|||||d}|d }|d }t|dkd	|  tt|||	d
t|j d
t|j d| d q(d S )NzIinternal gelsd driver lwork query error,.*Falling back to 'gelss' driver.))r@   r9   r  r  r  r   )r  rp   rk  rl  r   r?   r  r  r  r  )r   filterRuntimeWarningr)   r   rR  rS  r  r  r  r@  rr  r   r   r   r   r4   r   )rU   supr  r   r  r  rf  rp   rV   r^   r  r  r  r_   r  r2   r2   r3   rq     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?   r@   r   r   rh  r?   zexpected rank 0)	r)   r   r   r   r   r   rs  r   r   )	rU   a_shapeb_shaper^   r_   residuesranksresidues_should_ber2   r2   r3   r     s   
"
zTestLstsq.test_emptyr[  r   c           
      C   sr   t jd|d}t jd|d}t||\}}}}|jdksJ tt jd|dt jd|dd j}	|j|	ks7J d S r]  )r)   r   r   r1  r   r   r   )
rU   r[  r   rV   r^   r_   r  r  r  r_  r2   r2   r3   r    s   $zTestLstsq.test_empty_dtypeN)r   r   r   r  r  r  r  r  r   r   r   r  r  skipifr'   r  r  r  r  rq   r   r   r   r)   r	   r   r   r  r2   r2   r2   r3   r    s0    !   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dd Z	dd Z
dd Zejdeejeejg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   r  r  r   rN   r   r   r   r   r   r)   r   rU   rV   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   r  r  r   re   )r  r  rC   )r=   r   r<   )rN   r?   r@   rN   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  rC   r  r  r   g|qgԕVUUſgc8?gqg^0<gq?g9?gԕVUU?g:87ȿr   r   r   r   rU   rV   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   r  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 )
Nr@   r?   rN   r<   r   r=   r   )gDpTUUgQUUտgvWUU?)gDpTUU?gQUU?g&>ڿr  r	  r2   r2   r3   test_simple_rows1  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  Fro   rN   )r   r   r   r   r)   r   r   r2   r2   r3   rq   8  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@rC   r   gMbP?rz   h㈵>g?rF   rP  r}   gMb@?rP  gvIh%,=g;O@{Gz?r|   )r"   r)   r
   r;  r   rS   rr  r   r   rs  r   )rU   r   q_a_mrV   rP  r}   a_padiff1adiff2r2   r2   r3   test_atol_rtolE  s"   zTestPinv.test_atol_rtolr1   c                 C   r  r]  )r)   r   r   r1  r   r   rU   r1   rV   r  r2   r2   r3   r   `  r  zTestPinv.test_emptyN)r   r   r   r   r  r   r
  r  r  rq   r  r  r   r   r   r   r)   r	   r   r   r   r2   r2   r2   r3   r    s    r  c                   @   sf   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	e
jdeejeejgdd ZdS )TestPinvSymmetricc                 C   r   r   r   r   r2   r2   r3   r   j  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  m  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   rB   )
r   r   r)   r   r  rs  svdr   r   r   )rU   rV   rY   r  vtr  a_pinvhr2   r2   r3   test_nonpositives  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   sT   t g dg dg dg}t|}t|| | |dd t|| | |dd d S )N)r@   rB   r   )rB   r?   rB   )r   rB   r@   r{   r  )r)   r   r   r   )rU   rV   pr2   r2   r3   test_zero_eigenvalue  s   z&TestPinvSymmetric.test_zero_eigenvaluec                 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<   rN   r?   r@   vk?gﭣ>gu>r=   )r<   rN   r?   r@   r#  rF   rF   r  g1?r  r  r|   rN  gdy=r  -C6?)	r"   r)   r
   r;  rj   r  r   r   r   )rU   r   r  r  rV   r  rP  r}   r  r  r  r2   r2   r3   r    s$   z TestPinvSymmetric.test_atol_rtolr1   c                 C   sF   t jd|d}t|}|jdksJ |jtt jd|djks!J d S r]  )r)   r   r   r1  r   r   r   r  r2   r2   r3   r     r  zTestPinvSymmetric.test_emptyN)r   r   r   r   r  r  r   r  r"  r  r   r   r   r   r)   r	   r   r   r   r2   r2   r2   r3   r  h  s    
r  scale)g#B;r8   @xDpinv_c                 C   sD   t ddgddgg|  }t dt | }||}t|| d S )Nr@   r   g|=r8   )r)   r   rj   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   r{   r9   rD   r|   r?   Complex)re   rb   y              @)
r)   r  r   maxr.   r/   realr   r   sqrt)rU   r   r_   rY  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   rB  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     @r@   i'  r   ry   r  r  zO: Result should equal either 0.0 or 0.5 (depending on implementation of snrm2).rF   )rQ  )r   r	   r   r   AssertionErrorr   )rU   rV   r  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   rN   r   r?   r   rN   )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@   rN   r<   r8  rh  5D+@6f~@r  )r)   r   r   r   rB  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@   rN   r<   r8  T)ri  keepdimsr6  r7  )r?   r@   r?   rr   g      @)r)   r   r   r   r   r   r$  r2   r2   r3   test_keepdims_kwd  s
   (z!TestVectorNorms.test_keepdims_kwdz64-bit BLAS requiredrJ  c                 C   s<   t dd tjdgtjd}d|d< t|}~t|d d S )NihB  )free_mbl        r   r@   rB   r8   )r&   r)   r   r+   r   r   )rU   r_   r  r2   r2   r3   test_large_vector  s   
z!TestVectorNorms.test_large_vectorN)r   r   r   r0  r1  r4  r5  r8  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d Zd	S )
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   )rh   )r@   rN   )rN   r@   )r<   r<   r  )r   r<   r  y              $@fror@   rB   r?   )ord)r)   r
   r   r	   r+   r   r-   int64rT  r@  rm  r   rn  r  r   rs  allcloser   )	rU   r   r  r  r   t_highrj  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?   r@   rN   r<   r8  r  )r@  ri  r   r   )r)   r   r   r  swapaxesr   r   r   )rU   rV   r^   r  r8  r2   r2   r3   r8    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   r8  r   r?   rN   r<   r   r  T)r@  ri  r9  r@   r   )r)   r   rS   r   r  r   r   r   )rU   rV   r^   r  r2   r2   r3   r:  "  s
   
z!TestMatrixNorms.test_keepdims_kwdc                 C   s   t d}tt|d tt|ddt d tt|ddt d t d	}tt|d tt|ddt d
 tt|ddt d d S )Nrz   rF   r   rh  r   T)r9  rh   )r   rN   r  )r)   r   r   r   r   rB  r2   r2   r3   r   )  s   

zTestMatrixNorms.test_emptyN)r   r   r   rF  r8  r:  r   r2   r2   r2   r3   r=    s
    r=  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestOverwritec                 C      t tddg d S NrN   rN   r  )r%   r   r   r2   r2   r3   
test_solve6  r  zTestOverwrite.test_solvec                 C   rJ  rK  )r%   r   r   r2   r2   r3   test_solve_triangular9  r  z#TestOverwrite.test_solve_triangularc                 C   s   t dd ddg d S )Nc                 S   s   t d| |S )NrJ   )r   )rW   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   rJ  )N)r?   r=   rP  )r%   r   r   r2   r2   r3   test_solveh_banded@  r  z TestOverwrite.test_solveh_bandedc                 C      t tdg d S NrL  )r%   r   r   r2   r2   r3   test_invC  r   zTestOverwrite.test_invc                 C   rS  rT  )r%   r   r   r2   r2   r3   test_detF  r   zTestOverwrite.test_detc                 C   rJ  )N)rN   r?   r  )r%   r   r   r2   r2   r3   
test_lstsqI  r  zTestOverwrite.test_lstsqc                 C   rS  rT  )r%   r   r   r2   r2   r3   	test_pinvL  r   zTestOverwrite.test_pinvc                 C   rS  rT  )r%   r   r   r2   r2   r3   
test_pinvhO  r   zTestOverwrite.test_pinvhN)r   r   r   rM  rN  rQ  rR  rU  rV  rW  rX  rY  r2   r2   r2   r3   rI  5  s    rI  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
ejdeeejeejgejdeeejeejgdd ZdS )TestSolveCirculantc                 C   sB   t g d}t g d}t||}tt||}t|| d S N)r@   r?   rN   r   )r@   rB   r@   r   )r)   r   r   r   r   r   rU   r  r^   r_   yr2   r2   r3   test_basic1U  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<   rN   r)   r   r   rS   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<   rN   r?   ra  r\  r2   r2   r3   test_basic3d  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              ?ra  r\  r2   r2   r3   rf   l  s
   
zTestSolveCirculant.test_complexc                 C   sF   t jd}|d}|d}t||}tt||}t|| d S )Ni1  r/  )r)   r
   r  rT  r   r   r   r   )rU   r7  r  r^   r_   r]  r2   r2   r3   test_random_b_and_ct  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?   rN   r<   r   )singular)r)   r   r   r   r   r   rt   r   )rU   r  r^   r_   r]  r  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)rB   g      @rN   g      @)r@   r=   r=   g      @)r   r   r@   r@   rf  )r@   rB   r   r   r@   )baxis)r<   r?   rN   r   rB   )rj  outaxis)r?   rN   r<   r?   )caxis)r)   r   r   r   r   
empty_liker   r   r  r  r   moveaxisrG  )rU   r  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   r     s
   
z-TestSolveCirculant.test_native_list_argumentsdt_cr   c                 C   s   t jg |d}t jg |d}t||}|jdksJ |jtt jd|dt jd|djks/J t jd|d}t||}|jdksBJ |j|jksJJ d S )Nr   r   rN   rz   )r)   r   r   r   r   r   r   r   )rU   rp  r   r  r^   r_   x1r2   r2   r3   r     s   

zTestSolveCirculant.test_emptyN)r   r   r   r^  rb  rd  rf   re  ri  ro  r   r   r   r   r   r   r)   r	   r   r   r   r2   r2   r2   r3   rZ  S  s    		rZ  c                   @   sh   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	e
jdeeejeejgdd ZdS )TestMatrix_Balancec                 C   s   t ttd d S )NzSome string for fail)rt   ru   r!   r   r2   r2   r3   test_string_arg  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 )Nr@   r?   rN   )rt   ru   r!   r)   r   r  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log2rj   )rU   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  )r2  g      Y@r@   )r)   r   r!   r   r   r   )rU   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   separater   r?   )r!   r)   r   r   rv  rw  r   r   )rU   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?   rL  r@   rz  )r   r@   r=   r   r<   rN   r?   )r    r)   r   r!  r!   r   	ones_liker   )rU   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)rF   rF   rF   rF   >)rF   rF   rF   rF   rF   )rM   rM   rF   rF   rF   )rF   rF   r  rF   rF   )r|  rF   rF   rF   )rF   r  rF   rF   )r8   rF   r|  rF   )rF   r8   rF   r  )r  rF   r8   rF   )r  r         r8   )r  r  r  rF   )r  r  r8   r  r@   rz  r   )
r)   r   r!   rm  r   r   r   rj   r   r   )rU   casesr   r_   r]  r  r!  ipr2   r2   r3   test_perm_and_scaling  s2   



z(TestMatrix_Balance.test_perm_and_scalingr1   c                 C   s   t jd|d}t|\}}|jdksJ |jdksJ tt jd|d\}}|j|jks.J |j|jks6J t|dd\}\}}|jdksGJ |jdksNJ |jdksUJ t|dd\}\}	}
|j|jksgJ |j|	jksoJ |j|
jkswJ d S )Nrz   r   r   r?   Trz  )r)   r   r!   r1  r   r   )rU   r1   rV   r^   r  b_nt_nr%  permscale_nperm_nr2   r2   r3   r     s   zTestMatrix_Balance.test_emptyN)r   r   r   rs  ru  rx  ry  r}  r  r  r   r   r   r   r   r)   r	   r   r   r   r2   r2   r2   r3   rr    s    rr  r   )LrR  numpyr)   r   r   r   r   r   r   r   r	   numpy.randomr
   numpy.testingr   r   r   r   r   r   r   r   r   rt   scipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   scipy.linalg._testutilsr%   scipy._lib._testutilsr&   r'   scipy.linalg.blasr(   r+   r*   r  r   r-   r,   r  DTYPESr4   r5   r   r   rx  r  r  r  r  r  r  r   r   r)  r*  r=  rI  rZ  rr  r2   r2   r2   r3   <module>   sT    ($L
 (  N   *R2 
	  /WN<:d