B
    `a                @   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e]fddZ^ejGej_gZ`ejHejagZbe`eb ZcddddZddd Zedd Zfdd ZgG dd dehZiG dd dehZjG dd  d ehZkG d!d" d"ehZlG d#d$ d$ZmG d%d& d&ehZnG d'd( d(enZoG d)d* d*ehZpG d+d, d,ehZqG d-d. d.eqZrG d/d0 d0ehZsG d1d2 d2ehZtG d3d4 d4ehZuG d5d6 d6ehZvG d7d8 d8ehZwG d9d: d:ehZxG d;d< d<ehZyd=d> ZzG d?d@ d@ehZ{G dAdB dBehZ|G dCdD dDehZ}dEdF Z~ejje dGkdHdIdJdK ZdLdM ZdNdO ZejjddPdQdRdS ZG dTdU dUehZdedVdWZejjejjeSejjdXk dYdIdZd[ Zd\d] Zd^d_ Zd`da ZG dbdc dcehZdS )fz* 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)matrixFc             C   s   |t k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 ny              ?   )	COMPLEX_DTYPESnprK   randconjTr>   rF   astype)nposdefrG   A rX   M/home/dcms/DCMS/lib/python3.7/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrix-   s     rZ      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 numbery              ?g       @)out)rP   Z
asanyarrayZiscomplexobj
clear_fussrealimagfinforG   ZnmantfrexpZrintldexp)arZfuss_binary_bitsxZsignificant_binary_bitsZx_mantZx_expfrX   rX   rY   r]   A   s    

r]   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desrX   rX   rY   assert_dtype_equalR   s    

rh   c             C   s   t | tr | }t|d d }n0t | trHt| jdkrH| jd }| }ntdt|}|j	
 t| | }d|j	|  }|S )a  Return a random symmetric (Hermitian) matrix.

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

    If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                      eigenvalues are 'a'.
    rN      r   zinput type not supported.g      ?)rf   intrK   rE   lenr@   	TypeErrorr2   ZrvsrS   rR   r4   )Zdim_or_eigvdimdvhrX   rX   rY   symrandc   s    	



rq   c             C   s4   t | t |  }}|dt|t|   }||S )Ny              ?)rq   rH   rI   rT   )rm   rG   Za1Za2arX   rX   rY   _complex_symrand}   s    rs   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestEigValsc             C   sT   dddgdddgdddgg}t |}dtd d ddtd d g}t|| d S )	Nri   rN            	   ]   r   )r
   r>   r   )selfrr   wexact_wrX   rX   rY   test_simple   s    "zTestEigVals.test_simplec             C   sj   t dddgdddgdddggdj}| }|j}t|}dtd d d	dtd d g}t|| d S )
Nri   rN   ru   rv   rw   rn   rx   ry   r   )r3   rS   copyr
   r>   r   )rz   rr   r{   r|   rX   rX   rY   test_simple_tr   s    $"zTestEigVals.test_simple_trc             C   sT   dddgdddgdddgg}t |}dtd d ddtd d g}t|| d S )	Nri   rN   ru   rv   y      @      ?y      "@      ?y      W@      @r   )r
   r>   r   )rz   rr   r{   r|   rX   rX   rY   test_simple_complex   s    zTestEigVals.test_simple_complexc             C   sX   dddgdddgdddgg}t |dd}dtd	 d d
dtd	 d g}t|| d S )Nri   rN   ru   rv   rw   F)check_finiterx   ry   r   )r
   r>   r   )rz   rr   r{   r|   rX   rX   rY   test_finite   s    "zTestEigVals.test_finiteN)__name__
__module____qualname__r}   r   r   r   rX   rX   rX   rY   rt      s   rt   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 dddgdddgdddgg}t|\}}dtd d ddtd d g}t dddtdd  d g}t d	dd
g}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   x@tdD ]4}t||d d |f  || |d d |f   q6W t|ddd\}}xBtdD ]6}t|j|d d |f  || |d d |f   qW d S )Nri   rN   ru   rv   rw   rx   ry   r   g      @)r   r   )r   ri   )r   rN   )leftright)r3   r	   r>   r0   r   rB   rangerS   )	rz   rr   r{   ro   r|   v0v1v2irX   rX   rY   r}      s$     "
"""4zTestEig.test_simplec             C   s   t ddgddgg}t|ddd\}}}t|t ddg x>tdD ]2}t||d d |f  || |d d |f   qDW xHtdD ]<}t| j|d d |f  ||  |d d |f   qW d S )Nri   rN   )r   r   y      ?       @y      ?       )r3   r	   r   r   rR   rS   )rz   rr   r{   vlvrr   rX   rX   rY   test_simple_complex_eig   s    2zTestEig.test_simple_complex_eigc             C   s   t dddgdddgdddgg}t|ddd\}}}x>tdD ]2}t||d d |f  || |d d |f   q>W xHtdD ]<}t| j|d d |f  ||  |d d |f   q~W d S )Nri   rN   ru   rv   y      @      ?)r   r   )r3   r	   r   r   rR   rS   )rz   rr   r{   r   r   r   rX   rX   rY   r      s     2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 )Nri   r   T)homogeneous_eigvals)ri   r   )r   r   )r	   r   r   r   rP   inf)rz   rr   br{   r   rX   rX   rY   test_gh_3054   s    
zTestEig.test_gh_3054c             C   s  |d k	r t |t | }}|}nt |}|}tj|j }d||f }t||dd\}}t||dd}|| |dd d f  }|| |dd d f  }	x@t|jd D ].}
t|d d |
f |	d d |
f dd|d qW |d k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
|}x.tt
|D ]}
t|d d |
f ||
< qfW t|t|j|ddd
 |dd d f dk}|d|f |d|f  }t||\}}t||}|| }|| | }	||	 }xRt|jd D ]@}
tt|d d |
f rt|d d |
f ddd|d qW |t| }|t| }tt|}tt|}t|| || dd|d	 t	t
|}x.tt
|D ]}
t|d d |
f ||
< qW t|t|j|d tt|t|t|  d S )Nz
%r
%rT)r   ri   r   gvIh%<=)rtolatolerr_msggHz>)r   r   r   )r   r   r   )r   )rC   rP   rF   r@   r	   r
   r   r   Zlexsortemptyrk   r0   r5   sizeallrD   r8   r]   rA   )rz   rW   BB0msgr{   r   wtZval1Zval2r   ZpermZpermtlengthZbeta_nonzeroZwhresZw_finZwt_finrX   rX   rY   _check_gen_eig   s`    


"

zTestEig._check_gen_eigzSee gh-2254)reasonc          
   C   s   t dddddgdddddgd	d
dddgdddddgdddddgg}t dddddgdddddgdddddgdddddgdddddgg}tjdd | || W d Q R X d S ) N   "         -   *         '   /   1               &   ,               .   (   %            #      ignore)r   )r3   rP   errstater   )rz   rW   r   rX   rX   rY   test_singular  s    zTestEig.test_singularc          	   C   s   t tdddg}tdddgdddgdddgf}tdddgdddgdddgf}td}td}t||g|| gg}t||g||gg}tjdd | || W d Q R X d S )	Nri   r   ru   rN   r   )ru   ru   r   )r   )r4   r3   r9   rF   rP   blockr   r   )rz   MKDZZI3rW   r   rX   rX   rY   test_falker,  s      zTestEig.test_falkerc          	   C   sX   dd }t jdd: x2tdD ]&}||d d d\}}| || q W W d Q R X d S )Nc             S   sv   d| d  }d|  }ddddgddddgdd|dgddd|gg}ddddgddddgddd| gdd|dgg}||fS )NirN   ri   r   rX   )omegaZc1c2rW   r   rX   rX   rY   matrices<  s    




z)TestEig.test_bad_geneig.<locals>.matricesr   )r   d   g      @)r   )rP   r   r   r   )rz   r   krW   r   rX   rX   rY   test_bad_geneig9  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 )Ni  ru   )ru   ru   y              ?)rJ   rq   r   rK   )rz   rW   r   rX   rX   rY   test_make_eigvalsP  s    zTestEig.test_make_eigvalsc       	      C   sr  dddgdddgdddgg}t |dd\}}dtd	 d d
dtd	 d g}tdddtd	d  d g}tdd
dg}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   x@tdD ]4}t||d d |f  || |d d |f   q6W d S )Nri   rN   ru   rv   rw   F)r   rx   ry   r   g      @r   )r   r   )r   ri   )r   rN   )r	   r>   r3   r0   r   rB   r   )	rz   rr   r{   ro   r|   r   r   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.rw   ru   rN   N)rP   r:   reshapeassert_raises
ValueErrorr	   )rz   rW   rX   rX   rY   test_not_square_erroro  s    zTestEig.test_not_square_errorc             C   s:   t d}tddd}ttt|| ttt|| dS )zOCheck that passing arrays of with different shapes
        raises a ValueError.rN   g      "@ru   N)rF   rP   r:   r   r   r   r	   )rz   rW   r   rX   rX   rY   test_shape_mismatcht  s    zTestEig.test_shape_mismatchN)r   r   r   r}   r   r   r   r   pytestmarkxfailr   r   r   r   r   r   r   rX   rX   rX   rY   r      s   
	Br   c               @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestEigBandedc             C   s   |    d S )N)create_bandmat)rz   rX   rX   rY   setup_method~  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| _xVt|D ]J}t| j|| j|| d ||f< t| j|| j|| d ||f< qLW d| j  | j d }t||ftd| _t| j| jd| j  ddf< xzt| j D ]l}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qW t||ftd| _t| j| jd| j  ddf< xzt| j D ]l}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qW dt| | _| jd | _dS )zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   rN   g      ?ri   g      r   g       r   y              ?g      g       @N)rG   r   y      ?      ?)KLKUr4   r6   sym_matherm_matreal_matcomp_matr7   r	   r^   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)rz   NewevargsZLDABr   rX   rX   rY   r     sL    `h`h


"(0606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.ri   )	compute_vN)r+   r   r8   r   rA   r   absr   )rz   r{   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.ri   )r   N)r,   r   r8   r   rA   r   r   r   )rz   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.g        ri   rN   )r   r   N)
r@   r   r-   r   r8   r   rA   r   r   r   )rz   r   r{   r   num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.ri   )r   N)r.   r   r8   r   rA   r   r   r   )rz   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.g        ri   rN   )r   r   N)
r@   r   r/   r   r8   r   rA   r   r   r   )rz   r   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.rN   rw   r   )selectselect_rangeri   gh㈵>ro   F)r   N)
r   r   r^   r   rA   r   r   r   rP   Zlonglong)rz   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   s@    


z!TestEigBanded.test_eigvals_bandedc             C   s  t | j\}}|ddt|jf }tt|| j tt|t| j t | j	\}}|ddt|jf }tt|| j
 tt|t| j d}d}t | jd||fd\}	}
tt|	| j||d   tt|
t| jdd||d f  t | j	d||fd\}}tt|| j
||d   tt|t| jdd||d f  | j| d }| j| d }t | jd||fd\}}tt|| j||d   tt|t| jdd||d f  | j
| d }| j
| d }t | j	d||fd\}}tt|| j
||d   tt|t| jdd||d f  t | jd	d
\}}|ddt|jf }tt|| j tt|t| j dS )zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. NrN   rw   r   )r   r  ri   gh㈵>ro   F)r   )r   r   r8   r^   r   rA   r   r   r   r   r   r   )rz   r  Zevec_symZ	evec_sym_r  Z	evec_hermZ
evec_herm_r  r  r  Zevec_sym_indr  Zevec_herm_indr  r	  r
  Zevec_sym_valr  Zevec_herm_valrX   rX   rY   test_eig_banded*  s\        zTestEigBanded.test_eig_bandedc             C   s   t | j\}}t| j| j| j\}}}t|d| j ddf }xHt| j| j D ]4}|t|d| j d | |d |f |d 7 }qRW t| jdd\}}	}
t	||
 dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rN   Nri   r   )	permute_l)
r@   r   r'   r   r   r   r4   r   r   r   )rz   r   r   lu_symm_bandipivr   ur   p_linl_linu_linrX   rX   rY   test_dgbtrfd  s    4zTestEigBanded.test_dgbtrfc             C   s   t | j\}}t| j| j| j\}}}t|d| j ddf }xHt| j| j D ]4}|t|d| j d | |d |f |d 7 }qRW t| jdd\}}	}
t	||
 dS )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rN   Nri   r   )r  )
r@   r   r)   r   r   r   r4   r   r   r   )rz   r   r   r  r  r   r  r   r  r  r  rX   rX   rY   test_zgbtrfr  s    4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   r7   r   r   r   )rz   r  r  r   yy_linrX   rX   rY   test_dgbtrs  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   r7   r   r   r   )rz   r  r  r   r  r  rX   rX   rY   test_zgbtrs  s    zTestEigBanded.test_zgbtrsN)r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  rX   rX   rX   rY   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   s   |    d S )N)create_trimat)rz   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   g      ?ri   g      r   N)r6   rn   er4   Zfull_matr7   r	   r^   r8   r{   r   )rz   r   r   r   r   rX   rX   rY   r    s    $
z TestEigTridiagonal.create_trimatc             C   sx   t tt| j| jdd  t tt| j| jd  t tt| j| jdd t tt| j| jdd t tt| j| jddd	 dS )
zTest error conditions.Nr   y              ?g      ?)lapack_driverfoor   )r   r   )r   r  )r   r   r"   rn   r  rl   )rz   rX   rX   rY   test_degenerate  s    z"TestEigTridiagonal.test_degeneratec       	   
   C   s.  x.dD ]&}t | j| j|d}tt|| j qW x&dD ]}ttt | j| jdddd q6W xd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^W dS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrauto)r  )r!  r"  r"  r   )r   ri   )r  r   r  )r#  r$  r%  r   ri   )r   r  r  rN   rw   gh㈵>ro   N)	r"   rn   r  r   rA   r{   r   r   rk   )	rz   driverr{   Zw_indr  r  r  r	  Zw_valrX   rX   rY   test_eigvalsh_tridiagonal  s0    


z,TestEigTridiagonal.test_eigvalsh_tridiagonalc       	   	   C   s  t tt| j| jdd xZdD ]R}t| j| j|d\}}|ddt|f }tt|| j tt	|t	| j
 qW t tt| j| jdddd xJd	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  qW dS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r!  )r  )r#  r"  r$  r%  Nr"  r   )r   ri   )r  r   r  )r#  r$  r%  r   ri   )r   r  r  rN   rw   gh㈵>ro   )r   r   r#   rn   r  r8   r   rA   r{   r   r   rk   )	rz   r&  r{   r   r   r  r  r  r	  rX   rX   rY   test_eigh_tridiagonal  sB    
 z(TestEigTridiagonal.test_eigh_tridiagonalN)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d Zdd Zdd Zd	d
 Zdd Z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   s   t d d S )Ni  )rJ   )rz   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 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 )Nri   rN   ru      )type)subset_by_valuer
   r   )r
   r   )r-  Zwrong)r&  gvxevrF)r&  turbogvd)r&  r
   r0  )r   r   r   rP   r5   )rz   rX   rX   rY   test_wrong_inputs  s*    ""
zTestEigh.test_wrong_inputsc             C   s&   t tttddgtddg d S )Nru   )r   r&   r   rP   r5   )rz   rX   rX   rY   test_nonpositive_b,  s    zTestEigh.test_nonpositive_bc             C   s   xt tD ]\}}td|d}t|ddgd\}}t|jd t| t|dk|dk @ s^ttdd|d}t||ddgd\}}t|jd t| t|dk|dk @ s
tq
W d S )	N   )rG   r   rN   )r-  ri   T)rV   rG   )		enumerateDTYPESrZ   r   r   r@   rk   r   AssertionError)rz   inddtrr   r{   ro   r   rX   rX   rY   test_value_subsets0  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 )Nri   rN   r[   ru   rv   )r3   r   )rz   rr   r   r{   zrX   rX   rY   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   rN   )	Zscipy.sparsesparseidentityZtocscrP   Z
atleast_2dr   r   r   )rz   Zscipyrr   r   rX   rX   rY   test_eigh_of_sparseC  s
    
zTestEigh.test_eigh_of_sparser&  )r   Zevdr/  Zevxc             C   sB   t d}t||d\}}t|| ||  ddtd dd d S )Nr4  )r&  g        i  g      ?)r   r   )rZ   r   r   rP   spacing)rz   r&  rr   r{   ro   rX   rX   rY   test_various_drivers_standardK  s    z&TestEigh.test_various_drivers_standardr,  )ri   rN   ru   )gvr1  r.  c             C   s   t d}td}tddd}t||||d\}}|dkr\t|| |||   d|dd nJ|d	krt|| | ||  d|dd n t|| | ||  d|dd d S )
Ng     @r4  T)rV   )rr   r   r&  r,  ri   g        )r   r   rN   )rP   r@  rZ   r   r   )rz   r&  r,  r   rr   r   r{   ro   rX   rX   rY    test_various_drivers_generalizedQ  s    
""z)TestEigh.test_various_drivers_generalizedr
   )N)rN   r+  r0  )TFlower	overwritedtype_)re   rn   Fr   rm   )rw   c          	   C   s  |dk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=g-C6?)rU   rG   )overwrite_arD  r
   g        )r   r   T)rU   rG   rV   )rH  rD  overwrite_br0  r
   r   )rZ   r   rh   rG   rT   r4   rS   rR   r^   r   r5   r@   )rz   rm   rF  rE  rD  r0  r
   r   rr   r{   r;  Zdiag_r   Zdiag1_Zdiag2_rX   rX   rY   	test_eigh`  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dddddg}t|dd	gd
}tt|d t|tddg d S )Nrv   ri   rN   )r
   )Zsubset_by_indexg333333?g?g      ?gffffff?)r-  )rZ   r   r   rk   r   rP   r4   r3   )rz   rr   r{   Zw2r   Zw3rX   rX   rY   test_eigvalsh_new_argsz  s    
zTestEigh.test_eigvalsh_new_argsN)r   r   r   r*  r2  r3  r:  r<  r?  r   r   ZparametrizerA  rC  rJ  rK  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S )TestLUc             C   sX  t dddgdddgdddgg| _t dddgdddgdddgg| _t dddgdddgdd	d
gg| _t dddgdddgdddgg| _t ddddgdddd	gd
dddgg| _dt ddddgdddd	gd
dddgg | _t dddgdddgdd	d
gdddgg| _dt dddgdddgdd	d
gdddgg | _t	d| _
t	ddt	d  | _d S )Nri   rN   ru   rv   rw   y              @r+  r[      rx   y              ?y               @y              @y              @y              @y              @y               @y              "@r      )r   r   )r3   rr   car   cbhrectchrectvrectcvrectrK   medcmed)rz   rX   rX   rY   r     s    """"(
*
zTestLU.setup_methodc             C   sB   t |\}}}t|| | | t |dd\}}t|| | d S )Nri   )r  )r   r   )rz   dataplr  plrX   rX   rY   _test_common  s    zTestLU._test_commonc             C   s   |  | j d S )N)r[  rr   )rz   rX   rX   rY   r}     s    zTestLU.test_simplec             C   s   |  | j d S )N)r[  rO  )rz   rX   rX   rY   r     s    zTestLU.test_simple_complexc             C   s   |  | j d S )N)r[  r   )rz   rX   rX   rY   test_simple2  s    zTestLU.test_simple2c             C   s   |  | j d S )N)r[  rP  )rz   rX   rX   rY   test_simple2_complex  s    zTestLU.test_simple2_complexc             C   s   |  | j d S )N)r[  rQ  )rz   rX   rX   rY   test_hrectangular  s    zTestLU.test_hrectangularc             C   s   |  | j d S )N)r[  rS  )rz   rX   rX   rY   test_vrectangular  s    zTestLU.test_vrectangularc             C   s   |  | j d S )N)r[  rR  )rz   rX   rX   rY   test_hrectangular_complex  s    z TestLU.test_hrectangular_complexc             C   s   |  | j d S )N)r[  rT  )rz   rX   rX   rY   test_vrectangular_complex  s    z TestLU.test_vrectangular_complexc             C   s   |  | j dS )z:Check lu decomposition on medium size, rectangular matrix.N)r[  rU  )rz   rX   rX   rY   test_medium1  s    zTestLU.test_medium1c             C   s   |  | j dS )z:Check lu decomposition on medium size, rectangular matrix.N)r[  rV  )rz   rX   rX   rY   test_medium1_complex  s    zTestLU.test_medium1_complexc             C   s,   t | jdd\}}}t|| | | j d S )NF)r   )r   rr   r   )rz   rX  rY  r  rX   rX   rY   r     s    zTestLU.test_check_finitec             C   sh   xbdD ]Z}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W d S )N)CrG  rN   ri   r   g      ?)order)rP   r3   r   r   r   )rz   re  rW   LUPrX   rX   rY   test_simple_known  s
    
