U
    -e9'                     @   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st	d S )Nr         g        g?)	normalizeT)recordalwaysc                 S   s   g | ]
}|j qS  )message).0wr   r   d/var/www/html/Darija-Ai-Train/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_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st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stt
| jtt kst| 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st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st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     


	




