o
    i                    @   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   m/var/www/html/eduruby.in/lip-sync/lip-sync-env/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   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 }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   ZrvsrS   rR   r4   )Zdim_or_eigvdimdvhrY   rY   rZ   symrandR   s   
	


rr   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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 )Nru   rw   ro   rz   r{   rN   r   )r3   rS   copyr
   r=   r   r}   rY   rY   rZ   test_simple_trt   s   "zTestEigVals.test_simple_trc                 C   rt   )Nru   rN   rx   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 )	Nru   rw   Fcheck_finiterz   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   rs   l   s
    rs   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 )Nru   rw   rz   r{   rN   r   rh   rv         @r   r   r   r   rh   r   rN   leftright)r3   r	   r=   r0   r   rA   rangerS   	r~   r   r   rp   r   Zv0Zv1Z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 )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 ]}t||d d |f  || |d d |f   qtdD ]}t| j|d d |f  ||  |d d |f   q9d S )Nru   r   rh   r   rv   )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 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   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   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)rh   r   rv   )rN   r   r   )r   rN   r   )r   r   rN   )rh   r   r   )r   rh   r   r   r   r   rv   rv   rv   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   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   )rh   r   r   r   )r   rh   r   r   r   )r   r   rh   r   )r   r   r   rh   rh   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  rv   r   rM   )rF   rr   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 )Nru   rw   Fr   rz   r{   rN   r   rh   rv   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.ry   rv   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         "@rv   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         ?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   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.rh   	compute_vN)r+   r  r7   r   r@   r	  absr
  r~   r   evecinfoevec_rY   rY   rZ   
test_dsbev     zTestEigBanded.test_dsbevc                 C   r  )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  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.        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     zTestEigBanded.test_dsbevxc                 C   r  )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  r!  zTestEigBanded.test_zhbevdc              	   C   r#  )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  r)  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   ry   r   selectselect_rangerh   h㈵>rp   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   ry   r   r,  rh   r/  rp   Fr   )r   r  r7   r`   r   r@   r	  r  r
  r  r  r  )r~   r0  Zevec_symZ	evec_sym_r1  Z	evec_hermZ
evec_herm_r2  r3  r4  Zevec_sym_indr5  Zevec_herm_indr6  r7  r8  Zevec_sym_valr9  Z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   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     2zTestEigBanded.test_dgbtrfc                 C   r<  )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rN   Nrh   r   r=  )
r?   r  r)   r  r  r  r4   r   r   r   r>  rY   rY   rZ   test_zgbtrfZ  rC  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~   r?  r@  r  yZy_linrY   rY   rZ   test_dgbtrsh     zTestEigBanded.test_dgbtrsc                 C   rE  )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   rF  rY   rY   rZ   test_zgbtrsr  rI  zTestEigBanded.test_zgbtrsN)r   r   r   r   r   r   r"  r(  r*  r+  r:  r;  rB  rD  rH  rJ  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   rh   r   r   N)r5   ro   er4   Zfull_matr6   r	   r`   r7   r   r  )r~   r  r  r  r  rY   rY   rZ   rL    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"   ro   rM  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 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autorN  )rS  rT  rT  r   r   rO  r-  r.  rU  rV  rW  r   rh   r-  r.  rO  rN   ry   r/  rp   N)	r"   ro   rM  r   r@   r   r   r   rl   )	r~   driverr   Zw_indr2  r3  r6  r7  Z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. rS  rN  )rU  rT  rV  rW  NrT  r   r   rX  rY  r   rh   rZ  rN   ry   r/  rp   )r   r   r#   ro   rM  r7   r   r@   r   r  r  rl   )	r~   r[  r   r  r  r2  r3  r6  r7  rY   rY   rZ   test_eigh_tridiagonal  sR   


z(TestEigTridiagonal.test_eigh_tridiagonalN)r   r   r   r   rL  rR  r\  r]  rY   rY   rY   rZ   rK  }  s    "rK  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 )Nrh   rN   rv      )type)subset_by_valuesubset_by_indexzKeyword argument 'eigvals)re  r
   r   rf  r
   r   re  Zwrongr[  gvxevrF)r[  turbogvd)r[  rf  rm  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 )Nrv   )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   ri  rh   T)rV   rW   )	enumerateDTYPESr[   r   r   r?   rl   r   )r~   inddtr   r   rp   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\   rv   rx   )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_r[  )r  Zevdrl  Zevxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nrv  )rU   rW   rj  r$    r   r   )r[   r   r   rP   rb   eps)r~   r[  r  r   r   rp   rY   rY   rZ   test_various_drivers_standardG  s   
z&TestEigh.test_various_drivers_standardrd  ru   )gvrn  rk  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     @rv  TrV   )r   r   r[  rd  rh   r$  r  rN   )rP   spacingr[   r   r   )r~   r[  rd  r   r   r   r   rp   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 )
Nrx   rh   rN   rg  )rh   333333??      ?rN   gffffff?ri  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 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rm  Keyword argument 'eigvals'r   rh   rh  )r   Zwarnsrr  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 )Nrv   Tr  r  r  rn  rj  r  r   rh   rh  rg  )r[   rP   ro  rp  rq  rr  r   r   )r~   r   r   rs  Zw_depZv_depr   rp   rY   rY   rZ   test_deprecation_resultsu  s    


z!TestEigh.test_deprecation_resultsN)r   r   r   rb  rt  ru  r{  r}  r  r   r   parametrizerx  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 )NZgesddr   rO  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   rN  rP  )r   rm   r   r   r   rY   rY   rZ   rR    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 )Nru   rh   rv  rv   rw   TFfull_matricesrO  rv   r   r   rO  r   rS   rE   r8   r?   rW   charr   rl   r~   r   r  rA  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 )Nru   rw   r  r  rv   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 )Nru   rc  rx   ry   r  r  r   r   rO  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 ]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 )	Nrh   rN   rc  rx   rv   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 )Nrv  r   rv   r  r  rh   r   )r   rG   r   rO  r   rS   rE   r?   r8   rW   r  rl   )
r~   rU   mr   r   r  rA  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 )Nru   )rh   y               @rv   rw   r  r  rh   r   )r   rO  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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 )	Nrv  r   rv   r  rM   r  rh   r   )r   rG   listr?   r   rO  r   rR   rS   rE   r8   rW   r  rl   )
r~   rU   r  r   r  r   rA  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   rN  )rP   rG   rF   r:   float64r;   
complex128rQ   rT   r   rO  )r~   sizesszrz  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 )Nru   r  rw   F)r   rO  rv   r   r  )r~   r   rA  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  rN  )rP   r3   r   rO  )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  rQ  F)r  r   r   r   )rJ   rP   r8   r:   r   r   )r~   rX   rA  r  r  rY   rY   rZ   test_large_matrix  s   
zTestSVD_GESDD.test_large_matrixN)r   r   r   r   rR  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   rv   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 )Nru   rw   rv   r   rh   rN   r   r   rl   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 )Nru   r  rN   r   rh   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 )Nrh   rN   rc  rx   rv   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 )Nru   )rh   rv                @rw   rv   r   rh   rN   r  r  rY   rY   rZ   r   >  r  zTestSVDVals.test_simple_complexc                 C   r  )Nru   )rc  y              @ry   rN   r   rh   r  r  rY   rY   rZ   test_simple_underdet_complexD  r  z(TestSVDVals.test_simple_underdet_complexc                 C   r  )Nrh   rN   rc  rx   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 )	Nru   rw   Fr   rv   r   rh   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rh   r   r   rv   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`  ra  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   rv   rN   rz   rv   rx   rv   ry   rv   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  ru   r   rv   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  ru   rv   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   rv   
rP   rB   r   r  r4   r   r   r   rS   rE   r~   r   r  r  pro   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  ru   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  ru   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  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   rz   rx   rv   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   rz   rx   rv   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   rz   rx   rv   economicmoderv   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   rz   rx   rv   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   rz   rx   rv   r  r  rh   r   rh   rN   r   TZ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   rz   rx   rv   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   rz   rx   rv   r  r  ru   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   rz   rx   rv   Tr  r  ru   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   rx   r  rN   r  rN   rv   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   rz   rx   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     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  r  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rv         @      @rx   rx   rN   y       @      @rv   rN   r\   rv   )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 )Nr  r  r  rh   rN   r  r   rv   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  rv   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   rz   y      @      @rv   r  r  rh          @       @r   r  Tr  r  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 )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 )Nrv   r  rx   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   rv   )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  
   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  r+  z)TestQR.test_simple_complex_right_pivotingc                 C   sP   d}t dD ]}t||g}t|\}}t|j| t| t|| | qd S Nrv  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 )Nrv  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-  r1  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 )Nrv  rN   Tr  rh   r   r   rG   r   r  r4   r   rP   r   r   rS   rE   
r~   rU   r   r   r  r  r  ro   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   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 ]3}t||g}t|dd\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )Nr;  r   rN   r  r  r   r1  )	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 Nr;  r   rN   r  r  r1  )	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 )Nr;  r   rN   Tr  rh   r   r6  r~   r  rU   r   r   r  r  r  ro   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 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 ]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 )
Nr;  r   rN   Tr  r  rh   r   r  )r   rG   r   r  r4   r   rP   r   r   rS   rE   r   r?   rB  rY   rY   rZ   test_random_tall_e_pivoting  s   "
z"TestQR.test_random_tall_e_pivotingc                 C   r9  Nr   r;  rN   r.  r<  rY   rY   rZ   test_random_trap"     zTestQR.test_random_trapc                 C   rA  )Nr   r;  rN   Tr  rh   r   r6  rB  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 Nrv  rN   rM   )r   rG   r   r   rR   rS   rE   r/  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 )Nrv  rN   rM   r   r1  r2  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 rJ  r1  r4  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 )Nrv  rN   rM   Tr  rh   r   )r   rG   r   r  r4   r   rP   r   r   rR   rS   rE   r7  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   rv   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  )lworkrv   r   r   rQ  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  r3  r5  r8  r=  r>  r@  rC  rD  rE  rG  rI  r  rL  rM  rN  r   rS  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`  ra  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 r-  r   rG   r   r   rS   rE   r~   rU   r   r   r  r  rY   rY   rZ   r    r0  zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  rv   rV  rW  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  rV  rW  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 )Nr	  r  rv   rV  rW  rY   rY   rZ   r    r  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   rW  rY   rY   rZ   r     r  zTestRQ.test_simple_complexc                 C   T   d}d}t dD ]}t||g}t|\}}t||j t| t|| | qd S r:  rY  r~   r  rU   r   r   r  r  rY   rY   rZ   r=    rH  zTestRQ.test_random_tallc                 C   r[  rF  rY  r\  rY   rY   rZ   rG    rH  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   r;  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 rJ  )r   rG   r   r   rR   rS   rE   rZ  rY   rY   rZ   r    rK  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   r;  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 rO  rV  rW  rY   rY   rZ   r     rP  zTestRQ.test_check_finiteN)r   r   r   r   r   rX  r  r  r  r  r   r=  rG  r]  r  r^  r   rY   rY   rY   rZ   rU    s    		rU  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   trA  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     rv   r  r   rv   ry   +=+<r   r   r  )r   ra  r   rP   anyr<   r>   r   )r~   r   r`  r|  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      @rt  rq  r         @r@   re  rf  rg  -q=r   rN   )r   ra  r   rP   r4   r   )r~   r@   Zexpected_diagr   r`  rA  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 )Nrp  rr  rs  rv  unsupportedrx  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 )Nrb  r  rd  Fr   )r   r   rR   rS   )r~   r   r`  r|  rY   rY   rZ   r     s   zTestSchur.test_check_finiteN)r   r   r   ra  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@rh   calc_qrc  decimalr   r   rS   r~   r   Zh1rq   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  rh   r  )r   r   rR   rS   r~   r   rq   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   rv   rc  rx   ry   r\   )r   rN   rv   rc  ry   r\   rN   )r   rN   rN   rv   r   rv   rN   )r   r   rN   r  r   r   rN   )r   rv   rh   rN   r   rh   rN   )r   rh   rN   rv   r   rh   r   )r   r   r   r   r   rh   rN   rh   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 )Nrv   rN   )r   r   rh   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 )Nrv  rN   rh   r  )r   rG   r   r   rS   r~   rU   r   r   rq   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 )Nrv  rN   rM   rh   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  rh   F)r  r   rc  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   rh   r\   rc  r  y       @      r   y      @      @y      (@       )r   r   rP   rE   )r~   r   rq   r  r   Z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 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   r_  Ni90  ra  r   rY   rY   rZ   r   t  r   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 )Nrx   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 )Nrx   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 )Nrx   rM   r   )rG   r   r   rR   rS   rE   r   rP   r   r4   ra   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 )Nrx   rM   r  r   )rG   rT   r;   r   r   rR   rS   rE   r   rP   r   r4   ra   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 )Nrx   r  )outputr   )rG   r   rR   rS   r   r`   ra   rE   r   rP   r   r4   )
r~   rU   rX   r   r  r  r  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       Erw  )皙@rt        Grt  )r   r   r   r   )r   r   g      r  )r   r]   ru  r   )r  r   ru  rq  c                 S   s   |dkS )Nr   rY   )re   ZaibetarY   rY   rZ   rn    ro  z,TestQZ.test_qz_double_sort.<locals>.<lambda>rx  )	rP   r3   r   r   r   r   r   rS   r  )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 )Nrx   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  rj  r  )r  r  r  rw  )r  g      :@r  rt  )rh   rN   rh   )rh   rv   rc  )rh   rv   rv   )rh   rv   r  rc  )r   r   r   r   )rq  rq  r]         @)r  rq  r   r   )r$  rq         @r  )r        $@rt  r  )r  r  r]   r   )r   r   rt  rt  )r   r   rq  r  rN   r   rh   )rP   r3   rE   r4   rX   r   )
clsA1B1A2B2A3B3A4B4A5rY   rY   rZ   rb  *  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 )rx  )r   ).0AiBirx  rY   rZ   
<listcomp>c  s    z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rP   r   ziprX   r   tuple)r~   r@   retrY   rx  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   rh   rN   T)rP   rE   r?   r   rS   rR   r   Ztrilr8   r   r	   ra   r   r   r1   r3   )r~   rX   r   r@   r  r  alphar  r  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      |  d d S )Nri  r  r   rY   rY   rZ   test_lhp     zTestOrdQZ.test_lhpc                 C   r  )Nrk  r  r   rY   rY   rZ   test_rhp  r  zTestOrdQZ.test_rhpc                 C   r  )Nrl  r  r   rY   rY   rZ   test_iuc  r  zTestOrdQZ.test_iucc                 C   r  )Nrm  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boolra   rf   rG  r^   Z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  r  rY   rY   rZ   r@     r  z TestOrdQZ.test_cef.<locals>.sortr  r  rY   rY   rZ   test_cef  r  zTestOrdQZ.test_cefc                 C   s|   t | jd | jd dd}| j| jd | jd dg|R   t | jd | jd dd}| j| jd | jd dg|R   d S )Nrh   rN   ri  rx  )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   ri   ri  rj  rk  rl  rm  y             ?y      ?      ?yٿɿ      ?      r   rh   rx  )	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  s\   












zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodrb  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   r_  r  ra  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   rn  	  ro  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r`   )r@   r  c                 S   r  r   rY   r  rY   rY   rZ   rn  	  ro  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 )Nr  rm  rx  )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                   @   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   )_datacopiedrh   rN   rv   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  	  r  r  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
   r  ppc64lezcrashes on ppc64ler   c                  C   r  )
z4Check linalg works with non-aligned memory (float64)i$  r  rc  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   r  )
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 ]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  rc  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||| qd S )Nr   r  r   r  i N  rc  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	  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 Nr  )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   r:  	  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 )Nru   r  )r\   r  r  c                    s
   t  | S r   )r   )r   ZxlurY   rZ   rn  	     
 z-TestOverwrite.test_lu_solve.<locals>.<lambda>)rv   )rP   r3   r   rH   )r~   rf   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   rn  	  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  rN  )r   r/  rY   rY   rZ   rn  	  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%  r:  r&  r'  r*  r+  r,  r-  r.  r1  r2  r3  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  rh   r   rN   rh   rx   -C6?MbP?Zrcondư>ry   )rP   r   r  rT   rb   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   rM  rY   rY   rZ   test_orth_memory_efficiency	  s   rB  c                  C   s@   t jt jt jt jg} g d}t| |D ]	\}}t|| qd S )Nrh   rN   rv   r   r   )rP   r:   r  r;   r  	itertoolsproductr?  )r0  r  rz  rU   rY   rY   rZ   	test_orth	  s
   rF  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 )Nrh   rC  rN   r  r  r   r4  r5  rx   r6  r7  r8  r9  ry   )rP   rG   rF   r:   r  r;   r  rD  rE  r   rb   r  r$   r   r?   r   rS   ZrandnrQ   rT   )r0  r  rz  rU   r<  r  r=  r>  rY   rY   rZ   test_null_space	  s8   
$
rG  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  rv   r]   re  r4  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   ry  rz  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

rJ  c                   @   rT  )TestCDF2RDFc                 C   s   t d||S )Nz...ij,...jk->...ik)rP   Zeinsum)r~   r   r   rY   rY   rZ   matmul\
  r  zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r   )r   rL  )r~   r   rp   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%   rM  r~   r<  r   rp   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   rv   r   rP   r3   r6   r	   r%   rM  rN  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 )Nrh   rN   r   rQ  rN  rY   rY   rZ   test_single_array2x2_complexr
  rS  z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S )Nru   rw   rQ  rN  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 Nru   )r   rc  rx   )r   r  rc  rQ  rN  rY   rY   rZ   test_single_array3x3_complex~
  rV  z(TestCDF2RDF.test_single_array3x3_complexc                 C   s\   t ddD ]&}tjd tjd||}tj|\}}t||\}}| ||| qd S )Nrh   r\   iɚ;r   )	r   rP   rG   rF   rQ   r6   r	   r%   rM  r~   r   r<  r   rp   rO  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 )Nrh   r\   r   )r   rP   rG   rQ   r6   r	   r%   rM  rY  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   rp   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 )Nrv   ry   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 rW  rP   r3   r6   r	   r   r   r%   r~   r<  r   rp   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 )Nrv   r   rc  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 )Nru   r   )rN   rx   y      @      r`  ra  rY   rY   rZ   test_not_conjugate_pairs
  s   z$TestCDF2RDF.test_not_conjugate_pairsN)r   r   r   rL  rM  rP  rR  rT  rU  rX  rZ  r[  r]  r   rb  rc  rd  rY   rY   rY   rZ   rK  Z
  s    	rK  )r\   )F)rD  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   rx  r_   rr   rs   r   r   rK  r^  r  r  r  r  r  rU  r_  r  r  r  r  r  r  r  r  r   r  machiner  r  r  r   r  r  r?  r  rW   Zintpr  rB  rF  rG  rJ  rK  rY   rY   rY   rZ   <module>   s     ,T
 [  o  9    "h7K
 7 K#

 
8&: