U
    »mœd„¦ ã                   @   s  d Z dZddlZddlZddlZddlZddlmZm	Z	m
Z
mZmZmZ ddlZddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< dd	l=m>Z> dd
l?m@Z@ ddlmAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddlXmYZYmZZZ ddl[m\Z\ ddl]m^Z^ ddl_m`Z` ddlambZb decfdd„ZdejIejegZfejJejggZhefeh Zidfdd„Zjdd„ Zkdd„ Zldd„ ZmG dd„ dƒZnG dd „ d ƒZoG d!d"„ d"ƒZpG d#d$„ d$ƒZqG d%d&„ d&ƒZrG d'd(„ d(ƒZsG d)d*„ d*esƒZtG d+d,„ d,ƒZuG d-d.„ d.ƒZvG d/d0„ d0evƒZwG d1d2„ d2ƒZxG d3d4„ d4ƒZyG d5d6„ d6ƒZzG d7d8„ d8ƒZ{G d9d:„ d:ƒZ|G d;d<„ d<ƒZ}G d=d>„ d>ƒZ~d?d@„ ZG dAdB„ dBƒZ€G dCdD„ dDƒZ�G dEdF„ dFƒZ‚dGdH„ Zƒej„j…e †¡ dIkdJdK�dLdM„ ƒZ‡dNdO„ ZˆdPdQ„ Z‰ej„jŠddRdS�dTdU„ ƒZ‹G dVdW„ dWƒZŒdgdXdY„Z�ej„jŽej„j…e Uej�¡j�dZk d[dK�d\d]„ ƒƒZ‘d^d_„ Z’d`da„ Z“dbdc„ Z”G ddde„ deƒZ•d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Úget_lapack_funcs)Ú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 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 nù              ð?é   )	ÚCOMPLEX_DTYPESÚnprL   ÚrandÚconjÚTr?   rG   Úastype)ÚnÚposdefrH   ÚA© r\   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/linalg/tests/test_decomp.pyÚ_random_hermitian_matrix3   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 numberrQ   ç       @)Úout)rT   Z
asanyarrayZiscomplexobjÚ
clear_fussÚrealÚimagÚfinforH   ZnmantÚfrexpZrintÚldexp)ÚarZfuss_binary_bitsÚxZsignificant_binary_bitsZx_mantZx_expÚfr\   r\   r]   rb   G   s    

rb   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 "{}"))Ú
isinstancerF   rH   r   Úformat)ZactZdesr\   r\   r]   Úassert_dtype_equalX   s    


ÿrm   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'.
    rR   é   r   zinput type not supported.ç      à?)rk   ÚintrL   rF   ÚlenrA   Ú	TypeErrorr3   ZrvsrW   rV   r5   )Zdim_or_eigvÚdimÚdÚvÚhr\   r\   r]   Úsymrandi   s    	

ÿ

rw   c                 C   s4   t | ƒt | ƒ }}|dt|ƒt|ƒ   }| |¡S )NrQ   )rw   rI   rJ   rX   )rs   rH   Za1Za2Úar\   r\   r]   Ú_complex_symrandƒ   s    ry   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 )	Nrn   rR   é   é   é   é	   é]   r   ©r
   r?   r   ©Úselfrx   ÚwÚexact_wr\   r\   r]   Ú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 )
Nrn   rR   r{   r|   r}   rt   r~   r   r   )r4   rW   Úcopyr
   r?   r   r�   r\   r\   r]   Ú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 )	Nrn   rR   r{   r|   ù      @      ð?y      "@      ð?y      W@      @r   r€   r�   r\   r\   r]   Ú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 )Nrn   rR   r{   r|   r}   F©Úcheck_finiter~   r   r   r€   r�   r\   r\   r]   Útest_finite¢   s    "zTestEigVals.test_finiteN)Ú__name__Ú
__module__Ú__qualname__r…   r‡   r‰   rŒ   r\   r\   r\   r]   rz   Š   s   rz   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 ƒ ƒ tdƒD ]4}t||d d …|f  || |d d …|f  ƒ �q4t|ddd�\}}tdƒD ]6}t|j|d d …|f  || |d d …|f  ƒ �q„d S )Nrn   rR   r{   r|   r}   r~   r   r   ç      @éÿÿÿÿ©r   r   ©r   rn   ©r   rR   ©ÚleftÚright)r4   r	   r?   r1   r   rC   ÚrangerW   ©	r‚   rx   rƒ   ru   r„   Zv0Zv1Zv2Úir\   r\   r]   r…   «   s$     "
"""2zTestEig.test_simplec                 C   sÀ   t ddgddggƒ}t|ddd�\}}}t|t ddgƒƒ tdƒD ]2}t||d d …|f  || |d d …|f  ƒ qBtdƒD ]<}t| ¡ j|d d …|f  ||  ¡ |d d …|f  ƒ q~d S )Nrn   rR   éþÿÿÿr–   ù      ð?       @y      ð?       À)r4   r	   r   r™   rV   rW   ©r‚   rx   rƒ   ZvlÚvrr›   r\   r\   r]   Útest_simple_complex_eig¿   s    0ÿ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�\}}}tdƒD ]2}t||d d …|f  || |d d …|f  ƒ q<tdƒD ]<}t| ¡ j|d d …|f  ||  ¡ |d d …|f  ƒ qxd S )Nrn   rR   r{   r|   rˆ   r–   )r4   r	   r™   r   rV   rW   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 )Nrn   r   T©Zhomogeneous_eigvals)rn   r   r“   )r	   r   r   r   rT   Úinf)r‚   rx   Úbrƒ   rŸ   r\   r\   r]   Ú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  }	t|jd ƒD ].}
t|d d …|
f |	d d …|
f dd|d� q¢|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
|ƒ¡}tt
|ƒƒD ]}
t|d d …|
f ƒ||
< �q`t|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 ƒ||
< �q®t|t |j¡|d� tt|ƒt|t |¡ ƒƒ d S )Nz
%r
%rTr¡   rn   r   g‚vIhÂ%<=©ÚrtolÚatolÚerr_msggH¯¼šò×z>)r§   r¦   r¨   )r¨   r§   r¦   ©r¨   )rD   rT   rG   rA   r	   r
   r™   r   ZlexsortÚemptyrq   r1   r6   ÚsizeÚallrE   r9   rb   rB   )r‚   r[   ÚBÚB0Úmsgrƒ   rŸ   ÚwtZval1Zval2r›   ÚpermZpermtÚlengthZbeta_nonzeroZwhÚresZw_finZwt_finr\   r\   r]   Ú_check_gen_eigÞ   sx      ÿ


"ÿ ÿ
  ÿ
  ÿ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 5 Q R X d S ) Né   é"   é   é   é-   é*   é   é   é'   é/   é1   é   é   é   é   é&   é,   é   é   é   é   é.   é(   é%   é   é   é   é#   é   Úignore©r¬   )r4   rT   Úerrstater´   ©r‚   r[   r­   r\   r\   r]   Ú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 5 Q R X d S )	Nrn   r   r{   rR   r’   ©r{   r{   rÔ   rÕ   )r5   r4   r:   rG   rT   ÚblockrÖ   r´   )r‚   ÚMÚKÚDÚZZI3r[   r­   r\   r\   r]   Útest_falker2  s      zTestEig.test_falkerc              	   C   sT   dd„ }t jdd��6 tdƒD ]&}||d d d�\}}|  ||¡ qW 5 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 )Né÷ÿÿÿrR   rn   r   r\   )ÚomegaÚc1Úc2r[   r­   r\   r\   r]   ÚmatricesB  s    



ý


ýz)TestEig.test_bad_geneig.<locals>.matricesrÔ   rÕ   éd   ç      @)rá   )rT   rÖ   r™   r´   )r‚   rä   Úkr[   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Ù   rQ   )rK   rw   r´   rL   r×   r\   r\   r]   Útest_make_eigvalsV  s    zTestEig.test_make_eigvalsc           	      C   sn  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 ƒ ƒ tdƒD ]4}t||d d …|f  || |d d …|f  ƒ �q4d S )Nrn   rR   r{   r|   r}   FrŠ   r~   r   r   r‘   r’   r“   r”   r•   )r	   r?   r4   r1   r   rC   r™   rš   r\   r\   r]   Útest_check_finited  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.r}   r{   rR   N)rT   r;   ÚreshapeÚassert_raisesÚ
ValueErrorr	   )r‚   r[   r\   r\   r]   Útest_not_square_erroru  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.rR   ç      "@r{   N)rG   rT   r;   rì   rí   rî   r	   r×   r\   r\   r]   Útest_shape_mismatchz  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   s   |   ¡  d S ©N)Úcreate_bandmat©r‚   r\   r\   r]   Ú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�| _t|ƒD ]J}t| j|ƒ| j|| d ||…f< t| j|ƒ| j|| d ||…f< �qJd| j  | j d }t||ftd�| _t| jƒ| jd| j  dd…f< t| j ƒD ]l}t| j|d ƒ| jd| j  d | |d |…f< t| j| d ƒ| jd| j  d | d|d | …f< �qät||ftd�| _t| jƒ| jd| j  dd…f< t| j ƒD ]l}t| j|d ƒ| jd| j  d | |d |…f< t| j| d ƒ| jd| j  d | d|d | …f< �qŒdt|ƒ | _| jd | _dS )zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.é
   rR   ç      ð?rn   ç      ð¿r’   g       Àrœ   rQ   ç      Àr`   N©rH   r   ù      ð?      ð?)ÚKLÚKUr5   r7   Úsym_matÚherm_matÚreal_matÚcomp_matr8   r	   rc   r9   Ú	w_sym_linÚevec_sym_linÚ
w_herm_linÚevec_herm_linr:   Ú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   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.rn   ©Ú	compute_vN)r+   r  r9   r   rB   r  Úabsr  ©r‚   rƒ   ÚevecÚinfoÚevec_r\   r\   r]   Ú
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.rn   r  N)r,   r  r9   r   rB   r  r  r  r  r\   r\   r]   Ú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.ç        rn   rR   ©r  r™   N)
rA   r  r-   r  r9   r   rB   r  r  r  ©r‚   r  rƒ   r  ÚnumZifailr  r  r\   r\   r]   Ú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.rn   r  N)r.   r  r9   r   rB   r  r  r	  r  r\   r\   r]   Útest_zhbevdó  s    zTestEigBanded.test_zhbevdc              	   C   sl   t | jƒ\}}t| jddd|ddd�\}}}}}|dd…t|ƒf }tt|ƒ| jƒ tt|ƒt| j	ƒƒ dS )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.r  rn   rR   r  N)
rA   r  r/   r  r9   r   rB   r  r  r	  r   r\   r\   r]   Ú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.rR   r}   r›   ©ÚselectÚselect_rangern   çñhãˆµøä>ru   FrŠ   N)
r   r  rc   r   rB   r  r  r  rT   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  sV    


 ÿÿ ÿÿ ÿÿþÿ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. NrR   r}   r›   r%  rn   r(  ru   FrŠ   )r   r  r9   rc   r   rB   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_indr.  Zevec_herm_indr/  r0  r1  Zevec_sym_valr2  Zevec_herm_valr\   r\   r]   Útest_eig_banded0  st    þ
ÿÿþ
ÿÿþ
ÿÿþ
ÿÿzTestEigBanded.test_eig_bandedc                 C   s¨   t | jƒ\}}t| j| j| jƒ\}}}t|d| j dd…f ƒ}t| j| j ƒD ]4}|t|d| j d | |d |…f |d ƒ7 }qPt| jdd�\}}	}
t	||
ƒ dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rR   Nrn   r   ©Z	permute_l)
rA   r  r'   r  r   r  r5   r™   r   r   ©r‚   rÛ   r  Úlu_symm_bandÚipivr  Úur›   Zp_linZl_linZu_linr\   r\   r]   Útest_dgbtrfj  s    2zTestEigBanded.test_dgbtrfc                 C   s¨   t | jƒ\}}t| j| j| jƒ\}}}t|d| j dd…f ƒ}t| j| j ƒD ]4}|t|d| j d | |d |…f |d ƒ7 }qPt| jdd�\}}	}
t	||
ƒ dS )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rR   Nrn   r   r5  )
rA   r  r)   r  r   r  r5   r™   r   r   r6  r\   r\   r]   Útest_zgbtrfx  s    2zTestEigBanded.test_zgbtrfc                 C   sP   t | j| j| jƒ\}}}t|| j| j| j|ƒ\}}t | j| j¡}t	||ƒ dS )zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r'   r  r   r  r(   r£   r8   r   r  r   ©r‚   r7  r8  r  ÚyZy_linr\   r\   r]   Ú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  r8   r   r  r   r<  r\   r\   r]   Útest_zgbtrs�  s    zTestEigBanded.test_zgbtrsN)r�   rŽ   r�   rù   r÷   r  r  r"  r#  r$  r3  r4  r:  r;  r>  r?  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   s   |   ¡  d S rö   )Úcreate_trimatrø   r\   r\   r]   rù   œ  s    zTestEigTridiagonal.setup_methodc                 C   s‚   d}t |dƒ| _t |d dƒ| _t| jƒt| jdƒ t| jdƒ | _t | j¡\}}|j}t|ƒ}|| | _	|dd…|f | _
dS )z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.rú   rû   rn   rü   r’   N)r7   rt   Úer5   Zfull_matr8   r	   rc   r9   rƒ   r  )r‚   r  r  r  r  r\   r\   r]   rA  Ÿ  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’   rQ   rû   ©Úlapack_driverÚfoor›   ©r   r’   r%  )rí   rî   r"   rt   rB  rr   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� q0dD ]È}t | j| jdd	t| jƒd
 f|d�}tt|ƒ| jƒ d}d}t | j| jd||f|d�}tt|ƒ| j||d
 … ƒ | j| d }| j| d }t | j| jd||f|d�}tt|ƒ| j||d
 … ƒ qTdS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)ÚsterfÚstevÚstebzÚstemrÚautorC  )rH  rI  rI  r›   r”   ©rD  r&  r'  ©rJ  rK  rL  r   rn   ©r&  r'  rD  rR   r}   r(  ru   N)	r"   rt   rB  r   rB   rƒ   rí   rî   rq   )	r‚   Údriverrƒ   Zw_indr+  r,  r/  r0  Zw_valr\   r\   r]   Útest_eigvalsh_tridiagonal½  sL     þ   þ   þ   þz,TestEigTridiagonal.test_eigvalsh_tridiagonalc           	   	   C   sÔ  t tt| j| jdd� dD ]R}t| j| j|d�\}}|dd…t|ƒf }tt|ƒ| jƒ tt	|ƒt	| j
ƒƒ qt tt| j| jdddd� d	D �]@}d
}t| jƒd }t| j| jd||f|d�\}}tt|ƒ| jƒ tt	|ƒt	| j
ƒƒ d}d}t| j| jd||f|d�\}}tt|ƒ| j||d … ƒ tt	|ƒt	| j
dd…||d …f ƒƒ | j| d }| j| d }t| j| jd||f|d�\}}tt|ƒ| j||d … ƒ tt	|ƒt	| j
dd…||d …f ƒƒ qŒdS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. rH  rC  )rJ  rI  rK  rL  NrI  r›   r”   rM  rN  r   rn   rO  rR   r}   r(  ru   )rí   rî   r#   rt   rB  r9   r   rB   rƒ   r  r  rq   )	r‚   rP  rƒ   r  r  r+  r,  r/  r0  r\   r\   r]   Útest_eigh_tridiagonalß  sf    ÿ  ÿ
   þ
   þ
ÿ   þ
ÿz(TestEigTridiagonal.test_eigh_tridiagonalN)r�   rŽ   r�   rù   rA  rG  rQ  rR  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e	j
 de¡e	j
 dd¡dd„ ƒƒZe	j
 dd¡e	j
 dd¡dd„ ƒƒZdd„ Ze	j
 deeg¡dd„ ƒZdd„ ZdS )ÚTestEighc                 C   s   t dƒ d S ©Nré   ©rK   rø   r\   r\   r]   Úsetup_class  s    zTestEigh.setup_classc              
   C   sn  t ttt ddg¡ƒ t ttt ddg¡t ddg¡ƒ t ttt ddg¡t ddg¡ƒ t ttt ddg¡t ddg¡dd� t ttt ddg¡t ddg¡ddgddgd� tj ¡ �B}| td¡ t ttt ddg¡t ddg¡ddgddgd� W 5 Q R X t ttt ddg¡t ddg¡d	dgd
� tj ¡ �<}| td¡ t ttt ddg¡t ddg¡d	dgd� W 5 Q R X t ttt ddg¡t ddg¡ddgd
� tj ¡ �<}| td¡ t ttt ddg¡t ddg¡ddgd� W 5 Q R X t ttt ddg¡t ddg¡dd	gd
� tj ¡ �<}| td¡ t ttt ddg¡t ddg¡dd	gd
� W 5 Q R X t ttt ddg¡t ddg¡dd	gd� t ttt ddg¡dd� t ttt ddg¡d dd� t ttt ddg¡t ddg¡ddd� t ttt ddg¡t ddg¡dddgdd� tj ¡ �@}| td¡ t ttt ddg¡t ddg¡dddgdd� W 5 Q R X d S )Nrn   rR   r{   é   )Útype)Úsubset_by_valueÚsubset_by_indexzKeyword argument 'eigvals)rY  r
   r   ©rZ  ©r
   rœ   ©rY  Zwrong©rP  ÚgvxÚevrF)rP  ÚturboÚgvd)rP  rZ  ra  z 'eigh' keyword argument 'eigvals)	rí   rî   r   rT   r6   ÚtestingÚsuppress_warningsÚfilterÚDeprecationWarning)r‚   Úsupr\   r\   r]   Útest_wrong_inputs  sz    ""ÿ ÿ ÿÿÿÿÿÿÿÿ ÿ  ÿ  ÿzTestEigh.test_wrong_inputsc                 C   s&   t ttt ddg¡t ddg¡ƒ d S )Nr{   )rí   r&   r   rT   r6   rø   r\   r\   r]   Útest_nonpositive_bF  s    zTestEigh.test_nonpositive_bc                 C   s²   t tƒD ]¤\}}td|d�}t|ddgd�\}}t|jd t|ƒƒ t|dk|dk @ ƒs\t‚tdd|d�}t||ddgd�\}}t|jd t|ƒƒ t|dk|dk @ ƒst‚qd S )	Né   rþ   rœ   rR   r]  rn   T)rZ   rH   )	Ú	enumerateÚDTYPESr^   r   r   rA   rq   r¬   ÚAssertionError)r‚   ÚindÚdtrx   rƒ   ru   r£   r\   r\   r]   Útest_value_subsetsJ  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 )Nrn   rR   r_   r{   r|   )r4   r   )r‚   rx   r£   rƒ   Úzr\   r\   r]   Útest_eigh_integerW  s    zTestEigh.test_eigh_integerc                 C   s>   dd l }|j d¡ ¡ }t |¡}ttt|ƒ ttt|ƒ d S )Nr   rR   )	Zscipy.sparseÚsparseÚidentityZtocscrT   Z
atleast_2drí   rî   r   )r‚   Zscipyrx   r£   r\   r\   r]   Útest_eigh_of_sparse]  s
    
zTestEigh.test_eigh_of_sparseÚdtype_rP  )r  Zevdr`  Zevxc                 C   sH   t d|d�}t||d�\}}t|| ||  ddt |¡j dd� d S )Nrj  )rY   rH   r^  r  éè  ©r§   r¦   )r^   r   r   rT   re   Úeps)r‚   rP  rv  rx   rƒ   ru   r\   r\   r]   Útest_various_drivers_standarde  s    þz&TestEigh.test_various_drivers_standardrX  )rn   rR   r{   )Úgvrb  r_  c                 C   sª   t  d¡}tdƒ}tddd�}t||||d�\}}|dkr\t|| |||   d|dd� nJ|d	kr†t|| | ||  d|dd� n t|| | ||  d|dd� d S )
Ng     ˆ³@rj  T©rZ   )rx   r£   rP  rX  rn   r  rx  rR   )rT   Úspacingr^   r   r   )r‚   rP  rX  r§   rx   r£   rƒ   ru   r\   r\   r]   Ú test_various_drivers_generalizedn  s    
""z)TestEigh.test_various_drivers_generalizedc                 C   s˜   t dƒ}t|ddgd�}tt|ƒdƒ t|ddgd�}tt|ƒdƒ t||ƒ t dddddg¡}t|ddgd	�}tt|ƒdƒ t|t ddg¡ƒ d S )
Nr|   rn   rR   r[  ç333333ó?gÍÌÌÌÌÌô?ç      ø?gffffffö?r]  )r^   r   r   rq   r   rT   r5   r4   )r‚   rx   rƒ   Zw2r£   Zw3r\   r\   r]   Útest_eigvalsh_new_args|  s    
zTestEigh.test_eigvalsh_new_argsÚmethodc              	   C   s`   t jtdd�� |t d¡dd� W 5 Q R X t jtdd�� |t d¡ddgd	� W 5 Q R X d S )
NúKeyword argument 'turbo')Úmatch©rR   rR   T©ra  úKeyword argument 'eigvals'r   rn   r\  )rò   Zwarnsrf  rT   r:   )r‚   r‚  r\   r\   r]   Útest_deprecation_warningsŠ  s    ÿÿz"TestEigh.test_deprecation_warningsc              	   C   sÐ   t dƒ}t ddd�}tj ¡ �$}| td¡ t||dd�\}}W 5 Q R X t||dd�\}}t||ƒ t||ƒ tj ¡ �&}| td¡ t|d	d
gd�\}}W 5 Q R X t|d	d
gd�\}}t||ƒ t||ƒ d S )Nr{   Tr|  rƒ  r†  rb  r^  r‡  r   rn   r\  r[  )r^   rT   rc  rd  re  rf  r   r   )r‚   rx   r£   rg  Zw_depZv_deprƒ   ru   r\   r\   r]   Útest_deprecation_results“  s    


z!TestEigh.test_deprecation_resultsN)r�   rŽ   r�   rV  rh  ri  rp  rr  ru  rò   ró   Úparametrizerl  rz  r~  r�  r   r   rˆ  r‰  r\   r\   r\   r]   rS  
  s    8
rS  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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 )Nrn   rR   r{   r|   r}   ù              @rW  r_   é   r~   rQ   ù               @ù              @y              @y              @y              @y               @y              "@rú   é   )rÉ   rÍ   )r4   rx   Úcar£   ÚcbÚhrectÚchrectÚvrectÚcvrectrL   ÚmedÚcmedrø   r\   r\   r]   rù   ©  s"    """"(

þ
*ý

zTestLU.setup_methodc                 C   sB   t |ƒ\}}}t|| | |ƒ t |dd�\}}t|| |ƒ d S )Nrn   r5  )r   r   )r‚   ÚdataÚpÚlr9  Úplr\   r\   r]   Ú_test_commonÁ  s    zTestLU._test_commonc                 C   sD   t |ƒ\}}td|fƒ\}||dd�\}}}t||ƒ t||ƒ d S )N)ÚgetrfF©Úoverwrite_a)r   r0   r   )r‚   r™  Zl_and_u1Zpiv1rž  Zl_and_u2Zpiv2Ú_r\   r\   r]   Ú_test_common_lu_factorÇ  s
    
zTestLU._test_common_lu_factorc                 C   s   |   | j¡ d S rö   )r�  rx   rø   r\   r\   r]   r…   Ð  s    zTestLU.test_simplec                 C   s   |   | j¡ d S rö   )r�  r‘  rø   r\   r\   r]   r‰   Ó  s    zTestLU.test_simple_complexc                 C   s   |   | j¡ d S rö   )r�  r£   rø   r\   r\   r]   Útest_simple2Ö  s    zTestLU.test_simple2c                 C   s   |   | j¡ d S rö   )r�  r’  rø   r\   r\   r]   Útest_simple2_complexÙ  s    zTestLU.test_simple2_complexc                 C   s   |   | j¡ |  | j¡ d S rö   )r�  r“  r¢  rø   r\   r\   r]   Útest_hrectangularÝ  s    zTestLU.test_hrectangularc                 C   s   |   | j¡ |  | j¡ d S rö   )r�  r•  r¢  rø   r\   r\   r]   Útest_vrectangulará  s    zTestLU.test_vrectangularc                 C   s   |   | j¡ |  | j¡ d S rö   )r�  r”  r¢  rø   r\   r\   r]   Útest_hrectangular_complexå  s    z TestLU.test_hrectangular_complexc                 C   s   |   | j¡ |  | j¡ d S rö   )r�  r–  r¢  rø   r\   r\   r]   Útest_vrectangular_complexé  s    z TestLU.test_vrectangular_complexc                 C   s   |   | j¡ |  | j¡ dS ©z:Check lu decomposition on medium size, rectangular matrix.N)r�  r—  r¢  rø   r\   r\   r]   Útest_medium1î  s    zTestLU.test_medium1c                 C   s   |   | j¡ |  | j¡ dS r©  )r�  r˜  r¢  rø   r\   r\   r]   Útest_medium1_complexó  s    zTestLU.test_medium1_complexc                 C   s,   t | jdd�\}}}t|| | | jƒ d S )NFrŠ   )r   rx   r   )r‚   rš  r›  r9  r\   r\   r]   rë   ø  s    zTestLU.test_check_finitec                 C   sd   d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d S )N©ÚCÚFrR   rn   r   rû   ©Úorder)rT   r4   r   r   r   )r‚   r°  r[   Ú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]   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ù   rx   rX   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   s   t dƒ d S rT  rU  rø   r\   r\   r]   rù     s    zTestLUSolve.setup_methodc                 C   sR   t dƒ}t dƒ}dD ]8}tj||d�}t||ƒ}t|ƒ}t||ƒ}t||ƒ qd S )N©rú   rú   ©rú   r¬  r¯  )rL   rT   r4   r   r   r   r   )r‚   Za0r£   r°  rx   Ú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Š   )rL   r   r   r   r   )r‚   rx   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   s   d| _ tdƒ d S )NZgesddré   ©rD  rK   rø   r\   r\   r]   rù   3  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 )Nrû   rC  rE  )rí   rr   r   rî   rø   r\   r\   r]   rG  7  s    zTestSVD_GESDD.test_degeneratec                 C   sº   dddgdddgdddgg}dD ]”}t ||| jd�\}}}t|j| tdƒƒ t|j| tdƒƒ t|jd	 |jd	 f|jjƒ}t	t
|ƒƒD ]}|| |||f< qŒt|| | |ƒ q d S )
Nrn   rR   r{   rj  r|   r}   ©TF©Úfull_matricesrD  r   ©r   rD  r   rW   rG   r:   rA   rH   Úcharr™   rq   ©r‚   rx   rÁ  r9  ÚsÚvhÚsigmar›   r\   r\   r]   r…   ;  s    ÿzTestSVD_GESDD.test_simplec                 C   sº   dddgdddgdddgg}dD ]”}t ||| jd�\}}}t|j| tdƒƒ t|j| tdƒƒ t|jd |jd f|jjƒ}t	t
|ƒƒD ]}|| |||f< qŒt|| | |ƒ q d S )	Nrn   rR   r{   r|   r}   r¿  rÀ  r   rÂ  rÄ  r\   r\   r]   Útest_simple_singularG  s    ÿz"TestSVD_GESDD.test_simple_singularc                 C   s¤   dddgdddgg}dD ]†}t ||| jd�\}}}t|j| t|jd	 ƒƒ t|jd	 |jd	 f|jjƒ}t	t
|ƒƒD ]}|| |||f< qvt|| | |ƒ qd S )
Nrn   rR   r{   rW  r|   r}   r¿  rÀ  r   ©r   rD  r   rW   rG   rA   r:   rH   rÃ  r™   rq   rÄ  r\   r\   r]   Útest_simple_underdetS  s    ÿz"TestSVD_GESDD.test_simple_underdetc                 C   sº   ddgddgddgg}dD ]š}t ||| jd�\}}}t|j| t|jd ƒƒ t|j| tdƒƒ t|jd |jd f|jjƒ}t	t
|ƒƒD ]}|| |||f< qŒt|| | |ƒ qd S )	Nrn   rR   rW  r|   r{   r¿  rÀ  r   rÉ  rÄ  r\   r\   r]   Útest_simple_overdet^  s    ÿz!TestSVD_GESDD.test_simple_overdetc           
      C   sÞ   d}d}t dƒD ]È}t||gƒt||gƒfD ]ª}dD ] }t||| jd�\}}}t|j| t|jd ƒƒ t||j t|jd ƒƒ t|jd |jd f|j	j
ƒ}	t t|ƒƒD ]}|| |	||f< q¬t||	 | |ƒ q4q,qd S )Nrj  rÅ   r{   r¿  rÀ  rn   r   )r™   rL   r   rD  r   rW   rG   rA   r:   rH   rÃ  rq   )
r‚   rY   Úmr›   rx   rÁ  r9  rÅ  rÆ  rÇ  r\   r\   r]   Útest_randomj  s    ÿzTestSVD_GESDD.test_randomc                 C   sÎ   dddgdddgdddgg}dD ]¨}t ||| jd�\}}}t| ¡ j| t|jd ƒƒ t| ¡ j| t|jd	 ƒƒ t|jd	 |jd	 f|jj	ƒ}t
t|ƒƒD ]}|| |||f< q t|| | |ƒ q d S )
Nrn   rR   r{   rŽ  r|   r}   r¿  rÀ  r   )r   rD  r   rV   rW   rG   rA   r:   rH   rÃ  r™   rq   rÄ  r\   r\   r]   r‰   y  s    ÿz!TestSVD_GESDD.test_simple_complexc           
      C   sÞ   d}d}t dƒD ]È}dD ]¾}t||gƒt||gƒfD ] }|dtt|jƒƒ  }t||| jd�\}}}t| ¡ j| t	|jd ƒƒ t
|jd |jd f|jjƒ}	t t|ƒƒD ]}|| |	||f< q¬t||	 | |ƒ q4qqd S )	Nrj  rÅ   r{   r¿  rQ   rÀ  rn   r   )r™   rL   ÚlistrA   r   rD  r   rV   rW   rG   r:   rH   rÃ  rq   )
r‚   rY   rÌ  r›   rÁ  rx   r9  rÅ  rÆ  rÇ  r\   r\   r]   Útest_random_complex…  s     ÿÿz!TestSVD_GESDD.test_random_complexc                 C   s^   dddg}t j d¡ |D ]>}t jt jt jt jfD ]$}t jj|Ž  |¡}t	|| j
d� q2qd S )N)rÊ   rÑ   )rÉ   é2   )é<   rå   ré   rC  )rT   rL   rK   r<   Úfloat64r=   Ú
complex128rU   rX   r   rD  )r‚   ÚsizesÚszro  rx   r\   r\   r]   Útest_crash_1580˜  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ƒ}t	t
|ƒƒD ]}|| |||f< q„t|| | |ƒ d S )
Nrn   rR   r{   rj  r|   r}   F)r‹   rD  r   rÂ  )r‚   rx   r9  rÅ  rÆ  rÇ  r›   r\   r\   r]   rë   ¡  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Å?g“vWUUå?r  rC  )rT   r4   r   rD  )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_mbrn   l        rþ   rF  F)rÁ  r   rû   r“   )rO   rT   r:   r<   r   r   )r‚   r[   r9  rÅ  rÆ  r\   r\   r]   Útest_large_matrix¼  s    
zTestSVD_GESDD.test_large_matrixN)r�   rŽ   r�   rù   rG  r…   rÈ  rÊ  rË  rÍ  r‰   rÏ  rÖ  rë   r×  rò   ró   ÚskipifrP   ÚslowrØ  r\   r\   r\   r]   r½  2  s   	
r½  c                   @   s   e Zd Zdd„ ZdS )ÚTestSVD_GESVDc                 C   s   d| _ tdƒ d S )NÚgesvdré   r¾  rø   r\   r\   r]   rù   È  s    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)rR   r   )r   r{   r   )rT   rª   r6   r   r   ©r‚   rx   rÅ  r\   r\   r]   Ú
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 )Nrn   rR   r{   r|   r}   r   ©r   r   rq   rÞ  r\   r\   r]   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 )Nrn   rR   r{   rW  r|   r}   r   rà  rÞ  r\   r\   r]   rÊ  Ú  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 )Nrn   rR   rW  r|   r{   r   rà  rÞ  r\   r\   r]   rË  à  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 )	Nrn   rR   r{   rj  r�  r|   r}   r   rà  rÞ  r\   r\   r]   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 )Nrn   rR   r{   rW  rŒ  r}   r   rà  rÞ  r\   r\   r]   Ú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 )Nrn   rR   rW  r|   r�  r   rà  rÞ  r\   r\   r]   Ú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 )	Nrn   rR   r{   r|   r}   FrŠ   r   rà  rÞ  r\   r\   r]   rë   ø  s    zTestSVDVals.test_check_finitec                 C   s&   t j d¡ t j dd¡}t|ƒ d S )Nré   iÜ  ið
  )rT   rL   rK   rU   r   ©r‚   rx   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                   @   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 )Nrn   r   r{   )r   r   rø   r\   r\   r]   r…     s    ÿzTestDiagSVD.test_simpleN)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dd„ Zdd„ Zdd„ Zd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 rT  rU  rø   r\   r\   r]   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 ©Nr�  rR   r{   r~   r|   r}   ©r   r   rW   rG   ©r‚   rx   ÚqÚrr\   r\   r]   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 )	Nr�  rR   r{   r~   r|   r}   rn   r—   ©r   r   r   rG   ©r‚   rx   rê  rë  ÚcÚqcÚr2r\   r\   r]   Ú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 )Nr�  rR   r{   r~   r|   r}   rn   rì  rí  r\   r\   r]   Ú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 )Nr�  rR   r{   r~   r|   r}   T©Úpivotingrn   r’   ©
rT   rD   r   r  r5   r   r¬   r   rW   rG   ©r‚   rx   rê  rë  rš  rt   Úq2rð  r\   r\   r]   Ú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 )Nr�  rR   r{   r~   r|   r}   Tró  rn   r—   ©r   r   r   ©r‚   rx   rê  rë  Újpvtrî  rï  r\   r\   r]   Útest_simple_left_pivoting7  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 )
Nr�  rR   r{   r~   r|   r}   Tró  rn   rù  rú  r\   r\   r]   Ú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 ©Nr�  rR   r{   r~   rè  ré  r\   r\   r]   Útest_simple_trapE  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 )	Nr�  rR   r{   r~   Tró  rn   r’   rõ  rö  r\   r\   r]   Útest_simple_trap_pivotingK  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�  rR   r~   r|   r{   rè  ré  r\   r\   r]   Útest_simple_tallV  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�  rR   r~   r|   r{   Tró  rn   r’   rõ  rö  r\   r\   r]   Útest_simple_tall_pivoting]  s    "
z TestQR.test_simple_tall_pivotingc                 C   sd   ddgddgddgg}t |dd�\}}t|j| tdƒƒ t|| |ƒ t|jdƒ t|jd	ƒ d S )
Nr�  rR   r~   r|   r{   Úeconomic©Úmode©r{   rR   r…  ©r   r   rW   rG   r   rA   ré  r\   r\   r]   Útest_simple_tall_ei  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�  rR   r~   r|   r{   Tr  ©rô  r  rn   r’   r  rõ  rö  r\   r\   r]   Útest_simple_tall_e_pivotingr  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 )Nr�  rR   r~   r|   r{   r  r  rn   r—   r   T©Zoverwrite_c©r   r   r   r4   rG   rí  r\   r\   r]   Útest_simple_tall_left~  s    
zTestQR.test_simple_tall_leftc                 C   s„   ddgddgddgg}t |ddd�\}}}d	dg}t||d
dƒ\}}}t||ƒ t|| |ƒ t|tdƒd
dƒ\}}}t||ƒ d S )Nr�  rR   r~   r|   r{   r  T©r  rô  rn   r—   )r   r   r   r   rG   )r‚   rx   rê  rë  rû  rî  rï  Zkpvtr\   r\   r]   Útest_simple_tall_left_pivoting‹  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 )	Nr�  rR   r~   r|   r{   r  r  rn   rì  ©r‚   rx   rê  rë  rî  Úcqrð  r\   r\   r]   Ú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 )Nr�  rR   r~   r|   r{   Tr  r
  rn   ró  rì  ©r‚   rx   rê  rë  rû  rî  r  r\   r\   r]   Útest_simple_tall_right_pivotingŸ  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 )Nr�  rR   r|   r~   r{   r…  ©rR   r{   r  ré  r\   r\   r]   Útest_simple_fat¨  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 )Nr�  rR   r|   r~   r{   Tró  rn   r’   r…  r  ©rT   rD   r   r  r5   r   r¬   r   rW   rG   r   rA   rö  r\   r\   r]   Útest_simple_fat_pivoting±  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 )
Nr�  rR   r{   r~   r|   r  r  r…  r  r  ré  r\   r\   r]   Ú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 )Nr�  rR   r{   r~   r|   Tr  r
  rn   r’   r…  r  r  r  rö  r\   r\   r]   Ú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 )
Nr�  rR   r{   r~   r|   r  r  rn   r—   rì  rí  r\   r\   r]   Ú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 )Nr�  rR   r{   r~   r|   r  Tr  rn   r—   rì  rú  r\   r\   r]   Ú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 )	Nr�  rR   r{   r~   r|   r  r  rn   rì  r  r\   r\   r]   Ú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 )Nr�  rR   r{   r~   r|   Tr  r
  rn   ró  rì  r  r\   r\   r]   Ú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 ©Nr{   ù      @      @r|   rR   ù       @      @r_   )r   r   rV   rW   rG   ré  r\   r\   r]   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 )	Nr{   r!  r|   rR   r"  r_   rn   r—   rì  ©r‚   rx   rê  rë  rî  rï  r\   r\   r]   Ú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 )Nr{   r!  r|   rR   r"  r_   rn   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d	ddgƒ}t||ddd�\}}t||d d…  |ƒ t|tdƒdƒ\}}t||ƒ d S )Nr�  y       @      @rR   r~   y      @      @r{   r  r  rn   ù       @       @r—   r   Tr  r  rí  r\   r\   r]   Ú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 )Nr{   r!  r|   rR   r"  r_   rn   r—   T©Ú	conjugate©r   r   r   rV   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{   r!  r|   r&  rR   r  r  rn   r—   Tr(  r*  r#  r\   r\   r]   Ú'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 )
Nr{   r!  r|   rR   r"  r_   rn   Tr(  )r   rT   r4   r   r   rV   r#  r\   r\   r]   Ú#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 )Nr{   r!  r|   rR   r"  r_   Tró  rn   r’   )r4   r   r  r5   r   rT   r¬   r   rV   rW   rG   rö  r\   r\   r]   Útest_simple_complex_pivoting6  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 )Nr{   r!  r|   rR   r"  r_   Tró  rn   r—   ©r4   r   r   r   rú  r\   r\   r]   Ú!test_simple_complex_left_pivotingA  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 )
Nr{   r!  r|   rR   r"  r_   Tró  rn   r/  rú  r\   r\   r]   Ú"test_simple_complex_right_pivotingH  s
     
z)TestQR.test_simple_complex_right_pivotingc                 C   sP   d}t dƒD ]>}t||gƒ}t|ƒ\}}t|j| t|ƒƒ t|| |ƒ qd S ©Nrj  rR   ©r™   rL   r   r   rW   rG   ©r‚   rY   rç   rx   rê  rë  r\   r\   r]   rÍ  O  s    zTestQR.test_randomc                 C   st   d}t dƒD ]b}t||gƒ}t|ƒ\}}t|gƒ}t||dƒ\}}t|| |ƒ t|t|ƒdƒ\}}t||ƒ qd S )Nrj  rR   r—   ©r™   rL   r   r   r   rG   ©r‚   rY   rç   rx   rê  rë  rî  rï  r\   r\   r]   Útest_random_leftW  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 r2  r5  ©r‚   rY   rç   rx   rê  rë  rî  r  r\   r\   r]   Útest_random_rightb  s    
zTestQR.test_random_rightc           
      C   s¼   d}t 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d S )Nrj  rR   Tró  rn   r’   ©r™   rL   r   r  r5   r   rT   r¬   r   rW   rG   ©
r‚   rY   rç   rx   rê  rë  rš  rt   r÷  rð  r\   r\   r]   Útest_random_pivotingm  s    "
zTestQR.test_random_pivotingc                 C   sT   d}d}t dƒD ]>}t||gƒ}t|ƒ\}}t|j| t|ƒƒ t|| |ƒ qd S ©NéÈ   rå   rR   r3  ©r‚   rÌ  rY   rç   rx   rê  rë  r\   r\   r]   Útest_random_tallz  s    zTestQR.test_random_tallc           	      C   s|   d}d}t dƒD ]f}t||gƒ}t|dd�\}}t|gƒ}t||dƒ\}}t|| |ƒ t|t|ƒdƒ\}}t||ƒ qd S )Nr>  rå   rR   r  r  r—   r5  )	r‚   rÌ  rY   rç   rx   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 ]b}t||gƒ}t|dd�\}}t|gƒ}t||ƒ\}}t|| |ƒ t|t|ƒƒ\}}t||ƒ qd S ©Nr>  rå   rR   r  r  r5  )	r‚   rÌ  rY   rç   rx   rê  rë  rî  r  r\   r\   r]   Útest_random_tall_right‘  s    
zTestQR.test_random_tall_rightc                 C   sÀ   d}d}t 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d S )Nr>  rå   rR   Tró  rn   r’   r:  ©r‚   rÌ  rY   rç   rx   rê  rë  rš  rt   r÷  rð  r\   r\   r]   Útest_random_tall_pivotingž  s    "
z TestQR.test_random_tall_pivotingc                 C   sx   d}d}t dƒD ]b}t||gƒ}t|dd�\}}t|j| t|ƒƒ t|| |ƒ t|j||fƒ t|j||fƒ qd S rB  )r™   rL   r   r   rW   rG   r   rA   r?  r\   r\   r]   Útest_random_tall_e­  s    zTestQR.test_random_tall_ec                 C   sæ   d}d}t 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d S )
Nr>  rå   rR   Tr  r
  rn   r’   r  )r™   rL   r   r  r5   r   rT   r¬   r   rW   rG   r   rA   rD  r\   r\   r]   Útest_random_tall_e_pivoting¹  s    "
z"TestQR.test_random_tall_e_pivotingc                 C   sT   d}d}t dƒD ]>}t||gƒ}t|ƒ\}}t|j| t|ƒƒ t|| |ƒ qd S ©Nrå   r>  rR   r3  r?  r\   r\   r]   Útest_random_trapÊ  s    zTestQR.test_random_trapc                 C   sÀ   d}d}t 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d S )Nrå   r>  rR   Tró  rn   r’   r:  rD  r\   r\   r]   Útest_random_trap_pivotingÓ  s    "
z TestQR.test_random_trap_pivotingc                 C   sd   d}t dƒD ]R}t||gƒdt||gƒ  }t|ƒ\}}t| ¡ j| t|ƒƒ t|| |ƒ qd S ©Nrj  rR   rQ   )r™   rL   r   r   rV   rW   rG   r4  r\   r\   r]   rÏ  á  s    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  rR   rQ   r—   r5  r6  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 rK  r5  r8  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  rR   rQ   Tró  rn   r’   )r™   rL   r   r  r5   r   rT   r¬   r   rV   rW   rG   r;  r\   r\   r]   Ú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 ©	Nr�  rR   r{   r~   r|   r}   FrŠ   rè  ré  r\   r\   r]   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 )Nr�  rR   r{   r~   r|   r}   )Úlworkrú   r’   rP  r   )r   r   rí   Ú	Exception)
r‚   rx   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  r  r  r  r‰   r$  r%  r'  r+  r,  r-  r.  r0  r1  rÍ  r7  r9  r<  r@  rA  rC  rE  rF  rG  rI  rJ  rÏ  rL  rM  rN  rë   rR  r\   r\   r\   r]   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 rT  rU  rø   r\   r\   r]   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 rç  ©r   r   rW   rG   ©r‚   rx   rë  rê  r\   r\   r]   r…   0  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 )	Nr�  rR   r{   r~   r|   r}   rë  r  )r   r   )r‚   rx   rë  rê  rð  r\   r\   r]   Útest_r6  s    zTestRQ.test_rc                 C   sP   d}t dƒD ]>}t||gƒ}t|ƒ\}}t||j t|ƒƒ t|| |ƒ qd S r2  ©r™   rL   r   r   rW   rG   ©r‚   rY   rç   rx   rë  rê  r\   r\   r]   rÍ  <  s    zTestRQ.test_randomc                 C   sF   dddgdddgg}t |ƒ\}}t|j| tdƒƒ t|| |ƒ d S rþ  rT  rU  r\   r\   r]   rÿ  D  s    zTestRQ.test_simple_trapc                 C   sH   ddgddgddgg}t |ƒ\}}t|j| tdƒƒ t|| |ƒ d S r  rT  rU  r\   r\   r]   r  J  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 )Nr�  rR   r|   r~   r{   rT  rU  r\   r\   r]   r  P  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 r   )r   r   rV   rW   rG   rU  r\   r\   r]   r‰   V  s    zTestRQ.test_simple_complexc                 C   sT   d}d}t dƒD ]>}t||gƒ}t|ƒ\}}t||j t|ƒƒ t|| |ƒ qd S r=  rW  ©r‚   rÌ  rY   rç   rx   rë  rê  r\   r\   r]   r@  \  s    zTestRQ.test_random_tallc                 C   sT   d}d}t dƒD ]>}t||gƒ}t|ƒ\}}t||j t|ƒƒ t|| |ƒ qd S rH  rW  rY  r\   r\   r]   rI  e  s    zTestRQ.test_random_trapc                 C   sx   d}d}t dƒD ]b}t||gƒ}t|dd�\}}t||j t|ƒƒ t|| |ƒ t|j||fƒ t|j||fƒ qd S )Nrå   r>  rR   r  r  )r™   rL   r   r   rW   rG   r   rA   rY  r\   r\   r]   Útest_random_trap_economicn  s    z TestRQ.test_random_trap_economicc                 C   sd   d}t dƒD ]R}t||gƒdt||gƒ  }t|ƒ\}}t|| ¡ j t|ƒƒ t|| |ƒ qd S rK  )r™   rL   r   r   rV   rW   rG   rX  r\   r\   r]   rÏ  y  s    zTestRQ.test_random_complexc                 C   sŒ   d}d}t dƒD ]v}t||gƒdt||gƒ  }t|dd�\}}t|| ¡ j t|ƒƒ t|| |ƒ t|j||fƒ t|j||fƒ qd S )Nrå   r>  rR   rQ   r  r  )	r™   rL   r   r   rV   rW   rG   r   rA   rY  r\   r\   r]   Útest_random_complex_economic�  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 rO  rT  rU  r\   r\   r]   rë   Œ  s    zTestRQ.test_check_finiteN)r�   rŽ   r�   rù   r…   rV  rÍ  rÿ  r  r  r‰   r@  rI  rZ  rÏ  r[  rë   r\   r\   r\   r]   rS  +  s   		rS  c                   @   sÒ   e Zd Zdd„ Zdd„ Zej dde 	d¡ de 	d¡d	gfd
e 	d¡d	e 	d¡ dgfddd	e 	d¡e 	d¡ gfde 	d¡e 	d¡ dd	gfdd„ e 	d¡d	e 	d¡ dgfg¡dd„ ƒZ
dd„ Zdd„ ZdS )Ú	TestSchurc                 C   sN   t || | ¡ j |||dd� t || ¡ j t t|ƒ¡ dd|dd� d S )Nz&Schur decomposition does not match 'a'r¥   r   zu is not unitary)r   rV   rW   rT   rG   rq   )r‚   rx   Útr9  r¦   r§   r\   r\   r]   Úcheck_schur•  s    ÿ"ÿzTestSchur.check_schurc                 C   s¬   dddgdddgdddgg}t |ƒ\}}| j|||dd	d
� t |dƒ\}}tt tt|ƒƒ¡ont tt|ƒƒ¡ƒ | j|||dd	d
� t||ƒ\}}| j|||dd	d
� d S )Nr�  r�  r{   rR   r~   rú   r}   ç›+¡†›„=ç›+¡†›„ö<©r¦   r§   r  )r   r^  r   rT   Úanyr>   r@   r   )r‚   rx   r]  rq  ZtcZzcZtc2Zzc2r\   r\   r]   r…   ž  s    (zTestSchur.test_simplezsort, expected_diagÚlhprR   ç      à¿ro   ÚrhpÚiucÚoucc                 C   s   | dkS )Nr  r\   )ri   r\   r\   r]   Ú<lambda>®  ó    zTestSchur.<lambda>c                 C   st   ddddgddddgddd	d
gddddgg}t ||d�\}}}| j|||ddd� tt |¡|dd� td|ƒ d S )Nç      @r‘   rû   rü   ç      Àç      Àrð   ç      @ç      Àç      @rý   ç      @©rB   r_  r`  ra  çê-�™—q=©r¦   rR   )r   r^  r   rT   r5   r   )r‚   rB   Zexpected_diagrx   r]  r9  Zsdimr\   r\   r]   Ú	test_sort¨  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 )Nrj  r‘   rû   rü   rk  rl  rð   rm  rn  ro  rý   rp  Úunsupportedrq  rn   )rí   rî   r   rã  r\   r\   r]   Ú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 )
Nr�  r�  r{   rR   r~   rú   r}   FrŠ   )r   r   rV   rW   )r‚   rx   r]  rq  r\   r\   r]   rë   Ä  s    zTestSchur.test_check_finiteN)r�   rŽ   r�   r^  r…   rò   ró   rŠ  rT   r?   rt  rv  rë   r\   r\   r\   r]   r\  “  s   	
 üþ
r\  c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestHessenbergc                 C   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 )NékÿÿÿéÎÿÿÿéfÿÿÿé  é´   é"  éåÿÿÿrà   éçÿÿÿç      bÀçüs×E@çã¥›Ä ŠcÀççŒ(mÍ€Àçkšwœ¢c@çÏfÕçjW�Àr   çÂ&S£²?ç,eâX—@rn   ©Úcalc_qrW  ©Údecimal©r   r   rW   ©r‚   rx   Zh1rv   rê  r\   r\   r]   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 )Nrx  ry  rz  r{  y             €f@r}  y       €      ;Àrà   r  rn   rˆ  )r   r   rV   rW   ©r‚   rx   rv   rê  r\   r\   r]   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 )Nrn   rR   r{   rW  r|   r}   r_   r   r�  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{   rR   )r’   r   rn   rˆ  )rT   rG   r   r   rW   rŽ  r\   r\   r]   Útest_simple3é  s    
zTestHessenberg.test_simple3c                 C   sF   d}t dƒD ]4}t||gƒ}t|dd�\}}t|j| | |ƒ qd S )Nrj  rR   rn   rˆ  )r™   rL   r   r   rW   ©r‚   rY   rç   rx   rv   rê  r\   r\   r]   rÍ  ï  s
    zTestHessenberg.test_randomc                 C   sZ   d}t dƒD ]H}t||gƒdt||gƒ  }t|dd�\}}t| ¡ j| | |ƒ qd S )Nrj  rR   rQ   rn   rˆ  )r™   rL   r   r   rV   rW   r�  r\   r\   r]   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 )Nrx  ry  rz  r{  r|  r}  r~  rà   r  r€  r�  r‚  rƒ  r„  r…  r   r†  r‡  rn   F)r‰  r‹   rW  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 )
NrR   rn   r_   r�  rˆ  y       @      Àr�   y      @      @y      (@       À)r   r   rT   rG   )r‚   rx   rv   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]   rw  Ê  s   rw  c                   @   sb   e Zd Zdd„ Zejjejdkdd�dd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestQZc                 C   s   t dƒ d S ©Ni90  rU  rø   r\   r\   r]   rù     s    zTestQZ.setup_methodÚdarwinz8gges[float32] broken for OpenBLAS on macOS, see gh-16949rµ   c                 C   s´   d}t ||gƒ t¡}t ||gƒ t¡}t||ƒ\}}}}t|| |j |dd� t|| |j |dd� t||j t|ƒdd� t||j t|ƒdd� tt 	t
|ƒdk¡ƒ d S )Nr|   rŠ  r   )rL   rX   r<   r   r   rW   rG   r   rT   r¬   r5   ©r‚   rY   r[   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   ©	rL   r   r   rW   rG   r   rT   r¬   r5   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|   rQ   r   )rL   r   r   rV   rW   rG   r   rT   r¬   r5   rd   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|   rQ   rŠ  r   )rL   rX   r=   r   r   rV   rW   rG   r   rT   r¬   r5   rd   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   )rL   r   rV   rW   r   rc   rd   rG   r   rT   r¬   r5   )
r‚   rY   r[   r­   r–  r—  r˜  rÞ   ÚaaZbbr\   r\   r]   Útest_qz_double_complexI  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 )Nç333333@ç      )@ç     @AÀg      @ç333333@ç     €5@ç     ÀGÀç      @r€  ç     ÀEÀrp  çš™™™™™@rm  ç      GÀrû   rý   r‘   g      Àr`   rn  r  rj  c                 S   s   |dkS )Nr   r\   )rh   ZaiÚbetar\   r\   r]   rh  p  ri  z,TestQZ.test_qz_double_sort.<locals>.<lambda>rq  )rT   r4   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ô   ÚsysÚplatformr™  r›  rœ  r�  r   r¬  rë   r\   r\   r\   r]   r’    s   ÿ
cr’  c                 C   s   t  | ¡|  S rö   )rT   rC   )Ú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   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À     €6Ày     ÀJ@     @IÀy     @AÀ     à_@y      @      à?yq=
×£pÝ¿…ëQ¸Ày      À     ÀBÀy      /À     @M@y      %À      ø¿y333333@      Àyš™™™™ÙC@š™™™™1Ày      QÀ      )@y      À      Ày      @š™™™™™@yÍÌÌÌÌÌ,@fffff¦E@y     @@À      GÀy      3À     @@Ày      ð?      Àyš™™™™™ù?333333ó?y      À        y              ð¿yš™™™™™é?333333ã¿y              Ày      À      @y333333Àš™™™™™	Ày      ð?        y333333@ÍÌÌÌÌÌü?y      À      Ày              ÀrQ   yÍÌÌÌÌÌü¿333333@y              Ày      @      Àr¡  r¢  r£  rd  r¤  r¥  r¦  r§  r¨  rp  r©  g      :@rª  rm  rn   rR   éýÿÿÿr{   éûÿÿÿrW  éüÿÿÿræ   rû   r‘   rj  r`   g      @r  g       @g      $@rð   r   )rT   r4   rG   r5   r[   r­   )
ÚclsÚA1ÚB1ÚA2ÚB2ÚA3ÚB3ÚA4ÚB4ÚA5r\   r\   r]   rV  Í  sV    
ÿÿÿÿú	


ý


ý


ý


ý


ý
zTestOrdQZ.setup_classc              	      s<   t jdd��" ‡ fdd„t| j| jƒD ƒ}W 5 Q R X t|ƒS )NÚraiserÕ   c                    s   g | ]\}}t ||ˆ d �‘qS )rq  )r   )Ú.0ÚAiÚBirq  r\   r]   Ú
<listcomp>	  s     z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rT   rÖ   Úzipr[   r­   Útuple)r‚   rB   Úretr\   rq  r]   Ú	qz_decomp	  s    &zTestOrdQZ.qz_decompc
                 C   sv  t j|jŽ }
t||j ¡  |
ƒ t|	|	j ¡  |
ƒ t|| ||	 ƒ t|| ||	 ƒ tt  |d¡t  |j¡ƒ tt  |d¡t  |j¡ƒ t	|jd ƒD �]|}|dkr¾|||d f dkr¾qš||jd d k �rŠ||d |f dk�rŠt
|||d …||d …f |||d …||d …f ƒ\}}|d jdk �rB|ddg }|||d … |||d …  }|d jdk �r~|ddg }t||ƒ qš|| dk�rÌ|| dk�rÌt|||f dƒ t|||f dƒ qš|| dk�rît|||f dƒ qšt|||f |||f  || ||  ƒ qšt|ƒ}d}t	|jd ƒD ]<}|t  || g¡t  || g¡ƒ}|�sj|�rjt‚|}�q4d S )Nrœ   r’   r   rn   rR   T)rT   rG   rA   r   rW   rV   r   rJ   r:   r™   r	   rd   r   r   r2   r4   rm  )r‚   r[   r­   rB   r–  r—  Úalphar«  r˜  rÞ   ZIdr›   Zevalsr¡  ÚtmpZsortfunZlastsortZcursortr\   r\   r]   Úcheck		  s>    *> ,"
zTestOrdQZ.checkc                 C   s>   |   |¡}t|| j| jƒD ]\}}}| j|||f|žŽ  qd S rö   )rÇ  rÄ  r[   r­   rÊ  )r‚   rB   rÆ  ZretirÁ  rÂ  r\   r\   r]   Ú	check_all7	  s    
zTestOrdQZ.check_allc                 C   s   |   d¡ d S )Nrc  ©rË  rø   r\   r\   r]   Útest_lhp=	  s    zTestOrdQZ.test_lhpc                 C   s   |   d¡ d S )Nre  rÌ  rø   r\   r\   r]   Útest_rhp@	  s    zTestOrdQZ.test_rhpc                 C   s   |   d¡ d S )Nrf  rÌ  rø   r\   r\   r]   Útest_iucC	  s    zTestOrdQZ.test_iucc                 C   s   |   d¡ d S )Nrg  rÌ  rø   r\   r\   r]   Útest_oucF	  s    zTestOrdQZ.test_oucc                 C   s   dd„ }|   |¡ d S )Nc                 S   s>   t j| td�}|dk}d|| < | | ||  jdk||< |S ©Nrþ   r   F©rT   Ú
empty_likeÚboolrd   ©ri   r=  ra   Znonzeror\   r\   r]   rB   K	  s
    
z TestOrdQZ.test_ref.<locals>.sortrÌ  ©r‚   rB   r\   r\   r]   Útest_refI	  s    zTestOrdQZ.test_refc                 C   s   dd„ }|   |¡ d S )Nc                 S   s>   t j| td�}|dk}d|| < | | ||  jdk||< |S rÑ  rÒ  rÕ  r\   r\   r]   rB   V	  s
    
z TestOrdQZ.test_cef.<locals>.sortrÌ  rÖ  r\   r\   r]   Útest_cefT	  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 )Nrn   rR   rc  rq  )r   r[   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 ]’\}}}|D ]€\}}t|||d�\}}}}}}|dk}|dk}t  |¡}t j|||@ < t j|| |@ < ||  ||   || < t||ƒ �q„�qvd S )NrR   rœ   ro   rc  rd  re  rf  rg  y       À      ð?y      à?      à?yš™™™™™Ù¿š™™™™™É¿ù      ð?      ð¿r   rn   rq  )	rT   rG   r5   r¢   ÚnanrÄ  r   rÓ  r   )r‚   r¶  r·  Z	expected1r¸  r¹  Z	expected2rº  r»  Z	expected3r¼  r½  Z	expected4r¾  ZB5Z	expected5r[   r­   ÚexpectedrÁ  rÂ  Z	expectediZsortstrZexpected_eigvalsr¡  rÈ  r«  ZazeroZbzerori   r\   r\   r]   Útest_sort_explicitf	  sX    




ý




ý
þ
þÿ
zTestOrdQZ.test_sort_explicitN)r�   rŽ   r�   ÚclassmethodrV  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   s   t dƒ d S r“  rU  rø   r\   r\   r]   rù   ˜	  s    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�}qZd S )NéÊ   c                 S   s   | |k S rö   r\   ©rÈ  r«  r\   r\   r]   rh  ¤	  ri  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>rc   )rB   rž  c                 S   s   | |k S rö   r\   rá  r\   r\   r]   rh  ª	  ri  r  )rT   r<   rÒ  rL   rX   r   rÓ  r=   )r‚   r  Úddtyper[   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 ]B}t||fƒ |¡}t||fƒ |¡}t||dd�\}}}}}	}
qd S )Nrà  rg  rq  )rT   r<   rÒ  rÓ  r=   rL   rX   r   )r‚   r  râ  r[   r­   ÚSrW   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                   @   s   e Zd Zdd„ ZdS )ÚTestDatacopiedc                    s¾   ddl m} tddgddggƒ}t|ƒ‰ | ¡ }| ¡ }G ‡ fdd„dƒ}G ‡ fdd	„d	ƒ}|ƒ }|ƒ }|d
fˆ d
f|df|d
f|d
f|d
ffD ](\}	}
t|	ƒ}t|||	ƒ|
t|	ƒd� q�d S )Nr   )Ú_datacopiedrn   rR   r{   c                       s   e Zd Z‡ fdd„ZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1c                    s   ˆ S rö   r\   rø   ©r[   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é  rN   rD   Ú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è  ¹	  s   rè  c                  C   sF   t dtjd�} tj| jddtd�}d|_t|dd� t|jdd� d	S )
z4Check linalg works with non-aligned memory (float32)i’  rþ   rR   rå   ©ÚoffsetÚcountrH   r·  TrŸ  N)	r;   rT   Úuint8Ú
frombufferr™  r<   rA   r	   rW   ©rx   rq  r\   r\   r]   Útest_aligned_mem_floatÔ	  s
    rú  Úppc64lezcrashes on ppc64lerµ   c                  C   sF   t dtjd�} tj| jddtd�}d|_t|dd� t|jdd� d	S )
z4Check linalg works with non-aligned memory (float64)i$  rþ   rW  rå   rô  r·  TrŸ  N)	r;   rT   r÷  rø  r™  r
  rA   r	   rW   rù  r\   r\   r]   Útest_aligned_memá	  s
    rü  c                  C   sF   t dtjd�} tj| jddtd�}d|_t|dd� t|jdd� d	S )
z>Check that complex objects don't need to be completely alignediH  rþ   r�  rå   rô  r·  TrŸ  N)	r:   rT   r÷  rø  r™  r  rA   r	   rW   rù  r\   r\   r]   Útest_aligned_mem_complexð	  s
    rý  c                 C   sÔ   t |ƒ}tt|ƒƒD ]º}|d d … }t|| tjƒrtj|| j|| jj	 d tj
d�}tj|jd|| j|| jd�}|| j|_|| |d< |||< | ||Ž t|| jƒdkr|| j||< | ||Ž qd S )Nr�  rþ   rW  rô  .rn   )rÎ  r™   rq   rk   rT   rF   r:   r«   rH   Úitemsizer÷  rø  r™  rA   rW   )Úfuncr  Úkwargsr›   rx   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|||ƒ �qhd S )Nrú   rþ   rå   r·  i N  rW  rô  TrŸ  )Úoverwrite_b)r   r  )rT   rG   r
  r;   rA   r÷  rø  r™  r6   r   r	   Údictr
   r   r   r   r   r   r   r   r   r   r   r  )	rÛ   ÚRrä  r£   r±  Úpivrÿ  r  r   r\   r\   r]   Útest_lapack_misaligned
  s4    

ðr  c                   @   sŒ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ÚTestOverwritec                 C   s   t tdgƒ t tddgƒ d S ©NrÙ   )rM   r	   rø   r\   r\   r]   Útest_eig3
  s    zTestOverwrite.test_eigc                 C   s   t tdgƒ t tddgƒ d S r	  )rM   r   rø   r\   r\   r]   Ú	test_eigh7
  s    zTestOverwrite.test_eighc                 C   s   t tdgƒ d S ©Nr  )rM   r   rø   r\   r\   r]   r4  ;
  s    zTestOverwrite.test_eig_bandedc                 C   s   t tdgƒ d S r	  )rM   r
   rø   r\   r\   r]   Útest_eigvals>
  s    zTestOverwrite.test_eigvalsc                 C   s   t tdgƒ d S r	  )rM   r   rø   r\   r\   r]   Útest_eigvalshA
  s    zTestOverwrite.test_eigvalshc                 C   s   t tdgƒ d S r  )rM   r   rø   r\   r\   r]   r3  D
  s    z!TestOverwrite.test_eigvals_bandedc                 C   s   t tdgƒ d S r	  )rM   r   rø   r\   r\   r]   Útest_hessenbergG
  s    zTestOverwrite.test_hessenbergc                 C   s   t tdgƒ d S r	  )rM   r   rø   r\   r\   r]   Útest_lu_factorJ
  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 )Nrn   rR   r{   rW  r|   r}   r_   r�  c                    s
   t ˆ | ƒS rö   )r   )r£   ©Zxlur\   r]   rh  P
  ri  z-TestOverwrite.test_lu_solve.<locals>.<lambda>)r{   )rT   r4   r   rM   )r‚   ri   r\   r  r]   Útest_lu_solveM
  s    "zTestOverwrite.test_lu_solvec                 C   s   t tdgƒ d S r	  )rM   r   rø   r\   r\   r]   r¼  R
  s    zTestOverwrite.test_luc                 C   s   t tdgƒ d S r	  )rM   r   rø   r\   r\   r]   Útest_qrU
  s    zTestOverwrite.test_qrc                 C   s   t tdgƒ d S r	  )rM   r   rø   r\   r\   r]   Útest_rqX
  s    zTestOverwrite.test_rqc                 C   s   t tdgƒ d S r	  )rM   r   rø   r\   r\   r]   Ú
test_schur[
  s    zTestOverwrite.test_schurc                 C   s    t dd„ dgtjtjgd� d S )Nc                 S   s
   t | dƒS )Nr  )r   ©rx   r\   r\   r]   rh  _
  ri  z2TestOverwrite.test_schur_complex.<locals>.<lambda>rÙ   )Údtypes)rM   rT   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Ü  rC  )r   r  r\   r\   r]   rh  d
  ri  z(TestOverwrite.test_svd.<locals>.<lambda>)rM   r   rø   r\   r\   r]   Útest_svdb
  s    zTestOverwrite.test_svdc                 C   s   t tdgƒ d S r	  )rM   r   rø   r\   r\   r]   Útest_svdvalsf
  s    zTestOverwrite.test_svdvalsN)r�   rŽ   r�   r
  r  r4  r  r  r3  r  r  r  r¼  r  r  r  r  r  r  r\   r\   r\   r]   r  2
  s    r  c                 C   s   t j| dftd� |¡}t  |¡j}d| }t|ƒ}t|j| dfƒ t	|| 
¡ |d� t|jƒ}t|jdƒ t	|| 
¡ |d� | dk�r|�st j d¡ t j | d¡t j d| ¡ }|dt j | d¡ t j d| ¡  }| |¡}t|d	d
�}t|j| dfƒ t|dd
�}t|j| dfƒ d S )NrR   rþ   rw  rn   ©r§   ©rR   rn   r|   ç-Cëâ6?çü©ñÒMbP?©Zrcondç�íµ ÷Æ°>r}   )rT   r6   r
  rX   re   ry  r   r   rA   r   ZmeanrW   rL   rK   rU   )rY   rH   Úskip_bigr¯  ry  ÚtolÚYr\   r\   r]   Ú_check_orthj
  s$    
$
r$  r�  z"test only on 64-bit, else too slowc               
   C   sJ   d} zt | tjdd� W n, tk
rD } ztdƒ|‚W 5 d }~X Y nX d S )Ni€–˜ T)r!  z.memory error perhaps caused by orth regression)r$  rT   rÒ  ÚMemoryErrorrm  )rY   rB  r\   r\   r]   Útest_orth_memory_efficiency…
  s    ÿþr&  c                  C   sF   t jt jt jt jg} dddddg}t | |¡D ]\}}t||ƒ q.d S )Nrn   rR   r{   rú   rå   )rT   r<   rÒ  r=   rÓ  Ú	itertoolsÚproductr$  )r  rÔ  ro  rY   r\   r\   r]   Ú	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}t | |¡D �]p\}}t j	d|f|d�}t  
|¡j}d| }t|ƒ}t|j||d fƒ t|| d|d	� t|jƒ}t|jd
ƒ t|j| d|d	� t j d|d  |¡}t|ƒ}t|j||d |d  fƒ t|| d|d	� |dk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:d S )Nrn   rR   r{   rú   rå   rþ   rw  r   r  r  r|   r  r  r  r   r}   )rT   rL   rK   r<   rÒ  r=   rÓ  r'  r(  r6   re   ry  r$   r   rA   r   rW   ZrandnrU   rX   )r  rÔ  ro  rY   r¯  ry  r"  r#  r\   r\   r]   Útest_null_space�
  s4    
$
r*  c               	   C   sb  t dtƒ} | d d …d d…f }| d d …dd …f }tt||ƒtjd gd dd� tt||ƒtjd gd dd� ||fD ]$}tt||ƒt |jd ¡dd� qzt 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 )#Nr�  r{   r`   r_  r  rn   gñ�·‘4á?gVðR¦fÔ?g8Ô!“Ž @g•ÂÐë‚6ç?gN÷$Ð—Wý?gÂã�Jìô¿gÑ~ý™Î'@gÊ÷3:]$°¿g¢v•MÀg© çÀø¿Û¿g÷PT#™õ¿g eŸ‚,ßæ?gºßÎ€ì–ë?gÜò¥+�íÕ?gòNô…G@g˜êS<Ê¿g™"Ó	´÷?rR   r   rr  rs  g¦®LÔ0âç?g•Ä¹»°-ß?gyßôv†Õ?r’   rÿ   rÚ  r  )r!   r
  r   r    rT   Úpir:   rA   r4   rí   rî   )ÚHr[   r­   ri   rÜ  rx   r£   r\   r\   r]   Útest_subspace_anglesÃ
  sl    
  ÿ



ýÿ0ÿ0ÿ22220ÿüür-  c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCDF2RDFc                 C   s   t  d||¡S )Nz...ij,...jk->...ik)rT   Zeinsum)r‚   rx   r£   r\   r\   r]   Úmatmulÿ
  s    zTestCDF2RDF.matmulc                 C   s   t |  ||¡|  ||¡ƒ d S rö   )r   r/  )r‚   rƒ   ru   ri   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   )rT   rª   r%   r0  ©r‚   r¯  rƒ   ru   Ú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 )Nrn   rR   r{   r’   ©rT   r4   r8   r	   r%   r0  r1  r\   r\   r]   Ú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 )Nrn   rR   rœ   r4  r1  r\   r\   r]   Ú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 )Nrn   rR   r{   r|   r}   r4  r1  r\   r\   r]   Ú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 ©Nrn   rR   r{   r   rW  r|   r³  r4  r1  r\   r\   r]   Útest_single_array3x3_complex!  s    "z(TestCDF2RDF.test_single_array3x3_complexc                 C   s\   t ddƒD ]L}tj d¡ tj d||¡}tj |¡\}}t||ƒ\}}|  |||¡ q
d S )Nrn   r_   iÿÉš;rå   )	r™   rT   rL   rK   rU   r8   r	   r%   r0  ©r‚   rÛ   r¯  rƒ   ru   r2  rŸ   r\   r\   r]   Útest_random_1d_stacked_arrays'  s    z)TestCDF2RDF.test_random_1d_stacked_arraysc                 C   sR   t ddƒD ]B}tj dd||¡}tj |¡\}}t||ƒ\}}|  |||¡ q
d S )Nrn   r_   rú   )r™   rT   rL   rU   r8   r	   r%   r0  r:  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\   )rR   )rT   rª   r4   rí   rî   r%   ©r‚   rƒ   ru   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}   rR   ©rT   r;   rì   rí   rî   r%   r=  r\   r\   r]   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 r8  ©rT   r4   r8   r	   rí   rî   r%   ©r‚   r¯  rƒ   ru   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Ï   rW  r?  r=  r\   r\   r]   Útest_non_associated_errorG  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 )Nrn   rR   r{   r|   rˆ   y      @      ð¿r@  rA  r\   r\   r]   Útest_not_conjugate_pairsL  s    "þz$TestCDF2RDF.test_not_conjugate_pairsN)r�   rŽ   r�   r/  r0  r3  r5  r6  r7  r9  r;  r<  r>  rï   rB  rC  rD  r\   r\   r\   r]   r.  ý
  s   	r.  )r_   )F)–rµ  Z	__usage__r'  r®  r­  ÚnumpyrT   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/   r0   Zscipy.linalg._miscr1   Zscipy.linalg._decomp_qzr2   Zscipy.statsr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   Znumpy.randomrK   rL   Zscipy.linalg._testutilsrM   Zscipy.sparse._sputilsrN   Zscipy._lib._testutilsrO   Zscipy.linalg.blasrP   r
  r^   rÒ  ZREAL_DTYPESrÓ  rS   rl  rb   rm   rw   ry   rz   r�   rõ   r@  rS  r‹  r´  r¶  r½  rÛ  rÝ  rå  ræ  rS  r\  rw  r’  r°  r±  rß  rè  rú  ró   rÙ  Úmachinerü  rý  r  rô   r  r  r$  rÚ  Zintprþ  r&  r)  r*  r-  r.  r\   r\   r\   r]   Ú<module>   s¢    €0d
 [  o ] 9    "h7K 3 K#ÿ
ÿ
 8
ÿ&: