U
    ½mœd«'  ã                	   @   s  d dl Zd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZ d dlmZ d	\ZZZZeeeeed d
d�\ZZZed9 Zed9 Ze eje¡e eje¡ ZZej deeg¡ej ddddg¡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efeefg¡ej d#d$d%id&d%id&ed' ig¡d(d)„ ƒƒZ(d*d+„ Z)d,d-„ Z*ej +d.¡d/d0„ ƒZ,d1d2„ Z-d3d4„ Z.d5d6„ Z/d7d8„ Z0d9d:„ Z1ej +d.¡d;d<„ ƒZ2ej +d.¡d=d>„ ƒZ3ej d?ej4ej5f¡d@dA„ ƒZ6dBdC„ Z7dS )Dé    N)Úassert_allclose)Úassert_array_equal)Úassert_array_almost_equal)Úignore_warnings)Úorthogonal_mpÚorthogonal_mp_gramÚOrthogonalMatchingPursuitÚOrthogonalMatchingPursuitCVÚLinearRegression)Úcheck_random_state)Úmake_sparse_coded_signal)é   é#   é   é   T)Ú	n_samplesZn_componentsÚ
n_featuresÚn_nonzero_coefsZrandom_stateZdata_transposedé
   ÚOmpModelznormalize, n_warnings)Té   )Fr   )Ú
deprecatedr   c           
   	   C   sŠ   t dƒ}d}d}| ||¡}d||dk < | |¡}| |d�}tjdd��}	t d	t¡ | ||¡ W 5 Q R X td
d„ |	D ƒƒ|ks†t	‚d S )Nr   éÈ   é   g        gš™™™™™¹?)Ú	normalizeT)ÚrecordÚalwaysc                 S   s   g | ]
}|j ‘qS © )Úmessage)Ú.0Úwr   r   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/linear_model/tests/test_omp.pyÚ
<listcomp>>   s     z6test_assure_warning_when_normalize.<locals>.<listcomp>)
r   ÚrandnZrandÚwarningsÚcatch_warningsÚsimplefilterÚFutureWarningÚfitÚlenÚAssertionError)
r   r   Z
n_warningsÚrngr   r   ÚXÚyÚmodelZrecr   r   r!   Ú"test_assure_warning_when_normalize*   s    

r/   c                   C   sF   t ttd d …df dd�jtfks&t‚t ttdd�jtdfksBt‚d S ©Nr   r   ©r   r   )r   r,   r-   Úshaper   r*   r   r   r   r!   Útest_correct_shapesA   s    &r3   c                   C   sF   t ttd d …df dd�jtfks&t‚t ttdd�jtdfksBt‚d S r0   )r   ÚGÚXyr2   r   r*   r   r   r   r!   Útest_correct_shapes_gramF   s    &r6   c                   C   sV   t  tttd d …df dd�¡dks(t‚t  tttd d …df ddd�¡dksRt‚d S )Nr   r   r1   T©r   Ú
precompute)ÚnpÚcount_nonzeror   r,   r-   r*   r   r   r   r!   Útest_n_nonzero_coefsK   s
    ( ÿÿr;   c                  C   sš   d} t ttd d …df | d�}t ttd d …df | dd�}t td d …df t t|¡ d ¡| ksht‚t td d …df t t|¡ d ¡| ks–t‚d S )Nç      à?r   ©ÚtolT©r>   r8   r   )r   r,   r-   r9   ÚsumÚdotr*   )r>   ÚgammaÚ
gamma_gramr   r   r!   Útest_tolS   s
    .rD   c                   C   s$   t tttdd�tttddd�ƒ d S )Nr   r1   Tr7   ©r   r   r,   r-   r   r   r   r!   Útest_with_without_gram[   s    þrF   c                   C   s$   t tttdd�tttddd�ƒ d S )Nç      ð?r=   Tr?   rE   r   r   r   r!   Útest_with_without_gram_tolb   s     ÿrH   c               	   C   sb   t tttdd�ttttd�ƒ d} tjt| d��( t tttddd�tttdtd�ƒ W 5 Q R X d S )	Nr   r=   r1   úŠOrthogonal matching pursuit ended prematurely due to linear dependence in the dictionary. The requested precision might not have been met.©ÚmatchTr?   )r8   r   )r   r   r,   r-   r   ÚpytestÚwarnsÚRuntimeWarning)Úwarning_messager   r   r!   Útest_unreachable_accuracyh   s     ÿÿþrP   Úpositional_paramsÚkeyword_paramsr>   éÿÿÿÿr   r   c              	   C   s$   t  t¡� t| |Ž W 5 Q R X d S )N)rL   ZraisesÚ
ValueErrorr   )rQ   rR   r   r   r!   Útest_bad_inputx   s    rU   c                  C   s¢   t d d …df  ¡ \} tttd d …df dd�}tttd d …df dd�}t| t	 
|¡ƒ t| t	 
|¡ƒ tt d d …df |dd� tt d d …df |dd� d S )Nr   r   r1   r   ©Údecimal)rB   Únonzeror   r,   r-   r   r4   r5   r   r9   Úflatnonzeror   )ÚidxZ	gamma_recrC   r   r   r!   Útest_perfect_signal_recovery‚   s    r[   c                  C   sŠ   t d d …df  ¡ \} t ¡ }|jdd� t ¡ }|jdd� t||d d …df dddd�}t| t 	|¡ƒ t
t d d …df |dd� d S )Nr   F)Úwriter   )r   Z	copy_GramZcopy_Xyr   rV   )rB   rX   r4   ÚcopyZsetflagsr5   r   r   r9   rY   r   )rZ   Z
G_readonlyZXy_readonlyrC   r   r   r!   Ú test_orthogonal_mp_gram_readonlyŒ   s        ÿr^   z!ignore:'normalize' was deprecatedc                  C   sŽ  t td�} |  ttd d …df ¡ | jjtfks4t‚| j	jdksDt‚t
 | j¡tksXt‚|  tt¡ | jjttfksxt‚| j	jtfksŠt‚t
 | j¡tt ks¢t‚| jd  ¡ }| jdd� |  ttd d …df ¡ t|| jƒ | jdd� |  ttd d …df ¡ t
 | j¡tk�st‚| jjtfk�s.t‚| j	dk�s>t‚|  tt¡ | jjttfk�s`t‚| j	dk�spt‚t
 | j¡tt k�sŠt‚d S )Nr1   r   r   T)Úfit_interceptF)r   r   r(   r,   r-   Úcoef_r2   r   r*   Z
intercept_r9   r:   Ú	n_targetsr]   Z
set_paramsr   )ÚompZcoef_normalizedr   r   r!   Útest_estimatorœ   s,    
rc   c               	   C   sz   t  ¡ } | d d …df | d d …df< t t¡}d |d< |d< t | |¡}d}tjt|d�� t	| |dd� W 5 Q R X d S )Nr   r   rG   rI   rJ   r   r1   )
r,   r]   r9   Úzerosr   rA   rL   rM   rN   r   )ZnewXrB   ZnewyrO   r   r   r!   Útest_identical_regressorsº   s    
ÿre   c                  C   s|   t  t¡} d| d< d| d< t  t| ¡}t  tj|¡}tt|dd�}tt|dd�}t	t  
|¡ddgƒ t	t  
|¡ddgƒ d S )NrG   é   r<   r   r   r1   )r9   rd   r   rA   r,   ÚTr   r   r4   r   rY   )rB   Znew_yZnew_XyZ	gamma_hatZgamma_hat_gramr   r   r!   Útest_swapped_regressorsÉ   s    
rh   c                  C   sd   t  t¡} t  tj| ¡}ttƒt| dd�}ttƒt|dd�}t  	|dk¡sNt
‚t  	|dk¡s`t
‚d S )Nr   r1   r   )r9   Z
zeros_liker-   rA   r,   rg   r   r   r4   Úallr*   )Zy_emptyZXy_emptyZgamma_emptyZgamma_empty_gramr   r   r!   Útest_no_atomsØ   s    
rj   c                  C   s¤   t ttddd�} t ttddd�}| jttdfks4t‚t| d d …d d …df |ƒ tt	t
ddd�} tt	t
ddd�}| jttdfks„t‚t| d d …d d …df |ƒ d S )Nr   T)r   Úreturn_pathFrS   )r   r,   r-   r2   r   ra   r*   r   r   r4   r5   ©ÚpathÚlastr   r   r!   Útest_omp_pathá   s    ro   c                  C   sX   t ttdddd�} t ttdddd�}| jttdfks8t‚t| d d …d d …df |ƒ d S )Nr   T)r   rk   r8   FrS   )r   r,   r-   r2   r   ra   r*   r   rl   r   r   r!   Ú#test_omp_return_path_prop_with_gramì   s    rp   c                  C   s‚   t d d …df } td d …df }tdddd�}| t| ¡ |jtksHt‚t|j	|ƒ t
dd|jd�}| t| ¡ t|j	|j	ƒ d S )Nr   TFr   )r   r_   Zmax_iter)r   r_   r   )r-   rB   r	   r(   r,   Zn_nonzero_coefs_r   r*   r   r`   r   )Zy_Zgamma_Zompcvrb   r   r   r!   Útest_omp_cvô   s"      ÿ  ÿrq   c                  C   sf   t dƒ} d\}}d}|  ||¡}|  ||¡}t|d�}tƒ }| ||¡ | ||¡ t|j|jƒ d S )Nr   )r   é   r   r1   )r   r#   r   r
   r(   r   r`   )r+   r   r   ra   r,   ÚYrb   Zlstsqr   r   r!   Útest_omp_reaches_least_squares  s    
rt   Ú	data_typec                 C   s,   t t | ¡t | ¡dd�}|j| ks(t‚d S ©Nr   r1   )r   r4   Úastyper5   Zdtyper*   )ru   Zcoefr   r   r!   Útest_omp_gram_dtype_match  s      ÿrx   c                  C   sJ   t t tj¡t tj¡dd�} t t tj¡t tj¡dd�}t| |ƒ d S rv   )r   r4   rw   r9   Úfloat32r5   Úfloat64r   )Zcoef_32Zcoef_64r   r   r!   Ú#test_omp_gram_numerical_consistency  s    
 
 ÿ
 
 ÿr{   )8Únumpyr9   rL   r$   Zsklearn.utils._testingr   r   r   r   Zsklearn.linear_modelr   r   r   r	   r
   Zsklearn.utilsr   Zsklearn.datasetsr   r   r   r   ra   r-   r,   rB   rA   rg   r4   r5   ÚmarkZparametrizer/   r3   r6   r;   rD   rF   rH   rP   rU   r[   r^   Úfilterwarningsrc   re   rh   rj   ro   rp   rq   rt   ry   rz   rx   r{   r   r   r   r!   Ú<module>   sv   ú	 ÿ ÿþ


	




