U
    2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jJKdGe-e3e/e4gejJKdHdIdJdKdLgdMdN ZLejJKdGe-e3e/e4gdOdP ZMejJKdGe-e3e/e4gdQdR ZNejJKdGe-e3e/e4e1e5gdSdT ZOejJKdGe-e3e/e4e1e5gdUdV ZPejJKdGe-e3e/e4gdWdX ZQejJKdGe-e3e/e4gdYdZ ZRejJKdGe-e3e/e4gd[d\ ZSejJKdGe-e3e/e4gd]d^ ZTejJKdGe-e3e/e4gd_d` ZUejJKdGe-e3e/e4gdadb ZVejJKdGe-e3gdcdd ZWejJKdGe-e3e1e5gdedf ZXejJKdge-dheYdiife3dheYdiife1djeYdiife5djeYdiifgdkdl ZZejJKdGe-e3e/e4gdmdn Z[ejJKdge-dhd ife3dhd ife1djd ife5djd ifgdodp Z\ejJKdGe-e3gdqdr Z]ejJKdGe-e3gdsdt Z^ejJKdGe-e3gdudv Z_ejJKdGe-e3gdwdx Z`ejJKdGe-e3gdydz ZaejJKdGe-e3gd{d| ZbejJKdGe-e3gd}d~ ZcejJKdGe-e3gdd ZdejJKdGe-e3gdd ZeejJKdGe-e3gdd ZfejJKdGe-e3gdd ZgejJKdGe-e3gdd ZhejJKdGe-e3gdd ZiejJKdGe-e3gdd ZjejJKdGe-e3gdd ZkejJKdGe-e3gdd ZlejJKdGe-e3gdd ZmejJKdGe-e3gdd ZnejJKdGe-e3e1e5gdd ZoejJKdGe-e3gdd ZpejJKdGe-e3gdd ZqejJKdGe-e3gdd ZrejJKdGe-e3gdd ZsejJKdGe-e3gdd ZtejJKdGe-e3gejJKdHdIdJdKdLgdd ZuejJKdGe-e3gdd ZvejJKdGe-e3gdd ZwejJKdGe-e3gdd ZxejJKdGe/e4gdd ZyejJKdGe/e4gdd ZzejJKdGe/e4gdd Z{ejJKdGe/e4gdd Z|ejJKdGe/e4gdd Z}ejJKdGe/e4gdd Z~ejJKdGe/e4gdd ZejJKdGe/e4gdd ZeejJKdGe/e4gdd ZejJKdGe/e4gejJKdHdIdJdKdLgdd ZejJKdGe/e4gdd ZdddZejJKdGe1e5gdd ZejJKdGe1e5gejJKdHdIdJdKdLgddĄ ZejJKdGe1e5gddƄ ZejJKdGe1e5gddȄ ZejJKdGe1e5gejJKdHdIdJdKdLgddʄ ZejJKdGe1e5gdd̄ ZejJKdGe1e5gdd΄ ZejJKdGe1e5gddЄ ZejJKdGe1e5gdd҄ ZddԄ Zddք Zdd؄ Zddڄ Zdd܄ ZejJKddddgdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZejJKddddgdd  ZejJKdddej-fgdd ZejJKdej-ej/gdd Zd	d
 Zdd ZejJKde-e/gdd Zd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   G/tmp/pip-unpacked-wheel-zrfo1fqw/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      ?      ZoneZtwoZthree?皙?gzG?g\(\?Q?g)\(?gQ?Gz?g{Gz?gHz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   rP         ?{Gz?)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.    rf   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stt|j|j d S )	NrR   F)rZ   eta0shufflelearning_rateMbP?	coef_initr\   T)rZ   rg   rh   
warm_startri   rZ   )r)   coef_copy
intercept_t_AssertionErrorr   
set_params)rX   r,   Ylrclfclf2clf3r   r   r"   _test_warm_start   s$        rz   rX   rv   constantoptimalZ
invscalingadaptivec                 C   s   t | tt| d S r%   )rz   r,   ru   rX   rv   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 )NrR   FrZ   rh   )
r)   r,   ru   rS   arrayZnewaxisZc_pytestraises
ValueError)rX   rw   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 )NrR   l1)rZ   penaltyl2)r   )r   rt   r)   r,   ru   r   ro   rX   rw   rx   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rtt|drtd S )NTrR   )averagerg   Z_average_coefZ_average_interceptZ_standard_interceptZ_standard_coef)r)   r,   ru   hasattrrs   rX   rw   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rt|j|jdd n| ttfkrt|j|j d S )NiX  r   d   classes   decimal)ranger   r2   r,   ru   rS   uniquer   ro   r@   rA   r;   rB   r   rq   r?   rC   r   offset_)rX   clf1rx   _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 )Nrj   -C6?      rF   rQ   rG      r{   squared_errorF)r   ri   lossrg   rZ   r   rh   r   )r[   r\   r   r   )rS   r   ru   r)   r,   rf   ro   ravelrq   r   r   )rX   rg   rZ   ZY_encoder   rx   r^   r`   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  rj   )early_stoppingr   r   )irisdatatargetr)   n_iter_rs   )rX   r,   ru   r   r   rw   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}   rR   rj   r   )ri   rg   r   r   r{   )r)   r   r   r   r   rs   )rX   r   rx   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	|rt
||d
}	nt||d
}	t|	||\}
}t|
}
|||
 ||
  |j|kstt|j|j d S )N皙?r   F
   Tr{   rR   )r   r   validation_fractionri   rg   r   r   rh   )r   r   ri   rg   r   r   rh   )Z	test_sizer   )r   r   r   rS   randomRandomStater)   r   rs   r   r   r   nextsplitsortr   ro   )rX   r,   ru   r   seedrh   r   r   rx   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,   ru   r   rX   r   r"   
<listcomp>  s   	 z)test_n_iter_no_change.<locals>.<listcomp>)rG   rH   r   )r   r   r   r   sorted)rX   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 )NTrO   )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   rR   Tr   )r   rZ   fit_interceptr   r   rh   )r)   r,   ru   r   predictTtrue_result)rX   r   rw   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   rl   N)r   r   r   r)   r,   ru   rS   rT   rX   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,   ru   )rX   
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,   ru   )rX   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)rX   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   ri   rg   rZ   r   r   r   rh   rE      r   )rS   r   r   normalrW   signr)   rf   reshaper   ro   r   rq   )rX   rY   rZ   	n_samples
n_featuresrngr,   wrw   r-   r^   r`   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   rq   r,   ru   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 )NrR   r   rZ   r   	   )r   r   r   r)   X2rS   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,   ru   rS   r   )rX   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 )NrR   r   r   rH   rG   r   r   rF   rH   r)   r   Y2ro   rU   rs   rq   r3   r   T2r   true_result2rX   rw   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 )Nrj   rR   r   r{   TrF   Fr   r   rE   r   r   )rS   r   r   r)   r   r   rV   r   rU   rf   r   ro   r   rq   )rX   rY   rZ   rw   Znp_Y2r   rb   ZclZy_iaverage_coefr`   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 )NrR   r   r   r   rH   rk   r   )r)   r   r   rS   rT   ro   rU   rs   rq   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 )	NrR   r   rG   )rZ   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   rS   rT   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st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   rs   formatr   r   AttributeErrorr5   r  )rX   r   rw   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 st|d	d
gg}|d |d kst|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stn"tj|ddtj|ddksttjdd}|
|g}t|dk r||g}t|d dgd	  d S )Nr   rR   r   )r   rZ   r   r   r5   r  )r   r   )r   rZ   r   rH   rG   r   rF   rI   rE   )r   r   r   r   皙333333?皙?rF   )Zaxisr   r   gUUUUUU?)r@   r)   r,   ru   r   rs   r5   r  r   r   r3   r   rS   Zargmaxr   sumallZargsortr   r  rA   Zargminmean)rX   rw   r   rd   d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
st||}t	|| tt|}t|j
st||}t	|| d S )N   r   r  F  )r   rZ   r   r   r   rh   r   rF   rE   )   )lenX4rS   r   r   arangerh   Y4r)   r   ro   rT   r   Zsparsifyr&   issparsers   pickleloadsdumps)rX   nr   idxr,   ru   rw   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   皙rQ   rP   rF   rE   r   r   F)rZ   r   r   r   r  rj   rS   r   r)   r   r   rX   r,   r-   rw   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   rZ   r   r   rI   r	  rG   r   )r)   r   ro   )rX   r,   r-   rw   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)rS   r   r   Zrandom_sampler  rU   rp   r)   r  r   ro   )rX   Zclass_weightsr   Zsample_weightsZmultiplied_togetherr   rx   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std S )Nr      r   r   F)rZ   r   r   rh   Zweightedr   rN   rF   r   r   r   )r   r   rh   )r   r   r   r   rS   r  rU   r   r   rh   r)   r
   Zf1_scorer   r   r   ro   Zvstackconcatenaters   )rX   r,   r-   r   r   rw   f1Zclf_balancedZX_0Zy_0ZX_imbalancedZy_imbalancedy_predr   r   r"   test_balanced_weight  sD    
    

r0  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"  rQ   rP   rF   rE   r   r   FrZ   r   r   r  rj   rH   rG   r)  r#  r$  r   r   r"   test_sample_weights  s    ( r2  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   Fr1  )nur   r   r   r)  )r@   rA   r?   rC   r   r   r   r)   r,   ru   rS   r  r   r   r   r"   test_wrong_sample_weights  s    r4  c              	   C   s0   | dd}t t |tt W 5 Q R X d S )NrR   rn   )r   r   r   r2   r   r   r   r   r   r"   test_partial_fit_exception  s    
r5  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stt
|jj}|t |d  t|d   t
|jj}|st||t}t|t d S )Nr   rH   rR   rn   r   rF   r   )r,   rU   rS   r   ru   r2   ro   rs   rq   r3   idr   r   r   r   r   )rX   thirdrw   r   id1id2r/  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stt
|jj}|t |d  t|d   t
|jj}|st|d S )	Nr   rH   rR   rn   r   rF   r   r   )r   rU   rS   r   r   r2   ro   rs   rq   r3   r6  r   )rX   r7  rw   r   r8  r9  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st|jjdkstd S )Nr   rH   rR   )rZ   r   r   rF   r   )	r   rU   rS   r   r   r2   ro   rs   rq   )rX   r7  rw   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stt||
dd qd S )NrR   rG   F)rZ   rg   r   ri   rh   rZ   rg   ri   rh   r   r   )r,   ru   r   r   r   r   r)   r3   rr   rS   r   r   r2   rs   r   )rX   rv   ZX_r   ZT_rw   r/  tr   rb   y_pred2r   r   r"   "test_partial_fit_equal_fit_classif  s    


rA  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st| dd	|d
}|tt dt |ttkkst| dddd|d}|tt dt |ttkkstd S )NrF   rR   r{   r   epsilon_insensitive)rZ   ri   rg   r   r   rQ   Zsquared_epsilon_insensitivehuber)rZ   r   r   r   )	rS   r   r   r)   r,   ru   r  r   rs   )rX   r   rw   r   r   r"   test_regression_losses2  s>    rD  c                 C   s   t | ttd d S )Nr|   )rz   r   r   r   r   r   r"   test_warm_start_multiclassX  s    rE  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 )NrR   Fr   ro   c                 S   s   g | ]}d dg| qS )ZhamZspamr   )r   rb   r   r   r"   r   e  s     z%test_multiple_fit.<locals>.<listcomp>rE   )r)   r,   ru   r   rs   r   fit_transform)rX   rw   r-   r   r   r"   test_multiple_fit]  s
    rG  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   Fr1  r   rF   )r)   ro   rs   r   r   r   r"   test_sgd_regm  s    $rH  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 )Nrj   rR   r   r   r   r   r   r{   TrF   Fr   r   r   )rS   r   r   r   rW   r)   rf   r   ro   r   rq   rX   rY   rZ   r   r   r   r,   r   r-   rw   r^   r`   r   r   r"   $test_sgd_averaged_computed_correctlyu  s,    rJ  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 )Nrj   rR   r   r   r   r   r   r{   TrF   Fr   rG   r   r   )rS   r   r   r   rW   r2   intrf   r   ro   r   rq   rI  r   r   r"   test_sgd_averaged_partial_fit  s.    44rL  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 )Nrj   rR   r   r{   TrF   Fr   r   rG   r   r   )
r   rU   r2   r   rK  rf   r   ro   r   rq   )rX   rY   rZ   rw   r   r^   r`   r   r   r"   test_average_sparse  s$    
44rM  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std S )Nr   r   r   rF   rI   r   r   r   F)r   rZ   r   r   rO   
rS   r   r   Zlinspacer   r   r)   scorers   randn	rX   ZxminZxmaxr   r   r,   r-   rw   rQ  r   r   r"   test_sgd_least_squares_fit  s    rT  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std S )NrN  r   r   rF   rI   rB  rR   r   r   Fr   epsilonrZ   r   r   rO   rP  rS  r   r   r"   test_sgd_epsilon_insensitive  s4    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std S )NrN  r   r   rF   rI   rC  r   r   FrU  rO   rP  rS  r   r   r"   test_sgd_huber_fit  s    rX  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   )rR   rj   )rI   rM   rQ   F)rZ   l1_ratior   
elasticnet2   )r   r   rZ   rY  r   zNcd and sgd did not converge to comparable results for alpha=%f and l1_ratio=%frG   )r   r   )
rS   r   r   rR  rW   r   Z
ElasticNetr)   r   ro   )rX   r   r   r   r,   Zground_truth_coefr-   rZ   rY  Z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	}|st|d S )Nr   rH   rR   rn   rF   r   )
r,   rU   r2   ru   ro   rs   rq   r   r6  r   )rX   r7  rw   r8  r9  r   r   r"   test_partial_fitH  s    
r]  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 )NrR   rG   F)rZ   r   rg   ri   rh   r>  r   )
r)   r,   ru   r   r   rr   r   r2   rs   r   )rX   rv   rw   r/  r?  rb   r@  r   r   r"   test_partial_fit_equal_fitZ  s    

r^  c                 C   s0   | dd}|j dd |jd d dks,td S )NrL   )rV  r   rC  rF   )rt   r  rs   r   r   r   r"   test_loss_function_epsilonk  s    
r_  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rd}nd}|tdd|| d  9 }||| |  7 }|	|||   | 7 }	||9 }||7 }||d  }|
|9 }
|
|	7 }
|
|d  }
qV|d|
 fS )NrF   rP   rQ   rR   rE   r   rG   )rS   rT   rU   rC   rV   rW   max)rX   r,   rY   r3  rl   r   coefr   offsetr_   r`   ra   rb   rc   rd   re   r   r   r"   asgd_oneclassv  s4    rc  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stt|j|j d S )
NrI   rR   F)r3  rg   rh   ri   r   rl   r   T)r3  rg   rh   rm   ri   r3  )r)   ro   rp   r   rr   rs   r   rt   )rX   r,   rv   rw   rx   ry   r   r   r"   _test_warm_start_oneclass  s    


rf  c                 C   s   t | t| d S r%   )rf  r,   r~   r   r   r"   test_warm_start_oneclass  s    rg  c                 C   sN   | dd}t |}|jdd |t | dd}|t t|j|j d S )NrI   re  r   )r   rt   r)   r,   r   ro   r   r   r   r"   test_clone_oneclass  s    



rh  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sttt	 |t d d df  W 5 Q R X d S )Nr   rH   r   re  rF   r   )
r,   rU   r2   ro   rs   r   r   r   r   r   )rX   r7  rw   Zprevious_coefsr   r   r"   test_partial_fit_oneclass  s    
ri  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   rR   F)r3  r   rg   ri   rh   rF   )r3  rg   r   ri   rh   )r)   r,   r3   r   rr   ro   r   r   r2   rs   r   )	rX   rv   rw   Zy_scoresr?  ra  rb  r   Z	y_scores2r   r   r"   #test_partial_fit_equal_fit_oneclass  s    



rk  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 )Nrj   rj  r   r{   rG   F)r   ri   rg   r3  r   rh   r   rF   rd  )r)   r,   rc  ro   r   r   r   )rX   rg   r3  r   rx   r   average_offsetr   r   r"   *test_late_onset_averaging_reached_oneclass  s<              

     
rm  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 )Nrj   rj  r   r   r   r   r{   TrF   Fri   rg   r3  r   r   r   rh   )	rS   r   r   r   r)   rc  r   ro   r   
rX   rY   r3  r   r   r   r,   rw   r   rl  r   r   r"   -test_sgd_averaged_computed_correctly_oneclass  s&    

rp  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 )Nrj   rj  r   r   r   r   r{   TrF   Frn  rG   )
rS   r   r   r   r2   rK  rc  r   ro   r   ro  r   r   r"   &test_sgd_averaged_partial_fit_oneclass'  s(    
""rq  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 )
Nrj   rR   r{   TrF   Frn  r   rG   )r   rU   r2   rK  rc  r   ro   r   )rX   rY   r3  rw   r   r   rl  r   r   r"   test_average_sparse_oneclassC  s"    

rr  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)r3  rg   ri   rh   r   g      g      ?r   rK   g      g      ?)rS   r   r?   r)   r   ro   r   rs   Zscore_samplesr3   r   r   )X_trainX_testrw   Zscoresdecr   r   r   r"   test_sgd_oneclass\  s$        


rv  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 )Nrj  r   r   r    rG   r   Zrbf)gammakernelr3  rF   rE      )rx  r   T)r3  rh   r   r   r   r   rO   r	  rL   )rS   r   r   rR  Zr_r   r)   r   r3   r   r   r?   r   r  rs   corrcoefr-  )r3  rx  r   r   r,   rs  rt  rw   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   rj   rZ  r,  gA?r   )rZ   r   r   r   rY  r   r   )rZ   r   r   r   r   g|=r   )r	   make_classificationr@   r)   r   ro   )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 | st| j|d}t 
||d	kt j}tt |dd
g tdddd}||| t |j st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   gu <7~rP   rF   r   r   rw  )rZ   r   r   zwFloating-point under-/overflow occurred at epoch #.* Scaling input data with StandardScaler or MinMaxScaler might help.r   )rS   errstater   r   r   isfiniter  rs   r   rF  rW   ZastypeZint32r   r   r@   r)   ro   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   TrZ  r  rR   rj   r   )	r   r   rh   r   rY  rZ   rg   r   r   r  r  )r@   rS   r  r)   r   r   r   r  ro   r  rs   )r  r   r   r"   'test_numerical_stability_large_gradient  s    r  r   r   r   rZ  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,  )rZ   ri   rg   r   rh   r   r   r  r  )
r@   rS   r  r)   r   r   r   r   ro   
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st|jdksttdd	dd
}d}t	j
t|d || | W 5 Q R X |jdkstd S )NrF   r   r   )r   r   r   r  r   r   rH   rj   )r   r   r   zhMaximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.r   )r   rF  r   r   r   r@   r)   r   rs   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casesrd   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 )NrQ   )g?rQ   rP   rP          r   rP   rP   )rQ   rQ   rP   r   )r   r   rP   rQ   )rI   rQ   rI   r   )r   r         @rQ   )rK   r   rI   rQ   )rP   rQ   rF   r   rP   rQ   rQ   rP   rP   )r
  r   rP   rP   )rP   rQ   rP   r   )rP   r   rP   rQ   )rI   r   rI   rQ   )r   r   r   rQ   )rK   rQ   rI   r   )r   rQ   rQ   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 )NrQ   r  r  )rQ   r         @r  r   rQ   r        )rI   rQ   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 )NrQ   r   rP   rG   rK   rI   )fffff1@r   r  rQ   )gfffff1rQ   r  r   g2@g2r   )	r  LogrS   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rP   rP   rP   rP   r  )rQ   rP   rI   rQ   )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   rP   {Gzt?r   )rP   r   r  r
  )g@r  g{GzT?g)      @r   gz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   rP   rP   )r   rQ   rP   rP   )rP   rQ   rQ   r  r  r  )r  rQ      r  )g      rQ      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   rP   rP   rP   gffffff r  rP   rP   gffffff@r  rP   rP   )皙@r   r   rQ   )r   r   333333@rQ   )r   r  r   r   )r  rQ   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   rR   r  )r   r   R @g333333@)r   r  rR   gɿ)r  rQ   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 )
Nrj   r   Tr   r   rG   )rZ   r   r   r   r   r   r   r   rM   )	r@   r)   r   r   r   r   r   rs   rQ  )rw   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 )Nr  r   r   r   r[  )rZ   r   rR   r   Tr   )r   r   r   r   rG   )Zn_iterr   r   rM   )
rS   Zlogspacer@   r   r)   r   r   r   Zbest_score_rs   )Z
param_gridrw   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   rw  r  g{Gz?Zcsr)Zdensityr  r   r   r   rF   )r   r   r   r  )r  )rS   r   r   r&   choicer@   r)   joblibZparallel_backendr   ro   )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,   ru   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stW 5 Q R X t|| | |d dd}tt" |||j	}|j
dkstW 5 Q R X t||  dkstd S )N)r   rF   )r   r   rQ   )r   r;   r	   Zmake_regressionr}  r   r  r   r)   ro   r   rs   r   rS   absr`  )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st|jd t|| kstdS )ziTest that data passed to validation callback correctly subsets.

    Non-regression test for #23255.
    r   r  Trj   r   )r   r   r   r   )Zside_effect_ValidationScoreCallbackrF   rH   N)r   r   r   rU   r   r@   r   r   r  setattrr)   Z	call_argsrK  rs   )	Zmonkeypatchr,   ru   r   r   rw   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   rS   r  r   r@   r   r   r   r)   )r,   ru   r*  r   rw   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,   ru   )r  r   r   r"   test_sgd_verbosew  s    r  )NrP   )NrP   )r  r  r   ZnumpyrS   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,   ru   r   r   r   r   r   r   r   r   r  r  Z	load_irisr   r   r   Ztrue_result5rf   rz   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   rT   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r%  r'  r(  r+  r0  r2  r4  r5  r:  r;  r<  r=  rA  rD  rE  rG  rH  rJ  rL  rM  rT  rW  rX  r\  r]  r^  r_  rc  rf  rg  rh  ri  rk  rm  rp  rq  rr  rv  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
$




.
 






	
%



 
 


#

!

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