zTestLU.test_simple_knownN)r   r   r   r   r[  r}   r   r\  r]  r^  r_  r`  ra  rb  rc  r   rh  rX   rX   rX   rY   rL    s   rL  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 )N)rL  r   rr   rT   r;   rO  r<   r   rP  rQ  rR  rS  rT  rU  rV  )rz   rX   rX   rY   r     s    
zTestLUSingle.setup_methodN)r   r   r   __doc__r   rX   rX   rX   rY   ri    s   ri  c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestLUSolvec             C   s   t d d S )Ni  )rJ   )rz   rX   rX   rY   r     s    zTestLUSolve.setup_methodc             C   sV   t d}t d}x@dD ]8}tj||d}t||}t|}t||}t|| qW d S )N)r   r   )r   )rd  rG  )re  )rK   rP   r3   r   r   r   r   )rz   Za0r   re  rr   x1lu_ax2rX   rX   rY   test_lu  s    


zTestLUSolve.test_luc             C   sB   t d}t d}t||}t|dd}t||dd}t|| d S )N)r   r   )r   F)r   )rK   r   r   r   r   )rz   rr   r   rl  rm  rn  rX   rX   rY   r     s    
zTestLUSolve.test_check_finiteN)r   r   r   r   ro  r   rX   rX   rX   rY   rk    s   rk  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d Zdd Zdd Zdd ZdS )TestSVD_GESDDc             C   s   d| _ td d S )NZgesddi  )r  rJ   )rz   rX   rX   rY   r     s    zTestSVD_GESDD.setup_methodc             C   s,   t ttdggdd t ttdggdd d S )Ng      ?)r  r  )r   rl   r   r   )rz   rX   rX   rY   r   
  s    zTestSVD_GESDD.test_degeneratec             C   s   dddgdddgdddgg}xdD ]}t ||| jd\}}}t|j| td t|j| td t|jd	 |jd	 f|jj}x$t	t
|D ]}|| |||f< qW t|| | | q"W d S )
Nri   rN   ru   r4  rv   rw   )TF)full_matricesr  r   )r   r  r   rS   rF   r9   r@   rG   charr   rk   )rz   rr   rq  r  svhsigmar   rX   rX   rY   r}     s    
zTestSVD_GESDD.test_simplec             C   s   dddgdddgdddgg}xdD ]}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}x$t	t
|D ]}|| |||f< qW t|| | | q"W d S )	Nri   rN   ru   rv   rw   )TF)rq  r  r   )r   r  r   rS   rF   r9   r@   rG   rr  r   rk   )rz   rr   rq  r  rs  rt  ru  r   rX   rX   rY   test_simple_singular  s    
z"TestSVD_GESDD.test_simple_singularc             C   s   dddgdddgg}xdD ]}t ||| jd\}}}t|j| t|jd	  t|jd	 |jd	 f|jj}x$t	t
|D ]}|| |||f< qzW t|| | | qW d S )
Nri   rN   ru   r+  rv   rw   )TF)rq  r  r   )r   r  r   rS   rF   r@   r9   rG   rr  r   rk   )rz   rr   rq  r  rs  rt  ru  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}xdD ]}t ||| jd\}}}t|j| t|jd  t|j| td t|jd |jd f|jj}x$t	t
|D ]}|| |||f< qW t|| | | qW d S )	Nri   rN   r+  rv   ru   )TF)rq  r  r   )r   r  r   rS   rF   r@   r9   rG   rr  r   rk   )rz   rr   rq  r  rs  rt  ru  r   rX   rX   rY   test_simple_overdet1  s    
z!TestSVD_GESDD.test_simple_overdetc       
      C   s   d}d}xt dD ]}xt||gt||ggD ]}xdD ]}t||| jd\}}}t|j| t|jd  t||j t|jd  t|jd |jd f|j	j
}	x$t t|D ]}|| |	||f< qW t||	 | | q:W q0W qW d S )Nr4  r   ru   )TF)rq  r  ri   r   )r   rK   r   r  r   rS   rF   r@   r9   rG   rr  rk   )
rz   rU   mr   rr   rq  r  rs  rt  ru  rX   rX   rY   test_random=  s    
zTestSVD_GESDD.test_randomc             C   s   dddgdddgdddgg}xdD ]}t ||| jd\}}}t| j| t|jd  t| j| t|jd	  t|jd	 |jd	 f|jj	}x$t
t|D ]}|| |||f< qW t|| | | q"W d S )
Nri   rN   ru   y               @rv   rw   )TF)rq  r  r   )r   r  r   rR   rS   rF   r@   r9   rG   rr  r   rk   )rz   rr   rq  r  rs  rt  ru  r   rX   rX   rY   r   L  s    
z!TestSVD_GESDD.test_simple_complexc       
      C   s   d}d}xt dD ]}xdD ]}xt||gt||ggD ]}|dtt|j  }t||| jd\}}}t| j| t	|jd  t
|jd |jd f|jj}	x$t t|D ]}|| |	||f< qW t||	 | | q:W qW qW d S )	Nr4  r   ru   )TFy              ?)rq  r  ri   r   )r   rK   listr@   r   r  r   rR   rS   rF   r9   rG   rr  rk   )
rz   rU   ry  r   rq  rr   r  rs  rt  ru  rX   rX   rY   test_random_complexX  s    
z!TestSVD_GESDD.test_random_complexc             C   sf   dddg}t jd xJ|D ]B}x<t jt jt jt jgD ]$}t jj| |}t	|| j
d q6W qW d S )N)r   r   )r   2   )<   r   i  )r  )rP   rK   rJ   r;   float64r<   
complex128rQ   rT   r   r  )rz   sizesszr9  rr   rX   rX   rY   test_crash_1580k  s    

zTestSVD_GESDD.test_crash_1580c             C   s   dddgdddgdddgg}t |d| jd\}}}t|j| td t|j| td t|jd	 |jd	 f|jj}x$t	t
|D ]}|| |||f< qW t|| | | d S )
Nri   rN   ru   r4  rv   rw   F)r   r  r   )r   r  r   rS   rF   r9   r@   rG   rr  r   rk   )rz   rr   r  rs  rt  ru  r   rX   rX   rY   r   t  s    zTestSVD_GESDD.test_check_finitec             C   sT   t ddddddgddddddgddddddgddddddgg}t|| jd d S )NgK}\UU?gvWUU?g        )r  )rP   r3   r   r  )rz   r   rX   rX   rY   test_gh_5039~  s    
zTestSVD_GESDD.test_gh_5039N)r   r   r   r   r   r}   rv  rw  rx  rz  r   r|  r  r   r  rX   rX   rX   rY   rp    s   	
rp  c               @   s   e Zd Zdd ZdS )TestSVD_GESVDc             C   s   d| _ td d S )Ngesvdi  )r  rJ   )rz   rX   rX   rY   r     s    zTestSVD_GESVD.setup_methodN)r   r   r   r   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
ejjdd ZdS )TestSVDValsc             C   s>   x8g gt dt dfD ]}t|}t|t d qW d S )N)rN   r   )r   ru   r   )rP   r   r5   r   r   )rz   rr   rs  rX   rX   rY   
test_empty  s    zTestSVDVals.test_emptyc             C   s`   dddgdddgdddgg}t |}tt|dk t|d |d   koT|d kn   d S )Nri   rN   ru   rv   rw   r   )r   r   rk   )rz   rr   rs  rX   rX   rY   r}     s    zTestSVDVals.test_simplec             C   sD   dddgdddgg}t |}tt|dk t|d |d k d S )Nri   rN   ru   r+  rv   rw   r   )r   r   rk   )rz   rr   rs  rX   rX   rY   rw    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 )Nri   rN   r+  rv   ru   r   )r   r   rk   )rz   rr   rs  rX   rX   rY   rx    s    zTestSVDVals.test_simple_overdetc             C   s`   dddgdddgdddgg}t |}tt|dk t|d |d   koT|d kn   d S )	Nri   rN   ru   r4  y              @rv   rw   r   )r   r   rk   )rz   rr   rs  rX   rX   rY   r     s    zTestSVDVals.test_simple_complexc             C   sD   dddgdddgg}t |}tt|dk t|d |d k d S )Nri   rN   ru   r+  y              @rw   r   )r   r   rk   )rz   rr   rs  rX   rX   rY   test_simple_underdet_complex  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 )Nri   rN   r+  rv   y              @r   )r   r   rk   )rz   rr   rs  rX   rX   rY   test_simple_overdet_complex  s    z'TestSVDVals.test_simple_overdet_complexc             C   sd   dddgdddgdddgg}t |dd}tt|dk t|d |d   koX|d kn   d S )	Nri   rN   ru   rv   rw   F)r   r   )r   r   rk   )rz   rr   rs  rX   rX   rY   r     s    zTestSVDVals.test_check_finitec             C   s&   t jd t jdd}t| d S )Ni  i  i
  )rP   rK   rJ   rQ   r   )rz   rr   rX   rX   rY   test_crash_2609  s    zTestSVDVals.test_crash_2609N)r   r   r   r  r}   rw  rx  r   r  r  r   r   r   slowr  rX   rX   rX   rY   r    s   r  c               @   s   e Zd Zdd ZdS )TestDiagSVDc             C   s4   t tdddgdddddgdddgdddgg d S )Nri   r   ru   )r   r   )rz   rX   rX   rY   r}     s    zTestDiagSVD.test_simpleN)r   r   r   r}   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 Z6didj Z7dkS )lTestQRc             C   s   t d d S )Ni  )rJ   )rz   rX   rX   rY   r     s    zTestQR.setup_methodc             C   sN   dddgdddgdddgg}t |\}}t|j| td t|| | d S )NrM  rN   ru   rx   rv   rw   )r   r   rS   rF   )rz   rr   qrrX   rX   rY   r}     s    zTestQR.test_simplec             C   s|   dddgdddgdddgg}t |\}}dddg}t||d\}}t|| | t|| t|tdd\}}t|| d S )	NrM  rN   ru   rx   rv   rw   ri   r   )r   r   r   rF   )rz   rr   r  r  cqcr2rX   rX   rY   test_simple_left  s    

zTestQR.test_simple_leftc             C   sx   dddgdddgdddgg}t |\}}dddg}t||\}}t|| | t|| t|td\}}t|| d S )NrM  rN   ru   rx   rv   rw   ri   )r   r   r   rF   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_right  s    

zTestQR.test_simple_rightc             C   s   t dddgdddgd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 )NrM  rN   ru   rx   rv   rw   T)pivotingri   r   )
rP   rC   r   r   r4   r   r   r   rS   rF   )rz   rr   r  r  rX  rn   q2r  rX   rX   rY   test_simple_pivoting  s    ""
zTestQR.test_simple_pivotingc             C   s^   dddgdddgdddgg}t |dd\}}}d	ddg}t||d
d\}}}t|| | d S )NrM  rN   ru   rx   rv   rw   T)r  ri   r   )r   r   r   )rz   rr   r  r  jpvtr  r  rX   rX   rY   test_simple_left_pivoting   s
    
z TestQR.test_simple_left_pivotingc             C   s^   dddgdddgdddgg}t |dd\}}}d	ddg}t||dd\}}}t|| | d S )
NrM  rN   ru   rx   rv   rw   T)r  ri   )r   r   r   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_right_pivoting  s
    
z!TestQR.test_simple_right_pivotingc             C   sF   dddgdddgg}t |\}}t|j| td t|| | d S )NrM  rN   ru   rx   )r   r   rS   rF   )rz   rr   r  r  rX   rX   rY   test_simple_trap  s    zTestQR.test_simple_trapc             C   s   t dddgd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 )	NrM  rN   ru   rx   T)r  ri   r   )
rP   rC   r   r   r4   r   r   r   rS   rF   )rz   rr   r  r  rX  rn   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 )NrM  rN   rx   rv   ru   )r   r   rS   rF   )rz   rr   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 )
NrM  rN   rx   rv   ru   T)r  ri   r   )
rP   rC   r   r   r4   r   r   r   rS   rF   )rz   rr   r  r  rX  rn   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 )
NrM  rN   rx   rv   ru   economic)mode)ru   rN   )rN   rN   )r   r   rS   rF   r   r@   )rz   rr   r  r  rX   rX   rY   test_simple_tall_e2  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 )NrM  rN   rx   rv   ru   Tr  )r  r  ri   r   )r  )
rP   rC   r   r   r4   r   r   r   rS   rF   )rz   rr   r  r  rX  rn   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ddd
g}t||d	dd\}}t||d d  | t|tdd	\}}t|| d S )NrM  rN   rx   rv   ru   r  )r  ri   r   r   T)overwrite_c)r   r   r   r3   rF   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_tall_leftG  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 )NrM  rN   rx   rv   ru   r  T)r  r  ri   r   )r   r   r   r   rF   )rz   rr   r  r  r  r  r  ZkpvtrX   rX   rY   test_simple_tall_left_pivotingT  s    
z%TestQR.test_simple_tall_left_pivotingc             C   sv   ddgddgddgg}t |dd\}}dddg}t||\}}t|| | t|| t|td\}}t|| d S )	NrM  rN   rx   rv   ru   r  )r  ri   )r   r   r   rF   )rz   rr   r  r  r  cqr  rX   rX   rY   test_simple_tall_right^  s    

zTestQR.test_simple_tall_rightc             C   s|   ddgddgddgg}t |ddd\}}}d	ddg}t||dd
\}}}t|| | t|tddd
\}}}t|| d S )NrM  rN   rx   rv   ru   Tr  )r  r  ri   )r  )r   r   r   rF   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_tall_right_pivotingh  s    
z&TestQR.test_simple_tall_right_pivotingc             C   s^   dddgdddgg}t |\}}t|j| td t|| | t|jd t|jd d S )NrM  rN   rv   rx   ru   )rN   rN   )rN   ru   )r   r   rS   rF   r   r@   )rz   rr   r  r  rX   rX   rY   test_simple_fatq  s    zTestQR.test_simple_fatc             C   s   t dddgd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
|jd
 t
|jd t|d d |f \}}t|| t|| d S )NrM  rN   rv   rx   ru   T)r  ri   r   )rN   rN   )rN   ru   )rP   rC   r   r   r4   r   r   r   rS   rF   r   r@   )rz   rr   r  r  rX  rn   r  r  rX   rX   rY   test_simple_fat_pivotingz  s    "
zTestQR.test_simple_fat_pivotingc             C   sb   dddgdddgg}t |dd\}}t|j| td t|| | t|jd t|jd	 d S )
NrM  rN   ru   rx   rv   r  )r  )rN   rN   )rN   ru   )r   r   rS   rF   r   r@   )rz   rr   r  r  rX   rX   rY   test_simple_fat_e  s    zTestQR.test_simple_fat_ec             C   s   t dddgd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
|jd t
|jd t|d d |f dd\}}t|| t|| d S )NrM  rN   ru   rx   rv   Tr  )r  r  ri   r   )rN   rN   )rN   ru   )r  )rP   rC   r   r   r4   r   r   r   rS   rF   r   r@   )rz   rr   r  r  rX  rn   r  r  rX   rX   rY   test_simple_fat_e_pivoting  s    "
z!TestQR.test_simple_fat_e_pivotingc             C   sv   dddgdddgg}t |dd\}}ddg}t||d	\}}t|| | t|| t|tdd	\}}t|| d S )
NrM  rN   ru   rx   rv   r  )r  ri   r   )r   r   r   rF   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_fat_left  s    
zTestQR.test_simple_fat_leftc             C   sx   dddgdddgg}t |ddd\}}}d	dg}t||d
d\}}}t|| | t|tdd
d\}}}t|| d S )NrM  rN   ru   rx   rv   r  T)r  r  ri   r   )r   r   r   rF   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_fat_left_pivoting  s    z$TestQR.test_simple_fat_left_pivotingc             C   sr   dddgdddgg}t |dd\}}ddg}t||\}}t|| | t|| t|td\}}t|| d S )	NrM  rN   ru   rx   rv   r  )r  ri   )r   r   r   rF   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_fat_right  s    
zTestQR.test_simple_fat_rightc             C   sx   dddgdddgg}t |ddd\}}}d	dg}t||dd
\}}}t|| | t|tddd
\}}}t|| d S )NrM  rN   ru   rx   rv   Tr  )r  r  ri   )r  )r   r   r   rF   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_fat_right_pivoting  s    z%TestQR.test_simple_fat_right_pivotingc             C   sR   dddgdddgdddgg}t |\}}t| j| td t|| | d S )Nru   y      @      @rv   rN   y       @      @r[   )r   r   rR   rS   rF   )rz   rr   r  r  rX   rX   rY   r     s    zTestQR.test_simple_complexc             C   sr   dddgdddgdddgg}t |\}}dddg}t||d\}}t|| | t|tdd\}}t|| d S )	Nru   y      @      @rv   rN   y       @      @r[   ri   r   )r   r   r   rF   )rz   rr   r  r  r  r  rX   rX   rY   test_simple_complex_left  s    
zTestQR.test_simple_complex_leftc             C   sn   dddgdddgdddgg}t |\}}dddg}t||\}}t|| | t|td\}}t|| d S )Nru   y      @      @rv   rN   y       @      @r[   ri   )r   r   r   rF   )rz   rr   r  r  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d	ddg}t||ddd\}}t||d d  | t|tdd\}}t|| d S )NrM  y       @      @rN   rx   y      @      @ru   r  )r  ri   y       @       @r   r   T)r  )r   r   r   r3   rF   )rz   rr   r  r  r  r  r  rX   rX   rY   test_simple_tall_complex_left  s    
z$TestQR.test_simple_tall_complex_leftc             C   s\   dddgdddgdddgg}t |\}}dddg}t||dd	d
\}}t| | | d S )Nru   y      @      @rv   rN   y       @      @r[   ri   r   T)	conjugate)r   r   r   rR   )rz   rr   r  r  r  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 )Nru   y      @      @rv   y       @       @rN   r  )r  ri   r   T)r  )r   r   r   rR   )rz   rr   r  r  r  r  rX   rX   rY   'test_simple_complex_tall_left_conjugate  s
    z.TestQR.test_simple_complex_tall_left_conjugatec             C   s`   dddgdddgdddgg}t |\}}tdddg}t||dd	\}}t||  | d S )
Nru   y      @      @rv   rN   y       @      @r[   ri   T)r  )r   rP   r3   r   r   rR   )rz   rr   r  r  r  r  rX   rX   rY   #test_simple_complex_right_conjugate  s
    z*TestQR.test_simple_complex_right_conjugatec             C   s   t dddgdddgd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 )Nru   y      @      @rv   rN   y       @      @r[   T)r  ri   r   )r3   r   r   r4   r   rP   r   r   rR   rS   rF   )rz   rr   r  r  rX  rn   r  r  rX   rX   rY   test_simple_complex_pivoting  s     "
z#TestQR.test_simple_complex_pivotingc             C   sb   t dddgdddgdddgg}t|dd\}}}d	ddg}t||d
d\}}}t|| | d S )Nru   y      @      @rv   rN   y       @      @r[   T)r  ri   r   )r3   r   r   r   )rz   rr   r  r  r  r  r  rX   rX   rY   !test_simple_complex_left_pivoting
  s
     
z(TestQR.test_simple_complex_left_pivotingc             C   sb   t dddgdddgdddgg}t|dd\}}}d	ddg}t||dd\}}}t|| | d S )
Nru   y      @      @rv   rN   y       @      @r[   T)r  ri   )r3   r   r   r   )rz   rr   r  r  r  r  r  rX   rX   rY   "test_simple_complex_right_pivoting  s
     
z)TestQR.test_simple_complex_right_pivotingc             C   sT   d}xJt dD ]>}t||g}t|\}}t|j| t| t|| | qW d S )Nr4  rN   )r   rK   r   r   rS   rF   )rz   rU   r   rr   r  r  rX   rX   rY   rz    s    zTestQR.test_randomc             C   sx   d}xnt dD ]b}t||g}t|\}}t|g}t||d\}}t|| | t|t|d\}}t|| qW d S )Nr4  rN   r   )r   rK   r   r   r   rF   )rz   rU   r   rr   r  r  r  r  rX   rX   rY   test_random_left   s    
zTestQR.test_random_leftc             C   st   d}xjt dD ]^}t||g}t|\}}t|g}t||\}}t|| | t|t|\}}t|| qW d S )Nr4  rN   )r   rK   r   r   r   rF   )rz   rU   r   rr   r  r  r  r  rX   rX   rY   test_random_right+  s    
zTestQR.test_random_rightc       
      C   s   d}xt dD ]}t||g}t|dd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|d d |f \}}	t|| t||	 qW d S )Nr4  rN   T)r  ri   r   )r   rK   r   r   r4   r   rP   r   r   rS   rF   )
rz   rU   r   rr   r  r  rX  rn   r  r  rX   rX   rY   test_random_pivoting6  s    "
zTestQR.test_random_pivotingc             C   sX   d}d}xJt dD ]>}t||g}t|\}}t|j| t| t|| | qW d S )N   r   rN   )r   rK   r   r   rS   rF   )rz   ry  rU   r   rr   r  r  rX   rX   rY   test_random_tallC  s    zTestQR.test_random_tallc       	      C   s   d}d}xrt dD ]f}t||g}t|dd\}}t|g}t||d\}}t|| | t|t|d\}}t|| qW d S )Nr  r   rN   r  )r  r   )r   rK   r   r   r   rF   )	rz   ry  rU   r   rr   r  r  r  r  rX   rX   rY   test_random_tall_leftM  s    
zTestQR.test_random_tall_leftc       	      C   s|   d}d}xnt dD ]b}t||g}t|dd\}}t|g}t||\}}t|| | t|t|\}}t|| qW d S )Nr  r   rN   r  )r  )r   rK   r   r   r   rF   )	rz   ry  rU   r   rr   r  r  r  r  rX   rX   rY   test_random_tall_rightZ  s    
zTestQR.test_random_tall_rightc             C   s   d}d}xt dD ]}t||g}t|dd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|d d |f \}	}
t||	 t||
 qW d S )Nr  r   rN   T)r  ri   r   )r   rK   r   r   r4   r   rP   r   r   rS   rF   )rz   ry  rU   r   rr   r  r  rX  rn   r  r  rX   rX   rY   test_random_tall_pivotingg  s    "
z TestQR.test_random_tall_pivotingc             C   s|   d}d}xnt dD ]b}t||g}t|dd\}}t|j| t| t|| | t|j||f t|j||f qW d S )Nr  r   rN   r  )r  )r   rK   r   r   rS   rF   r   r@   )rz   ry  rU   r   rr   r  r  rX   rX   rY   test_random_tall_ev  s    zTestQR.test_random_tall_ec             C   s   d}d}xt dD ]}t||g}t|ddd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|j||f t|j||f t|d d |f dd	\}	}
t||	 t||
 qW d S )
Nr  r   rN   Tr  )r  r  ri   r   )r  )r   rK   r   r   r4   r   rP   r   r   rS   rF   r   r@   )rz   ry  rU   r   rr   r  r  rX  rn   r  r  rX   rX   rY   test_random_tall_e_pivoting  s    "
z"TestQR.test_random_tall_e_pivotingc             C   sX   d}d}xJt dD ]>}t||g}t|\}}t|j| t| t|| | qW d S )Nr   r  rN   )r   rK   r   r   rS   rF   )rz   ry  rU   r   rr   r  r  rX   rX   rY   test_random_trap  s    zTestQR.test_random_trapc             C   s   d}d}xt dD ]}t||g}t|dd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|d d |f \}	}
t||	 t||
 qW d S )Nr   r  rN   T)r  ri   r   )r   rK   r   r   r4   r   rP   r   r   rS   rF   )rz   ry  rU   r   rr   r  r  rX  rn   r  r  rX   rX   rY   test_random_trap_pivoting  s    "
z TestQR.test_random_trap_pivotingc             C   sh   d}x^t dD ]R}t||gdt||g  }t|\}}t| j| t| t|| | qW d S )Nr4  rN   y              ?)r   rK   r   r   rR   rS   rF   )rz   rU   r   rr   r  r  rX   rX   rY   r|    s    zTestQR.test_random_complexc             C   s   d}xt dD ]}t||gdt||g  }t|\}}t|gdt|g  }t||d\}}t|| | t|t|d\}}t|| qW d S )Nr4  rN   y              ?r   )r   rK   r   r   r   rF   )rz   rU   r   rr   r  r  r  r  rX   rX   rY   test_random_complex_left  s    zTestQR.test_random_complex_leftc             C   s   d}xt dD ]|}t||gdt||g  }t|\}}t|gdt|g  }t||\}}t|| | t|t|\}}t|| qW d S )Nr4  rN   y              ?)r   rK   r   r   r   rF   )rz   rU   r   rr   r  r  r  r  rX   rX   rY   test_random_complex_right  s    z TestQR.test_random_complex_rightc       
      C   s   d}xt 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W d S )Nr4  rN   y              ?T)r  ri   r   )r   rK   r   r   r4   r   rP   r   r   rR   rS   rF   )
rz   rU   r   rr   r  r  rX  rn   r  r  rX   rX   rY   test_random_complex_pivoting  s    "
z#TestQR.test_random_complex_pivotingc             C   sR   dddgdddgdddgg}t |dd\}}t|j| td t|| | d S )	NrM  rN   ru   rx   rv   rw   F)r   )r   r   rS   rF   )rz   rr   r  r  rX   rX   rY   r     s    zTestQR.test_check_finitec       
      C   s   dddgdddgdddg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 )NrM  rN   ru   rx   rv   rw   )lworkr   r   r  r   )r   r   r   	Exception)
