a
    Re                    @   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0 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re]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 }|rv|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   R/var/www/sunrise/env/lib/python3.9/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   Z
asanyarrayZiscomplexobj
clear_fussrealimagfinforW   ZnmantfrexpZrintldexp)arZfuss_binary_bitsxZsignificant_binary_bitsZx_mantZx_expfrY   rY   rZ   r_   @   s    

r_   c                 C   s   t | tr | }t|d d }n0t | trHt| jdkrH| 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   ZrvsrS   rR   r4   )Zdim_or_eigvZdimdvhrY   rY   rZ   symrandR   s    	



rq   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestEigValsc                 C   sN   g dg dg dg}t |}dtd d ddtd d g}t|| d S )Nrh   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 )Nrs   ru   rn   rx   ry   rN   r   )r3   rS   copyr
   r=   r   r{   rY   rY   rZ   test_simple_trt   s    "zTestEigVals.test_simple_trc                 C   sN   g dg dg dg}t |}dtd d ddtd d g}t|| d S )Nrs   rN   rv   y      @      ?y      "@      ?y      W@      @rN   r   rz   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 )	Nrs   ru   Fcheck_finiterx   ry   rN   r   rz   r{   rY   rY   rZ   test_finite   s    "zTestEigVals.test_finiteN)__name__
__module____qualname__r   r   r   r   rY   rY   rY   rZ   rr   l   s   rr   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 ]4}t||d d |f  || |d d |f   q,t|ddd\}}tdD ]6}t|j|d d |f  || |d d |f   q|d S )Nrs   ru   rx   ry   rN   r   rh   rt         @r   r   r   r   rh   r   rN   leftright)r3   r	   r=   r0   r   rA   rangerS   	r|   r}   r~   ro   r   Zv0Zv1Zv2irY   rY   rZ   r      s$    "
"""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 ]2}t||d d |f  || |d d |f   qBtdD ]<}t| j|d d |f  ||  |d d |f   q~d S )Nrh   rN   r         ?       @y      ?       )r3   r	   r   r   rR   rS   r|   r}   r~   Z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 ]2}t||d d |f  || |d d |f   q6tdD ]<}t| j|d d |f  ||  |d d |f   qrd S )Nrs   r   rh   r   rt   )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 )Nrh   r   TZhomogeneous_eigvals)rh   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 q|d u rt|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 ||
< qdt|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 ||
< qt|t|j|d tt|t|t|  d S )N
Tr   rh   r   gvIh%<=rtolatolerr_msggHz>)r   r   r   )r   r   r   r   )rB   rP   rE   r?   r	   r
   r   r   Zlexsortemptyrl   r0   onessizeallrC   r7   r_   r@   )r|   rX   BB0msgr~   r   wtZval1Zval2r   permZpermtlengthZbeta_nonzeroZwhresZw_finZwt_finrY   rY   rZ   _check_gen_eig   sj    


"

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    n1 sz0    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    n1 s0    Y  d S )N)rh   r   rt   )rN   r   r   )r   rN   r   )r   r   rN   )rh   r   r   )r   rh   r   r   r   r   rt   rt   rt   r   r   )r4   r3   r8   rE   rP   blockr   r   )r|   MKDZZI3rX   r   rY   rY   rZ   test_falker  s    zTestEig.test_falkerc                 C   sh   dd }t jdd@ tdD ]&}||d d d\}}| || qW d    n1 sZ0    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   )rh   r   r   r   )r   rh   r   r   r   )r   r   rh   r   )r   r   r   rh   rh   rY   )omegaZ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  rt   r   rM   )rF   rq   r   rG   r   rY   rY   rZ   test_make_eigvals8  s    zTestEig.test_make_eigvalsc           	      C   sf  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 ]4}t||d d |f  || |d d |f   q,d S )Nrs   ru   Fr   rx   ry   rN   r   rh   rt   r   r   r   r   )r	   r=   r3   r0   r   rA   r   r   rY   rY   rZ   test_check_finiteF  s    "
"""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.rw   rt   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         "@rt   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   s   |    d S N)create_bandmatr|   rY   rY   rZ   setup_methodf  s    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 ]J}t| j|| j|| d ||f< t| j|| j|| d ||f< qJd| j  | j d }t||ftd| _t| j| jd| j  ddf< t| j D ]l}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qt||ftd| _t| j| jd| j  ddf< t| j D ]l}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         ?rh         r   g       r   rM         r]   NrW   r         ?      ?)KLKUr4   r5   sym_matherm_matreal_matcomp_matr6   r	   r`   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argsZLDABr   rY   rY   rZ   r   i  s    


"&0,0,zTestEigBanded.create_bandmatc                 C   sP   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.rh   	compute_vN)r+   r	  r7   r   r@   r  absr  r|   r~   evecinfoevec_rY   rY   rZ   
test_dsbev  s    zTestEigBanded.test_dsbevc                 C   sP   t | jdd\}}}|ddt|f }tt|| j tt|t| j dS )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.rh   r  N)r,   r	  r7   r   r@   r  r  r  r  rY   rY   rZ   test_dsbevd  s    zTestEigBanded.test_dsbevdc              	   C   sl   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.        rh   rN   r  r   N)
r?   r   r-   r	  r7   r   r@   r  r  r  r|   r  r~   r  numZifailr  r  rY   rY   rZ   test_dsbevx  s    zTestEigBanded.test_dsbevxc                 C   sP   t | jdd\}}}|ddt|f }tt|| j tt|t| j dS )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.rh   r  N)r.   r  r7   r   r@   r  r  r  r  rY   rY   rZ   test_zhbevd  s    zTestEigBanded.test_zhbevdc              	   C   sl   t | j\}}t| jddd|ddd\}}}}}|ddt|f }tt|| j tt|t| j	 dS )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.r  rh   rN   r  N)
r?   r  r/   r  r7   r   r@   r  r  r  r  rY   rY   rZ   test_zhbevx  s    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   rw   r   selectselect_rangerh   h㈵>ro   Fr   N)
r   r	  r`   r   r@   r  r  r  rP   Z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   rw   r   r#  rh   r&  ro   Fr   )r   r	  r7   r`   r   r@   r  r  r  r  r  r  )r|   r'  Zevec_symZ	evec_sym_r(  Z	evec_hermZ
evec_herm_r)  r*  r+  Zevec_sym_indr,  Zevec_herm_indr-  r.  r/  Zevec_sym_valr0  Zevec_herm_valrY   rY   rZ   test_eig_banded  st    



zTestEigBanded.test_eig_bandedc                 C   s   t | j\}}t| j| j| j\}}}t|d| j ddf }t| j| j D ]4}|t|d| j d | |d |f |d 7 }qPt| jdd\}}	}
t	||
 dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rN   Nrh   r   Z	permute_l)
r?   r  r'   r  r   r   r4   r   r   r   r|   r   r  lu_symm_bandipivr  ur   Zp_linZl_linZu_linrY   rY   rZ   test_dgbtrfL  s    2zTestEigBanded.test_dgbtrfc                 C   s   t | j\}}t| j| j| j\}}}t|d| j ddf }t| j| j D ]4}|t|d| j d | |d |f |d 7 }qPt| jdd\}}	}
t	||
 dS )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rN   Nrh   r   r3  )
r?   r  r)   r  r   r   r4   r   r   r   r4  rY   rY   rZ   test_zgbtrfZ  s    2zTestEigBanded.test_zgbtrfc                 C   sP   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|   r5  r6  r  yZy_linrY   rY   rZ   test_dgbtrsh  s    zTestEigBanded.test_dgbtrsc                 C   sP   t | j| j| j\}}}t|| j| j| j|\}}t| j| j}t	|| dS )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   r:  rY   rY   rZ   test_zgbtrsr  s    zTestEigBanded.test_zgbtrsN)r   r   r   r   r   r  r  r   r!  r"  r1  r2  r8  r9  r<  r=  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   s   |    d S r   )create_trimatr   rY   rY   rZ   r   ~  s    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   rh   r   r   N)r5   rn   er4   Zfull_matr6   r	   r`   r7   r~   r  )r|   r  r  r  r  rY   rY   rZ   r?    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   r#  )r   r   r"   rn   r@  rm   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 q0d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
   qTdS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautorA  )rF  rG  rG  r   r   rB  r$  r%  rH  rI  rJ  r   rh   r$  r%  rB  rN   rw   r&  ro   N)	r"   rn   r@  r   r@   r~   r   r   rl   )	r|   driverr~   Zw_indr)  r*  r-  r.  Zw_valrY   rY   rZ   test_eigvalsh_tridiagonal  s8    z,TestEigTridiagonal.test_eigvalsh_tridiagonalc           	   	   C   s  t tt| j| jdd dD ]R}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  qdS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. rF  rA  )rH  rG  rI  rJ  NrG  r   r   rK  rL  r   rh   rM  rN   rw   r&  ro   )r   r   r#   rn   r@  r7   r   r@   r~   r  r  rl   )	r|   rN  r~   r  r  r)  r*  r-  r.  rY   rY   rZ   test_eigh_tridiagonal  sP    



z(TestEigTridiagonal.test_eigh_tridiagonalN)r   r   r   r   r?  rE  rO  rP  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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   s   t d d S Nr   rF   r   rY   rY   rZ   setup_class  s    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 L}|td t tttddgtddgddgddgd W d    n1 s0    Y  t tttddgtddgd	dgd
 tj F}|td t tttddgtddgd	dgd W d    n1 s0    Y  t tttddgtddgddgd
 tj F}|td t tttddgtddgddgd W d    n1 s&0    Y  t tttddgtddgdd	gd
 tj F}|td t tttddgtddgdd	gd
 W d    n1 s0    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 J}|td t tttddgtddgdddgdd W d    n1 s0    Y  d S )Nrh   rN   rt      )type)subset_by_valuesubset_by_indexzKeyword argument 'eigvals)rW  r
   r   rX  r
   r   rW  ZwrongrN  gvxevrF)rN  turbogvd)rN  rX  r_  z 'eigh' keyword argument 'eigvals)	r   r   r   rP   r   testingsuppress_warningsfilterDeprecationWarning)r|   suprY   rY   rZ   test_wrong_inputs  sl    ""&&&&

zTestEigh.test_wrong_inputsc                 C   s&   t tttddgtddg d S )Nrt   )r   r&   r   rP   r   r   rY   rY   rZ   test_nonpositive_b(  s    zTestEigh.test_nonpositive_bc                 C   s   t tD ]\}}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 @ sJ qd S )	N   r   r   rN   r[  rh   T)rV   rW   )	enumerateDTYPESr[   r   r   r?   rl   r   )r|   inddtr}   r~   ro   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 )Nrh   rN   r\   rt   rv   )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   )	Zscipy.sparsesparseidentityZtocscrP   Z
atleast_2dr   r   r   )r|   Zscipyr}   r   rY   rY   rZ   test_eigh_of_sparse?  s
    
zTestEigh.test_eigh_of_sparsedtype_rN  )r  Zevdr^  Zevxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nrh  )rU   rW   r\  r    r   r   )r[   r   r   rP   rb   eps)r|   rN  rs  r}   r~   ro   rY   rY   rZ   test_various_drivers_standardG  s    z&TestEigh.test_various_drivers_standardrV  rs   )gvr`  r]  c                 C   s   t d}td}tddd}t||||d\}}|dkr\t|| |||   d|dd nJ|d	krt|| | ||  d|dd n t|| | ||  d|dd d S )
Ng     @rh  TrV   )r}   r   rN  rV  rh   r  ru  rN   )rP   spacingr[   r   r   )r|   rN  rV  r   r}   r   r~   ro   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 )
Nrv   rh   rN   rY  )rh   333333??      ?rN   gffffff?r[  r|  r}  )r[   r   r   rl   r   rP   r4   r3   )r|   r}   r~   Zw2r   Z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 s60    Y  t jtdd& |tdddgd	 W d    n1 sz0    Y  d S )
NKeyword argument 'turbo')matchrN   rN   Tr_  Keyword argument 'eigvals'r   rh   rZ  )r   Zwarnsrd  rP   r8   )r|   r  rY   rY   rZ   test_deprecation_warningsl  s    0z"TestEigh.test_deprecation_warningsc                 C   s   t d}t ddd}tj .}|td t||dd\}}W d    n1 sR0    Y  t||dd\}}t|| t|| tj 0}|td t|d	d
gd\}}W d    n1 s0    Y  t|d	d
gd\}}t|| t|| d S )Nrt   Try  r  r  r`  r\  r  r   rh   rZ  rY  )r[   rP   ra  rb  rc  rd  r   r   )r|   r}   r   re  Zw_depZv_depr~   ro   rY   rY   rZ   test_deprecation_resultsu  s    0

2
z!TestEigh.test_deprecation_resultsN)r   r   r   rT  rf  rg  rm  ro  rr  r   r   parametrizerj  rw  r{  r  r   r   r  r  rY   rY   rY   rZ   rQ    s    8
rQ  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   s   d| _ td d S )NZgesddr   rB  rF   r   rY   rY   rZ   r     s    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   rA  rC  )r   rm   r   r   r   rY   rY   rZ   rE    s    zTestSVD_GESDD.test_degeneratec                 C   s   g dg dg dg}dD ]}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]}|| |||f< qt|| | | qd S )Nrs   rh   rh  rt   ru   TFfull_matricesrB  rt   r   r   rB  r   rS   rE   r8   r?   rW   charr   rl   r|   r}   r  r7  svhsigmar   rY   rY   rZ   r     s    zTestSVD_GESDD.test_simplec                 C   s   g dg dg dg}dD ]}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]}|| |||f< qt|| | | qd S )Nrs   ru   r  r  rt   r   r  r  rY   rY   rZ   test_simple_singular  s    z"TestSVD_GESDD.test_simple_singularc                 C   s   g dg dg}dD ]}t ||| jd\}}}t|j| t|jd  t|jd |jd f|jj}t	t
|D ]}|| |||f< qrt|| | | qd S )Nrs   rU  rv   rw   r  r  r   r   rB  r   rS   rE   r?   r8   rW   r  r   rl   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 ]}t ||| jd\}}}t|j| t|jd  t|j| td t|jd |jd f|jj}t	t
|D ]}|| |||f< qt|| | | qd S )	Nrh   rN   rU  rv   rt   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 ]}t||gt||gfD ]}dD ]}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< qt||	 | | q4q,qd S )Nrh  r   rt   r  r  rh   r   )r   rG   r   rB  r   rS   rE   r?   r8   rW   r  rl   )
r|   rU   mr   r}   r  r7  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 ||| jd\}}}t| j| t|jd  t| j| t|jd  t|jd |jd f|jj	}t
t|D ]}|| |||f< qt|| | | qd S )Nrs   )rh   y               @rt   ru   r  r  rh   r   )r   rB  r   rR   rS   rE   r?   r8   rW   r  r   rl   r  rY   rY   rZ   r     s    z!TestSVD_GESDD.test_simple_complexc           
      C   s   d}d}t dD ]}dD ]}t||gt||gfD ]}|dtt|j  }t||| jd\}}}t| j| t	|jd  t
|jd |jd f|jj}	t t|D ]}|| |	||f< qt||	 | | q4qqd S )	Nrh  r   rt   r  rM   r  rh   r   )r   rG   listr?   r   rB  r   rR   rS   rE   r8   rW   r  rl   )
r|   rU   r  r   r  r}   r7  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 q0qd S )N))r   r   )r   2   )<   r   r   rA  )rP   rG   rF   r:   float64r;   
complex128rQ   rT   r   rB  )r|   sizesszrl  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 )Nrs   r  ru   F)r   rB  rt   r   r  )r|   r}   r7  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  rA  )rP   r3   r   rB  )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  )Zfree_mbrh   l        r   rD  F)r  r   r   r   )rJ   rP   r8   r:   r   r   )r|   rX   r7  r  r  rY   rY   rZ   test_large_matrix  s    
zTestSVD_GESDD.test_large_matrixN)r   r   r   r   rE  r   r  r  r  r  r   r  r  r   r  r   r   skipifrK   slowr  rY   rY   rY   rZ   r    s   	
r  c                   @   s   e Zd Zdd ZdS )TestSVD_GESVDc                 C   s   d| _ td d S )Ngesvdr   r  r   rY   rY   rZ   r      s    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   rt   r   )rP   r   r   r   r   r|   r}   r  rY   rY   rZ   
test_empty'  s    zTestSVDVals.test_emptyc                 C   sZ   g dg dg dg}t |}tt|dk t|d |d   koN|d kn   d S )Nrs   ru   rt   r   rh   rN   r   r   rl   r  rY   rY   rZ   r   ,  s    zTestSVDVals.test_simplec                 C   s@   g dg dg}t |}tt|dk t|d |d k d S )Nrs   r  rN   r   rh   r  r  rY   rY   rZ   r  2  s    z TestSVDVals.test_simple_underdetc                 C   sF   ddgddgddgg}t |}tt|dk t|d |d k d S )Nrh   rN   rU  rv   rt   r   r  r  rY   rY   rZ   r  8  s    zTestSVDVals.test_simple_overdetc                 C   sZ   g dg dg dg}t |}tt|dk t|d |d   koN|d kn   d S )Nrs   )rh   rh                @ru   rt   r   rh   rN   r  r  rY   rY   rZ   r   >  s    zTestSVDVals.test_simple_complexc                 C   s@   g dg dg}t |}tt|dk t|d |d k d S )Nrs   )rU  y              @rw   rN   r   rh   r  r  rY   rY   rZ   test_simple_underdet_complexD  s    z(TestSVDVals.test_simple_underdet_complexc                 C   sF   ddgddgddgg}t |}tt|dk t|d |d k d S )Nrh   rN   rU  rv   r  r   r  r  rY   rY   rZ   test_simple_overdet_complexJ  s    z'TestSVDVals.test_simple_overdet_complexc                 C   s^   g dg dg dg}t |dd}tt|dk t|d |d   koR|d kn   d S )	Nrs   ru   Fr   rt   r   rh   rN   r  r  rY   rY   rZ   r   P  s    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                   @   s   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rh   r   r   rt   r   )r   r   r   rY   rY   rZ   r   `  s    zTestDiagSVD.test_simpleN)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
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   s   t d d S rR  rS  r   rY   rY   rZ   r   g  s    zTestQR.setup_methodc                 C   sH   g dg dg dg}t |\}}t|j| td t|| | d S N   rN   rt   rN   rx   rt   rv   rt   rw   rt   r   r   rS   rE   r|   r}   qrrY   rY   rZ   r   j  s    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  rs   r   rt   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  rs   rt   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pivotingrh   r   rt   
rP   rB   r   r  r4   r   r   r   rS   rE   r|   r}   r  r  prn   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  rs   r   r   r   r   r|   r}   r  r  jpvtr  r  rY   rY   rZ   test_simple_left_pivoting  s
    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  rs   r  r  rY   rY   rZ   test_simple_right_pivoting  s
    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  s    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  rh   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   rx   rv   rt   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   rx   rv   rt   Tr  rh   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   rx   rv   rt   economicmodert   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   rx   rv   rt   Tr  r  r  rh   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   rx   rv   rt   r  r  rh   r   rh   rN   r   TZoverwrite_cr   r   r   r3   rE   r  rY   rY   rZ   test_simple_tall_left  s    
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   rx   rv   rt   r  Tr  r  rh   r   )r   r   r   r   rE   )r|   r}   r  r  r  r  r  Z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   rx   rv   rt   r  r  rs   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   rx   rv   rt   Tr  r  rs   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   rv   r  rN   r  rN   rt   r  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 )
Nr  r  Tr  rh   r   rN   r  r  rP   rB   r   r  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   rx   rv   r  r  rN   r  r  r  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  r  Tr  r  rh   r   rN   r  r  r  r  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  r  r  r  rh   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  r  r  Tr  rh   rN   r   r  r  rY   rY   rZ   test_simple_fat_left_pivoting8  s    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  r  r  r  rh   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  r  Tr  r  rh   rN   r  r  r  rY   rY   rZ   test_simple_fat_right_pivotingK  s    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rt         @      @rv   rv   rN   y       @      @rt   rN   r\   rt   )r   r   rR   rS   rE   r  rY   rY   rZ   r   T  s    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  rh   rN   r  r   rt   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 )Nr  r  r  r  rt   r  r  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   rx   y      @      @rt   r  r  rh          @       @r   r  Tr  r  r  rY   rY   rZ   test_simple_tall_complex_leftl  s    
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  r  r   T	conjugater   r   r   rR   r  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 )Nrt   r  rv   r  rN   r  r  rh   r   Tr  r  r  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 )Nr  r  r  r  Tr  )r   rP   r3   r   r   rR   r  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 )	Nr  r  r  Tr  rh   r   rt   )r3   r   r  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 )Nr  r  r  Tr  r  r   r3   r   r   r   r  rY   rY   rZ   !test_simple_complex_left_pivoting  s
    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  r  r  r  rY   rY   rZ   "test_simple_complex_right_pivoting  s
    z)TestQR.test_simple_complex_right_pivotingc                 C   sP   d}t dD ]>}t||g}t|\}}t|j| t| t|| | qd S Nrh  rN   r   rG   r   r   rS   rE   r|   rU   r   r}   r  r  rY   rY   rZ   r    s    zTestQR.test_randomc                 C   st   d}t dD ]b}t||g}t|\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )Nrh  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 r  r  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 ]}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 )Nrh  rN   Tr  rh   r   r   rG   r   r  r4   r   rP   r   r   rS   rE   
r|   rU   r   r}   r  r  r  rn   r  r  rY   rY   rZ   test_random_pivoting  s    "
zTestQR.test_random_pivotingc                 C   sT   d}d}t dD ]>}t||g}t|\}}t|j| t| t|| | qd S N   r   rN   r  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 ]f}t||g}t|dd\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )Nr  r   rN   r  r  r   r  )	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 ]b}t||g}t|dd\}}t|g}t||\}}t|| | t|t|\}}t|| qd S Nr  r   rN   r  r  r  )	r|   r  rU   r   r}   r  r  r  r  rY   rY   rZ   test_random_tall_right  s    
zTestQR.test_random_tall_rightc                 C   s   d}d}t d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  r   rN   Tr  rh   r   r  r|   r  rU   r   r}   r  r  r  rn   r  r  rY   rY   rZ   test_random_tall_pivoting  s    "
z TestQR.test_random_tall_pivotingc                 C   sx   d}d}t dD ]b}t||g}t|dd\}}t|j| t| t|| | t|j||f t|j||f qd S r  )r   rG   r   r   rS   rE   r   r?   r  rY   rY   rZ   test_random_tall_e  s    zTestQR.test_random_tall_ec                 C   s   d}d}t dD ]}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 )
Nr  r   rN   Tr  r  rh   r   r  )r   rG   r   r  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   sT   d}d}t dD ]>}t||g}t|\}}t|j| t| t|| | qd S Nr   r  rN   r  r  rY   rY   rZ   test_random_trap"  s    zTestQR.test_random_trapc                 C   s   d}d}t d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   r  rN   Tr  rh   r   r  r   rY   rY   rZ   test_random_trap_pivoting+  s    "
z TestQR.test_random_trap_pivotingc                 C   sd   d}t dD ]R}t||gdt||g  }t|\}}t| j| t| t|| | qd S Nrh  rN   rM   )r   rG   r   r   rR   rS   rE   r  rY   rY   rZ   r  9  s    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 )Nrh  rN   rM   r   r  r  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'  r  r  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 )Nrh  rN   rM   Tr  rh   r   )r   rG   r   r  r4   r   rP   r   r   rR   rS   rE   r  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   rt   r  r  rY   rY   rZ   r   d  s    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  )lworkrt   r   r   r,  r   rN   )r   r   r   	Exception)
r|   r}   r  r  r  r  Zq3Zr3Zq4Zr4rY   rY   rZ   
test_lworkj  s    





zTestQR.test_lworkN)8r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r!  r"  r#  r%  r&  r  r(  r)  r*  r   r.  rY   rY   rY   rZ   r  e  sj   

	

			
	
			
	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 )TestRQc                 C   s   t d d S rR  rS  r   rY   rY   rZ   r     s    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     s    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 r  r   rG   r   r   rS   rE   r|   rU   r   r}   r  r  rY   rY   rZ   r    s    zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  rt   r0  r1  rY   rY   rZ   r    s    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  r0  r1  rY   rY   rZ   r    s    zTestRQ.test_simple_tallc                 C   sB   g dg dg}t |\}}t||j td t|| | d S )Nr  r  rt   r0  r1  rY   rY   rZ   r    s    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   rR   rS   rE   r1  rY   rY   rZ   r     s    zTestRQ.test_simple_complexc                 C   sT   d}d}t dD ]>}t||g}t|\}}t||j t| t|| | qd S r  r3  r|   r  rU   r   r}   r  r  rY   rY   rZ   r    s    zTestRQ.test_random_tallc                 C   sT   d}d}t dD ]>}t||g}t|\}}t||j t| t|| | qd S r$  r3  r5  rY   rY   rZ   r%    s    zTestRQ.test_random_trapc                 C   sx   d}d}t dD ]b}t||g}t|dd\}}t||j t| t|| | t|j||f t|j||f qd S )Nr   r  rN   r  r  )r   rG   r   r   rS   rE   r   r?   r5  rY   rY   rZ   test_random_trap_economic  s    z TestRQ.test_random_trap_economicc                 C   sd   d}t dD ]R}t||gdt||g  }t|\}}t|| j t| t|| | qd S r'  )r   rG   r   r   rR   rS   rE   r4  rY   rY   rZ   r    s    zTestRQ.test_random_complexc                 C   s   d}d}t dD ]v}t||gdt||g  }t|dd\}}t|| j t| t|| | t|j||f t|j||f qd S )Nr   r  rN   rM   r  r  )	r   rG   r   r   rR   rS   rE   r   r?   r5  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+  r0  r1  rY   rY   rZ   r     s    zTestRQ.test_check_finiteN)r   r   r   r   r   r2  r  r  r  r  r   r  r%  r6  r  r7  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   rl   )r|   r}   tr7  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|ohttt| | j|||ddd t||\}}| j|||ddd d S )Nr     rt   r  r   rt   rw   +=+<r   r   r
  )r   r:  r   rP   anyr<   r>   r   )r|   r}   r9  rn  ZtcZzcZtc2Zzc2rY   rY   rZ   r     s    (zTestSchur.test_simplezsort, expected_diaglhprN         ri   rhpiucoucc                 C   s   | dkS )Nr  rY   )rf   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      @rM  rJ  r         @r@   r>  r?  r@  -q=r   rN   )r   r:  r   rP   r4   r   )r|   r@   Zexpected_diagr}   r9  r7  Z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 )NrI  rK  rL  rO  unsupportedrQ  rh   )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}   r9  rn  rY   rY   rZ   r     s    zTestSchur.test_check_finiteN)r   r   r   r:  r   r   r   r  rP   r=   rT  rV  r   rY   rY   rY   rZ   r8    s   	
 
r8  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@rh   calc_qrU  decimalr   r   rS   r|   r}   h1rp   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 )NrX  )rZ  y             f@r\  )y             ;r   r^  rh   rb  )r   r   rR   rS   r|   r}   rp   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)rh   rN   rt   rU  rv   rw   r\   )r   rN   rt   rU  rw   r\   rN   )r   rN   rN   rt   r   rt   rN   )r   r   rN   r  r   r   rN   )r   rt   rh   rN   r   rh   rN   )r   rh   rN   rt   r   rh   r   )r   r   r   r   r   rh   rN   rh   rb  rf  ri  rY   rY   rZ   test_simple26  s    zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nrt   rN   )r   r   rh   rb  )rP   rE   r   r   rS   ri  rY   rY   rZ   test_simple3A  s    
zTestHessenberg.test_simple3c                 C   sF   d}t dD ]4}t||g}t|dd\}}t|j| | | qd S )Nrh  rN   rh   rb  )r   rG   r   r   rS   r|   rU   r   r}   rp   r  rY   rY   rZ   r  G  s
    zTestHessenberg.test_randomc                 C   sZ   d}t dD ]H}t||gdt||g  }t|dd\}}t| j| | | qd S )Nrh  rN   rM   rh   rb  )r   rG   r   r   rR   rS   rl  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 )NrX  rY  r]  r_  r`  ra  rh   F)rc  r   rU  rd  rf  rg  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   rh   r\   r<  rb  y       @      r   y      @      @y      (@       )r   r   rP   rE   )r|   r}   rp   r  r   h2r  rY   rY   rZ   test_2x2`  s    
zTestHessenberg.test_2x2N)r   r   r   r   r   rj  rk  r  r  r   rn  rY   rY   rY   rZ   rW  "  s   rW  zBuild DependenciesZ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   s   t d d S Ni90  rS  r   rY   rY   rZ   r   t  s    zTestQZ.setup_methoddarwinZ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 )Nrv   rd  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 )Nrv   r   	rG   r   r   rS   rE   r   rP   r   r4   rt  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 )Nrv   rM   r   )rG   r   r   rR   rS   rE   r   rP   r   r4   ra   rt  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 )Nrv   rM   rd  r   )rG   rT   r;   r   r   rR   rS   rE   r   rP   r   r4   ra   rt  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 )Nrv   r
  )outputr   )rG   r   rR   rS   r   r`   ra   rE   r   rP   r   r4   )
r|   rU   rX   r   ru  rv  rw  r   aaZ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~       ErP  )皙@rM        GrM  )r   r   r   r   )r   r   g      r  )r   r]   rN  r   )r|  r   rN  rJ  c                 S   s   |dkS )Nr   rY   )re   ZaibetarY   rY   rZ   rG    rH  z,TestQZ.test_qz_double_sort.<locals>.<lambda>rQ  )rP   r3   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 )Nrv   Fr   r   ry  rt  rY   rY   rZ   r     s    zTestQZ.test_check_finiteN)r   r   r   r   r   r   r   sysplatformblas_providerblas_versionrx  rz  r{  r|  r  r  r   rY   rY   rY   rZ   rq  s  s   

crq  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  rC  r  )r  r  r  rP  )r  g      :@r  rM  )rh   rN   rh   )rh   rt   rU  )rh   rt   rt   )rh   rt   r  rU  )r   r   r   r   )rJ  rJ  r]         @)r  rJ  r   r   )r  rJ         @r  )r        $@rM  r  )r  r  r]   r   )r   r   rM  rM  )r   r   rJ  r  rN   r   rh   )rP   r3   rE   r4   rX   r   )
clsA1B1A2B2A3B3A4B4A5rY   rY   rZ   rT  *  sF    
	





zTestOrdQZ.setup_classc                    sP   t jdd,  fddt| j| jD }W d    n1 s>0    Y  t|S )Nraiser   c                    s   g | ]\}}t || d qS )rQ  )r   ).0AiBirQ  rY   rZ   
<listcomp>c  rH  z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rP   r   ziprX   r   tuple)r|   r@   retrY   rQ  rZ   	qz_decompa  s    :zTestOrdQZ.qz_decompc
                 C   sv  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rq||jd d k r||d |f dkrt
|||d ||d f |||d ||d f \}}|d jdk rB|ddg }|||d  |||d   }|d jdk r~|ddg }t|| q|| dkr|| dkrt|||f d t|||f d q|| dkrt|||f d qt|||f |||f  || ||   qt|}d}t	|jd D ]<}|t || gt || g}|sj|rjJ |}q4d S )Nr   r   r   rh   rN   T)rP   rE   r?   r   rS   rR   r   Ztrilr8   r   r	   ra   r   r   r1   r3   )r|   rX   r   r@   ru  rv  alphar  rw  r   ZIdr   Zevals_tmpZsortfunZlastsortZ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  Zretir  r  rY   rY   rZ   	check_all  s    
zTestOrdQZ.check_allc                 C   s   |  d d S )NrB  r  r   rY   rY   rZ   test_lhp  s    zTestOrdQZ.test_lhpc                 C   s   |  d d S )NrD  r  r   rY   rY   rZ   test_rhp  s    zTestOrdQZ.test_rhpc                 C   s   |  d d S )NrE  r  r   rY   rY   rZ   test_iuc  s    zTestOrdQZ.test_iucc                 C   s   |  d d S )NrF  r  r   rY   rY   rZ   test_ouc  s    zTestOrdQZ.test_oucc                 C   s   dd }|  | d S )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S Nr   r   FrP   
empty_likeboolra   rf   r;  r^   ZnonzerorY   rY   rZ   r@     s
    
z TestOrdQZ.test_ref.<locals>.sortr  r|   r@   rY   rY   rZ   test_ref  s    zTestOrdQZ.test_refc                 C   s   dd }|  | d S )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S r  r  r  rY   rY   rZ   r@     s
    
z TestOrdQZ.test_cef.<locals>.sortr  r  rY   rY   rZ   test_cef  s    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 )Nrh   rN   rB  rQ  )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 ]\}}}|D ]\}}t|||d\}}}}}}|dk}|dk}t |}t j|||@ < t j|| |@ < ||  ||   || < t|| qqvd S )NrN   r   ri   rB  rC  rD  rE  rF  y             ?y      ?      ?yٿɿ      ?      r   rh   rQ  )	rP   rE   r4   r   nanr  r   r  r   )r|   r  r  Z	expected1r  r  Z	expected2r  r  Z	expected3r  r  Z	expected4r  ZB5Z	expected5rX   r   expectedr  r  Z	expectediZsortstrZexpected_eigvalsr  r  r  ZazeroZbzerorf   rY   rY   rZ   test_sort_explicit  sX    












zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodrT  r  r  r  r  r  r  r  r  r  r  r  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   s   t d d S rr  rS  r   rY   rY   rZ   r     s    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}qZd S )N   c                 S   s   | |k S r   rY   r  r  rY   rY   rZ   rG  	  rH  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r`   )r@   r}  c                 S   s   | |k S r   rY   r  rY   rY   rZ   rG  	  rH  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 ]B}t||f|}t||f|}t||dd\}}}}}	}
qd S )Nr  rF  rQ  )rP   r:   r  r  r;   rG   rT   r   )r|   r  r  rX   r   SrS   r  r  UVrY   rY   rZ   test_decompose_ouc
	  s
    z)TestOrdQZWorkspaceSize.test_decompose_oucN)	r   r   r   r   r  r   r   r  r  rY   rY   rY   rZ   r    s   r  c                   @   s   e Zd Zdd ZdS )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 qd S )Nr   )_datacopiedrh   rN   rt   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   r  rY   r  rY   rZ   Fake1 	  s   r  c                       s   e Zd Z jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   Z__array_interface__rY   r  rY   rZ   Fake2$	  s   r  FTr   )Zscipy.linalg._decompr  rI   rB   tolistr   r   repr)r|   r  r   LZM2r  r  ZF1ZF2itemstatusZarrrY   r  rZ   test_datacopied	  s     zTestDatacopied.test_datacopiedN)r   r   r   r  rY   rY   rY   rZ   r  	  s   r  c                  C   sF   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}   rn  rY   rY   rZ   test_aligned_mem_float1	  s
    r  ppc64lezcrashes on ppc64ler   c                  C   sF   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 (float64)i$  r   rU  r   r  r  Tr  N)	r9   rP   r  r  r  r  r?   r	   rS   r  rY   rY   rZ   test_aligned_mem>	  s
    r  c                  C   sF   t dtjd} tj| jddtd}d|_t|dd t|jdd d	S )
z>Check that complex objects don't need to be completely alignediH  r   r  r   r  r  Tr  N)	r8   rP   r  r  r  r
  r?   r	   rS   r  rY   rY   rZ   test_aligned_mem_complexM	  s
    r  c                 C   s   t |}tt|D ]}|d d  }t|| tjrtj|| j|| jj	 d tj
d}tj|jd|| j|| jd}|| j|_|| |d< |||< | |i | t|| jdkr|| j||< | |i | qd S )Nr  r   rU  r  .rh   )r  r   rl   rj   rP   rD   r8   r   rW   itemsizer  r  r  r?   rS   )funcr  kwargsr   r}   r~  rY   rY   rZ   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||| qhd S )Nr   r   r   r  i N  rU  r  Tr  )overwrite_b)r  r  )rP   rE   r  r9   r?   r  r  r  r   r   r	   dictr
   r   r   r   r   r   r   r   r   r   r   r  )	r   Rr  r   ZLUpivr  r  r  rY   rY   rZ   test_lapack_misalignedm	  s4    

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   s   t tdg t tddg d S Nr   )rH   r	   r   rY   rY   rZ   test_eig	  s    zTestOverwrite.test_eigc                 C   s   t tdg t tddg d S r  )rH   r   r   rY   rY   rZ   	test_eigh	  s    zTestOverwrite.test_eighc                 C   s   t tdg d S Nr  )rH   r   r   rY   rY   rZ   r2  	  s    zTestOverwrite.test_eig_bandedc                 C   s   t tdg d S r  )rH   r
   r   rY   rY   rZ   test_eigvals	  s    zTestOverwrite.test_eigvalsc                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   test_eigvalsh	  s    zTestOverwrite.test_eigvalshc                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   r1  	  s    z!TestOverwrite.test_eigvals_bandedc                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   test_hessenberg	  s    zTestOverwrite.test_hessenbergc                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   test_lu_factor	  s    zTestOverwrite.test_lu_factorc                    s<   t g dg dg dg}t| t fdddg d S )Nrs   r  )r\   r  r  c                    s
   t  | S r   )r   )r   ZxlurY   rZ   rG  	  rH  z-TestOverwrite.test_lu_solve.<locals>.<lambda>)rt   )rP   r3   r   rH   )r|   rf   rY   r  rZ   test_lu_solve	  s    zTestOverwrite.test_lu_solvec                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   test_lu	  s    zTestOverwrite.test_luc                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   test_qr	  s    zTestOverwrite.test_qrc                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   test_rq	  s    zTestOverwrite.test_rqc                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   
test_schur	  s    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   rG  	  rH  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  rA  )r   r  rY   rY   rZ   rG  	  rH  z(TestOverwrite.test_svd.<locals>.<lambda>)rH   r   r   rY   rY   rZ   test_svd	  s    zTestOverwrite.test_svdc                 C   s   t tdg d S r  )rH   r   r   rY   rY   rZ   test_svdvals	  s    zTestOverwrite.test_svdvalsN)r   r   r   r  r  r2  r  r  r1  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|st 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 )NrN   r   rt  rh   r   rN   rh   rv   -C6?MbP?Zrcondư>rw   )rP   r   r  rT   rb   rv  r   r   r?   r   meanrS   rG   rF   rQ   )rU   rW   skip_bigXrv  tolYrY   rY   rZ   _check_orth	  s$    
$
r  r  z"test only on 64-bit, else too slowc               
   C   sL   d} zt | tjdd W n. tyF } ztd|W Y d }~n
d }~0 0 d S )Ni T)r	  z.memory error perhaps caused by orth regression)r  rP   r  MemoryErrorAssertionError)rU   r@  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rh   rN   rt   r   r   )rP   r:   r  r;   r  	itertoolsproductr  )r  r  rl  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 ]p\}}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r4t 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 q4d S )Nrh   r  rN   r   rt  r   r  r  rv   r  r  r  r  rw   )rP   rG   rF   r:   r  r;   r  r  r  r   rb   rv  r$   r   r?   r   rS   ZrandnrQ   rT   )r  r  rl  rU   r
  rv  r  r  rY   rY   rZ   test_null_space	  s4    
$
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 qzt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  rt   r]   r>  r  rh   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rN   r   rR  rS  gL0?gĹ-?gyv?r   r  )r   rh   r   )r   r   rh   r   r   r  r  )r!   r  r   r    rP   pir8   r?   r3   r   r   )HrX   r   rf   r  r}   r   rY   rY   rZ   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)rP   Zeinsum)r|   r}   r   rY   rY   rZ   matmul\
  s    zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r   )r   r  )r|   r~   ro   rf   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~   ro   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 )Nrh   rN   rt   r   rP   r3   r6   r	   r%   r  r  rY   rY   rZ   test_single_array2x2_reall
  s    z%TestCDF2RDF.test_single_array2x2_realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nrh   rN   r   r  r  rY   rY   rZ   test_single_array2x2_complexr
  s    z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S )Nrs   ru   r  r  rY   rY   rZ   test_single_array3x3_realx
  s    z%TestCDF2RDF.test_single_array3x3_realc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S Nrs   )r   rU  rv   )r   r  rU  r  r  rY   rY   rZ   test_single_array3x3_complex~
  s    z(TestCDF2RDF.test_single_array3x3_complexc                 C   s\   t ddD ]L}tjd tjd||}tj|\}}t||\}}| ||| q
d S )Nrh   r\   iɚ;r   )	r   rP   rG   rF   rQ   r6   r	   r%   r  r|   r   r
  r~   ro   r  r   rY   rY   rZ   test_random_1d_stacked_arrays
  s    z)TestCDF2RDF.test_random_1d_stacked_arraysc                 C   sR   t ddD ]B}tjdd||}tj|\}}t||\}}| ||| q
d S )Nrh   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~   ro   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 )Nrt   rw   rN   rP   r9   r   r   r   r%   r(  rY   rY   rZ   r   
  s    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~   ro   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 )Nrt   r   rU  r*  r(  rY   rY   rZ   test_non_associated_error
  s    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 )Nrs   r   )rN   rv   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   Znumpy.testingr   r   r   r   r   r   r   r   r   Z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&   Zscipy.linalg.lapackr'   r(   r)   r*   r+   r,   r-   r.   r/   Zscipy.linalg._miscr0   Zscipy.linalg._decomp_qzr1   Zscipy.statsr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   Znumpy.randomrF   rG   Zscipy.linalg._testutilsrH   Zscipy.sparse._sputilsrI   Zscipy._lib._testutilsrJ   Zscipy.linalg.blasrK   Zscipy.__config__rL   ImportErrorr  r[   r  ZREAL_DTYPESr  rO   rj  r_   rq   rr   r   r   r>  rQ  r  r  r  r  r  r/  r8  rW  r  r  rq  r  r  r  r  r   r  machiner  r  r  r   r  r  r  r  rW   Zintpr  r  r  r  r  r  rY   rY   rY   rZ   <module>   s    ,T

 [  o  9    "h7K
 7 K#

 8
&: