o
    EbA                    @   s  d Z d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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: dd	l;m<Z< dd
l=m>Z> ddlm?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZU ddlVmWZWmXZX ddlYmZZZ ddl[m\Z\ ddl]m^Z^ ddl_m`Z` deafddZbejGejcgZdejHejegZfedef ZgdfddZhdd Zidd 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(ZqG d)d* d*eqZrG d+d, d,ZsG d-d. d.ZtG d/d0 d0etZuG d1d2 d2ZvG d3d4 d4ZwG d5d6 d6ZxG d7d8 d8ZyG d9d: d:ZzG d;d< d<Z{G d=d> d>Z|d?d@ Z}G dAdB dBZ~G dCdD dDZG dEdF dFZdGdH Zejje dIkdJdKdLdM ZdNdO ZdPdQ ZejjddRdSdTdU ZG dVdW dWZdgdXdYZejjejjeSejjdZk d[dKd\d] Zd^d_ Zd`da Zdbdc ZG ddde deZdS )hz* Test functions for linalg.decomp module

z~
Build linalg:
  python setup_linalg.py build
Run tests if scipy is installed:
  python -c 'import scipy;scipy.linalg.test()'
    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onesfulllinalgargsortzerosarangefloat32	complex64ravelsqrt	iscomplexshapesortsignasarrayisfinitendarrayeyedtypetriutril)seedrandom)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64Fc                 C   s   |t v rtj| | tj| | d  }|| j d }ntj| | }||j d }|r;|td|  t|  7 }||S )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprK   randconjTr>   rF   astype)nposdefrG   A r[   @/usr/lib/python3/dist-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrix0   s    
r]      c                 C   s~   t | }t |rt|jdt|j  S t |jj}t 	|\}}d||  }||9 }t j
||d || }t ||S )zCClears trailing `fuss_binary_bits` of mantissa of a floating numberrP          @)out)rS   Z
asanyarrayZiscomplexobj
clear_fussrealimagfinforG   ZnmantZfrexpZrintZldexp)arZfuss_binary_bitsxZsignificant_binary_bitsZx_mantZx_expfr[   r[   r\   ra   D   s   

ra   c                 C   sN   t | tr	| j} nt| } t |tr|j}nt|}t| |kd| | d S )Nz%dtype mismatch: "{}" (should be "{}"))
isinstancerE   rG   r   format)ZactZdesr[   r[   r\   assert_dtype_equalU   s   


rj   c                 C   s   t | tr| }t|d d }nt | tr$t| jdkr$| jd }| }ntdt|}|j	
 t| | }d|j	|  }|S )a  Return a random symmetric (Hermitian) matrix.

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

    If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                      eigenvalues are 'a'.
    rQ      r   zinput type not supported.      ?)rh   intrK   rE   lenr@   	TypeErrorr2   ZrvsrV   rU   r4   )Zdim_or_eigvdimdvhr[   r[   r\   symrandf   s   
	


rt   c                 C   s4   t | t | }}|dt|t|   }||S )NrP   )rt   rH   rI   rW   )rp   rG   Za1Za2ar[   r[   r\   _complex_symrand   s   
rv   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestEigValsc                 C   N   g dg dg dg}t |}dtd d ddtd d g}t|| d S )Nrk   rQ      rQ         	   ]   rQ   r   r
   r>   r   selfru   wexact_wr[   r[   r\   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 )Nrz   r|   rq   r   r   rQ   r   )r3   rV   copyr
   r>   r   r   r[   r[   r\   test_simple_tr   s   "zTestEigVals.test_simple_trc                 C   ry   )Nrz   rQ   r}   y      @      ?y      "@      ?y      W@      @rQ   r   r   r   r[   r[   r\   test_simple_complex   s   zTestEigVals.test_simple_complexc                 C   sR   g dg dg dg}t |dd}dtd d ddtd d g}t|| d S )	Nrz   r|   Fcheck_finiter   r   rQ   r   r   r   r[   r[   r\   test_finite   s   "zTestEigVals.test_finiteN)__name__
__module____qualname__r   r   r   r   r[   r[   r[   r\   rx      s
    rx   c                   @   sz   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	j
dddd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestEigc           	      C   s  t g dg dg dg}t|\}}dtd d ddtd d g}t dddtdd  d g}t g d	}t dddtdd  d g}|t| }|t| }|t| }t|| t||d d df t|d
   t||d d df t|d   t||d d df t|d   tdD ]}t||d d |f  || |d d |f   qt|ddd\}}tdD ]}t|j|d d |f  || |d d |f   qd S )Nrz   r|   r   r   rQ   r   rk   r{         @r   r   r   r   rk   r   rQ   leftright)r3   r	   r>   r0   r   rB   rangerV   	r   ru   r   rr   r   Zv0Zv1Zv2ir[   r[   r\   r      s&   "
"""02zTestEig.test_simplec                 C   s   t ddgddgg}t|ddd\}}}t|t ddg tdD ]}t||d d |f  || |d d |f   q!tdD ]}t| j|d d |f  ||  |d d |f   q?d S )Nrk   rQ   r         ?       @y      ?       )r3   r	   r   r   rU   rV   r   ru   r   Zvlvrr   r[   r[   r\   test_simple_complex_eig   s   0zTestEig.test_simple_complex_eigc                 C   s   t g dg dg dg}t|ddd\}}}tdD ]}t||d d |f  || |d d |f   qtdD ]}t| j|d d |f  ||  |d d |f   q9d S )Nrz   r   rk   r   r{   )r3   r	   r   r   rU   rV   r   r[   r[   r\   r      s   0zTestEig.test_simple_complexc                 C   sr   dgg}dgg}t ||dd\}}t|d d t|d dk t|d t ||\}}t|tj t|d d S )Nrk   r   TZhomogeneous_eigvals)rk   r   r   )r	   r   r   r   rS   inf)r   ru   br   r   r[   r[   r\   test_gh_3054   s   
zTestEig.test_gh_3054c                 C   s   |d urt |t |}}|}nt |}|}tj|j }d||f }t||dd\}}t||dd}|| |dd d f  }|| |dd d f  }	t|jd D ]}
t|d d |
f |	d d |
f dd|d qQ|d u rt|dd d f d t|dd d f d t|}t|}t|d d |f |d d |f dd|d	 t	t
|}tt
|D ]}
t|d d |
f ||
< qt|t|j|ddd
 |dd d f dk}|d|f |d|f  }t||\}}t||}|| }|| | }	||	 }t|jd D ] }
tt|d d |
f r!t|d d |
f ddd|d q|t| }|t| }tt|}tt|}t|| || dd|d	 t	t
|}tt
|D ]}
t|d d |
f ||
< qUt|t|j|d tt|t|t|  d S )Nz
%r
%rTr   rk   r   gvIh%<=)rtolatolerr_msggHz>)r   r   r   )r   r   r   r   )rC   rS   rF   r@   r	   r
   r   r   Zlexsortemptyrn   r0   r5   sizeallrD   r8   ra   rA   )r   rZ   BZB0msgr   r   ZwtZval1Zval2r   ZpermZpermtlengthZbeta_nonzeroZwhresZw_finZwt_finr[   r[   r\   _check_gen_eig   sl   

"
 zTestEig._check_gen_eigzSee gh-2254reasonc                 C   s   t g dg dg dg dg dg}t g dg dg dg d	g d
g}tjdd | || W d    d S 1 s>w   Y  d S )N)   "      r      )-   r   *         )'   /   1      r   )   r   r         )&   ,   r         )   r      r   r   )r   .   (   r   %   )r   r   r   r   r   )   r   r         )r   #      r   r   ignorer   )r3   rS   errstater   r   rZ   r   r[   r[   r\   test_singular  s   "zTestEig.test_singularc                 C   s   t tg d}tg dg dg df}tg dg dg df}td}td	}t||g|| gg}t||g||gg}tjd
d | || W d    d S 1 sYw   Y  d S )N)rk   r   r{   )rQ   r   r   )r   rQ   r   )r   r   rQ   )rk   r   r   )r   rk   r   r   r   r   r{   r{   r{   r   r   )r4   r3   r9   rF   rS   blockr   r   )r   MKDZZI3rZ   r   r[   r[   r\   test_falker/  s   "zTestEig.test_falkerc                 C   sj   dd }t jdd! tdD ]}||d d d\}}| || qW d    d S 1 s.w   Y  d S )Nc                 S   sf   d| d  }d|  }g dg ddd|dgddd|gg}g dg dddd| gdd|dgg}||fS )	NrQ   )rk   r   r   r   )r   rk   r   r   r   )r   r   rk   r   )r   r   r   rk   rk   r[   )omegaZc1Zc2rZ   r   r[   r[   r\   matrices?  s   


z)TestEig.test_bad_geneig.<locals>.matricesr   r   d         @)r   )rS   r   r   r   )r   r   krZ   r   r[   r[   r\   test_bad_geneig<  s   "zTestEig.test_bad_geneigc                 C   st   t d td}| |d  td}| || tddtd  }| |d  tddtd  }| || d S )N  r{   r   rP   )rJ   rt   r   rK   r   r[   r[   r\   test_make_eigvalsS  s   zTestEig.test_make_eigvalsc           	      C   sd  g dg dg dg}t |dd\}}dtd d ddtd d g}td	d	d	tdd
  d g}tg d}td	d	d	tdd
  d g}|t| }|t| }|t| }t|| t||d d df t|d   t||d d d	f t|d   t||d d df t|d   td
D ]}t||d d |f  || |d d |f   qd S )Nrz   r|   Fr   r   r   rQ   r   rk   r{   r   r   r   r   )r	   r>   r3   r0   r   rB   r   r   r[   r[   r\   test_check_finitea  s    "
"""0zTestEig.test_check_finitec                 C   s"   t ddd}ttt| dS )z:Check that passing a non-square array raises a ValueError.r~   r{   rQ   N)rS   r:   reshapeassert_raises
ValueErrorr	   )r   rZ   r[   r[   r\   test_not_square_errorr  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.rQ         "@r{   N)rF   rS   r:   r   r   r   r	   r   r[   r[   r\   test_shape_mismatchw  s   zTestEig.test_shape_mismatchN)r   r   r   r   r   r   r   r   pytestmarkxfailr   r   r   r   r   r   r   r[   r[   r[   r\   r      s    
	B
r   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestEigBandedc                 C      |    d S N)create_bandmatr   r[   r[   r\   setup_method     zTestEigBanded.setup_methodc                 C   s  d}d| _ d| _tt|dtt|d dd tt|d dd tt|d dd tt|d dd | _tt|dd	tt|d dd  d	tt|d dd  tt|d dd tt|d dd | _tt|dtt|d dd tt|d d
d tt|d dd tt|d dd | _d	tt|d tt|d dd d	tt|d d
d  tt|d dd tt|d dd | _t	| j\}}|j
}t|}|| | _|dd|f | _t	| j\}}|j
}t|}|| | _|dd|f | _| jd }t||ftd| _t||ftd| _t|D ]%}t| j|| j|| d ||f< t| j|| j|| d ||f< q%d| j  | j d }t||ftd| _t| j| jd| j  ddf< t| j D ]6}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qrt||ftd| _t| j| jd| j  ddf< t| j D ]6}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qdt| | _| jd | _dS )zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   rQ         ?rk         r   g       r   rP         r_   NrG   r         ?      ?)KLKUr4   r6   sym_matherm_matreal_matcomp_matr7   r	   rb   r8   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr9   floatbandmat_symcomplexbandmat_hermr   bandmat_realbandmat_compr:   r   bc)r   NewevargsZLDABr   r[   r[   r\   r     s   


"&0,0,zTestEigBanded.create_bandmatc                 C   P   t | jdd\}}}|ddt|f }tt|| j tt|t| j dS )zTCompare dsbev eigenvalues and eigenvectors with
           the result of linalg.eig.rk   	compute_vN)r+   r
  r8   r   rA   r  absr  r   r   evecinfoevec_r[   r[   r\   
test_dsbev     zTestEigBanded.test_dsbevc                 C   r  )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.rk   r  N)r,   r
  r8   r   rA   r  r  r  r  r[   r[   r\   test_dsbevd  r  zTestEigBanded.test_dsbevdc              	   C   l   t | j\}}t| jddd|ddd\}}}}}|ddt|f }tt|| j tt|t| j	 dS )zUCompare dsbevx eigenvalues and eigenvectors
           with the result of linalg.eig.        rk   rQ   r  r   N)
r@   r  r-   r
  r8   r   rA   r  r  r  r   r  r   r  ZnumZifailr  r  r[   r[   r\   test_dsbevx     zTestEigBanded.test_dsbevxc                 C   r  )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.rk   r  N)r.   r  r8   r   rA   r  r  r  r  r[   r[   r\   test_zhbevd  r  zTestEigBanded.test_zhbevdc              	   C   r  )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.r   rk   rQ   r!  N)
r@   r  r/   r  r8   r   rA   r  r  r  r"  r[   r[   r\   test_zhbevx  r$  zTestEigBanded.test_zhbevxc                 C   sn  t | j}|j}tt|| j t | j}|j}tt|| j d}t	d}t | jd||fd}tt|| j||d   t | jd||fd}tt|| j||d   | j| d }| j| d }t | jd||fd}	tt|	| j||d   | j| d }| j| d }t | jd||fd}
tt|
| j||d   t | jdd	}|j}tt|| j d
S )z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rQ   r~   r   selectselect_rangerk   h㈵>rr   Fr   N)
r   r
  rb   r   rA   r  r  r  rS   Zlonglong)r   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_valr[   r[   r\   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. NrQ   r~   r   r'  rk   r*  rr   Fr   )r   r
  r8   rb   r   rA   r  r  r  r  r  r  )r   r+  Zevec_symZ	evec_sym_r,  Z	evec_hermZ
evec_herm_r-  r.  r/  Zevec_sym_indr0  Zevec_herm_indr1  r2  r3  Zevec_sym_valr4  Zevec_herm_valr[   r[   r\   test_eig_banded-  st   



zTestEigBanded.test_eig_bandedc                 C      t | j\}}t| j| j| j\}}}t|d| j ddf }t| j| j D ]}|t|d| j d | |d |f |d 7 }q(t| jdd\}}	}
t	||
 dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rQ   Nrk   r   Z	permute_l)
r@   r  r'   r  r   r   r4   r   r   r   r   r   r  lu_symm_bandipivr  ur   Zp_linZl_linZu_linr[   r[   r\   test_dgbtrfg     2zTestEigBanded.test_dgbtrfc                 C   r7  )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rQ   Nrk   r   r8  )
r@   r  r)   r  r   r   r4   r   r   r   r9  r[   r[   r\   test_zgbtrfu  r>  zTestEigBanded.test_zgbtrfc                 C   P   t | j| j| j\}}}t|| j| j| j|\}}t| j| j}t	|| dS )zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r'   r  r   r   r(   r   r7   r   r  r   r   r:  r;  r  yZy_linr[   r[   r\   test_dgbtrs     zTestEigBanded.test_dgbtrsc                 C   r@  )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r)   r  r   r   r*   r  r7   r   r  r   rA  r[   r[   r\   test_zgbtrs  rD  zTestEigBanded.test_zgbtrsN)r   r   r   r   r   r  r  r#  r%  r&  r5  r6  r=  r?  rC  rE  r[   r[   r[   r\   r     s    Q*:
r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestEigTridiagonalc                 C   r   r   )create_trimatr   r[   r[   r\   r     r   zTestEigTridiagonal.setup_methodc                 C   s   d}t |d| _t |d d| _t| jt| jd t| jd | _t| j\}}|j}t|}|| | _	|dd|f | _
dS )z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r   r   rk   r   r   N)r6   rq   er4   Zfull_matr7   r	   rb   r8   r   r  )r   r  r  r  r  r[   r[   r\   rG    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   rP   r   lapack_driverfoor   r   r   r'  )r   r   r"   rq   rH  ro   r   r[   r[   r\   test_degenerate  s   
z"TestEigTridiagonal.test_degeneratec           	   
   C   s"  dD ]}t | j| j|d}tt|| j qdD ]}ttt | j| jdddd qdD ]d}t | j| jdd	t| jd
 f|d}tt|| j d}d}t | j| jd||f|d}tt|| j||d
   | j| d }| j| d }t | j| jd||f|d}tt|| j||d
   q*dS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautorI  )rN  rO  rO  r   r   rJ  r(  r)  rP  rQ  rR  r   rk   r(  r)  rJ  rQ   r~   r*  rr   N)	r"   rq   rH  r   rA   r   r   r   rn   )	r   driverr   Zw_indr-  r.  r1  r2  Zw_valr[   r[   r\   test_eigvalsh_tridiagonal  s:   z,TestEigTridiagonal.test_eigvalsh_tridiagonalc           	   	   C   s  t tt| j| jdd dD ])}t| j| j|d\}}|ddt|f }tt|| j tt	|t	| j
 qt tt| j| jdddd d	D ]}d
}t| jd }t| j| jd||f|d\}}tt|| j tt	|t	| j
 d}d}t| j| jd||f|d\}}tt|| j||d   tt	|t	| j
dd||d f  | j| d }| j| d }t| j| jd||f|d\}}tt|| j||d   tt	|t	| j
dd||d f  qFdS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. rN  rI  )rP  rO  rQ  rR  NrO  r   r   rS  rT  r   rk   rU  rQ   r~   r*  rr   )r   r   r#   rq   rH  r8   r   rA   r   r  r  rn   )	r   rV  r   r  r  r-  r.  r1  r2  r[   r[   r\   test_eigh_tridiagonal  sR   


z(TestEigTridiagonal.test_eigh_tridiagonalN)r   r   r   r   rG  rM  rW  rX  r[   r[   r[   r\   rF    s    "rF  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e	j
dde	j
dde	j
dde	j
dde	j
dde	j
ddd d! Zd"d# Zd$S )%TestEighc                 C      t d d S Nr   rJ   r   r[   r[   r\   setup_class  r   zTestEigh.setup_classc              	   C   s  t tttddg t tttddgtddg t tttddgtddg t tttddgtddgdd t tttddgtddgddgddgd t tttddgtddgddgd t tttddgtddgd	dgd t tttddgtddgddgd t tttddgtddgddgd
 t tttddgdd t tttddgd dd t tttddgtddgddd t tttddgtddgdddgdd d S )Nrk   rQ   r{      )type)subset_by_valuer
   r   r
   r   r`  ZwrongrV  gvxevrF)rV  turbogvd)rV  r
   rf  )r   r   r   rS   r5   r   r[   r[   r\   test_wrong_inputs  s:   ""

zTestEigh.test_wrong_inputsc                 C   s&   t tttddgtddg d S )Nr{   )r   r&   r   rS   r5   r   r[   r[   r\   test_nonpositive_b/  s   &zTestEigh.test_nonpositive_bc                 C   s   t tD ]R\}}td|d}t|ddgd\}}t|jd t| t|dk|dk @ s.J tdd|d}t||ddgd\}}t|jd t| t|dk|dk @ sVJ qd S )	N   r   r   rQ   rb  rk   T)rY   rG   )	enumerateDTYPESr]   r   r   r@   rn   r   )r   Zinddtru   r   rr   r   r[   r[   r\   test_value_subsets3  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 )Nrk   rQ   r^   r{   r}   )r3   r   )r   ru   r   r   zr[   r[   r\   test_eigh_integer@  s   zTestEigh.test_eigh_integerc                 C   s>   dd l }|jd }t|}ttt| ttt| d S )Nr   rQ   )	Zscipy.sparseZsparseidentityZtocscrS   Z
atleast_2dr   r   r   )r   Zscipyru   r   r[   r[   r\   test_eigh_of_sparseF  s
   
zTestEigh.test_eigh_of_sparsedtype_rV  )r  Zevdre  Zevxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nrj  rX   rG   rc  r     r   r   )r]   r   r   rS   rd   eps)r   rV  rs  ru   r   rr   r[   r[   r\   test_various_drivers_standardN  s   
z&TestEigh.test_various_drivers_standardr_  rz   )gvrg  rd  c                 C   s   t d}td}tddd}t||||d\}}|dkr/t|| |||   d|dd d S |d	krEt|| | ||  d|dd d S t|| | ||  d|dd d S )
Ng     @rj  T)rY   )ru   r   rV  r_  rk   r   rv  rQ   )rS   Zspacingr]   r   r   )r   rV  r_  r   ru   r   r   rr   r[   r[   r\    test_various_drivers_generalizedW  s   
$$$z)TestEigh.test_various_drivers_generalizedr
   )N)rQ   r^  rf  TFlower	overwrite)rg   rq   Fr   rp   )r~   c              	   C   s  |dv rdnd}t ||d}t||||d\}	}