rz   rr   r  r  r  r  Zq3Zr3Zq4Zr4rX   rX   rY   
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  r  r  r  r   r  r  r  r  r  r  r  r  r  rz  r  r  r  r  r  r  r  r  r  r  r  r|  r  r  r  r   r  rX   rX   rX   rY   r    sj   

	

			
	
			
	r  c               @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestRQc             C   s   t d d S )Ni  )rJ   )rz   rX   rX   rY   r     s    zTestRQ.setup_methodc             C   sN   dddgdddgdddgg}t |\}}t||j td t|| | d S )NrM  rN   ru   rx   rv   rw   )r   r   rS   rF   )rz   rr   r  r  rX   rX   rY   r}     s    zTestRQ.test_simplec             C   sB   dddgdddgdddgg}t |\}}t |dd}t|| d S )	NrM  rN   ru   rx   rv   rw   r  )r  )r   r   )rz   rr   r  r  r  rX   rX   rY   test_r  s    zTestRQ.test_rc             C   sT   d}xJt dD ]>}t||g}t|\}}t||j t| t|| | qW d S )Nr4  rN   )r   rK   r   r   rS   rF   )rz   rU   r   rr   r  r  rX   rX   rY   rz    s    zTestRQ.test_randomc             C   sF   dddgdddgg}t |\}}t|j| td t|| | d S )NrM  rN   ru   rx   )r   r   rS   rF   )rz   rr   r  r  rX   rX   rY   r    s    zTestRQ.test_simple_trapc             C   sH   ddgddgddgg}t |\}}t|j| td t|| | d S )NrM  rN   rx   rv   ru   )r   r   rS   rF   )rz   rr   r  r  rX   rX   rY   r    s    zTestRQ.test_simple_tallc             C   sF   dddgdddgg}t |\}}t||j td t|| | d S )NrM  rN   rv   rx   ru   )r   r   rS   rF   )rz   rr   r  r  rX   rX   rY   r    s    zTestRQ.test_simple_fatc             C   sR   dddgdddgdddgg}t |\}}t|| j td t|| | d S )Nru   y      @      @rv   rN   y       @      @r[   )r   r   rR   rS   rF   )rz   rr   r  r  rX   rX   rY   r     s    zTestRQ.test_simple_complexc             C   sX   d}d}xJt dD ]>}t||g}t|\}}t||j t| t|| | qW d S )Nr  r   rN   )r   rK   r   r   rS   rF   )rz   ry  rU   r   rr   r  r  rX   rX   rY   r  %  s    zTestRQ.test_random_tallc             C   sX   d}d}xJt dD ]>}t||g}t|\}}t||j t| t|| | qW d S )Nr   r  rN   )r   rK   r   r   rS   rF   )rz   ry  rU   r   rr   r  r  rX   rX   rY   r  .  s    zTestRQ.test_random_trapc             C   s|   d}d}xnt dD ]b}t||g}t|dd\}}t||j t| t|| | t|j||f t|j||f qW d S )Nr   r  rN   r  )r  )r   rK   r   r   rS   rF   r   r@   )rz   ry  rU   r   rr   r  r  rX   rX   rY   test_random_trap_economic7  s    z TestRQ.test_random_trap_economicc             C   sh   d}x^t dD ]R}t||gdt||g  }t|\}}t|| j t| t|| | qW d S )Nr4  rN   y              ?)r   rK   r   r   rR   rS   rF   )rz   rU   r   rr   r  r  rX   rX   rY   r|  B  s    zTestRQ.test_random_complexc             C   s   d}d}xt dD ]v}t||gdt||g  }t|dd\}}t|| j t| t|| | t|j||f t|j||f qW d S )Nr   r  rN   y              ?r  )r  )	r   rK   r   r   rR   rS   rF   r   r@   )rz   ry  rU   r   rr   r  r  rX   rX   rY   test_random_complex_economicJ  s    z#TestRQ.test_random_complex_economicc             C   sR   dddgdddgdddgg}t |dd\}}t||j td t|| | d S )	NrM  rN   ru   rx   rv   rw   F)r   )r   r   rS   rF   )rz   rr   r  r  rX   rX   rY   r   U  s    zTestRQ.test_check_finiteN)r   r   r   r   r}   r  rz  r  r  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d Zdd Zdd Zd	S )
	TestSchurc             C   s   dddgdddgdddgg}t |\}}t|| | j | t |d\}}tttt|orttt| t|| | j | t	||\}}t|| | j | d S )	NrM  rN  ru   rN   rx   r   rw   r   )
r   r   rR   rS   r   rP   anyr=   r?   r   )rz   rr   tr;  ZtcZzcZtc2Zzc2rX   rX   rY   r}   ^  s    (zTestSchur.test_simplec             C   s  ddddgddddgddd	d
gddddgg}t |dd\}}}tddddgddddgddddgddddgg|d tdd d!d"gdd#d$d%gddd&d'gdddd(gg|d td)| t |d*d\}}}td+d,d-d.gd/d0d1d.gd2d3d4dgd5d6d7dgg|d td&d8d9d:gdd(d;d<gdddd=gdddd#gg|d td)| t |d>d\}}}td?dd@dAgdBddCdDgddEdFd+gddEdGd/gg|d td#ddHdIgdd(dJd:gddd&dKgddddgg|d td)| t |dLd\}}}td+dFdEdgd/dGdEdgd2dMddgd5dNddgg|d td&dOdPdQgdddRd;gddd#dgdddd(gg|d td)| t |dSdT d\}}}td+d,d-d.gd/d0d1d.gd2d3d4dgd5d6d7dgg|d td&d8d9d:gdd(d;d<gdddd=gdddd#gg|d td)| d S )UNg      @g      @g      ?g      g      g      g      "@g      @g      g      @g      g      @lhp)rA   gd]K?ga+e?gPkw?g        gd]KgMbgv?gHg(?gA`"?g6gQg46<R?gr?g-?ru   g-g&S?gy)'gg      gۊe"@gH.!g-?g&S¿g      ?rN   rhpg=,Ԛ?gZd;O߿g	cZ?g-g=,Ԛ߿gZd;O?g	cZ¿gK=U?gb=?gGx$(gy?gV/'?gGx$(?gDlg1%@g~jt,gPsR@g"~	gDl?iucg6?gTNgK=Ug-gqhؿgyٿg-?gY8mgY8m?gPsRgZӼcg:M
gRI&B@oucgTN?gqh?gRI&Bg~jt,@gZӼc@g:M
@c             S   s   | dkS )Ng        rX   )rd   rX   rX   rY   <lambda>      z%TestSchur.test_sort.<locals>.<lambda>)r   r   r   )rz   rr   rs  r  ZsdimrX   rX   rY   	test_sorth  s    


























zTestSchur.test_sortc             C   sP   ddddgddddgddd	d
gddddgg}t tt|dd t tt|dd d S )Ng      @g      @g      ?g      g      g      g      "@g      @g      g      @g      g      @unsupported)rA   ri   )r   r   r   )rz   rr   rX   rX   rY   test_sort_errors  s    


zTestSchur.test_sort_errorsc             C   sH   dddgdddgdddgg}t |dd	\}}t|| | j | d S )
NrM  rN  ru   rN   rx   r   rw   F)r   )r   r   rR   rS   )rz   rr   r  r;  rX   rX   rY   r     s    zTestSchur.test_check_finiteN)r   r   r   r}   r  r  r   rX   rX   rX   rY   r  \  s   
Fr  c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestHessenbergc             C   sn   dddgdddgddd	gg}d
ddgdddgdddgg}t |dd\}}t|j| | | t||dd d S )Nikiifi     i"  iiig     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@ri   )calc_qr+  )decimal)r   r   rS   )rz   rr   h1rp   r  rX   rX   rY   r}     s    zTestHessenberg.test_simplec             C   sH   dddgdddgddd	gg}t |d
d\}}t| j| | | d S )Nikiifi  y             f@i"  y             ;iiri   )r  )r   r   rR   rS   )rz   rr   rp   r  rX   rX   rY   r     s
    z"TestHessenberg.test_simple_complexc             C   s   dddddddgdddddddgdddddddgdddd	dddgdddddddgdddddddgdddddddgg}t |dd
\}}t|j| | | d S )Nri   rN   ru   r+  rv   rw   r[   r   rM  )r  )r   r   rS   )rz   rr   rp   r  rX   rX   rY   r\    s    zTestHessenberg.test_simple2c             C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nru   rN   )r   r   ri   )r  )rP   rF   r   r   rS   )rz   rr   rp   r  rX   rX   rY   test_simple3  s    
zTestHessenberg.test_simple3c             C   sJ   d}x@t dD ]4}t||g}t|dd\}}t|j| | | qW d S )Nr4  rN   ri   )r  )r   rK   r   r   rS   )rz   rU   r   rr   rp   r  rX   rX   rY   rz    s
    zTestHessenberg.test_randomc             C   s^   d}xTt dD ]H}t||gdt||g  }t|dd\}}t| j| | | qW d S )Nr4  rN   y              ?ri   )r  )r   rK   r   r   rR   rS   )rz   rU   r   rr   rp   r  rX   rX   rY   r|    s
    z"TestHessenberg.test_random_complexc             C   sp   dddgdddgddd	gg}d
ddgdddgdddgg}t |ddd\}}t|j| | | t||dd d S )Nikiifi  r  i"  iiig     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@ri   F)r  r   r+  )r  )r   r   rS   )rz   rr   r  rp   r  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 )
NrN   ri   r[   rN  )r  y       @      y      ?       @y      @      @y      (@       )r   r   rP   rF   )rz   rr   rp   r  r   h2r  rX   rX   rY   test_2x2  s    
zTestHessenberg.test_2x2N)r   r   r   r}   r   r\  r  rz  r|  r   r  rX   rX   rX   rY   r    s   r  c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestQZc             C   s   t d d S )Ni90  )rJ   )rz   rX   rX   rY   r     s    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 )Nrv   )r  r   )rK   rT   r;   r   r   rS   rF   r   rP   r   r4   )rz   rU   rW   r   AABBQr   rX   rX   rY   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 )Nrv   r   )	rK   r   r   rS   rF   r   rP   r   r4   )rz   rU   rW   r   r  r  r  r   rX   rX   rY   test_qz_double  s    zTestQZ.test_qz_doublec             C   s   d}t ||gdt ||g  }t ||gdt ||g  }t||\}}}}t|| | j | t|| | j | t|| j t| t|| j t| ttt	|dk ttt	|j
dk d S )Nrv   y              ?r   )rK   r   r   rR   rS   rF   r   rP   r   r4   r_   )rz   rU   rW   r   r  r  r  r   rX   rX   rY   test_qz_complex!  s    zTestQZ.test_qz_complexc             C   s   d}t ||gdt ||g  t}t ||gdt ||g  t}t||\}}}}t|| | j |dd t|| | j |dd t|| j t|dd t|| j t|dd tt	
t|dk tt	
t|jdk d S )Nrv   y              ?)r  r   )rK   rT   r<   r   r   rR   rS   rF   r   rP   r   r4   r_   )rz   rU   rW   r   r  r  r  r   rX   rX   rY   test_qz_complex64-  s    ""zTestQZ.test_qz_complex64c       
      C   s   d}t ||g}t ||g}t||dd\}}}}|| | j }t|j| t|jd || | j }	t|	j| t|	jd t|| j t| t|| j t| tt	
t|dk d S )Nrv   r   )outputr   )rK   r   rR   rS   r   r^   r_   rF   r   rP   r   r4   )
rz   rU   rW   r   r  r  r  r   aaZbbrX   rX   rY   test_qz_double_complex9  s    zTestQZ.test_qz_double_complexc          	   C   s~   t ddddgddddgdd	d
dgddddgg}t ddddgddddgddddgddddgg}ttt||dd d d S )Ng333333@g      )@g     @Ag      @g333333@g     5@g     Gg      @g      ?g     Eg      @g@g      @g      Gg      ?g      g      @g      g       @g      g333333?g      @c             S   s   |dkS )Nr   rX   )rc   ZaibetarX   rX   rY   r  `  r  z,TestQZ.test_qz_double_sort.<locals>.<lambda>)rA   )rP   r3   r   r   r   )rz   rW   r   rX   rX   rY   test_qz_double_sortH  s    



zTestQZ.test_qz_double_sortc             C   s   d}t ||g}t ||g}t||dd\}}}}t|| |j | t|| |j | t||j t| t||j t| ttt|dk d S )Nrv   F)r   r   )	rK   r   r   rS   rF   r   rP   r   r4   )rz   rU   rW   r   r  r  r  r   rX   rX   rY   r     s    zTestQZ.test_check_finiteN)r   r   r   r   r  r  r  r  r  r  r   rX   rX   rX   rY   r    s   cr  c             C   s   t | |  S )N)rP   rB   )XrX   rX   rY   	_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   sv  t ddddgddddgd	d
ddgddddgg}t ddddgddddgddddgdddd gg}t d!d"d#d$gd%d&d'd(gd%d&d)d*gd+d,d-d.gg}t d/d0d1d/gd/d2d3d4gd/d2d5d2gd/d2d5d4gg}t d6d7d8d8gd9d9d:d;gd;d9d7d8gd<d9d=d;gg}t d=d>d.d>gd;d;d:d?gd?d7d.d.gd6d7d9d;gg}t d0}t d@d/g}t d/d@g}	|||||	g| _|||||	g| _d S )ANy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              y              ?y333333@y              y      @      g333333@g      )@g     @Ag      g333333@g     5@g     Gg      @g     Eg      @g@g      :@g      Gg      @ri   rN   ru   r+  g      @g      ?g      @g      @g       @g      @g        g       @g      $@g      "@r   )rP   r3   rF   r4   rW   r   )
clsA1B1A2B2A3B3A4B4A5rX   rX   rY   r*    sB    













zTestOrdQZ.setup_classc          	      s<   t jdd"  fddt| j| jD }W d Q R X t|S )Nraise)r   c                s   g | ]\}}t || d qS ))rA   )r   ).0AiBi)rA   rX   rY   
<listcomp>  s    z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rP   r   ziprW   r   tuple)rz   rA   retrX   )rA   rY   	qz_decomp  s    &zTestOrdQZ.qz_decompc
             C   s  t j|j }
t||j  |
 t|	|	j  |
 t|| ||	  t|| ||	  tt |dt |j tt |dt |j xt	|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 rF|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  || ||   qW t|}d}xNt	|jd D ]<}|t || gt || g}|sr|rrt|}q<W d S )Nr   r   r   ri   rN   T)rP   rF   r@   r   rS   rR   r   rI   r9   r   r	   r_   r   r   r1   r3   r7  )rz   rW   r   rA   r  r  alphar  r  r   ZIdr   Zevals_tmpZsortfunZlastsortZcursortrX   rX   rY   check  s>    *> ."
zTestOrdQZ.checkc             C   sB   |  |}x2t|| j| jD ]\}}}| j|||f|  qW d S )N)r  r  rW   r   r  )rz   rA   r
  Zretir  r  rX   rX   rY   	check_all'	  s    
zTestOrdQZ.check_allc             C   s   |  d d S )Nr  )r  )rz   rX   rX   rY   test_lhp-	  s    zTestOrdQZ.test_lhpc             C   s   |  d d S )Nr  )r  )rz   rX   rX   rY   test_rhp0	  s    zTestOrdQZ.test_rhpc             C   s   |  d d S )Nr  )r  )rz   rX   rX   rY   test_iuc3	  s    zTestOrdQZ.test_iucc             C   s   |  d d S )Nr  )r  )rz   rX   rX   rY   test_ouc6	  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 )N)rG   r   F)rP   
empty_likeboolr_   )rd   r  r\   nonzerorX   rX   rY   rA   ;	  s
    
z TestOrdQZ.test_ref.<locals>.sort)r  )rz   rA   rX   rX   rY   test_ref9	  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 )N)rG   r   F)rP   r  r  r_   )rd   r  r\   r  rX   rX   rY   rA   F	  s
    
z TestOrdQZ.test_cef.<locals>.sort)r  )rz   rA   rX   rX   rY   test_cefD	  s    zTestOrdQZ.test_cefc             C   sx   t | jd | jd dd}| j| jd | jd df|  t | jd | jd dd}| j| jd | jd df|  d S )Nri   rN   r  )rA   )r   rW   r   r  )rz   r
  rX   rX   rY   test_diff_input_typesO	  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}xt|||D ]\}}}x|D ]\}}t|||d\}}}}}}|dk}|dk}t |}t j|||@ < t j|| |@ < ||  ||   || < t|| qW qxW d S )NrN   r   g      ?r  g      r  r  r  y             ?y      ?      ?yٿɿy      ?      r   ri   )rA   )	rP   rF   r4   r   nanr  r   r  r   )rz   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bzerord   rX   rX   rY   test_sort_explicitV	  sN    










zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodr*  r  r  r  r  r  r  r  r  r  r  r  rX   rX   rX   rY   r    s   7.r  c               @   s,   e Zd Zdd Zdd Zejjdd ZdS )TestOrdQZWorkspaceSizec             C   s   t d d S )Ni90  )rJ   )rz   rX   rX   rY   r   	  s    z#TestOrdQZWorkspaceSize.setup_methodc             C   s   d}xLt jt jgD ]<}t||f|}t||f|}t||dd dd}qW xLt jt jgD ]<}t||f|}t||f|}t||dd dd}q`W d S )N   c             S   s   | |k S )NrX   )r  r  rX   rX   rY   r  	  r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r^   )rA   r  c             S   s   | |k S )NrX   )r  r  rX   rX   rY   r  	  r  r   )rP   r;   r  rK   rT   r   r  r<   )rz   r   ddtyperW   r   r  rX   rX   rY   test_decompose	  s    z%TestOrdQZWorkspaceSize.test_decomposec             C   sd   d}xZt jt jt jt jgD ]B}t||f|}t||f|}t||dd\}}}}}	}
qW d S )Nr   r  )rA   )rP   r;   r  r  r<   rK   rT   r   )rz   r   r!  rW   r   SrS   r  r  UVrX   rX   rY   test_decompose_ouc	  s
    z)TestOrdQZWorkspaceSize.test_decompose_oucN)	r   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	}| }| }xT|d
f d
f|df|d
f|d
f|d
fgD ](\}	}
t|	}t|||	|
t|	d qW d S )Nr   )_datacopiedri   rN   ru   c                   s   e Zd Z fddZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1c                s    S )NrX   )rz   )rW   rX   rY   	__array__	  s    z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__N)r   r   r   r)  rX   )rW   rX   rY   Fake1	  s   r*  c                   s   e Zd Z jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   Z__array_interface__rX   )rW   rX   rY   Fake2	  s   r+  FT)r   )Zscipy.linalg.decompr(  rM   rC   tolistr~   r   repr)rz   r(  r   LZM2r*  r+  ZF1ZF2itemstatusZarrrX   )rW   rY   test_datacopied	  s    zTestDatacopied.test_datacopiedN)r   r   r   r1  rX   rX   rX   rY   r'  	  s   r'  c              C   sF   t dtjd} tj| jddtd}d|_t|dd t|jdd d	S )
z4Check linalg works with non-aligned memory (float32)i  )rG   rN   r   )offsetcountrG   )r   r   T)rH  N)	r:   rP   uint8
frombufferrW  r;   r@   r	   rS   )rr   r;  rX   rX   rY   test_aligned_mem_float	  s
    r6  ppc64lezcrashes on ppc64le)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 (float64)i$  )rG   r+  r   )r2  r3  rG   )r   r   T)rH  N)	r:   rP   r4  r5  rW  r   r@   r	   rS   )rr   r;  rX   rX   rY   test_aligned_mem	  s
    r8  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  )rG   rM  r   )r2  r3  rG   )r   r   T)rH  N)	r9   rP   r4  r5  rW  r   r@   r	   rS   )rr   r;  rX   rX   rY   test_aligned_mem_complex	  s
    r9  c             C   s   t |}xt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< |||< | || t|| jdkr|| j||< | || qW d S )NrM  )rG   r+  )r2  r3  rG   .ri   )r{  r   rk   rf   rP   rE   r9   r   rG   itemsizer4  r5  rW  r@   rS   )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	|\}}x&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gD ]\}}}t||| qlW d S )Nr   )rG   r   )r   r   i N  r+  )r2  r3  rG   T)rH  )rI  )rH  rI  )rP   rF   r   r:   r@   r4  r5  rW  r5   r   r	   dictr
   r   r   r   r   r   r   r   r   r   r   r=  )	r   Rr#  r   rf  pivr;  r   r<  rX   rX   rY   test_lapack_misaligned 
  s4    

rB  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 )N)ru   ru   )rL   r	   )rz   rX   rX   rY   test_eig#
  s    zTestOverwrite.test_eigc             C   s   t tdg t tddg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   rJ  '
  s    zTestOverwrite.test_eighc             C   s   t tdg d S )N)ru   rN   )rL   r   )rz   rX   rX   rY   r  +
  s    zTestOverwrite.test_eig_bandedc             C   s   t tdg d S )N)ru   ru   )rL   r
   )rz   rX   rX   rY   test_eigvals.
  s    zTestOverwrite.test_eigvalsc             C   s   t tdg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   test_eigvalsh1
  s    zTestOverwrite.test_eigvalshc             C   s   t tdg d S )N)ru   rN   )rL   r   )rz   rX   rX   rY   r  4
  s    z!TestOverwrite.test_eigvals_bandedc             C   s   t tdg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   test_hessenberg7
  s    zTestOverwrite.test_hessenbergc             C   s   t tdg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   test_lu_factor:
  s    zTestOverwrite.test_lu_factorc                sB   t dddgdddgdddgg}t| t fd	d
dg d S )Nri   rN   ru   r+  rv   rw   r[   rM  c                s
   t  | S )N)r   )r   )xlurX   rY   r  @
  r  z-TestOverwrite.test_lu_solve.<locals>.<lambda>)ru   )rP   r3   r   rL   )rz   rd   rX   )rI  rY   test_lu_solve=
  s    "zTestOverwrite.test_lu_solvec             C   s   t tdg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   ro  B
  s    zTestOverwrite.test_luc             C   s   t tdg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   test_qrE
  s    zTestOverwrite.test_qrc             C   s   t tdg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   test_rqH
  s    zTestOverwrite.test_rqc             C   s   t tdg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   
test_schurK
  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   r  O
  r  z2TestOverwrite.test_schur_complex.<locals>.<lambda>)ru   ru   )dtypes)rL   rP   r;   r  )rz   rX   rX   rY   test_schur_complexN
  s    z TestOverwrite.test_schur_complexc             C   s    t tdg t dd dg d S )N)ru   ru   c             S   s   t | ddS )Nr  )r  )r   )rr   rX   rX   rY   r  T
  r  z(TestOverwrite.test_svd.<locals>.<lambda>)rL   r   )rz   rX   rX   rY   test_svdR
  s    zTestOverwrite.test_svdc             C   s   t tdg d S )N)ru   ru   )rL   r   )rz   rX   rX   rY   test_svdvalsV
  s    zTestOverwrite.test_svdvalsN)r   r   r   rD  rJ  r  rE  rF  r  rG  rH  rJ  ro  rK  rL  rM  rO  rP  rQ  rX   rX   rX   rY   rC  "
  s    rC  c             C   s   t j| dftd|}t |j}d| }t|}t|j| df t	||
 |d t|j}t|jd t	||
 |d | dkr|st jd t j| dt jd|  }|dt j| d t jd|   }||}t|d	d
}t|j| df t|dd
}t|j| df d S )NrN   )rG   i  ri   )r   )rN   ri   rv   g-C6?gMbP?)rcondgư>rw   )rP   r5   r   rT   r`   epsr   r   r@   r   ZmeanrS   rK   rJ   rQ   )rU   rG   skip_bigr  rS  tolYrX   rX   rY   _check_orthZ
  s$    
$
rW  rM  z"test only on 64-bit, else too slowc              C   s:   d} yt | tjdd W n tk
r4   tdY nX d S )Ni T)rT  z.memory error perhaps caused by orth regression)rW  rP   r  MemoryErrorr7  )rU   rX   rX   rY   test_orth_memory_efficiencyu
  s
    rY  c              C   sJ   t jt jt jt jg} dddddg}x"t| |D ]\}}t|| q0W d S )Nri   rN   ru   r   r   )rP   r;   r  r<   r  	itertoolsproductrW  )rN  r  r9  rU   rX   rX   rY   	test_orth
  s    r\  c              C   s  t jd t jt jt jt jg} dddddg}xt| |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r>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 q>W d S )Nri   rN   ru   r   r   )rG   i  r   )r   )rN   ri   rv   g-C6?gMbP?)rR  gư>rw   )rP   rK   rJ   r;   r  r<   r  rZ  r[  r5   r`   rS  r$   r   r@   r   rS   ZrandnrQ   rT   )rN  r  r9  rU   r  rS  rU  rV  rX   rX   rY   test_null_space
  s4    
$
r]  c           	   C   sf  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 x0||fD ]$}tt||t|jd dd q|W tddd	d
gddddgddddgddddg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dddgdddgdddgdddgdddgg}tdddgdddgdddgdddgdddg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 )#NrM  ru   g       @g+=)r   ri   g4?gVRf?g8!@g6?gN$ЗW?gJg~'@g3:]$gvMg ۿgPT#ge,?g΀?g+?gNG@gS<ʿg"	?rN   r   g-q=)r   gL0?gĹ-?gyv?r   y      ?      ?y      ?      g        )r!   r   r   r    rP   pir9   r@   r3   r   r   )HrW   r   rd   r  rr   r   rX   rX   rY   test_subspace_angles
  s\    
  


0022220r`  c               @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestCDF2RDFc             C   s   t d||S )Nz...ij,...jk->...ik)rP   Zeinsum)rz   rr   r   rX   rX   rY   matmul
  s    zTestCDF2RDF.matmulc             C   s   t | ||| || d S )N)r   rb  )rz   r{   ro   rd   rX   rX   rY   assert_eig_valid
  s    
zTestCDF2RDF.assert_eig_validc             C   s@   t d}t dt d }}t||\}}| ||| d S )N)r   r   r   )rP   r   r%   rc  )rz   r  r{   ro   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 )Nri   rN   ru   r   )rP   r3   r7   r	   r%   rc  )rz   r  r{   ro   rd  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 )Nri   rN   r   )rP   r3   r7   r	   r%   rc  )rz   r  r{   ro   rd  r   rX   rX   rY   test_single_array2x2_complex  s    z(TestCDF2RDF.test_single_array2x2_complexc             C   sR   t dddgdddgdddgg}t j|\}}t||\}}| ||| d S )Nri   rN   ru   rv   rw   )rP   r3   r7   r	   r%   rc  )rz   r  r{   ro   rd  r   rX   rX   rY   test_single_array3x3_real	  s    "z%TestCDF2RDF.test_single_array3x3_realc             C   sR   t dddgdddgdddgg}t j|\}}t||\}}| ||| d S )Nri   rN   ru   r   r+  rv   r  )rP   r3   r7   r	   r%   rc  )rz   r  r{   ro   rd  r   rX   rX   rY   test_single_array3x3_complex  s    "z(TestCDF2RDF.test_single_array3x3_complexc             C   s`   xZt ddD ]L}tjd tjd||}tj|\}}t||\}}| ||| qW d S )Nri   r[   iɚ;r   )	r   rP   rK   rJ   rQ   r7   r	   r%   rc  )rz   r   r  r{   ro   rd  r   rX   rX   rY   test_random_1d_stacked_arrays  s    z)TestCDF2RDF.test_random_1d_stacked_arraysc             C   sV   xPt ddD ]B}tjdd||}tj|\}}t||\}}| ||| qW d S )Nri   r[   r   )r   rP   rK   rQ   r7   r	   r%   rc  )rz   r   r  r{   ro   rd  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   )rN   )rP   r   r3   r   r   r%   )rz   r{   ro   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 )Nru   rw   rN   )rP   r:   r   r   r   r%   )rz   r{   ro   rX   rX   rY   r   *  s    z!TestCDF2RDF.test_not_square_errorc             C   sD   t dddgdddgdddgg}t j|\}}ttt|| d S )Nri   rN   ru   r   r+  rv   r  )rP   r3   r7   r	   r   r   r%   )rz   r  r{   ro   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 )Nru   r   r+  )rP   r:   r   r   r   r%   )rz   r{   ro   rX   rX   rY   test_non_associated_error5  s    z%TestCDF2RDF.test_non_associated_errorc             C   s   t dddgdddgdddgg}t j|\}}ttt|| t dddgdddgdddggdddgdddgdddggg}t j|\}}ttt|| d S )Nri   rN   ru   rv   y      @      ?y      @      )rP   r3   r7   r	   r   r   r%   )rz   r  r{   ro   rX   rX   rY   test_not_conjugate_pairs:  s    " z$TestCDF2RDF.test_not_conjugate_pairsN)r   r   r   rb  rc  re  rf  rg  rh  ri  rj  rk  rl  r   rm  rn  ro  rX   rX   rX   rY   ra  
  s   	ra  )r[   )F)rj  Z	__usage__rZ  platformnumpyrP   Znumpy.testingr   r   r   r   r   r   r   r   r   Zscipy.linalgr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   Zscipy.linalg.lapackr'   r(   r)   r*   r+   r,   r-   r.   r/   Zscipy.linalg.miscr0   Zscipy.linalg._decomp_qzr1   Zscipy.statsr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   Znumpy.randomrJ   rK   Zscipy.linalg._testutilsrL   Zscipy.sparse.sputilsrM   r   rZ   r  ZREAL_DTYPESr  rO   r6  r]   rh   rq   rs   objectrt   r   r   r  r)  rL  ri  rk  rp  r  r  r  r  r  r  r  r  r  r  r  r'  r6  r   skipmachiner8  r9  r=  r   rB  rC  rW  r  ZskipifZintpr:  rY  r\  r]  r`  ra  rX   rX   rX   rY   <module>   s    ,d
 [  o O 9    "h`K 1 K#!8
&: