a
    CCCf                    @   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/django/DPS/env/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v0v1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|}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   r@   )rq   rW   B
atol_homogZ
rtol_homogB0msgrs   r   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  absr  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   r1  r[   r4  rd   Frz   )r   r  r7   r  r   r@   r  r#  r  r  r  r  )rq   r5  Zevec_symZ	evec_sym_r6  Z	evec_hermZ
evec_herm_r7  r8  r9  Zevec_sym_indr:  Zevec_herm_indr;  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   rA  )
r?   r  r)   r  r  r  r4   r   r   r   rB  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   rC  rD  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   rH  rX   rX   rY   test_zgbtrs  s    zTestEigBanded.test_zgbtrsN)r}   r~   r   r  r  r(  r)  r.  r/  r0  r?  r@  rF  rG  rJ  rK  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   rM    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   r1  )r   r   r"   rc   rN  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autorO  )rT  rU  rU  r   r   rP  r2  r3  rV  rW  rX  r   r[   r2  r3  rP  rL   rl   r4  rd   N)	r"   rc   rN  r   r@   rs   r   r   r_   )	rq   driverrs   Zw_indr7  r8  r;  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. rT  rO  )rV  rU  rW  rX  NrU  r   r   rY  rZ  r   r[   r[  rL   rl   r4  rd   )r   r   r#   rc   rN  r7   r   r@   rs   r#  r%  r_   )	rq   r\  rs   r%  r'  r7  r8  r;  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   r1  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  rM  rS  r]  r^  ra  rX   rX   rX   rY   rL    s   "*rL  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dee	j
dddd Ze	j
dde	j
dddd Zdd Ze	j
deegdd Zdd ZdS )TestEighc                 C   s   t 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)rg  r
   r   rh  r
   r   rg  Zwrongr\  gvxevrgvd)r\  rh  )	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   rk  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_r\  )r  Zevdrn  Zevxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nrs  )rT   rV   rl  r*    r   r   )rZ   r   r   rN   finfoeps)rq   r\  r  rr   rs   rd   rX   rX   rY   test_various_drivers_standardg  s    z&TestEigh.test_various_drivers_standardrf  rh   )gvro  rm  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     @rs  TrU   )rr   r   r\  rf  r[   r*  r  rL   )rN   spacingrZ   r   r   )rq   r\  rf  r   rr   r   rs   rd   rX   rX   rY    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 )
Nrk   r[   rL   ri  )r[   333333??      ?rL   gffffff?rk  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[   rj  zuse keyword argumentsrL   )pytestZwarnsrp  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  ro  rl  r  r   r[   rj  ri  )rZ   rN   r   r   r   rp  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   rd  rq  rr  rx  r{  r~  r  markparametrizeru  r  r  r  r   r   r  r  rX   rX   rX   rY   rb    s    6

rb  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  rO  rQ  )r   r`   r   r   r  rX   rX   rY   rS    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[   rs  ri   rj   TFfull_matricesrP  ri   r   r   rP  r   rR   rE   r8   r?   rV   charr   r_   rq   rr   r  rE  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   re  rk   rl   r  r  r   r   rP  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   re  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   rs  r   ri   r  r  r[   r   )rN   rO   r   r   r   rP  r   rR   rE   r?   r8   rV   r  r_   )rq   ra   rT   mr   rr   r  rE  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   rP  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   rs  r   ri   r  rK   r  r[   r   )rN   rO   r   r   listr?   r   rP  r   rQ   rR   rE   r8   rV   r  r_   )rq   ra   rT   r  r   r  rr   rE  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   rO  )rN   rO   r   r:   r   r;   
complex128rP   rS   r   rP  )rq   ra   sizesszrw  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{   rP  ri   r   r  )rq   rr   rE  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  rO  )rN   r3   r   rP  )rq   r   rX   rX   rY   test_gh_5039%  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   rR  F)r  r   r  r   )rH   rN   r8   r:   r   r   )rq   rW   rE  r  r  rX   rX   rY   test_large_matrix6  s    
zTestSVD_GESDD.test_large_matrixN)r}   r~   r   rP  rS  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   rP  rX   rX   rX   rY   r  A  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   )dfrX   rX   rY   test_svd_gesdd_nofegfaultE  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_emptyO  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   T  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  Z  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   re  rk   ri   r   r  r  rX   rX   rY   r  `  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[   rs                @rj   ri   r   r[   rL   r  r  rX   rX   rY   ry   f  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   )re  y              @rl   rL   r   r[   r  r  rX   rX   rY   test_simple_underdet_complexl  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   re  rk   r  r   r  r  rX   rX   rY   test_simple_overdet_complexr  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   x  s    zTestSVDVals.test_check_finitec                 C   s&   t jd t jdd}t| d S )Nr   i  i
  )rN   rO   rc  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  M  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_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  rL   rm   rk   r  r  rL   r  r  r  r  rX   rX   rY   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  r[   r   rL   r  r  r  r  r  rX   rX   rY   test_simple_fat_e_pivotingD  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_leftR  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_pivoting\  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_righte  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_pivotingo  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   ry  ri   )r   r   rQ   rR   rE   r  rX   rX   rY   ry   x  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   rs  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   rs  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   rs  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_e1  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?   r1  rX   rX   rY   test_random_tall_e_pivoting>  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_trapP  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'  r1  rX   rX   rY   test_random_trap_pivotingZ  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   rs  rL   rK   )	rN   rO   r   r   r   r   rQ   rR   rE   r!  rX   rX   rY   r  i  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   rs  rL   rK   r   r"  r#  rX   rX   rY   test_random_complex_leftr  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 r8  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   rs  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.  r0  r2  r3  r4  r6  r7  r  r9  r:  r;  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   rA  rB  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  rA  rB  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   rA  rB  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   rB  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*  rD  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 r5  rD  rF  rX   rX   rY   r6    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?   rF  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 r8  )	rN   rO   r   r   r   r   rQ   rR   rE   rE  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?   rF  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<  rA  rB  rX   rX   rY   r     s    zTestRQ.test_check_finiteN)r}   r~   r   ru   rC  r  r  r  r   ry   r-  r6  rG  r  rH  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   trE  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   rK  r   rN   r   r<   r>   r   )rq   rr   rJ  rz  ZtcZzcZtc2Zzc2rX   rX   rY   ru   ,  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><      zTestSchur.<lambda>c                 C   sd   g dg dg dg dg}t ||d\}}}| j|||ddd tt||d	d
 td| d S )Nr   r   r  r  g      g      r  r  r         @      g      @r[  r   r	        @r@   r   rO  rP  -q=r   rL   )r   rK  r   rN   r4   r   )rq   r@   Zexpected_diagrr   rJ  rE  ZsdimrX   rX   rY   	test_sort6  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 )NrX  rY  rZ  r]  unsupportedr_  r[   )r   r   r   r  rX   rX   rY   test_sort_errorsJ  s    zTestSchur.test_sort_errorsc                 C   sB   g dg dg dg}t |dd\}}t|| | j | d S )NrL  r  rN  Frz   )r   r   rQ   rR   )rq   rr   rJ  rz  rX   rX   rY   r   R  s    zTestSchur.test_check_finiteN)r}   r~   r   rK  ru   r  r  r  rN   r=   rb  rd  r   rX   rX   rX   rY   rI  !  s   	
 
rI  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_qre  decimalr   r   rR   rq   rr   Zh1re   r  rX   rX   rY   ru   Z  s    zTestHessenberg.test_simplec                 C   sB   g dg dg dg}t |dd\}}t| j| | | d S )Nrf  )rh  y             f@rj  )y             ;r   rl  r[   rp  )r   r   rQ   rR   rq   rr   re   r  rX   rX   rY   ry   e  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   re  rk   rl   ry  )r   rL   ri   re  rl   ry  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[   rp  rt  rv  rX   rX   rY   test_simple2l  s    zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nri   rL   )r   r   r[   rp  )rN   rE   r   r   rR   rv  rX   rX   rY   test_simple3w  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   rs  rL   r[   rp  )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   rs  rL   rK   r[   rp  )rN   rO   r   r   r   r   rQ   rR   ry  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 )Nrf  rg  rk  rm  rn  ro  r[   F)rq  r{   re  rr  rt  ru  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[   ry  rM  rp  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   rw  rx  r  r  r   rz  rX   rX   rX   rY   re  X  s   re  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   rr  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   imagr  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   rr  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^  )皙@r[        Gr[  )r  r  r	  r  )r  r   g      r  )r  r   r\  r  )r  r   r\  r   c                 S   s   |dkS )Nr   rX   )arZaibetarX   rX   rY   rV    rW  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   W  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  rR  r  )r  r  r  r^  )r  g      :@r  r[  )r[   rL   r[   )r[   ri   re  )r[   ri   ri   )r[   ri   r  re  )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   rL   r   r[   )rN   r3   rE   r4   rW   r   )
clsA1B1A2B2A3B3A4B4A5rX   rX   rY   rd  e  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>  rW  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 )NrQ  r  r  rX   rX   rY   test_lhp  s    zTestOrdQZ.test_lhpc                 C   s   |  d d S )NrS  r  r  rX   rX   rY   test_rhp  s    zTestOrdQZ.test_rhpc                 C   s   |  d d S )NrT  r  r  rX   rX   rY   test_iuc  s    zTestOrdQZ.test_iucc                 C   s   |  d d S )NrU  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`  rI  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   rQ  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\   rQ  rR  rS  rT  rU  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   classmethodrd  r  r  r  r  r  r  r  r  r  r  r  rX   rX   rX   rY   r  d  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   rV  7	  rW  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r  )r@   r  c                 S   s   | |k S r  rX   r  rX   rX   rY   rV  =	  rW  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  rU  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_ouc@	  s    z)TestOrdQZWorkspaceSize.test_decompose_oucN)r}   r~   r   r  r  r  r  r  rX   rX   rX   rY   r  .	  s   r  c                   @   s   e Zd Zdd ZdS )TestDatacopiedc                    s   ddl m} tddgddgg}t| | }| }G  fddd}G  fdd	d	}| }| }|d
f d
f|df|d
f|d
f|d
ffD ](\}	}
t|	}t|||	|
t|	d qd S )Nr   )_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__V	  s    z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__)NN)r}   r~   r   r  rX   r  rX   rY   Fake1U	  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   Fake2Y	  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_datacopiedM	  s     zTestDatacopied.test_datacopiedN)r}   r~   r   r  rX   rX   rX   rY   r  K	  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   rz  rX   rX   rY   test_aligned_mem_floatf	  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   re  r   r  r  Tr  N)	r9   rN   r  r  r  r  r?   r	   rR   r  rX   rX   rY   test_aligned_mems	  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   re  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  re  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  )ry  r  r  c                    s
   t  | S r  )r   )r   ZxlurX   rY   rV  	  rW  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   rV  	  rW  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  rO  )r   r	  rX   rX   rY   rV  	  rW  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   rc  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   rN  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  rw  rT   rX   rX   rY   	test_orth(
  s    r  c                  C   s  t jd t jt jt jt jg} g d}t| |D ]p\}}t j	d|f|d}t 
|j}d| }t|}t|j||d f t|| d|d t|j}t|jd t|j| d|d t jd|d  |}t|}t|j||d |d  f t|| d|d |d	kr4t jd t j|d	t jd	| }|d
t j|d t jd|  }||}t|dd}t|j||d	 f t|dd}t|j||d f q4d S )Nr[   r  rL   r   r  r   r   r  rk   r  r  r  r  rl   )rN   rO   rc  r:   r   r;   r  r  r  r   r  r  r$   r   r?   r   rR   ZrandnrP   rS   )r
  r  rw  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`  ra  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_anglesU
  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   re  rk   )r   r  re  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[   ry  iɚ;r   )	r   rN   rO   rc  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[   ry  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%   r2  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   re  r4  r2  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      @      r5  r6  rX   rX   rY   test_not_conjugate_pairs
  s    z$TestCDF2RDF.test_not_conjugate_pairsN)r}   r~   r   r$  r%  r(  r*  r+  r,  r.  r0  r1  r3  r   r7  r8  r9  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   ru  rf   rg   r   r   rL  rb  r  r  r  r  r  r  r@  rI  re  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
&: