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

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

    If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                      eigenvalues are 'a'.
    rL   é   r   zinput type not supported.ç      à?)Ú
isinstanceÚintrO   rD   Úlenr?   Ú	TypeErrorr2   ZrvsrR   rQ   r4   )Zdim_or_eigvÚrngÚdimÚdÚvÚhrX   rX   rY   Úsymrand@   s    	

ÿ

rf   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestEigValsc                 C   sN   g d¢g d¢g d¢g}t |ƒ}dtdƒ d ddtdƒ d g}t||ƒ d S )N©r[   rL   é   ©rL   é   é   é	   é]   rL   r   ©r
   r=   r   ©ÚselfÚaÚwÚexact_wrX   rX   rY   Útest_simple\   s    "zTestEigVals.test_simplec                 C   sd   t g d¢g d¢g d¢gdƒj}| ¡ }|j}t|ƒ}dtdƒ d ddtdƒ d g}t||ƒ d S )Nrh   rj   rc   rm   rn   rL   r   )r3   rR   Úcopyr
   r=   r   rp   rX   rX   rY   Útest_simple_trb   s    "zTestEigVals.test_simple_trc                 C   sN   g d¢g d¢g d¢g}t |ƒ}dtdƒ d ddtdƒ d g}t||ƒ d S )Nrh   ©rL   rk   y      @      ð?y      "@      ð?y      W@      @rL   r   ro   rp   rX   rX   rY   Útest_simple_complexj   s    þzTestEigVals.test_simple_complexc                 C   sR   g d¢g d¢g d¢g}t |dd�}dtdƒ d ddtdƒ d g}t||ƒ d S )	Nrh   rj   F©Úcheck_finiterm   rn   rL   r   ro   rp   rX   rX   rY   Útest_finiter   s    "zTestEigVals.test_finiteN)Ú__name__Ú
__module__Ú__qualname__ru   rw   ry   r|   rX   rX   rX   rY   rg   Z   s   rg   c                   @   sv   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestEigc           	      C   s¸  t g d¢g d¢g d¢gƒ}t|ƒ\}}dtdƒ d ddtdƒ d g}t dddtdƒd  d gƒ}t g d	¢ƒ}t dddtdƒd  d gƒ}|t|ƒ }|t|ƒ }|t|ƒ }t||ƒ t||d d …df t|d
 ƒ ƒ t||d d …df t|d ƒ ƒ t||d d …df t|d ƒ ƒ tdƒD ]4}t||d d …|f  || |d d …|f  ƒ �q,t|ddd�\}}tdƒD ]6}t|j|d d …|f  || |d d …|f  ƒ �q|d S )Nrh   rj   rm   rn   rL   r   r[   ri   ©ç      @r   éÿÿÿÿ©r   r   ©r   r[   ©r   rL   ©ÚleftÚright)r3   r	   r=   r0   r   rA   ÚrangerR   ©	rq   rr   rs   rd   rt   Zv0Zv1Zv2ÚirX   rX   rY   ru   {   s$    "
"""2zTestEig.test_simplec                 C   sÀ   t ddgddggƒ}t|ddd�\}}}t|t ddgƒƒ tdƒD ]2}t||d d …|f  || |d d …|f  ƒ qBtdƒD ]<}t| ¡ j|d d …|f  ||  ¡ |d d …|f  ƒ q~d S )Nr[   rL   éþÿÿÿr‡   ù      ð?       @y      ð?       À)r3   r	   r   rŠ   rQ   rR   ©rq   rr   rs   ZvlÚvrrŒ   rX   rX   rY   Útest_simple_complex_eig�   s    0ÿzTestEig.test_simple_complex_eigc                 C   s´   t g d¢g d¢g d¢gƒ}t|ddd�\}}}tdƒD ]2}t||d d …|f  || |d d …|f  ƒ q6tdƒD ]<}t| ¡ j|d d …|f  ||  ¡ |d d …|f  ƒ qrd S )Nrh   rx   r[   r‡   ri   )r3   r	   rŠ   r   rQ   rR   r�   rX   rX   rY   ry   ™   s    0ÿzTestEig.test_simple_complexc                 C   sr   dgg}dgg}t ||dd�\}}t|d dƒ t|d dkƒ t|dƒ t ||ƒ\}}t|tjƒ t|dƒ d S )Nr[   r   T©Zhomogeneous_eigvals©r[   r   r„   )r	   r   r   r   rN   Úinf)rq   rr   Úbrs   r�   rX   rX   rY   Útest_gh_3054¢   s    
zTestEig.test_gh_3054ç‚vIhÂ%<=c                 C   s@  |d ur t |ƒt |ƒ }}|}nt |ƒ}|}tj|jŽ }d|›d|›�}t||dd�\}}t||dd�}	|| |dd d …f  }
|| |dd d …f  }t|
jd ƒD ].}t|
d d …|f |d d …|f |||d� q¦|d u �rt|dd d …f dƒ t|	dd d …f dƒ t |¡}t |	¡}t|d d …|f |	d d …|f dd|d� t 	t
|ƒ¡}tt
|ƒƒD ]}t|d d …|f ƒ||< �qdt|t |j¡|ddd	� |dd d …f dk}|d|f |d|f  }t||ƒ\}}t||ƒ}	|| }
|| | }|
| }t|jd ƒD ]@}t t|d d …|f ƒ¡�rt|d d …|f dd
d
|d� �q|t|ƒ }|	t|	ƒ }dtjd| dd� }dtjd| dd� }tt|ƒ|j ƒ}tt|ƒ|j ƒ}t|| || dd|d� t 	t
|ƒ¡}tt
|ƒƒD ]}t|d d …|f ƒ||< �qêt|t |j¡|d� tt|ƒt|t |¡ ƒƒ d S )NÚ
Tr’   r[   r   ©ÚrtolÚatolÚerr_msggH¯¼šò×z>)r›   rš   rœ   )rœ   r›   rš   r—   y       €      ð¿rK   g»½×Ùß|Û=)Útol©rœ   )rB   rN   rE   r?   r	   r
   rŠ   r   ZlexsortÚemptyr_   r0   ÚonesÚsizeÚallrC   Zreal_if_closer7   ÚabsÚimagr@   )rq   rW   ÚBÚ
atol_homogZ
rtol_homogZB0Úmsgrs   r�   ZwtZval1Zval2rŒ   ÚpermZpermtÚlengthZbeta_nonzeroZwhÚresZw_finZwt_finrX   rX   rY   Ú_check_gen_eig®   sn    ÿ


"ÿÿ
ÿ
ÿzTestEig._check_gen_eigc                 C   sŒ   t g d¢g d¢g d¢g d¢g d¢gƒ}t g d¢g d¢g d¢g d	¢g d
¢gƒ}tjdd��  | j||dd� W d   ƒ n1 s~0    Y  d S )N)é   é"   é   r®   é   )é-   r°   é*   é   é   )é'   é/   é1   é   r­   )é   r®   r·   é   é   )é&   é,   r¼   é   é   )é   r·   é   r¯   r½   )r®   é.   é(   r·   é%   )r·   rÂ   r²   rÀ   rÀ   )é   rÀ   r¸   é   é   )r½   é#   é   r¹   r¬   Úignore©r¢   gê-�™—a=)r¦   )r3   rN   Úerrstater«   ©rq   rW   r¥   rX   rX   rY   Útest_singular÷   s    üüzTestEig.test_singularc                 C   s¾   t tg d¢ƒƒ}tg d¢g d¢g d¢fƒ}tg d¢g d¢g d¢fƒ}tdƒ}td	ƒ}t ||g|| gg¡}t ||g||gg¡}tjd
d�� |  ||¡ W d   ƒ n1 s°0    Y  d S )N)r[   r   ri   )rL   rƒ   rƒ   )rƒ   rL   rƒ   )rƒ   rƒ   rL   )r[   rƒ   r   )rƒ   r[   r   ©r   r   r   ©ri   ri   ri   rÉ   rÊ   )r4   r3   r8   rE   rN   ÚblockrË   r«   )rq   ÚMÚKÚDÚZZI3rW   r¥   rX   rX   rY   Útest_falker  s    zTestEig.test_falkerc                 C   sh   dd„ }t jdd��@ tdƒD ]&}||d d d�\}}|  ||¡ qW d   ƒ n1 sZ0    Y  d S )Nc                 S   sf   d| d  }d|  }g d¢g d¢dd|dgddd|gg}g d¢g d¢ddd| gdd|dgg}||fS )	Né÷ÿÿÿrL   )r[   r   r   r   )r   r[   r   r   r   )r   r   r[   r   )r   r   r   r[   r[   rX   )ÚomegaÚc1Úc2rW   r¥   rX   rX   rY   Úmatrices  s    

ý
ýz)TestEig.test_bad_geneig.<locals>.matricesrÉ   rÊ   éd   ç      @)r×   )rN   rË   rŠ   r«   )rq   rÚ   ÚkrW   r¥   rX   rX   rY   Útest_bad_geneig  s
    zTestEig.test_bad_geneigc                 C   s„   t j d¡}td|ƒ}|  |d ¡ td|ƒ}|  ||¡ | d¡d| d¡  }|  |d ¡ | d¡d| d¡  }|  ||¡ d S )NéÒ  ri   rÏ   rK   )rN   rO   ÚRandomStaterf   r«   )rq   ra   rW   r¥   rX   rX   rY   Útest_make_eigvals,  s    

zTestEig.test_make_eigvalsc           	      C   sf  g d¢g d¢g d¢g}t |dd�\}}dtdƒ d ddtdƒ d g}td	d	d	tdƒd
  d gƒ}tg d¢ƒ}td	d	d	tdƒd
  d gƒ}|t|ƒ }|t|ƒ }|t|ƒ }t||ƒ t||d d …df t|d ƒ ƒ t||d d …d	f t|d ƒ ƒ t||d d …df t|d ƒ ƒ td
ƒD ]4}t||d d …|f  || |d d …|f  ƒ �q,d S )Nrh   rj   Frz   rm   rn   rL   r   r[   ri   r�   r„   r…   r†   )r	   r=   r3   r0   r   rA   rŠ   r‹   rX   rX   rY   Útest_check_finite:  s    "
"""zTestEig.test_check_finitec                 C   s"   t  d¡ dd¡}ttt|ƒ dS )z:Check that passing a non-square array raises a ValueError.rl   ri   rL   N)rN   r9   ÚreshapeÚassert_raisesÚ
ValueErrorr	   )rq   rW   rX   rX   rY   Útest_not_square_errorK  s    zTestEig.test_not_square_errorc                 C   s:   t dƒ}t d¡ dd¡}ttt||ƒ ttt||ƒ dS )zOCheck that passing arrays of with different shapes
        raises a ValueError.rL   ç      "@ri   N)rE   rN   r9   rã   rä   rå   r	   rÌ   rX   rX   rY   Útest_shape_mismatchP  s    zTestEig.test_shape_mismatchc                 C   sÄ   t jg d¢g d¢g d¢g d¢gdd�}t jg d¢g d¢g d	¢g d
¢gdd�}t||ƒ\}}t j ¡ �L}| td¡ t j|ddd� ¡ sŠJ ‚t j|ddd� ¡ s¢J ‚W d   ƒ n1 s¶0    Y  d S )N)g      (@ç      <@g      S@g     €k@)g      0@g      @@g      T@g      l@)g      8@ç      D@g      V@g      m@)rê   g      L@g      Z@g      o@Úfloat64©rV   )ç       @ç      @ç      $@ré   )r‚   rÜ   ç      &@g      =@)rÜ   ç      @g      *@g      ?@)rç   rð   g      1@g     €A@z%invalid value encountered in multiplyrî   ç›+¡†›„=©r›   ç       @)	rN   r3   r	   ÚtestingÚsuppress_warningsÚfilterÚRuntimeWarningÚiscloseÚany)rq   rW   r¥   rÓ   ÚVÚsuprX   rX   rY   Útest_gh_11577X  s&    
ýý
ýý	zTestEig.test_gh_11577N)r—   r—   )r}   r~   r   ru   r‘   ry   r–   r«   rÍ   rÕ   rÞ   rá   râ   ræ   rè   rý   rX   rX   rX   rY   r€   y   s   
	
Ir€   c                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestEigBandedc                 C   s   |   ¡  d S ©N)Úcreate_bandmat©rq   rX   rX   rY   Úsetup_methodv  s    zTestEigBanded.setup_methodc                 C   s  d}d| _ d| _tt|dƒƒtt|d dƒdƒ tt|d dƒdƒ tt|d dƒdƒ tt|d dƒdƒ | _tt|dƒƒd	tt|d dƒdƒ  d	tt|d dƒdƒ  tt|d dƒdƒ tt|d dƒdƒ | _tt|dƒƒtt|d dƒdƒ tt|d d
ƒdƒ tt|d dƒdƒ tt|d dƒdƒ | _d	tt|dƒƒ tt|d dƒdƒ d	tt|d d
ƒdƒ  tt|d dƒdƒ tt|d dƒdƒ | _t 	| j¡\}}|j
}t|ƒ}|| | _|dd…|f | _t 	| j¡\}}|j
}t|ƒ}|| | _|dd…|f | _| jd }t||ftd�| _t||ftd�| _t|ƒD ]J}t| j|ƒ| j|| d ||…f< t| j|ƒ| j|| d ||…f< �qJd| j  | j d }t||ftd�| _t| jƒ| jd| j  dd…f< t| j ƒD ]l}t| j|d ƒ| jd| j  d | |d |…f< t| j| d ƒ| jd| j  d | d|d | …f< �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`.é
   rL   ç      ð?r[   ç      ð¿rƒ   ç       Àr�   rK   ç      Àrí   Nrì   r   ù      ð?      ð?)ÚKLÚKUr4   r5   Úsym_matÚherm_matÚreal_matÚcomp_matr6   r	   Úrealr7   Ú	w_sym_linÚevec_sym_linÚ
w_herm_linÚevec_herm_linr8   ÚfloatÚbandmat_symÚcomplexÚbandmat_hermrŠ   Úbandmat_realÚbandmat_compr9   r•   Úbc)rq   ÚNÚewÚevÚargsZLDABrŒ   rX   rX   rY   r   y  s�    ÿÿþþÿþýüÿÿþþÿþýü


"&0ÿ,0ÿ,zTestEigBanded.create_bandmatc                 C   sP   t | jdd�\}}}|dd…t|ƒf }tt|ƒ| jƒ tt|ƒt| jƒƒ dS )zTCompare dsbev eigenvalues and eigenvectors with
           the result of linalg.eig.r[   ©Ú	compute_vN)r+   r  r7   r   r@   r  r£   r  ©rq   rs   ÚevecÚinfoÚevec_rX   rX   rY   Ú
test_dsbevÊ  s    zTestEigBanded.test_dsbevc                 C   sP   t | jdd�\}}}|dd…t|ƒf }tt|ƒ| jƒ tt|ƒt| jƒƒ dS )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.r[   r  N)r,   r  r7   r   r@   r  r£   r  r!  rX   rX   rY   Útest_dsbevdÒ  s    zTestEigBanded.test_dsbevdc              	   C   sl   t | jƒ\}}t| jddd|ddd�\}}}}}|dd…t|ƒf }tt|ƒ| jƒ tt|ƒt| j	ƒƒ dS )zUCompare dsbevx eigenvalues and eigenvectors
           with the result of linalg.eig.ç        r[   rL   ©r   rŠ   N)
r?   r  r-   r  r7   r   r@   r  r£   r  ©rq   r  rs   r"  ÚnumZifailr#  r$  rX   rX   rY   Útest_dsbevxÚ  s    ÿzTestEigBanded.test_dsbevxc                 C   sP   t | jdd�\}}}|dd…t|ƒf }tt|ƒ| jƒ tt|ƒt| jƒƒ dS )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.r[   r  N)r.   r  r7   r   r@   r  r£   r  r!  rX   rX   rY   Útest_zhbevdå  s    zTestEigBanded.test_zhbevdc              	   C   sl   t | jƒ\}}t| jddd|ddd�\}}}}}|dd…t|ƒf }tt|ƒ| jƒ tt|ƒt| j	ƒƒ dS )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.r'  r[   rL   r(  N)
r?   r  r/   r  r7   r   r@   r  r£   r  r)  rX   rX   rY   Útest_zhbevxí  s    ÿzTestEigBanded.test_zhbevxc                 C   sn  t | jƒ}|j}tt|ƒ| jƒ t | jƒ}|j}tt|ƒ| jƒ d}t 	d¡}t | jd||fd�}tt|ƒ| j||d … ƒ t | jd||fd�}tt|ƒ| j||d … ƒ | j| d }| j| d }t | jd||fd�}	tt|	ƒ| j||d … ƒ | j| d }| j| d }t | jd||fd�}
tt|
ƒ| j||d … ƒ t | jdd	�}|j}tt|ƒ| jƒ d
S )z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rL   rl   rŒ   ©ÚselectÚselect_ranger[   çñhãˆµøä>rd   Frz   N)
r   r  r  r   r@   r  r  r  rN   Zlonglong)rq   Úw_symÚw_hermÚind1Úind2Ú	w_sym_indÚ
w_herm_indÚv_lowerÚv_upperÚ	w_sym_valÚ
w_herm_valrX   rX   rY   Útest_eigvals_bandedø  sP    


ÿÿÿÿÿÿþÿz!TestEigBanded.test_eigvals_bandedc                 C   s�  t | jƒ\}}|dd…t|jƒf }tt|ƒ| jƒ tt|ƒt| jƒƒ t | j	ƒ\}}|dd…t|jƒf }tt|ƒ| j
ƒ tt|ƒt| jƒƒ d}d}t | jd||fd�\}	}
tt|	ƒ| j||d … ƒ tt|
ƒt| jdd…||d …f ƒƒ t | j	d||fd�\}}tt|ƒ| j
||d … ƒ tt|ƒt| jdd…||d …f ƒƒ | j| d }| j| d }t | jd||fd�\}}tt|ƒ| j||d … ƒ tt|ƒt| jdd…||d …f ƒƒ | j
| d }| j
| d }t | j	d||fd�\}}tt|ƒ| j
||d … ƒ tt|ƒt| jdd…||d …f ƒƒ t | jd	d
�\}}|dd…t|jƒf }tt|ƒ| jƒ tt|ƒt| jƒƒ dS )zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. NrL   rl   rŒ   r.  r[   r1  rd   Frz   )r   r  r7   r  r   r@   r  r£   r  r  r  r  )rq   r2  Zevec_symZ	evec_sym_r3  Z	evec_hermZ
evec_herm_r4  r5  r6  Zevec_sym_indr7  Zevec_herm_indr8  r9  r:  Zevec_sym_valr;  Zevec_herm_valrX   rX   rY   Útest_eig_banded"  st    þ
ÿÿþ
ÿÿþ
ÿÿþ
ÿÿzTestEigBanded.test_eig_bandedc                 C   s¨   t | jƒ\}}t| j| j| jƒ\}}}t|d| j dd…f ƒ}t| j| j ƒD ]4}|t|d| j d | |d |…f |d ƒ7 }qPt| jdd�\}}	}
t	||
ƒ dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rL   Nr[   r   ©Z	permute_l)
r?   r  r'   r  r	  r
  r4   rŠ   r   r   ©rq   rÑ   r  Úlu_symm_bandÚipivr#  ÚurŒ   Zp_linZl_linZu_linrX   rX   rY   Útest_dgbtrf\  s    2zTestEigBanded.test_dgbtrfc                 C   s¨   t | jƒ\}}t| j| j| jƒ\}}}t|d| j dd…f ƒ}t| j| j ƒD ]4}|t|d| j d | |d |…f |d ƒ7 }qPt| jdd�\}}	}
t	||
ƒ dS )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rL   Nr[   r   r>  )
r?   r  r)   r  r	  r
  r4   rŠ   r   r   r?  rX   rX   rY   Útest_zgbtrfj  s    2zTestEigBanded.test_zgbtrfc                 C   sP   t | j| j| jƒ\}}}t|| j| j| j|ƒ\}}t | j| j¡}t	||ƒ dS )zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r'   r  r	  r
  r(   r•   r6   r   r  r   ©rq   r@  rA  r#  ÚyZy_linrX   rX   rY   Útest_dgbtrsx  s    zTestEigBanded.test_dgbtrsc                 C   sP   t | j| j| jƒ\}}}t|| j| j| j|ƒ\}}t | j| j¡}t	||ƒ dS )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r)   r  r	  r
  r*   r  r6   r   r  r   rE  rX   rX   rY   Útest_zgbtrs‚  s    zTestEigBanded.test_zgbtrsN)r}   r~   r   r  r   r%  r&  r+  r,  r-  r<  r=  rC  rD  rG  rH  rX   rX   rX   rY   rþ   u  s   Q*:
rþ   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestEigTridiagonalc                 C   s   |   ¡  d S rÿ   )Úcreate_trimatr  rX   rX   rY   r  Ž  s    zTestEigTridiagonal.setup_methodc                 C   s‚   d}t |dƒ| _t |d dƒ| _t| jƒt| jdƒ t| jdƒ | _t | j¡\}}|j}t|ƒ}|| | _	|dd…|f | _
dS )z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r  r  r[   r  rƒ   N)r5   rc   Úer4   Zfull_matr6   r	   r  r7   rs   r"  )rq   r  r  r  r  rX   rX   rY   rJ  ‘  s    $
z TestEigTridiagonal.create_trimatc                 C   sx   t tt| j| jdd… ƒ t tt| j| jd ƒ t tt| j| jdd� t tt| j| jdd� t tt| j| jddd	� dS )
zTest error conditions.Nrƒ   rK   r  ©Úlapack_driverÚfoorŒ   ©r   rƒ   r.  )rä   rå   r"   rc   rK  r`   r  rX   rX   rY   Útest_degenerate   s    ÿÿÿz"TestEigTridiagonal.test_degeneratec           	   
   C   s"  dD ]&}t | j| j|d�}tt|ƒ| jƒ qdD ]}ttt | j| jdddd� q0dD ]È}t | j| jdd	t| jƒd
 f|d�}tt|ƒ| jƒ d}d}t | j| jd||f|d�}tt|ƒ| j||d
 … ƒ | j| d }| j| d }t | j| jd||f|d�}tt|ƒ| j||d
 … ƒ qTdS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)ÚsterfÚstevÚstebzÚstemrÚautorL  )rQ  rR  rR  rŒ   r…   ©rM  r/  r0  ©rS  rT  rU  r   r[   ©r/  r0  rM  rL   rl   r1  rd   N)	r"   rc   rK  r   r@   rs   rä   rå   r_   )	rq   Údriverrs   Zw_indr4  r5  r8  r9  Zw_valrX   rX   rY   Útest_eigvalsh_tridiagonal¯  s8    þþþþz,TestEigTridiagonal.test_eigvalsh_tridiagonalc           	   	   C   sÔ  t tt| j| jdd� dD ]R}t| j| j|d�\}}|dd…t|ƒf }tt|ƒ| jƒ tt	|ƒt	| j
ƒƒ qt tt| j| jdddd� d	D �]@}d
}t| jƒd }t| j| jd||f|d�\}}tt|ƒ| jƒ tt	|ƒt	| j
ƒƒ d}d}t| j| jd||f|d�\}}tt|ƒ| j||d … ƒ tt	|ƒt	| j
dd…||d …f ƒƒ | j| d }| j| d }t| j| jd||f|d�\}}tt|ƒ| j||d … ƒ tt	|ƒt	| j
dd…||d …f ƒƒ qŒdS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. rQ  rL  )rS  rR  rT  rU  NrR  rŒ   r…   rV  rW  r   r[   rX  rL   rl   r1  rd   )rä   rå   r#   rc   rK  r7   r   r@   rs   r£   r"  r_   )	rq   rY  rs   r"  r$  r4  r5  r8  r9  rX   rX   rY   Útest_eigh_tridiagonalÑ  sP    ÿÿ
þ
þ
ÿþ
ÿz(TestEigTridiagonal.test_eigh_tridiagonalc                 C   sÊ   t  dg¡}t  g ¡}t||dd�}|jdks2J ‚t||ƒ t||ddd�\}}|jdks^J ‚|jdkslJ ‚t||ƒ t|td	ggƒƒ t||d
dd�\}}|jdksªJ ‚|jdks¸J ‚|jdksÆJ ‚dS )zSee gh-20075r  T)Zeigvals_onlyr[   rŒ   r„   r.  rL   r  rd   )r�   r   r   )r   r“   N)rN   r3   r#   Úndimr   r¡   r?   )rq   rr   r•   Úxrû   rX   rX   rY   Útest_eigh_tridiagonal_1x1û  s    


z,TestEigTridiagonal.test_eigh_tridiagonal_1x1N)	r}   r~   r   r  rJ  rP  rZ  r[  r^  rX   rX   rX   rY   rI  �  s   "*rI  c                   @   sÄ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
 de¡e	j
 dd¡dd„ ƒƒZe	j
 dd¡dd„ ƒZe	j
 dd¡e	j
 dd¡dd„ ƒƒZdd„ Ze	j
 deeg¡dd„ ƒZdd„ Zd S )!ÚTestEighc                 C   s   t j d¡ d S )Nrß   )rN   rO   Úseedr  rX   rX   rY   Úsetup_class  s    zTestEigh.setup_classc              	   C   sž  t ttt ddg¡ƒ t ttt ddg¡t ddg¡ƒ t ttt ddg¡t ddg¡ƒ t ttt ddg¡t ddg¡dd� t ttt ddg¡t ddg¡ddgddgd� tj ¡ �L}| td¡ t ttt ddg¡t ddg¡ddgddgd� W d   ƒ n1 �s0    Y  t ttt ddg¡t ddg¡d	dgd
� tj ¡ �F}| td¡ t ttt ddg¡t ddg¡d	dgd� W d   ƒ n1 �sš0    Y  t ttt ddg¡t ddg¡ddgd
� tj ¡ �F}| td¡ t ttt ddg¡t ddg¡ddgd� W d   ƒ n1 �s&0    Y  t ttt ddg¡t ddg¡dd	gd
� tj ¡ �F}| td¡ t ttt ddg¡t ddg¡dd	gd
� W d   ƒ n1 �s²0    Y  t ttt ddg¡t ddg¡dd	gd� t ttt ddg¡dd� t ttt ddg¡d dd� t ttt ddg¡t ddg¡dd� t ttt ddg¡t ddg¡dddgd� t ttt ddg¡t ddg¡dddgd� d S )Nr[   rL   ri   é   )Útype)Úsubset_by_valueÚsubset_by_indexzKeyword argument 'eigvals)rd  r
   r   ©re  ©r
   r�   ©rd  Zwrong©rY  ÚgvxÚevrÚgvd)rY  re  )	rä   rå   r   rN   r    rõ   rö   r÷   ÚDeprecationWarning)rq   rü   rX   rX   rY   Útest_wrong_inputs  sh    ""ÿÿÿ&ÿÿ&ÿÿ&ÿÿ&ÿÿÿÿzTestEigh.test_wrong_inputsc                 C   s&   t ttt ddg¡t ddg¡ƒ d S )Nri   )rä   r&   r   rN   r    r  rX   rX   rY   Útest_nonpositive_bH  s    zTestEigh.test_nonpositive_bc                 C   s²   t tƒD ]¤\}}td|d�}t|ddgd�\}}t|jd t|ƒƒ t|dk|dk @ ƒs\J ‚tdd|d�}t||ddgd�\}}t|jd t|ƒƒ t|dk|dk @ ƒsJ ‚qd S )	Né   rì   r�   rL   rh  r[   T)rU   rV   )Ú	enumerateÚDTYPESrZ   r   r   r?   r_   r¢   )rq   ÚindÚdtrr   rs   rd   r•   rX   rX   rY   Útest_value_subsetsL  s    zTestEigh.test_value_subsetsc                 C   sF   t ddgddggƒ}t ddgddggƒ}t|ƒ\}}t||ƒ\}}d S )Nr[   rL   é   ri   rk   )r3   r   )rq   rr   r•   rs   ÚzrX   rX   rY   Útest_eigh_integerY  s    zTestEigh.test_eigh_integerc                 C   s>   dd l }|j d¡ ¡ }t |¡}ttt|ƒ ttt|ƒ d S )Nr   rL   )	Zscipy.sparseÚsparseÚidentityZtocscrN   Z
atleast_2drä   rå   r   )rq   Zscipyrr   r•   rX   rX   rY   Útest_eigh_of_sparse_  s
    
zTestEigh.test_eigh_of_sparseÚdtype_rY  )r  Zevdrk  Zevxc                 C   sH   t d|d�}t||d�\}}t|| ||  ddt |¡j dd� d S )Nrp  )rT   rV   ri  r'  éè  ©r›   rš   )rZ   r   r   rN   ÚfinfoÚeps)rq   rY  r|  rr   rs   rd   rX   rX   rY   Útest_various_drivers_standardg  s    þz&TestEigh.test_various_drivers_standardc                 C   s€   t dgg|d�\}}t|tdgƒdd� t|tdggƒdd� t dgg|d�\}}t|tdgƒdd� t|tdggƒdd� d S )Nr[   ri  r  gVçž¯Ò<ró   rK   r   )r   r   r3   )rq   rY  rs   rd   rX   rX   rY   Útest_1x1_lworkp  s    zTestEigh.test_1x1_lworkrc  rh   )Úgvrl  rj  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     ˆ³@rp  T©rU   )rr   r•   rY  rc  r[   r'  r~  rL   )rN   ÚspacingrZ   r   r   )rq   rY  rc  r›   rr   r•   rs   rd   rX   rX   rY   Ú test_various_drivers_generalized{  s    
""z)TestEigh.test_various_drivers_generalizedc                 C   s’   t dƒ}t|ddgd�}tt|ƒdƒ t|ddgd�}tt|ƒdƒ t||ƒ t g d¢¡}t|ddgd�}tt|ƒdƒ t|t dd	g¡ƒ d S )
Nrk   r[   rL   rf  )r[   ç333333ó?çÍÌÌÌÌÌô?ç      ø?rL   gffffffö?rh  r‡  rˆ  )rZ   r   r   r_   r   rN   r4   r3   )rq   rr   rs   Zw2r•   Zw3rX   rX   rY   Útest_eigvalsh_new_args‰  s    
zTestEigh.test_eigvalsh_new_argsÚmethodc                 C   sÎ   t jtdd��" |t d¡dd� W d   ƒ n1 s60    Y  t jtdd��& |t d¡ddgd	� W d   ƒ n1 sz0    Y  t jd
d��* |t d¡t dd¡dƒ W d   ƒ n1 sÀ0    Y  d S )NúKeyword argument 'turbo')Úmatch©rL   rL   T©ZturboúKeyword argument 'eigvals'r   r[   rg  zuse keyword argumentsrL   )ÚpytestZwarnsrm  rN   r8   Zdeprecated_callrE   )rq   r‹  rX   rX   rY   Útest_deprecation_warnings—  s    ÿ0ÿ4z"TestEigh.test_deprecation_warningsc                 C   sø   t dƒ}t ddd�}tj ¡ �.}| td¡ t||dd�\}}W d   ƒ n1 sR0    Y  t||dd�\}}t||ƒ t||ƒ tj ¡ �0}| td¡ t|d	d
gd�\}}W d   ƒ n1 sÂ0    Y  t|d	d
gd�\}}t||ƒ t||ƒ d S )Nri   Tr„  rŒ  r�  rl  ri  r�  r   r[   rg  rf  )rZ   rN   rõ   rö   r÷   rm  r   r   )rq   rr   r•   rü   Zw_depZv_deprs   rd   rX   rX   rY   Útest_deprecation_results¢  s    0

2
z!TestEigh.test_deprecation_resultsN)r}   r~   r   ra  rn  ro  ru  rx  r{  r‘  ÚmarkÚparametrizerr  r�  r‚  r†  rŠ  r   r   r’  r“  rX   rX   rX   rY   r_    s$   6



r_  c                   @   sŠ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zejje dd�ejjdd„ ƒƒZdS )ÚTestSVD_GESDDZgesddc                 C   s,   t ttdggdd� t ttdggdd� d S )Nr  rL  rN  )rä   r`   r   rå   r  rX   rX   rY   rP  º  s    zTestSVD_GESDD.test_degeneratec                 C   s´   g d¢g d¢g d¢g}dD ]”}t ||| jd�\}}}t|j| tdƒƒ t|j| tdƒƒ t|jd |jd f|jjƒ}t	t
|ƒƒD ]}|| |||f< q†t|| | |ƒ qd S )Nrh   ©r[   rp  ri   rj   ©TF©Úfull_matricesrM  ri   r   ©r   rM  r   rR   rE   r8   r?   rV   ÚcharrŠ   r_   ©rq   rr   rš  rB  ÚsÚvhÚsigmarŒ   rX   rX   rY   ru   ¾  s    ÿzTestSVD_GESDD.test_simplec                 C   s´   g d¢g d¢g d¢g}dD ]”}t ||| jd�\}}}t|j| tdƒƒ t|j| tdƒƒ t|jd |jd f|jjƒ}t	t
|ƒƒD ]}|| |||f< q†t|| | |ƒ qd S )Nrh   rj   r˜  r™  ri   r   r›  r�  rX   rX   rY   Útest_simple_singularÊ  s    ÿz"TestSVD_GESDD.test_simple_singularc                 C   s    g d¢g d¢g}dD ]†}t ||| jd�\}}}t|j| t|jd ƒƒ t|jd |jd f|jjƒ}t	t
|ƒƒD ]}|| |||f< qrt|| | |ƒ qd S )Nrh   ©rb  rk   rl   r˜  r™  r   ©r   rM  r   rR   rE   r?   r8   rV   rœ  rŠ   r_   r�  rX   rX   rY   Útest_simple_underdetÖ  s    ÿz"TestSVD_GESDD.test_simple_underdetc                 C   sº   ddgddgddgg}dD ]š}t ||| jd�\}}}t|j| t|jd ƒƒ t|j| tdƒƒ t|jd |jd f|jjƒ}t	t
|ƒƒD ]}|| |||f< qŒt|| | |ƒ qd S )	Nr[   rL   rb  rk   ri   r˜  r™  r   r£  r�  rX   rX   rY   Útest_simple_overdetá  s    ÿz!TestSVD_GESDD.test_simple_overdetc                 C   sî   t j d¡}d}d}tdƒD ]Ì}| ||g¡| ||g¡fD ]ª}dD ] }t||| jd�\}}}	t|j| t|j	d ƒƒ t|	|	j t|	j	d ƒƒ t
|j	d |	j	d f|jjƒ}
tt|ƒƒD ]}|| |
||f< q¼t||
 |	 |ƒ qDq<qd S )	Nrß   rp  rº   ri   r˜  r™  r[   r   )rN   rO   rà   rŠ   r   rM  r   rR   rE   r?   r8   rV   rœ  r_   )rq   ra   rT   ÚmrŒ   rr   rš  rB  rž  rŸ  r   rX   rX   rY   Útest_randomí  s     ÿzTestSVD_GESDD.test_randomc                 C   sÈ   g d¢g d¢g d¢g}dD ]¨}t ||| jd�\}}}t| ¡ j| t|jd ƒƒ t| ¡ j| t|jd ƒƒ t|jd |jd f|jj	ƒ}t
t|ƒƒD ]}|| |||f< qšt|| | |ƒ qd S )Nrh   )r[   y               @ri   rj   r˜  r™  r[   r   )r   rM  r   rQ   rR   rE   r?   r8   rV   rœ  rŠ   r_   r�  rX   rX   rY   ry   ý  s    ÿz!TestSVD_GESDD.test_simple_complexc              	   C   sð   t j d¡}d}d}tdƒD ]Î}dD ]Ä}| ||g¡| ||g¡fD ]¢}|d| t|jƒ¡  }t||| jd�\}}}	t| 	¡ j
| t|jd ƒƒ t|jd |	jd	 f|jjƒ}
tt|ƒƒD ]}|| |
||f< q¾t||
 |	 |ƒ qDq$qd S )
Nrß   rp  rº   ri   r˜  rK   r™  r[   r   )rN   rO   rà   rŠ   Úlistr?   r   rM  r   rQ   rR   rE   r8   rV   rœ  r_   )rq   ra   rT   r¦  rŒ   rš  rr   rB  rž  rŸ  r   rX   rX   rY   Útest_random_complex	  s"     ÿÿz!TestSVD_GESDD.test_random_complexc                 C   sZ   t j d¡}g d¢}|D ]<}t jt jt jt jfD ]"}|j|Ž  |¡}t	|| j
d� q0qd S )Nrß   ))r¿   rÆ   )r¾   é2   )é<   rÛ   rL  )rN   rO   rà   r:   rë   r;   Ú
complex128rP   rS   r   rM  )rq   ra   ÚsizesÚszrt  rr   rX   rX   rY   Útest_crash_1580  s    zTestSVD_GESDD.test_crash_1580c                 C   sª   g d¢g d¢g d¢g}t |d| jd�\}}}t|j| tdƒƒ t|j| tdƒƒ t|jd |jd f|jjƒ}t	t
|ƒƒD ]}|| |||f< q~t|| | |ƒ d S )Nrh   r—  rj   F)r{   rM  ri   r   r›  )rq   rr   rB  rž  rŸ  r   rŒ   rX   rX   rY   râ   &  s    zTestSVD_GESDD.test_check_finitec                 C   s4   t  g d¢g d¢g d¢g d¢g¡}t|| jd� d S )N)çKÚ}\UUÅ?ç“vWUUå?r°  r'  r'  r'  )r'  r°  r±  r°  r'  r'  )r'  r'  r°  r±  r°  r'  )r'  r'  r'  r°  r±  r°  rL  )rN   r3   r   rM  )rq   r•   rX   rX   rY   Útest_gh_50390  s    
ýÿzTestSVD_GESDD.test_gh_5039z64-bit LAPACK required©Úreasonc                 C   s`   t dd� tjddgtjd�}d|d< t|dd�\}}}t|d	 d
ƒ t|d |d  d
ƒ d S )NihB  )Zfree_mbr[   l        rì   rO  F)rš  r   r  r„   )rH   rN   r8   r:   r   r   )rq   rW   rB  rž  rŸ  rX   rX   rY   Útest_large_matrixA  s    
zTestSVD_GESDD.test_large_matrixN)r}   r~   r   rM  rP  ru   r¡  r¤  r¥  r§  ry   r©  r¯  râ   r²  r‘  r”  ÚskipifrI   Úslowrµ  rX   rX   rX   rY   r–  ·  s   	
r–  c                   @   s   e Zd ZdZdS )ÚTestSVD_GESVDÚgesvdN)r}   r~   r   rM  rX   rX   rX   rY   r¸  L  s   r¸  c                  C   sD   t jdt jd�} ttƒ� t| ƒ W d   ƒ n1 s60    Y  d S )N)i¿  iŠÏ  rì   )rN   r    rë   rä   rå   r   )ÚdfrX   rX   rY   Útest_svd_gesdd_nofegfaultP  s    
r»  c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
ejjdd„ ƒZdS )ÚTestSVDValsc                 C   s:   g gt  d¡t  d¡fD ]}t|ƒ}t|t  d¡ƒ qd S )N)rL   r   )r   ri   r   )rN   rŸ   r    r   r   ©rq   rr   rž  rX   rX   rY   Ú
test_emptyZ  s    zTestSVDVals.test_emptyc                 C   sZ   g d¢g d¢g d¢g}t |ƒ}tt|ƒdkƒ t|d |d   koN|d kn  ƒ d S )Nrh   rj   ri   r   r[   rL   ©r   r   r_   r½  rX   rX   rY   ru   _  s    zTestSVDVals.test_simplec                 C   s@   g d¢g d¢g}t |ƒ}tt|ƒdkƒ t|d |d kƒ d S )Nrh   r¢  rL   r   r[   r¿  r½  rX   rX   rY   r¤  e  s    z TestSVDVals.test_simple_underdetc                 C   sF   ddgddgddgg}t |ƒ}tt|ƒdkƒ t|d |d kƒ d S )Nr[   rL   rb  rk   ri   r   r¿  r½  rX   rX   rY   r¥  k  s    zTestSVDVals.test_simple_overdetc                 C   sZ   g d¢g d¢g d¢g}t |ƒ}tt|ƒdkƒ t|d |d   koN|d kn  ƒ d S )Nrh   )r[   rp  ù              @rj   ri   r   r[   rL   r¿  r½  rX   rX   rY   ry   q  s    zTestSVDVals.test_simple_complexc                 C   s@   g d¢g d¢g}t |ƒ}tt|ƒdkƒ t|d |d kƒ d S )Nrh   )rb  y              @rl   rL   r   r[   r¿  r½  rX   rX   rY   Útest_simple_underdet_complexw  s    z(TestSVDVals.test_simple_underdet_complexc                 C   sF   ddgddgddgg}t |ƒ}tt|ƒdkƒ t|d |d kƒ d S )Nr[   rL   rb  rk   rÀ  r   r¿  r½  rX   rX   rY   Útest_simple_overdet_complex}  s    z'TestSVDVals.test_simple_overdet_complexc                 C   s^   g d¢g d¢g d¢g}t |dd�}tt|ƒdkƒ t|d |d   koR|d kn  ƒ d S )	Nrh   rj   Frz   ri   r   r[   rL   r¿  r½  rX   rX   rY   râ   ƒ  s    zTestSVDVals.test_check_finitec                 C   s&   t j d¡ t j dd¡}t|ƒ d S )Nrß   iÜ  ið
  )rN   rO   r`  rP   r   ©rq   rr   rX   rX   rY   Útest_crash_2609‰  s    zTestSVDVals.test_crash_2609N)r}   r~   r   r¾  ru   r¤  r¥  ry   rÁ  rÂ  râ   r‘  r”  r·  rÄ  rX   rX   rX   rY   r¼  X  s   r¼  c                   @   s   e Zd Zdd„ ZdS )ÚTestDiagSVDc                 C   s,   t tg d¢ddƒg d¢g d¢g d¢gƒ d S )N©r[   r   r   ri   rÎ   )r   r   r  rX   rX   rY   ru   “  s    ÿzTestDiagSVD.test_simpleN)r}   r~   r   ru   rX   rX   rX   rY   rÅ  ‘  s   rÅ  c                   @   s¬  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgdh„ Z6diS )jÚTestQRc                 C   sH   g d¢g d¢g d¢g}t |ƒ\}}t|j| tdƒƒ t|| |ƒ d S ©N©é   rL   ri   ©rL   rm   ri   ©rk   ri   rl   ri   ©r   r   rR   rE   ©rq   rr   ÚqÚrrX   rX   rY   ru   ™  s    zTestQR.test_simplec                 C   st   g d¢g d¢g d¢g}t |ƒ\}}g d¢}t||dƒ\}}t|| |ƒ t||ƒ t|tdƒdƒ\}}t||ƒ d S )NrÉ  rË  rÌ  rh   rˆ   ri   ©r   r   r   rE   ©rq   rr   rÏ  rÐ  ÚcÚqcÚr2rX   rX   rY   Útest_simple_leftŸ  s    
zTestQR.test_simple_leftc                 C   sp   g d¢g d¢g d¢g}t |ƒ\}}g d¢}t||ƒ\}}t|| |ƒ t||ƒ t|tdƒƒ\}}t||ƒ d S )NrÉ  rË  rÌ  rh   ri   rÑ  rÒ  rX   rX   rY   Útest_simple_right©  s    
zTestQR.test_simple_rightc                 C   sº   t  g d¢g d¢g d¢g¡}t|dd�\}}}tt|ƒƒ}tt  |dd … |d d… k¡ƒ t|j| t	dƒƒ t|| |d d …|f ƒ t|d d …|f ƒ\}}t||ƒ t||ƒ d S )	NrÉ  rË  rÌ  T©Úpivotingr[   rƒ   ri   ©
rN   rB   r   r£   r4   r   r¢   r   rR   rE   ©rq   rr   rÏ  rÐ  Úprc   Úq2rÕ  rX   rX   rY   Útest_simple_pivoting³  s    "
zTestQR.test_simple_pivotingc                 C   sV   g d¢g d¢g d¢g}t |dd�\}}}g d¢}t||ddƒ\}}}t|| |ƒ d S )NrÉ  rË  rÌ  TrØ  rh   rˆ   ©r   r   r   ©rq   rr   rÏ  rÐ  ÚjpvtrÓ  rÔ  rX   rX   rY   Útest_simple_left_pivoting¾  s
    z TestQR.test_simple_left_pivotingc                 C   sV   g d¢g d¢g d¢g}t |dd�\}}}g d¢}t||dd�\}}}t|| |ƒ d S )NrÉ  rË  rÌ  TrØ  rh   rß  rà  rX   rX   rY   Útest_simple_right_pivotingÅ  s
    z!TestQR.test_simple_right_pivotingc                 C   sB   g d¢g d¢g}t |ƒ\}}t|j| tdƒƒ t|| |ƒ d S )NrÉ  rË  rL   rÍ  rÎ  rX   rX   rY   Útest_simple_trapÌ  s    zTestQR.test_simple_trapc                 C   s´   t  g d¢g d¢g¡}t|dd�\}}}tt|ƒƒ}tt  |dd … |d d… k¡ƒ t|j| t	dƒƒ t|| |d d …|f ƒ t|d d …|f ƒ\}}t||ƒ t||ƒ d S )NrÉ  rË  TrØ  r[   rƒ   rL   rÚ  rÛ  rX   rX   rY   Útest_simple_trap_pivotingÒ  s    "
z TestQR.test_simple_trap_pivotingc                 C   sH   ddgddgddgg}t |ƒ\}}t|j| tdƒƒ t|| |ƒ d S ©NrÊ  rL   rm   rk   ri   rÍ  rÎ  rX   rX   rY   Útest_simple_tallÝ  s    zTestQR.test_simple_tallc                 C   sº   t  ddgddgddgg¡}t|dd�\}}}tt|ƒƒ}tt  |dd … |d d	… k¡ƒ t|j| t	dƒƒ t|| |d d …|f ƒ t|d d …|f ƒ\}}t||ƒ t||ƒ d S )
NrÊ  rL   rm   rk   ri   TrØ  r[   rƒ   rÚ  rÛ  rX   rX   rY   Útest_simple_tall_pivotingä  s    "
z TestQR.test_simple_tall_pivotingc                 C   sd   ddgddgddgg}t |dd�\}}t|j| tdƒƒ t|| |ƒ t|jdƒ t|jd	ƒ d S )
NrÊ  rL   rm   rk   ri   Úeconomic©Úmode©ri   rL   rŽ  ©r   r   rR   rE   r   r?   rÎ  rX   rX   rY   Útest_simple_tall_eð  s    zTestQR.test_simple_tall_ec                 C   sÀ   t  ddgddgddgg¡}t|ddd�\}}}tt|ƒƒ}tt  |d	d … |d d
… k¡ƒ t|j| t	dƒƒ t|| |d d …|f ƒ t|d d …|f dd�\}}t||ƒ t||ƒ d S )NrÊ  rL   rm   rk   ri   Tré  ©rÙ  rë  r[   rƒ   rê  rÚ  rÛ  rX   rX   rY   Útest_simple_tall_e_pivotingù  s    "
z"TestQR.test_simple_tall_e_pivotingc                 C   s®   ddgddgddgg}t |dd�\}}ddg}t||d	ƒ\}}t|| |ƒ t||ƒ tg d
¢ƒ}t||d	dd�\}}t||d d…  |ƒ t|tdƒd	ƒ\}}t||ƒ d S )NrÊ  rL   rm   rk   ri   ré  rê  r[   rˆ   ©r[   rL   r   T©Zoverwrite_c©r   r   r   r3   rE   rÒ  rX   rX   rY   Útest_simple_tall_left  s    
zTestQR.test_simple_tall_leftc                 C   s„   ddgddgddgg}t |ddd�\}}}d	dg}t||d
dƒ\}}}t||ƒ t|| |ƒ t|tdƒd
dƒ\}}}t||ƒ d S )NrÊ  rL   rm   rk   ri   ré  T©rë  rÙ  r[   rˆ   )r   r   r   r   rE   )rq   rr   rÏ  rÐ  rá  rÓ  rÔ  ZkpvtrX   rX   rY   Útest_simple_tall_left_pivoting  s    
z%TestQR.test_simple_tall_left_pivotingc                 C   st   ddgddgddgg}t |dd�\}}g d¢}t||ƒ\}}t|| |ƒ t||ƒ t|tdƒƒ\}}t||ƒ d S )	NrÊ  rL   rm   rk   ri   ré  rê  rh   rÑ  ©rq   rr   rÏ  rÐ  rÓ  ÚcqrÕ  rX   rX   rY   Útest_simple_tall_right  s    
zTestQR.test_simple_tall_rightc                 C   sz   ddgddgddgg}t |ddd�\}}}g d	¢}t||dd
�\}}}t|| |ƒ t|tdƒdd
�\}}}t||ƒ d S )NrÊ  rL   rm   rk   ri   Tré  rï  rh   rØ  rÑ  ©rq   rr   rÏ  rÐ  rá  rÓ  rø  rX   rX   rY   Útest_simple_tall_right_pivoting&  s    z&TestQR.test_simple_tall_right_pivotingc                 C   sZ   g d¢g d¢g}t |ƒ\}}t|j| tdƒƒ t|| |ƒ t|jdƒ t|jdƒ d S )N©rÊ  rL   rk   rË  rL   rŽ  ©rL   ri   rí  rÎ  rX   rX   rY   Útest_simple_fat/  s    zTestQR.test_simple_fatc                 C   sÌ   t  g d¢g d¢g¡}t|dd�\}}}tt|ƒƒ}tt  |dd … |d d… k¡ƒ t|j| t	dƒƒ t|| |d d …|f ƒ t
|jdƒ t
|jd	ƒ t|d d …|f ƒ\}}t||ƒ t||ƒ d S )
Nrü  rË  TrØ  r[   rƒ   rL   rŽ  rý  ©rN   rB   r   r£   r4   r   r¢   r   rR   rE   r   r?   rÛ  rX   rX   rY   Útest_simple_fat_pivoting8  s    "
zTestQR.test_simple_fat_pivotingc                 C   s^   g d¢g d¢g}t |dd�\}}t|j| tdƒƒ t|| |ƒ t|jdƒ t|jdƒ d S )NrÉ  ©rL   rm   rk   ré  rê  rL   rŽ  rý  rí  rÎ  rX   rX   rY   Útest_simple_fat_eF  s    zTestQR.test_simple_fat_ec                 C   sÒ   t  g d¢g d¢g¡}t|ddd�\}}}tt|ƒƒ}tt  |dd … |d d… k¡ƒ t|j| t	dƒƒ t|| |d d …|f ƒ t
|jd	ƒ t
|jd
ƒ t|d d …|f dd�\}}t||ƒ t||ƒ d S )NrÉ  r  Tré  rï  r[   rƒ   rL   rŽ  rý  rê  rÿ  rÛ  rX   rX   rY   Útest_simple_fat_e_pivotingO  s    "
z!TestQR.test_simple_fat_e_pivotingc                 C   sr   g d¢g d¢g}t |dd�\}}ddg}t||dƒ\}}t|| |ƒ t||ƒ t|tdƒdƒ\}}t||ƒ d S )NrÉ  r  ré  rê  r[   rL   rˆ   rÑ  rÒ  rX   rX   rY   Útest_simple_fat_left]  s    
zTestQR.test_simple_fat_leftc                 C   st   g d¢g d¢g}t |ddd�\}}}ddg}t||ddƒ\}}}t|| |ƒ t|tdƒddƒ\}}}t||ƒ d S )	NrÉ  r  ré  Trõ  r[   rL   rˆ   rÑ  rà  rX   rX   rY   Útest_simple_fat_left_pivotingg  s    z$TestQR.test_simple_fat_left_pivotingc                 C   sn   g d¢g d¢g}t |dd�\}}ddg}t||ƒ\}}t|| |ƒ t||ƒ t|tdƒƒ\}}t||ƒ d S )NrÉ  r  ré  rê  r[   rL   rÑ  r÷  rX   rX   rY   Útest_simple_fat_rightp  s    
zTestQR.test_simple_fat_rightc                 C   st   g d¢g d¢g}t |ddd�\}}}ddg}t||dd�\}}}t|| |ƒ t|tdƒdd�\}}}t||ƒ d S )	NrÉ  r  Tré  rï  r[   rL   rØ  rÑ  rú  rX   rX   rY   Útest_simple_fat_right_pivotingz  s    z%TestQR.test_simple_fat_right_pivotingc                 C   sL   g d¢g d¢g d¢g}t |ƒ\}}t| ¡ j| tdƒƒ t|| |ƒ d S ©N©ri   ù      @      @rk   ©rk   rL   y       @      @©ri   rL   rv  ri   )r   r   rQ   rR   rE   rÎ  rX   rX   rY   ry   ƒ  s    zTestQR.test_simple_complexc                 C   sj   g d¢g d¢g d¢g}t |ƒ\}}g d¢}t||dƒ\}}t|| |ƒ t|tdƒdƒ\}}t||ƒ d S )Nr	  r  r  ©r[   rL   r
  rˆ   ri   rÑ  ©rq   rr   rÏ  rÐ  rÓ  rÔ  rX   rX   rY   Útest_simple_complex_left‰  s    zTestQR.test_simple_complex_leftc                 C   sf   g d¢g d¢g d¢g}t |ƒ\}}g d¢}t||ƒ\}}t|| |ƒ t|tdƒƒ\}}t||ƒ d S )Nr	  r  r  r  ri   rÑ  r  rX   rX   rY   Útest_simple_complex_right’  s    z TestQR.test_simple_complex_rightc                 C   s®   ddgddgddgg}t |dd�\}}d	d
g}t||dƒ\}}t|| |ƒ t||ƒ tg d¢ƒ}t||ddd�\}}t||d d…  |ƒ t|tdƒdƒ\}}t||ƒ d S )NrÊ  y       @      @rL   rm   y      @      @ri   ré  rê  r[   ù       @       @rˆ   rñ  Trò  ró  rÒ  rX   rX   rY   Útest_simple_tall_complex_left›  s    
z$TestQR.test_simple_tall_complex_leftc                 C   sT   g d¢g d¢g d¢g}t |ƒ\}}g d¢}t||ddd�\}}t| ¡ | |ƒ d S )Nr	  r  r  r  rˆ   T©Ú	conjugate©r   r   r   rQ   r  rX   rX   rY   Ú"test_simple_complex_left_conjugate¨  s
    z)TestQR.test_simple_complex_left_conjugatec                 C   sX   ddgddgddgg}t |dd�\}}ddg}t||d	d
d�\}}t| ¡ | |ƒ d S )Nri   r
  rk   r  rL   ré  rê  r[   rˆ   Tr  r  r  rX   rX   rY   Ú'test_simple_complex_tall_left_conjugate¯  s
    z.TestQR.test_simple_complex_tall_left_conjugatec                 C   sX   g d¢g d¢g d¢g}t |ƒ\}}t g d¢¡}t||dd�\}}t|| ¡  |ƒ d S )Nr	  r  r  r  Tr  )r   rN   r3   r   r   rQ   r  rX   rX   rY   Ú#test_simple_complex_right_conjugate¶  s
    z*TestQR.test_simple_complex_right_conjugatec                 C   s¼   t g d¢g d¢g d¢gƒ}t|dd�\}}}tt|ƒƒ}tt |dd … |d d… k¡ƒ t| ¡ j	| t
dƒƒ t|| |d d …|f ƒ t|d d …|f ƒ\}}t||ƒ t||ƒ d S )	Nr	  r  r  TrØ  r[   rƒ   ri   )r3   r   r£   r4   r   rN   r¢   r   rQ   rR   rE   rÛ  rX   rX   rY   Útest_simple_complex_pivoting½  s    "
z#TestQR.test_simple_complex_pivotingc                 C   sZ   t g d¢g d¢g d¢gƒ}t|dd�\}}}g d¢}t||ddƒ\}}}t|| |ƒ d S )Nr	  r  r  TrØ  r  rˆ   ©r3   r   r   r   rà  rX   rX   rY   Ú!test_simple_complex_left_pivotingÈ  s
    z(TestQR.test_simple_complex_left_pivotingc                 C   sZ   t g d¢g d¢g d¢gƒ}t|dd�\}}}g d¢}t||dd�\}}}t|| |ƒ d S )Nr	  r  r  TrØ  r  r  rà  rX   rX   rY   Ú"test_simple_complex_right_pivotingÏ  s
    z)TestQR.test_simple_complex_right_pivotingc                 C   s^   t j d¡}d}tdƒD ]@}| ||g¡}t|ƒ\}}t|j| t|ƒƒ t|| |ƒ qd S ©Nrß   rp  rL   ©rN   rO   rà   rŠ   r   r   rR   rE   ©rq   ra   rT   rÝ   rr   rÏ  rÐ  rX   rX   rY   r§  Ö  s    zTestQR.test_randomc           	      C   s„   t j d¡}d}tdƒD ]f}| ||g¡}t|ƒ\}}| |g¡}t||dƒ\}}t|| |ƒ t|t|ƒdƒ\}}t||ƒ qd S )Nrß   rp  rL   rˆ   ©rN   rO   rà   rŠ   r   r   r   rE   ©	rq   ra   rT   rÝ   rr   rÏ  rÐ  rÓ  rÔ  rX   rX   rY   Útest_random_leftß  s    zTestQR.test_random_leftc           	      C   s€   t j d¡}d}tdƒD ]b}| ||g¡}t|ƒ\}}| |g¡}t||ƒ\}}t|| |ƒ t|t|ƒƒ\}}t||ƒ qd S r  r   ©	rq   ra   rT   rÝ   rr   rÏ  rÐ  rÓ  rø  rX   rX   rY   Útest_random_rightë  s    zTestQR.test_random_rightc                 C   sÊ   t j d¡}d}tdƒD ]¬}| ||g¡}t|dd�\}}}tt|ƒƒ}tt  |dd … |d d… k¡ƒ t	|j
| t|ƒƒ t	|| |d d …|f ƒ t|d d …|f ƒ\}	}
t	||	ƒ t	||
ƒ qd S )Nrß   rp  rL   TrØ  r[   rƒ   ©rN   rO   rà   rŠ   r   r£   r4   r   r¢   r   rR   rE   ©rq   ra   rT   rÝ   rr   rÏ  rÐ  rÜ  rc   rÝ  rÕ  rX   rX   rY   Útest_random_pivoting÷  s    "
zTestQR.test_random_pivotingc                 C   sb   t j d¡}d}d}tdƒD ]@}| ||g¡}t|ƒ\}}t|j| t|ƒƒ t|| |ƒ qd S ©Nrß   éÈ   rÛ   rL   r  ©rq   ra   r¦  rT   rÝ   rr   rÏ  rÐ  rX   rX   rY   Útest_random_tall  s    zTestQR.test_random_tallc           
      C   sŒ   t j d¡}d}d}tdƒD ]j}| ||g¡}t|dd�\}}| |g¡}t||dƒ\}	}t|| |	ƒ t|t|ƒdƒ\}	}t|	|ƒ qd S )Nrß   r)  rÛ   rL   ré  rê  rˆ   r   )
rq   ra   r¦  rT   rÝ   rr   rÏ  rÐ  rÓ  rÔ  rX   rX   rY   Útest_random_tall_left  s    zTestQR.test_random_tall_leftc           
      C   sˆ   t j d¡}d}d}tdƒD ]f}| ||g¡}t|dd�\}}| |g¡}t||ƒ\}	}t|| |	ƒ t|t|ƒƒ\}	}t|	|ƒ qd S ©Nrß   r)  rÛ   rL   ré  rê  r   )
rq   ra   r¦  rT   rÝ   rr   rÏ  rÐ  rÓ  rø  rX   rX   rY   Útest_random_tall_right  s    zTestQR.test_random_tall_rightc                 C   sÎ   t j d¡}d}d}tdƒD ]¬}| ||g¡}t|dd�\}}}tt|ƒƒ}	tt  |	dd … |	d d… k¡ƒ t	|j
| t|ƒƒ t	|| |d d …|f ƒ t|d d …|f ƒ\}
}t	||
ƒ t	||ƒ qd S )	Nrß   r)  rÛ   rL   TrØ  r[   rƒ   r%  ©rq   ra   r¦  rT   rÝ   rr   rÏ  rÐ  rÜ  rc   rÝ  rÕ  rX   rX   rY   Útest_random_tall_pivoting,  s    "
z TestQR.test_random_tall_pivotingc                 C   s†   t j d¡}d}d}tdƒD ]d}| ||g¡}t|dd�\}}t|j| t|ƒƒ t|| |ƒ t|j	||fƒ t|j	||fƒ qd S r-  )
rN   rO   rà   rŠ   r   r   rR   rE   r   r?   r*  rX   rX   rY   Útest_random_tall_e<  s    zTestQR.test_random_tall_ec                 C   sô   t j d¡}d}d}tdƒD ]Ò}| ||g¡}t|ddd�\}}}tt|ƒƒ}	tt  |	dd … |	d d	… k¡ƒ t	|j
| t|ƒƒ t	|| |d d …|f ƒ t|j||fƒ t|j||fƒ t|d d …|f dd
�\}
}t	||
ƒ t	||ƒ qd S )Nrß   r)  rÛ   rL   Tré  rï  r[   rƒ   rê  )rN   rO   rà   rŠ   r   r£   r4   r   r¢   r   rR   rE   r   r?   r/  rX   rX   rY   Útest_random_tall_e_pivotingI  s    "
z"TestQR.test_random_tall_e_pivotingc                 C   sb   t j d¡}d}d}tdƒD ]@}| ||g¡}t|ƒ\}}t|j| t|ƒƒ t|| |ƒ qd S ©Nrß   rÛ   r)  rL   r  r*  rX   rX   rY   Útest_random_trap[  s    zTestQR.test_random_trapc                 C   sÎ   t j d¡}d}d}tdƒD ]¬}| ||g¡}t|dd�\}}}tt|ƒƒ}	tt  |	dd … |	d d… k¡ƒ t	|j
| t|ƒƒ t	|| |d d …|f ƒ t|d d …|f ƒ\}
}t	||
ƒ t	||ƒ qd S )	Nrß   rÛ   r)  rL   TrØ  r[   rƒ   r%  r/  rX   rX   rY   Útest_random_trap_pivotinge  s    "
z TestQR.test_random_trap_pivotingc                 C   st   t j d¡}d}tdƒD ]V}| ||g¡d| ||g¡  }t|ƒ\}}t| ¡ j| t|ƒƒ t|| |ƒ qd S ©Nrß   rp  rL   rK   )	rN   rO   rà   rŠ   r   r   rQ   rR   rE   r  rX   rX   rY   r©  t  s     zTestQR.test_random_complexc           	      C   s¦   t j d¡}d}tdƒD ]ˆ}| ||g¡d| ||g¡  }t|ƒ\}}| |g¡d| |g¡  }t||dƒ\}}t|| |ƒ t|t|ƒdƒ\}}t||ƒ qd S )Nrß   rp  rL   rK   rˆ   r   r!  rX   rX   rY   Útest_random_complex_left}  s     zTestQR.test_random_complex_leftc           	      C   s¢   t j d¡}d}tdƒD ]„}| ||g¡d| ||g¡  }t|ƒ\}}| |g¡d| |g¡  }t||ƒ\}}t|| |ƒ t|t|ƒƒ\}}t||ƒ qd S r6  r   r#  rX   rX   rY   Útest_random_complex_right‰  s     z TestQR.test_random_complex_rightc                 C   sà   t j d¡}d}tdƒD ]Â}| ||g¡d| ||g¡  }t|dd�\}}}tt|ƒƒ}tt  |dd … |d d… k¡ƒ t	| 
¡ j| t|ƒƒ t	|| |d d …|f ƒ t|d d …|f ƒ\}	}
t	||	ƒ t	||
ƒ qd S )	Nrß   rp  rL   rK   TrØ  r[   rƒ   )rN   rO   rà   rŠ   r   r£   r4   r   r¢   r   rQ   rR   rE   r&  rX   rX   rY   Útest_random_complex_pivoting•  s     "
z#TestQR.test_random_complex_pivotingc                 C   sL   g d¢g d¢g d¢g}t |dd�\}}t|j| tdƒƒ t|| |ƒ d S ©NrÉ  rË  rÌ  Frz   ri   rÍ  rÎ  rX   rX   rY   râ   £  s    zTestQR.test_check_finitec           
      C   s¾   g d¢g d¢g d¢g}t |d d�\}}t |dd�\}}t||ƒ t||ƒ t |dd�\}}t||ƒ t||ƒ t |dd�\}}	t||ƒ t|	|ƒ ttt |fdd	iƒ ttt |fdd
iƒ d S )NrÉ  rË  rÌ  )Úlworkri   r  rƒ   r;  r   rL   )r   r   rä   Ú	Exception)
rq   rr   rÏ  rÐ  rÝ  rÕ  Zq3Zr3Zq4Zr4rX   rX   rY   Ú
test_lwork©  s    





zTestQR.test_lworkN)7r}   r~   r   ru   rÖ  r×  rÞ  râ  rã  rä  rå  rç  rè  rî  rð  rô  rö  rù  rû  rþ  r   r  r  r  r  r  r  ry   r  r  r  r  r  r  r  r  r  r§  r"  r$  r'  r+  r,  r.  r0  r1  r2  r4  r5  r©  r7  r8  r9  râ   r=  rX   rX   rX   rY   rÇ  ˜  sh   

	

			
	
				
	rÇ  c                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestRQc                 C   sH   g d¢g d¢g d¢g}t |ƒ\}}t||j tdƒƒ t|| |ƒ d S rÈ  ©r   r   rR   rE   ©rq   rr   rÐ  rÏ  rX   rX   rY   ru   Ã  s    zTestRQ.test_simplec                 C   s<   g d¢g d¢g d¢g}t |ƒ\}}t |dd�}t||ƒ d S )NrÉ  rË  rÌ  rÐ  rê  )r   r   )rq   rr   rÐ  rÏ  rÕ  rX   rX   rY   Útest_rÉ  s    zTestRQ.test_rc                 C   s^   t j d¡}d}tdƒD ]@}| ||g¡}t|ƒ\}}t||j t|ƒƒ t|| |ƒ qd S r  ©rN   rO   rà   rŠ   r   r   rR   rE   ©rq   ra   rT   rÝ   rr   rÐ  rÏ  rX   rX   rY   r§  Ï  s    zTestRQ.test_randomc                 C   sB   g d¢g d¢g}t |ƒ\}}t|j| tdƒƒ t|| |ƒ d S )NrÉ  rË  ri   r?  r@  rX   rX   rY   rä  Ø  s    zTestRQ.test_simple_trapc                 C   sH   ddgddgddgg}t |ƒ\}}t|j| tdƒƒ t|| |ƒ d S ræ  r?  r@  rX   rX   rY   rç  Þ  s    zTestRQ.test_simple_tallc                 C   sB   g d¢g d¢g}t |ƒ\}}t||j tdƒƒ t|| |ƒ d S )Nrü  rË  ri   r?  r@  rX   rX   rY   rþ  ä  s    zTestRQ.test_simple_fatc                 C   sL   g d¢g d¢g d¢g}t |ƒ\}}t|| ¡ j tdƒƒ t|| |ƒ d S r  )r   r   rQ   rR   rE   r@  rX   rX   rY   ry   ê  s    zTestRQ.test_simple_complexc                 C   sb   t j d¡}d}d}tdƒD ]@}| ||g¡}t|ƒ\}}t||j t|ƒƒ t|| |ƒ qd S r(  rB  ©rq   ra   r¦  rT   rÝ   rr   rÐ  rÏ  rX   rX   rY   r+  ð  s    zTestRQ.test_random_tallc                 C   sb   t j d¡}d}d}tdƒD ]@}| ||g¡}t|ƒ\}}t||j t|ƒƒ t|| |ƒ qd S r3  rB  rD  rX   rX   rY   r4  ú  s    zTestRQ.test_random_trapc                 C   s†   t j d¡}d}d}tdƒD ]d}| ||g¡}t|dd�\}}t||j t|ƒƒ t|| |ƒ t|j	||fƒ t|j	||fƒ qd S )Nrß   rÛ   r)  rL   ré  rê  )
rN   rO   rà   rŠ   r   r   rR   rE   r   r?   rD  rX   rX   rY   Útest_random_trap_economic  s    z TestRQ.test_random_trap_economicc                 C   st   t j d¡}d}tdƒD ]V}| ||g¡d| ||g¡  }t|ƒ\}}t|| ¡ j t|ƒƒ t|| |ƒ qd S r6  )	rN   rO   rà   rŠ   r   r   rQ   rR   rE   rC  rX   rX   rY   r©    s     zTestRQ.test_random_complexc                 C   sœ   t j d¡}d}d}tdƒD ]z}| ||g¡d| ||g¡  }t|dd�\}}t|| ¡ j t|ƒƒ t|| |ƒ t	|j
||fƒ t	|j
||fƒ qd S )Nrß   rÛ   r)  rL   rK   ré  rê  )rN   rO   rà   rŠ   r   r   rQ   rR   rE   r   r?   rD  rX   rX   rY   Útest_random_complex_economic  s     z#TestRQ.test_random_complex_economicc                 C   sL   g d¢g d¢g d¢g}t |dd�\}}t||j tdƒƒ t|| |ƒ d S r:  r?  r@  rX   rX   rY   râ   %  s    zTestRQ.test_check_finiteN)r}   r~   r   ru   rA  r§  rä  rç  rþ  ry   r+  r4  rE  r©  rF  râ   rX   rX   rX   rY   r>  Â  s   	

	r>  c                   @   sÒ   e Zd Zdd„ Zdd„ Zej dde 	d¡ de 	d¡d	gfd
e 	d¡d	e 	d¡ dgfddd	e 	d¡e 	d¡ gfde 	d¡e 	d¡ dd	gfdd„ e 	d¡d	e 	d¡ dgfg¡dd„ ƒZ
dd„ Zdd„ ZdS )Ú	TestSchurc                 C   sN   t || | ¡ j |||dd� t || ¡ j t t|ƒ¡ dd|dd� d S )Nz&Schur decomposition does not match 'a'r™   r   zu is not unitary)r   rQ   rR   rN   rE   r_   )rq   rr   ÚtrB  rš   r›   rX   rX   rY   Úcheck_schur.  s    ÿ"ÿzTestSchur.check_schurc                 C   s¦   g d¢g d¢g d¢g}t |ƒ\}}| j|||ddd� t |dƒ\}}tt tt|ƒƒ¡oht tt|ƒƒ¡ƒ | j|||ddd� t||ƒ\}}| j|||ddd� d S )N©rÊ  é   ri   rË  ©r  ri   rl   rò   ç›+¡†›„ö<©rš   r›   r  )r   rI  r   rN   rú   r<   r>   r   )rq   rr   rH  rw  ZtcZzcZtc2Zzc2rX   rX   rY   ru   7  s    (zTestSchur.test_simplezsort, expected_diagÚlhprL   ç      à¿r\   ÚrhpÚiucÚoucc                 C   s   | dkS )Nr'  rX   )r]  rX   rX   rY   Ú<lambda>G  ó    zTestSchur.<lambda>c                 C   sd   g d¢g d¢g d¢g d¢g}t ||d�\}}}| j|||ddd� tt |¡|d	d
� td|ƒ d S )N©rî   r‚   r  r  ©g      Àg      Àr  r  ©rç   ç      @ç      Àg      @©rY  rî   r  ç      @©r@   rò   rM  rN  çê-�™—q=©rš   rL   )r   rI  r   rN   r4   r   )rq   r@   Zexpected_diagrr   rH  rB  ZsdimrX   rX   rY   Ú	test_sortA  s    ýzTestSchur.test_sortc                 C   s@   g d¢g d¢g d¢g d¢g}t tt|dd� t tt|dd� d S )NrV  rW  rX  r[  Úunsupportedr]  r[   )rä   rå   r   rÃ  rX   rX   rY   Útest_sort_errorsU  s    ýzTestSchur.test_sort_errorsc                 C   sB   g d¢g d¢g d¢g}t |dd�\}}t|| | ¡ j |ƒ d S )NrJ  rË  rL  Frz   )r   r   rQ   rR   )rq   rr   rH  rw  rX   rX   rY   râ   ]  s    zTestSchur.test_check_finiteN)r}   r~   r   rI  ru   r‘  r”  r•  rN   r=   r`  rb  râ   rX   rX   rX   rY   rG  ,  s   	
 üþ
rG  c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestHessenbergc                 C   sb   g d¢g d¢g d¢g}g d¢g d¢g d¢g}t |dd�\}}t|j| | |ƒ t||d	d
� d S )N©ikÿÿÿiÎÿÿÿifÿÿÿ©é  é´   é"  ©iåÿÿÿrÖ   éçÿÿÿ©g      bÀgüs×E@gã¥›Ä ŠcÀ©gçŒ(mÍ€Àgkšwœ¢c@gÏfÕçjW�À©r   gÂ&S£²?g,eâX—@r[   ©Úcalc_qrb  ©Údecimal©r   r   rR   ©rq   rr   Zh1re   rÏ  rX   rX   rY   ru   e  s    þþzTestHessenberg.test_simplec                 C   sB   g d¢g d¢g d¢g}t |dd�\}}t| ¡ j| | |ƒ d S )Nrd  )rf  y             €f@rh  )y       €      ;ÀrÖ   rj  r[   rn  )r   r   rQ   rR   ©rq   rr   re   rÏ  rX   rX   rY   ry   p  s    þz"TestHessenberg.test_simple_complexc                 C   sV   g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}t |dd	�\}}t|j| | |ƒ d S )
N)r[   rL   ri   rb  rk   rl   rv  )r   rL   ri   rb  rl   rv  rL   )r   rL   rL   ri   r   ri   rL   )r   r   rL   rÊ  r   r   rL   )r   ri   r[   rL   r   r[   rL   )r   r[   rL   ri   r   r[   r   )r   r   r   r   r   r[   rL   r[   rn  rr  rt  rX   rX   rY   Útest_simple2w  s    úzTestHessenberg.test_simple2c                 C   s:   t  d¡}d|d< t|dd�\}}t|j| | |ƒ d S )Nri   rL   )rƒ   r   r[   rn  )rN   rE   r   r   rR   rt  rX   rX   rY   Útest_simple3‚  s    
zTestHessenberg.test_simple3c                 C   sT   t j d¡}d}tdƒD ]6}| ||g¡}t|dd�\}}t|j| | |ƒ qd S )Nrß   rp  rL   r[   rn  )rN   rO   rà   rŠ   r   r   rR   ©rq   ra   rT   rÝ   rr   re   rÏ  rX   rX   rY   r§  ˆ  s    zTestHessenberg.test_randomc                 C   sj   t j d¡}d}tdƒD ]L}| ||g¡d| ||g¡  }t|dd�\}}t| ¡ j| | |ƒ qd S )Nrß   rp  rL   rK   r[   rn  )rN   rO   rà   rŠ   r   r   rQ   rR   rw  rX   rX   rY   r©  �  s     z"TestHessenberg.test_random_complexc                 C   sd   g d¢g d¢g d¢g}g d¢g d¢g d¢g}t |ddd	�\}}t|j| | |ƒ t||d
d� d S )Nrd  re  ri  rk  rl  rm  r[   F)ro  r{   rb  rp  rr  rs  rX   rX   rY   râ   ˜  s    þþz TestHessenberg.test_check_finitec                 C   sx   ddgddgg}t |dd�\}}t|t d¡ƒ t||ƒ ddgdd	gg}t |dd�\}}t|t d¡ƒ t||ƒ d S )
NrL   r[   rv  rK  rn  y       @      ÀrŽ   y      @      @y      (@       À)r   r   rN   rE   )rq   rr   re   rÏ  r•   Zh2rÝ  rX   rX   rY   Útest_2x2£  s    
zTestHessenberg.test_2x2N)r}   r~   r   ru   ry   ru  rv  r§  r©  râ   rx  rX   rX   rX   rY   rc  c  s   rc  zBuild DependenciesZblasÚnameÚversionc                   @   sj   e Zd Zejjejdko&edko&e	dk dd�dd„ ƒZ
dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestQZÚdarwinZopenblasz
0.3.21.devz8gges[float32] broken for OpenBLAS on macOS, see gh-16949r³  c           	      C   sÄ   t j d¡}d}| ||g¡ t¡}| ||g¡ t¡}t||ƒ\}}}}t|| |j |dd� t|| |j |dd� t||j t|ƒdd� t||j t|ƒdd� t	t  
t|ƒdk¡ƒ d S )Né90  rk   rp  r   )rN   rO   rà   rS   r:   r   r   rR   rE   r   r¢   r4   ©	rq   ra   rT   rW   r¥   ÚAAÚBBÚQrÔ   rX   rX   rY   Útest_qz_single·  s    zTestQZ.test_qz_singlec           	      C   s¨   t j d¡}d}| ||g¡}| ||g¡}t||ƒ\}}}}t|| |j |ƒ t|| |j |ƒ t||j t|ƒƒ t||j t|ƒƒ tt  t	|ƒdk¡ƒ d S )Nr}  rk   r   ©
rN   rO   rà   r   r   rR   rE   r   r¢   r4   r~  rX   rX   rY   Útest_qz_doubleÉ  s    zTestQZ.test_qz_doublec           	      C   sô   t j d¡}d}| ||g¡d| ||g¡  }| ||g¡d| ||g¡  }t||ƒ\}}}}t|| | ¡ j |ƒ t|| | ¡ j |ƒ t|| ¡ j t|ƒƒ t|| ¡ j t|ƒƒ tt  	t
|ƒdk¡ƒ tt  	t
|ƒjdk¡ƒ d S )Nr}  rk   rK   r   )rN   rO   rà   r   r   rQ   rR   rE   r   r¢   r4   r¤   r~  rX   rX   rY   Útest_qz_complexÕ  s      zTestQZ.test_qz_complexc           	      C   s  t j d¡}d}| ||g¡d| ||g¡   t¡}| ||g¡d| ||g¡   t¡}t||ƒ\}}}}t|| | ¡ j |dd� t|| | ¡ j |dd� t|| ¡ j t	|ƒdd� t|| ¡ j t	|ƒdd� t
t  t|ƒdk¡ƒ t
t  t|ƒjdk¡ƒ d S )Nr}  rk   rK   rp  r   )rN   rO   rà   rS   r;   r   r   rQ   rR   rE   r   r¢   r4   r¤   r~  rX   rX   rY   Útest_qz_complex64â  s    &&zTestQZ.test_qz_complex64c                 C   sà   t j d¡}d}| ||g¡}| ||g¡}t||dd�\}}}}|| | ¡ j }	t|	j|ƒ t|	jdƒ || | ¡ j }
t|
j|ƒ t|
jdƒ t|| ¡ j t	|ƒƒ t|| ¡ j t	|ƒƒ t
t  t|ƒdk¡ƒ d S )Nr}  rk   r  )Úoutputr   )rN   rO   rà   r   rQ   rR   r   r  r¤   rE   r   r¢   r4   )rq   ra   rT   rW   r¥   r  r€  r�  rÔ   ÚaaZbbrX   rX   rY   Útest_qz_double_complexï  s    zTestQZ.test_qz_double_complexc                 C   s^   t  g d¢g d¢g d¢g d¢g¡}t  g d¢g d¢g d¢g d¢g¡}ttt||d	d
„ d� d S )N)ç333333@ç      )@ç     @AÀg      @©ç333333@ç     €5@g     ÀGÀg      @)rŽ  r‰  ç     ÀEÀr\  )çš™™™™™@rY  ç      GÀrY  )r  r  r  r  )r  r‚   g      Àr‘  )r  rí   rZ  r  )r‡  r‚   rZ  rî   c                 S   s   |dkS )Nr   rX   )ÚarZaiÚbetarX   rX   rY   rT    rU  z,TestQZ.test_qz_double_sort.<locals>.<lambda>r]  )rN   r3   rä   rå   r   r   r   rÌ   rX   rX   rY   Útest_qz_double_sortÿ  s    
ý
ýzTestQZ.test_qz_double_sortc           	      C   s¬   t j d¡}d}| ||g¡}| ||g¡}t||dd�\}}}}t|| |j |ƒ t|| |j |ƒ t||j t|ƒƒ t||j t|ƒƒ tt  t	|ƒdk¡ƒ d S )Nr}  rk   Frz   r   rƒ  r~  rX   rX   rY   râ   b  s    zTestQZ.test_check_finiteN)r}   r~   r   r‘  r”  ÚxfailÚsysÚplatformÚblas_providerÚblas_versionr‚  r„  r…  r†  r‰  r•  râ   rX   rX   rX   rY   r{  ¶  s   
ÿü
cr{  c                   @   sp   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	TestOrdQZc           
      C   s  t  g d¢g d¢g d¢g d¢g¡}t  g d¢g d¢g d¢g d¢g¡}t  g d	¢g d
¢g d¢g d¢g¡}t  g d¢g d¢g d¢g d¢g¡}t  g d¢g d¢g d¢g d¢g¡}t  g d¢g d¢g d¢g d¢g¡}t  d¡}t  ddg¡}t  ddg¡}	|||||	g| _|||||	g| _d S )N)yš™™™™5À     €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              À)rK   yÍÌÌÌÌÌü¿333333@y              Ày      @      À)rŠ  r‹  rŒ  rP  r�  )rŽ  r�  r�  r\  )r‘  g      :@r’  rY  )r[   rL   éýÿÿÿr[   )r[   ri   éûÿÿÿrb  )r[   ri   éüÿÿÿri   )r[   ri   rž  rb  )rÜ   r  r‚   r‚   )rî   rî   rí   rñ   )rñ   rî   r  r‚   )r'  rî   rô   rñ   )rô   rï   rY  rï   )rñ   rñ   rí   rç   )rç   r  rY  rY  )rÜ   r  rî   rñ   rL   r   r[   )rN   r3   rE   r4   rW   r¥   )
ÚclsÚA1ÚB1ÚA2ÚB2ÚA3ÚB3ÚA4ÚB4ÚA5rX   rX   rY   ra  p  sF    
ú	
ý
ý
ý
ý
ý
zTestOrdQZ.setup_classc                    sP   t jdd��, ‡ fdd„t| j| jƒD ƒ}W d   ƒ n1 s>0    Y  t|ƒS )NÚraiserÊ   c                    s   g | ]\}}t ||ˆ d �‘qS )r]  )r   )Ú.0ÚAiÚBir]  rX   rY   Ú
<listcomp>©  rU  z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rN   rË   ÚziprW   r¥   Útuple)rq   r@   ÚretrX   r]  rY   Ú	qz_decomp§  s    :zTestOrdQZ.qz_decompc
                 C   sv  t j|jŽ }
t||j ¡  |
ƒ t|	|	j ¡  |
ƒ t|| ||	 ƒ t|| ||	 ƒ tt  |d¡t  |j¡ƒ tt  |d¡t  |j¡ƒ t	|jd ƒD �]|}|dkr¾|||d f dk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|�rjJ ‚|}�q4d S )Nr�   rƒ   r   r[   rL   T)rN   rE   r?   r   rR   rQ   r   Ztrilr8   rŠ   r	   r¤   r   r   r1   r3   )rq   rW   r¥   r@   r  r€  Úalphar”  r�  rÔ   ZIdrŒ   ZevalsÚ_ÚtmpZsortfunZlastsortZcursortrX   rX   rY   Úcheck¬  s>    *> ,"
zTestOrdQZ.checkc                 C   s@   |   |¡}t|| j| jƒD ] \}}}| j|||g|¢R Ž  qd S rÿ   )r±  r®  rW   r¥   rµ  )rq   r@   r°  Zretir«  r¬  rX   rX   rY   Ú	check_allÚ  s    
zTestOrdQZ.check_allc                 C   s   |   d¡ d S )NrO  ©r¶  r  rX   rX   rY   Útest_lhpà  s    zTestOrdQZ.test_lhpc                 C   s   |   d¡ d S )NrQ  r·  r  rX   rX   rY   Útest_rhpã  s    zTestOrdQZ.test_rhpc                 C   s   |   d¡ d S )NrR  r·  r  rX   rX   rY   Útest_iucæ  s    zTestOrdQZ.test_iucc                 C   s   |   d¡ d S )NrS  r·  r  rX   rX   rY   Útest_oucé  s    zTestOrdQZ.test_oucc                 C   s   dd„ }|   |¡ d S )Nc                 S   s>   t j| td�}|dk}d|| < | | ||  jdk||< |S ©Nrì   r   F©rN   Ú
empty_likeÚboolr¤   ©r]  rF  ÚoutZnonzerorX   rX   rY   r@   î  s
    
z TestOrdQZ.test_ref.<locals>.sortr·  ©rq   r@   rX   rX   rY   Útest_refì  s    zTestOrdQZ.test_refc                 C   s   dd„ }|   |¡ d S )Nc                 S   s>   t j| td�}|dk}d|| < | | ||  jdk||< |S r¼  r½  rÀ  rX   rX   rY   r@   ù  s
    
z TestOrdQZ.test_cef.<locals>.sortr·  rÂ  rX   rX   rY   Útest_cef÷  s    zTestOrdQZ.test_cefc                 C   s|   t | jd | jd dd�}| j| jd | jd dg|¢R Ž  t | jd | jd dd�}| j| jd | jd dg|¢R Ž  d S )Nr[   rL   rO  r]  )r   rW   r¥   rµ  )rq   r°  rX   rX   rY   Útest_diff_input_types	  s    "zTestOrdQZ.test_diff_input_typesc                 C   s  t  d¡}t  ddg¡}dddgfdddgfdddgfdddgfg}t  d¡}t  d	d
g¡}dddgfdddgfdddgfdddgfg}t  d¡}t  ddg¡}ddt jgfddt jgfdt jdgfg}	t  d¡}
t  ddg¡}ddt jgfddt jgfdt jdgfg}t  ddg¡}t  ddg¡}ddt jgfddt jgfg}||||
|g}|||||g}|||	||g}t|||ƒD ]’\}}}|D ]€\}}t|||d�\}}}}}}|dk}|dk}t  |¡}t j|||@ < t j|| |@ < ||  ||   || < t||ƒ �q„�qvd S )NrL   r�   r\   rO  rP  rQ  rR  rS  y       À      ð?y      à?      à?yš™™™™™Ù¿š™™™™™É¿ù      ð?      ð¿r   r[   r]  )	rN   rE   r4   r”   Únanr®  r   r¾  r   )rq   r   r¡  Z	expected1r¢  r£  Z	expected2r¤  r¥  Z	expected3r¦  r§  Z	expected4r¨  ZB5Z	expected5rW   r¥   Úexpectedr«  r¬  Z	expectediZsortstrZexpected_eigvalsr³  r²  r”  ZazeroZbzeror]  rX   rX   rY   Útest_sort_explicit		  sX    




ý




ý
þ
þÿ
zTestOrdQZ.test_sort_explicitN)r}   r~   r   Úclassmethodra  r±  rµ  r¶  r¸  r¹  rº  r»  rÃ  rÄ  rÅ  rÉ  rX   rX   rX   rY   r›  o  s   
6.r›  c                   @   s$   e Zd Zdd„ Zejjdd„ ƒZdS )ÚTestOrdQZWorkspaceSizec                 C   s°   t j d¡}d}t jt jfD ]@}| ||f¡ |¡}| ||f¡ |¡}t||dd„ dd�}qt jt jfD ]@}| ||f¡ |¡}| ||f¡ |¡}t||dd„ dd�}qjd S )	Nr}  éÊ   c                 S   s   | |k S rÿ   rX   ©r²  r”  rX   rX   rY   rT  B	  rU  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r  )r@   r‡  c                 S   s   | |k S rÿ   rX   rÍ  rX   rX   rY   rT  H	  rU  r  )	rN   rO   rà   r:   rë   rS   r   r¬  r;   )rq   ra   r  ÚddtyperW   r¥   r³  rX   rX   rY   Útest_decompose:	  s    ÿÿz%TestOrdQZWorkspaceSize.test_decomposec                 C   sp   t j d¡}d}t jt jt jt jfD ]F}| ||f¡ |¡}| ||f¡ |¡}t||dd�\}}}}	}
}q$d S )Nr}  rÌ  rS  r]  )	rN   rO   rà   r:   rë   r¬  r;   rS   r   )rq   ra   r  rÎ  rW   r¥   ÚSrR   r²  r”  ÚUrû   rX   rX   rY   Útest_decompose_oucK	  s    z)TestOrdQZWorkspaceSize.test_decompose_oucN)r}   r~   r   rÏ  r‘  r”  r·  rÒ  rX   rX   rX   rY   rË  9	  s   rË  c                   @   s   e Zd Zdd„ ZdS )ÚTestDatacopiedc                    s¾   ddl m} tddgddggƒ}t|ƒ‰ | ¡ }| ¡ }G ‡ fdd„dƒ}G ‡ fdd	„d	ƒ}|ƒ }|ƒ }|d
fˆ d
f|df|d
f|d
f|d
ffD ](\}	}
t|	ƒ}t|||	ƒ|
t|	ƒd� q�d S )Nr   )Ú_datacopiedr[   rL   ri   c                       s   e Zd Zd‡ fdd„	ZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1Nc                    s   ˆ S rÿ   rX   )rq   rV   rv   ©rW   rX   rY   Ú	__array__a	  s    z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__)NN)r}   r~   r   rÖ  rX   rÕ  rX   rY   ÚFake1`	  s   r×  c                       s   e Zd Z” jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r}   r~   r   Z__array_interface__rX   rÕ  rX   rY   ÚFake2d	  s   rØ  FTrž   )Zscipy.linalg._decomprÔ  rG   rB   Útolistrv   r   Úrepr)rq   rÔ  rÑ   ÚLZM2r×  rØ  ZF1ZF2ÚitemÚstatusZarrrX   rÕ  rY   Útest_datacopiedX	  s     ÿÿzTestDatacopied.test_datacopiedN)r}   r~   r   rÞ  rX   rX   rX   rY   rÓ  V	  s   rÓ  c                  C   sF   t dtjd�} tj| jddtd�}d|_t|dd� t|jdd� d	S )
z4Check linalg works with non-aligned memory (float32)i’  rì   rL   rÛ   ©ÚoffsetÚcountrV   ©r  r  T©Úoverwrite_aN)	r9   rN   Úuint8Ú
frombufferÚdatar:   r?   r	   rR   ©rr   rw  rX   rX   rY   Útest_aligned_mem_floatq	  s
    ré  Úppc64lezcrashes on ppc64ler³  c                  C   sF   t dtjd�} tj| jddtd�}d|_t|dd� t|jdd� d	S )
z4Check linalg works with non-aligned memory (float64)i$  rì   rb  rÛ   rß  râ  Trã  N)	r9   rN   rå  ræ  rç  r  r?   r	   rR   rè  rX   rX   rY   Útest_aligned_mem~	  s
    rë  c                  C   sF   t dtjd�} tj| jddtd�}d|_t|dd� t|jdd� d	S )
z>Check that complex objects don't need to be completely alignediH  rì   rÊ  rÛ   rß  râ  Trã  N)	r8   rN   rå  ræ  rç  r  r?   r	   rR   rè  rX   rX   rY   Útest_aligned_mem_complex�	  s
    rì  c                 C   sÜ   t |ƒ}tt|ƒƒD ]Â}|d d … }t|| tjƒrtj|| j|| jj	 d tj
d�}tj|jd|| j|| jd�}|| j|_|| |d< |||< | |i |¤Ž t|| jƒdkr|| j||< | |i |¤Ž qd S )NrÊ  rì   rb  rß  .r[   )r¨  rŠ   r_   r]   rN   rD   r8   r¡   rV   Úitemsizerå  ræ  rç  r?   rR   )Úfuncr  ÚkwargsrŒ   rr   rˆ  rX   rX   rY   Úcheck_lapack_misaligned›	  s    &ÿrð  z0Ticket #1152, triggers a segfault in rare cases.)Úrunr´  c            	      C   s†  t jdtd�} t  d¡}d|_t jdt jd�}t j|jddtd�}d|_t  d¡}t	|ƒ\}}t
|ftdd	�ft|ftdd	�ft|ftdd	�ft	|ftdd	�ft||f|ftdd
�ft||ftddd�ft| ftdd	�ft|ftdd	�ft|ftdd	�ft|ftƒ ft|ftdd	�ft| ftdd	�ft|ftdd	�ft|ftdd	�ft|ftdd	�ft|ftdd	�ffD ]\}}}t|||ƒ �qhd S )Nr  rì   rÛ   râ  i N  rb  rß  Trã  )Úoverwrite_b)rä  rò  )rN   rE   r  r9   r?   rå  ræ  rç  r    r   r	   Údictr
   r   r   r   r   r   r   r   r   r   r   rð  )	rÑ   ÚRrÐ  r•   ZLUÚpivrî  r  rï  rX   rX   rY   Útest_lapack_misaligned­	  s4    

ðrö  c                   @   sŒ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ÚTestOverwritec                 C   s   t tdgƒ t tddgƒ d S ©NrÏ   )rF   r	   r  rX   rX   rY   Útest_eigÐ	  s    zTestOverwrite.test_eigc                 C   s   t tdgƒ t tddgƒ d S rø  )rF   r   r  rX   rX   rY   Ú	test_eighÔ	  s    zTestOverwrite.test_eighc                 C   s   t tdgƒ d S ©Nrì  )rF   r   r  rX   rX   rY   r=  Ø	  s    zTestOverwrite.test_eig_bandedc                 C   s   t tdgƒ d S rø  )rF   r
   r  rX   rX   rY   Útest_eigvalsÛ	  s    zTestOverwrite.test_eigvalsc                 C   s   t tdgƒ d S rø  )rF   r   r  rX   rX   rY   Útest_eigvalshÞ	  s    zTestOverwrite.test_eigvalshc                 C   s   t tdgƒ d S rû  )rF   r   r  rX   rX   rY   r<  á	  s    z!TestOverwrite.test_eigvals_bandedc                 C   s   t tdgƒ d S rø  )rF   r   r  rX   rX   rY   Útest_hessenbergä	  s    zTestOverwrite.test_hessenbergc                 C   s   t tdgƒ d S rø  )rF   r   r  rX   rX   rY   Útest_lu_factorç	  s    zTestOverwrite.test_lu_factorc                    s<   t  g d¢g d¢g d¢g¡}t|ƒ‰ t‡ fdd„dgƒ d S )Nrh   r¢  )rv  rÊ  rÊ  c                    s
   t ˆ | ƒS rÿ   )r   )r•   ©ZxlurX   rY   rT  í	  rU  z-TestOverwrite.test_lu_solve.<locals>.<lambda>)ri   )rN   r3   r   rF   )rq   r]  rX   r   rY   Útest_lu_solveê	  s    zTestOverwrite.test_lu_solvec                 C   s   t tdgƒ d S rø  )rF   r   r  rX   rX   rY   Útest_luï	  s    zTestOverwrite.test_luc                 C   s   t tdgƒ d S rø  )rF   r   r  rX   rX   rY   Útest_qrò	  s    zTestOverwrite.test_qrc                 C   s   t tdgƒ d S rø  )rF   r   r  rX   rX   rY   Útest_rqõ	  s    zTestOverwrite.test_rqc                 C   s   t tdgƒ d S rø  )rF   r   r  rX   rX   rY   Ú
test_schurø	  s    zTestOverwrite.test_schurc                 C   s    t dd„ dgtjtjgd� d S )Nc                 S   s
   t | dƒS )Nr  )r   ©rr   rX   rX   rY   rT  ü	  rU  z2TestOverwrite.test_schur_complex.<locals>.<lambda>rÏ   )Údtypes)rF   rN   r:   rë   r  rX   rX   rY   Útest_schur_complexû	  s    
ÿz TestOverwrite.test_schur_complexc                 C   s    t tdgƒ t dd„ dgƒ d S )NrÏ   c                 S   s   t | dd�S )Nr¹  rL  )r   r  rX   rX   rY   rT  
  rU  z(TestOverwrite.test_svd.<locals>.<lambda>)rF   r   r  rX   rX   rY   Útest_svdÿ	  s    zTestOverwrite.test_svdc                 C   s   t tdgƒ d S rø  )rF   r   r  rX   rX   rY   Útest_svdvals
  s    zTestOverwrite.test_svdvalsN)r}   r~   r   rù  rú  r=  rü  rý  r<  rþ  rÿ  r  r  r  r  r  r  r	  r
  rX   rX   rX   rY   r÷  Ï	  s    r÷  c                 C   s   t j| dftd� |¡}t  |¡j}d| }t|ƒ}t|j| dfƒ t	|| 
¡ |d� t|jƒ}t|jdƒ t	|| 
¡ |d� | dk�r|�st j d¡ t j | d¡t j d| ¡ }|dt j | d¡ t j d| ¡  }| |¡}t|d	d
�}t|j| dfƒ t|dd
�}t|j| dfƒ d S )NrL   rì   r}  r[   ró   ©rL   r[   rk   ç-Cëâ6?çü©ñÒMbP?©Zrcondç�íµ ÷Æ°>rl   )rN   r    r  rS   r  r€  r   r   r?   r   ÚmeanrR   rO   r`  rP   )rT   rV   Úskip_bigÚXr€  r�   ÚYrX   rX   rY   Ú_check_orth
  s$    
$
r  rÊ  z"test only on 64-bit, else too slowc               
   C   sL   d} zt | tjdd� W n. tyF } ztdƒ|‚W Y d }~n
d }~0 0 d S )Ni€–˜ T)r  z.memory error perhaps caused by orth regression)r  rN   rë   ÚMemoryErrorÚAssertionError)rT   rK  rX   rX   rY   Útest_orth_memory_efficiency"
  s    ÿþr  c                  C   s@   t jt jt jt jg} g d¢}t | |¡D ]\}}t||ƒ q(d S )N©r[   rL   ri   r  rÛ   )rN   r:   rë   r;   r¬  Ú	itertoolsÚproductr  )r  r­  rt  rT   rX   rX   rY   Ú	test_orth3
  s    r  c                  C   s¬  t j d¡ t jt jt jt jg} g d¢}t | |¡D �]p\}}t j	d|f|d�}t  
|¡j}d| }t|ƒ}t|j||d fƒ t|| d|d� t|jƒ}t|jdƒ t|j| d|d� t j d|d  |¡}t|ƒ}t|j||d |d  fƒ t|| d|d� |d	kr4t j d¡ t j |d	¡t j d	|¡ }|d
t j |d¡ t j d|¡  }| |¡}t|dd�}t|j||d	 fƒ t|dd�}t|j||d fƒ q4d S )Nr[   r  rL   rì   r}  r   ró   r  rk   r  r  r  r  rl   )rN   rO   r`  r:   rë   r;   r¬  r  r  r    r  r€  r$   r   r?   r   rR   ZrandnrP   rS   )r  r­  rt  rT   r  r€  r�   r  rX   rX   rY   Útest_null_space:
  s4    
$
r  c                  C   s>  t dtƒ} | d d …d d…f }| d d …dd …f }tt||ƒtjd gd dd� tt||ƒtjd gd dd� ||fD ]$}tt||ƒt |jd ¡dd� qzt g d¢g d¢g d	¢g d
¢g¡}d}tt|d d …d d…f |d d …dd …f ƒd |dd� tt|d d …dd …f |d d …d d…f ƒd |dd� d}tt|d d …d d…f |d d …dgf ƒ|dd� tt|d d …dgf |d d …d d…f ƒ|dd� d}tt|d d …d d…f |d d …dgf ƒ|dd� tt|d d …dgf |d d …d d…f ƒ|dd� d}tt|d d …d d…f |d d …dd …f ƒ|dgdd� t	t
t|d |ƒ t	t
t||d ƒ t	t
t|d d… |ƒ t g d¢g d¢g d¢g d¢g d¢g¡}t g d¢g d¢g d¢g d¢g d¢g¡}t tjd ddg¡}tt||ƒ|dd� dgdgg}ddgddgg}tt||ƒddd� tt||ƒddd� d S )NrÊ  ri   rí   rò   ró   r[   )gñ�·‘4á?gVð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™"Ó	´÷?rL   r   r^  r_  g¦®LÔ0âç?g•Ä¹»°-ß?gyßôv†Õ?rƒ   rÆ  )r   r[   r   )r   r   r[   rÎ   r  rÆ  r'  )r!   r  r   r    rN   Úpir8   r?   r3   rä   rå   )ÚHrW   r¥   r]  rÈ  rr   r•   rX   rX   rY   Útest_subspace_angles`
  sl    
  ÿýÿ0ÿ0ÿ22220ÿ
ü
ür  c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCDF2RDFc                 C   s   t  d||¡S )Nz...ij,...jk->...ik)rN   Zeinsum)rq   rr   r•   rX   rX   rY   Úmatmulœ
  s    zTestCDF2RDF.matmulc                 C   s   t |  ||¡|  ||¡ƒ d S rÿ   )r   r!  )rq   rs   rd   r]  rX   rX   rY   Úassert_eig_validŸ
  s    

þzTestCDF2RDF.assert_eig_validc                 C   s@   t  d¡}t  d¡t  d¡ }}t||ƒ\}}|  |||¡ d S )Nr„   r   )rN   rŸ   r%   r"  ©rq   r  rs   rd   Úwrr�   rX   rX   rY   Útest_single_array0x0real¥
  s    
z$TestCDF2RDF.test_single_array0x0realc                 C   sF   t  ddgddgg¡}t j |¡\}}t||ƒ\}}|  |||¡ d S )Nr[   rL   ri   rƒ   ©rN   r3   r6   r	   r%   r"  r#  rX   rX   rY   Útest_single_array2x2_real¬
  s    z%TestCDF2RDF.test_single_array2x2_realc                 C   sF   t  ddgddgg¡}t j |¡\}}t||ƒ\}}|  |||¡ d S )Nr[   rL   r�   r&  r#  rX   rX   rY   Útest_single_array2x2_complex²
  s    z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t  g d¢g d¢g d¢g¡}t j |¡\}}t||ƒ\}}|  |||¡ d S )Nrh   rj   r&  r#  rX   rX   rY   Útest_single_array3x3_real¸
  s    z%TestCDF2RDF.test_single_array3x3_realc                 C   sL   t  g d¢g d¢g d¢g¡}t j |¡\}}t||ƒ\}}|  |||¡ d S ©Nrh   )r   rb  rk   )r   r�  rb  r&  r#  rX   rX   rY   Útest_single_array3x3_complex¾
  s    z(TestCDF2RDF.test_single_array3x3_complexc                 C   s\   t ddƒD ]L}tj d¡ tj d||¡}tj |¡\}}t||ƒ\}}|  |||¡ q
d S )Nr[   rv  iÿÉš;rÛ   )	rŠ   rN   rO   r`  rP   r6   r	   r%   r"  ©rq   rÑ   r  rs   rd   r$  r�   rX   rX   rY   Útest_random_1d_stacked_arraysÄ
  s    z)TestCDF2RDF.test_random_1d_stacked_arraysc                 C   sR   t ddƒD ]B}tj dd||¡}tj |¡\}}t||ƒ\}}|  |||¡ q
d S )Nr[   rv  r  )rŠ   rN   rO   rP   r6   r	   r%   r"  r,  rX   rX   rY   Útest_random_2d_stacked_arraysÍ
  s
    z)TestCDF2RDF.test_random_2d_stacked_arraysc                 C   s(   t  d¡t  d¡ }}ttt||ƒ d S )NrX   )rL   )rN   rŸ   r3   rä   rå   r%   ©rq   rs   rd   rX   rX   rY   Útest_low_dimensionality_errorÕ
  s    z)TestCDF2RDF.test_low_dimensionality_errorc                 C   s0   t  d¡t  d¡ dd¡ }}ttt||ƒ d S )Nri   rl   rL   ©rN   r9   rã   rä   rå   r%   r/  rX   rX   rY   ræ   Ù
  s    z!TestCDF2RDF.test_not_square_errorc                 C   s>   t  g d¢g d¢g d¢g¡}t j |¡\}}ttt||ƒ d S r*  ©rN   r3   r6   r	   rä   rå   r%   ©rq   r  rs   rd   rX   rX   rY   Útest_swapped_v_w_errorÞ
  s    z"TestCDF2RDF.test_swapped_v_w_errorc                 C   s0   t  d¡t  d¡ dd¡ }}ttt||ƒ d S )Nri   rÄ   rb  r1  r/  rX   rX   rY   Útest_non_associated_errorä
  s    z%TestCDF2RDF.test_non_associated_errorc                 C   sŽ   t  g d¢g d¢g d¢g¡}t j |¡\}}ttt||ƒ t  g d¢g d¢g d¢gg d¢g d¢g d¢gg¡}t j |¡\}}ttt||ƒ d S )Nrh   rx   )rL   rk   y      @      ð¿r2  r3  rX   rX   rY   Útest_not_conjugate_pairsé
  s    þz$TestCDF2RDF.test_not_conjugate_pairsN)r}   r~   r   r!  r"  r%  r'  r(  r)  r+  r-  r.  r0  ræ   r4  r5  r6  rX   rX   rX   rY   r   š
  s   	r   )F)Œr  r˜  r—  ÚnumpyrN   Znumpy.testingr   r   r   r   r   r   r‘  r   rä   Zscipy.linalgr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   Zscipy.linalg.lapackr'   r(   r)   r*   r+   r,   r-   r.   r/   Zscipy.linalg._miscr0   Zscipy.linalg._decomp_qzr1   Zscipy.statsr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   Zscipy.linalg._testutilsrF   Zscipy.sparse._sputilsrG   Zscipy._lib._testutilsrH   Zscipy.linalg.blasrI   Zscipy.__config__rJ   ÚImportErrorr  rZ   rë   ZREAL_DTYPESr¬  rM   rr  rf   rg   r€   rþ   rI  r_  r–  r¸  r»  r¼  rÅ  rÇ  r>  rG  rc  r™  rš  r{  r›  rË  rÓ  ré  r”  r¶  Úmachinerë  rì  rð  r–  rö  r÷  r  r·  rV   Zintprí  r  r  r  r  r   rX   rX   rX   rY   Ú<module>   s¢    €,T
 }    * 9    .j7M
 : Kÿ
ÿ
 8
ÿ&: