U
    ½mœdž ã                   @   sè  d dl Z d dlZd dlZd dl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 d dl
mZ d dl
mZ d dlmZmZmZ d d	l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lmZ d dl m!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+ dd„ Z,G dd„ dej-ƒZ.G dd„ dej/ƒZ0G dd„ dej1ƒZ2dd„ Z-dd„ Z/d d!„ Z1d"d#„ Z3d$d%„ Z4d&d'„ Z5e 6d(d)gd)d)gd)d(gd*d*gd*d+gd+d*gg¡Z7d*d*d*d+d+d+gZ8e 6d)d)gd+d+gd,d+gg¡Z9d*d+d+gZ:e 6d)d*gd-d.gd/d0gd*d*gd1d.gd0d0gd)d)gd d2gd*d)gg	¡Z;d3gd, d4gd,  d5gd,  Z<e 6d/d.gd*d+gd d(gg¡Z=d3d4d5gZ>e 6d*d*d d d d gd*d*d d d d gd d d*d d d gd d d*d d d gd d d d d*d*gd d d d d*d*gd d d d*d d gd d d d*d d gg¡Z?e 6d*d*d*d*d+d+d+d+g¡Z@e 6d*d6d7d d d gd*d8d9d d d gd*d:d;d d d gd*d<d=d d d gd d d d>d<d*gd d d d?d8d*gd d d d<d@d*gd d d dAd*d*gg¡ZAe 6d*d*d*d*d+d+d+d+g¡ZBe C¡ ZDe 6d(d)gd)d)gd)d(gd*d*gd*d+gd+d*gg¡ZEd*d*d*d+d+d+gZFd d*d*gZG�ddCdD„ZHdEdF„ ZIejJ KdGe-e3e/e4g¡ejJ KdHdIdJdKdLg¡dMdN„ ƒƒZLejJ KdGe-e3e/e4g¡dOdP„ ƒZMejJ KdGe-e3e/e4g¡dQdR„ ƒZNejJ KdGe-e3e/e4e1e5g¡dSdT„ ƒZOejJ KdGe-e3e/e4e1e5g¡dUdV„ ƒZPejJ KdGe-e3e/e4g¡dWdX„ ƒZQejJ KdGe-e3e/e4g¡dYdZ„ ƒZRejJ KdGe-e3e/e4g¡d[d\„ ƒZSejJ KdGe-e3e/e4g¡d]d^„ ƒZTejJ KdGe-e3e/e4g¡d_d`„ ƒZUejJ KdGe-e3e/e4g¡dadb„ ƒZVejJ KdGe-e3g¡dcdd„ ƒZWejJ KdGe-e3e1e5g¡dedf„ ƒZXejJ Kdge-dhe Ydi¡ife3dhe Ydi¡ife1dje Ydi¡ife5dje Ydi¡ifg¡dkdl„ ƒZZejJ KdGe-e3e/e4g¡dmdn„ ƒZ[ejJ Kdge-dhd ife3dhd ife1djd ife5djd ifg¡dodp„ ƒZ\ejJ KdGe-e3g¡dqdr„ ƒZ]ejJ KdGe-e3g¡dsdt„ ƒZ^ejJ KdGe-e3g¡dudv„ ƒZ_ejJ KdGe-e3g¡dwdx„ ƒZ`ejJ KdGe-e3g¡dydz„ ƒZaejJ KdGe-e3g¡d{d|„ ƒZbejJ KdGe-e3g¡d}d~„ ƒZcejJ KdGe-e3g¡dd€„ ƒZdejJ KdGe-e3g¡d�d‚„ ƒZeejJ KdGe-e3g¡dƒd„„ ƒZfejJ KdGe-e3g¡d…d†„ ƒZgejJ KdGe-e3g¡d‡dˆ„ ƒZhejJ KdGe-e3g¡d‰dŠ„ ƒZiejJ KdGe-e3g¡d‹dŒ„ ƒZjejJ KdGe-e3g¡d�dŽ„ ƒZkejJ KdGe-e3g¡d�d�„ ƒZlejJ KdGe-e3g¡d‘d’„ ƒZmejJ KdGe-e3g¡d“d”„ ƒZnejJ KdGe-e3e1e5g¡d•d–„ ƒZoejJ KdGe-e3g¡d—d˜„ ƒZpejJ KdGe-e3g¡d™dš„ ƒZqejJ KdGe-e3g¡d›dœ„ ƒZrejJ KdGe-e3g¡d�dž„ ƒZsejJ KdGe-e3g¡dŸd „ ƒZtejJ KdGe-e3g¡ejJ KdHdIdJdKdLg¡d¡d¢„ ƒƒZuejJ KdGe-e3g¡d£d¤„ ƒZvejJ KdGe-e3g¡d¥d¦„ ƒZwejJ KdGe-e3g¡d§d¨„ ƒZxejJ KdGe/e4g¡d©dª„ ƒZyejJ KdGe/e4g¡d«d¬„ ƒZzejJ KdGe/e4g¡d­d®„ ƒZ{ejJ KdGe/e4g¡d¯d°„ ƒZ|ejJ KdGe/e4g¡d±d²„ ƒZ}ejJ KdGe/e4g¡d³d´„ ƒZ~ejJ KdGe/e4g¡dµd¶„ ƒZejJ KdGe/e4g¡d·d¸„ ƒZ€eejJ KdGe/e4g¡d¹dº„ ƒƒZ�ejJ KdGe/e4g¡ejJ KdHdIdJdKdLg¡d»d¼„ ƒƒZ‚ejJ KdGe/e4g¡d½d¾„ ƒZƒ�dd¿dÀ„Z„ejJ KdGe1e5g¡dÁdÂ„ ƒZ…ejJ KdGe1e5g¡ejJ KdHdIdJdKdLg¡dÃdÄ„ ƒƒZ†ejJ KdGe1e5g¡dÅdÆ„ ƒZ‡ejJ KdGe1e5g¡dÇdÈ„ ƒZˆejJ KdGe1e5g¡ejJ KdHdIdJdKdLg¡dÉdÊ„ ƒƒZ‰ejJ KdGe1e5g¡dËdÌ„ ƒZŠejJ KdGe1e5g¡dÍdÎ„ ƒZ‹ejJ KdGe1e5g¡dÏdÐ„ ƒZŒejJ KdGe1e5g¡dÑdÒ„ ƒZ�dÓdÔ„ ZŽdÕdÖ„ Z�d×dØ„ Z�dÙdÚ„ Z‘dÛdÜ„ Z’ejJ KdÝ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šdñdò„ Z›dódô„ Zœdõdö„ Z�d÷dø„ Zždùdú„ ZŸejJ Kdûdüdýdþg¡dÿ�d „ ƒZ ejJ K�d�d�dej-fg¡�d�d„ ƒZ¡ejJ K�dej-ej/g¡�d�d„ ƒZ¢�d	�d
„ Z£�d�d„ Z¤ejJ K�de-e/g¡�d�d„ ƒZ¥dS (  é    N)ÚMock)Úassert_allclose)Úassert_array_equal)Úassert_almost_equal)Úassert_array_almost_equal)Úignore_warnings)Úlinear_modelÚdatasetsÚmetrics)ÚcloneÚis_classifier)ÚOneClassSVM)ÚLabelEncoderÚscaleÚMinMaxScaler)ÚStandardScaler)ÚNystroem)Úmake_pipeline)ÚConvergenceWarning)ÚStratifiedShuffleSplitÚShuffleSplit)Ú	_sgd_fast)Ú_stochastic_gradient)ÚRandomizedSearchCVc                 C   s4   d| krd| d< d| kr d | d< d| kr0d| d< d S )NÚrandom_stateé*   ÚtolÚmax_iteré   © ©Úkwargsr   r   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/linear_model/tests/test_sgd.pyÚ_update_kwargs   s    r#   c                       s@   e Zd Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	Ú_SparseSGDClassifierc                    s    t  |¡}tƒ j||f|ž|ŽS ©N)ÚspÚ
csr_matrixÚsuperÚfit©ÚselfÚXÚyÚargsÚkw©Ú	__class__r   r"   r)   (   s    
z_SparseSGDClassifier.fitc                    s    t  |¡}tƒ j||f|ž|ŽS r%   )r&   r'   r(   Úpartial_fitr*   r0   r   r"   r2   ,   s    
z _SparseSGDClassifier.partial_fitc                    s   t  |¡}tƒ  |¡S r%   )r&   r'   r(   Údecision_function©r+   r,   r0   r   r"   r3   0   s    
z&_SparseSGDClassifier.decision_functionc                    s   t  |¡}tƒ  |¡S r%   )r&   r'   r(   Úpredict_probar4   r0   r   r"   r5   4   s    
z"_SparseSGDClassifier.predict_proba)Ú__name__Ú
__module__Ú__qualname__r)   r2   r3   r5   Ú__classcell__r   r   r0   r"   r$   '   s   r$   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_SparseSGDRegressorc                 O   s"   t  |¡}tjj| ||f|ž|ŽS r%   )r&   r'   r   ÚSGDRegressorr)   r*   r   r   r"   r)   :   s    
z_SparseSGDRegressor.fitc                 O   s"   t  |¡}tjj| ||f|ž|ŽS r%   )r&   r'   r   r;   r2   r*   r   r   r"   r2   >   s    
z_SparseSGDRegressor.partial_fitc                 O   s    t  |¡}tjj| |f|ž|ŽS r%   )r&   r'   r   r;   r3   ©r+   r,   r.   r/   r   r   r"   r3   B   s    
z%_SparseSGDRegressor.decision_functionN©r6   r7   r8   r)   r2   r3   r   r   r   r"   r:   9   s   r:   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_SparseSGDOneClassSVMc                 O   s    t  |¡}tjj| |f|ž|ŽS r%   )r&   r'   r   ÚSGDOneClassSVMr)   r<   r   r   r"   r)   I   s    
z_SparseSGDOneClassSVM.fitc                 O   s    t  |¡}tjj| |f|ž|ŽS r%   )r&   r'   r   r?   r2   r<   r   r   r"   r2   M   s    
z!_SparseSGDOneClassSVM.partial_fitc                 O   s    t  |¡}tjj| |f|ž|ŽS r%   )r&   r'   r   r?   r3   r<   r   r   r"   r3   Q   s    
z'_SparseSGDOneClassSVM.decision_functionNr=   r   r   r   r"   r>   H   s   r>   c                  K   s   t | ƒ tjf | ŽS r%   )r#   r   ÚSGDClassifierr    r   r   r"   r@   V   s    r@   c                  K   s   t | ƒ tjf | ŽS r%   )r#   r   r;   r    r   r   r"   r;   [   s    r;   c                  K   s   t | ƒ tjf | ŽS r%   )r#   r   r?   r    r   r   r"   r?   `   s    r?   c                  K   s   t | ƒ tf | ŽS r%   )r#   r$   r    r   r   r"   ÚSparseSGDClassifiere   s    rA   c                  K   s   t | ƒ tf | ŽS r%   )r#   r:   r    r   r   r"   ÚSparseSGDRegressorj   s    rB   c                  K   s   t | ƒ tf | ŽS r%   )r#   r>   r    r   r   r"   ÚSparseSGDOneClassSVMo   s    rC   éþÿÿÿéÿÿÿÿé   é   é   g      è¿ç      à?g      ø¿ç      ø?g      è?ç      à¿ÚoneÚtwoÚthreeçÍÌÌÌÌÌì?çš™™™™™é?gáz®Gáê?g\�Âõ(\ï?ç¸…ëQ¸î?g)\�Âõ(ì?g…ëQ¸í?ç®Gáz®ï?g{®Gázì?gHáz®Gé?gffffffî?gÃõ(\�Âí?ç        c                 C   sð   |d krt  |jd ¡}n|}t  |jd ¡}|}	d}
d}| ttfkrJd}t|ƒD ]”\}}t  ||¡}||	7 }|||  }|d||  9 }||| |  7 }|	||  | 7 }	||9 }||7 }||d  }|
|9 }
|
|	7 }
|
|d  }
qR||
fS )NrF   rS   ç      ð?ç{®Gáz„?)ÚnpÚzerosÚshaperA   rB   Ú	enumerateÚdot)Úklassr,   r-   ÚetaÚalphaÚweight_initÚintercept_initÚweightsÚaverage_weightsÚ	interceptÚaverage_interceptÚdecayÚiÚentryÚpÚgradientr   r   r"   Úasgd¹   s.    ri   c                 C   sÀ   | ddd|d�}|  ||¡ | ddd|d�}|j |||j ¡ |j ¡ d� | dddd|d�}|  ||¡ |j|jksxt‚t|j|jƒ |jdd� |  ||¡ |j|jks®t‚t|j|jƒ d S )	NrU   F)r]   Úeta0ÚshuffleÚlearning_rateçü©ñÒMbP?©Ú	coef_initr_   T)r]   rj   rk   Ú
warm_startrl   ©r]   )r)   Úcoef_ÚcopyÚ
intercept_Út_ÚAssertionErrorr   Ú
set_params)r[   r,   ÚYÚlrÚclfÚclf2Úclf3r   r   r"   Ú_test_warm_startÛ   s$        ÿr}   r[   ry   ÚconstantÚoptimalZ
invscalingÚadaptivec                 C   s   t | tt|ƒ d S r%   )r}   r,   rx   ©r[   ry   r   r   r"   Útest_warm_startó   s    r‚   c              	   C   sd   | ddd�}|  tt¡ t t¡d d …tjf }tj||f }t t	¡� |  t|¡ W 5 Q R X d S )NrU   F©r]   rk   )
r)   r,   rx   rV   ÚarrayZnewaxisZc_ÚpytestÚraisesÚ
ValueError)r[   rz   ÚY_r   r   r"   Útest_input_formatû   s    r‰   c                 C   sV   | ddd�}t |ƒ}|jdd� | tt¡ | ddd�}| tt¡ t|j|jƒ d S )NrU   Úl1)r]   ÚpenaltyÚl2)r‹   )r   rw   r)   r,   rx   r   rr   ©r[   rz   r{   r   r   r"   Ú
test_clone	  s    rŽ   c                 C   sž   | ddd�}|  tt¡ t|dƒs&t‚t|dƒs4t‚t|dƒsBt‚t|dƒsPt‚| ƒ }|  tt¡ t|dƒrpt‚t|dƒr~t‚t|dƒrŒt‚t|dƒršt‚d S )NTrU   )Úaveragerj   Z_average_coefZ_average_interceptZ_standard_interceptZ_standard_coef)r)   r,   rx   Úhasattrrv   ©r[   rz   r   r   r"   Útest_plain_has_no_average_attr  s    r’   c                 C   sÀ   | dd�}| ƒ }t dƒD ]R}t|ƒrR|jttt t¡d� |jttt t¡d� q| tt¡ | tt¡ qt|j|jdd� | t	t
ttfkr¢t|j|jdd� n| ttfkr¼t|j|jƒ d S )NiX  ©r�   éd   ©Úclassesé   ©Údecimal)Úranger   r2   r,   rx   rV   Úuniquer   rr   r@   rA   r;   rB   r   rt   r?   rC   r   Úoffset_)r[   Úclf1r{   Ú_r   r   r"   Ú%test_late_onset_averaging_not_reached6  s    
rŸ   c              	   C   s¼   d}d}t  t¡}d||dk< d||dk< | ddd	||dd
d�}| ddd	||dd
d�}| t|¡ | t|¡ t| t||||j ¡ |jd�\}}t	|j ¡ | ¡ dd� t
|j|dd� d S )Nrm   ç-Cëâ6?ç      ð¿rF   rT   rG   é   r~   Úsquared_errorF)r�   rl   Úlossrj   r]   r   rk   r   )r^   r_   r—   r˜   )rV   r„   rx   r)   r,   ri   rr   Úravelrt   r   r   )r[   rj   r]   ZY_encoder�   r{   ra   rc   r   r   r"   Ú!test_late_onset_averaging_reachedS  sH    
ù	ù
ù

r¦   c                 C   sV   t jt jdk }t jt jdk }dD ],}d}| |d|d� ||¡}|j|k s$t‚q$d S )Nr   ©TFéè  rm   )Úearly_stoppingr   r   )ÚirisÚdataÚtargetr)   Ún_iter_rv   )r[   r,   rx   r©   r   rz   r   r   r"   Útest_early_stopping�  s     ÿr®   c                 C   sT   | ddddd�}|  tjtj¡ | ddddd�}|  tjtj¡ |j|jksPt‚d S )Nr€   rU   rm   r”   )rl   rj   r   r   r~   )r)   rª   r«   r¬   r­   rv   )r[   r�   r{   r   r   r"   Ú"test_adaptive_longer_than_constant�  s
    r¯   c              
   C   sê   t jt j }}d}d}d}d}| dtj |¡|ddd ||d�}| ||¡ |j|ksXt‚| dtj |¡ddd ||d	�}t	|ƒrŒt
||d
�}	nt||d
�}	t|	 ||¡ƒ\}
}t |
¡}
| ||
 ||
 ¡ |j|ksØt‚t|j|jƒ d S )Nçš™™™™™Ù?r   Fé
   Tr~   rU   )r©   r   Úvalidation_fractionrl   rj   r   r   rk   )r©   r   rl   rj   r   r   rk   )Z	test_sizer   )rª   r«   r¬   rV   ÚrandomÚRandomStater)   r­   rv   r   r   r   ÚnextÚsplitÚsortr   rr   )r[   r,   rx   r²   Úseedrk   r   r�   r{   ZcvZ	idx_trainZidx_valr   r   r"   Ú)test_validation_set_not_used_for_trainingš  sD    
ø

ù

r¹   c                    sB   t jt j ‰ ‰dD ]*‰‡ ‡‡‡fdd„dD ƒ}t|t|ƒƒ qd S )Nr§   c                    s&   g | ]}ˆˆ|d dd�  ˆ ˆ¡j‘qS )r    r¨   )r©   Ún_iter_no_changer   r   )r)   r­   )Ú.0rº   ©r,   rx   r©   r[   r   r"   Ú
<listcomp>Í  s   	øü úz)test_n_iter_no_change.<locals>.<listcomp>)rG   rH   r±   )rª   r«   r¬   r   Úsorted)r[   Zn_iter_listr   r¼   r"   Útest_n_iter_no_changeÆ  s    	÷r¿   c              	   C   s2   | ddd�}t  t¡� | tt¡ W 5 Q R X d S )NTrR   )r©   r²   )r…   r†   r‡   r)   ÚX3ÚY3r‘   r   r   r"   Ú)test_not_enough_sample_for_early_stoppingÛ  s    rÂ   c              	   C   s>   dD ]4}| ddd|ddd�}|  tt¡ t| t¡tƒ qd S )N)ÚhingeÚsquared_hingeÚlog_lossÚmodified_huberrŒ   rU   Tr±   )r‹   r]   Úfit_interceptr¤   r   rk   )r)   r,   rx   r   ÚpredictÚTÚtrue_result)r[   r¤   rz   r   r   r"   Útest_sgd_clfé  s    úrË   c              	   C   s6   t jtdd�� | ƒ jttt d¡d� W 5 Q R X dS )z1Check that the shape of `coef_init` is validated.z)Provided coef_init does not match dataset©Úmatch©rH   ©ro   N)r…   r†   r‡   r)   r,   rx   rV   rW   ©r[   r   r   r"   Útest_provide_coefû  s    rÑ   zklass, fit_paramsr_   rÎ   Úoffset_initc              	   C   s4   | ƒ }t jtdd�� |jttf|Ž W 5 Q R X dS )z:Check that `intercept_init` or `offset_init` is validated.zdoes not match datasetrÌ   N©r…   r†   r‡   r)   r,   rx   )r[   Ú
fit_paramsZsgd_estimatorr   r   r"   Útest_set_intercept_offset  s    rÕ   c              	   C   s4   d}t jt|d�� | dd� tt¡ W 5 Q R X dS )zSCheck that we raise an error for `early_stopping` used with
    `partial_fit`.
    z/early_stopping should be False with partial_fitrÌ   T)r©   N)r…   r†   r‡   r2   r,   rx   )r[   Úerr_msgr   r   r"   Ú(test_sgd_early_stopping_with_partial_fit  s    r×   c                 C   s   | ƒ j ttf|Ž dS )zdCheck that we can pass a scaler with binary classification to
    `intercept_init` or `offset_init`.N)r)   ÚX5ÚY5)r[   rÔ   r   r   r"   Ú test_set_intercept_offset_binary   s    rÚ   c              
   C   s¶   d}d}d}d}t j d¡}|j||fd�}|j|d�}| dd||d	d
d	dd�}t  ||¡}	t  |	¡}	| ||	¡ t| ||	||ƒ\}
}|
 d
d¡}
t	|j
|
dd� t|j|dd� d S )Nçš™™™™™¹?ç       @é   r±   r   ©Úsizer£   r~   TrF   F©r¤   rl   rj   r]   rÇ   r   r�   rk   rE   é   r˜   )rV   r³   r´   ÚnormalrZ   Úsignr)   ri   Úreshaper   rr   r   rt   )r[   r\   r]   Ú	n_samplesÚ
n_featuresÚrngr,   Úwrz   r-   ra   rc   r   r   r"   Ú&test_average_binary_computed_correctly/  s0    ø
ré   c                 C   sH   | ƒ   tt¡}| ƒ j tt|jd� | ƒ   tt¡}| ƒ j tt|jd� d S )N©r_   )r)   rØ   rÙ   rt   r,   rx   r‘   r   r   r"   Útest_set_intercept_to_interceptQ  s    rë   c              	   C   s8   | ddd�}t  t¡� | tt d¡¡ W 5 Q R X d S )NrU   rÝ   ©r]   r   é	   )r…   r†   r‡   r)   ÚX2rV   Úonesr‘   r   r   r"   Útest_sgd_at_least_two_labels[  s    rð   c              	   C   s>   d}t jt|d��" | dd�jttt t¡d� W 5 Q R X d S )Na`  class_weight 'balanced' is not supported for partial_fit\. In order to use 'balanced' weights, use compute_class_weight\('balanced', classes=classes, y=y\). In place of y you can use a large enough sample of the full training set target to properly estimate the class frequency distributions\. Pass the resulting weights as the class_weight parameter\.rÌ   Úbalanced)Úclass_weightr•   )r…   r†   r‡   r2   r,   rx   rV   r›   )r[   Úregexr   r   r"   Ú&test_partial_fit_weight_class_balancedc  s    ÿ
rô   c                 C   sf   | ddd�  tt¡}|jjdks$t‚|jjdks4t‚| ddgg¡jdksNt‚| t	¡}t
|tƒ d S )NrU   rÝ   rì   ©rH   rG   rÎ   r   ©rF   rH   ©r)   rî   ÚY2rr   rX   rv   rt   r3   rÈ   ÚT2r   Útrue_result2©r[   rz   Úpredr   r   r"   Útest_sgd_multiclasst  s    
rý   c              
   C   s®   d}d}| dd||ddddd�}t  t¡}| t|¡ t  |¡}t|ƒD ]`\}}t  |jd	 ¡}d
|||k< t	| t|||ƒ\}	}
t
|	|j| dd� t|
|j| dd� qHd S )Nrm   rU   r£   r~   TrF   Frà   r   rE   r—   r˜   )rV   r„   rø   r)   rî   r›   rY   rï   rX   ri   r   rr   r   rt   )r[   r\   r]   rz   Znp_Y2r–   re   ÚclZy_iÚaverage_coefrc   r   r   r"   Útest_sgd_multiclass_average  s*    ø

r   c                 C   sb   | ddd�}|j ttt d¡t d¡d� |jjdks:t‚|jjsJtdƒ‚| 	t
¡}t|tƒ d S )NrU   rÝ   rì   rõ   rH   rn   rÎ   )r)   rî   rø   rV   rW   rr   rX   rv   rt   rÈ   rù   r   rú   rû   r   r   r"   Ú"test_sgd_multiclass_with_init_coef›  s    
r  c                 C   sh   | dddd�  tt¡}|jjdks&t‚|jjdks6t‚| ddgg¡jdksPt‚| t	¡}t
|tƒ d S )	NrU   rÝ   rG   )r]   r   Ún_jobsrõ   rÎ   r   rö   r÷   rû   r   r   r"   Útest_sgd_multiclass_njobs¦  s    
r  c              	   C   s˜   | ƒ }t  t¡� |jttt d¡d� W 5 Q R X | ƒ jttt d¡d�}| ƒ }t  t¡� |jttt d¡d� W 5 Q R X | ƒ jttt d¡d�}d S )N)rG   rG   rÏ   rõ   ©rF   rê   rÎ   )r…   r†   r‡   r)   rî   rø   rV   rW   r‘   r   r   r"   Útest_set_coef_multiclass±  s      r  c              
   C   s¨   t jjD ]š}t|d�}|dkr<t|dƒs,t‚t|dƒs¢t‚qd |¡}t|dƒrTt‚t|dƒrbt‚tjt|d�� |j	 W 5 Q R X tjt|d�� |j
 W 5 Q R X qd S )N)r¤   )rÅ   ÚlogrÆ   r5   Úpredict_log_probaz5probability estimates are not available for loss={!r}rÌ   )r   r@   Úloss_functionsr�   rv   Úformatr…   r†   ÚAttributeErrorr5   r  )r[   r¤   rz   Úmessager   r   r"   Ú$test_sgd_predict_proba_method_accessÆ  s    
ÿr  c                 C   sÞ  t dddd d� tt¡}t|dƒr&t‚t|dƒr4t‚dD ]¦}| |ddd�}| tt¡ | d	d
gg¡}|d dksvt‚| ddgg¡}|d dk s–t‚| d	d
gg¡}|d |d ksºt‚| ddgg¡}|d |d k s8t‚q8| dddd� tt	¡}| 
ddgddgg¡}| ddgddgg¡}ttj|dd�tj|dd�ƒ t|d  ¡ dƒ t |d dk¡�sjt‚| ddgg¡}| 
ddgg¡}tt |d ¡t |d ¡ƒ | d	d
gg¡}| d	d
gg¡}tt |¡|ƒ | ddgg¡}| ddgg¡}tt |¡|ƒ | dddd�}| tt	¡ | 
d	d
gg¡}| d	d
gg¡}| tk�rptj|dd�tj|dd�k�s’t‚n"tj|dd�tj|dd�k�s’t‚tjdd�}| 
|g¡}t |dk ¡�rÚ| |g¡}t|d dgd	 ƒ d S )NrÃ   rU   r±   )r¤   r]   r   r   r5   r  )rÅ   rÆ   )r¤   r]   r   rH   rG   ©r   rF   rI   rE   )r   r   rÅ   rÛ   çš™™™™™¹¿ç333333Ó?çš™™™™™É?rF   )Zaxisr   rÆ   gUUUUUUÕ?)r@   r)   r,   rx   r�   rv   r5   r  rî   rø   r3   r   rV   Zargmaxr   ÚsumÚallZargsortr   r  rA   ZargminÚmean)r[   rz   r¤   rg   ÚdZlpÚxr   r   r"   Útest_sgd_probaß  sR    
$"r  c                 C   sö   t tƒ}tj d¡}t |¡}| |¡ t|d d …f }t| }| ddddd dd�}| ||¡ t	|j
ddd	…f t d
¡ƒ | |¡}t	||ƒ | ¡  t |j
¡sªt‚| |¡}t	||ƒ t t |¡¡}t |j
¡sÞt‚| |¡}t	||ƒ d S )Né   rŠ   r  FéÐ  )r‹   r]   rÇ   r   r   rk   r   rF   rE   )é   )ÚlenÚX4rV   r³   r´   Úarangerk   ÚY4r)   r   rr   rW   rÈ   Zsparsifyr&   Úissparserv   ÚpickleÚloadsÚdumps)r[   Únrç   Úidxr,   rx   rz   rü   r   r   r"   Útest_sgd_l1$  s4    

ú




r$  c                 C   s²   t  ddgddgddgddgddgg¡}dddddg}| dd	d
d d�}| ||¡ t| ddgg¡t  dg¡ƒ | dd	d
ddid�}| ||¡ t| ddgg¡t  dg¡ƒ d S )Nr¡   r   çš™™™™™é¿rT   rS   rF   rE   rÛ   r¨   F)r]   r   rÇ   rò   r  rm   ©rV   r„   r)   r   rÈ   ©r[   r,   r-   rz   r   r   r"   Útest_class_weightsI  s    (r(  c                 C   s�   ddgddgddgddgg}ddddg}| ddd d�}|  ||¡ ddgddgg}ddg}| dddddœd�}|  ||¡ t|j|jdd	� d S )
NrF   r   rÛ   r¨   ©r]   r   rò   rI   r  rG   r˜   )r)   r   rr   )r[   r,   r-   rz   Zclf_weightedr   r   r"   Útest_equal_class_weight\  s    r*  c              	   C   s8   | ddddid�}t  t¡� | tt¡ W 5 Q R X d S )NrÛ   r¨   r   rI   r)  rÓ   r‘   r   r   r"   Útest_wrong_class_weight_labelm  s    r+  c                 C   s¬   dddœ}t j d¡}| tjd ¡}t  |¡}|tdk  |d 9  < |tdk  |d 9  < | dd|d	�}| ddd
�}|jtt|d� |jtt|d� t	|j
|j
ƒ d S )Ng333333ã?r  )rF   rG   r   rF   rG   rÛ   rÝ   r)  rì   ©Úsample_weight)rV   r³   r´   Zrandom_sampler  rX   rs   r)   r  r   rr   )r[   Zclass_weightsrç   Zsample_weightsZmultiplied_togetherr�   r{   r   r   r"   Útest_weights_multipliedu  s    

r.  c                 C   s   t jt j }}t|ƒ}t |jd ¡}tj d¡}| 	|¡ || }|| }| ddd dd� 
||¡}tj|| |¡dd�}t|d	d
d� | ddddd� 
||¡}tj|| |¡dd�}t|d	d
d� t|j|jdƒ ||dkd d …f }||dk }	t |g|gd  ¡}
t |g|	gd  ¡}| dd dd�}| 
|
|¡ | |¡}tj||dd�d	k �s^t‚| dddd�}| 
|
|¡ | |¡}tj||dd�d	k�sœt‚d S )Nr   é   r    r¨   F)r]   r   rò   rk   Zweightedr“   rQ   rF   r˜   rñ   r±   )r   rò   rk   )rª   r«   r¬   r   rV   r  rX   r³   r´   rk   r)   r
   Zf1_scorerÈ   r   r   rr   ZvstackÚconcatenaterv   )r[   r,   r-   r#  rç   rz   Úf1Zclf_balancedZX_0Zy_0ZX_imbalancedZy_imbalancedÚy_predr   r   r"   Útest_balanced_weightˆ  sD    
   ÿ þ

r3  c                 C   s°   t  ddgddgddgddgddgg¡}dddddg}| dd	d
d�}| ||¡ t| ddgg¡t  dg¡ƒ |j||dgd dgd  d� t| ddgg¡t  dg¡ƒ d S )Nr¡   r   r%  rT   rS   rF   rE   rÛ   r¨   F©r]   r   rÇ   r  rm   rH   rG   r,  r&  r'  r   r   r"   Útest_sample_weights·  s    ( r5  c              	   C   sf   | t tfkr| dddd�}n| ttfkr6| dddd�}t t¡� |jtt	t
 d¡d� W 5 Q R X d S )NrÛ   r¨   Fr4  )Únur   rÇ   r¢   r,  )r@   rA   r?   rC   r…   r†   r‡   r)   r,   rx   rV   r  r‘   r   r   r"   Útest_wrong_sample_weightsÉ  s    r7  c              	   C   s0   | dd�}t  t¡� | tt¡ W 5 Q R X d S )NrU   rq   )r…   r†   r‡   r2   rÀ   rÁ   r‘   r   r   r"   Útest_partial_fit_exception×  s    
r8  c                 C   sÞ   t jd d }| dd�}t t¡}|jt d |… td |… |d� |jjdt jd fks\t‚|jjdkslt‚| 	ddgg¡jdks†t‚t
|jjƒ}| t |d … t|d … ¡ t
|jjƒ}|sÆt|ƒ‚| t¡}t|tƒ d S )Nr   rH   rU   rq   r•   rF   r  )r,   rX   rV   r›   rx   r2   rr   rv   rt   r3   Úidr«   rÈ   rÉ   r   rÊ   )r[   Úthirdrz   r–   Úid1Úid2r2  r   r   r"   Útest_partial_fit_binaryß  s    

 
r=  c                 C   sÊ   t jd d }| dd�}t t¡}|jt d |… td |… |d� |jjdt jd fks\t‚|jjdkslt‚| 	ddgg¡jdks†t‚t
|jjƒ}| t |d … t|d … ¡ t
|jjƒ}|sÆt|ƒ‚d S )	Nr   rH   rU   rq   r•   rF   rÎ   rö   )rî   rX   rV   r›   rø   r2   rr   rv   rt   r3   r9  r«   )r[   r:  rz   r–   r;  r<  r   r   r"   Útest_partial_fit_multiclassô  s    

 r>  c                 C   s¾   t jd d }| dt jd d�}t t¡}|jt d |… td |… |d� |jjdt jd fksdt‚|jjdkstt‚| t |d … t|d … ¡ |jjdt jd fksªt‚|jjdksºt‚d S )Nr   rH   rU   )r]   r�   r•   rF   rÎ   )	rî   rX   rV   r›   rø   r2   rr   rv   rt   )r[   r:  rz   r–   r   r   r"   Ú#test_partial_fit_multiclass_average  s    
 r?  c                 C   s"   | ƒ }|  tt¡ | tt¡ d S r%   )r)   rî   rø   r2   r‘   r   r   r"   Útest_fit_then_partial_fit  s    r@  c                 C   s°   t ttftttffD ]–\}}}| ddd|dd�}| ||¡ | |¡}|j}t	 
|¡}| dd|dd�}tdƒD ]}	|j|||d� qn| |¡}
|j|ksœt‚t||
dd� qd S )NrU   rG   F)r]   rj   r   rl   rk   ©r]   rj   rl   rk   r•   r˜   )r,   rx   rÉ   rî   rø   rù   r)   r3   ru   rV   r›   rš   r2   rv   r   )r[   ry   ZX_rˆ   ZT_rz   r2  Útr–   re   Úy_pred2r   r   r"   Ú"test_partial_fit_equal_fit_classif  s    


rD  c                 C   sô   t j d¡}| dddd|d�}| tt¡ dt  | t¡tk¡ksFt‚| dddd|d�}| tt¡ dt  | t¡tk¡ks€t‚| dd	|d
�}| tt¡ dt  | t¡tk¡ks¶t‚| dddd|d�}| tt¡ dt  | t¡tk¡ksðt‚d S )NrF   rU   r~   rÛ   Úepsilon_insensitive)r]   rl   rj   r¤   r   rT   Zsquared_epsilon_insensitiveÚhuber)r]   r¤   r   r£   )	rV   r³   r´   r)   r,   rx   r  rÈ   rv   )r[   r   rz   r   r   r"   Útest_regression_losses2  s>    ûûûrG  c                 C   s   t | ttdƒ d S )Nr   )r}   rî   rø   rÐ   r   r   r"   Útest_warm_start_multiclassX  s    rH  c                 C   s\   | ddd�}|  tt¡ t|dƒs&t‚dd„ tƒ  t¡D ƒ}|  td d …d d…f |¡ d S )NrU   Frƒ   rr   c                 S   s   g | ]}d dg| ‘qS )ZhamZspamr   )r»   re   r   r   r"   r½   e  s     z%test_multiple_fit.<locals>.<listcomp>rE   )r)   r,   rx   r�   rv   r   Úfit_transform)r[   rz   r-   r   r   r"   Útest_multiple_fit]  s
    rJ  c                 C   sN   | dddd�}|  ddgddgddggdddg¡ |jd |jd ksJt‚d S )NrÛ   rG   Fr4  r   rF   )r)   rr   rv   r‘   r   r   r"   Útest_sgd_regm  s    $rK  c              
   C   s    d}d}d}d}t j d¡}|j||fd�}|j|d�}t  ||¡}| dd||d	d
d	dd�}	|	 ||¡ t| ||||ƒ\}
}t|	j|
dd� t	|	j
|dd� d S )Nrm   rU   rÝ   r±   r   rÞ   r£   r~   TrF   Frà   r—   r˜   )rV   r³   r´   râ   rZ   r)   ri   r   rr   r   rt   ©r[   r\   r]   rå   ræ   rç   r,   rè   r-   rz   ra   rc   r   r   r"   Ú$test_sgd_averaged_computed_correctlyu  s,    ørM  c              
   C   s   d}d}d}d}t j d¡}|j||fd�}|j|d�}t  ||¡}| dd||d	d
d	dd�}	|	 |d t|d ƒ… d d … |d t|d ƒ… ¡ |	 |t|d ƒd … d d … |t|d ƒd … ¡ t| ||||ƒ\}
}t|	j	|
dd� t
|	jd |dd� d S )Nrm   rU   rÝ   r±   r   rÞ   r£   r~   TrF   Frà   rG   r—   r˜   )rV   r³   r´   râ   rZ   r2   Úintri   r   rr   r   rt   rL  r   r   r"   Útest_sgd_averaged_partial_fit–  s.    ø44rO  c              
   C   sÊ   d}d}| dd||ddddd�}t jd	 }| td t|d
 ƒ… d d … t d t|d
 ƒ… ¡ | tt|d
 ƒd … d d … t t|d
 ƒd … ¡ t| tt ||ƒ\}}t|j|dd� t|j	|dd� d S )Nrm   rU   r£   r~   TrF   Frà   r   rG   r—   r˜   )
rÁ   rX   r2   rÀ   rN  ri   r   rr   r   rt   )r[   r\   r]   rz   rå   ra   rc   r   r   r"   Útest_average_sparse·  s$    ø
44rP  c           	      C   sÂ   d\}}d}t j d¡}t  |||¡ |d¡}d| ¡  }| dddd	d
�}| ||¡ | ||¡}|dksnt‚d| ¡  | 	|d¡ ¡  }| dddd	d
�}| ||¡ | ||¡}|dks¾t‚d S )N©éûÿÿÿr   r”   r   rF   rI   r£   rÛ   rÝ   F)r¤   r]   r   rÇ   rR   ©
rV   r³   r´   Zlinspacerä   r¥   r)   Úscorerv   Úrandn©	r[   ZxminZxmaxrå   rç   r,   r-   rz   rT  r   r   r"   Útest_sgd_least_squares_fitÒ  s    rW  c           	      C   sÆ   d\}}d}t j d¡}t  |||¡ |d¡}d| ¡  }| dddd	d
d�}| ||¡ | ||¡}|dkspt‚d| ¡  | 	|d¡ ¡  }| dddd	d
d�}| ||¡ | ||¡}|dksÂt‚d S )NrQ  r”   r   rF   rI   rE  rU   rÛ   rÝ   F©r¤   Úepsilonr]   r   rÇ   rR   rS  rV  r   r   r"   Útest_sgd_epsilon_insensitiveê  s4    ûûrZ  c           	      C   sÆ   d\}}d}t j d¡}t  |||¡ |d¡}d| ¡  }| ddddd	d
�}| ||¡ | ||¡}|dkspt‚d| ¡  | 	|d¡ ¡  }| ddddd	d
�}| ||¡ | ||¡}|dksÂt‚d S )NrQ  r”   r   rF   rI   rF  rÛ   rÝ   FrX  rR   rS  rV  r   r   r"   Útest_sgd_huber_fit  s    r[  c              	   C   s¨   d\}}t j d¡}| ||¡}| |¡}t  ||¡}dD ]h}dD ]^}tj||dd�}	|	 ||¡ | dd||dd	�}
|
 ||¡ d
||f }t|	j	|
j	d|d� qBq:d S )N)r¨   r   r   )rU   rm   )rI   rP   rT   F)r]   Úl1_ratiorÇ   Ú
elasticneté2   )r‹   r   r]   r\  rÇ   zNcd and sgd did not converge to comparable results for alpha=%f and l1_ratio=%frG   )r™   rÖ   )
rV   r³   r´   rU  rZ   r   Z
ElasticNetr)   r   rr   )r[   rå   ræ   rç   r,   Zground_truth_coefr-   r]   r\  ÚcdZsgdrÖ   r   r   r"   Útest_elasticnet_convergence&  s4    
  ÿûÿÿr`  c                 C   sº   t jd d }| dd�}| t d |… td |… ¡ |jjt jd fksLt‚|jjdks\t‚| ddgg¡jdksvt‚t|jj	ƒ}| t |d … t|d … ¡ t|jj	ƒ}|s¶t|ƒ‚d S )Nr   rH   rU   rq   rF   r  )
r,   rX   r2   rx   rr   rv   rt   rÈ   r9  r«   )r[   r:  rz   r;  r<  r   r   r"   Útest_partial_fitH  s    
ra  c                 C   s‚   | ddd|dd�}|  tt¡ | t¡}|j}| dd|dd�}tdƒD ]}| tt¡ qF| t¡}|j|kspt‚t	||dd� d S )NrU   rG   F)r]   r   rj   rl   rk   rA  r˜   )
r)   r,   rx   rÈ   rÉ   ru   rš   r2   rv   r   )r[   ry   rz   r2  rB  re   rC  r   r   r"   Útest_partial_fit_equal_fitZ  s    

rb  c                 C   s0   | dd�}|j dd� |jd d dks,t‚d S )NrO   )rY  rÛ   rF  rF   )rw   r  rv   r‘   r   r   r"   Útest_loss_function_epsilonk  s    
rc  c                 C   s  |d krt  |jd ¡}n|}t  |jd ¡}|}d| }	d}
d}| tkrNd}t|ƒD ]¨\}}t  ||¡}||	7 }|dkr€d}nd}|tdd|| d  ƒ9 }||| |  7 }|	|||   | 7 }	||9 }||7 }||d  }|
|9 }
|
|	7 }
|
|d  }
qV|d|
 fS )NrF   rS   rT   rU   rE   r   rG   )rV   rW   rX   rC   rY   rZ   Úmax)r[   r,   r\   r6  ro   rÒ   Úcoefrÿ   Úoffsetrb   rc   rd   re   rf   rg   rh   r   r   r"   Úasgd_oneclassv  s4    rg  c                 C   s¸   | ddd|d�}|  |¡ | ddd|d�}|j ||j ¡ |j ¡ d� | dddd|d�}|  |¡ |j|jksrt‚t|j|jƒ |jdd	� |  |¡ |j|jks¦t‚t|j|jƒ d S )
NrI   rU   F)r6  rj   rk   rl   rÛ   ©ro   rÒ   T)r6  rj   rk   rp   rl   ©r6  )r)   rr   rs   rœ   ru   rv   r   rw   )r[   r,   ry   rz   r{   r|   r   r   r"   Ú_test_warm_start_oneclassœ  s    


rj  c                 C   s   t | t|ƒ d S r%   )rj  r,   r�   r   r   r"   Útest_warm_start_oneclass³  s    rk  c                 C   sN   | dd�}t |ƒ}|jdd� | t¡ | dd�}| t¡ t|j|jƒ d S )NrI   ri  rÛ   )r   rw   r)   r,   r   rr   r�   r   r   r"   Útest_clone_oneclass¹  s    



rl  c              	   C   sÂ   t jd d }| dd�}| t d |… ¡ |jjt jd fksBt‚|jjdksRt‚| ddgg¡jdkslt‚|j}| t |d … ¡ |j|ks’t‚t t	¡� | t d d …df ¡ W 5 Q R X d S )Nr   rH   rÛ   ri  rF   r  )
r,   rX   r2   rr   rv   rœ   rÈ   r…   r†   r‡   )r[   r:  rz   Zprevious_coefsr   r   r"   Útest_partial_fit_oneclassÇ  s    
rm  c           	      C   s    | ddd|dd�}|  t¡ | t¡}|j}|j}|j}| ddd|dd�}tdƒD ]}| t¡ qR| t¡}|j|kszt	‚t
||ƒ t
|j|ƒ t
|j|ƒ d S )Nçš™™™™™©?rG   rU   F)r6  r   rj   rl   rk   rF   )r6  rj   r   rl   rk   )r)   r,   r3   rÉ   ru   rr   rœ   rš   r2   rv   r   )	r[   ry   rz   Zy_scoresrB  re  rf  rž   Z	y_scores2r   r   r"   Ú#test_partial_fit_equal_fit_oneclassÛ  s    



ro  c                 C   sˆ   d}d}| dd||ddd�}| dd||d	dd�}|  t¡ |  t¡ t| t|||j ¡ |jd
�\}}t|j ¡ | ¡ ƒ t|j|ƒ d S )Nrm   rn  r¢   r~   rG   F)r�   rl   rj   r6  r   rk   r   rF   rh  )r)   r,   rg  rr   r¥   rœ   r   )r[   rj   r6  r�   r{   rÿ   Úaverage_offsetr   r   r"   Ú*test_late_onset_averaging_reached_oneclassð  s<         ÿ     ÿ

     ÿ
rq  c           
   	   C   sz   d}d}d}d}t j d¡}|j||fd�}| d||dd	dd
d�}| |¡ t| |||ƒ\}}	t|j|ƒ t|j|	ƒ d S )Nrm   rn  rÝ   r±   r   rÞ   r~   TrF   F©rl   rj   r6  rÇ   r   r�   rk   )	rV   r³   r´   râ   r)   rg  r   rr   rœ   ©
r[   r\   r6  rå   ræ   rç   r,   rz   rÿ   rp  r   r   r"   Ú-test_sgd_averaged_computed_correctly_oneclass  s&    ù

rt  c           
   	   C   s´   d}d}d}d}t j d¡}|j||fd�}| d||dd	dd
d�}| |d t|d ƒ… d d … ¡ | |t|d ƒd … d d … ¡ t| |||ƒ\}}	t|j|ƒ t|j	|	ƒ d S )Nrm   rn  rÝ   r±   r   rÞ   r~   TrF   Frr  rG   )
rV   r³   r´   râ   r2   rN  rg  r   rr   rœ   rs  r   r   r"   Ú&test_sgd_averaged_partial_fit_oneclass'  s(    ù
""ru  c              	   C   sŠ   d}d}| d||ddddd�}t jd }| t d t|d	 ƒ… ¡ | t t|d	 ƒd … ¡ t| t ||ƒ\}}t|j|ƒ t|j|ƒ d S )
Nrm   rU   r~   TrF   Frr  r   rG   )rÀ   rX   r2   rN  rg  r   rr   rœ   )r[   r\   r6  rz   rå   rÿ   rp  r   r   r"   Útest_average_sparse_oneclassC  s"    ù

rv  c                  C   sÖ   t  ddgddgddgg¡} t  ddgddgg¡}tdddddd�}| | ¡ t|jt  d	d
g¡ƒ |jd dksvt‚| |¡}t|t  ddg¡ƒ | |¡|j }t| 	|¡|ƒ | 
|¡}t|t  ddg¡ƒ d S )NrD   rE   rF   rI   rG   r~   F)r6  rj   rl   rk   r   g      À¿g      Ü?r   rK   g      î¿g      ä?)rV   r„   r?   r)   r   rr   rœ   rv   Zscore_samplesr3   rÈ   r   )ÚX_trainÚX_testrz   ZscoresÚdecrü   r   r   r"   Útest_sgd_oneclass\  s$        ÿ


rz  c                  C   s.  d} d}d}t j |¡}d| dd¡ }t j|d |d f }d| dd¡ }t j|d |d f }t|d| d	�}| |¡ | |¡}| |¡ 	d
d¡}	d}
t
||d�}t| dd|
|d d�}t||ƒ}| |¡ | |¡}| |¡ 	d
d¡}t  ||k¡dk�st‚t  t  |	|f¡¡d }|dk�s*t‚d S )Nrn  rÜ   r   r  éô  rG   r”   Zrbf)ÚgammaZkernelr6  rF   rE   é   )r|  r   T)r6  rk   rÇ   r   r   r   rR   r  rO   )rV   r³   r´   rU  Zr_r   r)   rÈ   r3   rä   r   r?   r   r  rv   Úcorrcoefr0  )r6  r|  r   rç   r,   rw  rx  rz   Zy_pred_ocsvmZ	dec_ocsvmr   Z	transformZclf_sgdZpipe_sgdZy_pred_sgdocsvmZdec_sgdocsvmr~  r   r   r"   Útest_ocsvm_vs_sgdocsvmr  s:    

ú


r  c                  C   s¢   t jddddd�\} }tddd dd	d
d� | |¡}tdddd
d d� | |¡}t|j|jƒ tddd ddd
d� | |¡}tdddd
d d� | |¡}t|j|jƒ d S )Nr¨   r”   rÝ   iÒ  )rå   ræ   Zn_informativer   rm   r]  r/  g�Aòÿÿÿï?r   )r]   r‹   r   r   r\  r   rŠ   )r]   r‹   r   r   r   g»½×Ùß|Û=rŒ   )r	   Úmake_classificationr@   r)   r   rr   )r,   r-   Zest_enZest_l1Zest_l2r   r   r"   Útest_l1_ratio›  sd       ÿ
ú ù    ÿ þú ù    ÿ þr�  c            	   
   C   s  t jdd��� t j d¡} d}d}| j||fd�}|d d …d d…f  d9  < t  |¡ ¡ sbt‚tƒ  	|¡}t  |¡ ¡ s€t‚| j|d�}t  
||¡d	k t j¡}tt  |¡dd
gƒ tdddd�}| ||¡ t  |j¡ ¡ sæt‚d}tjt|d�� | ||¡ W 5 Q R X W 5 Q R X d S )NÚraise©r  r   r”   r±   rÞ   rG   gœu ˆ<ä7~rS   rF   rÛ   rÄ   r{  )r]   r¤   r   zwFloating-point under-/overflow occurred at epoch #.* Scaling input data with StandardScaler or MinMaxScaler might help.rÌ   )rV   Úerrstater³   r´   râ   Úisfiniter  rv   r   rI  rZ   ZastypeZint32r   r›   r@   r)   rr   r…   r†   r‡   )	rç   rå   ræ   r,   ZX_scaledZground_truthr-   ÚmodelZ	msg_regxpr   r   r"   Útest_underflow_or_overlow¾  s&    ÿr‡  c                  C   sZ   t ddddddddd d	�	} tjd
d�� |  tjtj¡ W 5 Q R X t | j¡ 	¡ sVt
‚d S )NrÄ   r±   Tr]  r  rU   rm   r   )	r¤   r   rk   r‹   r\  r]   rj   r   r   r‚  rƒ  )r@   rV   r„  r)   rª   r«   r¬   r…  rr   r  rv   )r†  r   r   r"   Ú'test_numerical_stability_large_gradientä  s    ÷rˆ  r‹   rŒ   rŠ   r]  c              	   C   sV   t ddd| dd dd�}tjdd�� | tjtj¡ W 5 Q R X t|jt 	|j¡ƒ d S )	Ng     jø@r~   rÛ   Fr/  )r]   rl   rj   r‹   rk   r   r   r‚  rƒ  )
r@   rV   r„  r)   rª   r«   r¬   r   rr   Ú
zeros_like)r‹   r†  r   r   r"   Útest_large_regularization÷  s    ù	rŠ  c               	   C   s   t ƒ  tj¡} tjdk}d}td d|d�}| | |¡ ||jksDt‚d}tdd|d�}| | |¡ ||jkspt‚|jdks~t‚tdd|d�}| | |¡ |j|jks¨t‚|jdks¶t‚tdd	dd
�}d}t	j
t|d�� | | |¡ W 5 Q R X |jdksüt‚d S )NrF   r   r   )r   r   r   r  r   rÛ   rH   rm   )r   r   r   zhMaximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.rÌ   )r   rI  rª   r«   r¬   r@   r)   r­   rv   r…   Úwarnsr   )r,   r-   r   Zmodel_0Zmodel_1Zmodel_2Zmodel_3Zwarning_messager   r   r"   Útest_tol_parameter	  s*    
ÿrŒ  c                 C   s:   |D ]0\}}}}t |  ||¡|ƒ t |  ||¡|ƒ qd S r%   )r   Úpy_lossÚpy_dloss)Zloss_functionÚcasesrg   r-   Zexpected_lossZexpected_dlossr   r   r"   Ú_test_loss_common-  s    r�  c                  C   sT   t  d¡} dddddddd	g}t| |ƒ t  d
¡} ddddddddg}t| |ƒ d S )NrT   )gš™™™™™ñ?rT   rS   rS   ©ç       Àr¡   rS   rS   )rT   rT   rS   r¡   )r¡   r¡   rS   rT   )rI   rT   rI   r¡   )rÜ   r¡   ç      @rT   )rK   r¡   rI   rT   )rS   rT   rF   r¡   rS   ©rT   rT   rS   rS   )r  r¡   rS   rS   )rS   rT   rS   r¡   )rS   r¡   rS   rT   )rI   r¡   rI   rT   )rÜ   r¡   rÜ   rT   )rK   rT   rI   r¡   )r¡   rT   rT   r¡   )Úsgd_fastZHinger�  ©r¤   r�  r   r   r"   Útest_loss_hinge5  s,    
÷

÷r—  c                  C   s(   t  d¡} ddddddg}t| |ƒ d S )NrT   r”  r‘  )rT   r¡   ç      @r˜  ©r¡   rT   r˜  ç      À)rI   rT   g      Ð?r¡   ©rI   r¡   g      @r“  )r•  ZSquaredHinger�  r–  r   r   r"   Útest_gradient_squared_hingeV  s    
ù	rœ  c                  C   sH  t  ¡ } ddt dt d¡ ¡dt d¡d  fddt dt d¡ ¡dt d¡d  fddt dt d¡ ¡dt d¡d  fddt dt d¡ ¡dt d¡d  fddt d¡dfddt d¡dfddg}t| |ƒ t|  d	d¡t d
¡d dƒ t|  d	d¡t d
¡dƒ t|  d
d¡t d
¡d dƒ t|  d
d¡d	dƒ d S )NrT   r¡   rS   rG   rK   rI   )çfffffæ1@r¡   r�  rT   )gfffffæ1ÀrT   r�  r¡   gš™™™™2@gš™™™™2Àr—   )	r•  ÚLogrV   r  Úexpr�  r   rŽ  r�  r–  r   r   r"   Útest_loss_loge  s    ((((÷
r   c                  C   s$   t  ¡ } dddddg}t| |ƒ d S )N©rS   rS   rS   rS   r”  )rT   rS   rI   rT   )rI   r¡   g      ò?rJ   )g      ÀrÜ   g     @$@g      À)r•  ZSquaredLossr�  r–  r   r   r"   Útest_loss_squared_lossz  s    úr¢  c                  C   s(   t  d¡} ddddddg}t| |ƒ d S )NrÛ   r¡  )rÛ   rS   ç{®Gázt?rÛ   )rS   rÛ   r£  r  )gš™™™™™@r˜  g{®GázT?gš™™™™™©¿)ç      @rÜ   gáz®GáÒ?rÛ   )r¡   r¤  g
×£p=
ã?r  )r•  ZHuberr�  r–  r   r   r"   Útest_loss_huberˆ  s    
ù	r¥  c                  C   s*   t  ¡ } ddddddddg}t| |ƒ d S )	Nr”  )r¡   r¡   rS   rS   )rÜ   rT   rS   rS   )rS   rT   rT   r’  r™  r›  )r’  rT   é   rš  )g      ÀrT   é   rš  )r•  ZModifiedHuberr�  r–  r   r   r"   Útest_loss_modified_huber—  s    ÷r¨  c                  C   s,   t  d¡} dddddddd	g}t| |ƒ d S )
NrÛ   r¡  ©rÛ   rS   rS   rS   ©gffffff Àr’  rS   rS   ©gffffff@r“  rS   rS   )çš™™™™™@rÜ   rÛ   rT   )rÜ   r¡   ç333333@rT   )rÜ   r¬  rÛ   r¡   )r’  rT   r­  r¡   )r•  ZEpsilonInsensitiver�  r–  r   r   r"   Útest_loss_epsilon_insensitive¨  s    
÷r®  c                  C   s,   t  d¡} dddddddd	g}t| |ƒ d S )
NrÛ   r¡  r©  rª  r«  )r¬  rÜ   rU   r  )rÜ   r¡   çR¸…ëÑ @g333333@)rÜ   r¬  rU   gš™™™™™É¿)r’  rT   r¯  g333333À)r•  ZSquaredEpsilonInsensitiver�  r–  r   r   r"   Ú%test_loss_squared_epsilon_insensitive¹  s    
÷r°  c               	   C   sf   t dddddddd�} |  tjtj¡ | j| jks6t‚| j| jd k sJt‚|  tjtj¡d	ksbt‚d S )
Nrm   r¨   Tr”   r   rG   )r]   r   r   r©   rº   r   r  rÝ   rP   )	r@   r)   rª   r«   r¬   r­   rº   rv   rT  )rz   r   r   r"   Ú0test_multi_thread_multi_class_and_early_stoppingÊ  s    ù	r±  c                  C   s^   t  ddd¡dddgdœ} tdd	d
dd�}t|| dddd�}| tjtj¡ |jdksZt	‚d S )Néüÿÿÿr  rí   r   r±   r^  )r]   rº   rU   r¨   Tr   )r   r   r©   r   rG   )Zn_iterr  r   rP   )
rV   Zlogspacer@   r   r)   rª   r«   r¬   Zbest_score_rv   )Z
param_gridrz   Úsearchr   r   r"   Ú-test_multi_core_gridsearch_and_early_stoppingÜ  s    þr´  ÚbackendZlokyÚmultiprocessingÚ	threadingc              	   C   sŠ   t j d¡}tjdddd|d�}| dd¡}tdd	dd
�}| ||¡ tdddd
�}tj| d�� | ||¡ W 5 Q R X t	|j
|j
ƒ d S )Nr   r{  r  g{®Gáz”?Zcsr)Zdensityr	  r   rÝ   r¨   rF   )r   r  r   r  )rµ  )rV   r³   r´   r&   Úchoicer@   r)   ÚjoblibZparallel_backendr   rr   )rµ  r   r,   r-   Zclf_sequentialZclf_parallelr   r   r"   Ú'test_SGDClassifier_fit_for_all_backendsë  s    rº  zold_loss, new_loss, Estimatorr  rÅ   c              	   C   sŽ   t jtd| › d�d�� || dd�}| tt¡ W 5 Q R X ||dd�}| tt¡ t|dƒrtt| t¡| t¡ƒ nt| 	t¡| 	t¡ƒ d S )Nz
The loss 'z' was deprecatedrÌ   r   )r¤   r   r5   )
r…   r‹  ÚFutureWarningr)   r,   rx   r�   r   r5   rÈ   )Zold_lossZnew_lossÚ	EstimatorZest1Zest2r   r   r"   Útest_loss_deprecated  s    

r½  r¼  c              	   C   s  | t jkrtj|d�\}}ntj|d�\}}| |dd�}t t¡�" | ||¡j	}|j
dks`t‚W 5 Q R X | |dd�}t t¡�" | ||¡j	}|j
dksžt‚W 5 Q R X t||ƒ | |d dd�}t t¡�" | ||¡j	}|j
dksêt‚W 5 Q R X t || ¡ ¡ dk�st‚d S )N)r   rF   )r   r   rT   )r   r;   r	   Zmake_regressionr€  r…   r‹  r   r)   rr   r­   rv   r   rV   Úabsrd  )r¼  Zglobal_random_seedr,   r-   ZestZcoef_same_seed_aZcoef_same_seed_bZcoef_other_seedr   r   r"   Útest_sgd_random_state&  s"    

r¿  c           	      C   s¢   t jt j }}|jd }d}tjddd|d�}ttjd�}|  	td|¡ | 
||¡ |jd d	d
… \}}|jd t|| ƒks„t‚|jd t|| ƒksžt‚dS )ziTest that data passed to validation callback correctly subsets.

    Non-regression test for #23255.
    r   r  Trm   r¨   )r©   r   r   r²   )Zside_effectÚ_ValidationScoreCallbackrF   rH   N)rª   r«   r¬   rX   r   r@   r   r   rÀ  Úsetattrr)   Z	call_argsrN  rv   )	Zmonkeypatchr,   rx   rå   r²   rz   ZmockZX_valZy_valr   r   r"   Ú&test_validation_mask_correctly_subsetsL  s    
ürÂ  c               	   C   s^   t jt j } }t |¡}d}tjd|dd�}d}tjt	|d�� |j
| ||d� W 5 Q R X d S )Nr°   Tr   )r©   r²   r   z\The sample weights for validation set are all zero, consider using a different random state.rÌ   r,  )rª   r«   r¬   rV   r‰  r   r@   r…   r†   r‡   r)   )r,   rx   r-  r²   rz   Úerror_messager   r   r"   Ú(test_sgd_error_on_zero_validation_weightd  s    
  ÿÿrÄ  c                 C   s   | dd�  tt¡ dS )z!non-regression test for gh #25249rF   )ÚverboseN)r)   r,   rx   )r¼  r   r   r"   Útest_sgd_verbosew  s    rÆ  )NrS   )NrS   )¦r  r¹  r…   ÚnumpyrV   Zscipy.sparseÚsparser&   Zunittest.mockr   Zsklearn.utils._testingr   r   r   r   r   Zsklearnr   r	   r
   Zsklearn.baser   r   Zsklearn.svmr   Zsklearn.preprocessingr   r   r   r   Zsklearn.kernel_approximationr   Zsklearn.pipeliner   Zsklearn.exceptionsr   Zsklearn.model_selectionr   r   Zsklearn.linear_modelr   r•  r   r   r#   r@   r$   r;   r:   r?   r>   rA   rB   rC   r„   r,   rx   rÉ   rÊ   rî   rø   rù   rú   rÀ   rÁ   r  r  Z	load_irisrª   rØ   rÙ   Ztrue_result5ri   r}   ÚmarkZparametrizer‚   r‰   rŽ   r’   rŸ   r¦   r®   r¯   r¹   r¿   rÂ   rË   rÑ   rW   rÕ   r×   rÚ   ré   rë   rð   rô   rý   r   r  r  r  r  r  r$  r(  r*  r+  r.  r3  r5  r7  r8  r=  r>  r?  r@  rD  rG  rH  rJ  rK  rM  rO  rP  rW  rZ  r[  r`  ra  rb  rc  rg  rj  rk  rl  rm  ro  rq  rt  ru  rv  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   r   r"   Ú<module>   s€  
.
÷ÿ
øÿøÿ.
" 
ÿ 
ÿ
 
ÿ
úþ
úþ
 
ÿ
+ 
ÿ
 
ÿ
 
ÿ
) 
ÿ
 
ÿ

 
ÿ
üþ	
 
ÿ
	



üþ	

!
	











D
$




.
 
ÿ





	
%



 
 


#

!

&






)#&
$!$ÿþ 
ÿ#