o
    \i                  
   @   sJ  d Z 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mZ ddlmZmZ ddlmZ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+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 eegZ6ddgddgddgddgddgddggZ7g dZ8ddgddgddggZ9g dZ:eddd d!d"d#\Z;Z<e%e<Z<ej=>dZ?e	@ ZAe?BeAjCjDZEeAjFeE eA_FeAjCeE eA_Cd$d% ZGd&d' ZHejIJd(d)d*d+ ZKejIJd(d)d,d- ZLejIJd(d.ejIJd/d0d1d2 ZMejIJd/d0ejIJd3d4d5d6 ZNd7d8 ZOejIJd9ee;e<feeAjFeAjCfgd:d; ZPd<d= ZQd>d? ZRejIJd@e4dAdB ZSdCdD ZTdEdF ZUdGdH ZVdIdJ ZWdKdL ZXejIJdMe6dNdO ZYdPdQ ZZdRdS Z[dTdU Z\dVdW Z]dXdY Z^dZd[ Z_d\d] Z`ejIJd^e6d_d` ZaejIJd^e6dadb ZbejIJdceddfedefedffeddfedefedffgdgdh Zcdidj Zddkdl Zedmdn ZfejIJdoe6dpdq ZgejIJdoe6drds ZhejIJdoe6dtdu ZiejIJdoe6dvdw ZjejIJdxe6dydz ZkejIJdoe6d{d| ZlejIJdoe6d}d~ ZmejIJdoe6dd ZnejIJdoe6dd ZoejIJdoe6ejIJde3e4 e5 dd ZpejIJdoe6dd Zqdd ZrejIJdoe6dd Zsdd Ztdd Zudd Zvdd ZwejIJde6dd ZxejIJde6dd Zydd ZzejIJdg ddd Z{dd Z|e1ejIJdeefejIJde3e4 e5 dd Z}ejIJd^eegdd Z~dd Zdd Zdd Zdd ZejIjJdeeefeeefeeefgg dddd Zdd Zdd Zdd Zdd Zdd Zdd Ze1dd Zdd ZddĄ ZddƄ ZdS )zP
Testing for the gradient boosting module (sklearn.ensemble.gradient_boosting).
    N)assert_allclose)datasets)clone)make_classificationmake_regression)DummyClassifierDummyRegressor)GradientBoostingClassifierGradientBoostingRegressor)_safe_divide)predict_stages)DataConversionWarningNotFittedError)LinearRegression)mean_squared_error)train_test_split)make_pipeline)scale)NuSVR)check_random_state)NoSampleWeightWrapper)InvalidParameterError)assert_array_almost_equalassert_array_equalskip_if_32bit)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERS      )r   r   r   r    r    r       )r   r    r    d         
      )	n_samples
n_featuresn_informativenoiserandom_statec                  C   sR   t dd} d}tjt|d | tjtj W d   dS 1 s"w   Y  dS )z/Test exponential loss raises for n_classes > 2.exponentiallossz?loss='exponential' is only suitable for a binary classificationmatchN)r	   pytestraises
ValueErrorfitirisdatatargetclfmsg r<   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/ensemble/tests/test_gradient_boosting.pytest_exponential_n_classes_gt_2;   s
   
"r>   c                  C   sN   t td} d}tjt|d | tt W d   dS 1 s w   Y  dS )z0Test raise if init_ has no predict_proba method.initzThe 'init' parameter of GradientBoostingClassifier must be a str among {'zero'}, None or an object implementing 'fit' and 'predict_proba'.r0   N)r	   r
   r2   r3   r4   r5   Xyr9   r<   r<   r=   'test_raise_if_init_has_no_predict_probaC   s   
"rC   r/   log_lossr-   c                 C   s   t | d|d}tt |t W d    n1 sw   Y  |tt t	|tt
 dt|jks8J |jd d |jdd   }t|dksOJ |t}|jdks[J d S )Nr&   )r/   n_estimatorsr,   r   r            )   r&   r    )r	   r2   r3   r4   predictTr5   rA   rB   r   true_resultlenestimators_train_score_npanyapplyshape)r/   global_random_seedr:   log_loss_decreaseleavesr<   r<   r=   test_classification_toyN   s   
rV   c                 C   s  t jd|d\}}d}|d | ||d  }}|d | ||d  }}dd| |d}	tdddi|	}
|
|| tddd	i|	}||| |
|||||k sXJ d
d| |d}	tdddi|	}||| tdddi|	}||| ||||||ksJ d S )N  r(   r,   i  r          ?)	max_depthlearning_rater/   r,   rF   r&   2      )rF   r[   r/   r,   rZ   max_leaf_nodesr<   )r   make_hastie_10_2r	   r5   score)r/   rS   rA   rB   	split_idxX_trainX_testy_trainy_testcommon_paramsgbrt_10_stumpsgbrt_50_stumpsgbrt_stumpsgbrt_10_nodesr<   r<   r=   test_classification_syntheticc   s0    rk   )squared_errorabsolute_errorhuber	subsample)rY         ?c           
   
   C   s   t tt}d }d |d| fD ]8}td| d|d|dd}|jtt|d |t}|jdks1J |	t}t
t|}	|	dk sAJ |d urF	 |}qd S )	Nr!      r$   rp   )rF   r/   rZ   ro   min_samples_splitr,   r[   sample_weight)r#   rq   g?)rO   onesrL   y_regr
   r5   X_regrQ   rR   rI   r   )
r/   ro   rS   ru   last_y_predrt   regrU   y_predmser<   r<   r=   test_regression_dataset   s,   



r|   rt   )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s,J |	tj}|j
dks9J d S )Nr    r#   rE   rF   r/   r,   ro   rs   ?)   r#   r"   )rO   ru   rL   r6   r8   r	   r5   r7   r`   rQ   rR   )ro   rt   rS   r:   r`   rU   r<   r<   r=   	test_iris   s   r   c                 C   s  t | }ddddd| d}tjd|dd	\}}|d d
 |d d
 }}|d
d  |d
d  }}tdi |}	|	|| t||	|}
|
dk sLJ tjd|d\}}|d d
 |d d
 }}|d
d  |d
d  }}tdi |}	|	|| t||	|}
|
dk sJ tjd|d\}}|d d
 |d d
 }}|d
d  |d
d  }}tdi |}	|	|| t||	|}
|
dk sJ d S )Nr#   r$   r!   皙?rl   )rF   rZ   rr   r[   r/   r,     rY   r(   r,   r+   r]   g      @rX   g     @g?r<   )	r   r   make_friedman1r
   r5   r   rI   make_friedman2make_friedman3)rS   r,   regression_paramsrA   rB   rb   rd   rc   re   r:   r{   r<   r<   r=   test_regression_synthetic   s:   
r   zGradientBoosting, X, yc                 C   s2   |  }t |dr
J ||| t |dsJ d S )Nfeature_importances_)hasattrr5   )GradientBoostingrA   rB   gbdtr<   r<   r=   test_feature_importances   s   
r   c                 C   s   t d| d}tt |t W d    n1 sw   Y  |tt t	|
tt |t}t|dks<J t|dksEJ |jj|jdddd}t	|t d S )Nr#   rF   r,   rG   rY   r    )axisr   )r	   r2   r3   r4   predict_probarJ   r5   rA   rB   r   rI   rK   rO   allclasses_takeargmax)rS   r:   y_probarz   r<   r<   r=   test_probability_log
  s   
r   c                  C   s\   g d} t ddd}d}tjt|d |jtt| d W d    d S 1 s'w   Y  d S )N)r   r   r   r    r    r    r#   r    r   zty contains 1 class after sample_weight trimmed classes with zero weights, while a minimum of 2 classes are required.r0   rs   )r	   r2   r3   r4   r5   rA   rB   )rt   r:   r;   r<   r<   r=   $test_single_class_with_sample_weight  s   "r   csc_containerc                 C   s   t jddd\}}| |}tddd}||| t|jdd}d}tj	t
|d t|j||j| W d    n1 s@w   Y  t|}tj	t
dd t|j||j| W d    d S 1 sfw   Y  d S )	Nr#   r    rX   r   r   z3When X is a sparse matrix, a CSR format is expectedr0   z X should be C-ordered np.ndarray)r   r_   r	   r5   rO   zerosrR   reshaper2   r3   r4   r   rM   r[   asfortranarray)r   xrB   x_sparse_cscr:   r`   err_msg	x_fortranr<   r<   r=    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 sFJ d
| d S )N.  rX   rW   r#      r!   r   )rF   rr   rZ   r[   max_featuresr,   rp   zGB failed with deviance %.4f)r   r_   r	   r5   _lossdecision_function)	rS   rA   rB   rb   rc   rd   re   gbrtrE   r<   r<   r=   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@J t|
dd h dksNJ 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,   rn   r   rH   r#   )r/   r[   r^   rF   r,   Nr   c                    s   g | ]} j | qS r<   )feature_names).0s
californiar<   r=   
<listcomp>g  s    z6test_feature_importance_regression.<locals>.<listcomp>r   MedIncr    r$   >   AveOccupLatitude	Longitude)	r7   r8   r   r
   r5   rO   argsortr   set)fetch_california_housing_fxtrS   rA   rB   rb   rc   rd   re   ry   
sorted_idxsorted_featuresr<   r   r=   "test_feature_importance_regressionN  s"   
 r   c                  C   sB  t jddd\} }| j\}}| d d }|d d }tdd d}||| |j|ks-J tdd d}||| |j|ks@J tddd}||| |jt|d ksWJ tddd}||| |jtt	|ksoJ tddd}||| |jtt
|ksJ tdd	| jd  d}||| |jdksJ d S )
Nr   r    rX   rW   )rF   r   333333?sqrtlog2g{Gz?)r   r_   rR   r	   r5   max_features_r
   intrO   r   r   )rA   rB   _r)   rb   rd   r   r<   r<   r=   test_max_featuresr  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    n1 s;w   Y  |
|| ||}||D ]
}|j|jksZJ qPt|| d S )Nr   r    rY   r   r]   dtype)r   r   r
   r2   r3   r4   rO   fromiterstaged_predictfloat64r5   rI   rR   r   )rA   rB   rb   rd   rc   r:   rz   r<   r<   r=   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    n1 sCw   Y  |
|| ||D ]
}|j|jks]J qSt||| ||D ]}|jd |jd ksyJ d	|jd ksJ qkt||| d S )
Nr   r    rX   r]      rF   r   r   r!   )r   r_   r	   r2   r3   r   rO   r   staged_predict_probar   r5   r   rR   r   rI   r   r   )	rA   rB   rb   rd   rc   re   r:   rz   staged_probar<   r<   r=   test_staged_predict_proba  s   
r   	Estimatorc           	   	   C   s   t j|}|jdd}d|d d df  td }|  }||| dD ]>}t|d| d }|d u r5q&tj	dd	 t
||}W d    n1 sLw   Y  d|d d d < t |d dksdJ q&d S )
N)r&   r"   )sizer$   r   r    )rI   r   r   staged_T)record)rO   randomRandomStateuniformastyper   r5   getattrwarningscatch_warningslistr   )	r   rS   rngrA   rB   	estimatorfuncstaged_funcstaged_resultr<   r<   r=   test_staged_functions_defensive  s   r   c                  C   s   t ddd} | tt t| tt dt| j	ksJ zdd l
}W n ty0   dd l}Y nw |j| |jd}d } ||} t| tt dt| j	ksQJ d S )Nr#   r    r   r   )protocol)r	   r5   rA   rB   r   rI   rJ   rK   rL   rM   cPickleImportErrorpickledumpsHIGHEST_PROTOCOLloads)r:   r   serialized_clfr<   r<   r=   test_serialization  s   
r   c                  C   s   t ddd} tt | tttt W d    n1 s!w   Y  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    r   r!   )r    r   )r	   r2   r3   r4   r5   rA   rO   ru   rL   r
   rI   r   randr   r   r:   r<   r<   r=   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$   rp   )rF   r/   rZ   alphar,   rm   )rF   r/   rZ   r,   )r
   r5   rw   rv   rI   r   )rS   clf_quantile
y_quantileclf_aey_aer<   r<   r=   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s)J d S )Nr#   r    r   )r	   r   mapstrrB   r5   rA   r   rI   rJ   rK   rL   rM   )r:   symbol_yr<   r<   r=   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s+J d S Nr#   r    r   r   )r	   rO   asarrayrB   float32r5   rA   r   rI   rJ   rK   rL   rM   )r:   float_yr<   r<   r=   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 d    n1 s1w   Y  t| tt dt| jksGJ d S )Nr#   r    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().r0   )r	   rO   r   rB   int32newaxisr2   warnsr   r5   rA   r   rI   rJ   rK   rL   rM   )r:   y_warn_msgr<   r<   r=   test_shape_y'  s   r   c                  C   s4  t t} tddd}|| t t|tt	 dt
|jks"J t t} tddd}|| t t|tt	 dt
|jksDJ t jtt jd}t |}tddd}|t| t|tt	 dt
|jksnJ t jtt jd}t |}tddd}|t| t|tt	 dt
|jksJ d S r   )rO   r   rA   r	   r5   rB   r   rI   rJ   rK   rL   rM   ascontiguousarrayr   r   )X_r:   r   r<   r<   r=   test_mem_layout<  s,   



r  GradientBoostingEstimatorc                 C   sT   | dddd}| tt |jjd dksJ t|jd d tg ddd	 d S )
Nr#   r    rp   rF   r,   ro   r   r   )gRQ?g333333?gQ?g)\(g)\(?r!   )decimal)r5   rA   rB   oob_improvement_rR   r   rO   array)r  r   r<   r<   r=   test_oob_improvementY  s   
r  c                 C   s   t jddd\}}| dddd}||| |jjd dks J |jd t|jks-J | ddddd	}||| |jjd dk sEJ |jd t|jksRJ d S )
Nr#   r    rX   rp   r  r   r   r   )rF   r,   ro   n_iter_no_change)r   r_   r5   oob_scores_rR   r2   approx
oob_score_)r  rA   rB   r   r<   r<   r=   test_oob_scoresi  s    r  z(GradientBoostingEstimator, oob_attributer  r	  r  c                 C   sb   t jddd\}}| dddd}||| tt |j W d   dS 1 s*w   Y  dS )zZ
    Check that we raise an AttributeError when the OOB statistics were not computed.
    r#   r    rX   rY   r  N)r   r_   r5   r2   r3   AttributeErroroob_attribute)r  r  rA   rB   r   r<   r<   r=   test_oob_attributes_error  s   "r  c                  C   s   t ddddd} | tjtj | tjtj}|dksJ | jjd | jks)J | j	jd | jks4J | j	d t
| jksAJ t ddddd	d
} | tjtj | tjtj}| jjd | jk seJ | j	jd | jk spJ | j	d t
| jks}J d S )Nr#   rE   r    rp   r}   r~   r   r   r   )rF   r/   r,   ro   r  )r	   r5   r6   r7   r8   r`   r  rR   rF   r	  r2   r
  r  )r   r`   r<   r<   r=   test_oob_multilcass_iris  s*   r  c                  C   s   dd l } ddlm} | j}| | _tddddd}|tt | j}|| _|d |	 
 }ddgd	gd
  d }||ksCJ tdd | D }d|ksTJ d S )Nr   StringIOr#   r    皙?)rF   r,   verbosero    %10s%16sr"   )Iter
Train LosszOOB ImproveRemaining Timec                 s       | ]}d V  qdS r    Nr<   r   lr<   r<   r=   	<genexpr>      z&test_verbose_output.<locals>.<genexpr>   sysior  stdoutr	   r5   rA   rB   seekreadlinerstripjoinsum	readlinesr#  r  
old_stdoutr:   verbose_outputheadertrue_headern_linesr<   r<   r=   test_verbose_output  s    
r2  c                  C   s   dd l } ddlm} | j}| | _tdddd}|tt | j}|| _|d |	 
 }ddgd	gd  d
 }||ksBJ tdd | D }d|ksSJ d S )Nr   r  r#   r    r!   )rF   r,   r  r  r  r  )r  r  r  c                 s   r  r  r<   r  r<   r<   r=   r    r   z+test_more_verbose_output.<locals>.<genexpr>r"  r,  r<   r<   r=   test_more_verbose_output  s   
r3  Clsc                 C   s   t jd|d\}}| dd|d}||| | ddd|d}||| |jdd ||| | tu rAt|||| d S t|||| t|||| d S )	Nr#   rX   r]   r    rF   rZ   r,   TrF   rZ   
warm_startr,   r   )	r   r_   r5   
set_paramsr
   r   rI   r   r   r4  rS   rA   rB   estest_wsr<   r<   r=   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#   rX   i,  r    r5  Tr6  r   )r   r_   r5   r8  r   rI   r9  r<   r<   r=   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s-J tdd
D ]}|j| df jdksAJ q2d S )Nr#   r    rX   TrF   rZ   r7  n   r!   rF   rZ   r   r      r   )r   r_   r5   r8  rM   rZ   range)r4  rA   rB   r:  ir<   r<   r=   test_warm_start_max_depth  s   rE  c                 C   sv   t jddd\}}| ddd}||| | dddd}||| |jdd ||| t|||| d S )	Nr#   r    rX   r@  Tr>  F)r7  )r   r_   r5   r8  r   rI   )r4  rA   rB   r:  est_2r<   r<   r=   test_warm_start_clear+  s   rG  r   c                 C   s  t jddd\}}d}| |ddddd}||| |j|j}}t||ks)J |d t|ks4J d}|j|d	|| t|j|ksIJ t	|jd
| | |j|dd|| |j|useJ |j|uslJ t	|j| |jt|ks|J |d t|ksJ d
S )zZ
    Check that the states of the OOB scores are cleared when used with `warm_start`.
    r#   r    rX   rp   T)rF   rZ   ro   r7  r,   r   r]   r   NFrF   r7  )
r   r_   r5   r	  r  rL   r2   r
  r8  r   )r   rA   rB   rF   r   
oob_scores	oob_scoren_more_estimatorsr<   r<   r=    test_warm_start_state_oob_scores:  s.   rL  c                 C   st   t jddd\}}| dddd}||| |jdd tt ||| W d    d S 1 s3w   Y  d S )Nr#   r    rX   Tr>  c   r   )r   r_   r5   r8  r2   r3   r4   r4  rA   rB   r:  r<   r<   r=   $test_warm_start_smaller_n_estimatorsZ  s   "rO  c                 C   sh   t jddd\}}| ddd}||| t|}|j|jdd ||| t|||| d S )Nr#   r    rX   r@  TrH  )r   r_   r5   r   r8  rF   r   rI   )r4  rA   rB   r:  est2r<   r<   r=   "test_warm_start_equal_n_estimatorse  s   rQ  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 td |jd	d  d
k	 sJJ |jd	d  d
k	 sWJ |jd t
|jksdJ d S )Nr#   r    rX   Tr>  r?  rp   )rF   ro   rG   r   )r   r_   r5   r8  r   r  rO   r   r	  r   r2   r
  r  rN  r<   r<   r=   test_warm_start_oob_switchs  s   rS  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  t|jd d |jd d  |jd
 t|j	ks]J |jd
 t|j	ksjJ d S )Nr#   r    rX   r]   rp   )rF   rZ   ro   r,   TrF   rZ   ro   r,   r7  r   r   )
r   r_   r5   r8  r   r  r	  r2   r
  r  )r4  rA   rB   r:  r;  r<   r<   r=   test_warm_start_oob  s   
rU  sparse_containerc           	      C   s,  t jddd\}}| dddddd}||| || |jdd ||| ||}||}| dddddd}||| || |jdd ||| ||}t|jd d |jd d  |jd	 t	|j
kssJ t|jd d |jd d  |jd	 t	|j
ksJ t|| d S )
Nr#   r    rX   rp   TrT  r]   r   r   )r   r_   r5   rI   r8  r   r  r	  r2   r
  r  )	r4  rV  rA   rB   	est_densey_pred_denseX_sparse
est_sparsey_pred_sparser<   r<   r=   test_warm_start_sparse  s:   




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#   rX   r    T)rF   r,   r7  rB  r   )r   r_   r5   r8  rO   r   r   rI   )r4  rS   rA   rB   est_cest_fortran	X_fortranr<   r<   r=   test_warm_start_fortran  s   
r`  c                 C   s   | dkrdS dS )z#Returns True on the 10th iteration.	   TFr<   )rD  r:  localsr<   r<   r=   early_stopping_monitor  s   rc  c                 C   st  t jddd\}}| ddddd}|j||td |jdks J |jjd d	ks*J |jjd d	ks4J |jjd d	ks>J |j	jd d	ksHJ |j	d
 t
|jksUJ |jdd ||| |jdkshJ |jjd dksrJ |jjd dks|J |jjd dksJ |j	jd dksJ |j	d
 t
|jksJ | dddddd}|j||td |jdksJ |jjd d	ksJ |jjd d	ksJ |jjd d	ksJ |j	jd d	ksJ |j	d
 t
|jksJ |jddd ||| |jdksJ |jjd dks	J |jjd dksJ |jjd dksJ |j	jd dks*J |j	d
 t
|jks8J d S )Nr#   r    rX   r   rp   )rF   rZ   r,   ro   )monitorr   r&   r   rq   r   T)rF   rZ   r,   ro   r7  FrH  )r   r_   r5   rc  rF   rM   rR   rN   r  r	  r2   r
  r  r8  rN  r<   r<   r=   test_monitor_early_stopping  sF   
 re  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.J |j	|j	| k j
d |d ks?J d S )
Nr   	TREE_LEAFr#   r    rX   r$   r   rF   rZ   r,   r^   rA  )sklearn.tree._treerg  r   r_   r	   r5   rM   tree_rZ   children_leftrR   )rg  rA   rB   kr:  treer<   r<   r=   test_complete_classification  s   &rn  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/J d S )Nr   rf  r$   r   r    rh  )r   r   )
ri  rg  r
   r5   rw   rv   rM   rj  rk  rR   )rg  rl  r:  rm  r<   r<   r=   test_complete_regression  s   &ro  c                 C   sd   t ddtt}t|tt}tdd| ddd}|tt |t}tt|}||k s0J d S )Nmean)strategyr   r    zerorp   )rF   rZ   r,   r@   r[   )r   r5   rw   rv   r   rI   r
   )rS   baselinemse_baseliner:  rz   mse_gbdtr<   r<   r=   test_zero_estimator_reg,  s   

rv  c                 C   s   t j}tt j}tdd| dd}||| |||dks!J |dk}d||< d|| < tdd| dd}||| |||dksFJ d S )Nr   r    rr  )rF   rZ   r,   r@   gQ?r   )r6   r7   rO   r  r8   r	   r5   r`   )rS   rA   rB   r:  maskr<   r<   r=   test_zero_estimator_clf?  s   
rx  GBEstimatorc                 C   st   t jddd\}}d}| d|d||}|jd j}|jdks"J | dd||}|jd j}|jdks8J d S )Nr#   r    rX   r$   )rZ   r^   rA  )rZ   )r   r_   r5   rM   rj  rZ   )ry  rA   rB   rl  r:  rm  r<   r<   r=   test_max_leaf_nodes_max_depthV  s   rz  c                 C   sH   t jddd\}}| dd}||| |jjD ]	}|jdks!J qd S )Nr#   r    rX   r   )min_impurity_decrease)r   r_   r5   rM   flatr{  )ry  rA   rB   r:  rm  r<   r<   r=   test_min_impurity_decreasef  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J | ddgddggddg | jjd dks6J d S )Nr&   TrH  r   r    r!   r"   )r	   r5   rM   rR   r   r<   r<   r=   %test_warm_start_wo_nestimators_changer  s
   r~  )r/   value))rl   rp   )rm   rG   )rn   rp   )r   rp   c                 C   sj   ddgddgddgddgg}g d}g d}t dd| d}|j|||d |ddggd |ks3J d S )	Nr    r   r   r   r    r   r   r   r    r    rY   r!   )r[   rF   r/   rs   )r
   r5   rI   )r/   r  rA   rB   rt   gbr<   r<   r=   *test_non_uniform_weights_toy_edge_case_reg|  s   
 r  c                  C   sn   ddgddgddgddgg} g d}g d}dD ]}t d|d}|j| ||d t|ddggdg qd S )	Nr    r   r  r  rD   r   )rF   r/   rs   )r	   r5   r   rI   )rA   rB   rt   r/   r  r<   r<   r=   *test_non_uniform_weights_toy_edge_case_clf  s   r  EstimatorClassc           	      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rt|	||	| t|
||
| t|||| t|||| t||||D ]\}}t|| qd S d S )
Nr   r\   r    r   )r,   r(   r)   	n_classesr&   r!   gHz>)rF   r,   rZ   r{  )r   make_multilabel_classificationr5   r   rQ   rI   r   
issubclassr	   r   predict_log_probar   zipstaged_decision_function)	r  rV  rB   rA   rY  densesparse
res_sparseresr<   r<   r=   test_sparse_input  sL   

r  c           
      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 rB|k sEJ  J |||	dksOJ |||	dksYJ d S )N  r   rX   r&   r   r"   *   )rF   r  r[   rZ   r,   tolMbP?r   gffffff?)r   r   r5   n_estimators_r`   )
r  rA   rB   rF   gb_large_tolgb_small_tolrb   rc   rd   re   r<   r<   r=   %test_gradient_boosting_early_stopping  s0   		 r  c                  C   sh   t ddd\} }tddddd}|| | td	dddd}|| | |jdks+J |jd	ks2J d S )
Nr  r   rX   r\   r   r"   r  )rF   r[   rZ   r,   rq   )r   r	   r5   r
   r  )rA   rB   gbcgbrr<   r<   r=   -test_gradient_boosting_without_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s[J |||
 |||
 |j|jksoJ |||
 |||
 |j|jk sJ |j|jk sJ d S )Nr  r   rX   r#   r&   r   r"   r  )rF   r  validation_fractionr[   rZ   r,   r   )r  r   r  )rF   r  r[   rZ   r  r,   r   )r   r	   r   r8  r
   r   r5   r  )rA   rB   r  gbc2gbc3r  gbr2gbr3rb   rc   rd   re   r<   r<   r=   *test_gradient_boosting_validation_fraction  s@   r  c                  C   sn   ddgddgddgddgg} g d}t dd}tjtdd	 || | W d    d S 1 s0w   Y  d S )
Nr    r!   r"   r$   r   )r   r   r   r    r  z0The least populated class in y has only 1 memberr0   r	   r2   r3   r4   r5   )rA   rB   r  r<   r<   r=   test_early_stopping_stratified-  s   
"r  c                   C   s   t dddS )Nr"   r    )r  n_clusters_per_class)r   r<   r<   r<   r=   _make_multiclass9  s   r  z!gb, dataset_maker, init_estimator)zbinary classificationzmulticlass classification
regression)idsc                 C   s   | \}}t j|d}| }| |dj|||d t| }| |d|| tjtdd | |dj|||d W d    d S 1 sHw   Y  d S )Nr#   r?   rs   z*estimator.*does not support sample weightsr0   )	rO   r   r   r   r5   r   r2   r3   r4   )r  dataset_makerinit_estimatorrS   rA   rB   rt   init_estr<   r<   r=    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    n1 s7w   Y  d}d| d	}tjtt|d" td
|d}t|d}|j| |t	| j
d d W d    d S 1 ssw   Y  d S )Nr   r   r?   z>The initial estimator Pipeline does not support sample weightsr0   rs   g      ?zIThe 'nu' parameter of NuSVR must be a float in the range (0.0, 1.0]. Got z	 instead.auto)gammanu)r   r   r   r
   r5   r2   r3   r4   rO   ru   rR   r   reescaper   )rA   rB   r@   r  
invalid_nur   r<   r<   r=   )test_gradient_boosting_with_init_pipeline\  s(   



"r  c                  C   sx   dggd } ddgdgd  }t dddd}tjtdd	 || | W d    n1 s.w   Y  t ddd
d}d S )Nr    r&   r   r%   r   r  )r  r,   r  z0The training data after the early stopping splitr0   g?r  )rA   rB   r  r<   r<   r=   test_early_stopping_n_classesz  s   
r  c                  C   s>   t d} t d}t | |}t|jt jdt jd d S )N)r&   r&   )r&   r&   r   )rO   r   ru   r
   r5   r   r   r   )rA   rB   r  r<   r<   r=   'test_gbr_degenerate_feature_importances  s   

r  c                  C   s   d} d}t t || }t ||d }t | | d }t j||f }t jd}||jd|jd }t	dd
||}t	d	d
||}t	 
||}	||}
t |||
ks`J t |
|	|kslJ d
S )z9Check that huber lies between absolute and squared error.r#   r&   r!   r  r    )r   r   rm   r.   rn   N)rO   tilearangeminimumc_r   r   r-   rR   r
   r5   rI   r   )n_repr(   rB   x1x2rA   r   gbt_absolute_error	gbt_hubergbt_squared_errorgbt_huber_predictionsr<   r<   r=   test_huber_vs_mean_and_median  s   
r  c                   C   s   t  ( t d ttdddksJ ttdtddks%J W d   n1 s/w   Y  tjtdd ttdd W d   dS 1 sOw   Y  dS )	z0Test that _safe_divide handles division by zero.errorgu <7~r   rG   Noverflowr0   g|=)	r   r   simplefilterr   rO   r   r2   r   RuntimeWarningr<   r<   r<   r=   test_safe_divide  s   

 "r  c            	      C   s  d} t | }t || d }t | |  d }t j||f }tddd||}t g d}t|||dd t g d	}t|j	d
d |dd t 
ddg| d }tdddj|||d}t g d}t|||ddd t g d}t|j	d
d |ddd dS )zTest squared error GBT backward compat on a simple dataset.

    The results to compare against are taken from scikit-learn v1.2.0.
    r&   r!   rl   r#   r/   rF   )
gѵO@"?g!m ?g_$  @gT )= @g6 @gN@glU@gu@g̀#@g'aK4!@:0yE>rtol)
geԩ(j>g􄾳<e>gkx?a>gzU:\>gWwV>gwR>gM>g0~JYH>gh1`C>gñح
@>rR  Nr    rs   )
gh#?gq)u ?g	1~(  @g_Q @gi @gŪ@g3%a@g[A"@gd*@ggh9!@gư>gh㈵>)r  atol)
gwF$f>g۪5a>g:Z]>glF2UW>g!S>gO>g1&I>g͗KcD>gU}އ@>g:>r  gdy=)rO   r  r  r  r
   r5   r  r   rI   rN   r  )	r(   rB   r  r  rA   gbtpred_resulttrain_scoresample_weightsr<   r<   r=   (test_squared_error_exact_backward_compat  s4   
r  c                  C   s   d} t | }t || d }t | |  d }t j||f }tdddd||}t|jjj	d t 
g d}t|||d	d
 t 
g d}t|jdd |d	d
 dS )zTest huber GBT backward compat on a simple dataset.

    The results to compare against are taken from scikit-learn v1.2.0.
    r&   r!   rn   r#   r  )r/   rF   r   g  2%?)
gzݮj#?g7h?g31e @gZZ@gk @ga8t @gsu@g%e 	@g>T  @gx!@r  r  )
gi>gAɤ{j>g#$%t>gD9u>gߝ>g:"L(>gݏ|>gzԇx>gu}v>ggݱ@s>rR  N)rO   r  r  r  r
   r5   r   r   clossdeltar  rI   rN   r(   rB   r  r  rA   r  r  r  r<   r<   r=    test_huber_exact_backward_compat  s   
r  c                  C   s   d} t | d }t || d }t | |  d }t j||f }tddd||}t ddgddgddgddgddgddgddgddgddgddgg
}t|||dd	 t g d
}t|j	dd |dd	 dS )zTest binary log_loss GBT backward compat on a simple dataset.

    The results to compare against are taken from scikit-learn v1.2.0.
    r&   r!   rE   r#   r  g
t?gr3>r  r  )
gu>?g5Ү^?g?g	i?gN?gv^q!?g2C6 ?gȍl?g1oEa	?g5C?rR  N
rO   r  r  r  r	   r5   r  r   r   rN   r  r<   r<   r=   )test_binomial_error_exact_backward_compat<  0   r  c                  C   s   d} t | d }t || d }t | |  d }t j||f }tddd||}t g dg dg d	g d
g dg dg d	g d
g dg dg
}t|||dd t g d}t|j	dd |dd dS )zTest multiclass log_loss GBT backward compat on a simple dataset.

    The results to compare against are taken from scikit-learn v1.2.0.
    r&   r$   r!   rE   r#   r  )k*om?grLD~>l-au>h,au>)g?~>r  r  r  )0Q(>r  WQ?g?m}w>)r  r  gX
}w>r  r  r  )
g]R4>g{a\>g5|)>guB=>g@3Bݤ>g bC>gB2h>g@,y>g"y>g=>rR  Nr  r  r<   r<   r=   ,test_multinomial_error_exact_backward_compati  r  r  c                 C   sx   t jddd\}}ddddd| dd	}tdi |}t  td
 ||| W d   dS 1 s5w   Y  dS )a`  Test _update_terminal_regions denominator is not zero.

    For instance for log loss based binary classification, the line search step might
    become nan/inf as denominator = hessian = prob * (1 - prob) and prob = 0 or 1 can
    happen.
    Here, we create a situation were this happens (at least with roughly 80%) based
    on the random seed.
    r#   r   rX   rY   rp   r$   Nr!   )r[   ro   rF   r^   rZ   r,   min_samples_leafr  r<   )r   r_   r	   r   r   r  r5   )rS   rA   rB   paramsr:   r<   r<   r=   test_gb_denominator_zero  s   	


"r  )__doc__r  r   numpyrO   r2   numpy.testingr   sklearnr   sklearn.baser   sklearn.datasetsr   r   sklearn.dummyr   r   sklearn.ensembler	   r
   sklearn.ensemble._gbr   #sklearn.ensemble._gradient_boostingr   sklearn.exceptionsr   r   sklearn.linear_modelr   sklearn.metricsr   sklearn.model_selectionr   sklearn.pipeliner   sklearn.preprocessingr   sklearn.svmr   sklearn.utilsr   sklearn.utils._mockingr   sklearn.utils._param_validationr   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   r   r   GRADIENT_BOOSTING_ESTIMATORSrA   rB   rJ   rK   rw   rv   r   r   r   	load_irisr6   permutationr8   r   permr7   r>   rC   markparametrizerV   rk   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  r3  r<  r=  rE  rG  rL  rO  rQ  rS  rU  r\  r`  rc  re  rn  ro  rv  rx  rz  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r<   r<   r<   r=   <module>   s\   (



-',
	
$!



 









$

-



	
(
#+
	S
/--