
    h$,f              
          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)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6 eegZ7ddgddgddgddgddgddggZ8g dZ9ddgddgddggZ:g dZ; eddd d!d"#      \  Z<Z= e%e=      Z=ej|                  j                  d      Z@ e	j                         ZBe@j                  eBj                  j                        ZFeBj                  eF   eB_G        eBj                  eF   eB_D        d$ ZHd% ZIej                  j                  d&d'      d(        ZLej                  j                  d&d'      d)        ZMej                  j                  d&d*      ej                  j                  d+d,      d-               ZNej                  j                  d+d,      ej                  j                  d.d/      d0               ZOd1 ZPej                  j                  d2ee<e=feeBj                  eBj                  fg      d3        ZQd4 ZRd5 ZSej                  j                  d6e5      d7        ZTd8 ZUd9 ZVd: ZWd; ZXd< ZYej                  j                  d=e7      d>        ZZd? Z[d@ Z\dA Z]dB Z^dC Z_dD Z`dE Zaej                  j                  dFe7      dG        Zbej                  j                  dFe7      dH        Zcej                  j                  dIedJfedKfedLfedJfedKfedLfg      dM        ZddN ZedO ZfdP Zgej                  j                  dQe7      dR        Zhej                  j                  dQe7      dS        Ziej                  j                  dQe7      dT        Zjej                  j                  dQe7      dU        Zkej                  j                  dVe7      dW        Zlej                  j                  dQe7      dX        Zmej                  j                  dQe7      dY        Znej                  j                  dQe7      dZ        Zoej                  j                  dQe7      d[        Zpej                  j                  dQe7      ej                  j                  d\e4e5z   e6z         d]               Zqej                  j                  dQe7      d^        Zrd_ Zsej                  j                  dQe7      d`        Ztda Zudb Zvdc Zwdd Zxej                  j                  dee7      df        Zyej                  j                  dee7      dg        Zzdh Z{ej                  j                  dig dj      dk        Z|dl Z}e2ej                  j                  dmeef      ej                  j                  d\e4e5z   e6z         dn                      Z~ej                  j                  dFeeg      do        Zdp Zdq Zdr Zds Zej                  j                  dteeefeeefeeefgg duv      dw        Zdx Zdy Zdz Zd{ Zd| Zd} Ze2d~        Zd Zd Zd Zy)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
tosequence)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                      t        d      } d}t        j                  t        |      5  | j	                  t
        j                  t
        j                         ddd       y# 1 sw Y   yxY w)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msgs     Mlib/python3.12/site-packages/sklearn/ensemble/tests/test_gradient_boosting.pytest_exponential_n_classes_gt_2r@   :   sJ    
$-
8C
KC	z	- (		4;;'( ( (s   /A""A+c                      t        t              } d}t        j                  t        |      5  | j                  t        t               ddd       y# 1 sw Y   yxY w)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'.r3   N)r
   r   r5   r6   r7   r8   Xyr<   s     r?   'test_raise_if_init_has_no_predict_probarF   B   sJ    
$*C
DC	N  
z	- 1  s   AAr2   log_lossr0   c                    t        | d|      }t        j                  t              5  |j	                  t
               d d d        |j                  t        t               t        |j	                  t
              t               dt        |j                        k(  sJ |j                  d d |j                  dd  z
  }t        j                  |dk\        sJ |j!                  t              }|j"                  dk(  sJ y # 1 sw Y   xY w)Nr(   )r2   n_estimatorsr.   r!   r"           )   r(   r"   )r
   r5   r6   r7   predictTr8   rD   rE   r   true_resultlenestimators_train_score_npanyapplyshape)r2   global_random_seedr=   log_loss_decreaseleavess        r?   test_classification_toyrZ   M   s     %1CC 
z	" A GGAqMs{{1~{3S__%%%%(("-0@0@0DD66#s*+++YYq\F<<:%%% s   C==Dc                    t        j                  d|      \  }}d}|d | ||d  }}|d | ||d  }}dd| |d}	t        dddi|	}
|
j                  ||       t        ddd	i|	}|j                  ||       |
j	                  ||      |j	                  ||      k  sJ d
d| |d}	t        dddi|	}|j                  ||       t        dddi|	}|j                  ||       |j	                  ||      |j	                  ||      kD  sJ y )N  r*   r.   i  r"         ?)	max_depthlearning_rater2   r.   rJ   r(   2      )rJ   r`   r2   r.   r_   max_leaf_nodes )r   make_hastie_10_2r
   r8   score)r2   rW   rD   rE   	split_idxX_trainX_testy_trainy_testcommon_paramsgbrt_10_stumpsgbrt_50_stumpsgbrt_stumpsgbrt_10_nodess                 r?   test_classification_syntheticrq   b   sN    $$tBTUDAqI
mQyz]VG
mQyz]VG *	M 0QRQ=QNw(/QRQ=QNw(/.2F2Fvv2VVVV
 *	M -JqJMJKOOGW%.RbRMRMgw'VV,}/B/B66/RRRR    )squared_errorabsolute_errorhuber	subsample)r^         ?c           
      p   t        j                  t        t                    }d }d |d|z  fD ]  }t	        d| d|d|d      }|j                  t        t        |       |j                  t              }|j                  dk(  sJ |j                  t              }t        t        |      }	|	dk  sJ |	 |} y )	Nr#      r&   rw   )rJ   r2   r_   rv   min_samples_splitr.   r`   sample_weight)r%   ry   g?)rS   onesrP   y_regr   r8   X_regrU   rV   rM   r   )
r2   rv   rW   r}   last_y_predr|   regrY   y_predmses
             r?   test_regression_datasetr      s    
 773u:DKa$h/  (+
 	uM:5!||y(((U# /Tzz" ?rr   r|   )Nr"   c                    |dk(  r,t        j                  t        t        j                              }t        dd||       }|j                  t        j                  t        j                  |       |j                  t        j                  t        j                        }|dkD  sJ |j                  t        j                        }|j                  dk(  sJ y )Nr"   r%   rH   rJ   r2   r.   rv   r{   ?)   r%   r$   )rS   r}   rP   r9   r;   r
   r8   r:   rf   rU   rV   )rv   r|   rW   r=   rf   rY   s         r?   	test_irisr      s     DKK 01
$'	C GGDIIt{{-G@IIdii-E3;;YYtyy!F<<=(((rr   c                    t        |       }ddddd| d}t        j                  d|d	      \  }}|d d
 |d d
 }}|d
d  |d
d  }}t        di |}	|	j	                  ||       t        ||	j                  |            }
|
dk  sJ t        j                  d|      \  }}|d d
 |d d
 }}|d
d  |d
d  }}t        di |}	|	j	                  ||       t        ||	j                  |            }
|
dk  sJ t        j                  d|      \  }}|d d
 |d d
 }}|d
d  |d
d  }}t        di |}	|	j	                  ||       t        ||	j                  |            }
|
dk  sJ y )Nr%   r&   r#   皙?rs   )rJ   r_   rz   r`   r2   r.     r^   r*   r.   r-   rb   g      @r]   g     @g?rd   )	r   r   make_friedman1r   r8   r   rM   make_friedman2make_friedman3)rW   r.   regression_paramsrD   rE   rh   rj   ri   rk   r=   r   s              r?   test_regression_syntheticr      s    &&89L* ""TTWXDAq#w$3WGstWagFF
#
8&7
8CGGGW
VS[[%8
9C99 ""TMDAq#w$3WGstWagFF
#
8&7
8CGGGW
VS[[%8
9C<< ""TMDAq#w$3WGstWagFF
#
8&7
8CGGGW
VS[[%8
9C;;rr   zGradientBoosting, X, yc                 n     |        }t        |d      rJ |j                  ||       t        |d      sJ y )Nfeature_importances_)hasattrr8   )GradientBoostingrD   rE   gbdts       r?   test_feature_importancesr      s;     Dt3444HHQN4/000rr   c                 *   t        d|       }t        j                  t              5  |j	                  t
               d d d        |j                  t        t               t        |j                  t
              t               |j	                  t
              }t        j                  |dk\        sJ t        j                  |dk        sJ |j                  j                  |j!                  d      d      }t        |t               y # 1 sw Y   xY w)Nr%   rJ   r.   rK   r^   r"   )axisr   )r
   r5   r6   r7   predict_probarN   r8   rD   rE   r   rM   rO   rS   allclasses_takeargmax)rW   r=   y_probar   s       r?   test_probability_logr   	  s    
$#DV
WC	z	" ! GGAqMs{{1~{3 "G66'S.!!!66'S.!!! \\w~~1~5A>Fv{+ s   D		Dc                      g d} t        dd      }d}t        j                  t        |      5  |j	                  t
        t        |        d d d        y # 1 sw Y   y xY w)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.r3   r{   )r
   r5   r6   r7   r8   rD   rE   )r|   r=   r>   s      r?   $test_single_class_with_sample_weightr     sU    &M
$#A
FC	C  
z	- 31M23 3 3s   AAcsc_containerc                 Z   t        j                  dd      \  }} | |      }t        dd      }|j                  ||       t	        j
                  |j                        j                  dd      }d}t        j                  t        |      5  t        |j                  ||j                  |       d d d        t	        j                  |      }t        j                  t        d      5  t        |j                  ||j                  |       d d d        y # 1 sw Y   exY w# 1 sw Y   y xY w)	Nr%   r"   r]   r   r!   z3When X is a sparse matrix, a CSR format is expectedr3   z X should be C-ordered np.ndarray)r   re   r
   r8   rS   zerosrV   reshaper5   r6   r7   r   rQ   r`   asfortranarray)r   xrE   x_sparse_cscr=   rf   err_msg	x_fortrans           r?    test_check_inputs_predict_stagesr   (  s     $$sCDAq #L
$#A
FCGGAqMHHagg''A.ECG	z	1 Psc6G6GOP!!!$I	z)K	L Ms	33D3DeLM MP PM Ms   #D)#D!D!D*c                    t        j                  d|       \  }}|d d |dd  }}|d d |dd  }}t        ddddd|       }|j                  ||       |j	                  ||j                  |            }|d	k  s
J d
|z         y )N.  r]   r\   r%      r#   r   )rJ   rz   r_   r`   max_featuresr.   rw   zGB failed with deviance %.4f)r   re   r
   r8   _lossdecision_function)	rW   rD   rE   rh   ri   rj   rk   gbrtrH   s	            r?   test_max_feature_regressionr   9  s    $$uCUVDAqh$%VGh$%VG%'D 	HHWgzz&$"8"8"@AHc>D9HDD>rr   c                 v    |        }|j                   |j                  }}t        |||      \  }}}}t        dddd|      }	|	j	                  ||       t        j                  |	j                        ddd   }
|
D cg c]  }|j                  |    }}|d	   d
k(  sJ t        |dd       h dk(  sJ yc c}w )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.   ru   r   rL   r%   )r2   r`   rc   rJ   r.   Nr!   r   MedIncr"   r&   >   AveOccupLatitude	Longitude)
r:   r;   r   r   r8   rS   argsortr   feature_namesset)fetch_california_housing_fxtrW   
californiarD   rE   rh   ri   rj   rk   r   
sorted_idxssorted_featuress                r?   "test_feature_importance_regressionr   M  s     ./J??J--qA'7	1-($GVWf $'C GGGWC445dd;J<FGqz//2GOG 1)))
 q#$(MMMM Hs   >B6c                  R   t        j                  dd      \  } }| j                  \  }}| d d }|d d }t        dd       }|j	                  ||       |j
                  |k(  sJ t        dd       }|j	                  ||       |j
                  |k(  sJ t        dd      }|j	                  ||       |j
                  t        |dz        k(  sJ t        dd      }|j	                  ||       |j
                  t        t        j                  |            k(  sJ t        dd      }|j	                  ||       |j
                  t        t        j                  |            k(  sJ t        dd	| j                  d   z        }|j	                  ||       |j
                  dk(  sJ y )
Nr   r"   r]   r\   )rJ   r   333333?sqrtlog2g{Gz?)r   re   rV   r
   r8   max_features_r   intrS   r   r   )rD   rE   _r+   rh   rj   r   s          r?   test_max_featuresr   q  s   $$u1EDAqGGMAzhGhG%14HDHHWg+++$!$GDHHWg+++$!#FDHHWgZ#%5!6666$!&IDHHWgRWWZ%8!9999$!&IDHHWgRWWZ%8!9999$!$QRBSTDHHWg"""rr   c                     t        j                  ddd      \  } }| d d |d d }}| dd  }t               }t        j                  t
              5  t        j                  |j                  |      t        j                         d d d        |j                  ||       |j                  |      }|j                  |      D ]  }|j                  |j                  k(  rJ  t        ||       y # 1 sw Y   jxY w)Nr   r"   r^   r   rb   dtype)r   r   r   r5   r6   r7   rS   fromiterstaged_predictfloat64r8   rM   rV   r   )rD   rE   rh   rj   ri   r=   r   s          r?   test_staged_predictr     s     ""TMDAq#w$3WGstWF
#
%C	z	" B
C&&v.bjjAB GGGW[[ F ' 'ww&,,&&&' fa(B Bs   5C,,C5c                     t        j                  dd      \  } }| d d |d d }}| dd  |dd  }}t        d      }t        j                  t
              5  t        j                  |j                  |      t        j                         d d d        |j                  ||       |j                  |      D ]  }|j                  |j                  k(  rJ  t        |j                  |             |j                  |      D ]7  }|j                  d   |j                  d   k(  sJ d	|j                  d   k(  r7J  t        |j!                  |             y # 1 sw Y   xY w)
Nr   r"   r]   rb      rJ   r   r   r#   )r   re   r
   r5   r6   r   rS   r   staged_predict_probar   r8   r   rV   r   rM   r   r   )	rD   rE   rh   rj   ri   rk   r=   r   staged_probas	            r?   test_staged_predict_probar     sT    $$t!DDAq#w$3WGstWagFF
$"
5C	~	& H
C,,V4BJJGH GGGW $$V, ,||v||+++, s{{6*F3 008 *||A,"4"4Q"7777L&&q))))* c//7F!H Hs   5EE	Estimatorc                    t         j                  j                  |      }|j                  d      }d|d d df   z  j	                  t
              dz   } |        }|j                  ||       dD ]j  }t        |d|z   d       }|t        j                  d	      5  t         ||            }d d d        dd   d d  t        j                  |d   dk7        rjJ  y # 1 sw Y   1xY w)
N)r(   r$   )sizer&   r   r"   )rM   r   r   staged_T)record)rS   randomRandomStateuniformastyper   r8   getattrwarningscatch_warningslistr   )	r   rW   rngrD   rE   	estimatorfuncstaged_funcstaged_results	            r?   test_staged_functions_defensiver     s     ))

 2
3C!A	
Qq!tWS!A%AIMM!QA -iT)94@$$D1 	1 Q0M	1avvmA&!+,,,-
	1 	1s   CC&	c                     t        dd      } | j                  t        t               t	        | j                  t              t               dt        | j                        k(  sJ 	 dd l
}|j                  | |j                        }d } |j                  |      } t	        | j                  t              t               dt        | j                        k(  sJ y # t        $ r dd l}Y }w xY w)Nr%   r"   r   r   )protocol)r
   r8   rD   rE   r   rM   rN   rO   rP   rQ   cPickleImportErrorpickledumpsHIGHEST_PROTOCOLloads)r=   r   serialized_clfs      r?   test_serializationr     s    
$#A
FCGGAqMs{{1~{3#coo&&&&  \\#0G0G\HN
C
,,~
&Cs{{1~{3#coo&&&&  s   &C C('C(c            	      Z   t        dd      } t        j                  t              5  | j	                  t
        t        j                  t        t
                           d d d        t        dd      } | j	                  t
        t        j                  t        t
                           | j                  t        j                  d      g       t        t        j                  dt        j                        | j                  t        j                  d      g             y # 1 sw Y   xY w)Nr%   r"   r   r#   )r"   r   )r
   r5   r6   r7   r8   rD   rS   r}   rP   r   rM   r   randr   r   r=   s    r?   test_degenerate_targetsr     s    
$#A
FC 
z	" $2773q6?#$ $1
ECGGArwws1vKK!rwwt2::6SXXa[M8RS$ $s   7D!!D*c                    t        dddd|       }|j                  t        t               |j	                  t              }t        ddd|       }|j                  t        t               |j	                  t              }t        ||       y )Nr%   quantiler&   rw   )rJ   r2   r_   alphar.   rt   )rJ   r2   r_   r.   )r   r8   r   r~   rM   r   )rW   clf_quantile
y_quantileclf_aey_aes        r?   test_quantile_lossr    s{    ,'L UE"%%e,J&'	F JJue>>% DJ%rr   c            	      ,   t        dd      } t        t        t        t                    }| j                  t        |       t        | j                  t              t        t        t        t                           dt        | j                        k(  sJ y )Nr%   r"   r   )r
   r   mapstrrE   r8   rD   r   rM   rN   rO   rP   rQ   )r=   symbol_ys     r?   test_symbol_labelsr    sa    
$#A
FC#c1+&HGGAxs{{1~z#c;2G'HI#coo&&&&rr   c                  \   t        dd      } t        j                  t        t        j                        }| j                  t        |       t        | j                  t              t        j                  t        t        j                               dt        | j                        k(  sJ y Nr%   r"   r   r   )r
   rS   asarrayrE   float32r8   rD   r   rM   rN   rO   rP   rQ   )r=   float_ys     r?   test_float_class_labelsr    sh    
$#A
FCjj"**-GGGAws{{1~rzz+RZZ'PQ#coo&&&&rr   c                     t        dd      } t        j                  t        t        j                        }|d d t        j
                  f   }d}t        j                  t        |      5  | j                  t        |       d d d        t        | j                  t              t               dt        | j                         k(  sJ y # 1 sw Y   GxY w)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().r3   )r
   rS   r  rE   int32newaxisr5   warnsr   r8   rD   r   rM   rN   rO   rP   rQ   )r=   y_warn_msgs      r?   test_shape_yr  &  s    
$#A
FC	ARXX	&B	ArzzM	B	! 
 
+8	< 2s{{1~{3#coo&&&& s   +CCc                  `   t        j                  t              } t        dd      }|j	                  | t
               t        |j                  t              t               dt        |j                        k(  sJ t        j                  t              } t        dd      }|j	                  | t
               t        |j                  t              t               dt        |j                        k(  sJ t        j                  t
        t         j                        }t        j                  |      }t        dd      }|j	                  t        |       t        |j                  t              t               dt        |j                        k(  sJ t        j                  t
        t         j                        }t        j                  |      }t        dd      }|j	                  t        |       t        |j                  t              t               dt        |j                        k(  sJ y r
  )rS   r   rD   r
   r8   rE   r   rM   rN   rO   rP   rQ   ascontiguousarrayr  r  )X_r=   r  s      r?   test_mem_layoutr  ;  sr   			1	B
$#A
FCGGBNs{{1~{3#coo&&&&			a	 B
$#A
FCGGBNs{{1~{3#coo&&&&	ARXX	&B			b	!B
$#A
FCGGArNs{{1~{3#coo&&&&	ARXX	&B			2	B
$#A
FCGGArNs{{1~{3#coo&&&&rr   GradientBoostingEstimatorc                      | ddd      }|j                  t        t               |j                  j                  d   dk(  sJ t        |j                  d d t        j                  g d      d	       y )
Nr%   r"   rw   rJ   r.   rv   r   r   )gRQ?g333333?gQ?g)\(g)\(?r#   )decimal)r8   rD   rE   oob_improvement_rV   r   rS   array)r  r   s     r?   test_oob_improvementr   X  sl     *qCI MM!Q%%++A.#555""2A&
01rr   c                    t        j                  dd      \  }} | ddd      }|j                  ||       |j                  j                  d   dk(  sJ |j                  d   t        j                  |j                        k(  sJ  | dddd	      }|j                  ||       |j                  j                  d   dk  sJ |j                  d   t        j                  |j                        k(  sJ y )
Nr%   r"   r]   rw   r  r   r!   r   )rJ   r.   rv   n_iter_no_change)r   re   r8   oob_scores_rV   r5   approx
oob_score_)r  rD   rE   r   s       r?   test_oob_scoresr&  h  s     $$sCDAq)qCI MM!Q  &&q)S000  $i6J6J(KKKK)	I MM!Q  &&q)C///  $i6J6J(KKKKrr   z(GradientBoostingEstimator, oob_attributer  r#  r%  c                     t        j                  dd      \  }} | ddd      }|j                  ||       t        j                  t
              5  |j                   ddd       y# 1 sw Y   yxY w)zZ
    Check that we raise an AttributeError when the OOB statistics were not computed.
    r%   r"   r]   r^   r  N)r   re   r8   r5   r6   AttributeErroroob_attribute)r  r)  rD   rE   r   s        r?   test_oob_attributes_errorr*  ~  sg     $$sCDAq)I
 MM!Q	~	&       s   A''A0c                     t        dddd      } | j                  t        j                  t        j                         | j                  t        j                  t        j                        }|dkD  sJ | j                  j                  d   | j                  k(  sJ | j                  j                  d   | j                  k(  sJ | j                  d   t        j                  | j                        k(  sJ t        ddddd	
      } | j                  t        j                  t        j                         | j                  t        j                  t        j                        }| j                  j                  d   | j                  k  sJ | j                  j                  d   | j                  k  sJ | j                  d   t        j                  | j                        k(  sJ y )Nr%   rH   r"   rw   r   r   r   r!   r   )rJ   r2   r.   rv   r"  )r
   r8   r9   r:   r;   rf   r  rV   rJ   r#  r5   r$  r%  )r   rf   s     r?   test_oob_multilcass_irisr,    s~   *zSI MM$))T[[)OODIIt{{3E3;;%%++A.)2H2HHHH  &&q)Y-C-CCCC  $i6J6J(KKKK*I MM$))T[[)OODIIt{{3E%%++A.1G1GGGG  &&q)I,B,BBBB  $i6J6J(KKKKrr   c                     dd l } ddlm} | j                  } |       | _        t	        dddd      }|j                  t        t               | j                  }|| _        |j                  d       |j                         j                         }dj                  dgd	gd
z  z         dz  }||k(  sJ t        d |j                         D              }d|k(  sJ y )Nr   StringIOr%   r"   皙?)rJ   r.   verboserv    %10s%16sr$   )Iter
Train LosszOOB ImproveRemaining Timec              3       K   | ]  }d   ywr"   Nrd   .0ls     r?   	<genexpr>z&test_verbose_output.<locals>.<genexpr>       8!8      sysior/  stdoutr
   r8   rD   rE   seekreadlinerstripjoinsum	readlinesrB  r/  
old_stdoutr=   verbose_outputheadertrue_headern_liness           r?   test_verbose_outputrQ    s    JCJ
$q!sC GGAqMZZNCJ $$&--/F((F8vhl23 7 K &   8^55788GWrr   c                     dd l } ddlm} | j                  } |       | _        t	        ddd      }|j                  t        t               | j                  }|| _        |j                  d       |j                         j                         }dj                  dgd	gdz  z         d
z  }||k(  sJ t        d |j                         D              }d|k(  sJ y )Nr   r.  r%   r"   r#   )rJ   r.   r1  r2  r3  r4  )r5  r6  r7  c              3       K   | ]  }d   ywr9  rd   r:  s     r?   r=  z+test_more_verbose_output.<locals>.<genexpr>  r>  r?  rA  rK  s           r?   test_more_verbose_outputrT    s    JCJ
$#Aq
QCGGAqMZZNCJ $$&--/F((F8vhl23 7 K
 &   8^55788G'>>rr   Clsc                    t        j                  d|      \  }} | dd|      }|j                  ||        | ddd|      }|j                  ||       |j                  d       |j                  ||       | t        u r+t        |j                  |      |j                  |             y t        |j                  |      |j                  |             t        |j                  |      |j                  |             y )	Nr%   r]   rb   r"   rJ   r_   r.   TrJ   r_   
warm_startr.   r   )	r   re   r8   
set_paramsr   r   rM   r   r   rU  rW   rD   rE   estest_wss         r?   test_warm_startr^    s     $$sASTDAq
3!:L
MCGGAqMA$EWF JJq!
3'
JJq!
''q)3;;q>: 	6>>!,ckk!n=,,Q/1B1B11EFrr   c                 J   t        j                  d|      \  }} | dd|      }|j                  ||        | ddd|      }|j                  ||       |j                  d       |j                  ||       t	        |j                  |      |j                  |             y )	Nr%   r]   i,  r"   rW  TrX  r   )r   re   r8   rZ  r   rM   r[  s         r?   test_warm_start_n_estimatorsr`  
  s     $$sASTDAq
3!:L
MCGGAqMA$EWF JJq!
3'
JJq!FNN1%s{{1~6rr   c                 \   t        j                  dd      \  }} | ddd      }|j                  ||       |j                  dd       |j                  ||       |j                  d	   j
                  dk(  sJ t        dd
      D ]#  }|j                  | df   j
                  dk(  r#J  y )Nr%   r"   r]   TrJ   r_   rY  n   r#   rJ   r_   r   r      r   )r   re   r8   rZ  rQ   r_   range)rU  rD   rE   r\  is        r?   test_warm_start_max_depthri    s     $$sCDAq
3!
=CGGAqMNNqN1GGAqM ??4 **a///1b\ 5r1u%//14445rr   c                 F   t        j                  dd      \  }} | dd      }|j                  ||        | ddd      }|j                  ||       |j                  d       |j                  ||       t	        |j                  |      |j                  |             y )	Nr%   r"   r]   rd  Trb  F)rY  )r   re   r8   rZ  r   rM   )rU  rD   rE   r\  est_2s        r?   test_warm_start_clearrl  *  s     $$sCDAq
3!
,CGGAqMSA$?E	IIaO	&	IIaOemmA.A?rr   r   c                    t        j                  dd      \  }}d} | |dddd      }|j                  ||       |j                  |j                  }}t        |      |k(  sJ |d   t        j                  |      k(  sJ d}|j                  |	      j                  ||       t        |j                        |k(  sJ t        |j                  d
| |       |j                  |d      j                  ||       |j                  |usJ |j                  |usJ t        |j                  |       |j                  t        j                  |      k(  sJ |d   t        j                  |      k(  sJ y
)zZ
    Check that the states of the OOB scores are cleared when used with `warm_start`.
    r%   r"   r]   rw   T)rJ   r_   rv   rY  r.   r!   rb   r   NFrJ   rY  )
r   re   r8   r#  r%  rP   r5   r$  rZ  r   )r   rD   rE   rJ   r   
oob_scores	oob_scoren_more_estimatorss           r?    test_warm_start_state_oob_scoresrr  9  sp   
 $$sCDAqL !I MM!Q%1193G3G	Jz?l***b>V]]95555&78<<QBy$$%)::::I))-<8*EluEII!QO  
222y000I)):66==#;;;;b>V]]95555rr   c                    t        j                  dd      \  }} | ddd      }|j                  ||       |j                  d       t	        j
                  t              5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nr%   r"   r]   Trb  c   r   )r   re   r8   rZ  r5   r6   r7   rU  rD   rE   r\  s       r?   $test_warm_start_smaller_n_estimatorsrv  Y  sq     $$sCDAq
3!
=CGGAqMNNN#	z	" 1  s   #A??Bc                 8   t        j                  dd      \  }} | dd      }|j                  ||       t        |      }|j	                  |j
                  d       |j                  ||       t        |j                  |      |j                  |             y )Nr%   r"   r]   rd  Trn  )r   re   r8   r   rZ  rJ   r   rM   )rU  rD   rE   r\  est2s        r?   "test_warm_start_equal_n_estimatorsry  d  sy     $$sCDAq
3!
,CGGAqM:DOO!1!1dOCHHQNdll1os{{1~>rr   c                 V   t        j                  dd      \  }} | ddd      }|j                  ||       |j                  dd       |j                  ||       t	        |j
                  d d t        j                  d             t	        |j                  d d t        j                  d             |j
                  d	d  d
k7  j                         sJ |j                  d	d  d
k7  j                         sJ |j                  d   t        j                  |j                        k(  sJ y )Nr%   r"   r]   Trb  rc  rw   )rJ   rv   rK   r!   )r   re   r8   rZ  r   r  rS   r   r#  r   r5   r$  r%  ru  s       r?   test_warm_start_oob_switchr|  r  s     $$sCDAq
3!
=CGGAqMNNsN3GGAqMs++DS1288C=Ast,bhhsm<   &#-22444OOCD!S(--///??2&--"????rr   c                 V   t        j                  dd      \  }} | dddd      }|j                  ||        | ddddd      }|j                  ||       |j                  d	       |j                  ||       t	        |j
                  d d |j
                  d d        t	        |j                  d d |j                  d d        |j                  d
   t        j                  |j                        k(  sJ |j                  d
   t        j                  |j                        k(  sJ y )Nr%   r"   r]   rb   rw   )rJ   r_   rv   r.   TrJ   r_   rv   r.   rY  r   r!   )
r   re   r8   rZ  r   r  r#  r5   r$  r%  )rU  rD   rE   r\  r]  s        r?   test_warm_start_oobr    s    $$sCDAq
3!s
KCGGAqMA1QUF JJq!
3'
JJq!f55ds;S=Q=QRVSV=WXf00#68MN??2&--"????b!V]]63D3D%EEEErr   sparse_containerc                 P   t        j                  dd      \  }} | ddddd      }|j                  ||       |j                  |       |j	                  d       |j                  ||       |j                  |      } ||      } | ddddd      }|j                  ||       |j                  |       |j	                  d       |j                  ||       |j                  |      }t        |j                  d d |j                  d d        |j                  d	   t        j                  |j                        k(  sJ t        |j                  d d |j                  d d        |j                  d	   t        j                  |j                        k(  sJ t        ||       y )
Nr%   r"   r]   rw   Tr~  rb   r   r!   )r   re   r8   rM   rZ  r   r  r#  r5   r$  r%  )	rU  r  rD   rE   	est_densey_pred_denseX_sparse
est_sparsey_pred_sparses	            r?   test_warm_start_sparser    s    $$sCDAqA1QUI MM!Qac*MM!Q$$Q'L"HJ NN8Qqs+NN8Q&&q)M""4C(**E*Eds*K   $i6J6J(KKKKi33DS9:;Q;QRVSV;WX!!"%z7L7L)MMMMlM:rr   c                    t        j                  d|      \  }} | d|d      } | d|d      }|j                  ||       |j                  d       |j                  ||       t	        j
                  |      }|j                  ||       |j                  d       |j                  ||       t        |j                  |      |j                  |             y )Nr%   r]   r"   T)rJ   r.   rY  rf  r   )r   re   r8   rZ  rS   r   r   rM   )rU  rW   rD   rE   est_cest_fortran	X_fortrans          r?   test_warm_start_fortranr    s     $$sASTDAqQ-?DQE13ERVWK	IIaO	"%	IIaO!!!$IOOIq!+OOIq!EMM!$k&9&9!&<=rr   c                     | dk(  ryy)z#Returns True on the 10th iteration.	   TFrd   )rh  r\  localss      r?   early_stopping_monitorr    s    Avrr   c                 ,   t        j                  dd      \  }} | dddd      }|j                  ||t               |j                  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                  j                  d   d	k(  sJ |j                  d
   t        j                  |j                        k(  sJ |j                  d       |j                  ||       |j                  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                  j                  d   dk(  sJ |j                  d
   t        j                  |j                        k(  sJ  | ddddd      }|j                  ||t               |j                  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                  j                  d   d	k(  sJ |j                  d
   t        j                  |j                        k(  sJ |j                  dd       |j                  ||       |j                  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                  j                  d   dk(  sJ |j                  d
   t        j                  |j                        k(  sJ y )Nr%   r"   r]   r   rw   )rJ   r_   r.   rv   )monitorr   r(   r!   ry   r   T)rJ   r_   r.   rv   rY  Frn  )r   re   r8   r  rJ   rQ   rV   rR   r  r#  r5   r$  r%  rZ  ru  s       r?   test_monitor_early_stoppingr    sd    $$sCDAq
2c
JCGGAq0G1r!!!??  #r)))!!!$***%%a(B...??  #r)))??2&--"???? NNN#GGAqMr!!!??  #r)))!!!$***%%a(B...??  #r)))??2&--"????
11PTC GGAq0G1r!!!??  #r)))!!!$***%%a(B...??  #r)))??2&--"???? NNuN5GGAqMr!!!!!!$***??  #r)))%%a(B...??  #r)))??2&--"????rr   c                  F   ddl m}  t        j                  dd      \  }}d}t	        dd d|dz         }|j                  ||       |j                  d	   j                  }|j                  |k(  sJ |j                  |j                  | k(     j                  d   |dz   k(  sJ y )
Nr   	TREE_LEAFr%   r"   r]   r&   r   rJ   r_   r.   rc   re  )sklearn.tree._treer  r   re   r
   r8   rQ   tree_r_   children_leftrV   )r  rD   rE   kr\  trees         r?   test_complete_classificationr    s    ,$$sCDAq	A
$4aAC GGAqM??4 &&D>>Qd00I=>DDQG1q5PPPrr   c                      ddl m}  d}t        dd d|dz         }|j                  t        t
               |j                  d   j                  }|j                  |j                  | k(     j                  d   |dz   k(  sJ y )Nr   r  r&   r   r"   r  )r!   r   )
r  r  r   r8   r   r~   rQ   r  r  rV   )r  r  r\  r  s       r?   test_complete_regressionr    sx    ,	A
#4aAC GGE5??5!''Dd00I=>DDQG1q5PPPrr   c                 >   t        d      j                  t        t              }t	        |j                  t              t              }t        dd| dd      }|j                  t        t               |j                  t              }t	        t        |      }||k  sJ y )Nmean)strategyr   r"   zerorw   )rJ   r_   r.   rC   r`   )r	   r8   r   r~   r   rM   r   )rW   baselinemse_baseliner\  r   mse_gbdts         r?   test_zero_estimator_regr  +  s     v.225%@H%h&6&6u&=uEL
#'C GGE5[[F!%0Hl"""rr   c                 j   t         j                  }t        j                  t         j                        }t        dd| d      }|j                  ||       |j                  ||      dkD  sJ |dk7  }d||<   d|| <   t        dd| d      }|j                  ||       |j                  ||      dkD  sJ y )Nr   r"   r  )rJ   r_   r.   rC   gQ?r   )r9   r:   rS   r  r;   r
   r8   rf   )rW   rD   rE   r\  masks        r?   test_zero_estimator_clfr  >  s    		A
A
$13EFC GGAqM99Q?T!!! 6DAdGAteH
$13EFC GGAqM99Q?T!!!rr   GBEstimatorc                 J   t        j                  dd      \  }}d} | d|      j                  ||      }|j                  d   j                  }|j
                  dk(  sJ  | d      j                  ||      }|j                  d   j                  }|j
                  dk(  sJ y )Nr%   r"   r]   r&   )r_   rc   re  )r_   )r   re   r8   rQ   r  r_   )r  rD   rE   r  r\  r  s         r?   test_max_leaf_nodes_max_depthr  U  s     $$sCDAq	A
!
4
8
8A
>C??4 &&D>>Q

"
&
&q!
,C??4 &&D>>Qrr   c                     t        j                  dd      \  }} | d      }|j                  ||       |j                  j                  D ]  }|j
                  dk(  rJ  y )Nr%   r"   r]   r   )min_impurity_decrease)r   re   r8   rQ   flatr  )r  rD   rE   r\  r  s        r?   test_min_impurity_decreaser  e  s^    $$sCDAq
C
0CGGAqM$$ 1 ))S0001rr   c                      t        dd      } | j                  ddgddggddg       | j                  j                  d   dk(  sJ | j                  ddgddggddg       | j                  j                  d   dk(  sJ y )Nr(   Trn  r   r"   r#   r$   )r
   r8   rQ   rV   r   s    r?   %test_warm_start_wo_nestimators_changer  q  s     %"
FCGGaVaVq!f%??  #r)))GGaVaVq!f%??  #r)))rr   )r2   value))rs   rw   )rt   rK   )ru   rw   )r   rw   c                     ddgddgddgddgg}g d}g d}t        dd|       }|j                  |||       |j                  ddgg      d   |k\  sJ y )	Nr"   r   r   r   r"   r   r   r   r"   r"   r^   r#   )r`   rJ   r2   r{   )r   r8   rM   )r2   r  rD   rE   r|   gbs         r?   *test_non_uniform_weights_toy_edge_case_regr  {  sn     Q!Q!Q!Q(AA M	"14	PBFF1a}F-::1vh"e+++rr   c                      ddgddgddgddgg} g d}g d}dD ]B  }t        d|      }|j                  | ||       t        |j                  ddgg      dg       D y )	Nr"   r   r  r  rG   r   )rJ   r2   r{   )r
   r8   r   rM   )rD   rE   r|   r2   r  s        r?   *test_non_uniform_weights_toy_edge_case_clfr    sr    
Q!Q!Q!Q(AA M+ 6'QTB
q!=12::1vh/!56rr   EstimatorClassc                 L   t        j                  dddd      \  }}|d d df   } ||      } | dddd	      j                  ||      } | dddd	      j                  ||      }t        |j	                  |      |j	                  |             t        |j                  |      |j                  |             t        |j                  |j                         t        |j                  |      |j                  |             t        |j                  |      |j                  |             t        | t              rt        |j                  |      |j                  |             t        |j                  |      |j                  |             t        |j                  |      |j                  |             t        |j                  |      |j                  |             t        |j                  |      |j                  |            D ]  \  }}t        ||        y y )
Nr   ra   r"   r   )r.   r*   r+   	n_classesr(   r#   gHz>)rJ   r.   r_   r  )r   make_multilabel_classificationr8   r   rU   rM   r   
issubclassr
   r   predict_log_probar   zipstaged_decision_function)	r  r  rE   rD   r  densesparse
res_sparseress	            r?   test_sparse_inputr    s    22"bDAq 	
!Q$A"Ha1D	c!Qi 
 a1D	c(A  fll1ou{{1~>fnnQ/q1ABf995;U;UVfnnX6a8HIemmH5v~~a7HI."<=!&"6"6q"95;N;Nq;QR!$$Q')@)@)C	
 	"$$X.0H0H0K	
 	"##H-v/G/G/J	
  #++H5++A. 
 	7OJ &j#6		7 >rr   c                 r   t        dd      \  }}d} | |ddddd      } | |ddddd	      }t        ||d
      \  }}}}	|j                  ||       |j                  ||       |j                  |j                  cxk  r|k  sJ  J |j	                  ||	      dkD  sJ |j	                  ||	      dkD  sJ y )N  r   r]   r(   r   r$   *   )rJ   r"  r`   r_   r.   tolMbP?r   gffffff?)r   r   r8   n_estimators_rf   )
r  rD   rE   rJ   gb_large_tolgb_small_tolrh   ri   rj   rk   s
             r?   %test_gradient_boosting_early_stoppingr    s     A>DAqL,!L -!L (812'N$GVWfWg&Wg&%%(B(BQ\QQQQQff-333ff-333rr   c                      t        dd      \  } }t        dddd      }|j                  | |       t        d	ddd      }|j                  | |       |j                  dk(  sJ |j                  d	k(  sJ y )
Nr  r   r]   ra   r   r$   r  )rJ   r`   r_   r.   ry   )r   r
   r8   r   r  )rD   rE   gbcgbrs       r?   -test_gradient_boosting_without_early_stoppingr    s     A>DAq
$sabC GGAqM
#sabC GGAqM """"""rr   c                     t        dd      \  } }t        dddddd	      }t        |      j                  d
      }t        |      j                  d      }t	        dddddd      }t        |      j                  d
      }t        |      j                  d      }t        | |d      \  }}	}
}|j                  ||
       |j                  ||
       |j                  |j                  k7  sJ |j                  ||
       |j                  ||
       |j                  |j                  k7  sJ |j                  ||
       |j                  ||
       |j                  |j                  k  sJ |j                  |j                  k  sJ y )Nr  r   r]   r%   r(   r   r$   r  )rJ   r"  validation_fractionr`   r_   r.   r   )r  r   r"  )rJ   r"  r`   r_   r  r.   r   )r   r
   r   rZ  r   r   r8   r  )rD   rE   r  gbc2gbc3r  gbr2gbr3rh   ri   rj   rk   s               r?   *test_gradient_boosting_validation_fractionr    s   A>DAq
$C :  S 9D:  " 5D
#C :  S 9D:  " 5D'712'N$GVWfGGGWHHWg 2 2222GGGWHHWg 2 2222 	HHWgHHWgt11111t11111rr   c                      ddgddgddgddgg} g d}t        d      }t        j                  t        d	      5  |j	                  | |       d d d        y # 1 sw Y   y xY w)
Nr"   r#   r$   r&   r   )r   r   r   r"   r  z0The least populated class in y has only 1 memberr3   r
   r5   r6   r7   r8   )rD   rE   r  s      r?   test_early_stopping_stratifiedr  ,  se    
Q!Q!Q!Q(AA
$a
8C	L
  	1  s   AAc                      t        dd      S )Nr$   r"   )r  n_clusters_per_class)r   rd   rr   r?   _make_multiclassr  8  s    CCrr   z!gb, dataset_maker, init_estimator)zbinary classificationzmulticlass classification
regression)idsc                     |       \  }}t         j                  j                  |      j                  d      } |       } | |      j	                  |||       t         |             } | |      j	                  ||       t        j                  t        d      5   | |      j	                  |||       d d d        y # 1 sw Y   y xY w)Nr%   rB   r{   z*estimator.*does not support sample weightsr3   )	rS   r   r   r   r8   r   r5   r6   r7   )r  dataset_makerinit_estimatorrW   rD   rE   r|   init_ests           r?    test_gradient_boosting_with_initr  <  s    " ?DAqII))*<=BB3GM HH!Qm< %^%56HH!Q	z)U	V A
a-@A A As   CCc            	      |   t        d      \  } }t        t                     }t        |      }|j	                  | |       t        j                  t        d      5  |j	                  | |t        j                  | j                  d                d d d        d}d| d	}t        j                  t        t        j                  |            5  t        d
|      }t        |      }|j	                  | |t        j                  | j                  d                d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   rB   z>The initial estimator Pipeline does not support sample weightsr3   r{   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   r8   r5   r6   r7   rS   r}   rV   r   reescaper   )rD   rE   rC   r  
invalid_nur   s         r?   )test_gradient_boosting_with_init_pipeliner  [  s    *DAq)+,D	"	-BFF1aL	N
 8 	q!2771771:#67	8 J	"",Y	8  
,BIIg4F	G 86j1&D1
q!2771771:#67	8 88 88 8s   5D&AD2&D/2D;c                      dggdz  } ddgdgdz  z   }t        ddd      }t        j                  t        d	      5  |j	                  | |       d d d        t        ddd
      }y # 1 sw Y   xY w)Nr"   r(   r   r'   r   r0  )r"  r.   r  z0The training data after the early stopping splitr3   g?r  )rD   rE   r  s      r?   test_early_stopping_n_classesr  y  s     
A	
A!qA	#
B 
L
  	q! 
$
B s   A&&A/c                      t        j                  d      } t        j                  d      }t               j	                  | |      }t        |j                  t        j                  dt         j                               y )N)r(   r(   )r(   r(   r   )rS   r   r}   r   r8   r   r   r   )rD   rE   r  s      r?   'test_gbr_degenerate_feature_importancesr    sQ    
A
A
#
%
)
)!Q
/Cs//"BJJ1OPrr   c                     d} d}t        j                  t        j                  |      |       }t        j                  ||dz        }t        j                  | | dz        }t         j                  ||f   }t         j
                  j                  d      }||j                  d|j                        z   }t        d      j                  ||      }t        d	      j                  ||      }t               j                  ||      }	|j                  |      }
t        j                  |j                  |      |
k        sJ t        j                  |
|	j                  |      k        sJ y
)z9Check that huber lies between absolute and squared error.r%   r(   r#   r  r"   )r   r   rt   r1   ru   N)rS   tilearangeminimumc_r   r   r0   rV   r   r8   rM   r   )n_repr*   rE   x1x2rD   r   gbt_absolute_error	gbt_hubergbt_squared_errorgbt_huber_predictionss              r?   test_huber_vs_mean_and_medianr    s1   EI
		)$e,A	Ay1}	%B	QB
Q	'B
b"fA
))


#C	COO!!''O22A28HIMMaQRS)w7;;AqAI13771=%--a066$,,Q/3HHIII66'+<+D+DQ+GGHHHrr   c                     t        j                         5  t        j                  d       t        t	        j
                  d      d      dk(  sJ t        t	        j
                  d      t	        j
                  d            dk(  sJ 	 ddd       t        j                  t        d      5  t        t	        j
                  d      d       ddd       y# 1 sw Y   MxY w# 1 sw Y   yxY w)	z0Test that _safe_divide handles division by zero.errorgu <7~r   rK   Noverflowr3   g|=)	r   r   simplefilterr   rS   r   r5   r  RuntimeWarningrd   rr   r?   test_safe_divider	    s    		 	 	" Cg&BJJu-q1Q666BJJsORZZ_=BBBC 
nJ	7 /RZZ&./ /	C C/ /s   A1C* CCC(c                     d} t        j                  |       }t        j                  || dz        }t        j                  | |  dz        }t         j                  ||f   }t	        dd      j                  ||      }t        j                  g d      }t        |j                  |      |d       t        j                  g d	      }t        |j                  d
d |d       t        j                  ddg| dz        }t	        dd      j                  |||      }t        j                  g d      }t        |j                  |      |dd       t        j                  g d      }t        |j                  d
d |dd       y)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#   rs   r%   r2   rJ   )
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ñح
@>r{  Nr"   r{   )
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=)rS   r  r  r  r   r8   r  r   rM   rR   r  )	r*   rE   r  r  rD   gbtpred_resulttrain_scoresample_weightss	            r?   (test_squared_error_exact_backward_compatr    sa   
 I
		)A	Ay1}	%B	QB
Q	'B
b"fA
#s
K
O
OPQST
UC((	
K CKKNKd;((	
K C$$ST*KdC WWaWi1n5N
#s
K
O
O	1N P C ((	
K CKKNKdF((	
K C$$ST*KdOrr   c                      d} t        j                  |       }t        j                  || dz        }t        j                  | |  dz        }t         j                  ||f   }t	        ddd      j                  ||      }t        |j                  j                  j                  d       t        j                  g d      }t        |j                  |      |d	
       t        j                  g d      }t        |j                  dd |d	
       y)zTest huber GBT backward compat on a simple dataset.

    The results to compare against are taken from scikit-learn v1.2.0.
    r(   r#   ru   r%   r0  )r2   rJ   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>r{  N)rS   r  r  r  r   r8   r   r   clossdeltar  rM   rR   r*   rE   r  r  rD   r  r  r  s           r?    test_huber_exact_backward_compatr    s     I
		)A	Ay1}	%B	QB
Q	'B
b"fA
#s#
N
R
RSTVW
XCCIIOO))+@A((	
K CKKNKd;((	
K C$$ST*KdCrr   c                     d} t        j                  |       dz  }t        j                  || dz        }t        j                  | |  dz        }t         j                  ||f   }t	        dd      j                  ||      }t        j                  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        |j                  |      |d	       t        j                  g d
      }t        |j                  dd |d	       y)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#   rH   r%   r  g
t?gr3>r  r  )
gu>?g5Ү^?g?g	i?gN?gv^q!?g2C6 ?gȍl?g1oEa	?g5C?r{  N
rS   r  r  r  r
   r8   r  r   r   rR   r  s           r?   )test_binomial_error_exact_backward_compatr  ;  s   
 I
		)q A	Ay1}	%B	QB
Q	'B
b"fA
$*3
G
K
KAq
QC((^,^,^,^,^,^,^,^,^,^,	
K C%%a(+DA((	
K C$$ST*KdCrr   c                     d} t        j                  |       dz  }t        j                  || dz        }t        j                  | |  dz        }t         j                  ||f   }t	        dd      j                  ||      }t        j                  g dg dg d	g d
g dg dg d	g d
g dg dg
      }t        |j                  |      |d       t        j                  g d      }t        |j                  dd |d       y)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#   rH   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=>r{  Nr  r  s           r?   ,test_multinomial_error_exact_backward_compatr#  h  s    
 I
		)q A	Ay1}	%B	QB
Q	'B
b"fA
$*3
G
K
KAq
QC((LLLLLLLLLL	
K C%%a(+DA((	
K C$$ST*KdCrr   c                    t        j                  dd      \  }}ddddd| dd	}t        di |}t        j                         5  t        j
                  d
       |j                  ||       ddd       y# 1 sw Y   yxY w)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   r]   r^   rw   r&   Nr#   )r`   rv   rJ   rc   r_   r.   min_samples_leafr  rd   )r   re   r
   r   r   r  r8   )rW   rD   rE   paramsr=   s        r?   test_gb_denominator_zeror'    s     $$sDDAq *F %
.v
.C		 	 	" g&1  s   (A55A>)__doc__r  r   numpyrS   r5   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   r   sklearn.utils._mockingr   sklearn.utils._param_validationr   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   r   r   GRADIENT_BOOSTING_ESTIMATORSrD   rE   rN   rO   r   r~   r   r   r   	load_irisr9   permutationr;   r   permr:   r@   rF   markparametrizerZ   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r&  r*  r,  rQ  rT  r^  r`  ri  rl  rr  rv  ry  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'  rd   rr   r?   <module>rD     s   
    )   A 9 R - > D 1 . 4 * '  8 8 A 
 O N :<UV  	"XBx"bAq6Aq6Aq6:"X1v1v aqu 	eiiA x
t{{''(IIdO	kk$( !<=& >&( !<=*S >*SZ !MNj1$ 2 O$N j1)4) 5 2)$)X 	"E51	#TYY<11,(3 .9M :M E(!NH#B)*G6 &BC- D-$'(T&2'''*': 46RS T 46RSL TL* .	#%78	#]3	#\2	"$67	"M2	"L1
 
 L@>8  <=G >G,  <=7 >7   <=5 >5  <=@ >@ +-IJ6 K6>  <= >  <=
? >
?  <=@ >@$  <=F >F&  <=7.H!; >!;H  <=> >>&  <=*@ >*@ZQ"Q#&". (DE F (DE1 F1* ,,6 13LM 7.H%7 %7P "<>W!X 4 4F#&(2V	D '	#%8/J	#%5G	"O^D
 	M  AA,8<,QI,/PPf ,D ,D^*DZ*DZrr   