a
    ‡ù»jú#  ã                   @   sâ   d dl m  mZ d dlZd dlmZmZm	Z	 d dl
mZ d dl mZ d dlmZmZmZmZ d dlZd dlmZ d dlZejdk Ze ¡ dd	„ ƒZejejejgd
�dd„ ƒZe ¡ dd„ ƒZe ¡ dd„ ƒZG dd„ dƒZdS )é    N)ÚhilbertÚsvdvalsÚnorm©Úaslinearoperator)Úinterp_decomp)Úassert_Úassert_allcloseÚassert_equalÚassert_array_equal)Úraisesl        c                   c   s
   dV  d S )Nçê-�™—q=© r   r   r   úKE:\soccer\ml_env\Lib\site-packages\scipy/linalg/tests/test_interpolative.pyÚeps+   s    r   )Úparamsc                 c   s   d}t |ƒ | j¡V  d S )Ni,  )r   ÚastypeÚparam)ÚrequestÚnr   r   r   ÚA0   s    r   c                 c   s   t | ƒV  d S )Nr   )r   r   r   r   ÚL8   s    r   c                 C   sL   t jj| dd�}zt  ||k ¡d d }W n tyF   | jd }Y n0 |S )NF)Z
compute_uvr   )ÚnpÚlinalgÚsvdZnonzeroÚ
IndexErrorÚshape)r   r   ÚSÚrankr   r   r   r   =   s    r   c                   @   s  e Zd Zej dg d¢¡dd„ ƒZej dg d¢¡dd„ ƒZej ddg¡dd	„ ƒZej dg d¢¡d
d„ ƒZ	ej dg 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d„ Zej d ejejg¡ej d!d"d#g¡ej d$d%d&g¡d'd(„ ƒƒƒZd)S )*ÚTestInterpolativeDecompositionzrand,lin_op)©FF)TF)TTc                 C   sv   t r|jtjkr|rt d¡ |s&|n|}tj|||d�\}}}	t |d d …|d |… f ||	¡}
t	||
|dd� d S ©Núbug in external fortran code©Úrandç:Œ0âŽyE>©ZrtolZatol©
Ú	_IS_32BITÚdtyper   Ú
complex128ÚpytestÚxfailÚ
pymatrixidr   Zreconstruct_matrix_from_idr	   )Úselfr   r   r   r$   Úlin_opÚA_or_LÚkÚidxÚprojÚBr   r   r   Útest_real_id_fixed_precisionI   s    
"z;TestInterpolativeDecomposition.test_real_id_fixed_precisionc                 C   sx   t r|jtjkr|rt d¡ |}|s*|n|}tj|||d�\}	}
t |d d …|	d |… f |	|
¡}t	|||dd� d S r!   r'   )r.   r   r   r   r   r$   r/   r1   r0   r2   r3   r4   r   r   r   Útest_real_id_fixed_rankV   s    
"z6TestInterpolativeDecomposition.test_real_id_fixed_rankr    c                 C   sz   |}|s|n|}t j|||d�\}	}
t  |	|
¡}t  |||	¡}t||d d …|	d |… f |dd� t|| ||dd� d S )Nr#   r%   r&   )r-   r   Úreconstruct_interp_matrixÚreconstruct_skel_matrixr	   )r.   r   r   r   r   r$   r/   r1   r0   r2   r3   ÚPr4   r   r   r   Ú%test_real_id_skel_and_interp_matricesc   s    $zDTestInterpolativeDecomposition.test_real_id_skel_and_interp_matricesc                 C   sf   t r|jtjkr|rt d¡ |s&|n|}tj|||d�\}}}	|| |	j 	¡  }
t
||
|dd� d S r!   ©r(   r)   r   r*   r+   r,   r-   r   ÚTÚconjr	   )r.   r   r   r   r$   r/   r0   ÚUr   ÚVr4   r   r   r   Útest_svd_fixed_precisono   s    
z6TestInterpolativeDecomposition.test_svd_fixed_precisonc                 C   sj   t r|jtjkr|rt d¡ |}|s*|n|}tj|||d�\}	}
}|	|
 |j 	¡  }t
|||dd� d S r!   r;   )r.   r   r   r   r   r$   r/   r1   r0   r>   r   r?   r4   r   r   r   Útest_svd_fixed_rank{   s    
z2TestInterpolativeDecomposition.test_svd_fixed_rankc                 C   sf   |}t j||dd�\}}t  |d d …|d |… f ||¡\}}}	|| |	j ¡  }
t||
|dd� d S )NFr#   r%   r&   )r-   r   Z	id_to_svdr<   r=   r	   )r.   r   r   r   r1   r2   r3   r>   r   r?   r4   r   r   r   Útest_id_to_svdˆ   s
    (z-TestInterpolativeDecomposition.test_id_to_svdc                 C   s*   t |ƒ}t |¡}t||d ddd� d S )Nr   ç�íµ ÷Æ°>r%   r&   )r   r-   Zestimate_spectral_normr	   )r.   r   ÚsÚ
norm_2_estr   r   r   Útest_estimate_spectral_norm�   s    
z:TestInterpolativeDecomposition.test_estimate_spectral_normc                 C   sP   |  ¡ }|d d …df  d9  < t|| ƒ}t ||¡}t||d ddd� d S )Nr   g333333ó?rC   r%   r&   )Úcopyr   r-   Zestimate_spectral_norm_diffr	   )r.   r   r4   rD   rE   r   r   r   Ú test_estimate_spectral_norm_diff•   s
    z?TestInterpolativeDecomposition.test_estimate_spectral_norm_diffc                 C   sx   t jg d¢g d¢g d¢g|jd�}||fD ]H}d}t j |t|dƒ| ¡}t ||¡}t||kƒ t||d kƒ q*d S )N©é   rJ   r   ©r   r   rJ   ©r)   ç•Ö&è.>é   é
   )	r   Úarrayr)   r   Úmatrix_rankr   r-   Úestimate_rankr   )r.   r   r4   ÚMÚrank_tolÚrank_npÚrank_estr   r   r   Útest_rank_estimates_arrayœ   s    "z8TestInterpolativeDecomposition.test_rank_estimates_arrayc                 C   s„   t jg d¢g d¢g d¢g|jd�}||fD ]T}t|ƒ}d}t j |t|dƒ| ¡}t ||¡}t	||d kƒ t	||d kƒ q*d S )NrI   rK   rL   rM   rN   é   )
r   rP   r)   r   r   rQ   r   r-   rR   r   )r.   r   r4   rS   ZMLrT   rU   rV   r   r   r   Útest_rank_estimates_lin_op¦   s    "z9TestInterpolativeDecomposition.test_rank_estimates_lin_opc                 C   sª   t  d¡ tt  d¡ddgddd� t  d¡ t  d¡}t|d	d
gddd� tj d¡ t  ¡  t  d¡}tj d¡ t  tj d¡¡ t  d¡}t||ƒ t||ƒ d S )NÚdefaultrN   g#Š$•ì?gƒ<Páç£ä?g-Cëâ6?r%   r&   iÒ  gdb©äRè?gä2@å�±?é7   )r-   Úseedr	   r$   r   Úrandom)r.   Úx1Zx2Zx3r   r   r   Ú	test_rand±   s    
ÿ




z(TestInterpolativeDecomposition.test_randc                 C   sL   t dƒ tj¡}ttƒ�  tj|ddd� W d   ƒ n1 s>0    Y  d S )Né   rC   Fr#   )r   r   r   Zfloat32Úassert_raisesÚ
ValueErrorr-   r   )r.   r   r   r   r   Útest_badcallÅ   s    
z+TestInterpolativeDecomposition.test_badcallc                 C   sB   t  d¡}ttƒ� t |d¡ W d   ƒ n1 s40    Y  d S )N)rX   é   rX   )r   Zonesra   rb   r-   r   )r.   Úar   r   r   Útest_rank_too_largeÊ   s    

z2TestInterpolativeDecomposition.test_rank_too_largec                 C   s˜   d}t j dd¡}t ||¡\}}}t||jd ƒ t ||¡}t |||¡}t	||| ƒ t ||¡\}}t ||¡}t |||¡}t	||| ƒ d S )Nr   é   é   rJ   )
r   r]   r$   r-   r   r
   r   r7   r8   r	   )r.   r   r   r1   r2   r3   r9   r4   r   r   r   Útest_full_rankÐ   s    z-TestInterpolativeDecomposition.test_full_rankr)   r$   TFr   rJ   gš™™™™™¹?c                 C   sp   t r|tjkr|rt d¡ tjg d¢g d¢g d¢g d¢g d¢g|dd�}| ¡ }t|j||d	� t	||ƒ d S )
Nr"   )éÿÿÿÿrj   rj   r   r   r   )r   r   r   rJ   rJ   rJ   )rJ   r   r   rJ   r   r   )r   rJ   r   r   rJ   r   )r   r   rJ   r   r   rJ   ÚC)r)   Úorderr#   )
r(   r   r*   r+   r,   rP   rG   r   r<   r   )r.   r)   r$   r   r   r4   r   r   r   Útest_bug_9793ã   s    

üûz,TestInterpolativeDecomposition.test_bug_9793N)Ú__name__Ú
__module__Ú__qualname__r+   ÚmarkZparametrizer5   r6   r:   r@   rA   rB   rF   rH   rW   rY   r_   rc   rf   ri   r   Úfloat64r*   rm   r   r   r   r   r   G   sF   þ

þ


þ
	þ


r   ) Zscipy.linalg.interpolativer   Zinterpolativer-   Únumpyr   Zscipy.linalgr   r   r   Zscipy.sparse.linalgr   r   Znumpy.testingr   r	   r
   r   r+   r   ra   ÚsysÚmaxsizer(   Zfixturer   rr   r*   r   r   r   r   r   r   r   r   Ú<module>   s$   




	