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

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

    If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                      eigenvalues are 'a'.
    rL      r   zinput type not supported.      ?)
isinstanceintrO   rD   lenr?   	TypeErrorr2   ZrvsrR   rQ   r4   )Zdim_or_eigvrngdimdvhrX   rX   rY   symrand@   s    	



rf   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r[   rL      rL         	   ]   rL   r   r
   r=   r   selfawexact_wrX   rX   rY   test_simple\   s    "zTestEigVals.test_simplec                 C   sd   t g dg dg dgdj}| }|j}t|}dtd d ddtd d g}t|| d S )Nrh   rj   rc   rm   rn   rL   r   )r3   rR   copyr
   r=   r   rp   rX   rX   rY   test_simple_trb   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 )Nrh   rL   rk   y      @      ?y      "@      ?y      W@      @rL   r   ro   rp   rX   rX   rY   test_simple_complexj   s    zTestEigVals.test_simple_complexc                 C   sR   g dg dg dg}t |dd}dtd d ddtd d g}t|| d S )	Nrh   rj   Fcheck_finiterm   rn   rL   r   ro   rp   rX   rX   rY   test_finiter   s    "zTestEigVals.test_finiteN)__name__
__module____qualname__ru   rw   ry   r|   rX   rX   rX   rY   rg   Z   s   rg   c                   @   sv   e Zd Zdd Zdd Zdd Zdd Zdd
dZdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestEigc           	      C   s  t g dg dg dg}t|\}}dtd d ddtd d g}t dddtdd  d g}t g d	}t dddtdd  d g}|t| }|t| }|t| }t|| t||d d df t|d
   t||d d df t|d   t||d d df t|d   tdD ]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 )Nrh   rj   rm   rn   rL   r   r[   ri         @r   r   r   r   r[   r   rL   leftright)r3   r	   r=   r0   r   rA   rangerR   	rq   rr   rs   rd   rt   Zv0Zv1Zv2irX   rX   rY   ru   {   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 )Nr[   rL   r         ?       @y      ?       )r3   r	   r   r   rQ   rR   rq   rr   rs   Zvlvrr   rX   rX   rY   test_simple_complex_eig   s    0zTestEig.test_simple_complex_eigc                 C   s   t g dg dg dg}t|ddd\}}}tdD ]2}t||d d |f  || |d d |f   q6tdD ]<}t| j|d d |f  ||  |d d |f   qrd S )Nrh   rx   r[   r   ri   )r3   r	   r   r   rQ   rR   r   rX   rX   rY   ry      s    0zTestEig.test_simple_complexc                 C   sr   dgg}dgg}t ||dd\}}t|d d t|d dk t|d t ||\}}t|tj t|d d S )Nr[   r   TZhomogeneous_eigvalsr[   r   r   )r	   r   r   r   rN   inf)rq   rr   brs   r   rX   rX   rY   test_gh_3054   s    
zTestEig.test_gh_3054vIh%<=c                 C   s@  |d ur t |t | }}|}nt |}|}tj|j }d|d|}t||dd\}}t||dd}	|| |dd d f  }
|| |dd d f  }t|
jd D ].}t|
d d |f |d d |f |||d 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|	 }dtjd| dd }dtjd| dd }tt||j }tt||j }t|| || dd|d t	t
|}tt
|D ]}t|d d |f ||< qt|t|j|d tt|t|t|  d S )N
Tr   r[   r   rtolatolerr_msggHz>)r   r   r   )r   r   r   r   y             rK   g|=)tolr   )rB   rN   rE   r?   r	   r
   r   r   Zlexsortemptyr_   r0   onessizeallrC   Zreal_if_closer7   absimagr@   )rq   rW   B
atol_homogZ
rtol_homogB0msgrs   r   ZwtZval1Zval2r   permZpermtlengthZbeta_nonzeroZwhresZw_finZwt_finrX   rX   rY   _check_gen_eig   sn    


"

zTestEig._check_gen_eigc                 C   s   t g dg dg dg dg dg}t g dg dg dg d	g d
g}tjdd  | j||dd W d    n1 s~0    Y  d S )N)   "      r      )-   r   *         )'   /   1      r   )   r   r         )&   ,   r         )   r      r   r   )r   .   (   r   %   )r   r   r   r   r   )   r   r         )r   #      r   r   ignorer   g-a=)r   )r3   rN   errstater   rq   rW   r   rX   rX   rY   test_singular   s    zTestEig.test_singularc                 C   s   t tg d}tg dg dg df}tg dg dg df}td}td	}t||g|| gg}t||g||gg}tjd
d | || W d    n1 s0    Y  d S )N)r[   r   ri   )rL   r   r   )r   rL   r   )r   r   rL   )r[   r   r   )r   r[   r   r   r   r   ri   ri   ri   r   r   )r4   r3   r8   rE   rN   blockr   r   )rq   MKDZZI3rW   r   rX   rX   rY   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 )	NrL   )r[   r   r   r   )r   r[   r   r   r   )r   r   r[   r   )r   r   r   r[   r[   rX   )omegac1c2rW   r   rX   rX   rY   matrices  s    


z)TestEig.test_bad_geneig.<locals>.matricesr   r   d         @)r   )rN   r   r   r   )rq   r   krW   r   rX   rX   rY   test_bad_geneig  s
    zTestEig.test_bad_geneigc                 C   s   t jd}td|}| |d  td|}| || |dd|d  }| |d  |dd|d  }| || d S )N  ri   r   rK   )rN   rO   RandomStaterf   r   )rq   ra   rW   r   rX   rX   rY   test_make_eigvals,  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 )Nrh   rj   Frz   rm   rn   rL   r   r[   ri   r   r   r   r   )r	   r=   r3   r0   r   rA   r   r   rX   rX   rY   test_check_finite:  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.rl   ri   rL   N)rN   r9   reshapeassert_raises
ValueErrorr	   )rq   rW   rX   rX   rY   test_not_square_errorK  s    zTestEig.test_not_square_errorc                 C   s:   t d}tddd}ttt|| ttt|| dS )zOCheck that passing arrays of with different shapes
        raises a ValueError.rL         "@ri   N)rE   rN   r9   r   r   r   r	   r   rX   rX   rY   test_shape_mismatchP  s    zTestEig.test_shape_mismatchc                 C   s   t jg dg dg dg dgdd}t jg dg dg d	g d
gdd}t||\}}t j L}|td t j|ddd sJ t j|ddd sJ W d    n1 s0    Y  d S )N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r   g      L@g      Z@g      o@float64rV   )       @      @      $@r   )r   r         &@g      =@)r         @g      *@g      ?@)r   r   g      1@g     A@z%invalid value encountered in multiplyr   +=r          @)	rN   r3   r	   testingsuppress_warningsfilterRuntimeWarningiscloseany)rq   rW   r   r   VsuprX   rX   rY   test_gh_11577X  s&    

	zTestEig.test_gh_11577N)r   r   )r}   r~   r   ru   r   ry   r   r   r   r   r   r   r   r   r   r   rX   rX   rX   rY   r   y   s   
	
I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rq   rX   rX   rY   setup_methodv  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`.
   rL         ?r[         r          r   rK         r   Nr   r         ?      ?)KLKUr4   r5   sym_matherm_matreal_matcomp_matr6   r	   realr7   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr8   floatbandmat_symcomplexbandmat_hermr   bandmat_realbandmat_compr9   r   bc)rq   NewevargsZLDABr   rX   rX   rY   r  y  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.r[   	compute_vN)r+   r  r7   r   r@   r  r   r  rq   rs   evecinfoevec_rX   rX   rY   
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.r[   r   N)r,   r  r7   r   r@   r  r   r  r"  rX   rX   rY   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.        r[   rL   r!  r   N)
r?   r  r-   r  r7   r   r@   r  r   r  rq   r  rs   r#  numZifailr$  r%  rX   rX   rY   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.r[   r   N)r.   r  r7   r   r@   r  r   r  r"  rX   rX   rY   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(  r[   rL   r)  N)
r?   r  r/   r  r7   r   r@   r  r   r  r*  rX   rX   rY   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.rL   rl   r   selectselect_ranger[   h㈵>rd   Frz   N)
r   r  r  r   r@   r  r  r  rN   Zlonglong)rq   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_valrX   rX   rY   test_eigvals_banded  sP    


z!TestEigBanded.test_eigvals_bandedc                 C   s  t | j\}}|ddt|jf }tt|| j tt|t| j t | j	\}}|ddt|jf }tt|| j
 tt|t| j d}d}t | jd||fd\}	}
tt|	| j||d   tt|
t| jdd||d f  t | j	d||fd\}}tt|| j
||d   tt|t| jdd||d f  | j| d }| j| d }t | jd||fd\}}tt|| j||d   tt|t| jdd||d f  | j
| d }| j
| d }t | j	d||fd\}}tt|| j
||d   tt|t| jdd||d f  t | jd	d
\}}|ddt|jf }tt|| j tt|t| j dS )zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. NrL   rl   r   r/  r[   r2  rd   Frz   )r   r  r7   r  r   r@   r  r   r  r  r  r  )rq   r3  Zevec_symZ	evec_sym_r4  Z	evec_hermZ
evec_herm_r5  r6  r7  Zevec_sym_indr8  Zevec_herm_indr9  r:  r;  Zevec_sym_valr<  Zevec_herm_valrX   rX   rY   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.rL   Nr[   r   Z	permute_l)
r?   r  r'   r  r
  r  r4   r   r   r   rq   r   r  lu_symm_bandipivr$  ur   Zp_linZl_linZu_linrX   rX   rY   test_dgbtrf\  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.rL   Nr[   r   r?  )
r?   r  r)   r  r
  r  r4   r   r   r   r@  rX   rX   rY   test_zgbtrfj  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   rq   rA  rB  r$  yZy_linrX   rX   rY   test_dgbtrsx  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   rF  rX   rX   rY   test_zgbtrs  s    zTestEigBanded.test_zgbtrsN)r}   r~   r   r  r  r&  r'  r,  r-  r.  r=  r>  rD  rE  rH  rI  rX   rX   rX   rY   r   u  s   Q*:
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestEigTridiagonalc                 C   s   |    d S r   )create_trimatr  rX   rX   rY   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  r[   r  r   N)r5   rc   er4   Zfull_matr6   r	   r  r7   rs   r#  )rq   r  r  r  r  rX   rX   rY   rK    s    $
z TestEigTridiagonal.create_trimatc                 C   sx   t tt| j| jdd  t tt| j| jd  t tt| j| jdd t tt| j| jdd t tt| j| jddd	 dS )
zTest error conditions.Nr   rK   r  lapack_driverfoor   r   r   r/  )r   r   r"   rc   rL  r`   r  rX   rX   rY   test_degenerate  s    z"TestEigTridiagonal.test_degeneratec           	   
   C   s"  dD ]&}t | j| j|d}tt|| j qdD ]}ttt | j| jdddd 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autorM  )rR  rS  rS  r   r   rN  r0  r1  rT  rU  rV  r   r[   r0  r1  rN  rL   rl   r2  rd   N)	r"   rc   rL  r   r@   rs   r   r   r_   )	rq   driverrs   Zw_indr5  r6  r9  r:  Zw_valrX   rX   rY   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. rR  rM  )rT  rS  rU  rV  NrS  r   r   rW  rX  r   r[   rY  rL   rl   r2  rd   )r   r   r#   rc   rL  r7   r   r@   rs   r   r#  r_   )	rq   rZ  rs   r#  r%  r5  r6  r9  r:  rX   rX   rY   test_eigh_tridiagonal  sP    



z(TestEigTridiagonal.test_eigh_tridiagonalc                 C   s   t dg}t g }t||dd}|jdks2J t|| t||ddd\}}|jdks^J |jdkslJ t|| t|td	gg t||d
dd\}}|jdksJ |jdksJ |jdksJ dS )zSee gh-20075r  T)Zeigvals_onlyr[   r   r   r/  rL   r  rd   )r   r   r   )r   r   N)rN   r3   r#   ndimr   r   r?   )rq   rr   r   xr   rX   rX   rY   test_eigh_tridiagonal_1x1  s    


z,TestEigTridiagonal.test_eigh_tridiagonal_1x1N)	r}   r~   r   r  rK  rQ  r[  r\  r_  rX   rX   rX   rY   rJ    s   "*rJ  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dee	j
dddd Ze	j
dddd Ze	j
dde	j
dddd Zdd Ze	j
deegdd Zdd Zd S )!TestEighc                 C   s   t jd d S )Nr   )rN   rO   seedr  rX   rX   rY   setup_class  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 t tttddgtddgdddgd t tttddgtddgdddgd d S )Nr[   rL   ri      )type)subset_by_valuesubset_by_indexzKeyword argument 'eigvals)re  r
   r   rf  r
   r   re  ZwrongrZ  gvxevrgvd)rZ  rf  )	r   r   r   rN   r   r   r   r   DeprecationWarning)rq   r   rX   rX   rY   test_wrong_inputs  sh    ""&&&&zTestEigh.test_wrong_inputsc                 C   s&   t tttddgtddg d S )Nri   )r   r&   r   rN   r   r  rX   rX   rY   test_nonpositive_bH  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   rL   ri  r[   T)rU   rV   )	enumerateDTYPESrZ   r   r   r?   r_   r   )rq   inddtrr   rs   rd   r   rX   rX   rY   test_value_subsetsL  s    zTestEigh.test_value_subsetsc                 C   sF   t ddgddgg}t ddgddgg}t|\}}t||\}}d S )Nr[   rL      ri   rk   )r3   r   )rq   rr   r   rs   zrX   rX   rY   test_eigh_integerY  s    zTestEigh.test_eigh_integerc                 C   s>   dd l }|jd }t|}ttt| ttt| d S )Nr   rL   )	Zscipy.sparsesparseidentityZtocscrN   Z
atleast_2dr   r   r   )rq   Zscipyrr   r   rX   rX   rY   test_eigh_of_sparse_  s
    
zTestEigh.test_eigh_of_sparsedtype_rZ  )r  Zevdrl  Zevxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nrq  )rT   rV   rj  r(    r   r   )rZ   r   r   rN   finfoeps)rq   rZ  r}  rr   rs   rd   rX   rX   rY   test_various_drivers_standardg  s    z&TestEigh.test_various_drivers_standardc                 C   s   t dgg|d\}}t|tdgdd t|tdggdd t dgg|d\}}t|tdgdd t|tdggdd d S )Nr[   rj  r  gV瞯<r   rK   r   )r   r   r3   )rq   rZ  rs   rd   rX   rX   rY   test_1x1_lworkp  s    zTestEigh.test_1x1_lworkrd  rh   )gvrm  rk  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     @rq  TrU   )rr   r   rZ  rd  r[   r(  r  rL   )rN   spacingrZ   r   r   )rq   rZ  rd  r   rr   r   rs   rd   rX   rX   rY    test_various_drivers_generalized{  s    
""z)TestEigh.test_various_drivers_generalizedc                 C   s   t d}t|ddgd}tt|d t|ddgd}tt|d t|| tg d}t|ddgd}tt|d t|tdd	g d S )
Nrk   r[   rL   rg  )r[   333333??      ?rL   gffffff?ri  r  r  )rZ   r   r   r_   r   rN   r4   r3   )rq   rr   rs   Zw2r   Zw3rX   rX   rY   test_eigvalsh_new_args  s    
zTestEigh.test_eigvalsh_new_argsmethodc                 C   s   t jtdd" |tddd W d    n1 s60    Y  t jtdd& |tdddgd	 W d    n1 sz0    Y  t jd
d* |tdtddd W d    n1 s0    Y  d S )NKeyword argument 'turbo')matchrL   rL   TZturboKeyword argument 'eigvals'r   r[   rh  zuse keyword argumentsrL   )pytestZwarnsrn  rN   r8   Zdeprecated_callrE   )rq   r  rX   rX   rY   test_deprecation_warnings  s    04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 )Nri   Tr  r  r  rm  rj  r  r   r[   rh  rg  )rZ   rN   r   r   r   rn  r   r   )rq   rr   r   r   Zw_depZv_deprs   rd   rX   rX   rY   test_deprecation_results  s    0

2
z!TestEigh.test_deprecation_resultsN)r}   r~   r   rb  ro  rp  rv  ry  r|  r  markparametrizers  r  r  r  r  r   r   r  r  rX   rX   rX   rY   r`    s$   6



r`  c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zejje ddejjdd ZdS )TestSVD_GESDDZgesddc                 C   s,   t ttdggdd t ttdggdd d S )Nr  rM  rO  )r   r`   r   r   r  rX   rX   rY   rQ    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 )Nrh   r[   rq  ri   rj   TFfull_matricesrN  ri   r   r   rN  r   rR   rE   r8   r?   rV   charr   r_   rq   rr   r  rC  svhsigmar   rX   rX   rY   ru     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 )Nrh   rj   r  r  ri   r   r  r  rX   rX   rY   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 )Nrh   rc  rk   rl   r  r  r   r   rN  r   rR   rE   r?   r8   rV   r  r   r_   r  rX   rX   rY   test_simple_underdet  s    z"TestSVD_GESDD.test_simple_underdetc                 C   s   ddgddgddgg}dD ]}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 )	Nr[   rL   rc  rk   ri   r  r  r   r  r  rX   rX   rY   test_simple_overdet  s    z!TestSVD_GESDD.test_simple_overdetc                 C   s   t jd}d}d}tdD ]}|||g|||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||
 |	 | qDq<qd S )	Nr   rq  r   ri   r  r  r[   r   )rN   rO   r   r   r   rN  r   rR   rE   r?   r8   rV   r  r_   )rq   ra   rT   mr   rr   r  rC  r  r  r  rX   rX   rY   test_random  s     zTestSVD_GESDD.test_randomc                 C   s   g dg dg dg}dD ]}t ||| 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 )Nrh   )r[   y               @ri   rj   r  r  r[   r   )r   rN  r   rQ   rR   rE   r?   r8   rV   r  r   r_   r  rX   rX   rY   ry     s    z!TestSVD_GESDD.test_simple_complexc              	   C   s   t jd}d}d}tdD ]}dD ]}|||g|||gfD ]}|d|t|j  }t||| jd\}}}	t|	 j
| t|jd  t|jd |	jd	 f|jj}
tt|D ]}|| |
||f< qt||
 |	 | qDq$qd S )
Nr   rq  r   ri   r  rK   r  r[   r   )rN   rO   r   r   listr?   r   rN  r   rQ   rR   rE   r8   rV   r  r_   )rq   ra   rT   r  r   r  rr   rC  r  r  r  rX   rX   rY   test_random_complex	  s"     z!TestSVD_GESDD.test_random_complexc                 C   sZ   t jd}g d}|D ]<}t jt jt jt jfD ]"}|j| |}t	|| j
d q0qd S )Nr   ))r   r   )r   2   )<   r   rM  )rN   rO   r   r:   r   r;   
complex128rP   rS   r   rN  )rq   ra   sizesszru  rr   rX   rX   rY   test_crash_1580  s    zTestSVD_GESDD.test_crash_1580c                 C   s   g dg dg dg}t |d| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]}|| |||f< q~t|| | | d S )Nrh   r  rj   F)r{   rN  ri   r   r  )rq   rr   rC  r  r  r  r   rX   rX   rY   r   &  s    zTestSVD_GESDD.test_check_finitec                 C   s4   t g dg dg dg dg}t|| jd d S )N)K}\UU?vWUU?r  r(  r(  r(  )r(  r  r  r  r(  r(  )r(  r(  r  r  r  r(  )r(  r(  r(  r  r  r  rM  )rN   r3   r   rN  )rq   r   rX   rX   rY   test_gh_50390  s    
zTestSVD_GESDD.test_gh_5039z64-bit LAPACK requiredreasonc                 C   s`   t dd tjddgtjd}d|d< t|dd\}}}t|d	 d
 t|d |d  d
 d S )NihB  )Zfree_mbr[   l        r   rP  F)r  r   r  r   )rH   rN   r8   r:   r   r   )rq   rW   rC  r  r  rX   rX   rY   test_large_matrixA  s    
zTestSVD_GESDD.test_large_matrixN)r}   r~   r   rN  rQ  ru   r  r  r  r  ry   r  r  r   r  r  r  skipifrI   slowr  rX   rX   rX   rY   r    s   	
r  c                   @   s   e Zd ZdZdS )TestSVD_GESVDgesvdN)r}   r~   r   rN  rX   rX   rX   rY   r  L  s   r  c                  C   sD   t jdt jd} tt t|  W d    n1 s60    Y  d S )N)i  i  r   )rN   r   r   r   r   r   )ZdfrX   rX   rY   test_svd_gesdd_nofegfaultP  s    
r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
ejjdd ZdS )TestSVDValsc                 C   s:   g gt dt dfD ]}t|}t|t d qd S )N)rL   r   )r   ri   r   )rN   r   r   r   r   rq   rr   r  rX   rX   rY   
test_emptyZ  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 )Nrh   rj   ri   r   r[   rL   r   r   r_   r  rX   rX   rY   ru   _  s    zTestSVDVals.test_simplec                 C   s@   g dg dg}t |}tt|dk t|d |d k d S )Nrh   r  rL   r   r[   r  r  rX   rX   rY   r  e  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 )Nr[   rL   rc  rk   ri   r   r  r  rX   rX   rY   r  k  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 )Nrh   )r[   rq                @rj   ri   r   r[   rL   r  r  rX   rX   rY   ry   q  s    zTestSVDVals.test_simple_complexc                 C   s@   g dg dg}t |}tt|dk t|d |d k d S )Nrh   )rc  y              @rl   rL   r   r[   r  r  rX   rX   rY   test_simple_underdet_complexw  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 )Nr[   rL   rc  rk   r  r   r  r  rX   rX   rY   test_simple_overdet_complex}  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 )	Nrh   rj   Frz   ri   r   r[   rL   r  r  rX   rX   rY   r     s    zTestSVDVals.test_check_finitec                 C   s&   t jd t jdd}t| d S )Nr   i  i
  )rN   rO   ra  rP   r   rq   rr   rX   rX   rY   test_crash_2609  s    zTestSVDVals.test_crash_2609N)r}   r~   r   r  ru   r  r  ry   r  r  r   r  r  r  r  rX   rX   rX   rY   r  X  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r[   r   r   ri   r   )r   r   r  rX   rX   rY   ru     s    zTestDiagSVD.test_simpleN)r}   r~   r   ru   rX   rX   rX   rY   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 Z6diS )jTestQRc                 C   sH   g dg dg dg}t |\}}t|j| td t|| | d S N   rL   ri   rL   rm   ri   rk   ri   rl   ri   r   r   rR   rE   rq   rr   qrrX   rX   rY   ru     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  rh   r   ri   r   r   r   rE   rq   rr   r  r  cqcr2rX   rX   rY   test_simple_left  s    
zTestQR.test_simple_leftc                 C   sp   g dg dg dg}t |\}}g d}t||\}}t|| | t|| t|td\}}t|| d S )Nr  r  r  rh   ri   r  r  rX   rX   rY   test_simple_right  s    
zTestQR.test_simple_rightc                 C   s   t g dg dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )	Nr  r  r  Tpivotingr[   r   ri   
rN   rB   r   r   r4   r   r   r   rR   rE   rq   rr   r  r  prc   q2r  rX   rX   rY   test_simple_pivoting  s    "
zTestQR.test_simple_pivotingc                 C   sV   g dg dg dg}t |dd\}}}g d}t||dd\}}}t|| | d S )Nr  r  r  Tr  rh   r   r   r   r   rq   rr   r  r  jpvtr  r  rX   rX   rY   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  rh   r  r  rX   rX   rY   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  rL   r  r  rX   rX   rY   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  r[   r   rL   r  r  rX   rX   rY   test_simple_trap_pivoting  s    "
z TestQR.test_simple_trap_pivotingc                 C   sH   ddgddgddgg}t |\}}t|j| td t|| | d S Nr  rL   rm   rk   ri   r  r  rX   rX   rY   test_simple_tall  s    zTestQR.test_simple_tallc                 C   s   t ddgddgddgg}t|dd\}}}tt|}tt |dd  |d d	 k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )
Nr  rL   rm   rk   ri   Tr  r[   r   r  r  rX   rX   rY   test_simple_tall_pivoting  s    "
z TestQR.test_simple_tall_pivotingc                 C   sd   ddgddgddgg}t |dd\}}t|j| td t|| | t|jd t|jd	 d S )
Nr  rL   rm   rk   ri   economicmoderi   rL   r  r   r   rR   rE   r   r?   r  rX   rX   rY   test_simple_tall_e  s    zTestQR.test_simple_tall_ec                 C   s   t ddgddgddgg}t|ddd\}}}tt|}tt |d	d  |d d
 k t|j| t	d t|| |d d |f  t|d d |f dd\}}t|| t|| d S )Nr  rL   rm   rk   ri   Tr  r  r  r[   r   r  r  r  rX   rX   rY   test_simple_tall_e_pivoting  s    "
z"TestQR.test_simple_tall_e_pivotingc                 C   s   ddgddgddgg}t |dd\}}ddg}t||d	\}}t|| | t|| tg d
}t||d	dd\}}t||d d  | t|tdd	\}}t|| d S )Nr  rL   rm   rk   ri   r  r  r[   r   r[   rL   r   TZoverwrite_cr   r   r   r3   rE   r  rX   rX   rY   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  rL   rm   rk   ri   r  Tr  r  r[   r   )r   r   r   r   rE   )rq   rr   r  r  r  r  r  ZkpvtrX   rX   rY   test_simple_tall_left_pivoting  s    
z%TestQR.test_simple_tall_left_pivotingc                 C   st   ddgddgddgg}t |dd\}}g d}t||\}}t|| | t|| t|td\}}t|| d S )	Nr  rL   rm   rk   ri   r  r  rh   r  rq   rr   r  r  r  cqr  rX   rX   rY   test_simple_tall_right  s    
zTestQR.test_simple_tall_rightc                 C   sz   ddgddgddgg}t |ddd\}}}g d	}t||dd
\}}}t|| | t|tddd
\}}}t|| d S )Nr  rL   rm   rk   ri   Tr  r  rh   r  r  rq   rr   r  r  r  r  r  rX   rX   rY   test_simple_tall_right_pivoting&  s    z&TestQR.test_simple_tall_right_pivotingc                 C   sZ   g dg dg}t |\}}t|j| td t|| | t|jd t|jd d S )Nr  rL   rk   r  rL   r  rL   ri   r  r  rX   rX   rY   test_simple_fat/  s    zTestQR.test_simple_fatc                 C   s   t g dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t
|jd t
|jd	 t|d d |f \}}t|| t|| d S )
Nr  r  Tr  r[   r   rL   r  r  rN   rB   r   r   r4   r   r   r   rR   rE   r   r?   r  rX   rX   rY   test_simple_fat_pivoting8  s    "
zTestQR.test_simple_fat_pivotingc                 C   s^   g dg dg}t |dd\}}t|j| td t|| | t|jd t|jd d S )Nr  rL   rm   rk   r  r  rL   r  r  r  r  rX   rX   rY   test_simple_fat_eF  s    zTestQR.test_simple_fat_ec                 C   s   t g dg dg}t|ddd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t
|jd	 t
|jd
 t|d d |f dd\}}t|| t|| d S )Nr  r  Tr  r  r[   r   rL   r  r  r  r  r  rX   rX   rY   test_simple_fat_e_pivotingO  s    "
z!TestQR.test_simple_fat_e_pivotingc                 C   sr   g dg dg}t |dd\}}ddg}t||d\}}t|| | t|| t|tdd\}}t|| d S )Nr  r  r  r  r[   rL   r   r  r  rX   rX   rY   test_simple_fat_left]  s    
zTestQR.test_simple_fat_leftc                 C   st   g dg dg}t |ddd\}}}ddg}t||dd\}}}t|| | t|tddd\}}}t|| d S )	Nr  r  r  Tr  r[   rL   r   r  r  rX   rX   rY   test_simple_fat_left_pivotingg  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  r[   rL   r  r  rX   rX   rY   test_simple_fat_rightp  s    
zTestQR.test_simple_fat_rightc                 C   st   g dg dg}t |ddd\}}}ddg}t||dd\}}}t|| | t|tddd\}}}t|| d S )	Nr  r  Tr  r  r[   rL   r  r  r  rX   rX   rY   test_simple_fat_right_pivotingz  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ri         @      @rk   rk   rL   y       @      @ri   rL   rw  ri   )r   r   rQ   rR   rE   r  rX   rX   rY   ry     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  r[   rL   r
  r   ri   r  rq   rr   r  r  r  r  rX   rX   rY   test_simple_complex_left  s    zTestQR.test_simple_complex_leftc                 C   sf   g dg dg dg}t |\}}g d}t||\}}t|| | t|td\}}t|| d S )Nr	  r  r  r  ri   r  r  rX   rX   rY   test_simple_complex_right  s    z TestQR.test_simple_complex_rightc                 C   s   ddgddgddgg}t |dd\}}d	d
g}t||d\}}t|| | t|| tg d}t||ddd\}}t||d d  | t|tdd\}}t|| d S )Nr  y       @      @rL   rm   y      @      @ri   r  r  r[          @       @r   r  Tr  r  r  rX   rX   rY   test_simple_tall_complex_left  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   rQ   r  rX   rX   rY   "test_simple_complex_left_conjugate  s
    z)TestQR.test_simple_complex_left_conjugatec                 C   sX   ddgddgddgg}t |dd\}}ddg}t||d	d
d\}}t| | | d S )Nri   r
  rk   r  rL   r  r  r[   r   Tr  r  r  rX   rX   rY   'test_simple_complex_tall_left_conjugate  s
    z.TestQR.test_simple_complex_tall_left_conjugatec                 C   sX   g dg dg dg}t |\}}tg d}t||dd\}}t||  | d S )Nr	  r  r  r  Tr  )r   rN   r3   r   r   rQ   r  rX   rX   rY   #test_simple_complex_right_conjugate  s
    z*TestQR.test_simple_complex_right_conjugatec                 C   s   t g dg dg dg}t|dd\}}}tt|}tt|dd  |d d k t| j	| t
d t|| |d d |f  t|d d |f \}}t|| t|| d S )	Nr	  r  r  Tr  r[   r   ri   )r3   r   r   r4   r   rN   r   r   rQ   rR   rE   r  rX   rX   rY   test_simple_complex_pivoting  s    "
z#TestQR.test_simple_complex_pivotingc                 C   sZ   t g dg dg dg}t|dd\}}}g d}t||dd\}}}t|| | d S )Nr	  r  r  Tr  r  r   r3   r   r   r   r  rX   rX   rY   !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  rX   rX   rY   "test_simple_complex_right_pivoting  s
    z)TestQR.test_simple_complex_right_pivotingc                 C   s^   t jd}d}tdD ]@}|||g}t|\}}t|j| t| t|| | qd S Nr   rq  rL   rN   rO   r   r   r   r   rR   rE   rq   ra   rT   r   rr   r  r  rX   rX   rY   r    s    zTestQR.test_randomc           	      C   s   t jd}d}tdD ]f}|||g}t|\}}||g}t||d\}}t|| | t|t|d\}}t|| qd S )Nr   rq  rL   r   rN   rO   r   r   r   r   r   rE   	rq   ra   rT   r   rr   r  r  r  r  rX   rX   rY   test_random_left  s    zTestQR.test_random_leftc           	      C   s   t jd}d}tdD ]b}|||g}t|\}}||g}t||\}}t|| | t|t|\}}t|| qd S r  r   	rq   ra   rT   r   rr   r  r  r  r  rX   rX   rY   test_random_right  s    zTestQR.test_random_rightc                 C   s   t jd}d}tdD ]}|||g}t|dd\}}}tt|}tt |dd  |d d k t	|j
| t| t	|| |d d |f  t|d d |f \}	}
t	||	 t	||
 qd S )Nr   rq  rL   Tr  r[   r   rN   rO   r   r   r   r   r4   r   r   r   rR   rE   rq   ra   rT   r   rr   r  r  r  rc   r  r  rX   rX   rY   test_random_pivoting  s    "
zTestQR.test_random_pivotingc                 C   sb   t jd}d}d}tdD ]@}|||g}t|\}}t|j| t| t|| | qd S Nr      r   rL   r  rq   ra   r  rT   r   rr   r  r  rX   rX   rY   test_random_tall  s    zTestQR.test_random_tallc           
      C   s   t jd}d}d}tdD ]j}|||g}t|dd\}}||g}t||d\}	}t|| |	 t|t|d\}	}t|	| qd S )Nr   r)  r   rL   r  r  r   r   )
rq   ra   r  rT   r   rr   r  r  r  r  rX   rX   rY   test_random_tall_left  s    zTestQR.test_random_tall_leftc           
      C   s   t jd}d}d}tdD ]f}|||g}t|dd\}}||g}t||\}	}t|| |	 t|t|\}	}t|	| qd S Nr   r)  r   rL   r  r  r   )
rq   ra   r  rT   r   rr   r  r  r  r  rX   rX   rY   test_random_tall_right  s    zTestQR.test_random_tall_rightc                 C   s   t jd}d}d}tdD ]}|||g}t|dd\}}}tt|}	tt |	dd  |	d d k t	|j
| t| t	|| |d d |f  t|d d |f \}
}t	||
 t	|| qd S )	Nr   r)  r   rL   Tr  r[   r   r%  rq   ra   r  rT   r   rr   r  r  r  rc   r  r  rX   rX   rY   test_random_tall_pivoting,  s    "
z TestQR.test_random_tall_pivotingc                 C   s   t jd}d}d}tdD ]d}|||g}t|dd\}}t|j| t| t|| | t|j	||f t|j	||f qd S r-  )
rN   rO   r   r   r   r   rR   rE   r   r?   r*  rX   rX   rY   test_random_tall_e<  s    zTestQR.test_random_tall_ec                 C   s   t jd}d}d}tdD ]}|||g}t|ddd\}}}tt|}	tt |	dd  |	d d	 k t	|j
| t| t	|| |d d |f  t|j||f t|j||f t|d d |f dd
\}
}t	||
 t	|| qd S )Nr   r)  r   rL   Tr  r  r[   r   r  )rN   rO   r   r   r   r   r4   r   r   r   rR   rE   r   r?   r/  rX   rX   rY   test_random_tall_e_pivotingI  s    "
z"TestQR.test_random_tall_e_pivotingc                 C   sb   t jd}d}d}tdD ]@}|||g}t|\}}t|j| t| t|| | qd S Nr   r   r)  rL   r  r*  rX   rX   rY   test_random_trap[  s    zTestQR.test_random_trapc                 C   s   t jd}d}d}tdD ]}|||g}t|dd\}}}tt|}	tt |	dd  |	d d k t	|j
| t| t	|| |d d |f  t|d d |f \}
}t	||
 t	|| qd S )	Nr   r   r)  rL   Tr  r[   r   r%  r/  rX   rX   rY   test_random_trap_pivotinge  s    "
z TestQR.test_random_trap_pivotingc                 C   st   t jd}d}tdD ]V}|||gd|||g  }t|\}}t| j| t| t|| | qd S Nr   rq  rL   rK   )	rN   rO   r   r   r   r   rQ   rR   rE   r  rX   rX   rY   r  t  s     zTestQR.test_random_complexc           	      C   s   t jd}d}tdD ]}|||gd|||g  }t|\}}||gd||g  }t||d\}}t|| | t|t|d\}}t|| qd S )Nr   rq  rL   rK   r   r   r!  rX   rX   rY   test_random_complex_left}  s     zTestQR.test_random_complex_leftc           	      C   s   t jd}d}tdD ]}|||gd|||g  }t|\}}||gd||g  }t||\}}t|| | t|t|\}}t|| qd S r6  r   r#  rX   rX   rY   test_random_complex_right  s     z TestQR.test_random_complex_rightc                 C   s   t jd}d}tdD ]}|||gd|||g  }t|dd\}}}tt|}tt |dd  |d d k t	|
 j| t| t	|| |d d |f  t|d d |f \}	}
t	||	 t	||
 qd S )	Nr   rq  rL   rK   Tr  r[   r   )rN   rO   r   r   r   r   r4   r   r   r   rQ   rR   rE   r&  rX   rX   rY   test_random_complex_pivoting  s     "
z#TestQR.test_random_complex_pivotingc                 C   sL   g dg dg dg}t |dd\}}t|j| td t|| | d S Nr  r  r  Frz   ri   r  r  rX   rX   rY   r     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  )lworkri   r  r   r;  r   rL   )r   r   r   	Exception)
rq   rr   r  r  r  r  Zq3Zr3Zq4Zr4rX   rX   rY   
test_lwork  s    





zTestQR.test_lworkN)7r}   r~   r   ru   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  ry   r  r  r  r  r  r  r  r  r  r  r"  r$  r'  r+  r,  r.  r0  r1  r2  r4  r5  r  r7  r8  r9  r   r=  rX   rX   rX   rY   r    sh   

	

			
	
				
	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 )TestRQc                 C   sH   g dg dg dg}t |\}}t||j td t|| | d S r  r   r   rR   rE   rq   rr   r  r  rX   rX   rY   ru     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   )rq   rr   r  r  r  rX   rX   rY   test_r  s    zTestRQ.test_rc                 C   s^   t jd}d}tdD ]@}|||g}t|\}}t||j t| t|| | qd S r  rN   rO   r   r   r   r   rR   rE   rq   ra   rT   r   rr   r  r  rX   rX   rY   r    s    zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  ri   r?  r@  rX   rX   rY   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  r?  r@  rX   rX   rY   r    s    zTestRQ.test_simple_tallc                 C   sB   g dg dg}t |\}}t||j td t|| | d S )Nr  r  ri   r?  r@  rX   rX   rY   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   rQ   rR   rE   r@  rX   rX   rY   ry     s    zTestRQ.test_simple_complexc                 C   sb   t jd}d}d}tdD ]@}|||g}t|\}}t||j t| t|| | qd S r(  rB  rq   ra   r  rT   r   rr   r  r  rX   rX   rY   r+    s    zTestRQ.test_random_tallc                 C   sb   t jd}d}d}tdD ]@}|||g}t|\}}t||j t| t|| | qd S r3  rB  rD  rX   rX   rY   r4    s    zTestRQ.test_random_trapc                 C   s   t jd}d}d}tdD ]d}|||g}t|dd\}}t||j t| t|| | t|j	||f t|j	||f qd S )Nr   r   r)  rL   r  r  )
rN   rO   r   r   r   r   rR   rE   r   r?   rD  rX   rX   rY   test_random_trap_economic  s    z TestRQ.test_random_trap_economicc                 C   st   t jd}d}tdD ]V}|||gd|||g  }t|\}}t|| j t| t|| | qd S r6  )	rN   rO   r   r   r   r   rQ   rR   rE   rC  rX   rX   rY   r    s     zTestRQ.test_random_complexc                 C   s   t jd}d}d}tdD ]z}|||gd|||g  }t|dd\}}t|| j t| t|| | t	|j
||f t	|j
||f qd S )Nr   r   r)  rL   rK   r  r  )rN   rO   r   r   r   r   rQ   rR   rE   r   r?   rD  rX   rX   rY   test_random_complex_economic  s     z#TestRQ.test_random_complex_economicc                 C   sL   g dg dg dg}t |dd\}}t||j td t|| | d S r:  r?  r@  rX   rX   rY   r   %  s    zTestRQ.test_check_finiteN)r}   r~   r   ru   rA  r  r  r  r  ry   r+  r4  rE  r  rF  r   rX   rX   rX   rY   r>    s   	

	r>  c                   @   s   e Zd Zdd Zdd Zejdde	d de	dd	gfd
e	dd	e	d dgfddd	e	de	d gfde	de	d dd	gfdd e	dd	e	d dgfgdd Z
dd Zdd ZdS )	TestSchurc                 C   sN   t || | j |||dd t || j tt| dd|dd d S )Nz&Schur decomposition does not match 'a'r   r   zu is not unitary)r   rQ   rR   rN   rE   r_   )rq   rr   trC  r   r   rX   rX   rY   check_schur.  s    "zTestSchur.check_schurc                 C   s   g dg dg dg}t |\}}| j|||ddd t |d\}}tttt|ohttt| | j|||ddd t||\}}| j|||ddd d S )Nr     ri   r  r  ri   rl   r   +<r   r   r  )r   rI  r   rN   r   r<   r>   r   )rq   rr   rH  rx  ZtcZzcZtc2Zzc2rX   rX   rY   ru   7  s    (zTestSchur.test_simplezsort, expected_diaglhprL         r\   rhpiucoucc                 C   s   | dkS )Nr(  rX   )r^  rX   rX   rY   <lambda>G      zTestSchur.<lambda>c                 C   sd   g dg dg dg dg}t ||d\}}}| j|||ddd tt||d	d
 td| d S )Nr   r   r  r  g      g      r  r  r         @      g      @rY  r   r        @r@   r   rM  rN  -q=r   rL   )r   rI  r   rN   r4   r   )rq   r@   Zexpected_diagrr   rH  rC  ZsdimrX   rX   rY   	test_sortA  s    zTestSchur.test_sortc                 C   s@   g dg dg dg dg}t tt|dd t tt|dd d S )NrV  rW  rX  r[  unsupportedr]  r[   )r   r   r   r  rX   rX   rY   test_sort_errorsU  s    zTestSchur.test_sort_errorsc                 C   sB   g dg dg dg}t |dd\}}t|| | j | d S )NrJ  r  rL  Frz   )r   r   rQ   rR   )rq   rr   rH  rx  rX   rX   rY   r   ]  s    zTestSchur.test_check_finiteN)r}   r~   r   rI  ru   r  r  r  rN   r=   r`  rb  r   rX   rX   rX   rY   rG  ,  s   	
 
rG  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestHessenbergc                 C   sb   g dg dg dg}g dg dg dg}t |dd\}}t|j| | | t||d	d
 d S )Nikiif     "  ir   g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@r[   calc_qrc  decimalr   r   rR   rq   rr   Zh1re   r  rX   rX   rY   ru   e  s    zTestHessenberg.test_simplec                 C   sB   g dg dg dg}t |dd\}}t| j| | | d S )Nrd  )rf  y             f@rh  )y             ;r   rj  r[   rn  )r   r   rQ   rR   rq   rr   re   r  rX   rX   rY   ry   p  s    z"TestHessenberg.test_simple_complexc                 C   sV   g dg dg dg dg dg dg dg}t |dd	\}}t|j| | | d S )
N)r[   rL   ri   rc  rk   rl   rw  )r   rL   ri   rc  rl   rw  rL   )r   rL   rL   ri   r   ri   rL   )r   r   rL   r  r   r   rL   )r   ri   r[   rL   r   r[   rL   )r   r[   rL   ri   r   r[   r   )r   r   r   r   r   r[   rL   r[   rn  rr  rt  rX   rX   rY   test_simple2w  s    zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nri   rL   )r   r   r[   rn  )rN   rE   r   r   rR   rt  rX   rX   rY   test_simple3  s    
zTestHessenberg.test_simple3c                 C   sT   t jd}d}tdD ]6}|||g}t|dd\}}t|j| | | qd S )Nr   rq  rL   r[   rn  )rN   rO   r   r   r   r   rR   rq   ra   rT   r   rr   re   r  rX   rX   rY   r    s    zTestHessenberg.test_randomc                 C   sj   t jd}d}tdD ]L}|||gd|||g  }t|dd\}}t| j| | | qd S )Nr   rq  rL   rK   r[   rn  )rN   rO   r   r   r   r   rQ   rR   rw  rX   rX   rY   r    s     z"TestHessenberg.test_random_complexc                 C   sd   g dg dg dg}g dg dg dg}t |ddd	\}}t|j| | | t||d
d d S )Nrd  re  ri  rk  rl  rm  r[   F)ro  r{   rc  rp  rr  rs  rX   rX   rY   r     s    z TestHessenberg.test_check_finitec                 C   sx   ddgddgg}t |dd\}}t|td t|| ddgdd	gg}t |dd\}}t|td t|| d S )
NrL   r[   rw  rK  rn  y       @      r   y      @      @y      (@       )r   r   rN   rE   )rq   rr   re   r  r   Zh2r  rX   rX   rY   test_2x2  s    
zTestHessenberg.test_2x2N)r}   r~   r   ru   ry   ru  rv  r  r  r   rx  rX   rX   rX   rY   rc  c  s   rc  zBuild DependenciesZblasnameversionc                   @   sj   e Zd Zejjejdko&edko&e	dk dddd Z
dd	 Zd
d Zdd Zdd Zdd Zdd ZdS )TestQZdarwinZopenblasz
0.3.21.devz8gges[float32] broken for OpenBLAS on macOS, see gh-16949r  c           	      C   s   t jd}d}|||gt}|||gt}t||\}}}}t|| |j |dd t|| |j |dd t||j t|dd t||j t|dd t	t 
t|dk d S )N90  rk   rp  r   )rN   rO   r   rS   r:   r   r   rR   rE   r   r   r4   	rq   ra   rT   rW   r   AABBQr   rX   rX   rY   test_qz_single  s    zTestQZ.test_qz_singlec           	      C   s   t jd}d}|||g}|||g}t||\}}}}t|| |j | t|| |j | t||j t| t||j t| tt t	|dk d S )Nr}  rk   r   
rN   rO   r   r   r   rR   rE   r   r   r4   r~  rX   rX   rY   test_qz_double  s    zTestQZ.test_qz_doublec           	      C   s   t jd}d}|||gd|||g  }|||gd|||g  }t||\}}}}t|| | j | t|| | j | t|| j t| t|| j t| tt 	t
|dk tt 	t
|jdk d S )Nr}  rk   rK   r   )rN   rO   r   r   r   rQ   rR   rE   r   r   r4   r   r~  rX   rX   rY   test_qz_complex  s      zTestQZ.test_qz_complexc           	      C   s  t jd}d}|||gd|||g  t}|||gd|||g  t}t||\}}}}t|| | j |dd t|| | j |dd t|| j t	|dd t|| j t	|dd t
t t|dk t
t t|jdk d S )Nr}  rk   rK   rp  r   )rN   rO   r   rS   r;   r   r   rQ   rR   rE   r   r   r4   r   r~  rX   rX   rY   test_qz_complex64  s    &&zTestQZ.test_qz_complex64c                 C   s   t jd}d}|||g}|||g}t||dd\}}}}|| | j }	t|	j| t|	jd || | j }
t|
j| t|
jd t|| j t	| t|| j t	| t
t t|dk d S )Nr}  rk   r  )outputr   )rN   rO   r   r   rQ   rR   r   r  r   rE   r   r   r4   )rq   ra   rT   rW   r   r  r  r  r   aaZbbrX   rX   rY   test_qz_double_complex  s    zTestQZ.test_qz_double_complexc                 C   s^   t g dg dg dg dg}t g dg dg dg dg}ttt||d	d
 d d S )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r  r       Er\  )皙@rY        GrY  )r  r  r  r  )r  r   g      r  )r  r   rZ  r  )r  r   rZ  r   c                 S   s   |dkS )Nr   rX   )arZaibetarX   rX   rY   rT    rU  z,TestQZ.test_qz_double_sort.<locals>.<lambda>r]  )rN   r3   r   r   r   r   r   r   rX   rX   rY   test_qz_double_sort  s    

zTestQZ.test_qz_double_sortc           	      C   s   t jd}d}|||g}|||g}t||dd\}}}}t|| |j | t|| |j | t||j t| t||j t| tt t	|dk d S )Nr}  rk   Frz   r   r  r~  rX   rX   rY   r   b  s    zTestQZ.test_check_finiteN)r}   r~   r   r  r  xfailsysplatformblas_providerblas_versionr  r  r  r  r  r  r   rX   rX   rX   rY   r{    s   

cr{  c                   @   sp   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )	TestOrdQZc           
      C   s  t g dg dg dg dg}t g dg dg dg dg}t g d	g d
g dg dg}t g dg dg dg dg}t g dg dg dg dg}t g dg dg dg dg}t d}t ddg}t ddg}	|||||	g| _|||||	g| _d S )N)y5     6y     J@     @Iy     @A     _@y      @      ?)yq=
ףpݿQy           By      /     @M@y      %      )y333333@      yC@1y      Q      )@y            )y      @@y,@fffffE@y     @@      Gy      3     @@)y      ?      y?333333?y              y              )y?333333y              y            @y333333	)y      ?        y333333@?y            y              )rK   y333333@y              y      @      )r  r  r  rP  r  )r  r  r  r\  )r  g      :@r  rY  )r[   rL   r[   )r[   ri   rc  )r[   ri   ri   )r[   ri   r  rc  )r   r  r   r   )r   r   r   r   )r   r   r  r   )r(  r   r   r   )r   r   rY  r   )r   r   r   r   )r   r  rY  rY  )r   r  r   r   rL   r   r[   )rN   r3   rE   r4   rW   r   )
clsA1B1A2B2A3B3A4B4A5rX   rX   rY   rb  p  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 )r]  )r   ).0AiBir]  rX   rY   
<listcomp>  rU  z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rN   r   ziprW   r   tuple)rq   r@   retrX   r]  rY   	qz_decomp  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   r[   rL   T)rN   rE   r?   r   rR   rQ   r   Ztrilr8   r   r	   r   r   r   r1   r3   )rq   rW   r   r@   r  r  alphar  r  r   ZIdr   Zevals_tmpZsortfunZlastsortZcursortrX   rX   rY   check  s>    *> ,"
zTestOrdQZ.checkc                 C   s@   |  |}t|| j| jD ] \}}}| j|||g|R   qd S r   )r  r  rW   r   r  )rq   r@   r  Zretir  r  rX   rX   rY   	check_all  s    
zTestOrdQZ.check_allc                 C   s   |  d d S )NrO  r  r  rX   rX   rY   test_lhp  s    zTestOrdQZ.test_lhpc                 C   s   |  d d S )NrQ  r  r  rX   rX   rY   test_rhp  s    zTestOrdQZ.test_rhpc                 C   s   |  d d S )NrR  r  r  rX   rX   rY   test_iuc  s    zTestOrdQZ.test_iucc                 C   s   |  d d S )NrS  r  r  rX   rX   rY   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rN   
empty_likeboolr   r^  rG  outZnonzerorX   rX   rY   r@     s
    
z TestOrdQZ.test_ref.<locals>.sortr  rq   r@   rX   rX   rY   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  rX   rX   rY   r@     s
    
z TestOrdQZ.test_cef.<locals>.sortr  r  rX   rX   rY   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 )Nr[   rL   rO  r]  )r   rW   r   r  )rq   r  rX   rX   rY   test_diff_input_types	  s    "zTestOrdQZ.test_diff_input_typesc                 C   s  t d}t ddg}dddgfdddgfdddgfdddgfg}t d}t d	d
g}dddgfdddgfdddgfdddgfg}t d}t ddg}ddt jgfddt jgfdt jdgfg}	t d}
t ddg}ddt jgfddt jgfdt jdgfg}t ddg}t ddg}ddt jgfddt jgfg}||||
|g}|||||g}|||	||g}t|||D ]\}}}|D ]\}}t|||d\}}}}}}|dk}|dk}t |}t j|||@ < t j|| |@ < ||  ||   || < t|| qqvd S )NrL   r   r\   rO  rP  rQ  rR  rS  y             ?y      ?      ?yٿɿ      ?      r   r[   r]  )	rN   rE   r4   r   nanr  r   r  r   )rq   r  r  Z	expected1r  r  Z	expected2r  r  Z	expected3r  r  Z	expected4r  ZB5Z	expected5rW   r   expectedr  r  Z	expectediZsortstrZexpected_eigvalsr  r  r  ZazeroZbzeror^  rX   rX   rY   test_sort_explicit		  sX    












zTestOrdQZ.test_sort_explicitN)r}   r~   r   classmethodrb  r  r  r  r  r  r  r  r  r  r  r  rX   rX   rX   rY   r  o  s   
6.r  c                   @   s$   e Zd Zdd Zejjdd ZdS )TestOrdQZWorkspaceSizec                 C   s   t jd}d}t jt jfD ]@}|||f|}|||f|}t||dd dd}qt jt jfD ]@}|||f|}|||f|}t||dd dd}qjd S )	Nr}     c                 S   s   | |k S r   rX   r  r  rX   rX   rY   rT  B	  rU  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r  )r@   r  c                 S   s   | |k S r   rX   r  rX   rX   rY   rT  H	  rU  r  )	rN   rO   r   r:   r   rS   r   r  r;   )rq   ra   r  ddtyperW   r   r  rX   rX   rY   test_decompose:	  s    z%TestOrdQZWorkspaceSize.test_decomposec                 C   sp   t jd}d}t jt jt jt jfD ]F}|||f|}|||f|}t||dd\}}}}	}
}q$d S )Nr}  r  rS  r]  )	rN   rO   r   r:   r   r  r;   rS   r   )rq   ra   r  r  rW   r   SrR   r  r  Ur   rX   rX   rY   test_decompose_oucK	  s    z)TestOrdQZWorkspaceSize.test_decompose_oucN)r}   r~   r   r  r  r  r  r  rX   rX   rX   rY   r  9	  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   )_datacopiedr[   rL   ri   c                       s   e Zd Zd fdd	ZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1Nc                    s    S r   rX   )rq   rV   rv   rW   rX   rY   	__array__a	  s    z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__)NN)r}   r~   r   r  rX   r  rX   rY   Fake1`	  s   r  c                       s   e Zd Z jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r}   r~   r   Z__array_interface__rX   r  rX   rY   Fake2d	  s   r  FTr   )Zscipy.linalg._decompr  rG   rB   tolistrv   r   repr)rq   r  r   LZM2r  r  ZF1ZF2itemstatusZarrrX   r  rY   test_datacopiedX	  s     zTestDatacopied.test_datacopiedN)r}   r~   r   r  rX   rX   rX   rY   r  V	  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   rL   r   offsetcountrV   r  r  Toverwrite_aN)	r9   rN   uint8
frombufferdatar:   r?   r	   rR   rr   rx  rX   rX   rY   test_aligned_mem_floatq	  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   rc  r   r  r  Tr  N)	r9   rN   r  r  r  r  r?   r	   rR   r  rX   rX   rY   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   rN   r  r  r  r  r?   r	   rR   r  rX   rX   rY   test_aligned_mem_complex	  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   rc  r  .r[   )r  r   r_   r]   rN   rD   r8   r   rV   itemsizer  r  r  r?   rR   )funcr  kwargsr   rr   r  rX   rX   rY   check_lapack_misaligned	  s    &r  z0Ticket #1152, triggers a segfault in rare cases.)runr  c            	      C   s  t jdtd} t d}d|_t jdt jd}t j|jddtd}d|_t d}t	|\}}t
|ftdd	ft|ftdd	ft|ftdd	ft	|ftdd	ft||f|ftdd
ft||ftdddft| ftdd	ft|ftdd	ft|ftdd	ft|ft ft|ftdd	ft| ftdd	ft|ftdd	ft|ftdd	ft|ftdd	ft|ftdd	ffD ]\}}}t||| qhd S )Nr  r   r   r  i N  rc  r  Tr  )overwrite_b)r  r  )rN   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  rX   rX   rY   test_lapack_misaligned	  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   )rF   r	   r  rX   rX   rY   test_eig	  s    zTestOverwrite.test_eigc                 C   s   t tdg t tddg d S r  )rF   r   r  rX   rX   rY   	test_eigh	  s    zTestOverwrite.test_eighc                 C   s   t tdg d S Nr  )rF   r   r  rX   rX   rY   r>  	  s    zTestOverwrite.test_eig_bandedc                 C   s   t tdg d S r  )rF   r
   r  rX   rX   rY   test_eigvals	  s    zTestOverwrite.test_eigvalsc                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   test_eigvalsh	  s    zTestOverwrite.test_eigvalshc                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   r=  	  s    z!TestOverwrite.test_eigvals_bandedc                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   test_hessenberg	  s    zTestOverwrite.test_hessenbergc                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   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 )Nrh   r  )rw  r  r  c                    s
   t  | S r   )r   )r   ZxlurX   rY   rT  	  rU  z-TestOverwrite.test_lu_solve.<locals>.<lambda>)ri   )rN   r3   r   rF   )rq   r^  rX   r   rY   test_lu_solve	  s    zTestOverwrite.test_lu_solvec                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   test_lu	  s    zTestOverwrite.test_luc                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   test_qr	  s    zTestOverwrite.test_qrc                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   test_rq	  s    zTestOverwrite.test_rqc                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   
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   rr   rX   rX   rY   rT  	  rU  z2TestOverwrite.test_schur_complex.<locals>.<lambda>r   )dtypes)rF   rN   r:   r   r  rX   rX   rY   test_schur_complex	  s    
z TestOverwrite.test_schur_complexc                 C   s    t tdg t dd dg d S )Nr   c                 S   s   t | ddS )Nr  rM  )r   r  rX   rX   rY   rT  
  rU  z(TestOverwrite.test_svd.<locals>.<lambda>)rF   r   r  rX   rX   rY   test_svd	  s    zTestOverwrite.test_svdc                 C   s   t tdg d S r  )rF   r   r  rX   rX   rY   test_svdvals
  s    zTestOverwrite.test_svdvalsN)r}   r~   r   r  r  r>  r  r  r=  r  r  r  r  r  r  r  r  r	  r
  rX   rX   rX   rY   r  	  s    r  c                 C   s   t j| dftd|}t |j}d| }t|}t|j| df t	||
 |d t|j}t|jd t	||
 |d | dkr|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 )NrL   r   r~  r[   r   rL   r[   rk   -C6?MbP?Zrcondư>rl   )rN   r   r  rS   r  r  r   r   r?   r   meanrR   rO   ra  rP   )rT   rV   skip_bigXr  r   YrX   rX   rY   _check_orth
  s$    
$
r  r  z"test only on 64-bit, else too slowc               
   C   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  rN   r   MemoryErrorAssertionError)rT   rL  rX   rX   rY   test_orth_memory_efficiency"
  s    r  c                  C   s@   t jt jt jt jg} g d}t| |D ]\}}t|| q(d S )Nr[   rL   ri   r  r   )rN   r:   r   r;   r  	itertoolsproductr  )r  r  ru  rT   rX   rX   rY   	test_orth3
  s    r  c                  C   s  t jd t jt jt jt jg} g d}t| |D ]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 )Nr[   r  rL   r   r~  r   r   r  rk   r  r  r  r  rl   )rN   rO   ra  r:   r   r;   r  r  r  r   r  r  r$   r   r?   r   rR   ZrandnrP   rS   )r  r  ru  rT   r  r  r   r  rX   rX   rY   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  ri   r   r   r   r[   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rL   r   r^  r_  gL0?gĹ-?gyv?r   r  )r   r[   r   )r   r   r[   r   r	  r  r(  )r!   r  r   r    rN   pir8   r?   r3   r   r   )HrW   r   r^  r  rr   r   rX   rX   rY   test_subspace_angles`
  sl    
  0022220

r  c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestCDF2RDFc                 C   s   t d||S )Nz...ij,...jk->...ik)rN   Zeinsum)rq   rr   r   rX   rX   rY   matmul
  s    zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r   )r   r!  )rq   rs   rd   r^  rX   rX   rY   assert_eig_valid
  s    

zTestCDF2RDF.assert_eig_validc                 C   s@   t d}t dt d }}t||\}}| ||| d S )Nr   r   )rN   r   r%   r"  rq   r  rs   rd   wrr   rX   rX   rY   test_single_array0x0real
  s    
z$TestCDF2RDF.test_single_array0x0realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nr[   rL   ri   r   rN   r3   r6   r	   r%   r"  r#  rX   rX   rY   test_single_array2x2_real
  s    z%TestCDF2RDF.test_single_array2x2_realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nr[   rL   r   r&  r#  rX   rX   rY   test_single_array2x2_complex
  s    z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S )Nrh   rj   r&  r#  rX   rX   rY   test_single_array3x3_real
  s    z%TestCDF2RDF.test_single_array3x3_realc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S Nrh   )r   rc  rk   )r   r  rc  r&  r#  rX   rX   rY   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 )Nr[   rw  iɚ;r   )	r   rN   rO   ra  rP   r6   r	   r%   r"  rq   r   r  rs   rd   r$  r   rX   rX   rY   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 )Nr[   rw  r  )r   rN   rO   rP   r6   r	   r%   r"  r,  rX   rX   rY   test_random_2d_stacked_arrays
  s
    z)TestCDF2RDF.test_random_2d_stacked_arraysc                 C   s(   t dt d }}ttt|| d S )NrX   )rL   )rN   r   r3   r   r   r%   rq   rs   rd   rX   rX   rY   test_low_dimensionality_error
  s    z)TestCDF2RDF.test_low_dimensionality_errorc                 C   s0   t dt ddd }}ttt|| d S )Nri   rl   rL   rN   r9   r   r   r   r%   r/  rX   rX   rY   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*  rN   r3   r6   r	   r   r   r%   rq   r  rs   rd   rX   rX   rY   test_swapped_v_w_error
  s    z"TestCDF2RDF.test_swapped_v_w_errorc                 C   s0   t dt ddd }}ttt|| d S )Nri   r   rc  r1  r/  rX   rX   rY   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 )Nrh   rx   )rL   rk   y      @      r2  r3  rX   rX   rY   test_not_conjugate_pairs
  s    z$TestCDF2RDF.test_not_conjugate_pairsN)r}   r~   r   r!  r"  r%  r'  r(  r)  r+  r-  r.  r0  r   r4  r5  r6  rX   rX   rX   rY   r   
  s   	r   )F)r  r  r  numpyrN   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scipy.linalg._testutilsrF   Zscipy.sparse._sputilsrG   Zscipy._lib._testutilsrH   Zscipy.linalg.blasrI   Zscipy.__config__rJ   ImportErrorr  rZ   r   ZREAL_DTYPESr  rM   rs  rf   rg   r   r   rJ  r`  r  r  r  r  r  r  r>  rG  rc  r  r  r{  r  r  r  r  r  r  machiner  r  r  r  r  r  r  r  rV   Zintpr  r  r  r  r  r   rX   rX   rX   rY   <module>   s    ,T
 }    * 9    .j7M
 : K

 8
&: