a
    CCCf	#                     @   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   a/var/www/html/django/DPS/env/lib/python3.9/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:0yE>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  gdbR?g2@吱?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$   




	