a
    ¶Àh¿  ã                   @   sæ   d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZmZmZ d dlmZ d!d
d„Zdd„ Zdd„ Zdd„ Zej de¡dd„ ƒZej de¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd „ Z dS )"é    N)Úoptimize)Úmake_regression)ÚHuberRegressorÚLinearRegressionÚRidgeÚSGDRegressor©Ú_huber_loss_and_gradient)Úassert_almost_equalÚassert_array_almost_equalÚassert_array_equal)ÚCSR_CONTAINERSé2   é   c                 C   sj   t j d¡}t| |ddd\}}td|  ƒ}| d| |¡}d| dd||jd f¡ ||d d …f< ||fS )Nr   gš™™™™™©?)Ú	n_samplesÚ
n_featuresÚrandom_stateÚnoiseçš™™™™™¹?ç       @é   )ÚnpÚrandomÚRandomStater   ÚintÚrandintÚnormalÚshape)r   r   ÚrngÚXÚyZ	num_noiseZrandom_samples© r!   úa/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/linear_model/tests/test_huber.pyÚmake_regression_with_outliers   s    ÿ
(r#   c                  C   sX   t ƒ \} }tƒ }| | |¡ tddd}| | |¡ t|j|jdƒ t|j|jdƒ d S )Ng     @@ç        )ÚepsilonÚalphaé   é   )r#   r   Úfitr   r
   Úcoef_Ú
intercept_)r   r    ÚlrÚhuberr!   r!   r"   Ú%test_huber_equals_lr_for_high_epsilon!   s    
r.   c                  C   s4   t ƒ \} }tdd}| | |¡ |j|jks0J ‚d S )Nr   )Úmax_iter)r#   r   r)   Ún_iter_r/   )r   r    r-   r!   r!   r"   Útest_huber_max_iter,   s    

r1   c            
      C   s®   t j d¡} tƒ \}}|  dd|jd ¡}dd„ }dd„ }tdƒD ]f}|jd d |jd d	 fD ]D}|  |¡}t  |d
 ¡|d
< t	 
|||||dd|¡}	t|	ddƒ qbqBd S )Nr   r'   r   c                 W   s   t | g|¢R Ž d S )Nr   r   ©ÚxÚargsr!   r!   r"   Ú	loss_func9   s    z&test_huber_gradient.<locals>.loss_funcc                 W   s   t | g|¢R Ž d S )Nr   r   r2   r!   r!   r"   Ú	grad_func<   s    z&test_huber_gradient.<locals>.grad_funcé   r(   éÿÿÿÿç{®Gáz„?r   gíµ ÷Æ°>é   )r   r   r   r#   r   r   ÚrangeZrandnÚabsr   Z
check_gradr
   )
r   r   r    Úsample_weightr5   r6   Ú_r   ÚwZ	grad_samer!   r!   r"   Útest_huber_gradient3   s    
 
ÿr@   Úcsr_containerc              	   C   s’  t ƒ \}}tƒ }| ||¡ |j}|j}tt t |j¡¡t t |j¡¡ƒ}|j||t 	|j
d ¡d t|j| || ƒ t|j| || ƒ t ddd\}}t |t |d |d |d f¡f¡}t ||d g|d g|d gf¡}| ||¡ |j}|j}t 	|j
d ¡}	d|	d< d|	d< |j|||	d t|j| || ƒ t|j| || ƒ | |ƒ}
tƒ }|j|
||	d t|j| || ƒ d S )	Nr   )r=   r7   r   ©r   r   r   r'   r(   )r#   r   r)   r*   r+   Úmaxr   Úmeanr<   Zonesr   r   ZvstackZconcatenate)rA   r   r    r-   Z
huber_coefZhuber_interceptÚscaleZX_newZy_newr=   ÚX_csrÚhuber_sparser!   r!   r"   Útest_huber_sample_weightsK   s2    
&&$rH   c                 C   s^   t ƒ \}}tdd}| ||¡ | |ƒ}tdd}| ||¡ t|j|jƒ t|j|jƒ d S )Nr   ©r&   )r#   r   r)   r   r*   r   Ú	outliers_)rA   r   r    r-   rF   rG   r!   r!   r"   Útest_huber_sparset   s    


rK   c                  C   s~   t ƒ \} }tddd}| | |¡ |j}t |¡r6J ‚| | d| ¡ |j}t||ƒ | d|  d| ¡ |j}t||ƒ d S )NFr$   )Úfit_interceptr&   r   )r#   r   r)   rJ   r   Úallr   )r   r    r-   Zn_outliers_mask_1Zn_outliers_mask_2Zn_outliers_mask_3r!   r!   r"   Útest_huber_scaling_invariant   s    

rN   c               
   C   s   t ddd\} }tdddd}| | |¡ | |j }||j }| ||¡ t|jdd	ƒ tdd
dddddd d}| ||¡ t|j|jdƒ d S )Né
   r(   rB   Fr$   gš™™™™™õ?)rL   r&   r%   ç      ð?r'   r-   Tr   é'  )r&   ZlossÚshuffler   r/   rL   r%   Útolr   )r#   r   r)   Úscale_r
   r   r   r*   )r   r    r-   ZX_scaleZy_scaleZsgdregr!   r!   r"   Útest_huber_and_sgd_same_results’   s&    

ø
rU   c                  C   s\   t ƒ \} }tddddd}| | |¡ |j ¡ }| | |¡ t|j|dƒ |jdksXJ ‚d S )NrP   rQ   Tr   )r&   r/   Z
warm_startrS   r   r   )r#   r   r)   r*   Úcopyr   r0   )r   r    Z
huber_warmZhuber_warm_coefr!   r!   r"   Útest_huber_warm_start®   s    

rW   c            
      C   sØ   t ƒ \} }tdd}| | |¡ t | |j¡|j | }t |¡|j|j	 k }| 
| | || ¡}| 
| |  ||  ¡}tdd}| | |¡ | 
| | || ¡}| 
| |  ||  ¡}	||ksÈJ ‚|	|ksÔJ ‚d S )Nr9   rI   )r#   r   r)   r   Údotr*   r+   r<   r%   rT   Zscorer   )
r   r    r-   Zlinear_lossÚmaskZhuber_scoreZhuber_outlier_scoreZridgeZridge_scoreZridge_outlier_scorer!   r!   r"   Útest_huber_better_r2_score½   s    


rZ   c                  C   s.   t ddddd\} }| dk}tƒ  ||¡ d S )NéÈ   r(   g      @r   )r   r   r   r   )r   r   r)   )r   r    ZX_boolr!   r!   r"   Útest_huber_boolÔ   s    r\   )r   r   )!Únumpyr   ZpytestZscipyr   Zsklearn.datasetsr   Zsklearn.linear_modelr   r   r   r   Zsklearn.linear_model._huberr	   Zsklearn.utils._testingr
   r   r   Zsklearn.utils.fixesr   r#   r.   r1   r@   ÚmarkZparametrizerH   rK   rN   rU   rW   rZ   r\   r!   r!   r!   r"   Ú<module>   s(   

(