t|
j| |	|}	t|
j | |
 j}t	||	d|d t ||d}t ||dd	}t|||||||d
\}	}
t|
j| |	|}	t|
j | |
 j}t	||	d|d t|
j | |
 j}t	|t
|jd d|d d S )NZdDgdy=-C6?rt  )overwrite_ar|  r
   r   )r   r   T)rX   rG   rY   )r  r|  overwrite_brf  r
   r   )r]   r   rj   rG   rW   r4   rV   rU   rb   r   r5   r@   )r   rp   rs  r}  r|  rf  r
   r   ru   r   ro  Zdiag_r   Zdiag1_Zdiag2_r[   r[   r\   	test_eighf  s$   



zTestEigh.test_eighc                 C   s   t d}t|ddgd}tt|d t|ddgd}tt|d t|| tg d}t|ddgd}tt|d t|td	d
g d S )Nr}   rk   rQ   ra  )Zsubset_by_index)rk   333333??      ?rQ   gffffff?rb  r  r  )r]   r   r   rn   r   rS   r4   r3   )r   ru   r   Zw2r   Zw3r[   r[   r\   test_eigvalsh_new_args  s   
zTestEigh.test_eigvalsh_new_argsN)r   r   r   r]  rh  ri  rn  rp  rr  r   r   Zparametrizerl  rx  rz  r  r  r[   r[   r[   r\   rY    s*    $rY  c                   @   |   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestLUc                 C   s  t g dg dg dg| _t g dg dg dg| _t g dg dg dg| _t g dg dg dg| _t g d	g d
g dg| _dt g d	g d
g dg | _t g dg dg dg dg| _dt g dg dg dg dg | _t	d| _
t	ddt	d  | _d S )Nrz   r|   )rQ                 @r~   r^  r}   r~   )r^      r   )rP                  @              @)y              @r  y              @)y              @y               @y              "@)rk   rQ   r{   r^  )r}   r~   r^   r  )r   r      r  rP   )r   r  r  )r   r   )r3   ru   car   cbhrectchrectvrectcvrectrK   medcmedr   r[   r[   r\   r     s"   

"


zTestLU.setup_methodc                 C   sB   t |\}}}t|| | | t |dd\}}t|| | d S )Nrk   r8  )r   r   )r   dataplr<  plr[   r[   r\   _test_common  s   zTestLU._test_commonc                 C      |  | j d S r   )r  ru   r   r[   r[   r\   r        zTestLU.test_simplec                 C   r  r   )r  r  r   r[   r[   r\   r     r  zTestLU.test_simple_complexc                 C   r  r   )r  r   r   r[   r[   r\   test_simple2  r  zTestLU.test_simple2c                 C   r  r   )r  r  r   r[   r[   r\   test_simple2_complex  r  zTestLU.test_simple2_complexc                 C   r  r   )r  r  r   r[   r[   r\   test_hrectangular  r  zTestLU.test_hrectangularc                 C   r  r   )r  r  r   r[   r[   r\   test_vrectangular  r  zTestLU.test_vrectangularc                 C   r  r   )r  r  r   r[   r[   r\   test_hrectangular_complex  r  z TestLU.test_hrectangular_complexc                 C   r  r   )r  r  r   r[   r[   r\   test_vrectangular_complex  r  z TestLU.test_vrectangular_complexc                 C      |  | j dS z:Check lu decomposition on medium size, rectangular matrix.N)r  r  r   r[   r[   r\   test_medium1     zTestLU.test_medium1c                 C   r  r  )r  r  r   r[   r[   r\   test_medium1_complex  r  zTestLU.test_medium1_complexc                 C   s,   t | jdd\}}}t|| | | j d S )NFr   )r   ru   r   )r   r  r  r<  r[   r[   r\   r        zTestLU.test_check_finitec                 C   sd   dD ]-}t jddgddgg|d}t|\}}t|t ddgddgg t|t ddg qd S )NCr~  rQ   rk   r   r   order)rS   r3   r   r   r   )r   r  rZ   LUPr[   r[   r\   test_simple_known  s   zTestLU.test_simple_knownN)r   r   r   r   r  r   r   r  r  r  r  r  r  r  r  r   r  r[   r[   r[   r\   r    s    r  c                   @   s   e Zd ZdZdd ZdS )TestLUSinglez0LU testers for single precision, real and doublec                 C   s   t |  | jt| _| jt| _| jt| _| jt| _| j	t| _	| j	t| _
| jt| _| jt| _| jt| _| jt| _d S r   )r  r   ru   rW   r;   r  r<   r   r  r  r  r  r  r  r  r   r[   r[   r\   r     s   
zTestLUSingle.setup_methodN)r   r   r   __doc__r   r[   r[   r[   r\   r    s    r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestLUSolvec                 C   rZ  r[  r\  r   r[   r[   r\   r     r   zTestLUSolve.setup_methodc                 C   sR   t d}t d}dD ]}tj||d}t||}t|}t||}t|| q
d S )Nr   r   r   r  r  )rK   rS   r3   r   r   r   r   )r   Za0r   r  ru   x1lu_ax2r[   r[   r\   test_lu  s   

zTestLUSolve.test_luc                 C   sB   t d}t d}t||}t|dd}t||dd}t|| d S )Nr  r  Fr   )rK   r   r   r   r   )r   ru   r   r  r  r  r[   r[   r\   r     s   
zTestLUSolve.test_check_finiteN)r   r   r   r   r  r   r[   r[   r[   r\   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ejje ddejjdd ZdS )TestSVD_GESDDc                 C      d| _ td d S )NZgesddr   rJ  rJ   r   r[   r[   r\   r        zTestSVD_GESDD.setup_methodc                 C   s,   t ttdggdd t ttdggdd d S )Nr   rI  rK  )r   ro   r   r   r   r[   r[   r\   rM    r  zTestSVD_GESDD.test_degeneratec                 C   s   g dg dg dg}dD ]J}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qCt|| | | qd S )Nrz   rk   rj  r{   r|   r{  full_matricesrJ  r{   r   r   rJ  r   rV   rF   r9   r@   rG   charr   rn   r   ru   r  r<  svhsigmar   r[   r[   r\   r        zTestSVD_GESDD.test_simplec                 C   s   g dg dg dg}dD ]J}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qCt|| | | qd S )Nrz   r|   r{  r  r{   r   r  r  r[   r[   r\   test_simple_singular   r  z"TestSVD_GESDD.test_simple_singularc                 C   s   g dg dg}dD ]C}t ||| jd\}}}t|j| t|jd  t|jd |jd f|jj}t	t
|D ]
}|| |||f< q9t|| | | q
d S )Nrz   r  r{  r  r   r   rJ  r   rV   rF   r@   r9   rG   r  r   rn   r  r[   r[   r\   test_simple_underdet,  s   z"TestSVD_GESDD.test_simple_underdetc                 C   s   ddgddgddgg}dD ]M}t ||| jd\}}}t|j| t|jd  t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qFt|| | | qd S )	Nrk   rQ   r^  r}   r{   r{  r  r   r  r  r[   r[   r\   test_simple_overdet7  s   z!TestSVD_GESDD.test_simple_overdetc           
      C   s   d}d}t dD ]d}t||gt||gfD ]U}dD ]P}t||| jd\}}}t|j| t|jd  t||j t|jd  t|jd |jd f|j	j
}	t t|D ]
}|| |	||f< qVt||	 | | qqqd S )Nrj  r   r{   r{  r  rk   r   )r   rK   r   rJ  r   rV   rF   r@   r9   rG   r  rn   )
r   rX   mr   ru   r  r<  r  r  r  r[   r[   r\   test_randomC  s"   zTestSVD_GESDD.test_randomc                 C   s   g dg dg dg}dD ]T}t ||| jd\}}}t| j| t|jd  t| j| t|jd  t|jd |jd f|jj	}t
t|D ]
}|| |||f< qMt|| | | qd S )Nrz   )rk   r  r{   r|   r{  r  rk   r   )r   rJ  r   rU   rV   rF   r@   r9   rG   r  r   rn   r  r[   r[   r\   r   R  s   z!TestSVD_GESDD.test_simple_complexc           
      C   s   d}d}t dD ]d}dD ]_}t||gt||gfD ]P}|dtt|j  }t||| jd\}}}t| j| t	|jd  t
|jd |jd f|jj}	t t|D ]
}|| |	||f< qVt||	 | | qqqd S )	Nrj  r   r{   r{  rP   r  rk   r   )r   rK   listr@   r   rJ  r   rU   rV   rF   r9   rG   r  rn   )
r   rX   r  r   r  ru   r<  r  r  r  r[   r[   r\   test_random_complex^  s&   z!TestSVD_GESDD.test_random_complexc                 C   s\   g d}t jd |D ]}t jt jt jt jfD ]}t jj| |}t	|| j
d qqd S )N))r   r   )r   2   )<   r   r   rI  )rS   rK   rJ   r;   float64r<   
complex128rT   rW   r   rJ  )r   sizesZszrm  ru   r[   r[   r\   test_crash_1580q  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 )Nrz   r  r|   F)r   rJ  r{   r   r  )r   ru   r<  r  r  r  r   r[   r[   r\   r   z  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  rI  )rS   r3   r   rJ  )r   r   r[   r[   r\   test_gh_5039  s   
zTestSVD_GESDD.test_gh_5039z64-bit LAPACK requiredr   c                 C   s`   t dd tjddgtjd}d|d< t|dd\}}}t|d	 d
 t|d |d  d
 d S )NihB  )Zfree_mbrk   l        r   rL  F)r  r   r   r   )rN   rS   r9   r;   r   r   )r   rZ   r<  r  r  r[   r[   r\   test_large_matrix  s   
zTestSVD_GESDD.test_large_matrixN)r   r   r   r   rM  r   r  r  r  r  r   r  r  r   r  r   r   skipifrO   slowr  r[   r[   r[   r\   r    s     	
r  c                   @      e Zd Zdd ZdS )TestSVD_GESVDc                 C   r  )Ngesvdr   r  r   r[   r[   r\   r     r  zTestSVD_GESVD.setup_methodN)r   r   r   r   r[   r[   r[   r\   r    s    r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
ejjdd ZdS )TestSVDValsc                 C   s:   g gt dt dfD ]}t|}t|t d qd S )N)rQ   r   )r   r{   r   )rS   r   r5   r   r   r   ru   r  r[   r[   r\   
test_empty  s   zTestSVDVals.test_emptyc                 C   s`   g dg dg dg}t |}tt|dk t|d |d   ko*|d k d S    d S )Nrz   r|   r{   r   rk   rQ   r   r   rn   r  r[   r[   r\   r        2zTestSVDVals.test_simplec                 C   @   g dg dg}t |}tt|dk t|d |d k d S )Nrz   r  rQ   r   rk   r  r  r[   r[   r\   r       z TestSVDVals.test_simple_underdetc                 C   F   ddgddgddgg}t |}tt|dk t|d |d k d S )Nrk   rQ   r^  r}   r{   r   r  r  r[   r[   r\   r       zTestSVDVals.test_simple_overdetc                 C   s`   g dg dg dg}t |}tt|dk t|d |d   ko*|d k d S    d S )Nrz   )rk   rj  r  r|   r{   r   rk   rQ   r  r  r[   r[   r\   r     r  zTestSVDVals.test_simple_complexc                 C   r  )Nrz   )r^  r  r~   rQ   r   rk   r  r  r[   r[   r\   test_simple_underdet_complex  r  z(TestSVDVals.test_simple_underdet_complexc                 C   r  )Nrk   rQ   r^  r}   r  r   r  r  r[   r[   r\   test_simple_overdet_complex  r  z'TestSVDVals.test_simple_overdet_complexc                 C   sd   g dg dg dg}t |dd}tt|dk t|d |d   ko,|d k d S    d S )	Nrz   r|   Fr   r{   r   rk   rQ   r  r  r[   r[   r\   r     s   2zTestSVDVals.test_check_finitec                 C   s&   t jd t jdd}t| d S )Nr   i  i
  )rS   rK   rJ   rT   r   r   ru   r[   r[   r\   test_crash_2609  s   zTestSVDVals.test_crash_2609N)r   r   r   r  r   r  r  r   r  r  r   r   r   r  r  r[   r[   r[   r\   r    s    r  c                   @   r  )TestDiagSVDc                 C   s,   t tg dddg dg dg dg d S )Nrk   r   r   r{   r   )r   r   r   r[   r[   r\   r     s   zTestDiagSVD.test_simpleN)r   r   r   r   r[   r[   r[   r\   r        r  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkS )lTestQRc                 C   rZ  r[  r\  r   r[   r[   r\   r     r   zTestQR.setup_methodc                 C   sH   g dg dg dg}t |\}}t|j| td t|| | d S Nr  rQ   r{   rQ   r   r{   r}   r{   r~   r{   r   r   rV   rF   r   ru   qrr[   r[   r\   r        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  rz   r   r{   r   r   r   rF   r   ru   r  r  cqcr2r[   r[   r\   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  rz   r{   r  r  r[   r[   r\   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pivotingrk   r   r{   
rS   rC   r   r  r4   r   r   r   rV   rF   r   ru   r  r  r  rq   q2r  r[   r[   r\   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   rz   r   r   r   r   r   ru   r  r  jpvtr  r  r[   r[   r\   test_simple_left_pivoting  
   z TestQR.test_simple_left_pivotingc                 C   sV   g dg dg dg}t |dd\}}}g d}t||dd\}}}t|| | d S )Nr  r  r  Tr   rz   r  r  r[   r[   r\   test_simple_right_pivoting  r
  z!TestQR.test_simple_right_pivotingc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  rQ   r  r  r[   r[   r\   test_simple_trap     zTestQR.test_simple_trapc                 C   s   t g dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )Nr  r  Tr   rk   r   rQ   r  r  r[   r[   r\   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  rQ   r   r}   r{   r  r  r[   r[   r\   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  rQ   r   r}   r{   Tr   rk   r   r  r  r[   r[   r\   test_simple_tall_pivoting6  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  rQ   r   r}   r{   economicmoder{   rQ   rQ   rQ   r   r   rV   rF   r   r@   r  r[   r[   r\   test_simple_tall_eB  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  rQ   r   r}   r{   Tr  r  r  rk   r   r  r  r  r[   r[   r\   test_simple_tall_e_pivotingK  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  rQ   r   r}   r{   r  r  rk   r   rk   rQ   r   TZoverwrite_cr   r   r   r3   rF   r  r[   r[   r\   test_simple_tall_leftW     
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  rQ   r   r}   r{   r  Tr  r  rk   r   )r   r   r   r   rF   )r   ru   r  r  r  r  r  Zkpvtr[   r[   r\   test_simple_tall_left_pivotingd  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  rQ   r   r}   r{   r  r  rz   r  r   ru   r  r  r  cqr  r[   r[   r\   test_simple_tall_rightn  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  rQ   r   r}   r{   Tr  r  rz   r   r  r   ru   r  r  r  r  r#  r[   r[   r\   test_simple_tall_right_pivotingx  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  rQ   r}   r  rQ   r  rQ   r{   r  r  r[   r[   r\   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   rk   r   rQ   r  r(  rS   rC   r   r  r4   r   r   r   rV   rF   r   r@   r  r[   r[   r\   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  rQ   r   r}   r  r  rQ   r  r(  r  r  r[   r[   r\   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  rk   r   rQ   r  r(  r  r*  r  r[   r[   r\   test_simple_fat_e_pivoting  s   "
z!TestQR.test_simple_fat_e_pivotingc                 C   sr   g dg dg}t |dd\}}ddg}t||d\}}t|| | t|| t|tdd\}}t|| d S )Nr  r,  r  r  rk   rQ   r   r  r  r[   r[   r\   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   rk   rQ   r   r  r  r[   r[   r\   test_simple_fat_left_pivoting     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  rk   rQ   r  r"  r[   r[   r\   test_simple_fat_right  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  rk   rQ   r   r  r%  r[   r[   r\   test_simple_fat_right_pivoting  r1  z%TestQR.test_simple_fat_right_pivotingc                 C   sL   g dg dg dg}t |\}}t| j| td t|| | d S Nr{         @      @r}   r}   rQ   y       @      @r{   rQ   r^   r{   )r   r   rU   rV   rF   r  r[   r[   r\   r        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 )Nr5  r7  r8  rk   rQ   r6  r   r{   r  r   ru   r  r  r  r  r[   r[   r\   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 )Nr5  r7  r8  r:  r{   r  r;  r[   r[   r\   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       @      @rQ   r   y      @      @r{   r  r  rk          @       @r   r  Tr  r  r  r[   r[   r\   test_simple_tall_complex_left  r  z$TestQR.test_simple_tall_complex_leftc                 C   sT   g dg dg dg}t |\}}g d}t||ddd\}}t| | | d S )Nr5  r7  r8  r:  r   T	conjugater   r   r   rU   r;  r[   r[   r\   "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 )Nr{   r6  r}   r>  rQ   r  r  rk   r   Tr@  rB  r;  r[   r[   r\   '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 )Nr5  r7  r8  r:  Tr@  )r   rS   r3   r   r   rU   r;  r[   r[   r\   #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 )	Nr5  r7  r8  Tr   rk   r   r{   )r3   r   r  r4   r   rS   r   r   rU   rV   rF   r  r[   r[   r\   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 )Nr5  r7  r8  Tr   r:  r   r3   r   r   r   r  r[   r[   r\   !test_simple_complex_left_pivoting  
   z(TestQR.test_simple_complex_left_pivotingc                 C   sZ   t g dg dg dg}t|dd\}}}g d}t||dd\}}}t|| | d S )Nr5  r7  r8  Tr   r:  rG  r  r[   r[   r\   "test_simple_complex_right_pivoting!  rI  z)TestQR.test_simple_complex_right_pivotingc                 C   sP   d}t dD ]}t||g}t|\}}t|j| t| t|| | qd S Nrj  rQ   r   rK   r   r   rV   rF   r   rX   r   ru   r  r  r[   r[   r\   r  (     zTestQR.test_randomc                 C   st   d}t dD ]1}t||g}t|\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )Nrj  rQ   r   r   rK   r   r   r   rF   r   rX   r   ru   r  r  r  r  r[   r[   r\   test_random_left0  s   
zTestQR.test_random_leftc                 C   sp   d}t dD ]/}t||g}t|\}}t|g}t||\}}t|| | t|t|\}}t|| qd S rK  rO  r   rX   r   ru   r  r  r  r#  r[   r[   r\   test_random_right;  s   
zTestQR.test_random_rightc           
      C   s   d}t dD ]U}t||g}t|dd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|d d |f \}}	t|| t||	 qd S )Nrj  rQ   Tr   rk   r   r   rK   r   r  r4   r   rS   r   r   rV   rF   
r   rX   r   ru   r  r  r  rq   r  r  r[   r[   r\   test_random_pivotingF  s   "
zTestQR.test_random_pivotingc                 C   T   d}d}t dD ]}t||g}t|\}}t|j| t| t|| | qd S N   r   rQ   rL  r   r  rX   r   ru   r  r  r[   r[   r\   test_random_tallS  s   zTestQR.test_random_tallc           	      C   s|   d}d}t dD ]3}t||g}t|dd\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )NrY  r   rQ   r  r  r   rO  )	r   r  rX   r   ru   r  r  r  r  r[   r[   r\   test_random_tall_left]  s   
zTestQR.test_random_tall_leftc           	      C   sx   d}d}t dD ]1}t||g}t|dd\}}t|g}t||\}}t|| | t|t|\}}t|| qd S NrY  r   rQ   r  r  rO  )	r   r  rX   r   ru   r  r  r  r#  r[   r[   r\   test_random_tall_rightj  s   
zTestQR.test_random_tall_rightc                 C      d}d}t dD ]U}t||g}t|dd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|d d |f \}	}
t||	 t||
 qd S )NrY  r   rQ   Tr   rk   r   rT  r   r  rX   r   ru   r  r  r  rq   r  r  r[   r[   r\   test_random_tall_pivotingw  s   "
z TestQR.test_random_tall_pivotingc                 C   sx   d}d}t dD ]1}t||g}t|dd\}}t|j| t| t|| | t|j||f t|j||f qd S r]  )r   rK   r   r   rV   rF   r   r@   rZ  r[   r[   r\   test_random_tall_e  s   zTestQR.test_random_tall_ec                 C   s   d}d}t dD ]h}t||g}t|ddd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|j||f t|j||f t|d d |f dd	\}	}
t||	 t||
 qd S )
NrY  r   rQ   Tr  r  rk   r   r  )r   rK   r   r  r4   r   rS   r   r   rV   rF   r   r@   r`  r[   r[   r\   test_random_tall_e_pivoting  s   "
z"TestQR.test_random_tall_e_pivotingc                 C   rW  Nr   rY  rQ   rL  rZ  r[   r[   r\   test_random_trap     zTestQR.test_random_trapc                 C   r_  )Nr   rY  rQ   Tr   rk   r   rT  r`  r[   r[   r\   test_random_trap_pivoting  s   "
z TestQR.test_random_trap_pivotingc                 C   sd   d}t dD ])}t||gdt||g  }t|\}}t| j| t| t|| | qd S Nrj  rQ   rP   )r   rK   r   r   rU   rV   rF   rM  r[   r[   r\   r       zTestQR.test_random_complexc                 C   s   d}t dD ]@}t||gdt||g  }t|\}}t|gdt|g  }t||d\}}t|| | t|t|d\}}t|| qd S )Nrj  rQ   rP   r   rO  rP  r[   r[   r\   test_random_complex_left  s   zTestQR.test_random_complex_leftc                 C   s   d}t dD ]>}t||gdt||g  }t|\}}t|gdt|g  }t||\}}t|| | t|t|\}}t|| qd S rh  rO  rR  r[   r[   r\   test_random_complex_right  s   z TestQR.test_random_complex_rightc           
      C   s   d}t dD ]_}t||gdt||g  }t|dd\}}}tt|}tt|dd  |d d k t|	 j
| t| t|| |d d |f  t|d d |f \}}	t|| t||	 qd S )Nrj  rQ   rP   Tr   rk   r   )r   rK   r   r  r4   r   rS   r   r   rU   rV   rF   rU  r[   r[   r\   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  Fr   r{   r  r  r[   r[   r\   r        zTestQR.test_check_finitec           
      C   s   g dg dg dg}t |d d\}}t |dd\}}t|| t|| t |dd\}}t|| t|| t |dd\}}	t|| t|	| ttt |fdd	i ttt |fdd
i d S )Nr  r  r  )lworkr{   r   r   ro  r   rQ   )r   r   r   	Exception)
r   ru   r  r  r  r  Zq3Zr3Zq4Zr4r[   r[   r\   
test_lwork  s   





zTestQR.test_lworkN)8r   r   r   r   r   r  r  r  r	  r  r  r  r  r  r  r  r  r!  r$  r&  r)  r+  r-  r.  r/  r0  r2  r3  r   r<  r=  r?  rC  rD  rE  rF  rH  rJ  r  rQ  rS  rV  r[  r\  r^  ra  rb  rc  re  rg  r  rj  rk  rl  r   rq  r[   r[   r[   r\   r    sl    

	

			
	
			
	r  c                   @   r  )TestRQc                 C   rZ  r[  r\  r   r[   r[   r\   r     r   zTestRQ.setup_methodc                 C   sH   g dg dg dg}t |\}}t||j td t|| | d S r  r   r   rV   rF   r   ru   r  r  r[   r[   r\   r   	  r  zTestRQ.test_simplec                 C   s<   g dg dg dg}t |\}}t |dd}t|| d S )Nr  r  r  r  r  )r   r   )r   ru   r  r  r  r[   r[   r\   test_r  s   zTestRQ.test_rc                 C   sP   d}t dD ]}t||g}t|\}}t||j t| t|| | qd S rK  r   rK   r   r   rV   rF   r   rX   r   ru   r  r  r[   r[   r\   r    rN  zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  r{   rs  rt  r[   r[   r\   r    r  zTestRQ.test_simple_trapc                 C   sH   ddgddgddgg}t |\}}t|j| td t|| | d S r  rs  rt  r[   r[   r\   r  #  r  zTestRQ.test_simple_tallc                 C   sB   g dg dg}t |\}}t||j td t|| | d S )Nr'  r  r{   rs  rt  r[   r[   r\   r)  )  r  zTestRQ.test_simple_fatc                 C   sL   g dg dg dg}t |\}}t|| j td t|| | d S r4  )r   r   rU   rV   rF   rt  r[   r[   r\   r   /  r9  zTestRQ.test_simple_complexc                 C   T   d}d}t dD ]}t||g}t|\}}t||j t| t|| | qd S rX  rv  r   r  rX   r   ru   r  r  r[   r[   r\   r[  5  rf  zTestRQ.test_random_tallc                 C   rx  rd  rv  ry  r[   r[   r\   re  >  rf  zTestRQ.test_random_trapc                 C   sx   d}d}t dD ]1}t||g}t|dd\}}t||j t| t|| | t|j||f t|j||f qd S )Nr   rY  rQ   r  r  )r   rK   r   r   rV   rF   r   r@   ry  r[   r[   r\   test_random_trap_economicG  s   z TestRQ.test_random_trap_economicc                 C   sd   d}t dD ])}t||gdt||g  }t|\}}t|| j t| t|| | qd S rh  )r   rK   r   r   rU   rV   rF   rw  r[   r[   r\   r  R  ri  zTestRQ.test_random_complexc                 C   s   d}d}t dD ];}t||gdt||g  }t|dd\}}t|| j t| t|| | t|j||f t|j||f qd S )Nr   rY  rQ   rP   r  r  )	r   rK   r   r   rU   rV   rF   r   r@   ry  r[   r[   r\   test_random_complex_economicZ  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 rm  rs  rt  r[   r[   r\   r   e  rn  zTestRQ.test_check_finiteN)r   r   r   r   r   ru  r  r  r  r)  r   r[  re  rz  r  r{  r   r[   r[   r[   r\   rr    s    		rr  c                   @   rw   )
	TestSchurc                 C   s   g dg dg dg}t |\}}t|| | j | t |d\}}tttt|o6ttt| t|| | j | t	||\}}t|| | j | d S )Nr  r  r{   r  r   r{   r~   r  )
r   r   rU   rV   r   rS   anyr=   r?   r   )r   ru   tro  ZtcZzcZtc2Zzc2r[   r[   r\   r   n  s   (zTestSchur.test_simplec                 C   s  g dg dg dg dg}t |dd\}}}tg dg dg d	g d
g|d tg dg dg dg dg|d td| t |dd\}}}tg dg dg dg dg|d tg dg dg dg dg|d td| t |dd\}}}tg dg dg dg dg|d tg dg d g d!g d"g|d td| t |d#d\}}}tg d$g d%g d&g d'g|d tg d(g d)g d*g dg|d td| t |d+d, d\}}}tg dg dg dg dg|d tg dg dg dg dg|d td| d S )-N      @r   r   r   g      g      r   r   r         @      g      @r  r  r         @lhprA   )gd]K?ga+e?gPkw?r   )gd]KgMbgv?r   )gHg(?gA`"?6)gQg46<R?gr?-?r{   )-g&S?gy)'g)r         gۊe"@gH.!)r   r   -?g&S¿)r   r   r   rl   rQ   rhp)=,Ԛ?gZd;O߿g	cZ?-)=,Ԛ߿gZd;O?g	cZ¿r  )K=U?gb=?gGx$(r   )y?gV/'?gGx$(?r   )r  gDlg1%@~jt,)r   rl   PsR@g"~	)r   r   r  gDl?)r   r   r   r  iuc)g6?r   gTNgK=U)g-r   gqhؿgyٿ)r   -?Y8mr  )r   r  Y8m?r  )r  r   gPsRgZӼc)r   rl   g:M
r  )r   r   r  gRI&B@)r   r   r   r  ouc)r  r  r  r   )r  r  r  r   )r  gTN?r   r  )r  gqh?r   r  )r  gRI&Bg~jt,@gZӼc@)r   r  g:M
@r  )r   r   r  r   c                 S   s   | dkS )Nr   r[   )rf   r[   r[   r\   <lambda>      z%TestSchur.test_sort.<locals>.<lambda>)r   r   r   )r   ru   r  r<  sdimr[   r[   r\   	test_sortx  s   



zTestSchur.test_sortc                 C   s@   g dg dg dg dg}t tt|dd t tt|dd d S )Nr  r  r  r  Zunsupportedr  rk   )r   r   r   r  r[   r[   r\   test_sort_errors  s   zTestSchur.test_sort_errorsc                 C   sB   g dg dg dg}t |dd\}}t|| | j | d S )Nr}  r  r~  Fr   )r   r   rU   rV   )r   ru   r  ro  r[   r[   r\   r     s   zTestSchur.test_check_finiteN)r   r   r   r   r  r  r   r[   r[   r[   r\   r|  l  s
    
Fr|  c                   @   L   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@rk   calc_qr^  Zdecimalr   r   rV   r   ru   Zh1rs   r  r[   r[   r\   r     s   zTestHessenberg.test_simplec                 C   sB   g dg dg dg}t |dd\}}t| j| | | d S )Nr  )r  y             f@r  )y             ;r   r  rk   r  )r   r   rU   rV   r   ru   rs   r  r[   r[   r\   r     s   z"TestHessenberg.test_simple_complexc                 C   sV   g dg dg dg dg dg dg dg}t |dd	\}}t|j| | | d S )
N)rk   rQ   r{   r^  r}   r~   r^   )r   rQ   r{   r^  r~   r^   rQ   )r   rQ   rQ   r{   r   r{   rQ   )r   r   rQ   r  r   r   rQ   )r   r{   rk   rQ   r   rk   rQ   )r   rk   rQ   r{   r   rk   r   )r   r   r   r   r   rk   rQ   rk   r  r  r  r[   r[   r\   r    s   zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nr{   rQ   )r   r   rk   r  )rS   rF   r   r   rV   r  r[   r[   r\   test_simple3  s   
zTestHessenberg.test_simple3c                 C   sF   d}t dD ]}t||g}t|dd\}}t|j| | | qd S )Nrj  rQ   rk   r  )r   rK   r   r   rV   r   rX   r   ru   rs   r  r[   r[   r\   r    s   zTestHessenberg.test_randomc                 C   sZ   d}t dD ]$}t||gdt||g  }t|dd\}}t| j| | | qd S )Nrj  rQ   rP   rk   r  )r   rK   r   r   rU   rV   r  r[   r[   r\   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 )Nr  r  r  r  r  r  rk   F)r  r   r^  r  r  r  r[   r[   r\   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 )
NrQ   rk   r^   r  r  y       @      r   y      @      @y      (@       )r   r   rS   rF   )r   ru   rs   r  r   Zh2r  r[   r[   r\   test_2x2
  s   
zTestHessenberg.test_2x2N)r   r   r   r   r   r  r  r  r  r   r  r[   r[   r[   r\   r    s    r  c                   @   r  )TestQZc                 C   rZ  Ni90  r\  r   r[   r[   r\   r     r   zTestQZ.setup_methodc                 C   s   d}t ||gt}t ||gt}t||\}}}}t|| |j |dd t|| |j |dd t||j t|dd t||j t|dd tt	t
|dk d S )Nr}   r  r   )rK   rW   r;   r   r   rV   rF   r   rS   r   r4   r   rX   rZ   r   AABBQr   r[   r[   r\   test_qz_single  s   zTestQZ.test_qz_singlec                 C   s   d}t ||g}t ||g}t||\}}}}t|| |j | t|| |j | t||j t| t||j t| ttt|dk d S )Nr}   r   	rK   r   r   rV   rF   r   rS   r   r4   r  r[   r[   r\   test_qz_double&  s   zTestQZ.test_qz_doublec                 C   s   d}t ||gdt ||g  }t ||gdt ||g  }t||\}}}}t|| | j | t|| | j | t|| j t| t|| j t| ttt	|dk ttt	|j
dk d S )Nr}   rP   r   )rK   r   r   rU   rV   rF   r   rS   r   r4   rc   r  r[   r[   r\   test_qz_complex1  s   zTestQZ.test_qz_complexc                 C   s   d}t ||gdt ||g  t}t ||gdt ||g  t}t||\}}}}t|| | j |dd t|| | j |dd t|| j t|dd t|| j t|dd tt	
t|dk tt	
t|jdk d S )Nr}   rP   r  r   )rK   rW   r<   r   r   rU   rV   rF   r   rS   r   r4   rc   r  r[   r[   r\   test_qz_complex64=  s   ""zTestQZ.test_qz_complex64c           
      C   s   d}t ||g}t ||g}t||dd\}}}}|| | j }t|j| t|jd || | j }	t|	j| t|	jd t|| j t| t|| j t| tt	
