o
    h                    @   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
lQmRZRmSZS d dlTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[ zd dl\m]Z] W n e^y   dZ]Y nw de_fddZ`ejEejagZbejFejcgZdebed Zed]ddZfdd ZgG dd dZhG dd dZiG dd dZjG dd dZkG d d! d!ZlG d"d# d#ZmG d$d% d%emZnG d&d' d'ZoG d(d) d)ZpG d*d+ d+ZqG d,d- d-ZrG d.d/ d/ZsG d0d1 d1Ztd ZuZve]dure]d2 d3 d4 Zue]d2 d3 d5 ZvG d6d7 d7ZwG d8d9 d9ZxG d:d; d;ZyG d<d= d=Zzd>d? Z{ej|j}e~ d@kdAdBdCdD ZdEdF ZdGdH Zej|jddIdJdKdL ZG dMdN dNZd^dOdPZej|jej|j}eejjdQk dRdBdSdT ZdUdV ZdWdX ZdYdZ ZG d[d\ d\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)seedrandom)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nprG   randconjTr=   rE   astype)nposdefdtypeA rY   Y/var/www/html/scripts/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrix,   s    
r[      c                 C   s~   t | }t |rt|jdt|j  S t |jj}t 	|\}}d||  }||9 }t j
||d || }t ||S )zCClears trailing `fuss_binary_bits` of mantissa of a floating numberrM          @)out)rP   
asanyarrayiscomplexobj
clear_fussrealimagfinforW   nmantfrexprintldexp)arfuss_binary_bitsxsignificant_binary_bitsx_mantx_expfrY   rY   rZ   ra   @   s   

ra   c                 C   s   t | tr| }t|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'.
    rN      r   zinput type not supported.      ?)
isinstanceintrG   rD   lenr?   	TypeErrorr2   rvsrS   rR   r4   )dim_or_eigvdimdvhrY   rY   rZ   symrandR   s   
	


r|   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rp   rN      rN         	   ]   rN   r   r
   r=   r   selfawexact_wrY   rY   rZ   test_simplen   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 )Nr   r   ry   r   r   rN   r   )r3   rS   copyr
   r=   r   r   rY   rY   rZ   test_simple_trt   s   "zTestEigVals.test_simple_trc                 C   r~   )Nr   rN   r   y      @      ?y      "@      ?y      W@      @rN   r   r   r   rY   rY   rZ   test_simple_complex|   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 )	Nr   r   Fcheck_finiter   r   rN   r   r   r   rY   rY   rZ   test_finite   s   "zTestEigVals.test_finiteN)__name__
__module____qualname__r   r   r   r   rY   rY   rY   rZ   r}   l   s
    r}   c                   @   sz   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	j
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 )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 )Nr   r   r   r   rN   r   rp   r         @r   r   r   r   rp   r   rN   leftright)r3   r	   r=   r0   r   rA   rangerS   	r   r   r   rz   r   v0v1v2irY   rY   rZ   r      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 )Nrp   rN   r         ?       @y      ?       )r3   r	   r   r   rR   rS   r   r   r   vlvrr   rY   rY   rZ   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 )Nr   r   rp   r   r   )r3   r	   r   r   rR   rS   r   rY   rY   rZ   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 )Nrp   r   Thomogeneous_eigvals)rp   r   r   )r	   r   r   r   rP   inf)r   r   br   r   rY   rY   rZ   test_gh_3054   s   
zTestEig.test_gh_3054c                 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d|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| }tt|}tt|}t|| || dd|d	 t	t
|}tt
|D ]}
t|d d |
f ||
< qWt|t|j|d tt|t|t|  d S )N
Tr   rp   r   gvIh%<=rtolatolerr_msggHz>)r   r   r   )r   r   r   r   )rB   rP   rE   r?   r	   r
   r   r   lexsortemptyrt   r0   onessizeallrC   r7   ra   r@   )r   rX   BB0msgr   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_finrY   rY   rZ   _check_gen_eig   sl   

"
 zTestEig._check_gen_eigzSee gh-2254reasonc                 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 | || 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   )r3   rP   errstater   r   rX   r   rY   rY   rZ   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)rp   r   r   )rN   r   r   )r   rN   r   )r   r   rN   )rp   r   r   )r   rp   r   r   r   r   r   r   r   r   r   )r4   r3   r8   rE   rP   blockr   r   )r   MKDZI3rX   r   rY   rY   rZ   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 )	NrN   )rp   r   r   r   )r   rp   r   r   r   )r   r   rp   r   )r   r   r   rp   rp   rY   )omegac1c2rX   r   rY   rY   rZ   matrices$  s   


z)TestEig.test_bad_geneig.<locals>.matricesr   r   d         @)r   )rP   r   r   r   )r   r   krX   r   rY   rY   rZ   test_bad_geneig!  s   "zTestEig.test_bad_geneigc                 C   st   t d td}| |d  td}| || tddtd  }| |d  tddtd  }| || d S )N  r   r   rM   )rF   r|   r   rG   r   rY   rY   rZ   test_make_eigvals8  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 )Nr   r   Fr   r   r   rN   r   rp   r   r   r   r   r   )r	   r=   r3   r0   r   rA   r   r   rY   rY   rZ   test_check_finiteF  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.r   r   rN   N)rP   r9   reshapeassert_raises
ValueErrorr	   )r   rX   rY   rY   rZ   test_not_square_errorW  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.rN         "@r   N)rE   rP   r9   r  r  r  r	   r   rY   rY   rZ   test_shape_mismatch\  s   zTestEig.test_shape_mismatchN)r   r   r   r   r   r   r   r   pytestmarkxfailr   r   r  r  r  r  r
  rY   rY   rY   rZ   r      s    
	B
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d Zdd Zdd Zdd ZdS )TestEigBandedc                 C      |    d S N)create_bandmatr   rY   rY   rZ   setup_methodf     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`.
   rN         ?rp         r   g       r   rM         r]   NrW   r         ?      ?)KLKUr4   r5   sym_matherm_matreal_matcomp_matr6   r	   rb   r7   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr8   floatbandmat_symcomplexbandmat_hermr   bandmat_realbandmat_compr9   r   bc)r   NewevargsLDABr   rY   rY   rZ   r  i  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.rp   	compute_vN)r+   r&  r7   r   r@   r!  absr"  r   r   evecinfoevec_rY   rY   rZ   
test_dsbev     zTestEigBanded.test_dsbevc                 C   r1  )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.rp   r2  N)r,   r&  r7   r   r@   r!  r4  r"  r5  rY   rY   rZ   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.        rp   rN   r3  r   N)
r?   r  r-   r&  r7   r   r@   r!  r4  r"  r   r,  r   r6  numifailr7  r8  rY   rY   rZ   test_dsbevx     zTestEigBanded.test_dsbevxc                 C   r1  )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.rp   r2  N)r.   r(  r7   r   r@   r#  r4  r$  r5  rY   rY   rZ   test_zhbevd  r:  zTestEigBanded.test_zhbevdc              	   C   r<  )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.r=  rp   rN   r>  N)
r?   r  r/   r(  r7   r   r@   r#  r4  r$  r?  rY   rY   rZ   test_zhbevx  rC  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.rN   r   r   selectselect_rangerp   h㈵>rz   Fr   N)
r   r&  rb   r   r@   r!  r(  r#  rP   longlong)r   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_valrY   rY   rZ   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. NrN   r   r   rF  rp   rI  rz   Fr   )r   r&  r7   rb   r   r@   r!  r4  r"  r(  r#  r$  )r   rK  evec_sym	evec_sym_rL  	evec_herm
evec_herm_rM  rN  rO  evec_sym_indrP  evec_herm_indrQ  rR  rS  evec_sym_valrT  evec_herm_valrY   rY   rZ   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.rN   Nrp   r   	permute_l)
r?   r  r'   r)  r  r  r4   r   r   r   r   r   r,  lu_symm_bandipivr7  ur   p_linl_linu_linrY   rY   rZ   test_dgbtrfL     2zTestEigBanded.test_dgbtrfc                 C   r_  )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rN   Nrp   r   r`  )
r?   r   r)   r*  r  r  r4   r   r   r   rb  rY   rY   rZ   test_zgbtrfZ  rj  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'   r)  r  r  r(   r   r6   r   r  r   r   rc  rd  r7  yy_linrY   rY   rZ   test_dgbtrsh     zTestEigBanded.test_dgbtrsc                 C   rl  )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r)   r*  r  r  r*   r+  r6   r   r   r   rm  rY   rY   rZ   test_zgbtrsr  rq  zTestEigBanded.test_zgbtrsN)r   r   r   r  r  r9  r;  rB  rD  rE  rU  r^  ri  rk  rp  rr  rY   rY   rY   rZ   r  e  s    Q*:
r  c                   @   s4   e Z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  rY   rY   rZ   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  rp   r  r   N)r5   ry   er4   full_matr6   r	   rb   r7   r   r6  )r   r,  r-  r.  r/  rY   rY   rZ   rt    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   rM   r  lapack_driverfoor   r   r   rF  )r  r  r"   ry   ru  ru   r  rY   rY   rZ   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autorw  )r|  r}  r}  r   r   rx  rG  rH  r~  r  r  r   rp   rG  rH  rx  rN   r   rI  rz   N)	r"   ry   ru  r   r@   r   r  r  rt   )	r   driverr   w_indrM  rN  rQ  rR  w_valrY   rY   rZ   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|  rw  )r~  r}  r  r  Nr}  r   r   r  r  r   rp   r  rN   r   rI  rz   )r  r  r#   ry   ru  r7   r   r@   r   r4  r6  rt   )	r   r  r   r6  r8  rM  rN  rQ  rR  rY   rY   rZ   test_eigh_tridiagonal  sR   


z(TestEigTridiagonal.test_eigh_tridiagonalN)r   r   r   r  rt  r{  r  r  rY   rY   rY   rZ   rs  }  s    "rs  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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      t d d S Nr  rF   r  rY   rY   rZ   setup_class  r  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d t tttddgtddgdddgdd tj &}|td t tttddgtddgdddgdd W d    d S 1 sw   Y  d S )Nrp   rN   r      )type)subset_by_valuesubset_by_indexzKeyword argument 'eigvals)r  r
   r   r  r
   r   r  wrongr  gvxevrF)r  turbogvd)r  r  r  z 'eigh' keyword argument 'eigvals)	r  r  r   rP   r   testingsuppress_warningsfilterDeprecationWarning)r   suprY   rY   rZ   test_wrong_inputs  sv   ""

$zTestEigh.test_wrong_inputsc                 C   s&   t tttddgtddg d S )Nr   )r  r&   r   rP   r   r  rY   rY   rZ   test_nonpositive_b(  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   rN   r  rp   T)rV   rW   )	enumerateDTYPESr[   r   r   r?   rt   r   )r   inddtr   r   rz   r   rY   rY   rZ   test_value_subsets,  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 )Nrp   rN   r\   r   r   )r3   r   )r   r   r   r   zrY   rY   rZ   test_eigh_integer9  s   zTestEigh.test_eigh_integerc                 C   s>   dd l }|jd }t|}ttt| ttt| d S )Nr   rN   )	scipy.sparsesparseidentitytocscrP   
atleast_2dr  r  r   )r   scipyr   r   rY   rY   rZ   test_eigh_of_sparse?  s
   
zTestEigh.test_eigh_of_sparsedtype_r  )r.  evdr  evxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nr  )rU   rW   r  r=    r   r   )r[   r   r   rP   rd   eps)r   r  r  r   r   rz   rY   rY   rZ   test_various_drivers_standardG  s   
z&TestEigh.test_various_drivers_standardr  r   )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rV   )r   r   r  r  rp   r=  r  rN   )rP   spacingr[   r   r   )r   r  r  r   r   r   r   rz   rY   rY   rZ    test_various_drivers_generalizedP  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 )
Nr   rp   rN   r  )rp   333333??      ?rN   gffffff?r  r  r  )r[   r   r   rt   r   rP   r4   r3   )r   r   r   w2r   w3rY   rY   rZ   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    d S 1 s>w   Y  d S )
NKeyword argument 'turbo')matchrN   rN   Tr  Keyword argument 'eigvals'r   rp   r  )r  warnsr  rP   r8   )r   r  rY   rY   rZ   test_deprecation_warningsl  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 )Nr   Tr  r  r  r  r  r  r   rp   r  r  )r[   rP   r  r  r  r  r   r   )r   r   r   r  w_depv_depr   rz   rY   rY   rZ   test_deprecation_resultsu  s    


z!TestEigh.test_deprecation_resultsN)r   r   r   r  r  r  r  r  r  r  r  parametrizer  r  r  r  r   r   r  r  rY   rY   rY   rZ   r    s"    8
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ejje ddejjdd ZdS )TestSVD_GESDDc                 C      d| _ td d S )Ngesddr  rx  rF   r  rY   rY   rZ   r       zTestSVD_GESDD.setup_methodc                 C   s,   t ttdggdd t ttdggdd d S )Nr  rw  ry  )r  ru   r   r  r  rY   rY   rZ   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 )Nr   rp   r  r   r   TFfull_matricesrx  r   r   r   rx  r   rS   rE   r8   r?   rW   charr   rt   r   r   r  re  svhsigmar   rY   rY   rZ   r        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 )Nr   r   r  r  r   r   r  r  rY   rY   rZ   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 )Nr   r  r   r   r  r  r   r   rx  r   rS   rE   r?   r8   rW   r  r   rt   r  rY   rY   rZ   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 )	Nrp   rN   r  r   r   r  r  r   r  r  rY   rY   rZ   test_simple_overdet  s   z!TestSVD_GESDD.test_simple_overdetc           
      C   s   d}d}t dD ]d}t||gt||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< qVt||	 | | qqqd S )Nr  r   r   r  r  rp   r   )r   rG   r   rx  r   rS   rE   r?   r8   rW   r  rt   )
r   rU   mr   r   r  re  r  r  r  rY   rY   rZ   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 )Nr   )rp   y               @r   r   r  r  rp   r   )r   rx  r   rR   rS   rE   r?   r8   rW   r  r   rt   r  rY   rY   rZ   r     s   z!TestSVD_GESDD.test_simple_complexc           
      C   s   d}d}t dD ]d}dD ]_}t||gt||gfD ]P}|dtt|j  }t||| jd\}}}t| j| t	|jd  t
|jd |jd f|jj}	t t|D ]
}|| |	||f< qVt||	 | | qqqd S )	Nr  r   r   r  rM   r  rp   r   )r   rG   listr?   r   rx  r   rR   rS   rE   r8   rW   r  rt   )
r   rU   r  r   r  r   re  r  r  r  rY   rY   rZ   test_random_complex  s&   z!TestSVD_GESDD.test_random_complexc                 C   s\   g d}t jd |D ]}t jt jt jt jfD ]}t jj| |}t	|| j
d qqd S )N))r   r   )r   2   )<   r   r  rw  )rP   rG   rF   r:   float64r;   
complex128rQ   rT   r   rx  )r   sizesszr  r   rY   rY   rZ   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 )Nr   r  r   F)r   rx  r   r   r  )r   r   re  r  r  r  r   rY   rY   rZ   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  r=  r=  r=  )r=  r  r  r  r=  r=  )r=  r=  r  r  r  r=  )r=  r=  r=  r  r  r  rw  )rP   r3   r   rx  )r   r   rY   rY   rZ   test_gh_5039  s   
zTestSVD_GESDD.test_gh_5039z64-bit LAPACK requiredr   c                 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_mbrp   l        r  rz  F)r  r   r  r   )rJ   rP   r8   r:   r   r   )r   rX   re  r  r  rY   rY   rZ   test_large_matrix  s   
zTestSVD_GESDD.test_large_matrixN)r   r   r   r  r{  r   r  r  r  r  r   r  r  r  r  r  r  skipifrK   slowr  rY   rY   rY   rZ   r    s     	
r  c                   @      e Zd Zdd ZdS )TestSVD_GESVDc                 C   r  )Ngesvdr  r  r  rY   rY   rZ   r     r  zTestSVD_GESVD.setup_methodN)r   r   r   r  rY   rY   rY   rZ   r    s    r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
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)rN   r   )r   r   r   )rP   r   r   r   r   r   r   r  rY   rY   rZ   
test_empty'  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 )Nr   r   r   r   rp   rN   r   r   rt   r  rY   rY   rZ   r   ,     2zTestSVDVals.test_simplec                 C   @   g dg dg}t |}tt|dk t|d |d k d S )Nr   r  rN   r   rp   r  r  rY   rY   rZ   r  2     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 )Nrp   rN   r  r   r   r   r  r  rY   rY   rZ   r  8     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 )Nr   )rp   r                @r   r   r   rp   rN   r  r  rY   rY   rZ   r   >  r  zTestSVDVals.test_simple_complexc                 C   r  )Nr   )r  y              @r   rN   r   rp   r  r  rY   rY   rZ   test_simple_underdet_complexD  r  z(TestSVDVals.test_simple_underdet_complexc                 C   r  )Nrp   rN   r  r   r  r   r  r  rY   rY   rZ   test_simple_overdet_complexJ  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 )	Nr   r   Fr   r   r   rp   rN   r  r  rY   rY   rZ   r  P  s   2zTestSVDVals.test_check_finitec                 C   s&   t jd t jdd}t| d S )Nr  i  i
  )rP   rG   rF   rQ   r   r   r   rY   rY   rZ   test_crash_2609V  s   zTestSVDVals.test_crash_2609N)r   r   r   r  r   r  r  r   r  r  r  r  r  r  r  rY   rY   rY   rZ   r  %  s    r  c                   @   r  )TestDiagSVDc                 C   s,   t tg dddg dg dg dg d S )Nrp   r   r   r   r   )r   r   r  rY   rY   rZ   r   `  s   zTestDiagSVD.test_simpleN)r   r   r   r   rY   rY   rY   rZ   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 Z6didj Z7dkS )lTestQRc                 C   r  r  r  r  rY   rY   rZ   r  g  r  zTestQR.setup_methodc                 C   sH   g dg dg dg}t |\}}t|j| td t|| | d S N   rN   r   rN   r   r   r   r   r   r   r   r   rS   rE   r   r   qrrY   rY   rZ   r   j     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  r   r   r   r   r   r   rE   r   r   r  r  cqcr2rY   rY   rZ   test_simple_leftp  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  r   r   r  r  rY   rY   rZ   test_simple_rightz  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pivotingrp   r   r   
rP   rB   r   r4  r4   r   r   r   rS   rE   r   r   r  r  pry   q2r  rY   rY   rZ   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  r   r   r   r   r   r   r   r  r  jpvtr  r  rY   rY   rZ   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  r   r"  r#  rY   rY   rZ   test_simple_right_pivoting  r&  z!TestQR.test_simple_right_pivotingc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  rN   r  r  rY   rY   rZ   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  rp   r   rN   r  r  rY   rY   rZ   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  rN   r   r   r   r  r  rY   rY   rZ   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  rN   r   r   r   Tr  rp   r   r  r  rY   rY   rZ   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  rN   r   r   r   economicmoder   rN   r  r   r   rS   rE   r   r?   r  rY   rY   rZ   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  rN   r   r   r   Tr.  r  r0  rp   r   r/  r  r  rY   rY   rZ   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  rN   r   r   r   r.  r/  rp   r   rp   rN   r   Toverwrite_cr   r   r   r3   rE   r  rY   rY   rZ   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  rN   r   r   r   r.  Tr0  r  rp   r   )r   r   r   r   rE   )r   r   r  r  r$  r  r  kpvtrY   rY   rZ   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  rN   r   r   r   r.  r/  r   r  r   r   r  r  r  cqr  rY   rY   rZ   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  rN   r   r   r   Tr.  r4  r   r  r  r   r   r  r  r$  r  r@  rY   rY   rZ   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  rN   r   r  rN   r  rN   r   r2  r  rY   rY   rZ   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 )
NrD  r  Tr  rp   r   rN   r  rE  rP   rB   r   r4  r4   r   r   r   rS   rE   r   r?   r  rY   rY   rZ   test_simple_fat_pivoting	  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  rN   r   r   r.  r/  rN   r  rE  r2  r  rY   rY   rZ   test_simple_fat_e  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  rI  Tr.  r4  rp   r   rN   r  rE  r/  rG  r  rY   rY   rZ   test_simple_fat_e_pivoting   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  rI  r.  r/  rp   rN   r   r  r  rY   rY   rZ   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  rI  r.  Tr<  rp   rN   r   r  r#  rY   rY   rZ   test_simple_fat_left_pivoting8     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  rI  r.  r/  rp   rN   r  r?  rY   rY   rZ   test_simple_fat_rightA  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  rI  Tr.  r4  rp   rN   r  r  rB  rY   rY   rZ   test_simple_fat_right_pivotingK  rN  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r         @      @r   r   rN   y       @      @r   rN   r\   r   )r   r   rR   rS   rE   r  rY   rY   rZ   r   T     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 )NrR  rT  rU  rp   rN   rS  r   r   r  r   r   r  r  r  r  rY   rY   rZ   test_simple_complex_leftZ  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 )NrR  rT  rU  rW  r   r  rX  rY   rY   rZ   test_simple_complex_rightc  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       @      @rN   r   y      @      @r   r.  r/  rp          @       @r   r6  Tr7  r9  r  rY   rY   rZ   test_simple_tall_complex_leftl  r;  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 )NrR  rT  rU  rW  r   T	conjugater   r   r   rR   rX  rY   rY   rZ   "test_simple_complex_left_conjugatey  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 )Nr   rS  r   r[  rN   r.  r/  rp   r   Tr]  r_  rX  rY   rY   rZ   '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 )NrR  rT  rU  rW  Tr]  )r   rP   r3   r   r   rR   rX  rY   rY   rZ   #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 )	NrR  rT  rU  Tr  rp   r   r   )r3   r   r4  r4   r   rP   r   r   rR   rS   rE   r  rY   rY   rZ   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 )NrR  rT  rU  Tr  rW  r   r3   r   r   r   r#  rY   rY   rZ   !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 )NrR  rT  rU  Tr  rW  rd  r#  rY   rY   rZ   "test_simple_complex_right_pivoting  rf  z)TestQR.test_simple_complex_right_pivotingc                 C   sP   d}t dD ]}t||g}t|\}}t|j| t| t|| | qd S Nr  rN   r   rG   r   r   rS   rE   r   rU   r   r   r  r  rY   rY   rZ   r       zTestQR.test_randomc                 C   st   d}t dD ]1}t||g}t|\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )Nr  rN   r   r   rG   r   r   r   rE   r   rU   r   r   r  r  r  r  rY   rY   rZ   test_random_left  s   
zTestQR.test_random_leftc                 C   sp   d}t dD ]/}t||g}t|\}}t|g}t||\}}t|| | t|t|\}}t|| qd S rh  rl  r   rU   r   r   r  r  r  r@  rY   rY   rZ   test_random_right  s   
zTestQR.test_random_rightc           
      C   s   d}t dD ]U}t||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  rN   Tr  rp   r   r   rG   r   r4  r4   r   rP   r   r   rS   rE   
r   rU   r   r   r  r  r  ry   r   r  rY   rY   rZ   test_random_pivoting  s   "
zTestQR.test_random_pivotingc                 C   T   d}d}t dD ]}t||g}t|\}}t|j| t| t|| | qd S N   r   rN   ri  r   r  rU   r   r   r  r  rY   rY   rZ   test_random_tall  s   zTestQR.test_random_tallc           	      C   s|   d}d}t dD ]3}t||g}t|dd\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )Nrv  r   rN   r.  r/  r   rl  )	r   r  rU   r   r   r  r  r  r  rY   rY   rZ   test_random_tall_left  s   
zTestQR.test_random_tall_leftc           	      C   sx   d}d}t dD ]1}t||g}t|dd\}}t|g}t||\}}t|| | t|t|\}}t|| qd S Nrv  r   rN   r.  r/  rl  )	r   r  rU   r   r   r  r  r  r@  rY   rY   rZ   test_random_tall_right  s   
zTestQR.test_random_tall_rightc                 C      d}d}t dD ]U}t||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 )Nrv  r   rN   Tr  rp   r   rq  r   r  rU   r   r   r  r  r  ry   r   r  rY   rY   rZ   test_random_tall_pivoting  s   "
z TestQR.test_random_tall_pivotingc                 C   sx   d}d}t dD ]1}t||g}t|dd\}}t|j| t| t|| | t|j||f t|j||f qd S rz  )r   rG   r   r   rS   rE   r   r?   rw  rY   rY   rZ   test_random_tall_e  s   zTestQR.test_random_tall_ec                 C   s   d}d}t dD ]h}t||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 )
Nrv  r   rN   Tr.  r4  rp   r   r/  )r   rG   r   r4  r4   r   rP   r   r   rS   rE   r   r?   r}  rY   rY   rZ   test_random_tall_e_pivoting  s   "
z"TestQR.test_random_tall_e_pivotingc                 C   rt  Nr   rv  rN   ri  rw  rY   rY   rZ   test_random_trap"     zTestQR.test_random_trapc                 C   r|  )Nr   rv  rN   Tr  rp   r   rq  r}  rY   rY   rZ   test_random_trap_pivoting+  s   "
z TestQR.test_random_trap_pivotingc                 C   sd   d}t dD ])}t||gdt||g  }t|\}}t| j| t| t|| | qd S Nr  rN   rM   )r   rG   r   r   rR   rS   rE   rj  rY   rY   rZ   r  9     zTestQR.test_random_complexc                 C   s   d}t dD ]@}t||gdt||g  }t|\}}t|gdt|g  }t||d\}}t|| | t|t|d\}}t|| qd S )Nr  rN   rM   r   rl  rm  rY   rY   rZ   test_random_complex_leftA  s   zTestQR.test_random_complex_leftc                 C   s   d}t dD ]>}t||gdt||g  }t|\}}t|gdt|g  }t||\}}t|| | t|t|\}}t|| qd S r  rl  ro  rY   rY   rZ   test_random_complex_rightL  s   z TestQR.test_random_complex_rightc           
      C   s   d}t dD ]_}t||gdt||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  rN   rM   Tr  rp   r   )r   rG   r   r4  r4   r   rP   r   r   rR   rS   rE   rr  rY   rY   rZ   test_random_complex_pivotingW  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   r   r  r  rY   rY   rZ   r  d     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  )lworkr   r  r   r  r   rN   )r   r   r  	Exception)
r   r   r  r  r   r  q3r3q4r4rY   rY   rZ   
test_lworkj  s   





zTestQR.test_lworkN)8r   r   r   r  r   r  r  r!  r%  r'  r(  r*  r,  r-  r3  r5  r:  r>  rA  rC  rF  rH  rJ  rK  rL  rM  rO  rP  r   rY  rZ  r\  r`  ra  rb  rc  re  rg  r  rn  rp  rs  rx  ry  r{  r~  r  r  r  r  r  r  r  r  r  r  rY   rY   rY   rZ   r	  e  sl    

	

			
	
			
	r	  c                   @   |   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 )TestRQc                 C   r  r  r  r  rY   rY   rZ   r    r  zTestRQ.setup_methodc                 C   sH   g dg dg dg}t |\}}t||j td t|| | d S r
  r   r   rS   rE   r   r   r  r  rY   rY   rZ   r     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   )r   r   r  r  r  rY   rY   rZ   test_r  s   zTestRQ.test_rc                 C   sP   d}t dD ]}t||g}t|\}}t||j t| t|| | qd S rh  r   rG   r   r   rS   rE   r   rU   r   r   r  r  rY   rY   rZ   r    rk  zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  r   r  r  rY   rY   rZ   r(    r)  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 r+  r  r  rY   rY   rZ   r,    r  zTestRQ.test_simple_tallc                 C   sB   g dg dg}t |\}}t||j td t|| | d S )NrD  r  r   r  r  rY   rY   rZ   rF    r)  zTestRQ.test_simple_fatc                 C   sL   g dg dg dg}t |\}}t|| j td t|| | d S rQ  )r   r   rR   rS   rE   r  rY   rY   rZ   r     rV  zTestRQ.test_simple_complexc                 C   T   d}d}t dD ]}t||g}t|\}}t||j t| t|| | qd S ru  r  r   r  rU   r   r   r  r  rY   rY   rZ   rx    r  zTestRQ.test_random_tallc                 C   r  r  r  r  rY   rY   rZ   r    r  zTestRQ.test_random_trapc                 C   sx   d}d}t dD ]1}t||g}t|dd\}}t||j t| t|| | t|j||f t|j||f qd S )Nr   rv  rN   r.  r/  )r   rG   r   r   rS   rE   r   r?   r  rY   rY   rZ   test_random_trap_economic  s   z TestRQ.test_random_trap_economicc                 C   sd   d}t dD ])}t||gdt||g  }t|\}}t|| j t| t|| | qd S r  )r   rG   r   r   rR   rS   rE   r  rY   rY   rZ   r    r  zTestRQ.test_random_complexc                 C   s   d}d}t dD ];}t||gdt||g  }t|dd\}}t|| j t| t|| | t|j||f t|j||f qd S )Nr   rv  rN   rM   r.  r/  )	r   rG   r   r   rR   rS   rE   r   r?   r  rY   rY   rZ   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  rY   rY   rZ   r    r  zTestRQ.test_check_finiteN)r   r   r   r  r   r  r  r(  r,  rF  r   rx  r  r  r  r  r  rY   rY   rY   rZ   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   rR   rS   rP   rE   rt   )r   r   tre  r   r   rY   rY   rZ   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     r   r  r  r   r   +=+<r   r   r'  )r   r  r   rP   anyr<   r>   r   )r   r   r  r  tczctc2zc2rY   rY   rZ   r     s   (zTestSchur.test_simplezsort, expected_diaglhprN         rq   rhpiucoucc                 C   s   | dkS )Nr=  rY   )rk   rY   rY   rZ   <lambda>      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  g      g      r  r  r	        @      g      @r  r  r        @r@   r  r  r  -q=r   rN   )r   r  r   rP   r4   r   )r   r@   expected_diagr   r  re  sdimrY   rY   rZ   	test_sort   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  rp   )r  r  r   r  rY   rY   rZ   test_sort_errors  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   rR   rS   )r   r   r  r  rY   rY   rZ   r    s   zTestSchur.test_check_finiteN)r   r   r   r  r   r  r  r  rP   r=   r  r  r  rY   rY   rY   rZ   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@rp   calc_qr  decimalr   r   rS   r   r   h1r{   r  rY   rY   rZ   r   $  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  rp   r  )r   r   rR   rS   r   r   r{   r  rY   rY   rZ   r   /  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)rp   rN   r   r  r   r   r\   )r   rN   r   r  r   r\   rN   )r   rN   rN   r   r   r   rN   )r   r   rN   r  r   r   rN   )r   r   rp   rN   r   rp   rN   )r   rp   rN   r   r   rp   r   )r   r   r   r   r   rp   rN   rp   r  r  r  rY   rY   rZ   test_simple26  s   zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nr   rN   )r   r   rp   r  )rP   rE   r   r   rS   r  rY   rY   rZ   test_simple3A  s   
zTestHessenberg.test_simple3c                 C   sF   d}t dD ]}t||g}t|dd\}}t|j| | | qd S )Nr  rN   rp   r  )r   rG   r   r   rS   r   rU   r   r   r{   r  rY   rY   rZ   r  G  s   zTestHessenberg.test_randomc                 C   sZ   d}t dD ]$}t||gdt||g  }t|dd\}}t| j| | | qd S )Nr  rN   rM   rp   r  )r   rG   r   r   rR   rS   r  rY   rY   rZ   r  N  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  rp   F)r  r   r  r  r  r  rY   rY   rZ   r  U  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 )
NrN   rp   r\   r  r  y       @      r   y      @      @y      (@       )r   r   rP   rE   )r   r   r{   r  r   h2r   rY   rY   rZ   test_2x2`  s   
zTestHessenberg.test_2x2N)r   r   r   r   r   r  r  r  r  r  r  rY   rY   rY   rZ   r  "  s    r  zBuild Dependenciesblasnameversionc                   @   sr   e Zd Zd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 )TestQZc                 C   r  Ni90  r  r  rY   rY   rZ   r  t  r  zTestQZ.setup_methoddarwinopenblasz
0.3.21.devz8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   c                 C   s   d}t ||gt}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 )Nr   r  r   )rG   rT   r:   r   r   rS   rE   r   rP   r   r4   r   rU   rX   r   AABBQr   rY   rY   rZ   test_qz_singlew  s   zTestQZ.test_qz_singlec                 C   s   d}t ||g}t ||g}t||\}}}}t|| |j | t|| |j | t||j t| t||j t| ttt|dk d S )Nr   r   	rG   r   r   rS   rE   r   rP   r   r4   r  rY   rY   rZ   test_qz_double  s   zTestQZ.test_qz_doublec                 C   s   d}t ||gdt ||g  }t ||gdt ||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   rM   r   )rG   r   r   rR   rS   rE   r   rP   r   r4   rc   r  rY   rY   rZ   test_qz_complex  s   zTestQZ.test_qz_complexc                 C   s   d}t ||gdt ||g  t}t ||gd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 tt	
t|jdk d S )Nr   rM   r  r   )rG   rT   r;   r   r   rR   rS   rE   r   rP   r   r4   rc   r  rY   rY   rZ   test_qz_complex64  s   ""zTestQZ.test_qz_complex64c           
      C   s   d}t ||g}t ||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   r'  )outputr   )rG   r   rR   rS   r   rb   rc   rE   r   rP   r   r4   )
r   rU   rX   r   r  r  r  r   aabbrY   rY   rZ   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   rY   )ri   aibetarY   rY   rZ   r    r  z,TestQZ.test_qz_double_sort.<locals>.<lambda>r  )	rP   r3   r  r  r   r   r   rS   r4  )r   rX   r   r  r  r  r   r  rY   rY   rZ   test_qz_double_sort  s   

zTestQZ.test_qz_double_sortc                 C   s   d}t ||g}t ||g}t||dd\}}}}t|| |j | t|| |j | t||j t| t||j t| ttt|dk d S )Nr   Fr   r   r  r  rY   rY   rZ   r    s   zTestQZ.test_check_finiteN)r   r   r   r  r  r  r  sysplatformblas_providerblas_versionr  r  r  r  r  r  r  rY   rY   rY   rZ   r  s  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              )rM   y333333@y              y      @      )r  r  r  r  r  )r  r  r  r  )r  g      :@r  r  )rp   rN   rp   )rp   r   r  )rp   r   r   )rp   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  rN   r   rp   )rP   r3   rE   r4   rX   r   )
clsA1B1A2B2A3B3A4B4A5rY   rY   rZ   r  *  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  rY   rZ   
<listcomp>c  s    z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rP   r   ziprX   r   tuple)r   r@   retrY   r  rZ   	qz_decompa  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   rp   rN   T)rP   rE   r?   r   rS   rR   r   trilr8   r   r	   rc   r   r   r1   r3   )r   rX   r   r@   r  r  alphar  r  r   Idr   evals_tmpsortfunlastsortcursortrY   rY   rZ   checkf  s@   &> ,"
zTestOrdQZ.checkc                 C   s@   |  |}t|| j| jD ]\}}}| j|||g|R   qd S r  )r  r  rX   r   r"  )r   r@   r  retir  r  rY   rY   rZ   	check_all  s   
zTestOrdQZ.check_allc                 C      |  d d S )Nr  r$  r  rY   rY   rZ   test_lhp     zTestOrdQZ.test_lhpc                 C   r%  )Nr  r&  r  rY   rY   rZ   test_rhp  r(  zTestOrdQZ.test_rhpc                 C   r%  )Nr  r&  r  rY   rY   rZ   test_iuc  r(  zTestOrdQZ.test_iucc                 C   r%  )Nr  r&  r  rY   rY   rZ   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rP   
empty_likeboolrc   rk   rn  r^   nonzerorY   rY   rZ   r@     
   
z TestOrdQZ.test_ref.<locals>.sortr&  r   r@   rY   rY   rZ   test_ref     zTestOrdQZ.test_refc                 C   r,  )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S r-  r.  r1  rY   rY   rZ   r@     r3  z TestOrdQZ.test_cef.<locals>.sortr&  r4  rY   rY   rZ   test_cef  r6  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 )Nrp   rN   r  r  )r   rX   r   r"  )r   r  rY   rY   rZ   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 )NrN   r   rq   r  r  r  r  r  y             ?y      ?      ?yٿɿ      ?      r   rp   r  )	rP   rE   r4   r   nanr  r   r/  r   )r   r  r  	expected1r	  r
  	expected2r  r  	expected3r  r  	expected4r  B5	expected5rX   r   expectedr  r  	expectedisortstrexpected_eigvalsr  r  r  azerobzerork   rY   rY   rZ   test_sort_explicit  s\   












zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodr  r  r"  r$  r'  r)  r*  r+  r5  r7  r8  rG  rY   rY   rY   rZ   r  )  s    
6.r  c                   @   s,   e Zd Zdd Zdd Zejjdd ZdS )TestOrdQZWorkspaceSizec                 C   r  r  r  r  rY   rY   rZ   r    r  z#TestOrdQZWorkspaceSize.setup_methodc                 C   s   d}t jt jfD ]}t||f|}t||f|}t||dd dd}qt jt jfD ]}t||f|}t||f|}t||dd dd}q-d S )N   c                 S      | |k S r  rY   r  r  rY   rY   rZ   r  	  r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>rb   )r@   r  c                 S   rK  r  rY   rL  rY   rY   rZ   r  	  r  r'  )rP   r:   r  rG   rT   r   r  r;   )r   r,  ddtyperX   r   r  rY   rY   rZ   test_decompose  s   z%TestOrdQZWorkspaceSize.test_decomposec                 C   s`   d}t jt jt jt jfD ]!}t||f|}t||f|}t||dd\}}}}}	}
qd S )NrJ  r  r  )rP   r:   r  r  r;   rG   rT   r   )r   r,  rM  rX   r   SrS   r  r  UVrY   rY   rZ   test_decompose_ouc
	  s   z)TestOrdQZWorkspaceSize.test_decompose_oucN)	r   r   r   r  rN  r  r  r  rR  rY   rY   rY   rZ   rI    s
    rI  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   )_datacopiedrp   rN   r   c                       s   e Zd Z fddZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1c                    s    S r  rY   r  rX   rY   rZ   	__array__!	  s   z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__N)r   r   r   rV  rY   rU  rY   rZ   Fake1 	  s    rW  c                       s   e Zd Z jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__rY   rU  rY   rZ   Fake2$	  s    
rY  FTr   )scipy.linalg._decomprT  rI   rB   tolistr   r   repr)r   rT  r   LM2rW  rY  F1F2itemstatusarrrY   rU  rZ   test_datacopied	  s"   zTestDatacopied.test_datacopiedN)r   r   r   rd  rY   rY   rY   rZ   rS  	  r  rS  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  rN   r   offsetcountrW   r  r  Toverwrite_aN)	r9   rP   uint8
frombufferdatar:   r?   r	   rS   r   r  rY   rY   rZ   test_aligned_mem_float1	  s
   rp  ppc64lezcrashes on ppc64ler   c                  C   re  )
z4Check linalg works with non-aligned memory (float64)i$  r  r  r   rf  ri  Trj  N)	r9   rP   rl  rm  rn  r%  r?   r	   rS   ro  rY   rY   rZ   test_aligned_mem>	  s
   rr  c                  C   re  )
z>Check that complex objects don't need to be completely alignediH  r  r  r   rf  ri  Trj  N)	r8   rP   rl  rm  rn  r'  r?   r	   rS   ro  rY   rY   rZ   test_aligned_mem_complexM	  s
   rs  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  rf  .rp   )r  r   rt   rr   rP   rD   r8   r   rW   itemsizerl  rm  rn  r?   rS   )funcr/  kwargsr   r   r  rY   rY   rZ   check_lapack_misaligned[	  s"   &rw  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   ri  i N  r  rf  Trj  )overwrite_b)rk  ry  )rP   rE   r%  r9   r?   rl  rm  rn  r   r   r	   dictr
   r   r   r   r   r   r   r   r   r   r   rw  )	r   RrO  r   LUpivru  r/  rv  rY   rY   rZ   test_lapack_misalignedm	  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   )rH   r	   r  rY   rY   rZ   test_eig	     zTestOverwrite.test_eigc                 C   r  r  )rH   r   r  rY   rY   rZ   	test_eigh	  r  zTestOverwrite.test_eighc                 C      t tdg d S Nr1  )rH   r   r  rY   rY   rZ   r^  	     zTestOverwrite.test_eig_bandedc                 C   r  r  )rH   r
   r  rY   rY   rZ   test_eigvals	  r  zTestOverwrite.test_eigvalsc                 C   r  r  )rH   r   r  rY   rY   rZ   test_eigvalsh	  r  zTestOverwrite.test_eigvalshc                 C   r  r  )rH   r   r  rY   rY   rZ   rU  	  r  z!TestOverwrite.test_eigvals_bandedc                 C   r  r  )rH   r   r  rY   rY   rZ   test_hessenberg	  r  zTestOverwrite.test_hessenbergc                 C   r  r  )rH   r   r  rY   rY   rZ   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 )Nr   r  )r\   r  r  c                    s
   t  | S r  )r   )r   xlurY   rZ   r  	     
 z-TestOverwrite.test_lu_solve.<locals>.<lambda>)r   )rP   r3   r   rH   )r   rk   rY   r  rZ   test_lu_solve	  s   zTestOverwrite.test_lu_solvec                 C   r  r  )rH   r   r  rY   rY   rZ   test_lu	  r  zTestOverwrite.test_luc                 C   r  r  )rH   r   r  rY   rY   rZ   test_qr	  r  zTestOverwrite.test_qrc                 C   r  r  )rH   r   r  rY   rY   rZ   test_rq	  r  zTestOverwrite.test_rqc                 C   r  r  )rH   r   r  rY   rY   rZ   
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   r   rY   rY   rZ   r  	  r  z2TestOverwrite.test_schur_complex.<locals>.<lambda>r   )dtypes)rH   rP   r:   r  r  rY   rY   rZ   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  rw  )r   r  rY   rY   rZ   r  	  s    z(TestOverwrite.test_svd.<locals>.<lambda>)rH   r   r  rY   rY   rZ   test_svd	  s   zTestOverwrite.test_svdc                 C   r  r  )rH   r   r  rY   rY   rZ   test_svdvals	  r  zTestOverwrite.test_svdvalsN)r   r   r   r  r  r^  r  r  rU  r  r  r  r  r  r  r  r  r  r  rY   rY   rY   rZ   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 )NrN   r  r  rp   r   rN   rp   r   -C6?MbP?rcondư>r   )rP   r   r%  rT   rd   r  r   r   r?   r   meanrS   rG   rF   rQ   )rU   rW   skip_bigXr  tolYrY   rY   rZ   _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  rP   r  MemoryErrorAssertionError)rU   ru  rY   rY   rZ   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rp   rN   r   r  r   )rP   r:   r  r;   r  	itertoolsproductr  )r  r  r  rU   rY   rY   rZ   	test_orth	  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 )Nrp   r  rN   r  r  r   r  r  r   r  r  r  r  r   )rP   rG   rF   r:   r  r;   r  r  r  r   rd   r  r$   r   r?   r   rS   randnrQ   rT   )r  r  r  rU   r  r  r  r  rY   rY   rZ   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  r   r]   r  r  rp   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rN   r   r  r  gL0?gĹ-?gyv?r   r  )r   rp   r   )r   r   rp   r   r  r9  r=  )r!   r%  r   r    rP   pir8   r?   r3   r  r  )HrX   r   rk   rA  r   r   rY   rY   rZ   test_subspace_angles 
  sl   
  0022220

r  c                   @   r  )TestCDF2RDFc                 C   s   t d||S )Nz...ij,...jk->...ik)rP   einsum)r   r   r   rY   rY   rZ   matmul\
  r(  zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r  )r   r  )r   r   rz   rk   rY   rY   rZ   assert_eig_valid_
  s   

zTestCDF2RDF.assert_eig_validc                 C   s@   t d}t dt d}}t||\}}| ||| d S )Nr   r   )rP   r   r%   r  r   r  r   rz   wrr   rY   rY   rZ   test_single_array0x0reale
  s   
z$TestCDF2RDF.test_single_array0x0realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nrp   rN   r   r   rP   r3   r6   r	   r%   r  r  rY   rY   rZ   test_single_array2x2_reall
     z%TestCDF2RDF.test_single_array2x2_realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nrp   rN   r   r  r  rY   rY   rZ   test_single_array2x2_complexr
  r  z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S )Nr   r   r  r  rY   rY   rZ   test_single_array3x3_realx
     z%TestCDF2RDF.test_single_array3x3_realc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S Nr   )r   r  r   )r   r  r  r  r  rY   rY   rZ   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 )Nrp   r\   iɚ;r   )	r   rP   rG   rF   rQ   r6   r	   r%   r  r   r   r  r   rz   r  r   rY   rY   rZ   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 )Nrp   r\   r  )r   rP   rG   rQ   r6   r	   r%   r  r  rY   rY   rZ   test_random_2d_stacked_arrays
  s   z)TestCDF2RDF.test_random_2d_stacked_arraysc                 C   s(   t dt d}}ttt|| d S )NrY   )rN   )rP   r   r3   r  r  r%   r   r   rz   rY   rY   rZ   test_low_dimensionality_error
  s   z)TestCDF2RDF.test_low_dimensionality_errorc                 C   s0   t dt ddd}}ttt|| d S )Nr   r   rN   rP   r9   r  r  r  r%   r  rY   rY   rZ   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  rP   r3   r6   r	   r  r  r%   r   r  r   rz   rY   rY   rZ   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 )Nr   r   r  r  r  rY   rY   rZ   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 )Nr   r   )rN   r   y      @      r  r  rY   rY   rZ   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  rY   rY   rY   rZ   r  Z
  s    	r  )r\   )F)r  r  r  numpyrP   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   numpy.randomrF   rG   scipy.linalg._testutilsrH   scipy.sparse._sputilsrI   scipy._lib._testutilsrJ   scipy.linalg.blasrK   scipy.__config__rL   ImportErrorr%  r[   r  REAL_DTYPESr  rO   r  ra   r|   r}   r   r  rs  r  r  r  r  r  r	  r  r  r  r  r  r  r  rI  rS  rp  r  r  machinerr  rs  rw  r  r~  r  r  r  rW   intprt  r  r  r  r  r  rY   rY   rY   rZ   <module>   s     ,T
 [  o  9    "h7K
 7 K#

 
8&: