U
    _»{j9'  ã                   @   s
  d dl Z d dlZd dl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mZmZmZ d\ZZZZeeeeed d�\ZZZejejej  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 ed! ig¡d"d#„ ƒƒZ(d$d%„ Z)d&d'„ Z*ej +d(¡d)d*„ ƒZ,d+d,„ Z-d-d.„ Z.d/d0„ Z/d1d2„ Z0d3d4„ Z1ej +d(¡d5d6„ ƒZ2ej +d(¡d7d8„ ƒZ3ej d9ej4ej5f¡d:d;„ ƒZ6d<d=„ Z7dS )>é    N)Úmake_sparse_coded_signal)ÚLinearRegressionÚOrthogonalMatchingPursuitÚOrthogonalMatchingPursuitCVÚorthogonal_mpÚorthogonal_mp_gram)Úcheck_random_state)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equalÚignore_warnings)é   é#   é   é   )Ú	n_samplesZn_componentsÚ
n_featuresÚn_nonzero_coefsZrandom_stateé
   Ú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   úb/var/www/html/bwave/python/venv/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_shapesB   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_gramG   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_coefsL   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_tolT   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_tolc   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_accuracyi   s     ÿÿþrP   Úpositional_paramsÚkeyword_paramsr   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_inputy   s    rT   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    rZ   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   rU   )rB   rW   r4   ÚcopyZsetflagsr5   r   r   r9   rX   r
   )rY   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,    
rb   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    
ÿrd   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   rc   r   rA   r,   ÚTr   r   r4   r   rX   )rB   Znew_yZnew_XyZ	gamma_hatZgamma_hat_gramr   r   r!   Útest_swapped_regressorsÊ   s    
rg   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,   rf   r   r   r4   Úallr*   )Zy_emptyZXy_emptyZgamma_emptyZgamma_empty_gramr   r   r!   Útest_no_atomsÙ   s    
ri   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_pathFéÿÿÿÿ)r   r,   r-   r2   r   r`   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   rj   r8   Frk   )r   r,   r-   r2   r   r`   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ompcvra   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   r`   r,   ÚYra   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{   )8r$   Únumpyr9   rL   Zsklearn.datasetsr   Zsklearn.linear_modelr   r   r   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr	   r
   r   r   r   r   r   r`   r-   r,   rB   rf   rA   r4   r5   ÚmarkZparametrizer/   r3   r6   r;   rD   rF   rH   rP   rT   rZ   r]   Úfilterwarningsrb   rd   rg   ri   ro   rp   rq   rt   ry   rz   rx   r{   r   r   r   r!   Ú<module>   sp   û ÿ ÿþ


	




