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   
old_stdout_
coef_path_icoef_rescovCepsocur r3   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_least_angle.pytest_simple%   s$   r5   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/   r0   r1   r2   r3   r3   r4   test_simple_precomputedC   s   r8   c                 C   s6   t | t |ks
J t| |D ]	\}}t|| qd S )N)r'   zipr   )output1output2o1o2r3   r3   r4   _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)Xyr6   	n_samplesr   r@   )r6   r   r@   )	r>   r   lars_path_gramrA   r7   rB   r   r   r    r   r@   r3   r3   r4   test_lars_path_gram_equivalent[   s   
rE   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)r6   rA   )
r#   r$   r   r"   r    pytestraises
ValueErrorr   r   )rA   r3   r3   r4   (test_x_none_gram_none_raises_value_errorf   s   "rK   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   )r6   rA   r   )	r#   r$   r   r"   r    r   r   r9   r   )r7   rA   r   output
output_preexpectedgotr3   r3   r4   test_all_precomputedm   s   rQ   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_lstsqr3   r3   r4   test_lars_lstsqy   s
   r[   c                  C   sB   t jttdd\} } }tjttd }t||d d df  d S )Nr?   rL   r   )r   r   r   r    r#   r   rW   r   )r*   r+   rZ   r3   r3   r4   test_lasso_gives_lstsq_solution   s   r]   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)      @r^         ?)       @r`   rS   )r_   r_   r   )r_   rS   r   r   {Gz?)	alpha_minr\      r_   r      autoFrS   r?   i  )r6   copy_X	copy_Gramrb   r   r   max_iter)r#   arrayrandomRandomStater   r   r   isnananyr$   sumrandzerosr   
zeros_like)r   r    rngfr*   r+   residualrB   r3   r3   r4   test_collinearity   s.   
ru   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   rL   FrD   r\   )r   r   r   r    r   alphas_r*   r+   alpha_coefr3   r3   r4   test_no_path   s   rz   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   r6   F)r   r6   r@   r\   )r   r   r   r    r7   r   rv   r3   r3   r4   test_no_path_precomputed   s   
r{   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 )NrR   r?   ?)r   rA   r6   rb   F)r   r6   rA   rb   r@   r\   )	diabetesdatatargetr#   r$   r"   r   r   r   )	r   r    r7   rA   rw   r*   r+   rx   ry   r3   r3   r4   test_no_path_all_precomputed   s   r   
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)TFre   N   decimal)	r#   r$   r   r"   r   rV   r    r-   r   )r   r7   rY   output_1r   output_2r3   r3   r4   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   r_   r   )r#   ri   r   r   r   r"   )rX   y1r*   	coef_pathr3   r3   r4   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)rd   r   rd   rd   r   r   )r   r   r   )g3#I9r   r   )r   r   r   皙?gUUUUUU?rc   r   ư>tol1  ?)	r   r	   rV   r-   r   normr#   r$   Lasso)r    r   lars
coef_lars_obj_larscoord_descentcoef_cd_obj_cdr3   r3   r4   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 )NrR   r?   rL   F:0yE>fit_interceptr   r   ra   Gz?   rT   rU   r   r   axisr}   r~   r   r   r    r   r9   r"   rU   rV   r   r   r-   r#   linspacer	   rn   r   alphasr*   
lasso_pathlasso_cdcaerrorrU   clf1clf2errr3   r3   r4   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   r|   -C6?r?   )r   rb   Fr   r   r\   ra   r   r   r   )r}   r~   r   r   r    r   rU   rV   r   r   r-   rn   r#   )
alphas_minr   rb   r   r*   r   r   r   r3   r3   r4   *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 )Nrc   rT   rR   r   )
r   r	   rV   r   r    rw   r   r#   alldiff)r?   lasso2r3   r3   r4   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   rd   r   r   g?r?   rL   r   )r   r   r   )r#   rj   rk   randnrp   arangeshufflesignro   r$   r(   squeezer   r   r   r   )rr   nmkr   wr,   suppr    sigmalars_alphasr*   	lars_coeflasso_coef2r3   r3   r4   +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 )Nr_   r`   rc   r   )r'   r   r   r#   r$   )ry   r   rU   r    r3   r4   objective_functionu  s   zHtest_lasso_lars_vs_lasso_cd_ill_conditioned2.<locals>.objective_functionrT   z$Regressors in active set degenerate.rF   r   r   )r   r	   rH   warnsr   rV   r-   r   )r   r   warning_message
lars_coef_lars_objr   cd_coef_cd_objr3   r   r4   ,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 )Nrd   r_   r   Fr   )	r#   r   newaxisr   r   rV   r   isfiniter-   )r   HrY   r3   r3   r4   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   rV   r   r    r'   r-   nonzerorw   )r   r   r3   r3   r4   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 )Nrc   r   Fr   )r#   vstackr    r"   r(   r   r	   r   rV   r   predictrw   active_r-   r+   ranger   )Y	n_targets
estimators	estimatorY_predr   activery   pathr   y_predr3   r3   r4   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
   r}   r~   r   rV   r#   testingassert_array_lessrx   hasattr)	old_alphalars_cvlengthr   r    r3   r3   r4   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   rd   )rh   cvc                 S   s   g | ]}t |qS r3   )str).0r   r3   r3   r4   
<listcomp>  s    z)test_lars_cv_max_iter.<locals>.<listcomp>r   )warningssimplefilterr#   errstater}   r~   r   rj   rk   r   r'   c_r   fit_transformr   r
   rV   )recwarnr   r    rr   xr   recorded_warningsr3   r3   r4   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   rd   r   )r   r   r#   rj   rk   r}   r~   r   r   r(   r   r   rV   r    wherer-   rx   r'   r%   )lars_biclars_aicrr   r   nonzero_bicnonzero_aicr3   r3   r4   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   )splitted_dataX_trainX_testy_trainy_testr3   r3   r4   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.rF   r~   r   r   Tr   positiver?   F)r@   r   r  r   )	rH   rI   rJ   r   r   r}   r   r    min)err_msgr   r*   coefsr3   r3   r4   "test_lars_path_positive_constraint  s   


r  r   rU   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   FrU   r   r  r  r   Tr3   )	r  updategetattrr   rV   r   r    r-   r  )default_parameterestimator_parameter_mapestnameparamsr   r3   r3   r4   )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 )NrR   r?   Tr  Fr   )r   r   r  r   ra   g333333?r   r   )r   rU   r  )r   rU   r   r  r   r   r\   r   r   r3   r3   r4   $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)rU   r      r   )r#   ri   r"   r   r	   rV   r+   r   )r    r   r   rmodel_lasso_lars	skl_betasr3   r3   r4   #test_lasso_lars_vs_R_implementationn  s,   

6r&  rf   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)rf   r   r   r   r   rd   Nrc   r   r#   rj   rk   normalr  rV   array_equalrf   
lasso_larsrr   r   X_copyr    r3   r3   r4   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

    Fr   r   r   r'  Nrc   )rf   r(  r+  r3   r3   r4   #test_lasso_lars_fit_copyX_behaviour  s   
r/  estr   rT   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)rS   rS   rS         rS   )rS   r1  rS   rS   rS   g      )r         @r   r2  r   Fr   gHz>r   )jitterr  rc   r   r   )rtol)	r#   ri   
set_paramsr   rV   meanr-   r   r   )r0  r   r    expected_coef
est_jitterr3   r3   r4   test_lars_with_jitter  s   r9  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 NonerF   r   T)r   r    r6   )rH   rI   rJ   r   r#   ri   r3   r3   r3   r4   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   re   Tr?   )r6   rf   r   )r#   rj   rk   ro   r  r   r   r   )rr   r   r    X_beforer3   r3   r4   test_copy_X_with_auto_gram  s   
r<  zLARS, has_coef_path, argsrh   rd   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   r3   )
r#   rj   rk   ro   astyperV   r-   r=  r+   
intercept_)LARShas_coef_pathargsr=  rr   r   r    modelr3   r3   r4   test_lars_dtype_match  s   rD  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   )r4  atolr3   )r#   rj   rk   ro   rV   r>  float32r   r-   r+   r?  )
r@  rA  rB  r4  rE  rr   X_64y_64model_64model_32r3   r3   r4   test_lars_numeric_consistency%  s   
&rK  	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.
    )rL  r\   r   N)	r   r   r   rV   r   r    r#   argmin
criterion_)rL  rC  best_alpha_selectedr3   r3   r4    test_lassolarsic_alpha_selectionC  s   rP  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      )rB   
n_featuresr  r   zhYou are using LassoLarsIC in the case where the number of samples is smaller than the number of featuresrF   Nr_   )lassolarsic__noise_variance)r#   rj   rk   r   make_regressionr   r   r   rH   rI   rJ   rV   r5  r   )r   rr   r   r    rC  r  r3   r3   r4   test_lassolarsic_noise_varianceR  s   

rU  )F)\r   numpyr#   rH   scipyr   sklearnr   r   sklearn.baser   sklearn.exceptionsr   sklearn.linear_modelr   r   r	   r
   r   r   !sklearn.linear_model._least_angler   sklearn.model_selectionr   sklearn.pipeliner   sklearn.preprocessingr   sklearn.utils._testingr   r   r   r   load_diabetesr}   r~   r   r   r    r$   r"   r7   rA   sizerB   r5   r8   r>   markparametrizerE   rK   rQ   filterwarningsr[   r]   ru   rz   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/  r9  r:  r<  rF  float64rD  rK  rP  rU  r3   r3   r3   r4   <module>   s     	



	
%!

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