o
    i$                     @   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   F   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s!J d S Nr   r   r   r   )r   Xyshaper    r   r   ]/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_omp.pytest_correct_shapes)      & r   c                   C   r   r   )r   GXyr   r   r   r   r   r   test_correct_shapes_gram.   r   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s)J 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s4J ttd d df tt| d | ksKJ d S )N      ?r   tolTr)   r#      )r   r   r   r$   sumdot)r)   gamma
gamma_gramr   r   r   test_tol;   s
   .2r0   c                   C   $   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   r3   c                   C   r1   )N      ?r(   Tr*   r2   r   r   r   r   test_with_without_gram_tolJ   s   r5   c               	   C   sx   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 d    d S 1 s5w   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    d S 1 sw   Y  d S )N)r9   Zraises
ValueErrorr   )r>   r?   r   r   r   test_bad_input`   s   "rB   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   rH   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+   rC   )r.   rE   r   copyZsetflagsr    r   r   r$   rF   r
   )rG   Z
G_readonlyZXy_readonlyr/   r   r   r    test_orthogonal_mp_gram_readonlyt   s   rK   c                  C   s  t td} | ttd d df  | jjtfksJ | jjdks"J t	
| jtks,J | tt | jjttfks<J | jjtfksEJ t	
| jtt ksQJ | 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sJ | jjtfksJ | jdksJ | tt | jjttfksJ | jdksJ 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_targetsrJ   Z
set_paramsr
   )ompZcoef_normalizedr   r   r   test_estimator   s,   
rQ   c                  C   sf   t td} | ttdddf  | jtksJ t tdd} | ttdddf  | jdu s1J dS )z=Check `n_nonzero_coefs_` correct when `tol` is and isn't set.r   Nr   r'   )r   r)   )r   r   rM   r   r   n_nonzero_coefs_)rP   r   r   r   test_estimator_n_nonzero_coefs   s   
rS   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    d S 1 sAw   Y  d S )Nr   r@   r4   r6   r7   r+   r   )
r   rJ   r$   zerosr   r-   r9   r:   r;   r   )ZnewXr.   Znewyr<   r   r   r   test_identical_regressors   s   
"rU   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 )Nr4      r'   r   r+   r   )r$   rT   r   r-   r   Tr   r   r   r   rF   )r.   Znew_yZnew_XyZ	gamma_hatZgamma_hat_gramr   r   r   test_swapped_regressors   s   
rX   c                  C   sd   t t} t tj| }ttt| dd}ttt|dd}t 	|dks'J t 	|dks0J d S )Nr@   r   r   )
r$   Z
zeros_liker   r-   r   rW   r   r   r   all)Zy_emptyZXy_emptyZgamma_emptyZgamma_empty_gramr   r   r   test_no_atoms   s   
rZ   c                  C   s   t ttddd} t ttddd}| jttdfksJ 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sBJ t| d d d d df | d S )Nr   T)r   return_pathF)
r   r   r   r   r   rO   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sJ t| d d d d df | d S )Nr   T)r   r[   r#   Fr\   )r   r   r   r   r   rO   r
   r]   r   r   r   #test_omp_return_path_prop_with_gram   s    ra   c                  C   s~   t d d df } td d df }tddd}|t|  |jtks#J t|j| t	d|jd}|t|  t|j|j d S )Nr   Fr   )rL   Zmax_iter)rL   r   )
r   r.   r   rM   r   rR   r   r
   rN   r   )Zy_Zgamma_ZompcvrP   r   r   r   test_omp_cv   s   rb   c                  C   sf   t d} d\}}d}| ||}| ||}t|d}t }||| ||| t|j|j d S )Nr   )r      r   r   )r   Zrandnr   r   rM   r
   rN   )rngr   r   rO   r   YrP   Zlstsqr   r   r   test_omp_reaches_least_squares   s   
rf   	data_typec                 C   s,   t t| t| dd}|j| ksJ d S Nr   r   )r   r   astyper    Zdtype)rg   Zcoefr   r   r   test_omp_gram_dtype_match   s   rj   c                  C   sJ   t ttjttjdd} t ttjttjdd}t| | d S rh   )r   r   ri   r$   float32r    float64r	   )Zcoef_32Zcoef_64r   r   r   #test_omp_gram_numerical_consistency	  s   rm   )6numpyr$   r9   Zsklearn.datasetsr   Zsklearn.linear_modelr   r   r   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr	   r
   r   r   r   r   r   rO   r   r   r.   rW   r-   r   r    r   r!   r&   r0   r3   r5   r=   markZparametrizerB   rH   rK   rQ   rS   rU   rX   rZ   r`   ra   rb   rf   rk   rl   rj   rm   r   r   r   r   <module>   sZ   
	
