o
    is                     @   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 d dl	m
Z
 d dlmZ d dlmZmZmZmZmZm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  e! Z"e"j#e"j$Z%Z&e'e%j(e%Z)e'e%j(e&Z*e&j+Z,dd Z-dd Z.dd Z/ej01dddgej01dddgdd Z2dd Z3dd Z4ej05ddd  Z6ej05dd!d" Z7d#d$ Z8d%d& Z9d'd( Z:d)d* Z;ej01d+ejejejgd,d- Z<d.d/ Z=d0d1 Z>d2d3 Z?d4d5 Z@d6d7 ZAd8d9 ZBd:d; ZCd<d= ZDdsd>d?ZEd@dA ZFdBdC ZGdDdE ZHdFdG ZIdHdI ZJdJdK ZKdLdiZLdMdNii i dOZMdPdQ ZNdRdS ZOdTdU ZPej01dVddgdWdX ZQej01dVddgdYdZ ZRej01d[ed\d]e fd^d_ ZSd`da ZTdbdc ZUej01ddedi fedi fedi fedi feddedfiffej01dgejVejWfdhdi ZXej01ddedi fedi fedi fedi feddedfiffdjdk ZYej01dldmdngdodp ZZej01dLddgdqdr Z[dS )t    N)linalg)datasetslinear_model)clone)ConvergenceWarning)LarsLarsCV	LassoLarsLassoLarsCVLassoLarsIC	lars_path)_lars_path_residues)train_test_split)make_pipeline)StandardScaler)
TempMemmapassert_allcloseassert_array_almost_equalignore_warningsc                  C   s   dd l } ddlm} | j}z`| | _tjttddd\}}}|| _t|j	D ]A\}}tt
t| }t
tj	|}t
t|}	d}
t||	|
 t|k  }|tjd k r^||d ks]J q&|tjd ksgJ q&W || _d S || _w )Nr   )StringIOlar
   )methodverboseMbP?   )sysior   stdoutr   r   Xy	enumerateTnpdotmaxabslenshape)r   r   Z
old_stdout_
coef_path_icoef_rescovCepsocur r2   e/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_least_angle.pytest_simple%   s$   r4   c            	      C   s   t jtttdd\} } }t|jD ]A\}}ttt| }ttj|}t	t
|}d}t||| t
|k  }|tjd k rI||d ksHJ q|tjd ksRJ qd S )Nr   )Gramr   r   r   )r   r   r   r    Gr!   r"   r#   r$   r%   r&   r'   r(   )	r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r2   r3   test_simple_precomputedC   s   r7   c                 C   s6   t | t |ks
J t| |D ]	\}}t|| qd S )N)r'   zipr   )Zoutput1Zoutput2Zo1o2r2   r2   r3   _assert_same_lars_path_resultU   s   r:   r   r   lassoreturn_pathTFc              	   C   s.   t tjttt| |dtjttt| |d d S )N)Xyr5   	n_samplesr   r<   )r5   r   r<   )	r:   r   Zlars_path_gramr=   r6   r>   r   r   r    r   r<   r2   r2   r3   test_lars_path_gram_equivalent[   s   
r@   c                  C   sT   t tjt} tjtdd tj	d td | d W d    d S 1 s#w   Y  d S )Nz%X and Gram cannot both be unspecifiedmatch)r5   r=   )
r#   r$   r   r"   r    pytestraises
ValueErrorr   r   )r=   r2   r2   r3   (test_x_none_gram_none_raises_value_errorf   s   "rF   c                  C   sl   t tjt} t tjt}dD ]#}tjtt|d}tjtt| ||d}t||D ]	\}}t|| q)qd S )N)r   r;   r   )r5   r=   r   )	r#   r$   r   r"   r    r   r   r8   r   )r6   r=   r   outputZ
output_preexpectedgotr2   r2   r3   test_all_precomputedm   s   rK   z%ignore: `rcond` parameter will changec                  C   sB   dt  } tjdd}|| t tj| td }t|j	| d S )N           alphar   )
r   r   r	   fitr    r#   r   lstsqr   r,   )X1clf
coef_lstsqr2   r2   r3   test_lars_lstsqy   s
   rU   c                  C   sB   t jttdd\} } }tjttd }t||d d df  d S )Nr;   rG   r   )r   r   r   r    r#   r   rQ   r   )r)   r*   rT   r2   r2   r3   test_lasso_gives_lstsq_solution   s   rW   c                  C   s   t g dg dg dg} t g d}t jd}t}|tj| |dd\}}}t | r3J t 	| |d d df | }|d	 
 d
k sKJ d}||d} t |}tj| |dddddddd	\}}}t|t | d S )N)      @rX         ?)       @rZ   rM   )rY   rY   r   )rY   rM   r   r   {Gz?)	alpha_minrV      rY   r      autoFrM   r;   i  )r5   copy_XZ	copy_Gramr\   r   r   max_iter)r#   arrayrandomRandomStater   r   r   isnananyr$   sumrandzerosr   Z
zeros_like)r   r    rngfr)   r*   Zresidualr>   r2   r2   r3   test_collinearity   s.   
rl   c                  C   sX   t jttdd\} }}t jttddd\}}}t||d d df  || d ks*J d S )Nr   rG   Fr?   rV   )r   r   r   r    r   alphas_r)   r*   alpha_coefr2   r2   r3   test_no_path   s   rq   c                  C   s\   t jttdtd\} }}t jttdtdd\}}}t||d d df  || d ks,J d S )Nr   )r   r5   F)r   r5   r<   rV   )r   r   r   r    r6   r   rm   r2   r2   r3   test_no_path_precomputed   s   
rr   c            	   	   C   s   dt j t j} }t| j| }t| j|}tj| |d||dd\}}}tj| |d||ddd\}}}t||d d df  ||d ksGJ d S )NrL   r;   ?)r   r=   r5   r\   F)r   r5   r=   r\   r<   rV   )	diabetesdatatargetr#   r$   r"   r   r   r   )	r   r    r6   r=   rn   r)   r*   ro   rp   r2   r2   r3   test_no_path_all_precomputed   s   rw   
classifierc                 C   s^   t tjt}| |d}t|jttj}dD ]}| |d}|ttj}t||dd qd S )N
precompute)TFr_   N   decimal)	r#   r$   r   r"   r   rP   r    r,   r   )rx   r6   rS   Zoutput_1rz   Zoutput_2r2   r2   r3   test_lars_precompute   s   

r~   c                  C   sR   t ddgddgg} t ddg}t| |\}}}t|jddgddgg d S )Nr   rY   r   )r#   rb   r   r   r   r"   )rR   y1r)   Z	coef_pathr2   r2   r3   test_singular_matrix   s   r   c               	   C   s   g d} ddgddgddggg dg dg dgfD ]R}t d}||| j}d	t| t|| d
  dt|d  }t jddd}||| j}d	t| t|| d
  dt|d  }||d k slJ qd S )N)r^   r   r^   r^   r   r   )r   r   r   )g3#I9r   r   )r   r   r   皙?gUUUUUU?r]   r   ư>tol1  ?)	r   r	   rP   r,   r   normr#   r$   Lasso)r    r   larsZ
coef_lars_Zobj_larscoord_descentZcoef_cd_Zobj_cdr2   r2   r3   test_rank_deficient_design   s,   0
r   c                  C   sx  dt j } tj| tdd\}}}tjddd}t|j|D ] \}}|dkr&q||_|	| t t
||j }|dk s=J qtdd	d
D ]&}tj|d	| t}	tj|dd	| t}
t
|	j|
j }|dk skJ qEt j} | | jdd } | tj
j| dd } tj| tdd\}}}tjddd}t|j|D ] \}}|dkrq||_|	| t t
||j }|dk sJ qd S )NrL   r;   rG   F:0yE>fit_interceptr   r   r[   Gz?   rN   rO   r   r   Zaxisrt   ru   r   r   r    r   r8   r"   rO   rP   r   r   r,   r#   Zlinspacer	   rg   r   alphasr)   
lasso_pathlasso_cdcaerrorrO   Zclf1Zclf2errr2   r2   r3   test_lasso_lars_vs_lasso_cd   s8   
r   c                  C   s  g d} t j}| D ]4}tj|td|d\}}}tjddd}|d |_||t t	|d d df |j
 }|dk s=J q	t jt jjd	d
 }|tjj	|d	d
 }| D ]3}tj|td|d\}}}tjdd}|d |_||t t	|d d df |j
 }|dk sJ qTd S )N)r   rs   -C6?r;   )r   r\   Fr   r   rV   r[   r   r   r   )rt   ru   r   r   r    r   rO   rP   r   r   r,   rg   r#   )Z
alphas_minr   r\   r   r)   r   r   r   r2   r2   r3   *test_lasso_lars_vs_lasso_cd_early_stopping!  s.   

r   c                  C   sf   t  } | tt t j| jd d}|tt t| jd d |j tt	| jdk s1J d S )Nr]   rN   rL   r   )
r   r	   rP   r   r    rn   r   r#   alldiff)r;   Zlasso2r2   r2   r3   test_lasso_lars_path_lengthB  s   r   c                  C   s   t jd} d\}}d}| ||}t |df}t d|}| | |d | }t | |d| |dd  ||< t 	||}d}	||	| j|j
  7 }| }tj||dd\}
}}tj|||
d	d
\}}}t||dd d S )N*   )F   d   r^   r   r   g?r;   rG   r   )r   r   r|   )r#   rc   rd   randnri   arangeshufflesignrh   r$   r(   Zsqueezer   r   r   r   )rj   nmkr   wr+   Zsuppr    sigmaZlars_alphasr)   Z	lars_coefZlasso_coef2r2   r2   r3   +test_lasso_lars_vs_lasso_cd_ill_conditionedM  s    
&r   c                     s   g dg dg dg g dd fdd} t jd}d	}tjt|d
 |  W d    n1 s9w   Y  |j}| |}t jdd}| j}| |}||d k s_J d S )N)@xDr   r   )g3#Ir   r   )r   r   r   )r   r   r   r   c                    s:   ddt    tt |  d  t| d  S )NrY   rZ   r]   r   )r'   r   r   r#   r$   )rp   r   rO   r    r2   r3   objective_functionu  s   zHtest_lasso_lars_vs_lasso_cd_ill_conditioned2.<locals>.objective_functionrN   z$Regressors in active set degenerate.rA   r   r   )r   r	   rC   Zwarnsr   rP   r,   r   )r   r   Zwarning_messageZ
lars_coef_Zlars_objr   Zcd_coef_Zcd_objr2   r   r3   ,test_lasso_lars_vs_lasso_cd_ill_conditioned2j  s   r   c                  C   sd   d} dt d| d t | d d t jf   }tjdd|t | }t t |js0J d S )Nr^   rY   r   Fr   )	r#   r   Znewaxisr   r   rP   r   isfiniter,   )r   HrS   r2   r2   r3   test_lars_add_features  s   ,r   c                 C   sJ   t jd| d}|tt t|j d dksJ t|jdks#J d S )N   )n_nonzero_coefsr   r      )	r   r   rP   r   r    r'   r,   Znonzerorn   )r   r   r2   r2   r3   test_lars_n_nonzero_coefs  s   r   c                  C   s  t ttd gj} | jd }t t tjddtjddg}|D ]^}|t	|  |
t	}|j|j|j|jf\}}}}t|D ]>}	|t	| d d |	f  |
t	}
t||	 |j t||	 |j t||	 |j t||	 |j t|d d |	f |
 qBq#d S )Nr]   r   Fr   )r#   Zvstackr    r"   r(   r   r	   r   rP   r   predictrn   Zactive_r,   r*   ranger   )YZ	n_targetsZ
estimators	estimatorZY_predr   Zactiverp   pathr   Zy_predr2   r2   r3   test_multitarget  s2   




r   c                  C   sf   d} t  }dD ]!}tjd | }tjd | }||| tj| |j	 |j	} qt
|dr1J d S )Nr   )i     r   r   )r   r
   rt   ru   rv   rP   r#   testingZassert_array_lessro   hasattr)Z	old_alphalars_cvlengthr   r    r2   r2   r3   test_lars_cv  s   r   c                 C   s   t d tjddd9 tj}tj}tjd}|	t
|}tj}tj|||f }t |}tjddd}||| W d    n1 sHw   Y  dd | D }t
|d	ks\J d S )
Nalwaysraise)divideinvalidr   r^   )ra   Zcvc                 S   s   g | ]}t |qS r2   )str).0r   r2   r2   r3   
<listcomp>  s    z)test_lars_cv_max_iter.<locals>.<listcomp>r   )warningssimplefilterr#   Zerrstatert   ru   rv   rc   rd   r   r'   c_r   fit_transformr   r
   rP   )Zrecwarnr   r    rj   xr   Zrecorded_warningsr2   r2   r3   test_lars_cv_max_iter  s   
r   c                  C   s   t d} t d}tjd}tj}tj|||j	d df }t
 |}| |t ||t t| jd }t|jd }| j|jksKJ t|t|k sUJ t|tjj	d k sbJ d S )Nbicaicr   r   r^   r   )r   r   r#   rc   rd   rt   ru   r   r   r(   r   r   rP   r    wherer,   ro   r'   r%   )Zlars_bicZlars_aicrj   r   Znonzero_bicZnonzero_aicr2   r2   r3   test_lasso_lars_ic  s   

r   c                  C   sV   t ttdd} t| \}}}}t||||dd W d    d S 1 s$w   Y  d S )Nr   )random_stateF)copy)r   r   r    r   r   )Zsplitted_dataZX_trainZX_testZy_trainZy_testr2   r2   r3   test_lars_path_readonly_data  s   "r   c                  C   s   d} t jt| d tjtd td ddd W d    n1 s!w   Y  d}tjttd|d	d
\}}}| dk s=J tjttd|dd
\}}}| dksRJ d S )Nz:Positive constraint not supported for 'lar' coding method.rA   ru   rv   r   Tr   positiver;   F)r<   r   r   r   )	rC   rD   rE   r   r   rt   r   r    min)err_msgr   r)   Zcoefsr2   r2   r3   "test_lars_path_positive_constraint  s   


r   r   rO   r   r	   r
   r   c                  C   s   ddi} ddii i d}|D ]C}|   }|||  tt|d	ddi|}|tt |j dk s6J tt|d	ddi|}|tt t|jdksQJ qd S )
Nr   FrO   r   r   r   r   Tr2   )	r   updategetattrr   rP   r   r    r,   r   )default_parameterestimator_parameter_mapZestnameparamsr   r2   r2   r3   )test_estimatorclasses_positive_constraint%  s   r   c                  C   s  dt j } tj| tddd\}}}tjdddd}t|j|D ] \}}|dkr(q||_|	| t t
||j }|d	k s?J qtd
ddD ]*}tjd|dd	| t}	tjd|ddd	| t}
t
|	j|
j }|dk sqJ qGt jt jjdd } | tj
j| dd } tj| tddd\}}}tjdddd}t|jd d |d d D ]\}}||_|	| t t
||j }|d	k sJ qd S )NrL   r;   Tr   Fr   )r   r   r   r   r[   g333333?r   r   )r   rO   r   )r   rO   r   r   r   r   rV   r   r   r2   r2   r3   $test_lasso_lars_vs_lasso_cd_positive:  sB   
	$r   c                  C   s   t g d} t g dg dg dg dg dg}|j}t g dg dg d	g d
g dg}tjddd}|||  |j}t||dd d S )N)gMPg~5j2gW:!g>ޒ}@g@Jk3)gJE?r   r   r   r   )g!?gŖX~s?r   r   r   )g%haE?g;4g\P?r   r   )g8k荿g0HUngx2Fڤ?gYQ?r   )g{J2ghXJ?g=Da?g%7g{?)
r   r   r   r   r   gZ,SgrTg[0Tg#l/TgJ#U)
r   r   r   r   g޿r   r   r   r   g)44ә?)
r   gW]g` g&gdug
fտr   r   g>S?gQ7X?)
r   r   r   gnrCO;@g/z@@g|~@g#B@gN)@gS@gQT잇@)
r   r   gVs5~gtTXlgFgBFgm_gGg8GgӫGg`Hr   F)rO   r      r|   )r#   rb   r"   r   r	   rP   r*   r   )r    r   r   rZmodel_lasso_larsZ	skl_betasr2   r2   r3   #test_lasso_lars_vs_R_implementationn  s,   

6r   r`   c                 C   sb   t | dd}tjd}|ddd}| }|dddf }||| | t||ks/J dS )zq
    Test that user input regarding copy_X is not being overridden (it was until
    at least version 0.21)

    F)r`   rz   r   r   r   r^   Nr]   r   r#   rc   rd   normalr   rP   Zarray_equalr`   Z
lasso_larsrj   r   ZX_copyr    r2   r2   r3   test_lasso_lars_copyX_behaviour  s   r   c                 C   sd   t dd}tjd}|ddd}| }|dddf }|j||| d | t||ks0J dS )	zS
    Test that user input to .fit for copy_X overrides default __init__ value

    Fry   r   r   r   Nr]   )r`   r   r   r2   r2   r3   #test_lasso_lars_fit_copyX_behaviour  s   
r   estr   rN   c                 C   s   t g dg dg}ddg}g d}| jdd t| jddd	}| || ||| t | j|j d
 dks=J t jj|j|dd d S )N)rM   rM   rM         rM   )rM   r   rM   rM   rM   g      )r         @r   r   r   Fr   gHz>r   )Zjitterr   r]   r   r   )rtol)	r#   rb   
set_paramsr   rP   meanr,   r   r   )r   r   r    Zexpected_coefZ
est_jitterr2   r2   r3   test_lars_with_jitter  s   r   c                   C   sJ   t jtdd td tdgdd W d    d S 1 sw   Y  d S )Nz$X cannot be None if Gram is not NonerA   r   T)r   r    r5   )rC   rD   rE   r   r#   rb   r2   r2   r2   r3   test_X_none_gram_not_none  s   "r   c                  C   sL   t jd} | dd}| d}| }tj||dddd t|| d S )Nr   r   r_   Tr;   )r5   r`   r   )r#   rc   rd   rh   r   r   r   r   )rj   r   r    ZX_beforer2   r2   r3   test_copy_X_with_auto_gram  s   
r   zLARS, has_coef_path, argsra   r^   dtypec                 C   s   t jd}|dd|}|d|}| di |}||| |jj|ks,J |r6|jj|ks6J |j	j|ks>J d S )Nr   r   r   r2   )
r#   rc   rd   rh   astyperP   r,   r   r*   
intercept_)LARShas_coef_pathargsr   rj   r   r    modelr2   r2   r3   test_lars_dtype_match  s   r   c           
      C   s   d}d}t jd}|dd}|d}| di |||}| di ||t j|t j}	t|j|	j||d |rIt|j	|	j	||d t|j
|	j
||d d S )Ngh㈵>r   r   r   )r   atolr2   )r#   rc   rd   rh   rP   r   float32r   r,   r*   r   )
r   r   r   r   r  rj   ZX_64Zy_64Zmodel_64Zmodel_32r2   r2   r3   test_lars_numeric_consistency%  s   
&r  	criterionr   r   c                 C   s>   t t t| d}|tt t|d j}|dksJ dS )zCheck that we properly compute the AIC and BIC score.

    In this test, we reproduce the example of the Fig. 2 of Zou et al.
    (reference [1] in LassoLarsIC) In this example, only 7 features should be
    selected.
    )r  rV   r   N)	r   r   r   rP   r   r    r#   ZargminZ
criterion_)r  r   Zbest_alpha_selectedr2   r2   r3    test_lassolarsic_alpha_selectionC  s   r  c                 C   s   t jd}tjdd|  |d\}}tt t| d}d}tj	t
|d ||| W d   n1 s5w   Y  |jd	d
 |||| dS )ziCheck the behaviour when `n_samples` < `n_features` and that one needs
    to provide the noise variance.r   r      )r>   Z
n_featuresr   r   zhYou are using LassoLarsIC in the case where the number of samples is smaller than the number of featuresrA   NrY   )Zlassolarsic__noise_variance)r#   rc   rd   r   Zmake_regressionr   r   r   rC   rD   rE   rP   r   r   )r   rj   r   r    r   r   r2   r2   r3   test_lassolarsic_noise_varianceR  s   

r  )F)\r   numpyr#   rC   Zscipyr   Zsklearnr   r   Zsklearn.baser   Zsklearn.exceptionsr   Zsklearn.linear_modelr   r   r	   r
   r   r   Z!sklearn.linear_model._least_angler   Zsklearn.model_selectionr   Zsklearn.pipeliner   Zsklearn.preprocessingr   Zsklearn.utils._testingr   r   r   r   Zload_diabetesrt   ru   rv   r   r    r$   r"   r6   r=   sizer>   r4   r7   r:   markZparametrizer@   rF   rK   filterwarningsrU   rW   rl   rq   rr   rw   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  Zfloat64r   r  r  r  r2   r2   r2   r3   <module>   s     	



	
%!

	4W




