o
    5Bi                    @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZ 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 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d d	lm>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d d
lQmRZR d dlSmTZT d dlUmVZV d dlWmXZX zd dlYmZZZ W n e[y   dZZY nw de\fddZ]ejEej^gZ_ejFej`gZae_ea Zbdd ZcG dd dZdG dd dZeG dd dZfG dd dZgG dd dZhG dd dZiG d d! d!eiZjd"d# ZkG d$d% d%ZlG d&d' d'ZmG d(d) d)ZnG d*d+ d+ZoG d,d- d-ZpG d.d/ d/Zqd ZrZseZdur|eZd0 d1 d2 ZreZd0 d1 d3 ZsG d4d5 d5ZtG d6d7 d7ZuG d8d9 d9ZvG d:d; d;Zwd<d= Zxejyjze{ d>kd?d@dAdB Z|dCdD Z}dEdF Z~ejyjddGdHdIdJ ZG dKdL dLZd[dMdNZejyjejyjzeejjdOk dPd@dQdR ZdSdT ZdUdV ZdWdX ZG dYdZ dZZdS )\    N)assert_equalassert_almost_equalassert_array_almost_equalassert_array_equalassert_assert_allclose)raises)eigeigvalslusvdsvdvalscholeskyqrschurrsf2csflu_solve	lu_factorsolvediagsvd
hessenbergrq
eig_bandedeigvals_bandedeigheigvalshqr_multiplyqzorthordqzsubspace_angleshadamardeigvalsh_tridiagonaleigh_tridiagonal
null_spacecdf2rdfLinAlgError)	dgbtrfdgbtrszgbtrfzgbtrsdsbevdsbevddsbevxzhbevdzhbevx)norm)_select_function)ortho_group)arraydiagfulllinalgargsortzerosarangefloat32	complex64ravelsqrt	iscomplexshapesortsignasarrayisfinitendarrayeye)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64)CONFIGFc                 C   s   |t v rtj| | tj| | d  }|| j d }ntj| | }||j d }|r;|td|  t|  7 }||S )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprandomrandconjTr=   rE   astype)nposdefdtypeA rX   ^/var/www/html/Trade-python/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrix*   s    
rZ   c                 C   s   t | tr| }||d d }nt | tr%t| jdkr%| jd }| }ntdt|}|j	
 t| | }d|j	|  }|S )a  Return a random symmetric (Hermitian) matrix.

    If 'dim_or_eigv' is an integer N, return a NxN matrix, with eigenvalues
        uniformly distributed on (-1,1).

    If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                      eigenvalues are 'a'.
    rL      r   zinput type not supported.      ?)
isinstanceintrO   rD   lenr?   	TypeErrorr2   rvsrR   rQ   r4   )dim_or_eigvrngdimdvhrX   rX   rY   symrand@   s   
	


rh   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestEigValsc                 C   N   g dg dg dg}t |}dtd d ddtd d g}t|| d S )Nr[   rL      rL         	   ]   rL   r   r
   r=   r   selfawexact_wrX   rX   rY   test_simple\   s   "zTestEigVals.test_simplec                 C   sd   t g dg dg dgdj}| }|j}t|}dtd d ddtd d g}t|| d S )Nrk   rm   re   rp   rq   rL   r   )r3   rR   copyr
   r=   r   rs   rX   rX   rY   test_simple_trb   s   "zTestEigVals.test_simple_trc                 C   rj   )Nrk   rL   rn   y      @      ?y      "@      ?y      W@      @rL   r   rr   rs   rX   rX   rY   test_simple_complexj   s   zTestEigVals.test_simple_complexc                 C   sR   g dg dg dg}t |dd}dtd d ddtd d g}t|| d S )	Nrk   rm   Fcheck_finiterp   rq   rL   r   rr   rs   rX   rX   rY   test_finiter   s   "zTestEigVals.test_finiteN)__name__
__module____qualname__rx   rz   r|   r   rX   rX   rX   rY   ri   Z   s
    ri   c                   @   sv   e Zd Zdd Zdd Zdd Zdd Zd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 )TestEigc           	      C   s  t g dg dg dg}t|\}}dtd d ddtd d g}t dddtdd  d g}t g d	}t dddtdd  d g}|t| }|t| }|t| }t|| t||d d df t|d
   t||d d df t|d   t||d d df t|d   tdD ]}t||d d |f  || |d d |f   qt|ddd\}}tdD ]}t|j|d d |f  || |d d |f   qd S )Nrk   rm   rp   rq   rL   r   r[   rl         @r   r   r   r   r[   r   rL   leftright)r3   r	   r=   r0   r   rA   rangerR   	rt   ru   rv   rf   rw   v0v1v2irX   rX   rY   rx   {   s&   "
"""02zTestEig.test_simplec                 C   s   t ddgddgg}t|ddd\}}}t|t ddg tdD ]}t||d d |f  || |d d |f   q!tdD ]}t| j|d d |f  ||  |d d |f   q?d S )Nr[   rL   r         ?       @y      ?       )r3   r	   r   r   rQ   rR   rt   ru   rv   vlvrr   rX   rX   rY   test_simple_complex_eig   s   0zTestEig.test_simple_complex_eigc                 C   s   t g dg dg dg}t|ddd\}}}tdD ]}t||d d |f  || |d d |f   qtdD ]}t| j|d d |f  ||  |d d |f   q9d S )Nrk   r{   r[   r   rl   )r3   r	   r   r   rQ   rR   r   rX   rX   rY   r|      s   0zTestEig.test_simple_complexc                 C   sr   dgg}dgg}t ||dd\}}t|d d t|d dk t|d t ||\}}t|tj t|d d S )Nr[   r   Thomogeneous_eigvalsr[   r   r   )r	   r   r   r   rN   inf)rt   ru   brv   r   rX   rX   rY   test_gh_3054   s   
zTestEig.test_gh_3054vIh%<=c                 C   s<  |d urt |t |}}|}nt |}|}tj|j }d|d|}t||dd\}}t||dd}	|| |dd d f  }
|| |dd d f  }t|
jd D ]}t|
d d |f |d d |f |||d qS|d u rt|dd d f d t|	dd d f d t|}t|	}t|d d |f |	d d |f dd|d t	t
|}tt
|D ]}t|d d |f ||< qt|t|j|ddd	 |dd d f dk}|d|f |d|f  }t||\}}t||}	|| }
|| | }|
| }t|jd D ] }tt|d d |f r#t|d d |f dd
d
|d q|t| }|	t|	 }dtjd| dd }dtjd| dd }tt||j }tt||j }t|| || dd|d t	t
|}tt
|D ]}t|d d |f ||< qst|t|j|d tt|t|t|  d S )N
Tr   r[   r   rtolatolerr_msggHz>)r   r   r   )r   r   r   r   y             rK   g|=)tolr   )rB   rN   rE   r?   r	   r
   r   r   lexsortemptyr_   r0   onessizeallrC   real_if_closer7   absimagr@   )rt   rW   B
atol_homog
rtol_homogB0msgrv   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_finrX   rX   rY   _check_gen_eig   sp   

"
 zTestEig._check_gen_eigc                 C   s   t g dg dg dg dg dg}t g dg dg dg d	g d
g}tjdd | j||dd W d    d S 1 s@w   Y  d S )N)   "      r      )-   r   *         )'   /   1      r   )   r   r         )&   ,   r         )   r      r   r   )r   .   (   r   %   )r   r   r   r   r   )   r   r         )r   #      r   r   ignorer   g-a=)r   )r3   rN   errstater   rt   rW   r   rX   rX   rY   test_singular   s   "zTestEig.test_singularc                 C   s   t tg d}tg dg dg df}tg dg dg df}td}td	}t||g|| gg}t||g||gg}tjd
d | || W d    d S 1 sYw   Y  d S )N)r[   r   rl   )rL   r   r   )r   rL   r   )r   r   rL   )r[   r   r   )r   r[   r   r   r   r   rl   rl   rl   r   r   )r4   r3   r8   rE   rN   blockr   r   )rt   MKDZI3rW   r   rX   rX   rY   test_falker  s   "zTestEig.test_falkerc                 C   sj   dd }t jdd! tdD ]}||d d d\}}| || qW d    d S 1 s.w   Y  d S )Nc                 S   sf   d| d  }d|  }g dg ddd|dgddd|gg}g dg dddd| gdd|dgg}||fS )	NrL   )r[   r   r   r   )r   r[   r   r   r   )r   r   r[   r   )r   r   r   r[   r[   rX   )omegac1c2rW   r   rX   rX   rY   matrices  s   


z)TestEig.test_bad_geneig.<locals>.matricesr   r   d         @)r   )rN   r   r   r   )rt   r   krW   r   rX   rX   rY   test_bad_geneig  s   "zTestEig.test_bad_geneigc                 C   s   t jd}td|}| |d  td|}| || |dd|d  }| |d  |dd|d  }| || d S )N  rl   r   rK   )rN   rO   RandomStaterh   r   )rt   rc   rW   r   rX   rX   rY   test_make_eigvals,  s   

zTestEig.test_make_eigvalsc           	      C   sd  g dg dg dg}t |dd\}}dtd d ddtd d g}td	d	d	tdd
  d g}tg d}td	d	d	tdd
  d g}|t| }|t| }|t| }t|| t||d d df t|d   t||d d d	f t|d   t||d d df t|d   td
D ]}t||d d |f  || |d d |f   qd S )Nrk   rm   Fr}   rp   rq   rL   r   r[   rl   r   r   r   r   )r	   r=   r3   r0   r   rA   r   r   rX   rX   rY   test_check_finite:  s    "
"""0zTestEig.test_check_finitec                 C   s"   t ddd}ttt| dS )z:Check that passing a non-square array raises a ValueError.ro   rl   rL   N)rN   r9   reshapeassert_raises
ValueErrorr	   )rt   rW   rX   rX   rY   test_not_square_errorK  s   zTestEig.test_not_square_errorc                 C   s:   t d}tddd}ttt|| ttt|| dS )zOCheck that passing arrays of with different shapes
        raises a ValueError.rL         "@rl   N)rE   rN   r9   r   r   r   r	   r   rX   rX   rY   test_shape_mismatchP  s   zTestEig.test_shape_mismatchc                 C   s   t jg dg dg dg dgdd}t jg dg dg d	g d
gdd}t||\}}t j '}|td t j|ddd sEJ t j|ddd sQJ W d    d S 1 s\w   Y  d S )N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r   g      L@g      Z@g      o@float64rV   )       @      @      $@r   )r   r         &@g      =@)r         @g      *@g      ?@)r   r  g      1@g     A@z%invalid value encountered in multiplyr  +=r          @)	rN   r3   r	   testingsuppress_warningsfilterRuntimeWarningiscloseany)rt   rW   r   r   VsuprX   rX   rY   test_gh_11577X  s(   

	"zTestEig.test_gh_11577N)r   r   )r   r   r   rx   r   r|   r   r   r   r   r   r   r   r   r   r  rX   rX   rX   rY   r   y   s    
	
Ir   c                   @   t   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestEigBandedc                 C      |    d S N)create_bandmatrt   rX   rX   rY   setup_methodv     zTestEigBanded.setup_methodc                 C   s  d}d| _ d| _tt|dtt|d dd tt|d dd tt|d dd tt|d dd | _tt|dd	tt|d dd  d	tt|d dd  tt|d dd tt|d dd | _tt|dtt|d dd tt|d d
d tt|d dd tt|d dd | _d	tt|d tt|d dd d	tt|d d
d  tt|d dd tt|d dd | _t	| j\}}|j
}t|}|| | _|dd|f | _t	| j\}}|j
}t|}|| | _|dd|f | _| jd }t||ftd| _t||ftd| _t|D ]%}t| j|| j|| d ||f< t| j|| j|| d ||f< q%d| j  | j d }t||ftd| _t| j| jd| j  ddf< t| j D ]6}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qrt||ftd| _t| j| jd| j  ddf< t| j D ]6}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qdt| | _| jd | _dS )zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   rL         ?r[         r          r   rK         r  Nr  r         ?      ?)KLKUr4   r5   sym_matherm_matreal_matcomp_matr6   r	   realr7   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr8   floatbandmat_symcomplexbandmat_hermr   bandmat_realbandmat_compr9   r   bc)rt   NewevargsLDABr   rX   rX   rY   r  y  s   


"&0,0,zTestEigBanded.create_bandmatc                 C   P   t | jdd\}}}|ddt|f }tt|| j tt|t| j dS )zTCompare dsbev eigenvalues and eigenvectors with
           the result of linalg.eig.r[   	compute_vN)r+   r-  r7   r   r@   r(  r   r)  rt   rv   evecinfoevec_rX   rX   rY   
test_dsbev     zTestEigBanded.test_dsbevc                 C   r8  )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.r[   r9  N)r,   r-  r7   r   r@   r(  r   r)  r;  rX   rX   rY   test_dsbevd  r@  zTestEigBanded.test_dsbevdc              	   C   l   t | j\}}t| jddd|ddd\}}}}}|ddt|f }tt|| j tt|t| j	 dS )zUCompare dsbevx eigenvalues and eigenvectors
           with the result of linalg.eig.        r[   rL   r:  r   N)
r?   r#  r-   r-  r7   r   r@   r(  r   r)  rt   r3  rv   r<  numifailr=  r>  rX   rX   rY   test_dsbevx     zTestEigBanded.test_dsbevxc                 C   r8  )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.r[   r9  N)r.   r/  r7   r   r@   r*  r   r+  r;  rX   rX   rY   test_zhbevd  r@  zTestEigBanded.test_zhbevdc              	   C   rB  )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.rC  r[   rL   rD  N)
r?   r$  r/   r/  r7   r   r@   r*  r   r+  rE  rX   rX   rY   test_zhbevx  rI  zTestEigBanded.test_zhbevxc                 C   sn  t | j}|j}tt|| j t | j}|j}tt|| j d}t	d}t | jd||fd}tt|| j||d   t | jd||fd}tt|| j||d   | j| d }| j| d }t | jd||fd}	tt|	| j||d   | j| d }| j| d }t | jd||fd}
tt|
| j||d   t | jdd	}|j}tt|| j d
S )z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rL   ro   r   selectselect_ranger[   h㈵>rf   Fr}   N)
r   r-  r'  r   r@   r(  r/  r*  rN   longlong)rt   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_valrX   rX   rY   test_eigvals_banded  sP   


z!TestEigBanded.test_eigvals_bandedc                 C   s  t | j\}}|ddt|jf }tt|| j tt|t| j t | j	\}}|ddt|jf }tt|| j
 tt|t| j d}d}t | jd||fd\}	}
tt|	| j||d   tt|
t| jdd||d f  t | j	d||fd\}}tt|| j
||d   tt|t| jdd||d f  | j| d }| j| d }t | jd||fd\}}tt|| j||d   tt|t| jdd||d f  | j
| d }| j
| d }t | j	d||fd\}}tt|| j
||d   tt|t| jdd||d f  t | jd	d
\}}|ddt|jf }tt|| j tt|t| j dS )zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. NrL   ro   r   rL  r[   rO  rf   Fr}   )r   r-  r7   r'  r   r@   r(  r   r)  r/  r*  r+  )rt   rQ  evec_sym	evec_sym_rR  	evec_herm
evec_herm_rS  rT  rU  evec_sym_indrV  evec_herm_indrW  rX  rY  evec_sym_valrZ  evec_herm_valrX   rX   rY   test_eig_banded"  st   



zTestEigBanded.test_eig_bandedc                 C      t | j\}}t| j| j| j\}}}t|d| j ddf }t| j| j D ]}|t|d| j d | |d |f |d 7 }q(t| jdd\}}	}
t	||
 dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rL   Nr[   r   	permute_l)
r?   r%  r'   r0  r!  r"  r4   r   r   r   rt   r   r3  lu_symm_bandipivr=  ur   p_linl_linu_linrX   rX   rY   test_dgbtrf\     2zTestEigBanded.test_dgbtrfc                 C   re  )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rL   Nr[   r   rf  )
r?   r&  r)   r1  r!  r"  r4   r   r   r   rh  rX   rX   rY   test_zgbtrfj  rp  zTestEigBanded.test_zgbtrfc                 C   P   t | j| j| j\}}}t|| j| j| j|\}}t| j| j}t	|| dS )zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r'   r0  r!  r"  r(   r   r6   r   r%  r   rt   ri  rj  r=  yy_linrX   rX   rY   test_dgbtrsx     zTestEigBanded.test_dgbtrsc                 C   rr  )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r)   r1  r!  r"  r*   r2  r6   r   r&  r   rs  rX   rX   rY   test_zgbtrs  rw  zTestEigBanded.test_zgbtrsN)r   r   r   r  r  r?  rA  rH  rJ  rK  r[  rd  ro  rq  rv  rx  rX   rX   rX   rY   r  u  s    Q*:
r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestEigTridiagonalc                 C   r  r  )create_trimatr  rX   rX   rY   r    r  zTestEigTridiagonal.setup_methodc                 C   s   d}t |d| _t |d d| _t| jt| jd t| jd | _t| j\}}|j}t|}|| | _	|dd|f | _
dS )z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r  r  r[   r  r   N)r5   re   er4   full_matr6   r	   r'  r7   rv   r<  )rt   r3  r4  r5  r6  rX   rX   rY   rz    s   $
z TestEigTridiagonal.create_trimatc                 C   sx   t tt| j| jdd  t tt| j| jd  t tt| j| jdd t tt| j| jdd t tt| j| jddd	 dS )
zTest error conditions.Nr   rK   r  lapack_driverfoor   r   r   rL  )r   r   r"   re   r{  r`   r  rX   rX   rY   test_degenerate  s   
z"TestEigTridiagonal.test_degeneratec           	   
   C   s"  dD ]}t | j| j|d}tt|| j qdD ]}ttt | j| jdddd qdD ]d}t | j| jdd	t| jd
 f|d}tt|| j d}d}t | j| jd||f|d}tt|| j||d
   | j| d }| j| d }t | j| jd||f|d}tt|| j||d
   q*dS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautor}  )r  r  r  r   r   r~  rM  rN  r  r  r  r   r[   rM  rN  r~  rL   ro   rO  rf   N)	r"   re   r{  r   r@   rv   r   r   r_   )	rt   driverrv   w_indrS  rT  rW  rX  w_valrX   rX   rY   test_eigvalsh_tridiagonal  s:   z,TestEigTridiagonal.test_eigvalsh_tridiagonalc           	   	   C   s  t tt| j| jdd dD ])}t| j| j|d\}}|ddt|f }tt|| j tt	|t	| j
 qt tt| j| jdddd d	D ]}d
}t| jd }t| j| jd||f|d\}}tt|| j tt	|t	| j
 d}d}t| j| jd||f|d\}}tt|| j||d   tt	|t	| j
dd||d f  | j| d }| j| d }t| j| jd||f|d\}}tt|| j||d   tt	|t	| j
dd||d f  qFdS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r  r}  )r  r  r  r  Nr  r   r   r  r  r   r[   r  rL   ro   rO  rf   )r   r   r#   re   r{  r7   r   r@   rv   r   r<  r_   )	rt   r  rv   r<  r>  rS  rT  rW  rX  rX   rX   rY   test_eigh_tridiagonal  sR   


z(TestEigTridiagonal.test_eigh_tridiagonalc                 C   s   t dg}t g }t||dd}|jdksJ t|| t||ddd\}}|jdks/J |jdks6J t|| t|td	gg t||d
dd\}}|jdksUJ |jdks\J |jdkscJ dS )zSee gh-20075r  T)eigvals_onlyr[   r   r   rL  rL   r  rf   )r   r   r   )r   r   N)rN   r3   r#   ndimr   r   r?   )rt   ru   r   xr  rX   rX   rY   test_eigh_tridiagonal_1x1  s   


z,TestEigTridiagonal.test_eigh_tridiagonal_1x1N)	r   r   r   r  rz  r  r  r  r  rX   rX   rX   rY   ry    s    "*ry  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	j
dddd Ze	j
dddd Ze	j
dde	j
dddd Zdd Ze	j
deegdd Zdd Zd S )!TestEighc                 C   s   t jd d S )Nr   )rN   rO   seedr  rX   rX   rY   setup_class     zTestEigh.setup_classc              	   C   s  t tttddg t tttddgtddg t tttddgtddg t tttddgtddgdd t tttddgtddgddgddgd tj &}|td t tttddgtddgddgddgd W d    n1 sw   Y  t tttddgtddgd	dgd
 tj #}|td t tttddgtddgd	dgd W d    n1 sw   Y  t tttddgtddgddgd
 tj #}|td t tttddgtddgddgd W d    n	1 sw   Y  t tttddgtddgdd	gd
 tj #}|td t tttddgtddgdd	gd
 W d    n	1 sWw   Y  t tttddgtddgdd	gd t tttddgdd t tttddgd dd t tttddgtddgdd t tttddgtddgdddgd t tttddgtddgdddgd d S )Nr[   rL   rl      )type)subset_by_valuesubset_by_indexzKeyword argument 'eigvals)r  r
   r   r  r
   r   r  wrongr  gvxevrgvd)r  r  )	r   r   r   rN   r   r
  r  r  DeprecationWarning)rt   r  rX   rX   rY   test_wrong_inputs  sp   ""
zTestEigh.test_wrong_inputsc                 C   s&   t tttddgtddg d S )Nrl   )r   r&   r   rN   r   r  rX   rX   rY   test_nonpositive_bH  s   &zTestEigh.test_nonpositive_bc                 C   s   t tD ]R\}}td|d}t|ddgd\}}t|jd t| t|dk|dk @ s.J tdd|d}t||ddgd\}}t|jd t| t|dk|dk @ sVJ qd S )	N   r  r   rL   r  r[   T)rU   rV   )	enumerateDTYPESrZ   r   r   r?   r_   r   )rt   inddtru   rv   rf   r   rX   rX   rY   test_value_subsetsL  s   zTestEigh.test_value_subsetsc                 C   sF   t ddgddgg}t ddgddgg}t|\}}t||\}}d S )Nr[   rL      rl   rn   )r3   r   )rt   ru   r   rv   zrX   rX   rY   test_eigh_integerY  s   zTestEigh.test_eigh_integerc                 C   s>   dd l }|jd }t|}ttt| ttt| d S )Nr   rL   )	scipy.sparsesparseidentitytocscrN   
atleast_2dr   r   r   )rt   scipyru   r   rX   rX   rY   test_eigh_of_sparse_  s
   
zTestEigh.test_eigh_of_sparsedtype_r  )r5  evdr  evxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nr  )rT   rV   r  rC    r   r   )rZ   r   r   rN   finfoeps)rt   r  r  ru   rv   rf   rX   rX   rY   test_various_drivers_standardg  s   
z&TestEigh.test_various_drivers_standardc                 C   s   t dgg|d\}}t|tdgdd t|tdggdd t dgg|d\}}t|tdgdd t|tdggdd d S )Nr[   r  r  gV瞯<r  rK   r   )r   r   r3   )rt   r  rv   rf   rX   rX   rY   test_1x1_lworkp  s   zTestEigh.test_1x1_lworkr  rk   )gvr  r  c                 C   s   t d}td}tddd}t||||d\}}|dkr/t|| |||   d|dd d S |d	krEt|| | ||  d|dd d S t|| | ||  d|dd d S )
Ng     @r  TrU   )ru   r   r  r  r[   rC  r  rL   )rN   spacingrZ   r   r   )rt   r  r  r   ru   r   rv   rf   rX   rX   rY    test_various_drivers_generalized{  s   
$$$z)TestEigh.test_various_drivers_generalizedc                 C   s   t d}t|ddgd}tt|d t|ddgd}tt|d t|| tg d}t|ddgd}tt|d t|tdd	g d S )
Nrn   r[   rL   r  )r[   333333??      ?rL   gffffff?r  r  r  )rZ   r   r   r_   r   rN   r4   r3   )rt   ru   rv   w2r   w3rX   rX   rY   test_eigvalsh_new_args  s   
zTestEigh.test_eigvalsh_new_argsmethodc                 C   s   t jtdd |tddd W d    n1 sw   Y  t jtdd |tdddgd	 W d    n1 s=w   Y  t jd
d |tdtddd W d    d S 1 saw   Y  d S )NKeyword argument 'turbo')matchrL   rL   TturboKeyword argument 'eigvals'r   r[   r  zuse keyword argumentsrL   )pytestwarnsr  rN   r8   deprecated_callrE   )rt   r  rX   rX   rY   test_deprecation_warnings  s   "z"TestEigh.test_deprecation_warningsc                 C   s   t d}t ddd}tj }|td t||dd\}}W d    n1 s)w   Y  t||dd\}}t|| t|| tj }|td t|d	d
gd\}}W d    n1 saw   Y  t|d	d
gd\}}t|| t|| d S )Nrl   Tr  r  r  r  r  r  r   r[   r  r  )rZ   rN   r
  r  r  r  r   r   )rt   ru   r   r  w_depv_deprv   rf   rX   rX   rY   test_deprecation_results  s    


z!TestEigh.test_deprecation_resultsN)r   r   r   r  r  r  r  r  r  r  markparametrizer  r  r  r  r  r   r   r  r  rX   rX   rX   rY   r    s&    6



r  c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zejje ddejjdd ZdS )TestSVD_GESDDgesddc                 C   s,   t ttdggdd t ttdggdd d S )Nr  r}  r  )r   r`   r   r   r  rX   rX   rY   r    s   zTestSVD_GESDD.test_degeneratec                 C   s   g dg dg dg}dD ]J}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qCt|| | | qd S )Nrk   r[   r  rl   rm   TFfull_matricesr~  rl   r   r   r~  r   rR   rE   r8   r?   rV   charr   r_   rt   ru   r  rk  svhsigmar   rX   rX   rY   rx        zTestSVD_GESDD.test_simplec                 C   s   g dg dg dg}dD ]J}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qCt|| | | qd S )Nrk   rm   r  r  rl   r   r  r  rX   rX   rY   test_simple_singular  r  z"TestSVD_GESDD.test_simple_singularc                 C   s   g dg dg}dD ]C}t ||| jd\}}}t|j| t|jd  t|jd |jd f|jj}t	t
|D ]
}|| |||f< q9t|| | | q
d S )Nrk   r  rn   ro   r  r  r   r   r~  r   rR   rE   r?   r8   rV   r  r   r_   r  rX   rX   rY   test_simple_underdet  s   z"TestSVD_GESDD.test_simple_underdetc                 C   s   ddgddgddgg}dD ]M}t ||| jd\}}}t|j| t|jd  t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qFt|| | | qd S )	Nr[   rL   r  rn   rl   r  r  r   r  r  rX   rX   rY   test_simple_overdet  s   z!TestSVD_GESDD.test_simple_overdetc                 C   s   t jd}d}d}tdD ]f}|||g|||gfD ]U}dD ]P}t||| jd\}}}	t|j| t|j	d  t|	|	j t|	j	d  t
|j	d |	j	d f|jj}
tt|D ]
}|| |
||f< q^t||
 |	 | q"qqd S )	Nr   r  r   rl   r  r  r[   r   )rN   rO   r   r   r   r~  r   rR   rE   r?   r8   rV   r  r_   )rt   rc   rT   mr   ru   r  rk  r  r  r  rX   rX   rY   test_random  s$    zTestSVD_GESDD.test_randomc                 C   s   g dg dg dg}dD ]T}t ||| jd\}}}t| j| t|jd  t| j| t|jd  t|jd |jd f|jj	}t
t|D ]
}|| |||f< qMt|| | | qd S )Nrk   )r[   y               @rl   rm   r  r  r[   r   )r   r~  r   rQ   rR   rE   r?   r8   rV   r  r   r_   r  rX   rX   rY   r|     s   z!TestSVD_GESDD.test_simple_complexc              	   C   s   t jd}d}d}tdD ]g}dD ]b}|||g|||gfD ]Q}|d|t|j  }t||| jd\}}}	t|	 j
| t|jd  t|jd |	jd	 f|jj}
tt|D ]
}|| |
||f< q_t||
 |	 | q"qqd S )
Nr   r  r   rl   r  rK   r  r[   r   )rN   rO   r   r   listr?   r   r~  r   rQ   rR   rE   r8   rV   r  r_   )rt   rc   rT   r  r   r  ru   rk  r  r  r  rX   rX   rY   test_random_complex	  s(    z!TestSVD_GESDD.test_random_complexc                 C   sZ   t jd}g d}|D ]}t jt jt jt jfD ]}|j| |}t	|| j
d qqd S )Nr   ))r   r   )r   2   )<   r   r}  )rN   rO   r   r:   r   r;   
complex128rP   rS   r   r~  )rt   rc   sizesszr  ru   rX   rX   rY   test_crash_1580  s   zTestSVD_GESDD.test_crash_1580c                 C   s   g dg dg dg}t |d| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< q?t|| | | d S )Nrk   r  rm   F)r~   r~  rl   r   r  )rt   ru   rk  r  r  r  r   rX   rX   rY   r   &  s   zTestSVD_GESDD.test_check_finitec                 C   s4   t g dg dg dg dg}t|| jd d S )N)K}\UU?vWUU?r  rC  rC  rC  )rC  r  r  r  rC  rC  )rC  rC  r  r  r  rC  )rC  rC  rC  r  r  r  r}  )rN   r3   r   r~  )rt   r   rX   rX   rY   test_gh_50390  s   
zTestSVD_GESDD.test_gh_5039z64-bit LAPACK requiredreasonc                 C   s`   t dd tjddgtjd}d|d< t|dd\}}}t|d	 d
 t|d |d  d
 d S )NihB  )free_mbr[   l        r  r  F)r  r   r  r   )rH   rN   r8   r:   r   r   )rt   rW   rk  r  r  rX   rX   rY   test_large_matrixA  s   
zTestSVD_GESDD.test_large_matrixN)r   r   r   r~  r  rx   r  r  r  r  r|   r  r  r   r  r  r  skipifrI   slowr  rX   rX   rX   rY   r    s     	
r  c                   @   s   e Zd ZdZdS )TestSVD_GESVDgesvdN)r   r   r   r~  rX   rX   rX   rY   r  L  s    r  c                  C   sF   t jdt jd} tt t|  W d    d S 1 sw   Y  d S )N)i  i  r  )rN   r   r   r   r   r   )dfrX   rX   rY   test_svd_gesdd_nofegfaultP  s   

"r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
ejjdd ZdS )TestSVDValsc                 C   s:   g gt dt dfD ]}t|}t|t d qd S )N)rL   r   )r   rl   r   )rN   r   r   r   r   rt   ru   r  rX   rX   rY   
test_emptyZ  s   zTestSVDVals.test_emptyc                 C   s`   g dg dg dg}t |}tt|dk t|d |d   ko*|d k d S    d S )Nrk   rm   rl   r   r[   rL   r   r   r_   r  rX   rX   rY   rx   _     2zTestSVDVals.test_simplec                 C   @   g dg dg}t |}tt|dk t|d |d k d S )Nrk   r  rL   r   r[   r  r  rX   rX   rY   r  e     z TestSVDVals.test_simple_underdetc                 C   F   ddgddgddgg}t |}tt|dk t|d |d k d S )Nr[   rL   r  rn   rl   r   r  r  rX   rX   rY   r  k     zTestSVDVals.test_simple_overdetc                 C   s`   g dg dg dg}t |}tt|dk t|d |d   ko*|d k d S    d S )Nrk   )r[   r                @rm   rl   r   r[   rL   r  r  rX   rX   rY   r|   q  r  zTestSVDVals.test_simple_complexc                 C   r  )Nrk   )r  y              @ro   rL   r   r[   r  r  rX   rX   rY   test_simple_underdet_complexw  r  z(TestSVDVals.test_simple_underdet_complexc                 C   r	  )Nr[   rL   r  rn   r  r   r  r  rX   rX   rY   test_simple_overdet_complex}  r
  z'TestSVDVals.test_simple_overdet_complexc                 C   sd   g dg dg dg}t |dd}tt|dk t|d |d   ko,|d k d S    d S )	Nrk   rm   Fr}   rl   r   r[   rL   r  r  rX   rX   rY   r     s   2zTestSVDVals.test_check_finitec                 C   s&   t jd t jdd}t| d S )Nr   i  i
  )rN   rO   r  rP   r   rt   ru   rX   rX   rY   test_crash_2609  s   zTestSVDVals.test_crash_2609N)r   r   r   r  rx   r  r  r|   r  r  r   r  r  r  r  rX   rX   rX   rY   r  X  s    r  c                   @      e Zd Zdd ZdS )TestDiagSVDc                 C   s,   t tg dddg dg dg dg d S )Nr[   r   r   rl   r   )r   r   r  rX   rX   rY   rx     s   zTestDiagSVD.test_simpleN)r   r   r   rx   rX   rX   rX   rY   r        r  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6diS )jTestQRc                 C   sH   g dg dg dg}t |\}}t|j| td t|| | d S N   rL   rl   rL   rp   rl   rn   rl   ro   rl   r   r   rR   rE   rt   ru   qrrX   rX   rY   rx        zTestQR.test_simplec                 C   st   g dg dg dg}t |\}}g d}t||d\}}t|| | t|| t|tdd\}}t|| d S )Nr  r  r  rk   r   rl   r   r   r   rE   rt   ru   r  r  cqcr2rX   rX   rY   test_simple_left  s   
zTestQR.test_simple_leftc                 C   sp   g dg dg dg}t |\}}g d}t||\}}t|| | t|| t|td\}}t|| d S )Nr  r  r  rk   rl   r  r   rX   rX   rY   test_simple_right  s   
zTestQR.test_simple_rightc                 C   s   t g dg dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )	Nr  r  r  Tpivotingr[   r   rl   
rN   rB   r   r   r4   r   r   r   rR   rE   rt   ru   r  r  pre   q2r#  rX   rX   rY   test_simple_pivoting  s   "
zTestQR.test_simple_pivotingc                 C   sV   g dg dg dg}t |dd\}}}g d}t||dd\}}}t|| | d S )Nr  r  r  Tr&  rk   r   r   r   r   rt   ru   r  r  jpvtr!  r"  rX   rX   rY   test_simple_left_pivoting  
   z TestQR.test_simple_left_pivotingc                 C   sV   g dg dg dg}t |dd\}}}g d}t||dd\}}}t|| | d S )Nr  r  r  Tr&  rk   r-  r.  rX   rX   rY   test_simple_right_pivoting  r1  z!TestQR.test_simple_right_pivotingc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  rL   r  r  rX   rX   rY   test_simple_trap     zTestQR.test_simple_trapc                 C   s   t g dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )Nr  r  Tr&  r[   r   rL   r(  r)  rX   rX   rY   test_simple_trap_pivoting  s   "
z TestQR.test_simple_trap_pivotingc                 C   sH   ddgddgddgg}t |\}}t|j| td t|| | d S Nr  rL   rp   rn   rl   r  r  rX   rX   rY   test_simple_tall  s   zTestQR.test_simple_tallc                 C   s   t ddgddgddgg}t|dd\}}}tt|}tt |dd  |d d	 k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )
Nr  rL   rp   rn   rl   Tr&  r[   r   r(  r)  rX   rX   rY   test_simple_tall_pivoting  s   "
z TestQR.test_simple_tall_pivotingc                 C   sd   ddgddgddgg}t |dd\}}t|j| td t|| | t|jd t|jd	 d S )
Nr  rL   rp   rn   rl   economicmoderl   rL   r  r   r   rR   rE   r   r?   r  rX   rX   rY   test_simple_tall_e  s   zTestQR.test_simple_tall_ec                 C   s   t ddgddgddgg}t|ddd\}}}tt|}tt |d	d  |d d
 k t|j| t	d t|| |d d |f  t|d d |f dd\}}t|| t|| d S )Nr  rL   rp   rn   rl   Tr9  r'  r;  r[   r   r:  r(  r)  rX   rX   rY   test_simple_tall_e_pivoting  s   "
z"TestQR.test_simple_tall_e_pivotingc                 C   s   ddgddgddgg}t |dd\}}ddg}t||d	\}}t|| | t|| tg d
}t||d	dd\}}t||d d  | t|tdd	\}}t|| d S )Nr  rL   rp   rn   rl   r9  r:  r[   r   r[   rL   r   Toverwrite_cr   r   r   r3   rE   r   rX   rX   rY   test_simple_tall_left     
zTestQR.test_simple_tall_leftc                 C   s   ddgddgddgg}t |ddd\}}}d	dg}t||d
d\}}}t|| t|| | t|tdd
d\}}}t|| d S )Nr  rL   rp   rn   rl   r9  Tr;  r'  r[   r   )r   r   r   r   rE   )rt   ru   r  r  r/  r!  r"  kpvtrX   rX   rY   test_simple_tall_left_pivoting  s   
z%TestQR.test_simple_tall_left_pivotingc                 C   st   ddgddgddgg}t |dd\}}g d}t||\}}t|| | t|| t|td\}}t|| d S )	Nr  rL   rp   rn   rl   r9  r:  rk   r  rt   ru   r  r  r!  cqr#  rX   rX   rY   test_simple_tall_right  s   
zTestQR.test_simple_tall_rightc                 C   sz   ddgddgddgg}t |ddd\}}}g d	}t||dd
\}}}t|| | t|tddd
\}}}t|| d S )Nr  rL   rp   rn   rl   Tr9  r?  rk   r&  r  rt   ru   r  r  r/  r!  rK  rX   rX   rY   test_simple_tall_right_pivoting&  s   z&TestQR.test_simple_tall_right_pivotingc                 C   sZ   g dg dg}t |\}}t|j| td t|| | t|jd t|jd d S )Nr  rL   rn   r  rL   r  rL   rl   r=  r  rX   rX   rY   test_simple_fat/  s   zTestQR.test_simple_fatc                 C   s   t g dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t
|jd t
|jd	 t|d d |f \}}t|| t|| d S )
NrO  r  Tr&  r[   r   rL   r  rP  rN   rB   r   r   r4   r   r   r   rR   rE   r   r?   r)  rX   rX   rY   test_simple_fat_pivoting8  s   "
zTestQR.test_simple_fat_pivotingc                 C   s^   g dg dg}t |dd\}}t|j| td t|| | t|jd t|jd d S )Nr  rL   rp   rn   r9  r:  rL   r  rP  r=  r  rX   rX   rY   test_simple_fat_eF  s   zTestQR.test_simple_fat_ec                 C   s   t g dg dg}t|ddd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t
|jd	 t
|jd
 t|d d |f dd\}}t|| t|| d S )Nr  rT  Tr9  r?  r[   r   rL   r  rP  r:  rR  r)  rX   rX   rY   test_simple_fat_e_pivotingO  s   "
z!TestQR.test_simple_fat_e_pivotingc                 C   sr   g dg dg}t |dd\}}ddg}t||d\}}t|| | t|| t|tdd\}}t|| d S )Nr  rT  r9  r:  r[   rL   r   r  r   rX   rX   rY   test_simple_fat_left]  s   
zTestQR.test_simple_fat_leftc                 C   st   g dg dg}t |ddd\}}}ddg}t||dd\}}}t|| | t|tddd\}}}t|| d S )	Nr  rT  r9  TrG  r[   rL   r   r  r.  rX   rX   rY   test_simple_fat_left_pivotingg     z$TestQR.test_simple_fat_left_pivotingc                 C   sn   g dg dg}t |dd\}}ddg}t||\}}t|| | t|| t|td\}}t|| d S )Nr  rT  r9  r:  r[   rL   r  rJ  rX   rX   rY   test_simple_fat_rightp  s   
zTestQR.test_simple_fat_rightc                 C   st   g dg dg}t |ddd\}}}ddg}t||dd\}}}t|| | t|tddd\}}}t|| d S )	Nr  rT  Tr9  r?  r[   rL   r&  r  rM  rX   rX   rY   test_simple_fat_right_pivotingz  rY  z%TestQR.test_simple_fat_right_pivotingc                 C   sL   g dg dg dg}t |\}}t| j| td t|| | d S Nrl         @      @rn   rn   rL   y       @      @rl   rL   r  rl   )r   r   rQ   rR   rE   r  rX   rX   rY   r|        zTestQR.test_simple_complexc                 C   sj   g dg dg dg}t |\}}g d}t||d\}}t|| | t|tdd\}}t|| d S )Nr]  r_  r`  r[   rL   r^  r   rl   r  rt   ru   r  r  r!  r"  rX   rX   rY   test_simple_complex_left  s   zTestQR.test_simple_complex_leftc                 C   sf   g dg dg dg}t |\}}g d}t||\}}t|| | t|td\}}t|| d S )Nr]  r_  r`  rb  rl   r  rc  rX   rX   rY   test_simple_complex_right  s   z TestQR.test_simple_complex_rightc                 C   s   ddgddgddgg}t |dd\}}d	d
g}t||d\}}t|| | t|| tg d}t||ddd\}}t||d d  | t|tdd\}}t|| d S )Nr  y       @      @rL   rp   y      @      @rl   r9  r:  r[          @       @r   rA  TrB  rD  r   rX   rX   rY   test_simple_tall_complex_left  rF  z$TestQR.test_simple_tall_complex_leftc                 C   sT   g dg dg dg}t |\}}g d}t||ddd\}}t| | | d S )Nr]  r_  r`  rb  r   T	conjugater   r   r   rQ   rc  rX   rX   rY   "test_simple_complex_left_conjugate  s
   z)TestQR.test_simple_complex_left_conjugatec                 C   sX   ddgddgddgg}t |dd\}}ddg}t||d	d
d\}}t| | | d S )Nrl   r^  rn   rf  rL   r9  r:  r[   r   Trh  rj  rc  rX   rX   rY   'test_simple_complex_tall_left_conjugate  s
   z.TestQR.test_simple_complex_tall_left_conjugatec                 C   sX   g dg dg dg}t |\}}tg d}t||dd\}}t||  | d S )Nr]  r_  r`  rb  Trh  )r   rN   r3   r   r   rQ   rc  rX   rX   rY   #test_simple_complex_right_conjugate  s
   z*TestQR.test_simple_complex_right_conjugatec                 C   s   t g dg dg dg}t|dd\}}}tt|}tt|dd  |d d k t| j	| t
d t|| |d d |f  t|d d |f \}}t|| t|| d S )	Nr]  r_  r`  Tr&  r[   r   rl   )r3   r   r   r4   r   rN   r   r   rQ   rR   rE   r)  rX   rX   rY   test_simple_complex_pivoting  s   "
z#TestQR.test_simple_complex_pivotingc                 C   sZ   t g dg dg dg}t|dd\}}}g d}t||dd\}}}t|| | d S )Nr]  r_  r`  Tr&  rb  r   r3   r   r   r   r.  rX   rX   rY   !test_simple_complex_left_pivoting  
   z(TestQR.test_simple_complex_left_pivotingc                 C   sZ   t g dg dg dg}t|dd\}}}g d}t||dd\}}}t|| | d S )Nr]  r_  r`  Tr&  rb  ro  r.  rX   rX   rY   "test_simple_complex_right_pivoting  rq  z)TestQR.test_simple_complex_right_pivotingc                 C   s^   t jd}d}tdD ] }|||g}t|\}}t|j| t| t|| | qd S Nr   r  rL   rN   rO   r   r   r   r   rR   rE   rt   rc   rT   r   ru   r  r  rX   rX   rY   r       zTestQR.test_randomc           	      C   s   t jd}d}tdD ]3}|||g}t|\}}||g}t||d\}}t|| | t|t|d\}}t|| qd S )Nr   r  rL   r   rN   rO   r   r   r   r   r   rE   	rt   rc   rT   r   ru   r  r  r!  r"  rX   rX   rY   test_random_left  s   zTestQR.test_random_leftc           	      C   s   t jd}d}tdD ]1}|||g}t|\}}||g}t||\}}t|| | t|t|\}}t|| qd S rs  rw  	rt   rc   rT   r   ru   r  r  r!  rK  rX   rX   rY   test_random_right  s   zTestQR.test_random_rightc                 C   s   t jd}d}tdD ]V}|||g}t|dd\}}}tt|}tt |dd  |d d k t	|j
| t| t	|| |d d |f  t|d d |f \}	}
t	||	 t	||
 qd S )Nr   r  rL   Tr&  r[   r   rN   rO   r   r   r   r   r4   r   r   r   rR   rE   rt   rc   rT   r   ru   r  r  r*  re   r+  r#  rX   rX   rY   test_random_pivoting  s   "
zTestQR.test_random_pivotingc                 C   b   t jd}d}d}tdD ] }|||g}t|\}}t|j| t| t|| | qd S Nr      r   rL   rt  rt   rc   r  rT   r   ru   r  r  rX   rX   rY   test_random_tall  s   zTestQR.test_random_tallc           
      C   s   t jd}d}d}tdD ]5}|||g}t|dd\}}||g}t||d\}	}t|| |	 t|t|d\}	}t|	| qd S )Nr   r  r   rL   r9  r:  r   rw  )
rt   rc   r  rT   r   ru   r  r  r!  r"  rX   rX   rY   test_random_tall_left  s   zTestQR.test_random_tall_leftc           
      C   s   t jd}d}d}tdD ]3}|||g}t|dd\}}||g}t||\}	}t|| |	 t|t|\}	}t|	| qd S Nr   r  r   rL   r9  r:  rw  )
rt   rc   r  rT   r   ru   r  r  r!  rK  rX   rX   rY   test_random_tall_right  s   zTestQR.test_random_tall_rightc                 C      t jd}d}d}tdD ]V}|||g}t|dd\}}}tt|}	tt |	dd  |	d d k t	|j
| t| t	|| |d d |f  t|d d |f \}
}t	||
 t	|| qd S )	Nr   r  r   rL   Tr&  r[   r   r|  rt   rc   r  rT   r   ru   r  r  r*  re   r+  r#  rX   rX   rY   test_random_tall_pivoting,  s   "
z TestQR.test_random_tall_pivotingc                 C   s   t jd}d}d}tdD ]2}|||g}t|dd\}}t|j| t| t|| | t|j	||f t|j	||f qd S r  )
rN   rO   r   r   r   r   rR   rE   r   r?   r  rX   rX   rY   test_random_tall_e<  s   zTestQR.test_random_tall_ec                 C   s   t jd}d}d}tdD ]i}|||g}t|ddd\}}}tt|}	tt |	dd  |	d d	 k t	|j
| t| t	|| |d d |f  t|j||f t|j||f t|d d |f dd
\}
}t	||
 t	|| qd S )Nr   r  r   rL   Tr9  r?  r[   r   r:  )rN   rO   r   r   r   r   r4   r   r   r   rR   rE   r   r?   r  rX   rX   rY   test_random_tall_e_pivotingI  s    "
z"TestQR.test_random_tall_e_pivotingc                 C   r  Nr   r   r  rL   rt  r  rX   rX   rY   test_random_trap[     zTestQR.test_random_trapc                 C   r  )	Nr   r   r  rL   Tr&  r[   r   r|  r  rX   rX   rY   test_random_trap_pivotinge  s   "
z TestQR.test_random_trap_pivotingc                 C   st   t jd}d}tdD ]+}|||gd|||g  }t|\}}t| j| t| t|| | qd S Nr   r  rL   rK   )	rN   rO   r   r   r   r   rQ   rR   rE   ru  rX   rX   rY   r  t      zTestQR.test_random_complexc           	      C   s   t jd}d}tdD ]D}|||gd|||g  }t|\}}||gd||g  }t||d\}}t|| | t|t|d\}}t|| qd S )Nr   r  rL   rK   r   rw  rx  rX   rX   rY   test_random_complex_left}  s    zTestQR.test_random_complex_leftc           	      C   s   t jd}d}tdD ]B}|||gd|||g  }t|\}}||gd||g  }t||\}}t|| | t|t|\}}t|| qd S r  rw  rz  rX   rX   rY   test_random_complex_right  s    z TestQR.test_random_complex_rightc                 C   s   t jd}d}tdD ]a}|||gd|||g  }t|dd\}}}tt|}tt |dd  |d d k t	|
 j| t| t	|| |d d |f  t|d d |f \}	}
t	||	 t	||
 qd S )	Nr   r  rL   rK   Tr&  r[   r   )rN   rO   r   r   r   r   r4   r   r   r   rQ   rR   rE   r}  rX   rX   rY   test_random_complex_pivoting  s    "
z#TestQR.test_random_complex_pivotingc                 C   sL   g dg dg dg}t |dd\}}t|j| td t|| | d S Nr  r  r  Fr}   rl   r  r  rX   rX   rY   r        zTestQR.test_check_finitec           
      C   s   g dg dg dg}t |d d\}}t |dd\}}t|| t|| t |dd\}}t|| t|| t |dd\}}	t|| t|	| ttt |fdd	i ttt |fdd
i d S )Nr  r  r  )lworkrl   r  r   r  r   rL   )r   r   r   	Exception)
rt   ru   r  r  r+  r#  q3r3q4r4rX   rX   rY   
test_lwork  s   





zTestQR.test_lworkN)7r   r   r   rx   r$  r%  r,  r0  r2  r3  r5  r7  r8  r>  r@  rE  rI  rL  rN  rQ  rS  rU  rV  rW  rX  rZ  r[  r|   rd  re  rg  rk  rl  rm  rn  rp  rr  r  ry  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r   r  rX   rX   rX   rY   r    sj    

	

			
	
				
	r  c                   @   r  )TestRQc                 C   sH   g dg dg dg}t |\}}t||j td t|| | d S r  r   r   rR   rE   rt   ru   r  r  rX   rX   rY   rx     r  zTestRQ.test_simplec                 C   s<   g dg dg dg}t |\}}t |dd}t|| d S )Nr  r  r  r  r:  )r   r   )rt   ru   r  r  r#  rX   rX   rY   test_r  s   zTestRQ.test_rc                 C   s^   t jd}d}tdD ] }|||g}t|\}}t||j t| t|| | qd S rs  rN   rO   r   r   r   r   rR   rE   rt   rc   rT   r   ru   r  r  rX   rX   rY   r    rv  zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  rl   r  r  rX   rX   rY   r3    r4  zTestRQ.test_simple_trapc                 C   sH   ddgddgddgg}t |\}}t|j| td t|| | d S r6  r  r  rX   rX   rY   r7    r  zTestRQ.test_simple_tallc                 C   sB   g dg dg}t |\}}t||j td t|| | d S )NrO  r  rl   r  r  rX   rX   rY   rQ    r4  zTestRQ.test_simple_fatc                 C   sL   g dg dg dg}t |\}}t|| j td t|| | d S r\  )r   r   rQ   rR   rE   r  rX   rX   rY   r|     ra  zTestRQ.test_simple_complexc                 C   b   t jd}d}d}tdD ] }|||g}t|\}}t||j t| t|| | qd S r  r  rt   rc   r  rT   r   ru   r  r  rX   rX   rY   r    r  zTestRQ.test_random_tallc                 C   r  r  r  r  rX   rX   rY   r    r  zTestRQ.test_random_trapc                 C   s   t jd}d}d}tdD ]2}|||g}t|dd\}}t||j t| t|| | t|j	||f t|j	||f qd S )Nr   r   r  rL   r9  r:  )
rN   rO   r   r   r   r   rR   rE   r   r?   r  rX   rX   rY   test_random_trap_economic  s   z TestRQ.test_random_trap_economicc                 C   st   t jd}d}tdD ]+}|||gd|||g  }t|\}}t|| j t| t|| | qd S r  )	rN   rO   r   r   r   r   rQ   rR   rE   r  rX   rX   rY   r    r  zTestRQ.test_random_complexc                 C   s   t jd}d}d}tdD ]=}|||gd|||g  }t|dd\}}t|| j t| t|| | t	|j
||f t	|j
||f qd S )Nr   r   r  rL   rK   r9  r:  )rN   rO   r   r   r   r   rQ   rR   rE   r   r?   r  rX   rX   rY   test_random_complex_economic  s    z#TestRQ.test_random_complex_economicc                 C   sL   g dg dg dg}t |dd\}}t||j td t|| | d S r  r  r  rX   rX   rY   r   %  r  zTestRQ.test_check_finiteN)r   r   r   rx   r  r  r3  r7  rQ  r|   r  r  r  r  r  r   rX   rX   rX   rY   r    s    	

	r  c                   @   s   e Zd Zdd Zdd Zejdde	d de	dd	gfd
e	dd	e	d dgfddd	e	de	d gfde	de	d dd	gfdd e	dd	e	d dgfgdd Z
dd Zdd ZdS )	TestSchurc                 C   sN   t || | j |||dd t || j tt| dd|dd d S )Nz&Schur decomposition does not match 'a'r   r   zu is not unitary)r   rQ   rR   rN   rE   r_   )rt   ru   trk  r   r   rX   rX   rY   check_schur.  s   "
zTestSchur.check_schurc                 C   s   g dg dg dg}t |\}}| j|||ddd t |d\}}tttt|o4ttt| | j|||ddd t||\}}| j|||ddd d S )Nr     rl   r  r  rl   ro   r  +<r   r   r.  )r   r  r   rN   r  r<   r>   r   )rt   ru   r  r  tczctc2zc2rX   rX   rY   rx   7  s   (zTestSchur.test_simplezsort, expected_diaglhprL         r\   rhpiucoucc                 C   s   | dkS )NrC  rX   )r  rX   rX   rY   <lambda>G      zTestSchur.<lambda>c                 C   sd   g dg dg dg dg}t ||d\}}}| j|||ddd tt||d	d
 td| d S )Nr  r   r  r  g      g      r  r  r         @      g      @r  r  r        @r@   r  r  r  -q=r   rL   )r   r  r   rN   r4   r   )rt   r@   expected_diagru   r  rk  sdimrX   rX   rY   	test_sortA  s   zTestSchur.test_sortc                 C   s@   g dg dg dg dg}t tt|dd t tt|dd d S )Nr  r  r  r  unsupportedr  r[   )r   r   r   r  rX   rX   rY   test_sort_errorsU  s   zTestSchur.test_sort_errorsc                 C   sB   g dg dg dg}t |dd\}}t|| | j | d S )Nr  r  r  Fr}   )r   r   rQ   rR   )rt   ru   r  r  rX   rX   rY   r   ]  s   zTestSchur.test_check_finiteN)r   r   r   r  rx   r  r  r  rN   r=   r  r  r   rX   rX   rX   rY   r  ,  s    	
 
r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestHessenbergc                 C   sb   g dg dg dg}g dg dg dg}t |dd\}}t|j| | | t||d	d
 d S )Nikiif     "  ir   g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@r[   calc_qr  decimalr   r   rR   rt   ru   h1rg   r  rX   rX   rY   rx   e  s   zTestHessenberg.test_simplec                 C   sB   g dg dg dg}t |dd\}}t| j| | | d S )Nr  )r  y             f@r  )y             ;r   r  r[   r  )r   r   rQ   rR   rt   ru   rg   r  rX   rX   rY   r|   p  s   z"TestHessenberg.test_simple_complexc                 C   sV   g dg dg dg dg dg dg dg}t |dd	\}}t|j| | | d S )
N)r[   rL   rl   r  rn   ro   r  )r   rL   rl   r  ro   r  rL   )r   rL   rL   rl   r   rl   rL   )r   r   rL   r  r   r   rL   )r   rl   r[   rL   r   r[   rL   )r   r[   rL   rl   r   r[   r   )r   r   r   r   r   r[   rL   r[   r  r  r  rX   rX   rY   test_simple2w  s   zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nrl   rL   )r   r   r[   r  )rN   rE   r   r   rR   r  rX   rX   rY   test_simple3  s   
zTestHessenberg.test_simple3c                 C   sT   t jd}d}tdD ]}|||g}t|dd\}}t|j| | | qd S )Nr   r  rL   r[   r  )rN   rO   r   r   r   r   rR   rt   rc   rT   r   ru   rg   r  rX   rX   rY   r    s   zTestHessenberg.test_randomc                 C   sj   t jd}d}tdD ]&}|||gd|||g  }t|dd\}}t| j| | | qd S )Nr   r  rL   rK   r[   r  )rN   rO   r   r   r   r   rQ   rR   r  rX   rX   rY   r    s    z"TestHessenberg.test_random_complexc                 C   sd   g dg dg dg}g dg dg dg}t |ddd	\}}t|j| | | t||d
d d S )Nr  r  r  r  r  r  r[   F)r  r~   r  r  r  r  rX   rX   rY   r     s   z TestHessenberg.test_check_finitec                 C   sx   ddgddgg}t |dd\}}t|td t|| ddgdd	gg}t |dd\}}t|td t|| d S )
NrL   r[   r  r  r  y       @      r   y      @      @y      (@       )r   r   rN   rE   )rt   ru   rg   r  r   h2r+  rX   rX   rY   test_2x2  s   
zTestHessenberg.test_2x2N)r   r   r   rx   r|   r  r  r  r  r   r  rX   rX   rX   rY   r  c  s    r  zBuild Dependenciesblasnameversionc                   @   sj   e Zd Zejjejdkoedkoe	dk dddd Z
dd	 Zd
d Zdd Zdd Zdd Zdd ZdS )TestQZdarwinopenblasz
0.3.21.devz8gges[float32] broken for OpenBLAS on macOS, see gh-16949r  c           	      C   s   t jd}d}|||gt}|||gt}t||\}}}}t|| |j |dd t|| |j |dd t||j t|dd t||j t|dd t	t 
t|dk d S )N90  rn   r  r   )rN   rO   r   rS   r:   r   r   rR   rE   r   r   r4   	rt   rc   rT   rW   r   AABBQr   rX   rX   rY   test_qz_single  s   zTestQZ.test_qz_singlec           	      C   s   t jd}d}|||g}|||g}t||\}}}}t|| |j | t|| |j | t||j t| t||j t| tt t	|dk d S )Nr  rn   r   
rN   rO   r   r   r   rR   rE   r   r   r4   r  rX   rX   rY   test_qz_double  s   zTestQZ.test_qz_doublec           	      C   s   t jd}d}|||gd|||g  }|||gd|||g  }t||\}}}}t|| | j | t|| | j | t|| j t| t|| j t| tt 	t
|dk tt 	t
|jdk d S )Nr  rn   rK   r   )rN   rO   r   r   r   rQ   rR   rE   r   r   r4   r   r  rX   rX   rY   test_qz_complex  s     zTestQZ.test_qz_complexc           	      C   s  t jd}d}|||gd|||g  t}|||gd|||g  t}t||\}}}}t|| | j |dd t|| | j |dd t|| j t	|dd t|| j t	|dd t
t t|dk t
t t|jdk d S )Nr  rn   rK   r  r   )rN   rO   r   rS   r;   r   r   rQ   rR   rE   r   r   r4   r   r  rX   rX   rY   test_qz_complex64  s   &&zTestQZ.test_qz_complex64c                 C   s   t jd}d}|||g}|||g}t||dd\}}}}|| | j }	t|	j| t|	jd || | j }
t|
j| t|
jd t|| j t	| t|| j t	| t
t t|dk d S )Nr  rn   r.  )outputr   )rN   rO   r   r   rQ   rR   r   r'  r   rE   r   r   r4   )rt   rc   rT   rW   r   r  r  r  r   aabbrX   rX   rY   test_qz_double_complex  s   zTestQZ.test_qz_double_complexc                 C   s^   t g dg dg dg dg}t g dg dg dg dg}ttt||d	d
 d d S )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r  r       Er  )皙@r        Gr  )r  r  r  r  )r  r   g      r  )r  r  r  r  )r  r   r  r  c                 S   s   |dkS )Nr   rX   )araibetarX   rX   rY   r    r  z,TestQZ.test_qz_double_sort.<locals>.<lambda>r  )	rN   r3   r   r   r   r   r   rR   r   )rt   rW   r   r  r  r  r   r  rX   rX   rY   test_qz_double_sort  s   

zTestQZ.test_qz_double_sortc           	      C   s   t jd}d}|||g}|||g}t||dd\}}}}t|| |j | t|| |j | t||j t| t||j t| tt t	|dk d S )Nr  rn   Fr}   r   r  r  rX   rX   rY   r   b  s   zTestQZ.test_check_finiteN)r   r   r   r  r  xfailsysplatformblas_providerblas_versionr  r  r  r  r  r  r   rX   rX   rX   rY   r    s    

cr  c                   @   sp   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )	TestOrdQZc           
      C   s  t 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}t 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}t d}t ddg}t ddg}	|||||	g| _|||||	g| _d S )N)y5     6y     J@     @Iy     @A     _@y      @      ?)yq=
ףpݿQy           By      /     @M@y      %      )y333333@      yC@1y      Q      )@y            )y      @@y,@fffffE@y     @@      Gy      3     @@)y      ?      y?333333?y              y              )y?333333y              y            @y333333	)y      ?        y333333@?y            y              )rK   y333333@y              y      @      )r  r  r  r  r  )r  r  r  r  )r  g      :@r  r  )r[   rL   r[   )r[   rl   r  )r[   rl   rl   )r[   rl   r  r  )r   r  r   r   )r  r  r  r  )r  r  r  r   )rC  r  r	  r  )r	  r  r  r  )r  r  r  r   )r   r  r  r  )r   r  r  r  rL   r   r[   )rN   r3   rE   r4   rW   r   )
clsA1B1A2B2A3B3A4B4A5rX   rX   rY   r  p  sF   

	




zTestOrdQZ.setup_classc                    sV   t jdd  fddt| j| jD }W d    t|S 1 s"w   Y  t|S )Nraiser   c                    s   g | ]\}}t || d qS )r  )r   ).0AiBir  rX   rY   
<listcomp>  s    z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rN   r   ziprW   r   tuple)rt   r@   retrX   r  rY   	qz_decomp  s   
zTestOrdQZ.qz_decompc
                 C   sf  t j|j }
t||j  |
 t|	|	j  |
 t|| ||	  t|| ||	  tt |dt |j tt |dt |j t	|jd D ]}|dkr^|||d f dkr^qM||jd d k r||d |f dkrt
|||d ||d f |||d ||d f \}}|d jdk r|ddg }|||d  |||d   }|d jdk r|ddg }t|| qM|| dkr|| dkrt|||f d t|||f d qM|| dkrt|||f d qMt|||f |||f  || ||   qMt|}d}t	|jd D ]}|t || gt || g}|s-|r-J |}qd S )Nr   r   r   r[   rL   T)rN   rE   r?   r   rR   rQ   r   trilr8   r   r	   r   r   r   r1   r3   )rt   rW   r   r@   r  r  alphar  r  r   Idr   evals_tmpsortfunlastsortcursortrX   rX   rY   check  s@   &> ,"
zTestOrdQZ.checkc                 C   s@   |  |}t|| j| jD ]\}}}| j|||g|R   qd S r  )r  r  rW   r   r(  )rt   r@   r  retir  r  rX   rX   rY   	check_all  s   
zTestOrdQZ.check_allc                 C      |  d d S )Nr  r*  r  rX   rX   rY   test_lhp     zTestOrdQZ.test_lhpc                 C   r+  )Nr  r,  r  rX   rX   rY   test_rhp  r.  zTestOrdQZ.test_rhpc                 C   r+  )Nr  r,  r  rX   rX   rY   test_iuc  r.  zTestOrdQZ.test_iucc                 C   r+  )Nr  r,  r  rX   rX   rY   test_ouc  r.  zTestOrdQZ.test_oucc                 C      dd }|  | d S )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S Nr  r   FrN   
empty_likeboolr   r  rt  outnonzerorX   rX   rY   r@     
   
z TestOrdQZ.test_ref.<locals>.sortr,  rt   r@   rX   rX   rY   test_ref     zTestOrdQZ.test_refc                 C   r2  )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S r3  r4  r7  rX   rX   rY   r@     r:  z TestOrdQZ.test_cef.<locals>.sortr,  r;  rX   rX   rY   test_cef  r=  zTestOrdQZ.test_cefc                 C   s|   t | jd | jd dd}| j| jd | jd dg|R   t | jd | jd dd}| j| jd | jd dg|R   d S )Nr[   rL   r  r  )r   rW   r   r(  )rt   r  rX   rX   rY   test_diff_input_types	  s   "&zTestOrdQZ.test_diff_input_typesc                 C   s
  t d}t ddg}dddgfdddgfdddgfdddgfg}t d}t d	d
g}dddgfdddgfdddgfdddgfg}t d}t ddg}ddt jgfddt jgfdt jdgfg}	t d}
t ddg}ddt jgfddt jgfdt jdgfg}t ddg}t ddg}ddt jgfddt jgfg}||||
|g}|||||g}|||	||g}t|||D ]G\}}}|D ]?\}}t|||d\}}}}}}|dk}|dk}t |}t j|||@ < t j|| |@ < ||  ||   || < t|| qqd S )NrL   r   r\   r  r  r  r  r  y             ?y      ?      ?yٿɿ      ?      r   r[   r  )	rN   rE   r4   r   nanr  r   r5  r   )rt   r  r  	expected1r  r  	expected2r  r  	expected3r  r  	expected4r  B5	expected5rW   r   expectedr  r  	expectedisortstrexpected_eigvalsr#  r   r  azerobzeror  rX   rX   rY   test_sort_explicit		  s\   












zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodr  r  r(  r*  r-  r/  r0  r1  r<  r>  r?  rN  rX   rX   rX   rY   r  o  s    
6.r  c                   @   s$   e Zd Zdd Zejjdd ZdS )TestOrdQZWorkspaceSizec                 C   s   t jd}d}t jt jfD ] }|||f|}|||f|}t||dd dd}qt jt jfD ] }|||f|}|||f|}t||dd dd}q5d S )	Nr     c                 S      | |k S r  rX   r   r  rX   rX   rY   r  B	  r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r'  )r@   r  c                 S   rR  r  rX   rS  rX   rX   rY   r  H	  r  r.  )	rN   rO   r   r:   r   rS   r   r  r;   )rt   rc   r3  ddtyperW   r   r#  rX   rX   rY   test_decompose:	  s   z%TestOrdQZWorkspaceSize.test_decomposec                 C   sp   t jd}d}t jt jt jt jfD ]#}|||f|}|||f|}t||dd\}}}}	}
}qd S )Nr  rQ  r  r  )	rN   rO   r   r:   r   r  r;   rS   r   )rt   rc   r3  rT  rW   r   SrR   r   r  Ur  rX   rX   rY   test_decompose_oucK	  s   z)TestOrdQZWorkspaceSize.test_decompose_oucN)r   r   r   rU  r  r  r  rX  rX   rX   rX   rY   rP  9	  s    rP  c                   @   r  )TestDatacopiedc                    s   ddl m} tddgddgg}t| | }| }G  fddd}G  fdd	d	}| }| }|d
f d
f|df|d
f|d
f|d
ffD ]\}	}
t|	}t|||	|
t|	d qHd S )Nr   )_datacopiedr[   rL   rl   c                       s   e Zd Zd fdd	ZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1Nc                    s    S r  rX   )rt   rV   ry   rW   rX   rY   	__array__a	  s   z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__)NN)r   r   r   r\  rX   r[  rX   rY   Fake1`	  s    r]  c                       s   e Zd Z jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__rX   r[  rX   rY   Fake2d	  s    
r_  FTr   )scipy.linalg._decomprZ  rG   rB   tolistry   r   repr)rt   rZ  r   LM2r]  r_  F1F2itemstatusarrrX   r[  rY   test_datacopiedX	  s"   zTestDatacopied.test_datacopiedN)r   r   r   rj  rX   rX   rX   rY   rY  V	  r  rY  c                  C   F   t dtjd} tj| jddtd}d|_t|dd t|jdd d	S )
z4Check linalg works with non-aligned memory (float32)i  r  rL   r   offsetcountrV   r  r  Toverwrite_aN)	r9   rN   uint8
frombufferdatar:   r?   r	   rR   ru   r  rX   rX   rY   test_aligned_mem_floatq	  s
   rv  ppc64lezcrashes on ppc64ler  c                  C   rk  )
z4Check linalg works with non-aligned memory (float64)i$  r  r  r   rl  ro  Trp  N)	r9   rN   rr  rs  rt  r,  r?   r	   rR   ru  rX   rX   rY   test_aligned_mem~	  s
   rx  c                  C   rk  )
z>Check that complex objects don't need to be completely alignediH  r  r  r   rl  ro  Trp  N)	r8   rN   rr  rs  rt  r.  r?   r	   rR   ru  rX   rX   rY   test_aligned_mem_complex	  s
   ry  c                 C   s   t |}tt|D ]a}|d d  }t|| tjrktj|| j|| jj	 d tj
d}tj|jd|| j|| jd}|| j|_|| |d< |||< | |i | t|| jdkrk|| j||< | |i | q
d S )Nr  r  r  rl  .r[   )r  r   r_   r]   rN   rD   r8   r   rV   itemsizerr  rs  rt  r?   rR   )funcr6  kwargsr   ru   r  rX   rX   rY   check_lapack_misaligned	  s"   &r}  z0Ticket #1152, triggers a segfault in rare cases.)runr  c            	      C   s  t jdtd} t d}d|_t jdt jd}t j|jddtd}d|_t d}t	|\}}t
|ftdd	ft|ftdd	ft|ftdd	ft	|ftdd	ft||f|ftdd
ft||ftdddft| ftdd	ft|ftdd	ft|ftdd	ft|ft ft|ftdd	ft| ftdd	ft|ftdd	ft|ftdd	ft|ftdd	ft|ftdd	ffD ]\}}}t||| qd S )Nr  r  r   ro  i N  r  rl  Trp  )overwrite_b)rq  r  )rN   rE   r,  r9   r?   rr  rs  rt  r   r   r	   dictr
   r   r   r   r   r   r   r   r   r   r   r}  )	r   RrV  r   LUpivr{  r6  r|  rX   rX   rY   test_lapack_misaligned	  s6   

r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestOverwritec                 C      t tdg t tddg d S Nr   )rF   r	   r  rX   rX   rY   test_eig	     zTestOverwrite.test_eigc                 C   r  r  )rF   r   r  rX   rX   rY   	test_eigh	  r  zTestOverwrite.test_eighc                 C      t tdg d S Nr<  )rF   r   r  rX   rX   rY   rd  	  r  zTestOverwrite.test_eig_bandedc                 C   r  r  )rF   r
   r  rX   rX   rY   test_eigvals	  r  zTestOverwrite.test_eigvalsc                 C   r  r  )rF   r   r  rX   rX   rY   test_eigvalsh	  r  zTestOverwrite.test_eigvalshc                 C   r  r  )rF   r   r  rX   rX   rY   r[  	  r  z!TestOverwrite.test_eigvals_bandedc                 C   r  r  )rF   r   r  rX   rX   rY   test_hessenberg	  r  zTestOverwrite.test_hessenbergc                 C   r  r  )rF   r   r  rX   rX   rY   test_lu_factor	  r  zTestOverwrite.test_lu_factorc                    s<   t g dg dg dg}t| t fdddg d S )Nrk   r  )r  r  r  c                    s
   t  | S r  )r   )r   xlurX   rY   r  	     
 z-TestOverwrite.test_lu_solve.<locals>.<lambda>)rl   )rN   r3   r   rF   )rt   r  rX   r  rY   test_lu_solve	  s   zTestOverwrite.test_lu_solvec                 C   r  r  )rF   r   r  rX   rX   rY   test_lu	  r  zTestOverwrite.test_luc                 C   r  r  )rF   r   r  rX   rX   rY   test_qr	  r  zTestOverwrite.test_qrc                 C   r  r  )rF   r   r  rX   rX   rY   test_rq	  r  zTestOverwrite.test_rqc                 C   r  r  )rF   r   r  rX   rX   rY   
test_schur	  r  zTestOverwrite.test_schurc                 C   s    t dd dgtjtjgd d S )Nc                 S   s
   t | dS )Nr.  )r   ru   rX   rX   rY   r  	  r  z2TestOverwrite.test_schur_complex.<locals>.<lambda>r   )dtypes)rF   rN   r:   r   r  rX   rX   rY   test_schur_complex	  s   

z TestOverwrite.test_schur_complexc                 C   s    t tdg t dd dg d S )Nr   c                 S   s   t | ddS )Nr  r}  )r   r  rX   rX   rY   r  
  s    z(TestOverwrite.test_svd.<locals>.<lambda>)rF   r   r  rX   rX   rY   test_svd	  s   zTestOverwrite.test_svdc                 C   r  r  )rF   r   r  rX   rX   rY   test_svdvals
  r  zTestOverwrite.test_svdvalsN)r   r   r   r  r  rd  r  r  r[  r  r  r  r  r  r  r  r  r  r  rX   rX   rX   rY   r  	  s"    r  c                 C   s$  t j| dftd|}t |j}d| }t|}t|j| df t	||
 |d t|j}t|jd t	||
 |d | dkr|st jd t j| dt jd|  }|dt j| d t jd|   }||}t|d	d
}t|j| df t|dd
}t|j| df d S d S d S )NrL   r  r  r[   r  rL   r[   rn   -C6?MbP?rcondư>ro   )rN   r   r,  rS   r  r  r   r   r?   r   meanrR   rO   r  rP   )rT   rV   skip_bigXr  r   YrX   rX   rY   _check_orth
  s&   
$
r  r  z"test only on 64-bit, else too slowc               
   C   s>   d} zt | tjdd W d S  ty } ztd|d }~ww )Ni T)r  z.memory error perhaps caused by orth regression)r  rN   r   MemoryErrorAssertionError)rT   r{  rX   rX   rY   test_orth_memory_efficiency"
  s   r  c                  C   s@   t jt jt jt jg} g d}t| |D ]	\}}t|| qd S )Nr[   rL   rl   r  r   )rN   r:   r   r;   r  	itertoolsproductr  )r  r  r  rT   rX   rX   rY   	test_orth3
  s
   r  c                  C   s  t jd t jt jt jt jg} g d}t| |D ]\}}t j	d|f|d}t 
|j}d| }t|}t|j||d f t|| d|d t|j}t|jd t|j| d|d t jd|d  |}t|}t|j||d |d  f t|| d|d |d	krt jd t j|d	t jd	| }|d
t j|d t jd|  }||}t|dd}t|j||d	 f t|dd}t|j||d f qd S )Nr[   r  rL   r  r  r   r  r  rn   r  r  r  r  ro   )rN   rO   r  r:   r   r;   r  r  r  r   r  r  r$   r   r?   r   rR   randnrP   rS   )r  r  r  rT   r  r  r   r  rX   rX   rY   test_null_space:
  s8   
$
r  c                  C   s>  t dt} | d d d df }| d d dd f }tt||tjd gd dd tt||tjd gd dd ||fD ]}tt||t|jd dd q=tg dg dg d	g d
g}d}tt|d d d df |d d dd f d |dd tt|d d dd f |d d d df d |dd d}tt|d d d df |d d dgf |dd tt|d d dgf |d d d df |dd d}tt|d d d df |d d dgf |dd tt|d d dgf |d d d df |dd d}tt|d d d df |d d dd f |dgdd t	t
t|d | t	t
t||d  t	t
t|d d | tg dg dg dg dg dg}tg dg dg dg dg dg}ttjd ddg}tt|||dd dgdgg}ddgddgg}tt||ddd tt||ddd d S )Nr  rl   r  r  r  r[   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rL   r   r  r  gL0?gĹ-?gyv?r   r  )r   r[   r   )r   r   r[   r   r   r@  rC  )r!   r,  r   r    rN   pir8   r?   r3   r   r   )HrW   r   r  rH  ru   r   rX   rX   rY   test_subspace_angles`
  sl   
  0022220

r  c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestCDF2RDFc                 C   s   t d||S )Nz...ij,...jk->...ik)rN   einsum)rt   ru   r   rX   rX   rY   matmul
  r.  zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r  )r   r  )rt   rv   rf   r  rX   rX   rY   assert_eig_valid
  s   

zTestCDF2RDF.assert_eig_validc                 C   s@   t d}t dt d}}t||\}}| ||| d S )Nr   r   )rN   r   r%   r  rt   r  rv   rf   wrr   rX   rX   rY   test_single_array0x0real
  s   
z$TestCDF2RDF.test_single_array0x0realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nr[   rL   rl   r   rN   r3   r6   r	   r%   r  r  rX   rX   rY   test_single_array2x2_real
     z%TestCDF2RDF.test_single_array2x2_realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nr[   rL   r   r  r  rX   rX   rY   test_single_array2x2_complex
  r  z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S )Nrk   rm   r  r  rX   rX   rY   test_single_array3x3_real
     z%TestCDF2RDF.test_single_array3x3_realc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S Nrk   )r   r  rn   )r   r
  r  r  r  rX   rX   rY   test_single_array3x3_complex
  r  z(TestCDF2RDF.test_single_array3x3_complexc                 C   s\   t ddD ]&}tjd tjd||}tj|\}}t||\}}| ||| qd S )Nr[   r  iɚ;r   )	r   rN   rO   r  rP   r6   r	   r%   r  rt   r   r  rv   rf   r  r   rX   rX   rY   test_random_1d_stacked_arrays
  s   z)TestCDF2RDF.test_random_1d_stacked_arraysc                 C   sR   t ddD ]!}tjdd||}tj|\}}t||\}}| ||| qd S )Nr[   r  r  )r   rN   rO   rP   r6   r	   r%   r  r  rX   rX   rY   test_random_2d_stacked_arrays
  s   z)TestCDF2RDF.test_random_2d_stacked_arraysc                 C   s(   t dt d}}ttt|| d S )NrX   )rL   )rN   r   r3   r   r   r%   rt   rv   rf   rX   rX   rY   test_low_dimensionality_error
  s   z)TestCDF2RDF.test_low_dimensionality_errorc                 C   s0   t dt ddd}}ttt|| d S )Nrl   ro   rL   rN   r9   r   r   r   r%   r  rX   rX   rY   r   
     z!TestCDF2RDF.test_not_square_errorc                 C   s>   t g dg dg dg}t j|\}}ttt|| d S r  rN   r3   r6   r	   r   r   r%   rt   r  rv   rf   rX   rX   rY   test_swapped_v_w_error
  s   z"TestCDF2RDF.test_swapped_v_w_errorc                 C   s0   t dt ddd}}ttt|| d S )Nrl   r   r  r  r  rX   rX   rY   test_non_associated_error
  r  z%TestCDF2RDF.test_non_associated_errorc                 C   s   t g dg dg dg}t j|\}}ttt|| t g dg dg dgg dg dg dgg}t j|\}}ttt|| d S )Nrk   r{   )rL   rn   y      @      r  r  rX   rX   rY   test_not_conjugate_pairs
  s   z$TestCDF2RDF.test_not_conjugate_pairsN)r   r   r   r  r  r  r  r  r  r  r  r  r  r   r  r  r  rX   rX   rX   rY   r  
  s    	r  )F)r  r  r  numpyrN   numpy.testingr   r   r   r   r   r   r  r   r   scipy.linalgr	   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&   scipy.linalg.lapackr'   r(   r)   r*   r+   r,   r-   r.   r/   scipy.linalg._miscr0   scipy.linalg._decomp_qzr1   scipy.statsr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   scipy.linalg._testutilsrF   scipy.sparse._sputilsrG   scipy._lib._testutilsrH   scipy.linalg.blasrI   scipy.__config__rJ   ImportErrorr,  rZ   r   REAL_DTYPESr  rM   r  rh   ri   r   r  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rP  rY  rv  r  r  machinerx  ry  r}  r  r  r  r  r  rV   intprz  r  r  r  r  r  rX   rX   rX   rY   <module>   s     ,T }    * 9    .j7M
 : K

 
8&: