U
    ½mœdM³  ã                   @   sÐ  d 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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!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.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 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jH Id(d)¡d*d+„ ƒZJejH Id(d)¡d,d-„ ƒZKejH Id(d.¡ejH Id/d0¡d1d2„ ƒƒZLejH Id/d0¡ejH Id3d4¡d5d6„ ƒƒZMd7d8„ ZNejH Id9ee<e=feeBjGeBjDfg¡d:d;„ ƒZOd<d=„ ZPd>d?„ ZQd@dA„ ZRdBdC„ ZSdDdE„ ZTejH UdF¡dGdH„ ƒZVdIdJ„ ZWdKdL„ ZXejH IdMe7¡dNdO„ ƒZYdPdQ„ ZZdRdS„ Z[dTdU„ Z\dVdW„ Z]dXdY„ Z^dZd[„ Z_d\d]„ Z`d^d_„ Zad`da„ Zbdbdc„ Zcddde„ Zddfdg„ ZeejH Idhe7¡didj„ ƒZfejH Idhe7¡dkdl„ ƒZgejH Idhe7¡dmdn„ ƒZhejH Idhe7¡dodp„ ƒZiejH Idhe7¡dqdr„ ƒZjejH Idhe7¡dsdt„ ƒZkejH Idhe7¡dudv„ ƒZlejH Idhe7¡dwdx„ ƒZmejH Idhe7¡dydz„ ƒZnejH Idhe7¡d{d|„ ƒZod}d~„ ZpejH Idhe7¡dd€„ ƒZqd�d‚„ Zrdƒd„„ Zsd…d†„ Ztd‡dˆ„ ZuejH Id‰e7¡dŠd‹„ ƒZvejH Id‰e7¡dŒd�„ ƒZwdŽd�„ Zxd�d‘„ Zyd’d“„ Zzd”d•„ Z{e(ejH Id–eef¡ejH Id—ee	e
f¡d˜d™„ ƒƒƒZ|ejH Idšeeg¡d›dœ„ ƒZ}d�dž„ Z~dŸd „ Zd¡d¢„ Z€d£d¤„ Z�ejHjId¥eee/fee�e/feee0fgd¦d§d¨gd©�dªd«„ ƒZ‚d¬d­„ Zƒd®d¯„ Z„d°d±„ Z…d²d³„ Z†ejH IdMeeg¡d´dµ„ ƒZ‡d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)Úscale)Úmean_squared_error)Útrain_test_split)Úcheck_random_stateÚ
tosequence)ÚNoSampleWeightWrapper)Úassert_array_almost_equal)Úassert_array_equal)Úskip_if_32bit)ÚInvalidParameterError)ÚDataConversionWarning)ÚNotFittedError)ÚDummyClassifierÚDummyRegressor)Úmake_pipeline)ÚLinearRegression)ÚNuSVRéþÿÿÿéÿÿÿÿé   é   é   éd   é   é   é
   é   )Ú	n_samplesÚ
n_featuresZn_informativeÚnoiseÚrandom_stateÚloss©Úlog_lossÚexponentialc              	   C   s¦   t | d|d�}t t¡� | t¡ W 5 Q R X | tt¡ t	| t¡t
ƒ dt|jƒks\t‚|jd d… |jdd …  }t |dk¡sŠt‚| t¡}|jdks¢t‚d S )Nr'   ©r-   Ún_estimatorsr,   r    r!   ç        )é   r'   r!   )r   ÚpytestÚraisesÚ
ValueErrorÚpredictÚTÚfitÚXÚyr   Útrue_resultÚlenÚestimators_ÚAssertionErrorÚtrain_score_ÚnpÚanyÚapplyÚshape)r-   Úglobal_random_seedÚclfZlog_loss_decreaseÚleaves© rI   úf/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/ensemble/tests/test_gradient_boosting.pyÚtest_classification_toy>   s      ÿ
rK   c                 C   s  t jd|d�\}}|d d… |dd …  }}|d d… |dd …  }}dd| |dœ}tf ddi|—Ž}	|	 ||¡ tf dd	i|—Ž}
|
 ||¡ |	 ||¡|
 ||¡k s¬t‚d	d| |d
œ}tf ddi|—Ž}| ||¡ tf ddi|—Ž}| ||¡ | ||¡| ||¡k�st‚d S )Néà.  ©r)   r,   éÐ  r!   ç      ð?)Ú	max_depthÚlearning_rater-   r,   r2   r$   éÈ   )r2   rQ   r-   r,   rP   Úmax_leaf_nodesr'   )r   Úmake_hastie_10_2r   r:   Úscorer@   )r-   rF   r;   r<   ÚX_trainÚX_testÚy_trainÚy_testZcommon_paramsZgbrt_100_stumpsZgbrt_200_stumpsZgbrt_stumpsZgbrt_10_nodesrI   rI   rJ   Útest_classification_syntheticS   s.    üürZ   )Úsquared_errorÚabsolute_errorÚhuberÚ	subsample)rO   ç      à?c           
   
   C   s”   t  ttƒ¡}d }d |d| fD ]n}td| d|d|dd�}|jtt|d� | t¡}|jdksbt	‚| 
t¡}tt|ƒ}	|	dk s‚t	‚|d k	rŠ|}q d S )	Nr"   é   r%   r_   )r2   r-   rP   r^   Úmin_samples_splitr,   rQ   ©Úsample_weight)r$   r`   gš™™™™™©?)rB   Úonesr>   Úy_regr   r:   ÚX_regrD   rE   r@   r8   r   )
r-   r^   rF   rd   Zlast_y_predrc   ÚregrH   Úy_predÚmserI   rI   rJ   Útest_regression_dataset|   s(    ù



	rj   rc   )Nr!   c                 C   sv   |dkrt  ttjƒ¡}t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!   r$   r/   ©r2   r-   r,   r^   rb   çÍÌÌÌÌÌì?)é–   r$   r#   )rB   rd   r>   ÚirisÚtargetr   r:   ÚdatarU   r@   rD   rE   )r^   rc   rF   rG   rU   rH   rI   rI   rJ   Ú	test_iris¥   s    ürq   c                 C   sŒ  t | ƒ}ddddd| dœ}tjd|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 �st‚tj	d|d�\}}|d d
… |d d
…  }}|d
d … |d
d …  }}tf |Ž}	|	 ||¡ t||	 |¡ƒ}
|
dk �sˆt‚d S )Nr$   r%   r"   çš™™™™™¹?r[   )r2   rP   ra   rQ   r-   r,   é°  rO   ©r)   r,   r+   rR   g      @rM   g     ˆ£@gš™™™™™™?)
r   r   Úmake_friedman1r   r:   r   r8   r@   Zmake_friedman2Zmake_friedman3)rF   r,   Zregression_paramsr;   r<   rV   rX   rW   rY   rG   ri   rI   rI   rJ   Útest_regression_synthetic¹   s:    ú



rv   zGradientBoosting, X, yc                 C   s2   | ƒ }t |dƒrt‚| ||¡ t |dƒs.t‚d S )NÚfeature_importances_)Úhasattrr@   r:   )ZGradientBoostingr;   r<   ZgbdtrI   rI   rJ   Útest_feature_importanceså   s    
ry   c              	   C   sœ   t d| d�}t t¡� | t¡ W 5 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 )Nr$   ©r2   r,   r3   rO   r!   ©Zaxisr   )r   r5   r6   r7   Úpredict_probar9   r:   r;   r<   r   r8   r=   rB   Úallr@   Úclasses_ÚtakeÚargmax)rF   rG   Úy_probarh   rI   rI   rJ   Útest_probability_logõ   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 5 Q R X d S )Nr   r!   r$   rz   zty contains 1 class after sample_weight trimmed classes with zero weights, while a minimum of 2 classes are required.©Úmatchrb   )r   r5   r6   r7   r:   r;   r<   )rc   rG   ÚmsgrI   rI   rJ   Ú$test_single_class_with_sample_weight	  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 5 Q R X t | ¡}t	j
tdd�� t|j||j|ƒ W 5 Q R X d S )	Nr$   r!   rM   rz   r    z3When X is a sparse matrix, a CSR format is expectedrƒ   z X should be C-ordered np.ndarray)r   rT   r   r   r:   rB   ÚzerosrE   Zreshaper5   r6   r7   r   r?   rQ   Úasfortranarray)Úxr<   Zx_sparse_cscrG   rU   Úerr_msgZ	x_fortranrI   rI   rJ   Ú test_check_inputs_predict_stages  s    
r‹   c           	      C   s�   t jd| d�\}}|d d… |dd …  }}|d d… |dd …  }}tddddd| d�}| ||¡ | || |¡¡}|d	k sŒtd
| ƒ‚d S )NrL   rM   rN   r$   é   r"   rr   )r2   ra   rP   rQ   Úmax_featuresr,   r_   zGB failed with deviance %.4f)r   rT   r   r:   Z_lossÚdecision_functionr@   )	rF   r;   r<   rV   rW   rX   rY   Úgbrtr/   rI   rI   rJ   Útest_max_feature_regression$  s    úr�   c                    s¢   | ƒ ‰ ˆ j ˆ j }}t|||d�\}}}}tdddd|d�}| ||¡ t |j¡ddd… }	‡ fd	d
„|	D ƒ}
|
d dks€t‚t	|
dd… ƒdddhksžt‚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]   rr   r4   r$   )r-   rQ   rS   r2   r,   Nr    c                    s   g | ]}ˆ j | ‘qS rI   )Zfeature_names)Ú.0Ús©Z
californiarI   rJ   Ú
<listcomp>Q  s     z6test_feature_importance_regression.<locals>.<listcomp>r   ZMedIncr!   r%   Z	LongitudeZAveOccupZLatitude)
rp   ro   r   r   r:   rB   Zargsortrw   r@   Úset)Zfetch_california_housing_fxtrF   r;   r<   rV   rW   rX   rY   rg   Z
sorted_idxZsorted_featuresrI   r”   rJ   Ú"test_feature_importance_regression8  s&    
  ÿûr—   z7ignore:`max_features='auto'` has been deprecated in 1.1c                  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sŠt	‚t
ddd�}| ||¡ |jt|d ƒks¸t	‚t
ddd�}| ||¡ |jtt |¡ƒksèt	‚t
dd	d�}| ||¡ |jtt |¡ƒk�st	‚t
dd
| jd  d�}| ||¡ |jdk�sLt	‚d S )NrL   r!   rM   rN   Úauto)r2   r�   ç333333Ó?ÚsqrtÚlog2g{®Gáz„?)r   rT   rE   r   r:   Zmax_features_ÚintrB   rš   r@   r   r›   )r;   r<   Ú_r*   rV   rX   r�   rI   rI   rJ   Ú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 5 Q R X | 
||¡ | |¡}| |¡D ]}|j|jksŒt‚qŒt||ƒ d S )Nrs   r!   rO   rt   rR   ©Zdtype)r   ru   r   r5   r6   r7   rB   ÚfromiterÚstaged_predictÚfloat64r:   r8   rE   r@   r   )r;   r<   rV   rX   rW   rG   rh   rI   rI   rJ   Ú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 5 Q R X | 
||¡ | |¡D ]}|j|jks’t‚q’t| |¡|ƒ | |¡D ].}|jd |jd ksÞt‚d	|jd ksÂt‚qÂt| |¡|ƒ d S )
Nrs   r!   rM   rR   é   ©r2   rŸ   r   r"   )r   rT   r   r5   r6   r   rB   r    Zstaged_predict_probar¢   r:   r¡   rE   r@   r   r8   r   r|   )	r;   r<   rV   rX   rW   rY   rG   rh   Zstaged_probarI   rI   rJ   Útest_staged_predict_proba”  s    
 r¦   Ú	Estimatorc           	   
   C   sº   t j |¡}|jdd�}d|d d …df   t¡d }| ƒ }| ||¡ dD ]h}t|d| d ƒ}|d krjqLtj	dd	�� t
||ƒƒ}W 5 Q R X d|d d d …< t  |d dk¡sLt‚qLd S )
N)r'   r#   )Úsizer%   r   r!   )r8   rŽ   r|   Zstaged_T)Úrecord)rB   ÚrandomÚRandomStateÚuniformZastyperœ   r:   ÚgetattrÚwarningsÚcatch_warningsÚlistr}   r@   )	r§   rF   Úrngr;   r<   Z	estimatorÚfuncZstaged_funcZstaged_resultrI   rI   rJ   Útest_staged_functions_defensive¯  s    r³   c                  C   s¨   t ddd�} |  tt¡ t|  t¡tƒ dt| j	ƒks:t
‚z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s¤t
‚d S )Nr$   r!   rz   r   )Úprotocol)r   r:   r;   r<   r   r8   r9   r=   r>   r?   r@   ÚcPickleÚImportErrorÚpickleÚdumpsÚHIGHEST_PROTOCOLÚloads)rG   r·   Zserialized_clfrI   rI   rJ   Útest_serializationÂ  s    
r»   c               	   C   s”   t ddd�} t t¡� |  tt ttƒ¡¡ W 5 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 )Nr$   r!   rz   r"   )r!   rŸ   )r   r5   r6   r7   r:   r;   rB   rd   r>   r   r8   r±   Úrandr   r¢   ©rG   rI   rI   rJ   Útest_degenerate_targetsÖ  s     r¾   c                 C   s\   t dddd| d�}| tt¡ | t¡}t ddd| d�}| tt¡ | t¡}t||ƒ d S )Nr$   Úquantiler%   r_   )r2   r-   rP   Úalphar,   r\   )r2   r-   rP   r,   )r   r:   rf   re   r8   r   )rF   Zclf_quantileZ
y_quantileZclf_aeZy_aerI   rI   rJ   Ú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 )Nr$   r!   rz   )r   r   ÚmapÚstrr<   r:   r;   r   r8   r9   r=   r>   r?   r@   )rG   Zsymbol_yrI   rI   rJ   Ú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 ©Nr$   r!   rz   rŸ   )r   rB   Úasarrayr<   Zfloat32r:   r;   r   r8   r9   r=   r>   r?   r@   )rG   Zfloat_yrI   rI   rJ   Útest_float_class_labels  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 5 Q R X t|  t¡tƒ dt| jƒkszt‚d S )Nr$   r!   rz   rŸ   z†A column-vector y was passed when a 1d array was expected. Please change the shape of y to \(n_samples, \), for example using ravel().rƒ   )r   rB   rÆ   r<   Úint32Znewaxisr5   Úwarnsr   r:   r;   r   r8   r9   r=   r>   r?   r@   )rG   Úy_Zwarn_msgrI   rI   rJ   Útest_shape_y  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sˆt‚t jtt jd�}t  |¡}tddd�}| t|¡ t| t¡t	ƒ dt
|jƒksÜt‚t jtt jd�}t  |¡}tddd�}| t|¡ t| t¡t	ƒ dt
|jƒk�s2t‚d S rÅ   )rB   rˆ   r;   r   r:   r<   r   r8   r9   r=   r>   r?   r@   ZascontiguousarrayrÆ   rÈ   )ZX_rG   rÊ   rI   rI   rJ   Útest_mem_layout(  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 )Nr$   r!   r_   ©r2   r,   r^   r   rŒ   gR¸…ëQÈ?g333333Ã?g¸…ëQ¸¾?g¸…ëQ¸¾¿g)\�Âõ(¼¿r"   )Údecimal)
r   r:   r;   r<   Úoob_improvement_rE   r@   r   rB   Úarrayr½   rI   rI   rJ   Útest_oob_improvementE  s      ÿrÑ   c               	   C   s:   t dddd�} |  tt¡ t t¡� | j W 5 Q R X d S )Nr$   r!   rO   rÍ   )r   r:   r;   r<   r5   r6   ÚAttributeErrorrÏ   r½   rI   rI   rJ   Útest_oob_improvement_raiseP  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 )Nr$   r/   r!   r_   rk   rl   r   )
r   r:   rn   rp   ro   rU   r@   rÏ   rE   r2   )rG   rU   rI   rI   rJ   Útest_oob_multilcass_irisX  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s†t‚tdd„ | ¡ D ƒƒ}d|ks¨t‚d S )Nr   ©ÚStringIOr$   r!   çš™™™™™é?)r2   r,   Úverboser^   ú ú%10sú%16sr#   )ÚIterú
Train LosszOOB ImproveúRemaining Timec                 s   s   | ]
}d V  qdS ©r!   NrI   ©r’   ÚlrI   rI   rJ   Ú	<genexpr>ƒ  s     z&test_verbose_output.<locals>.<genexpr>é   ©ÚiorÖ   ÚsysÚstdoutr   r:   r;   r<   ÚseekÚreadlineÚrstripÚjoinr@   ÚsumÚ	readlines©rÖ   ræ   Z
old_stdoutrG   Zverbose_outputÚheaderZtrue_headerZn_linesrI   rI   rJ   Útest_verbose_outputh  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s„t‚tdd„ | ¡ D ƒƒ}d|ks¦t‚d S )Nr   rÕ   r$   r!   r"   )r2   r,   rØ   rÙ   rÚ   rÛ   )rÜ   rÝ   rÞ   c                 s   s   | ]
}d V  qdS rß   rI   rà   rI   rI   rJ   râ   Ÿ  s     z+test_more_verbose_output.<locals>.<genexpr>rä   rî   rI   rI   rJ   Útest_more_verbose_outputˆ  s    
rñ   ÚClsc                 C   s°   t jd|d�\}}| dd|d�}| ||¡ | ddd|d�}| ||¡ |jdd� | ||¡ | tkr€t| |¡| |¡ƒ n,t| |¡| |¡ƒ t| |¡| |¡ƒ d S )	Nr$   rM   rR   r!   ©r2   rP   r,   T©r2   rP   Ú
warm_startr,   r¥   )	r   rT   r:   Ú
set_paramsr   r   r8   r   r|   ©rò   rF   r;   r<   ÚestÚest_wsrI   rI   rJ   Útest_warm_start¤  s        ÿrú   c                 C   sz   t jd|d�\}}| dd|d�}| ||¡ | ddd|d�}| ||¡ |jdd� | ||¡ t| |¡| |¡ƒ d S )	Nr$   rM   i,  r!   ró   Trô   r¥   )r   rT   r:   rö   r   r8   r÷   rI   rI   rJ   Ú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‚tdd
ƒD ]}|j| df jdksdt‚qdd S )Nr$   r!   rM   T©r2   rP   rõ   én   r"   ©r2   rP   ©r   r   é   r   )r   rT   r:   rö   r?   rP   r@   Úrange)rò   r;   r<   rø   ÚirI   rI   rJ   Ú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 )	Nr$   r!   rM   rþ   Trü   F)rõ   )r   rT   r:   rö   r   r8   )rò   r;   r<   rø   Zest_2rI   rI   rJ   Útest_warm_start_clearÛ  s    r  c              	   C   s^   t jddd�\}}| dddd�}| ||¡ |jdd� t t¡� | ||¡ W 5 Q R X d S )Nr$   r!   rM   Trü   éc   r¥   )r   rT   r:   rö   r5   r6   r7   ©rò   r;   r<   rø   rI   rI   rJ   Ú$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 )Nr$   r!   rM   rþ   T©r2   rõ   )r   rT   r:   r   rö   r2   r   r8   )rò   r;   r<   rø   Úest2rI   rI   rJ   Ú"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 )Nr$   r!   rM   Trü   rý   r_   )r2   r^   iöÿÿÿr3   r'   rŸ   )	r   rT   r:   rö   r   rÏ   rB   r‡   Úboolr  rI   rI   rJ   Útest_warm_start_oob_switch  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 )
Nr$   r!   rM   rR   r_   )r2   rP   r^   r,   T©r2   rP   r^   r,   rõ   r¥   )r   rT   r:   rö   r   rÏ   )rò   r;   r<   rø   rù   rI   rI   rJ   Útest_warm_start_oob  s        ÿr  c           
      C   sî   t jddd�\}}tttg}| dddddd�}| ||¡ | |¡ |jdd� | ||¡ | |¡}|D ]~}||ƒ}| dddddd�}| ||¡ | |¡ |jdd� | ||¡ | |¡}	t|j	d d… |j	d d… ƒ t||	ƒ qjd S )	Nr$   r!   rM   r_   Tr  rR   r¥   )
r   rT   r   r   r   r:   r8   rö   r   rÏ   )
rò   r;   r<   Zsparse_matrix_typeZ	est_denseZy_pred_denseZsparse_constructorÚX_sparseZ
est_sparseZy_pred_sparserI   rI   rJ   Útest_warm_start_sparse"  sB    
    ÿ

û

 ÿr  c                 C   sš   t jd|d�\}}| d|dd�}| d|dd�}| ||¡ |jdd� | ||¡ t |¡}| ||¡ |jdd� | ||¡ t| |¡| |¡ƒ d S )Nr$   rM   r!   T)r2   r,   rõ   r   r¥   )r   rT   r:   rö   rB   rˆ   r   r8   )rò   rF   r;   r<   Zest_cZest_fortranZ	X_fortranrI   rI   rJ   Útest_warm_start_fortranF  s    
r  c                 C   s   | dkrdS dS dS )z#Returns True on the 10th iteration.é	   TFNrI   )r  rø   ÚlocalsrI   rI   rJ   Úearly_stopping_monitorZ  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s¢t‚|jjd d
ks¶t‚|jjd d
ksÊt‚| dddddd�}|j||td� |jdksút‚|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�s’t‚|j	jd d
k�s¨t‚d S )Nr$   r!   rM   r¤   r_   )r2   rP   r,   r^   )Zmonitorr   r'   r`   r¥   T)r2   rP   r,   r^   rõ   Fr  )r   rT   r:   r  r2   r@   r?   rE   rA   rÏ   rö   r  rI   rI   rJ   Útest_monitor_early_stoppingb  s<        ÿ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_LEAFr$   r!   rM   r%   r¤   ©r2   rP   r,   rS   rÿ   )Úsklearn.tree._treer  r   rT   r   r:   r?   Útree_rP   r@   Úchildren_leftrE   )r  r;   r<   Úkrø   ÚtreerI   rI   rJ   Ú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  r%   r¤   r!   r  )r    r   )r  r  r   r:   rf   re   r?   r  r  rE   r@   )r  r  rø   r  rI   rI   rJ   Útest_complete_regression˜  s       ÿr  c                 C   sd   t dd� tt¡}t| t¡tƒ}tdd| ddd�}| tt¡ | t¡}tt|ƒ}||k s`t‚d S )NZmean)ZstrategyrŒ   r!   Úzeror_   )r2   rP   r,   ÚinitrQ   )r   r:   rf   re   r   r8   r   r@   )rF   ZbaselineZmse_baselinerø   rh   Zmse_gbdtrI   rI   rJ   Útest_zero_estimator_reg§  s    û

r"  c                 C   s�   t j}t t j¡}tdd| dd�}| ||¡ | ||¡dksBt‚|dk}d||< d|| < tdd| dd�}| ||¡ | ||¡dksŒt‚d S )Nr¤   r!   r   )r2   rP   r,   r!  g¸…ëQ¸î?r   )	rn   rp   rB   rÐ   ro   r   r:   rU   r@   )rF   r;   r<   rø   ÚmaskrI   rI   rJ   Ú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 )Nr$   r!   rM   r%   )rP   rS   rÿ   )rP   )r   rT   r:   r?   r  rP   r@   )r%  r;   r<   r  rø   r  rI   rI   rJ   Útest_max_leaf_nodes_max_depthÑ  s    r&  c                 C   sH   t jddd�\}}| dd�}| ||¡ |jjD ]}|jdks0t‚q0d S )Nr$   r!   rM   rr   )Úmin_impurity_decrease)r   rT   r:   r?   Zflatr'  r@   )r%  r;   r<   rø   r  rI   rI   rJ   Ú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'   Tr  r   r!   r"   r#   )r   r:   r?   rE   r@   r½   rI   rI   rJ   Ú%test_warm_start_wo_nestimators_changeí  s
    r)  c              	   C   sÊ   t dd| d�}t t¡� | t¡ W 5 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 )
Nr0   r$   r1   r3   rO   r!   r"   r{   r   )r   r5   r6   r7   r|   r9   r:   r;   r<   r   r8   r=   rB   r}   r@   rŽ   Zravelr   r   r~   r   r€   )rF   rG   r�   rU   rh   rI   rI   rJ   Útest_probability_exponential÷  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}dD ]>}t dd|d�}|j| ||d� | ddgg¡d dks8t‚q8d S )	Nr!   r   )r]   r[   r\   r¿   rO   r"   )rQ   r2   r-   rb   r_   )r   r:   r8   r@   ©r;   r<   rc   r-   ÚgbrI   rI   rJ   Ú*test_non_uniform_weights_toy_edge_case_reg  s    r-  c                  C   sv   ddgddgddgddgg} ddddg}ddddg}dD ]8}t d|d�}|j| ||d� t| ddgg¡dgƒ q8d S )Nr!   r   r.   rŒ   )r2   r-   rb   )r   r:   r   r8   r+  rI   rI   rJ   Ú*test_non_uniform_weights_toy_edge_case_clf  s    r.  ÚEstimatorClassÚsparse_matrixc           	      C   sX  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ƒ�rTt| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ t| |¡| |¡ƒ t| |¡| |¡ƒ t| |¡| |¡ƒD ]\}}t||ƒ �q>d S )
Nr   é2   r!   r¤   )r,   r)   r*   Ú	n_classesr'   r"   gH¯¼šò×z>)r2   r,   rP   r'  )r   Zmake_multilabel_classificationr:   r   rD   r8   rw   Ú
issubclassr   r|   Zpredict_log_probarŽ   ÚzipZstaged_decision_function)	r/  r0  r<   r;   r  ZdenseÚsparseZ
res_sparseÚresrI   rI   rJ   Útest_sparse_input%  sd       ÿ
   ÿ þ   ÿ þ ÿ ÿ ÿþr7  ÚGradientBoostingEstimatorc           
      C   s´   t ddd�\}}d}| |dddddd�}| |ddddd	d�}t||dd
�\}}}}	| ||¡ | ||¡ |j|j  k r‚|k sˆn t‚| ||	¡dksœt‚| ||	¡dks°t‚d S )Néè  r   rM   r'   rr   r#   é*   )r2   Ún_iter_no_changerQ   rP   r,   Ztolgü©ñÒMbP?r‘   gffffffæ?)r	   r   r:   Ún_estimators_r@   rU   )
r8  r;   r<   r2   Zgb_large_tolZgb_small_tolrV   rW   rX   rY   rI   rI   rJ   Ú%test_gradient_boosting_early_stoppingR  s0    ú	ú	r=  c                  C   sh   t ddd�\} }tddddd�}| | |¡ td	dddd�}| | |¡ |jdksVt‚|jd	ksdt‚d S )
Nr9  r   rM   r1  rr   r#   r:  )r2   rQ   rP   r,   r`   )r	   r   r:   r   r<  r@   )r;   r<   ÚgbcÚgbrrI   rI   rJ   Ú-test_gradient_boosting_without_early_stoppingx  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s¶t‚| ||
¡ | ||
¡ |j|jksÞt‚| ||
¡ | ||
¡ |j|jk �st‚|j|jk �st‚d S )Nr9  r   rM   r$   r'   rr   r#   r:  )r2   r;  Úvalidation_fractionrQ   rP   r,   r™   )rA  r¤   ©r;  )r2   r;  rQ   rP   rA  r,   r‘   )	r	   r   r   rö   r   r   r:   r<  r@   )r;   r<   r>  Zgbc2Zgbc3r?  Zgbr2Zgbr3rV   rW   rX   rY   rI   rI   rJ   Ú*test_gradient_boosting_validation_fraction‹  s@    úúrC  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 5 Q R X d S )
Nr!   r"   r#   r%   rŒ   r   rB  z0The least populated class in y has only 1 memberrƒ   ©r   r5   r6   r7   r:   )r;   r<   r>  rI   rI   rJ   Útest_early_stopping_stratified¶  s    
 ÿrE  c                   C   s   t ddd�S )Nr#   r!   )r2  Zn_clusters_per_class)r	   rI   rI   rI   rJ   Ú_make_multiclassÂ  s    rF  z!gb, dataset_maker, init_estimatorzbinary classificationzmulticlass classificationZ
regression)Zidsc              	   C   sˆ   |ƒ \}}t j |¡ d¡}|ƒ }| |d�j|||d� t|ƒ ƒ}| |d� ||¡ tjtdd�� | |d�j|||d� W 5 Q R X d S )Nr$   ©r!  rb   z*estimator.*does not support sample weightsrƒ   )	rB   rª   r«   r¼   r:   r   r5   r6   r7   )r,  Zdataset_makerZinit_estimatorrF   r;   r<   rc   Zinit_estrI   rI   rJ   Ú test_gradient_boosting_with_initÆ  s    

rH  c               	   C   sÊ   t dd�\} }ttƒ ƒ}t|d�}| | |¡ tjtdd��" |j| |t 	| j
d ¡d� W 5 Q R X d}d|› d	�}tjtt |¡d��8 td
|d�}t|d�}|j| |t 	| j
d ¡d� W 5 Q R X d S )Nr   r‘   rG  z>The initial estimator Pipeline does not support sample weightsrƒ   rb   g      ø?zIThe 'nu' parameter of NuSVR must be a float in the range (0.0, 1.0]. Got z	 instead.r˜   )ÚgammaÚnu)r
   r   r   r   r:   r5   r6   r7   rB   rd   rE   r   ÚreÚescaper   )r;   r<   r!  r,  Z
invalid_nurŠ   rI   rI   rJ   Ú)test_gradient_boosting_with_init_pipelineå  s     

þ&
ÿ
rM  c               	   C   sd   dggd } ddgdgd  }t dddd�}tjtdd	�� | | |¡ W 5 Q R X t ddd
d�}d S )Nr!   r'   r   r&   rŒ   r×   )r;  r,   rA  z0The training data after the early stopping splitrƒ   gš™™™™™Ù?rD  )r;   r<   r,  rI   rI   rJ   Útest_early_stopping_n_classes  s"      ÿ ÿ  ÿrN  c                  C   s>   t  d¡} t  d¡}tƒ  | |¡}t|jt jdt jd�ƒ d S )N)r'   r'   )r'   r'   rŸ   )rB   r‡   rd   r   r:   r   rw   r¢   )r;   r<   r?  rI   rI   rJ   Ú'test_gbr_degenerate_feature_importances  s    

rO  c               	   C   sd   t ddd�} tjtdd�� |  tt¡ W 5 Q R X t ddd�}| tt¡ t|  t¡| t¡ƒ d S )NZdeviancer   )r-   r,   z$The loss.* 'deviance' was deprecatedrƒ   r/   )	r   r5   rÉ   ÚFutureWarningr:   r;   r<   r   r8   )Zest1r	  rI   rI   rJ   Útest_loss_deprecated"  s    rQ  c              	   C   sV   t  ddgddgg¡}t  ddg¡}| ƒ  ||¡}tjtdd�� |j W 5 Q R X d S )Nr!   r"   r#   r%   r   z`loss_` was deprecatedrƒ   )rB   rÐ   r:   r5   rÉ   rP  Zloss_)r§   r;   r<   rø   rI   rI   rJ   Útest_loss_attribute_deprecation.  s
    rR  )ˆÚ__doc__rK  r®   ÚnumpyrB   Znumpy.testingr   Zscipy.sparser   r   r   Zscipy.specialr   r5   Zsklearnr   Zsklearn.baser   Zsklearn.datasetsr	   r
   Zsklearn.ensembler   r   Z#sklearn.ensemble._gradient_boostingr   Zsklearn.preprocessingr   Zsklearn.metricsr   Zsklearn.model_selectionr   Zsklearn.utilsr   r   Zsklearn.utils._mockingr   Zsklearn.utils._testingr   r   r   Zsklearn.utils._param_validationr   Zsklearn.exceptionsr   r   Zsklearn.dummyr   r   Zsklearn.pipeliner   Zsklearn.linear_modelr   Zsklearn.svmr   ZGRADIENT_BOOSTING_ESTIMATORSr;   r<   r9   r=   rf   re   rª   r«   r±   Z	load_irisrn   Zpermutationro   r¨   Úpermrp   ÚmarkZparametrizerK   rZ   rj   rq   rv   ry   r‚   r†   r‹   r�   r—   Úfilterwarningsrž   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.  r7  r=  r@  rC  rE  rF  rH  rM  rN  rO  rQ  rR  rI   rI   rI   rJ   Ú<module>   s<  (
    ÿ


(',þþ
	%

!
 









#

$


 ÿ( ÿ
#+ýù	
	 ÿ