B
    0d                 @   s  d 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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lmZ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l'm*Z* ddl'm+Z+ ddl,m-Z- ddl,m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddlm6Z6 eegZ7ddgddgddgd d gd d!gd!d ggZ8dddd d d gZ9ddgd!d!gd"d!ggZ:dd d gZ;ed#d$d%d$d&d'\Z<Z=ee=Z=ej>?dZ@eA ZBe@CeBjDjEZFeBjGeF eB_GeBjDeF eB_DejHId(d)d*d+ ZJejHjId,d-did.fd-did.fd/did0fd/d1id0fd(d2id3fd4d5id6fd4d1id6fd4d7id6fd8did9fd8d1id9fd:d1id;fd:d<id;fd=d5id>fd=d7id>fd=d?id>fd@d?idAfd@didAfdBi idCfdDdEidFfdDdidGfdDdHidGfdDd?idGfdIdEidJfgdKdL dMejHIdNee<e=feeBjGeBjDfgdOdP ZKejHId,dQdRdSdTfdUdRdSdTfgdVdW ZLejHIdXedYfedZfedUfedQfed[fed\fgd]d^ ZMejHId(d)d_d` ZNejHId(daejHId=dbdcdd ZOejHId=dbejHIdedfdgdh ZPdidj ZQejHIdNee<e=feeBjGeBjDfgdkdl ZRdmdn ZSdodp ZTdqdr ZUdsdt ZVdudv ZWdwdx ZXdydz ZYd{d| ZZejHId}e7d~d Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd ZgejHIde7dd ZhejHIde7dd ZiejHIde7dd ZjejHIde7dd ZkejHIde7dd ZlejHIde7dd ZmejHIde7dd ZnejHIde7dd ZoejHIde7dd ZpejHIde7dd ZqejHIde7dd Zrdd ZsejHIde7dd Ztdd Zudd Zvdd Zwdd ZxejHIde7dd ZyejHIde7dd Zzdd Z{ddÄ Z|ddń Z}ddǄ Z~e+ejHIdeefejHIdeee	fdd˄ Zdd̈́ Zddτ Zddф Zddӄ ZejHjIdeee0feee0feee1fgdddgdMddل Zddۄ ZejHIdee dݍdfee dݍdfgdd Zdd Zdd Zdd ZejHddd ZejHIdeddeddgdd ZejHId}eegdd ZejHId}e7dd ZejHIdddgdd ZdS )zP
Testing for the gradient boosting module (sklearn.ensemble.gradient_boosting).
    N)assert_allclose)
csr_matrix)
csc_matrix)
coo_matrix)expit)datasets)clone)make_classificationmake_regression)GradientBoostingClassifier)GradientBoostingRegressor)predict_stages)OneHotEncoderscale)	LinearSVC)mean_squared_error)train_test_split)check_random_state
tosequence)NoSampleWeightWrapper)assert_almost_equal)assert_array_almost_equal)assert_array_equal)skip_if_32bit)DataConversionWarning)NotFittedError)DummyClassifierDummyRegressor)make_pipeline)LinearRegression)NuSVR         i  
         )	n_samples
n_featuresZn_informativenoiserandom_stateloss)devianceexponentialc          	   C   s   t | ddd}tt |t W d Q R X |tt t	|tt
 dt|jks\t|jd d |jdd   }t|dkst|t}|jdkstd S )Nr&   r#   )r-   n_estimatorsr,   r"   g        )   r&   r#   )r   pytestraises
ValueErrorpredictTfitXyr   true_resultlenestimators_AssertionErrortrain_score_npanyapplyshape)r-   clfZdeviance_decreaseleaves rE   _/var/www/html/venv/lib/python3.7/site-packages/sklearn/ensemble/tests/test_gradient_boosting.pytest_classification_toy>   s    
rG   zparams, err_msgr0   z#n_estimators must be greater than 0learning_ratez$learning_rate must be greater than 0g      foobarzLoss 'foobar' not supportedmin_samples_splitg        z$min_samples_split must be an integerg?Zmin_samples_leafz&min_samples_leaf must be at least 1 orZmin_weight_fraction_leafz min_weight_fraction_leaf must ing333333?	subsamplezsubsample must be in \(0,1\]g	max_depthz#max_depth must be greater than zeroinitz1The init parameter must be an estimator or 'zero'max_featuresinvalidzInvalid value for max_features:z)max_features must be in \(0, n_features\]d   n_iter_no_changez!n_iter_no_change should either bec             C   s"   t | tr| d d ddS | S )Nr&   ] )
isinstancestrreplace)xrE   rE   rF   <lambda>n       rX   )ZidszGradientBoosting, X, yc          	   C   s0   t jt|d | f ||| W d Q R X d S )N)match)r2   r3   r4   r7   )GradientBoostingr8   r9   paramserr_msgrE   rE   rF   test_gbdt_parameter_checksQ   s    (r^   huberg333333?)r-   alphazalpha must be in \(0.0, 1.0\)quantilec          	   C   s0   t jt|d tf | tt W d Q R X d S )N)rZ   )r2   r3   r4   r   r7   X_regy_reg)r\   r]   rE   rE   rF   test_gbdt_loss_alpha_error}   s    
rd   zGradientBoosting, losslsabsolute_errorr.   r/   c          	   C   s,   t t | |dtt W d Q R X d S )N)r-   )r2   r3   r4   r7   r8   r9   )r[   r-   rE   rE   rF   test_wrong_type_loss_function   s    rg   c       	   	   C   s   t jddd\}}|d d |dd   }}|d d |dd   }}tddd| ddd	}||| d||| }|d
k sttddd| dddd}||| d||| }|dk std S )Ni.  r#   )r)   r,   i  rP   r$   g      ?r   )r0   rJ   rL   r-   rH   r,   g
ףp=
?   g      ?)r0   rJ   rL   r-   rH   rK   r,   g{Gz?)r   make_hastie_10_2r   r7   scorer=   )	r-   r8   r9   X_trainX_testy_trainy_testgbrtZ
error_raterE   rE   rF   test_classification_synthetic   s0    rp   )squared_errorrf   r_   )g      ?g      ?c       	   	   C   s   t tt}d }x~d |d| gD ]l}td| d|ddd}|jtt|d |t}|jdksbt	|
t}tt|}|dk st	|d k	r|}q"W d S )	Nr$   rP      r#   )r0   r-   rL   rK   rJ   r,   )sample_weight)i  rP   g{Gz?)r?   onesr;   rc   r   r7   rb   rA   rB   r=   r5   r   )	r-   rK   rt   Zlast_y_predrs   regrD   y_predmserE   rE   rF   test_regression_dataset   s$    


	rx   rs   )Nr#   c             C   sv   |dkrt ttj}tddd| d}|jtjtj|d |tjtj}|dksXt	|
tj}|jdksrt	d S )Nr#   rP   r.   )r0   r-   r,   rK   )rs   g?)   rP   r%   )r?   rt   r;   iristargetr   r7   datarj   r=   rA   rB   )rK   rs   rC   rj   rD   rE   rE   rF   	test_iris   s    r}   c        
      C   s  t d} dddddd}tjd| d	d
\}}|d d |d d  }}|dd  |dd   }}t }||| t|||}	|	dk sttjd| d\}}|d d |d d  }}|dd  |dd   }}tf |}||| t|||}	|	dk sttj	d| d\}}|d d |d d  }}|dd  |dd   }}tf |}||| t|||}	|	dk std S )Nr#   rP   rr   r$   g?rq   )r0   rL   rJ   rH   r-   i  g      ?)r)   r,   r+   rh   g      @)r)   r,   g     @gQ?)
r   r   make_friedman1r   r7   r   r5   r=   Zmake_friedman2Zmake_friedman3)
r,   Zregression_paramsr8   r9   rk   rm   rl   rn   rC   rw   rE   rE   rF   test_regression_synthetic   s6    

r   c             C   s2   |  }t |drt||| t |ds.td S )Nfeature_importances_)hasattrr=   r7   )r[   r8   r9   ZgbdtrE   rE   rF   test_feature_importances!  s    
r   c           	   C   s   t ddd} tt | t W d Q R X | tt t	| 
tt | t}t|dksdtt|dksvt| jj|jdddd}t	|t d S )NrP   r#   )r0   r,   g        g      ?)axisr   )r   r2   r3   r4   predict_probar6   r7   r8   r9   r   r5   r:   r?   allr=   classes_takeargmax)rC   y_probarv   rE   rE   rF   test_probability_log1  s    
r   c           	   C   sN   ddddddg} t ddd}d}tjt|d |jtt| d W d Q R X d S )Nr   r#   rP   )r0   r,   zty contains 1 class after sample_weight trimmed classes with zero weights, while a minimum of 2 classes are required.)rZ   )rs   )r   r2   r3   r4   r7   r8   r9   )rs   rC   msgrE   rE   rF   $test_single_class_with_sample_weightE  s
    r   c           	   C   s   t jddd\} }t| }tddd}|| | t|jdd}d}t	j
t|d t|j||j| W d Q R X t| }t	j
tdd t|j||j| W d Q R X d S )	NrP   r#   )r)   r,   )r0   r,   r"   z3When X is a sparse matrix, a CSR format is expected)rZ   z X should be C-ordered np.ndarray)r   ri   r   r   r7   r?   zerosrB   Zreshaper2   r3   r4   r   r<   rH   asfortranarray)rW   r9   Zx_sparse_cscrC   rj   r]   Z	x_fortranrE   rE   rF    test_check_inputs_predict_stagesP  s    
r   c              C   s   t jddd\} }| d d | dd   }}|d d |dd   }}tddddddd	}||| ||||}|d
k std| d S )Ni.  r#   )r)   r,   i  rP      r$   g?)r0   rJ   rL   rH   rN   r,   g      ?zGB failed with deviance %.4f)r   ri   r   r7   Zloss_decision_functionr=   )r8   r9   rk   rl   rm   rn   ro   r.   rE   rE   rF   test_max_feature_regression`  s    r   c       
         s   |    j  j }}t||dd\}}}}tdddddd}||| t|jddd	 } fd
d|D }	|	d dkstt	|	dd dddhkstdS )a  Test that Gini importance is calculated correctly.

    This test follows the example from [1]_ (pg. 373).

    .. [1] Friedman, J., Hastie, T., & Tibshirani, R. (2001). The elements
       of statistical learning. New York: Springer series in statistics.
    r   )r,   r_   g?r1   rP   )r-   rH   max_leaf_nodesr0   r,   Nr"   c                s   g | ]} j | qS rE   )Zfeature_names).0s)
californiarE   rF   
<listcomp>  s    z6test_feature_importance_regression.<locals>.<listcomp>ZMedIncr#   rr   Z	LongitudeZAveOccupZLatitude)
r|   r{   r   r   r7   r?   Zargsortr   r=   set)
Zfetch_california_housing_fxtr8   r9   rk   rl   rm   rn   ru   Z
sorted_idxZsorted_featuresrE   )r   rF   "test_feature_importance_regressiont  s    r   c              C   sP  t jddd\} }| j\}}| d d }|d d }tddd}||| |jtt|ksdt	t
ddd}||| |j|kst	t
ddd}||| |jt|d kst	t
ddd}||| |jtt|kst	t
dd	d}||| |jtt|kst	t
dd
| jd  d}||| |jdksLt	d S )Ni.  r#   )r)   r,   i  auto)r0   rN   g333333?sqrtlog2g{Gz?)r   ri   rB   r   r7   Zmax_features_intr?   r   r=   r   r   )r8   r9   _r*   rk   rm   ro   rE   rE   rF   test_max_feature_auto  s,    
r   c           	   C   s   t jdddd\} }| d d |d d  }}| dd  }t }tt tj||tj	d W d Q R X |
|| ||}x"||D ]}|j|jkstqW t|| d S )Ni  r#   g      ?)r)   r,   r+   rh   )dtype)r   r~   r   r2   r3   r4   r?   fromiterstaged_predictfloat64r7   r5   rB   r=   r   )r8   r9   rk   rm   rl   rC   rv   rE   rE   rF   test_staged_predict  s     
r   c        	   	   C   s  t jddd\} }| d d |d d  }}| dd  |dd   }}tdd}tt tj||tj	d W d Q R X |
|| x"||D ]}|j|jkstqW t||| x<||D ].}|jd |jd kstd	|jd kstqW t||| d S )
Ni  r#   )r)   r,   rh      )r0   )r   r   r$   )r   ri   r   r2   r3   r   r?   r   Zstaged_predict_probar   r7   r   rB   r=   r   r5   r   r   )	r8   r9   rk   rm   rl   rn   rC   rv   Zstaged_probarE   rE   rF   test_staged_predict_proba  s    
 r   	Estimatorc          
   C   s   t jd}|jdd}d|d d df  td }|  }||| xpdD ]h}t|d| d }|d krlqNtj	dd	 t
||}W d Q R X d|d d d < t |d dksNtqNW d S )
Nr   )r&   r%   )sizerr   r#   )r5   r   r   Zstaged_T)record)r?   randomRandomStateuniformZastyper   r7   getattrwarningscatch_warningslistr   r=   )r   rngr8   r9   	estimatorfuncZstaged_funcZstaged_resultrE   rE   rF   test_staged_functions_defensive  s    
r   c              C   s   t ddd} | tt t| tt dt| j	ks:t
ydd l}W n tk
rb   dd l}Y nX |j| |jd}d } ||} t| tt dt| j	kst
d S )NrP   r#   )r0   r,   r   )protocol)r   r7   r8   r9   r   r5   r6   r:   r;   r<   r=   cPickleImportErrorpickledumpsHIGHEST_PROTOCOLloads)rC   r   Zserialized_clfrE   rE   rF   test_serialization  s    
r   c           	   C   s   t ddd} tt | tttt W d Q R X t	ddd} | tttt | 
tdg ttjdtjd| 
tdg d S )NrP   r#   )r0   r,   r$   )r#   )r   )r   r2   r3   r4   r7   r8   r?   rt   r;   r   r5   r   randr   r   )rC   rE   rE   rF   test_degenerate_targets  s     r   c              C   s`   t dddddd} | tt | t}t ddddd}|tt |t}t||dd	 d S )
NrP   ra   rr   g      ?r(   )r0   r-   rL   r`   r,   rf   )r0   r-   rL   r,   )decimal)r   r7   rb   rc   r5   r   )Zclf_quantileZ
y_quantileZclf_aeZy_aerE   rE   rF   test_quantile_loss  s    

r   c              C   sV   t ddd} tttt}| t| t| t	tttt
 dt| jksRtd S )NrP   r#   )r0   r,   )r   r   maprU   r9   r7   r8   r   r5   r6   r:   r;   r<   r=   )rC   Zsymbol_yrE   rE   rF   test_symbol_labels,  s
    r   c              C   sZ   t ddd} tjttjd}| t| t| t	tjt
tjd dt| jksVtd S )NrP   r#   )r0   r,   )r   )r   r?   asarrayr9   Zfloat32r7   r8   r   r5   r6   r:   r;   r<   r=   )rC   Zfloat_yrE   rE   rF   test_float_class_labels7  s
    r   c           	   C   s~   t ddd} tjttjd}|d d tjf }d}tjt|d | 	t
| W d Q R X t| tt dt| jksztd S )NrP   r#   )r0   r,   )r   zA column-vector y was passed when a 1d array was expected. Please change the shape of y to \(n_samples, \), for example using ravel().)rZ   )r   r?   r   r9   int32Znewaxisr2   warnsr   r7   r8   r   r5   r6   r:   r;   r<   r=   )rC   y_Zwarn_msgrE   rE   rF   test_shape_yB  s    r   c              C   s6  t t} tddd}|| t t|tt	 dt
|jksDtt t} tddd}|| t t|tt	 dt
|jkstt jtt jd}t |}tddd}|t| t|tt	 dt
|jkstt jtt jd}t |}tddd}|t| t|tt	 dt
|jks2td S )NrP   r#   )r0   r,   )r   )r?   r   r8   r   r7   r9   r   r5   r6   r:   r;   r<   r=   Zascontiguousarrayr   r   )ZX_rC   r   rE   rE   rF   test_mem_layoutW  s,    



r   c           	   C   sZ   t dddd} | tt | jjd dks.tt| jd d t	ddd	d
dgdd d S )NrP   r#   g      ?)r0   r,   rK   r   r   gRQ?g333333?gQ?gQg)\(r$   )r   )
r   r7   r8   r9   oob_improvement_rB   r=   r   r?   array)rC   rE   rE   rF   test_oob_improvementt  s
    r   c           	   C   s:   t dddd} | tt tt | j W d Q R X d S )NrP   r#   g      ?)r0   r,   rK   )r   r7   r8   r9   r2   r3   AttributeErrorr   )rC   rE   rE   rF   test_oob_improvement_raise  s    r   c              C   sV   t ddddd} | tjtj | tjtj}|dks<t| jjd | j	ksRtd S )NrP   r.   r#   g      ?)r0   r-   r,   rK   g?r   )
r   r7   rz   r|   r{   rj   r=   r   rB   r0   )rC   rj   rE   rE   rF   test_oob_multilcass_iris  s    r   c              C   s   ddl m}  dd l}|j}|  |_tddddd}|tt |j}||_|d |	 
 }ddgd	gd
  d }||ksttdd | D }d|kstd S )Nr   )StringIOrP   r#   g?)r0   r,   verboserK    z%10sz%16sr%   )Iterz
Train LosszOOB ImprovezRemaining Timec             s   s   | ]
}d V  qdS )r#   NrE   )r   lrE   rE   rF   	<genexpr>  s    z&test_verbose_output.<locals>.<genexpr>   )ior   sysstdoutr   r7   r8   r9   seekreadlinerstripjoinr=   sum	readlines)r   r   
old_stdoutrC   verbose_outputheadertrue_headern_linesrE   rE   rF   test_verbose_output  s     
r   c              C   s   ddl m}  dd l}|j}|  |_tdddd}|tt |j}||_|d |	 
 }ddgd	gd  d
 }||ksttdd | D }d|kstd S )Nr   )r   rP   r#   r$   )r0   r,   r   r   z%10sz%16s)r   z
Train LosszRemaining Timec             s   s   | ]
}d V  qdS )r#   NrE   )r   r   rE   rE   rF   r     s    z+test_more_verbose_output.<locals>.<genexpr>)r   r   r   r   r   r7   r8   r9   r   r   r   r   r=   r   r   )r   r   r   rC   r   r   r   r   rE   rE   rF   test_more_verbose_output  s    
r   Clsc             C   s   t jddd\}}| ddd}||| | dddd}||| |jdd ||| | tkr|t|||| n,t|||| t|||| d S )	NrP   r#   )r)   r,   rh   )r0   rL   T)r0   rL   
warm_start)r0   )	r   ri   r7   
set_paramsr   r   r5   r   r   )r   r8   r9   estest_wsrE   rE   rF   test_warm_start  s    r   c             C   sv   t jddd\}}| ddd}||| | dddd}||| |jdd ||| t|||| d S )	NrP   r#   )r)   r,   i,  )r0   rL   T)r0   rL   r   )r0   )r   ri   r7   r   r   r5   )r   r8   r9   r   r   rE   rE   rF   test_warm_start_n_estimators  s    r   c             C   s   t jddd\}}| dddd}||| |jddd ||| |jd	 jdksZtx,tdd
D ]}|j| df jdksftqfW d S )NrP   r#   )r)   r,   T)r0   rL   r   n   r$   )r0   rL   )r   r      r   )r   ri   r7   r   r<   rL   r=   range)r   r8   r9   r   irE   rE   rF   test_warm_start_max_depth  s    r   c             C   sv   t jddd\}}| ddd}||| | dddd}||| |jdd ||| t|||| d S )	NrP   r#   )r)   r,   )r0   rL   T)r0   rL   r   F)r   )r   ri   r7   r   r   r5   )r   r8   r9   r   Zest_2rE   rE   rF   test_warm_start_clear  s    r   c          	   C   s^   t jddd\}}| dddd}||| |jdd tt ||| W d Q R X d S )NrP   r#   )r)   r,   T)r0   rL   r   r   )r0   )r   ri   r7   r   r2   r3   r4   )r   r8   r9   r   rE   rE   rF   !test_warm_start_zero_n_estimators  s    r   c          	   C   s^   t jddd\}}| dddd}||| |jdd tt ||| W d Q R X d S )NrP   r#   )r)   r,   T)r0   rL   r   c   )r0   )r   ri   r7   r   r2   r3   r4   )r   r8   r9   r   rE   rE   rF   $test_warm_start_smaller_n_estimators   s    r   c             C   sh   t jddd\}}| ddd}||| t|}|j|jdd ||| t|||| d S )NrP   r#   )r)   r,   )r0   rL   T)r0   r   )r   ri   r7   r   r   r0   r   r5   )r   r8   r9   r   est2rE   rE   rF   "test_warm_start_equal_n_estimators+  s    r   c             C   s   t jddd\}}| dddd}||| |jddd ||| t|jd d td t|jd	d  d
ktjdtd d S )NrP   r#   )r)   r,   T)r0   rL   r   r   g      ?)r0   rK   ig        r&   )r   )	r   ri   r7   r   r   r   r?   r   bool)r   r8   r9   r   rE   rE   rF   test_warm_start_oob_switch9  s    r   c             C   s   t jddd\}}| ddddd}||| | dddddd}||| |jdd	 ||| t|jd d |jd d  d S )
NrP   r#   )r)   r,   rh   g      ?)r0   rL   rK   r,   T)r0   rL   rK   r,   r   )r0   )r   ri   r7   r   r   r   )r   r8   r9   r   r   rE   rE   rF   test_warm_start_oobG  s    r   c       
      C   s   t jddd\}}tttg}| dddddd}||| || |jdd ||| ||}x|D ]~}||}| dddddd}||| || |jdd ||| ||}	t|j	d d |j	d d  t||	 qlW d S )	NrP   r#   )r)   r,   g      ?T)r0   rL   rK   r,   r   rh   )r0   )
r   ri   r   r   r   r7   r5   r   r   r   )
r   r8   r9   Zsparse_matrix_typeZ	est_denseZy_pred_denseZsparse_constructorX_sparseZ
est_sparseZy_pred_sparserE   rE   rF   test_warm_start_sparseX  s2    





r   c             C   s   t jddd\}}| dddd}| dddd}||| |jdd ||| t|}||| |jdd ||| t|||| d S )NrP   r#   )r)   r,   T)r0   r,   r   r   )r0   )r   ri   r7   r   r?   r   r   r5   )r   r8   r9   Zest_cZest_fortranZ	X_fortranrE   rE   rF   test_warm_start_fortran|  s    
r   c             C   s   | dkrdS dS dS )z#Returns True on the 10th iteration.	   TFNrE   )r   r   localsrE   rE   rF   early_stopping_monitor  s    r  c             C   s  t jddd\}}| ddddd}|j||td |jdks@t|jjd d	ksTt|jjd d	ksht|j	jd d	ks|t|j
d
d ||| |jd
kst|jjd d
kst|jjd d
kst| dddddd}|j||td |jdkst|jjd d	kst|jjd d	ks&t|j	jd d	ks<t|j
d
dd ||| |jd
ksft|jjd d
ks|t|jjd d
kst|j	jd d
kstd S )NrP   r#   )r)   r,   r   g      ?)r0   rL   r,   rK   )Zmonitorr   r&      )r0   T)r0   rL   r,   rK   r   F)r0   r   )r   ri   r7   r  r0   r=   r<   rB   r>   r   r   )r   r8   r9   r   rE   rE   rF   test_monitor_early_stopping  s2    r  c              C   s   ddl m}  tjddd\}}d}tdd d|d d}||| |jd	 j}|j|ks\t	|j
|j
| k jd |d ks~t	d S )
Nr   )	TREE_LEAFrP   r#   )r)   r,   rr   r   )r0   rL   r,   r   )r   r   )sklearn.tree._treer  r   ri   r   r7   r<   tree_rL   r=   children_leftrB   )r  r8   r9   kr   treerE   rE   rF   test_complete_classification  s    r
  c              C   sb   ddl m}  d}tdd d|d d}|tt |jd j}|j|j| k j	d |d ks^t
d S )Nr   )r  rr   r   r#   )r0   rL   r,   r   )r"   r   )r  r  r   r7   rb   rc   r<   r  r  rB   r=   )r  r  r   r	  rE   rE   rF   test_complete_regression  s    r  c           	   C   st   t ddddd} | tt | t}tt|}t|ddd t ddddd} tt	 | tt W d Q R X d S )	Nr   r#   zero)r0   rL   r,   rM   gp=
ף?r$   )r   rI   )
r   r7   rb   rc   r5   r   r   r2   r3   r4   )r   rv   rw   rE   rE   rF   test_zero_estimator_reg  s    

r  c           	   C   s   t j} tt j}tddddd}|| | || |dksBt|dk}d||< d|| < tddddd}|| | || |dksttddddd}t	
t || | W d Q R X d S )Nr   r#   r  )r0   rL   r,   rM   gQ?r   rI   )rz   r|   r?   r   r{   r   r7   rj   r=   r2   r3   r4   )r8   r9   r   maskrE   rE   rF   test_zero_estimator_clf  s"    
r  GBEstimatorc             C   st   t jddd\}}d}| d|d||}|jd j}|jdksDt| dd||}|jd j}|jdksptd S )NrP   r#   )r)   r,   rr   )rL   r   )r   r   )rL   )r   ri   r7   r<   r  rL   r=   )r  r8   r9   r  r   r	  rE   rE   rF   test_max_leaf_nodes_max_depth  s    r  c             C   sL   t jddd\}}| dd}||| x|jjD ]}|jdks2tq2W d S )NrP   r#   )r)   r,   g?)min_impurity_decrease)r   ri   r7   r<   Zflatr  r=   )r  r8   r9   r   r	  rE   rE   rF   test_min_impurity_decrease  s
    
r  c              C   sp   t ddd} | ddgddggddg | jjd dks<t| ddgddggddg | jjd dksltd S )Nr&   T)r0   r   r   r#   r$   r%   )r   r7   r<   rB   r=   )rC   rE   rE   rF   %test_warm_start_wo_nestimators_change(  s
    r  c           	   C   s   t dddd} tt | t W d Q R X | tt t	| 
tt | t}t|dksftt|dksxt| t }t|d d df td|  | jj|jddd	d}t	|t d S )
Nr/   rP   r#   )r-   r0   r,   g        g      ?r$   )r   r   )r   r2   r3   r4   r   r6   r7   r8   r9   r   r5   r:   r?   r   r=   r   Zravelr   r   r   r   r   )rC   r   rj   rv   rE   rE   rF   test_probability_exponential2  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g}xFdD ]>}t dd|d}|j| ||d |ddggd dks:tq:W d S )	Nr#   r   )r_   rq   rf   ra   g      ?r$   )rH   r0   r-   )rs   g      ?)r   r7   r5   r=   )r8   r9   rs   r-   gbrE   rE   rF   *test_non_uniform_weights_toy_edge_case_regJ  s    
r  c              C   sz   ddgddgddgddgg} ddddg}ddddg}x@dD ]8}t d|d}|j| ||d t|ddggdg q:W d S )Nr#   r   )r.   r/   r   )r0   r-   )rs   )r   r7   r   r5   )r8   r9   rs   r-   r  rE   rE   rF   *test_non_uniform_weights_toy_edge_case_clfU  s    
r  EstimatorClasssparse_matrixc       	      C   s\  t jddddd\}}|d d df }||}| ddddd	||}| ddddd	||}t|||| t|||| t|j|j t|||| t|||| t| trXt|	||	| t|
||
| t|||| t|||| x.t||||D ]\}}t|| q@W d S )
Nr   2   r#   r   )r,   r)   r*   	n_classesr&   r$   gHz>)r0   r,   rL   r  )r   Zmake_multilabel_classificationr7   r   rA   r5   r   
issubclassr   r   Zpredict_log_probar   zipZstaged_decision_function)	r  r  r9   r8   r   ZdensesparseZ
res_sparseresrE   rE   rF   test_sparse_input`  s6    r!  c              C   s  t ddd\} }tdddddd}tdddddd}t| |dd	\}}}}xl|dd
f|ddf|ddf|dd
ffD ]D\}}	}
|j|	d ||| |j|
kst|||dksptqpW tddddd}|| | tddddd}|| | |jdkst|jdkstd S )Ni  r   )r)   r,   r&   g?r%   *   )r0   rQ   rH   rL   r,   )r,         gMbP?F   )tolgffffff?r  )r0   rH   rL   r,   r  )	r	   r   r   r   r   r7   n_estimators_r=   rj   )r8   r9   gbcgbrrk   rl   rm   rn   r   r&  Zearly_stop_n_estimatorsrE   rE   rF   %test_gradient_boosting_early_stopping  s>    r*  c              C   s  t ddd\} }tddddddd	}t|jd
d}t|jdd}tddddddd}t|jd
d}t|jdd}t| |dd\}}	}
}|||
 |||
 |j|jkst|||
 |||
 |j|jkst|||
 |||
 |j|jk st|j|jk std S )Ni  r   )r)   r,   rP   r&   g?r%   r"  )r0   rQ   validation_fractionrH   rL   r,   g333333?)r+  r   )rQ   )r0   rQ   rH   rL   r+  r,   )r,   )	r	   r   r   r   r   r   r7   r'  r=   )r8   r9   r(  Zgbc2Zgbc3r)  Zgbr2Zgbr3rk   rl   rm   rn   rE   rE   rF   *test_gradient_boosting_validation_fraction  s<    r,  c           	   C   s\   ddgddgddgddgg} ddddg}t dd}tjtdd	 || | W d Q R X d S )
Nr#   r$   r%   rr   r   r   )rQ   z0The least populated class in y has only 1 member)rZ   )r   r2   r3   r4   r7   )r8   r9   r(  rE   rE   rF   test_early_stopping_stratified  s    
r-  c               C   s   t dddS )Nr%   r#   )r  Zn_clusters_per_class)r	   rE   rE   rE   rF   _make_multiclass  s    r.  z!gb, dataset_maker, init_estimatorzbinary classificationzmulticlass classificationZ
regressionc          	   C   s   | \}}t jdd}| }| |dj|||d t| }| |d|| tjtdd | |dj|||d W d Q R X d S )Nr"  rP   )rM   )rs   z*estimator.*does not support sample weights)rZ   )	r?   r   r   r   r7   r   r2   r3   r4   )r  Zdataset_makerZinit_estimatorr8   r9   rs   Zinit_estrE   rE   rF    test_gradient_boosting_with_init  s    

r/  c           	   C   s   t dd\} }tt }t|d}|| | tjtdd" |j| |t	| j
d d W d Q R X tjtdd8 tdd	d
}t|d}|j| |t	| j
d d W d Q R X d S )Nr   )r,   )rM   z>The initial estimator Pipeline does not support sample weights)rZ   )rs   znu <= 0 or nu > 1r   g      ?)gammanu)r
   r   r   r   r7   r2   r3   r4   r?   rt   rB   r    )r8   r9   rM   r  rE   rE   rF   )test_gradient_boosting_with_init_pipeline  s    


&
r2  zestimator, missing_method)rM   r   r5   c          	   C   s2   d| }t jt|d | tt W d Q R X d S )NzFThe init parameter must be a valid estimator and support both fit and )rZ   )r2   r3   r4   r7   r8   r9   )r   Zmissing_methodmessagerE   rE   rF   )test_gradient_boosting_init_wrong_methods,  s    r4  c           	   C   sd   dggd } ddgdgd  }t dddd}tjtdd || | W d Q R X t ddd	d}d S )
Nr#   r&   r   r'   r   )rQ   r,   r+  z0The training data after the early stopping split)rZ   rr   )r   r2   r3   r4   r7   )r8   r9   r  rE   rE   rF   test_early_stopping_n_classes?  s    r5  c              C   s>   t d} t d}t | |}t|jt jdt jd d S )N)r&   r&   )r&   r&   )r   )r?   r   rt   r   r7   r   r   r   )r8   r9   r)  rE   rE   rF   'test_gbr_degenerate_feature_importancesU  s    

r6  c           	   C   sJ   t d} t d}t | |}d}tjt|d |j W d Q R X d S )N)r&   r&   )r&   z%Attribute `n_classes_` was deprecated)rZ   )	r?   r   rt   r   r7   r2   r   FutureWarning
n_classes_)r8   r9   r)  r   rE   rE   rF   test_gbr_deprecated_attr^  s    

r9  z,ignore:Attribute `n_classes_` was deprecatedc           	   C   s6   t  } t j d}tjt|d | j W d Q R X d S )Nz$ object has no n_classes_ attribute.)rZ   )r   __name__r2   r3   r   r8  )r)  r   rE   rE   rF   $test_attr_error_raised_if_not_fittedj  s    r;  r   Zmae)	criterionc          	   C   s.   d}t jt|d | tt W d Q R X d S )NzQcriterion='mae' was deprecated in version 0.24 and will be removed in version 1.1)rZ   )r2   r   r7  r7   r8   r9   )r   r   rE   rE   rF   test_criterion_mae_deprecationv  s    r=  c          	   C   sV   t ddgddgg}t ddg}|  ||}tjtdd |j W d Q R X d S )Nr#   r$   r%   rr   r   z`n_features_` was deprecated)rZ   )r?   r   r7   r2   r   r7  Zn_features_)r   r8   r9   r   rE   rE   rF   test_n_features_deprecation  s
    r>  c          	   C   s   | ddd}t jtdd |tt W d Q R X | ddd}|tt t|drlt|t|t nt|	t|	t d S )Nrw   r   )r<  r,   zCriterion 'mse' was deprecated)rZ   rq   r   )
r2   r   r7  r7   r8   r9   r   r   r   r5   )r   est1r   rE   rE   rF   test_criterion_mse_deprecated  s    
r@  zold_loss, new_loss)re   rq   )Zladrf   c          	   C   sl   t | dd}tjtd|  dd |tt W d Q R X t |dd}|tt t|t|t d S )Nr   )r-   r,   z
The loss 'z' was deprecated)rZ   )	r   r2   r   r7  r7   r8   r9   r   r5   )Zold_lossZnew_lossr?  r   rE   rE   rF   test_loss_deprecated  s    rA  )__doc__r   numpyr?   Znumpy.testingr   Zscipy.sparser   r   r   Zscipy.specialr   r2   Zsklearnr   Zsklearn.baser   Zsklearn.datasetsr	   r
   Zsklearn.ensembler   r   Z#sklearn.ensemble._gradient_boostingr   Zsklearn.preprocessingr   r   Zsklearn.svmr   Zsklearn.metricsr   Zsklearn.model_selectionr   Zsklearn.utilsr   r   Zsklearn.utils._mockingr   Zsklearn.utils._testingr   r   r   r   Zsklearn.exceptionsr   r   Zsklearn.dummyr   r   Zsklearn.pipeliner   Zsklearn.linear_modelr   r    ZGRADIENT_BOOSTING_ESTIMATORSr8   r9   r6   r:   rb   rc   r   r   r   Z	load_irisrz   Zpermutationr{   r   Zpermr|   markZparametrizerG   r^   rd   rg   rp   rx   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   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/  r2  r4  r5  r6  r9  filterwarningsr;  r=  r>  r@  rA  rE   rE   rE   rF   <module>   s\  (























	

#$+ ! $%

 ).+
	