a
    h$                     @   s  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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(d!d" Z)d#d$ Z*d%d& Z+d'd( Z,d)d* Z-d+d, Z.d-d. Z/d/d0 Z0d1d2 Z1ej$%d3ej2ej3fd4d5 Z4d6d7 Z5dS )8    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
   c                   C   sF   t ttd d df ddjtfks&J t ttddjtdfksBJ d S Nr   r   r   r   )r   Xyshaper    r   r   _/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/linear_model/tests/test_omp.pytest_correct_shapes)   s    &r   c                   C   sF   t ttd d df ddjtfks&J t ttddjtdfksBJ d S r   )r   GXyr   r   r   r   r   r   test_correct_shapes_gram.   s    &r   c                   C   sV   t tttd d df dddks(J t tttd d df ddddksRJ d S )Nr   r   r   Tr   
precompute)npcount_nonzeror   r   r   r   r   r   r   test_n_nonzero_coefs3   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shJ ttd d df tt| d | ksJ d S )N      ?r   tolTr'   r!      )r   r   r   r"   sumdot)r'   gamma
gamma_gramr   r   r   test_tol;   s
    .r.   c                   C   s$   t tttddtttddd d S )Nr   r   Tr    r
   r   r   r   r   r   r   r   test_with_without_gramC   s    r0   c                   C   s$   t tttddtttddd d S )N      ?r&   Tr(   r/   r   r   r   r   test_with_without_gram_tolJ   s    r2   c               	   C   sv   t tttddttttd d} tjt| d2 t tttdddtttdtd W d    n1 sh0    Y  d S )	Nr   r&   r   Orthogonal matching pursuit ended prematurely due to linear dependence in the dictionary. The requested precision might not have been met.matchTr(   )r!   r   )r
   r   r   r   r   pytestwarnsRuntimeWarning)warning_messager   r   r   test_unreachable_accuracyP   s    r:   positional_paramskeyword_paramsr      c                 C   s<   t t t| i | W d    n1 s.0    Y  d S )N)r6   Zraises
ValueErrorr   )r;   r<   r   r   r   test_bad_input`   s    r?   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   r   r)   decimal)r,   nonzeror   r   r   r   r   r   r   r"   flatnonzeror
   )idxZ	gamma_recr-   r   r   r   test_perfect_signal_recoveryj   s    rE   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)   r@   )r,   rB   r   copyZsetflagsr   r   r   r"   rC   r
   )rD   Z
G_readonlyZXy_readonlyr-   r   r   r    test_orthogonal_mp_gram_readonlyt   s    rH   c                  C   s  t td} | ttd d df  | jjtfks4J | jjdksDJ t	
| jtksXJ | tt | jjttfksxJ | jjtfksJ t	
| jtt ksJ | 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J | jjtfks.J | jdks>J | tt | jjttfks`J | jdkspJ t	
| jtt ksJ d S )Nr   r   r   T)fit_interceptF)r   r   fitr   r   coef_r   r   Z
intercept_r"   r#   	n_targetsrG   Z
set_paramsr
   )ompZcoef_normalizedr   r   r   test_estimator   s,    
rN   c                  C   sf   t td} | ttdddf  | jtks0J t tdd} | ttdddf  | jdu sbJ dS )z=Check `n_nonzero_coefs_` correct when `tol` is and isn't set.r   Nr   r%   )r   r'   )r   r   rJ   r   r   n_nonzero_coefs_)rM   r   r   r   test_estimator_n_nonzero_coefs   s    
rP   c                  C   s   t  } | d d df | d d df< tt}d |d< |d< t| |}d}tjt|d t	| |dd W d    n1 s0    Y  d S )Nr   r=   r1   r3   r4   r)   r   )
r   rG   r"   zerosr   r+   r6   r7   r8   r   )ZnewXr,   Znewyr9   r   r   r   test_identical_regressors   s    
rR   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 )Nr1      r%   r   r)   r   )r"   rQ   r   r+   r   Tr   r   r   r   rC   )r,   Znew_yZnew_XyZ	gamma_hatZgamma_hat_gramr   r   r   test_swapped_regressors   s    
rU   c                  C   sd   t t} t tj| }ttt| dd}ttt|dd}t 	|dksNJ t 	|dks`J d S )Nr=   r   r   )
r"   Z
zeros_liker   r+   r   rT   r   r   r   all)Zy_emptyZXy_emptyZgamma_emptyZgamma_empty_gramr   r   r   test_no_atoms   s    
rW   c                  C   s   t ttddd} t ttddd}| jttdfks4J 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sJ t| d d d d df | d S )Nr   T)r   return_pathF)
r   r   r   r   r   rL   r
   r   r   r   pathlastr   r   r   test_omp_path   s    r]   c                  C   sX   t ttdddd} t ttdddd}| jttdfks8J t| d d d d df | d S )Nr   T)r   rX   r!   FrY   )r   r   r   r   r   rL   r
   rZ   r   r   r   #test_omp_return_path_prop_with_gram   s    r^   c                  C   s~   t d d df } td d df }tddd}|t|  |jtksFJ t|j| t	d|jd}|t|  t|j|j d S )Nr   Fr   )rI   Zmax_iter)rI   r   )
r   r,   r   rJ   r   rO   r   r
   rK   r   )Zy_Zgamma_ZompcvrM   r   r   r   test_omp_cv   s    r_   c                  C   sf   t d} d\}}d}| ||}| ||}t|d}t }||| ||| t|j|j d S )Nr   )r      r   r   )r   Zrandnr   r   rJ   r
   rK   )rngr   r   rL   r   YrM   Zlstsqr   r   r   test_omp_reaches_least_squares   s    
rc   	data_typec                 C   s,   t t| t| dd}|j| ks(J d S Nr   r   )r   r   astyper   Zdtype)rd   Zcoefr   r   r   test_omp_gram_dtype_match   s    rg   c                  C   sJ   t ttjttjdd} t ttjttjdd}t| | d S re   )r   r   rf   r"   float32r   float64r	   )Zcoef_32Zcoef_64r   r   r   #test_omp_gram_numerical_consistency	  s    rj   )6numpyr"   r6   Zsklearn.datasetsr   Zsklearn.linear_modelr   r   r   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr	   r
   r   r   r   r   r   rL   r   r   r,   rT   r+   r   r   r   r   r$   r.   r0   r2   r:   markZparametrizer?   rE   rH   rN   rP   rR   rU   rW   r]   r^   r_   rc   rh   ri   rg   rj   r   r   r   r   <module>   sX   
	