t|dk d S )Nr}   r  )outputr   )rK   r   rU   rV   r   rb   rc   rF   r   rS   r   r4   )
r   rX   rZ   r   r  r  r  r   aaZbbr[   r[   r\   test_qz_double_complexI  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   r[   )re   Zaibetar[   r[   r\   r  p  r  z,TestQZ.test_qz_double_sort.<locals>.<lambda>r  )	rS   r3   r   r   r   r   r   rV   r  )r   rZ   r   r  r  r  r   r  r[   r[   r\   test_qz_double_sortX  s   

zTestQZ.test_qz_double_sortc                 C   s   d}t ||g}t ||g}t||dd\}}}}t|| |j | t|| |j | t||j t| t||j t| ttt|dk d S )Nr}   Fr   r   r  r  r[   r[   r\   r     s   zTestQZ.test_check_finiteN)r   r   r   r   r  r  r  r  r  r  r   r[   r[   r[   r\   r    s    cr  c                 C   s   t | |  S r   )rS   rB   )Xr[   r[   r\   	_make_pos  s   r  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              )rP   y333333@y              y      @      )r  r  r  r  r  )r  r  r  r  )r  g      :@r  r  )rk   rQ   rk   )rk   r{   r^  )rk   r{   r{   )rk   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  rQ   r   rk   )rS   r3   rF   r4   rZ   r   )
clsA1B1A2B2A3B3A4B4A5r[   r[   r\   r]    sF   

	




zTestOrdQZ.setup_classc                    sV   t jdd  fddt| j| jD }W d    t|S 1 s"w   Y  t|S )Nraiser   c                    s   g | ]\}}t || d qS )r  )r   ).0AiBir  r[   r\   
<listcomp>	  s    z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rS   r   ziprZ   r   tuple)r   rA   retr[   r  r\   	qz_decomp	  s   
zTestOrdQZ.qz_decompc
                 C   sf  t j|j }
t||j  |
 t|	|	j  |
 t|| ||	  t|| ||	  tt |dt |j tt |dt |j t	|jd D ]}|dkr^|||d f dkr^qM||jd d k r||d |f dkrt
|||d ||d f |||d ||d f \}}|d jdk r|ddg }|||d  |||d   }|d jdk r|ddg }t|| qM|| dkr|| dkrt|||f d t|||f d qM|| dkrt|||f d qMt|||f |||f  || ||   qMt|}d}t	|jd D ]}|t || gt || g}|s-|r-J |}qd S )Nr   r   r   rk   rQ   T)rS   rF   r@   r   rV   rU   r   rI   r9   r   r	   rc   r   r   r1   r3   )r   rZ   r   rA   r  r  alphar  r  r   ZIdr   Zevals_tmpZsortfunZlastsortZcursortr[   r[   r\   check		  s@   &> ,"
zTestOrdQZ.checkc                 C   s@   |  |}t|| j| jD ]\}}}| j|||g|R   qd S r   )r  r  rZ   r   r  )r   rA   r  Zretir  r  r[   r[   r\   	check_all7	  s   
zTestOrdQZ.check_allc                 C      |  d d S )Nr  r  r   r[   r[   r\   test_lhp=	     zTestOrdQZ.test_lhpc                 C   r  )Nr  r  r   r[   r[   r\   test_rhp@	  r  zTestOrdQZ.test_rhpc                 C   r  )Nr  r  r   r[   r[   r\   test_iucC	  r  zTestOrdQZ.test_iucc                 C   r  )Nr  r  r   r[   r[   r\   test_oucF	  r  zTestOrdQZ.test_oucc                 C      dd }|  | d S )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S Nr   r   FrS   
empty_likeboolrc   rf   rB  r`   Znonzeror[   r[   r\   rA   K	  
   
z TestOrdQZ.test_ref.<locals>.sortr  r   rA   r[   r[   r\   test_refI	     zTestOrdQZ.test_refc                 C   r  )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S r  r  r  r[   r[   r\   rA   V	  r  z TestOrdQZ.test_cef.<locals>.sortr  r  r[   r[   r\   test_cefT	  r  zTestOrdQZ.test_cefc                 C   s|   t | jd | jd dd}| j| jd | jd dg|R   t | jd | jd dd}| j| jd | jd dg|R   d S )Nrk   rQ   r  r  )r   rZ   r   r  )r   r  r[   r[   r\   test_diff_input_types_	  s   "&zTestOrdQZ.test_diff_input_typesc                 C   s
  t d}t ddg}dddgfdddgfdddgfdddgfg}t d}t d	d
g}dddgfdddgfdddgfdddgfg}t d}t ddg}ddt jgfddt jgfdt jdgfg}	t d}
t ddg}ddt jgfddt jgfdt jdgfg}t ddg}t ddg}ddt jgfddt jgfg}||||
|g}|||||g}|||	||g}t|||D ]G\}}}|D ]?\}}t|||d\}}}}}}|dk}|dk}t |}t j|||@ < t j|| |@ < ||  ||   || < t|| qqd S )NrQ   r   rl   r  r  r  r  r  y             ?y      ?      ?yٿɿ      ?      r   rk   r  )	rS   rF   r4   r   nanr  r   r  r   )r   r  r  Z	expected1r  r  Z	expected2r  r  Z	expected3r  r  Z	expected4r  ZB5Z	expected5rZ   r   expectedr  r  Z	expectediZsortstrZexpected_eigvalsr  r  r  ZazeroZbzerorf   r[   r[   r\   test_sort_explicitf	  s\   












zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodr]  r  r  r  r  r  r  r  r   r  r  r  r[   r[   r[   r\   r    s    
6.r  c                   @   s,   e Zd Zdd Zdd Zejjdd ZdS )TestOrdQZWorkspaceSizec                 C   rZ  r  r\  r   r[   r[   r\   r   	  r   z#TestOrdQZWorkspaceSize.setup_methodc                 C   s   d}t jt jfD ]}t||f|}t||f|}t||dd dd}qt jt jfD ]}t||f|}t||f|}t||dd dd}q-d S )N   c                 S      | |k S r   r[   r  r  r[   r[   r\   r  	  r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>rb   )rA   r  c                 S   r  r   r[   r  r[   r[   r\   r  	  r  r  )rS   r;   r  rK   rW   r   r  r<   )r   r  ddtyperZ   r   r  r[   r[   r\   test_decompose	  s   z%TestOrdQZWorkspaceSize.test_decomposec                 C   s`   d}t jt jt jt jfD ]!}t||f|}t||f|}t||dd\}}}}}	}
qd S )Nr
  r  r  )rS   r;   r  r  r<   rK   rW   r   )r   r  r  rZ   r   SrV   r  r  UVr[   r[   r\   test_decompose_ouc	  s   z)TestOrdQZWorkspaceSize.test_decompose_oucN)	r   r   r   r   r  r   r   r  r  r[   r[   r[   r\   r	  	  s
    r	  c                   @   r  )TestDatacopiedc                    s   ddl m} tddgddgg}t| | }| }G  fddd}G  fdd	d	}| }| }|d
f d
f|df|d
f|d
f|d
ffD ]\}	}
t|	}t|||	|
t|	d qHd S )Nr   )_datacopiedrk   rQ   r{   c                       s   e Zd Z fddZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1c                    s    S r   r[   r   rZ   r[   r\   	__array__	  s   z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__N)r   r   r   r  r[   r  r[   r\   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__r[   r  r[   r\   Fake2	  s    
r  FTr   )Zscipy.linalg._decompr  rM   rC   tolistr   r   repr)r   r  r   LZM2r  r  ZF1ZF2itemstatusZarrr[   r  r\   test_datacopied	  s"   zTestDatacopied.test_datacopiedN)r   r   r   r  r[   r[   r[   r\   r  	  r  r  c                  C   F   t dtjd} tj| jddtd}d|_t|dd t|jdd d	S )
z4Check linalg works with non-aligned memory (float32)i  r   rQ   r   offsetcountrG   r  Tr  N)	r:   rS   uint8
frombufferr  r;   r@   r	   rV   ru   ro  r[   r[   r\   test_aligned_mem_float	  s
   r'  Zppc64lezcrashes on ppc64ler   c                  C   r  )
z4Check linalg works with non-aligned memory (float64)i$  r   r^  r   r   r  Tr#  N)	r:   rS   r$  r%  r  r	  r@   r	   rV   r&  r[   r[   r\   test_aligned_mem	  s
   r(  c                  C   r  )
z>Check that complex objects don't need to be completely alignediH  r   r  r   r   r  Tr#  N)	r9   rS   r$  r%  r  r  r@   r	   rV   r&  r[   r[   r\   test_aligned_mem_complex	  s
   r)  c                 C   s   t |}tt|D ]a}|d d  }t|| tjrktj|| j|| jj	 d tj
d}tj|jd|| j|| jd}|| j|_|| |d< |||< | |i | t|| jdkrk|| j||< | |i | q
d S )Nr  r   r^  r   .rk   )r  r   rn   rh   rS   rE   r9   r   rG   itemsizer$  r%  r  r@   rV   )funcr  kwargsr   ru   r  r[   r[   r\   check_lapack_misaligned	  s"   &r-  z0Ticket #1152, triggers a segfault in rare cases.)runr   c            	      C   s  t jdtd} t d}d|_t jdt jd}t j|jddtd}d|_t d}t	|\}}t
|ftdd	ft|ftdd	ft|ftdd	ft	|ftdd	ft||f|ftdd
ft||ftdddft| ftdd	ft|ftdd	ft|ftdd	ft|ft ft|ftdd	ft| ftdd	ft|ftdd	ft|ftdd	ft|ftdd	ft|ftdd	ffD ]\}}}t||| qd S )Nr   r   r   r  i N  r^  r   Tr#  )r  )r  r  )rS   rF   r	  r:   r@   r$  r%  r  r5   r   r	   dictr
   r   r   r   r   r   r   r   r   r   r   r-  )	r   Rr  r   r  Zpivr+  r  r,  r[   r[   r\   test_lapack_misaligned
  s6   

r1  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestOverwritec                 C      t tdg t tddg d S Nr   )rL   r	   r   r[   r[   r\   test_eig3
     zTestOverwrite.test_eigc                 C   r3  r4  )rL   r   r   r[   r[   r\   r  7
  r6  zTestOverwrite.test_eighc                 C      t tdg d S Nr  )rL   r   r   r[   r[   r\   r6  ;
  r  zTestOverwrite.test_eig_bandedc                 C   r7  r4  )rL   r
   r   r[   r[   r\   test_eigvals>
  r  zTestOverwrite.test_eigvalsc                 C   r7  r4  )rL   r   r   r[   r[   r\   test_eigvalshA
  r  zTestOverwrite.test_eigvalshc                 C   r7  r8  )rL   r   r   r[   r[   r\   r5  D
  r  z!TestOverwrite.test_eigvals_bandedc                 C   r7  r4  )rL   r   r   r[   r[   r\   test_hessenbergG
  r  zTestOverwrite.test_hessenbergc                 C   r7  r4  )rL   r   r   r[   r[   r\   test_lu_factorJ
  r  zTestOverwrite.test_lu_factorc                    s<   t g dg dg dg}t| t fdddg d S )Nrz   r  )r^   r  r  c                    s
   t  | S r   )r   )r   Zxlur[   r\   r  P
     
 z-TestOverwrite.test_lu_solve.<locals>.<lambda>)r{   )rS   r3   r   rL   )r   rf   r[   r=  r\   test_lu_solveM
  s   zTestOverwrite.test_lu_solvec                 C   r7  r4  )rL   r   r   r[   r[   r\   r  R
  r  zTestOverwrite.test_luc                 C   r7  r4  )rL   r   r   r[   r[   r\   test_qrU
  r  zTestOverwrite.test_qrc                 C   r7  r4  )rL   r   r   r[   r[   r\   test_rqX
  r  zTestOverwrite.test_rqc                 C   r7  r4  )rL   r   r   r[   r[   r\   
test_schur[
  r  zTestOverwrite.test_schurc                 C   s    t dd dgtjtjgd d S )Nc                 S   s
   t | dS )Nr  )r   ru   r[   r[   r\   r  _
  r>  z2TestOverwrite.test_schur_complex.<locals>.<lambda>r   )dtypes)rL   rS   r;   r  r   r[   r[   r\   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  rI  )r   rC  r[   r[   r\   r  d
  s    z(TestOverwrite.test_svd.<locals>.<lambda>)rL   r   r   r[   r[   r\   test_svdb
  s   zTestOverwrite.test_svdc                 C   r7  r4  )rL   r   r   r[   r[   r\   test_svdvalsf
  r  zTestOverwrite.test_svdvalsN)r   r   r   r5  r  r6  r9  r:  r5  r;  r<  r?  r  r@  rA  rB  rE  rF  rG  r[   r[   r[   r\   r2  2
  s"    r2  c                 C   s$  t j| dftd|}t |j}d| }t|}t|j| df t	||
 |d t|j}t|jd t	||
 |d | dkr|st jd t j| dt jd|  }|dt j| d t jd|   }||}t|d	d
}t|j| df t|dd
}t|j| df d S d S d S )NrQ   r   ru  rk   r   rQ   rk   r}   r  MbP?Zrcondư>r~   )rS   r5   r	  rW   rd   rw  r   r   r@   r   ZmeanrV   rK   rJ   rT   )rX   rG   skip_bigr  rw  tolYr[   r[   r\   _check_orthj
  s&   
$
rP  r  z"test only on 64-bit, else too slowc               
   C   s>   d} zt | tjdd W d S  ty } ztd|d }~ww )Ni T)rM  z.memory error perhaps caused by orth regression)rP  rS   r  MemoryErrorAssertionError)rX   rH  r[   r[   r\   test_orth_memory_efficiency
  s   rS  c                  C   s@   t jt jt jt jg} g d}t| |D ]	\}}t|| qd S )Nrk   rQ   r{   r   r   )rS   r;   r  r<   r  	itertoolsproductrP  )rD  r  rm  rX   r[   r[   r\   	test_orth
  s
   rW  c                  C   s  t jd t jt jt jt jg} g d}t| |D ]\}}t j	d|f|d}t 
|j}d| }t|}t|j||d f t|| d|d t|j}t|jd t|j| d|d t jd|d  |}t|}t|j||d |d  f t|| d|d |d	krt jd t j|d	t jd	| }|d
t j|d t jd|  }||}t|dd}t|j||d	 f t|dd}t|j||d f qd S )Nrk   rT  rQ   r   ru  r   rH  rI  r}   r  rJ  rK  rL  r~   )rS   rK   rJ   r;   r  r<   r  rU  rV  r5   rd   rw  r$   r   r@   r   rV   ZrandnrT   rW   )rD  r  rm  rX   r  rw  rN  rO  r[   r[   r\   test_null_space
  s8   
$
rX  c                  C   s>  t dt} | d d d df }| d d dd f }tt||tjd gd dd tt||tjd gd dd ||fD ]}tt||t|jd dd q=tg dg dg d	g d
g}d}tt|d d d df |d d dd f d |dd tt|d d dd f |d d d df d |dd d}tt|d d d df |d d dgf |dd tt|d d dgf |d d d df |dd d}tt|d d d df |d d dgf |dd tt|d d dgf |d d d df |dd d}tt|d d d df |d d dd f |dgdd t	t
t|d | t	t
t||d  t	t
t|d d | tg dg dg dg dg dg}tg dg dg dg dg dg}ttjd ddg}tt|||dd dgdgg}ddgddgg}tt||ddd tt||ddd d S )Nr  r{   r_   g+=rH  rk   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rQ   r   g-q=)r   gL0?gĹ-?gyv?r   r  )r   rk   r   )r   r   rk   r   r   r  r   )r!   r	  r   r    rS   Zpir9   r@   r3   r   r   )HrZ   r   rf   r  ru   r   r[   r[   r\   test_subspace_angles
  sl   
  0022220

rZ  c                   @   r  )TestCDF2RDFc                 C   s   t d||S )Nz...ij,...jk->...ik)rS   Zeinsum)r   ru   r   r[   r[   r\   matmul
  r  zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r   )r   r\  )r   r   rr   rf   r[   r[   r\   assert_eig_valid  s   

zTestCDF2RDF.assert_eig_validc                 C   s@   t d}t dt d}}t||\}}| ||| d S )Nr   r   )rS   r   r%   r]  r   r  r   rr   wrr   r[   r[   r\   test_single_array0x0real  s   
z$TestCDF2RDF.test_single_array0x0realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nrk   rQ   r{   r   rS   r3   r7   r	   r%   r]  r^  r[   r[   r\   test_single_array2x2_real     z%TestCDF2RDF.test_single_array2x2_realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nrk   rQ   r   ra  r^  r[   r[   r\   test_single_array2x2_complex  rc  z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S )Nrz   r|   ra  r^  r[   r[   r\   test_single_array3x3_real     z%TestCDF2RDF.test_single_array3x3_realc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S Nrz   )r   r^  r}   )r   r  r^  ra  r^  r[   r[   r\   test_single_array3x3_complex!  rf  z(TestCDF2RDF.test_single_array3x3_complexc                 C   s\   t ddD ]&}tjd tjd||}tj|\}}t||\}}| ||| qd S )Nrk   r^   iɚ;r   )	r   rS   rK   rJ   rT   r7   r	   r%   r]  r   r   r  r   rr   r_  r   r[   r[   r\   test_random_1d_stacked_arrays'  s   z)TestCDF2RDF.test_random_1d_stacked_arraysc                 C   sR   t ddD ]!}tjdd||}tj|\}}t||\}}| ||| qd S )Nrk   r^   r   )r   rS   rK   rT   r7   r	   r%   r]  ri  r[   r[   r\   test_random_2d_stacked_arrays0  s   z)TestCDF2RDF.test_random_2d_stacked_arraysc                 C   s(   t dt d}}ttt|| d S )Nr[   )rQ   )rS   r   r3   r   r   r%   r   r   rr   r[   r[   r\   test_low_dimensionality_error8  s   z)TestCDF2RDF.test_low_dimensionality_errorc                 C   s0   t dt ddd}}ttt|| d S )Nr{   r~   rQ   rS   r:   r   r   r   r%   rl  r[   r[   r\   r   <     z!TestCDF2RDF.test_not_square_errorc                 C   s>   t g dg dg dg}t j|\}}ttt|| d S rg  rS   r3   r7   r	   r   r   r%   r   r  r   rr   r[   r[   r\   test_swapped_v_w_errorA  s   z"TestCDF2RDF.test_swapped_v_w_errorc                 C   s0   t dt ddd}}ttt|| d S )Nr{   r   r^  rn  rl  r[   r[   r\   test_non_associated_errorG  ro  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 )Nrz   r   )rQ   r}   y      @      rp  rq  r[   r[   r\   test_not_conjugate_pairsL  s   z$TestCDF2RDF.test_not_conjugate_pairsN)r   r   r   r\  r]  r`  rb  rd  re  rh  rj  rk  rm  r   rr  rs  rt  r[   r[   r[   r\   r[  
  s    	r[  )r^   )F)r  Z	__usage__rU  platformZnumpyrS   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   rF   rG   rH   rI   Znumpy.randomrJ   rK   Zscipy.linalg._testutilsrL   Zscipy.sparse._sputilsrM   Zscipy._lib._testutilsrN   Zscipy.linalg.blasrO   r	  r]   r  ZREAL_DTYPESr  rR   rl  ra   rj   rt   rv   rx   r   r   rF  rY  r  r  r  r  r  r  r  r  rr  r|  r  r  r  r  r	  r  r'  r   r  machiner(  r)  r-  r   r1  r2  rP  r  Zintpr*  rS  rW  rX  rZ  r[  r[   r[   r[   r\   <module>   s     ,d
 [  o 	O 9    "h`K 1 K#

 
8&: