o
    Ö­j#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jD Ed d!¡ejD Ed"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   úZ/var/www/html/CropPilot/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{®Gázì¿)g     h€@g     prÀg     ÀWÀg     ÀwÀ)gHáz®Gù?g…ëQ¸…Àg333333Àg¤p=
×£ð¿)gÃõ(\�Âñ¿g…ëQ¸å¿gáz®Gáâ¿gš™™™™™é?g
×£p=
#@g¸…ëQx2@g     £@g      l@g¤p=
×£è?g�Âõ(\�*Àgáz®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=
×£põ¿ffffff@yìQ¸…ëÑ?\�Âõ(\	@y�Âõ(\�Àš™™™™™Ày
×£p=
ç?q=
×£pí¿)y333333û¿333333,ÀyÍÌÌÌÌŒ@@      ø¿y      ø¿ÍÌÌÌÌÌ*@yÍÌÌÌÌÌ)@š™™™™™+@)yR¸…ëQ
À…ëQ¸Ày�Âõ(\�þ¿®Gáz®@yìQ¸…ëÁ¿š™™™™™õ¿y…ëQ¸…û?š™™™™™õ?)yHáz®G@ö(\�ÂõØ?yìQ¸…ëá¿…ëQ¸…÷?y�Âõ(\�ê¿®Gázæ¿y\�Âõ(\ÿ¿q=
×£på?yÃõ(\�B:@¤p=
×ãI@yR¸…ëQ?@ÍÌÌÌÌÌÀy33333P@33333³UÀy33333Óc@ffffff,Ày      À�Âõ(\O9@y333333Àq=
×£0>@y�Âõ(\�ò?�Âõ(\�@y{®GázÀ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=
×£pý¿y)\�Âõ(¼?)\�Âõ(¼¿y{®Gázü¿áz®Gáò¿yHáz®G@      ø¿)r   g…ëQ¸…Àyq=
×£pý¿¸…ëQ¸ž?y®Gáz®@áz®GáÊ?)r   r   g=
×£p½!ÀyHáz®Gù?ÍÌÌÌÌÌì¿)r   r   r   gÃõ(\�Âõ¿y×£p=
×@\�Âõ(\$Ày®Gáz®<@R¸…ëñCÀy)\�Âõ(#À
×£p=
@y
×£p=Ê8ÀÍÌÌÌÌÌ Ày¤p=
×£è¿ÍÌÌÌÌ0ÀyìQ¸…ë@áz®G�QÀy)\�Âõ(@ì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š™™™™™Àg333333ó¿r   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 rŽd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rÛt|	|
|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r�t  t  |
¡¡t  t  |
d¡d¡ t  t  |
d¡d¡ }
n9|dkr�t  t  |
d¡d¡}
n*|dv rš|
|
j }
n |dv r¦|
|
 	¡ j }
n|dv rº|
|
j }
|
t  |
j
dd�¡7 }
|rÁt  |
¡}
|
jdd�}|	 ¡ }t  |t j¡rù|rùd}tjt|d�� t|
|	|||d� W d   ƒ d S 1 sòw   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 sšw   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 s�w   Y  ttdd�� tt g gg¡ƒ W d   ƒ d S 1 s¡w   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  )gã¶mÛ¶mÛ¿g›¶mÛ¶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Ü  )yîu¯{ÝëÞ¿E(BŠÐ?yÓ½îu¯{í?(YÉJV²Ò?)Ú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Õ  )gÌÆqÇq¬¿gÇ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 r‡t	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|�Çqä¿gÔ•VUUÅ¿gãcä8ŽÓ?©gƒÓÇq¬¿gù°^©0Á¢<gƒÓÇq¬?©gù9Žãà?gÔ•VUUÅ?g:8ï7ŽãÈ¿©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’Ö‹ã8î¿g#¬ÇqÜ?g#¬Çq¼¿g#¬Ç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…   )g·DpTUUõ¿gÚÁQUUÕ¿g“vWUUå?)g·DpTUUñ?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å   gü©ñÒMbP?rz   çñhãˆµøä>gš™™™™™©?rF   ©rP  r}   gü©ñÒMb@?©rP  g‚vIhÂ%,=g;ßO�—î@ç{®Gáz„?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  gü‹ 1“¨?r  r  r|   rN  g•dyáý¥=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  ç5ýD+Ø@çÃ6ûf~@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 )Néx   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