
    {Kg              
          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"#      \  Z;Z< e%e<      Z<ejz                  j}                  d      Z? e	j                         ZAe?j                  eAj                  j                        ZEeAj                  eE   eA_F        eAj                  eE   eA_C        d$ ZGd% ZHej                  j                  d&d'      d(        ZKej                  j                  d&d'      d)        ZLej                  j                  d&d*      ej                  j                  d+d,      d-               ZMej                  j                  d+d,      ej                  j                  d.d/      d0               ZNd1 ZOej                  j                  d2ee;e<feeAj                  eAj                  fg      d3        ZPd4 ZQd5 ZRej                  j                  d6e4      d7        ZSd8 ZTd9 ZUd: ZVd; ZWd< ZXej                  j                  d=e6      d>        ZYd? ZZd@ Z[dA Z\dB Z]dC Z^dD Z_dE Z`ej                  j                  dFe6      dG        Zaej                  j                  dFe6      dH        Zbej                  j                  dIedJfedKfedLfedJfedKfedLfg      dM        ZcdN ZddO ZedP Zfej                  j                  dQe6      dR        Zgej                  j                  dQe6      dS        Zhej                  j                  dQe6      dT        Ziej                  j                  dQe6      dU        Zjej                  j                  dVe6      dW        Zkej                  j                  dQe6      dX        Zlej                  j                  dQe6      dY        Zmej                  j                  dQe6      dZ        Znej                  j                  dQe6      d[        Zoej                  j                  dQe6      ej                  j                  d\e3e4z   e5z         d]               Zpej                  j                  dQe6      d^        Zqd_ Zrej                  j                  dQe6      d`        Zsda Ztdb Zudc Zvdd Zwej                  j                  dee6      df        Zxej                  j                  dee6      dg        Zydh Zzej                  j                  dig dj      dk        Z{dl Z|e1ej                  j                  dmeef      ej                  j                  d\e3e4z   e5z         dn                      Z}ej                  j                  dFeeg      do        Z~dp Zdq 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} Ze1d~        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)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     q/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/ensemble/tests/test_gradient_boosting.pytest_exponential_n_classes_gt_2r?   ;   sA    
$-
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'.r2   N)r
   r   r4   r5   r6   r7   Xyr;   s     r>   'test_raise_if_init_has_no_predict_probarE   C   sA    
$*C
DC	N  
z	-1 
.	-	-s   AAr1   log_lossr/   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'   )r1   n_estimatorsr-   r    r!           )   r'   r!   )r
   r4   r5   r6   predictTr7   rC   rD   r   true_resultlenestimators_train_score_npanyapplyshape)r1   global_random_seedr<   log_loss_decreaseleavess        r>   test_classification_toyrY   N   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_rater1   r-   rI   r'   2      )rI   r_   r1   r-   r^   max_leaf_nodes )r   make_hastie_10_2r
   r7   score)r1   rV   rC   rD   	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_syntheticrp   c   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%   rv   )rI   r1   r^   ru   min_samples_splitr-   r_   sample_weight)r$   rx   g?)rR   onesrO   y_regr   r7   X_regrT   rU   rL   r   )
r1   ru   rV   r|   last_y_predr{   regrX   y_predmses
             r>   test_regression_datasetr      s    
 773u:DKa$h/ (+
 	uM:5!||y(((U# /Tzz" ? 0rq   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$   rG   rI   r1   r-   ru   rz   ?)   r$   r#   )rR   r|   rO   r8   r:   r
   r7   r9   re   rT   rU   )ru   r{   rV   r<   re   rX   s         r>   	test_irisr      s     DKK 01
$'	C GGDIIt{{-G@IIdii-E3;;YYtyy!F<<=(((rq   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"   皙?rr   )rI   r^   ry   r_   r1   r-     r]   r)   r-   r,   ra   g      @r\   g     @g?rc   )	r   r   make_friedman1r   r7   r   rL   make_friedman2make_friedman3)rV   r-   regression_paramsrC   rD   rg   ri   rh   rj   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;;rq   zGradientBoosting, X, yc                 n     |        }t        |d      rJ |j                  ||       t        |d      sJ y )Nfeature_importances_)hasattrr7   )GradientBoostingrC   rD   gbdts       r>   test_feature_importancesr      s;     Dt3444HHQN4/000rq   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$   rI   r-   rJ   r]   r!   )axisr   )r
   r4   r5   r6   predict_probarM   r7   rC   rD   r   rL   rN   rR   allclasses_takeargmax)rV   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.r2   rz   )r
   r4   r5   r6   r7   rC   rD   )r{   r<   r=   s      r>   $test_single_class_with_sample_weightr     sL    &M
$#A
FC	C  
z	-1M2 
.	-	-s   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 expectedr2   z X should be C-ordered np.ndarray)r   rd   r
   r7   rR   zerosrU   reshaper4   r5   r6   r   rP   r_   asfortranarray)r   xrD   x_sparse_cscr<   re   err_msg	x_fortrans           r>    test_check_inputs_predict_stagesr   )  s     $$sCDAq #L
$#A
FCGGAqMHHagg''A.ECG	z	1sc6G6GO 
2!!!$I	z)K	Ls	33D3DeL 
M	L 
2	1 
M	Ls   #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   )rI   ry   r^   r_   max_featuresr-   rv   zGB failed with deviance %.4f)r   rd   r
   r7   _lossdecision_function)	rV   rC   rD   rg   rh   ri   rj   gbrtrG   s	            r>   test_max_feature_regressionr   :  s    $$uCUVDAqh$%VGh$%VG%'D 	HHWgzz&$"8"8"@AHc>D9HDD>rq   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-   rt   r   rK   r$   )r1   r_   rb   rI   r-   Nr    r   MedIncr!   r%   >   AveOccupLatitude	Longitude)
r9   r:   r   r   r7   rR   argsortr   feature_namesset)fetch_california_housing_fxtrV   
californiarC   rD   rg   rh   ri   rj   r   
sorted_idxssorted_featuress                r>   "test_feature_importance_regressionr   N  s     ./J??J--qA'7	1-($GVWf $'C GGGWC445dd;J<FGJqz//2JO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[   )rI   r   333333?sqrtlog2g{Gz?)r   rd   rU   r
   r7   max_features_r   intrR   r   r   )rC   rD   _r*   rg   ri   r   s          r>   test_max_featuresr   r  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"""rq   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   ra   dtype)r   r   r   r4   r5   r6   rR   fromiterstaged_predictfloat64r7   rL   rU   r   )rC   rD   rg   ri   rh   r<   r   s          r>   test_staged_predictr     s     ""TMDAq#w$3WGstWF
#
%C	z	"
C&&v.bjjA 
# GGGW[[ F 'ww&,,&&& ( fa( 
#	"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\   ra      rI   r   r   r"   )r   rd   r
   r4   r5   r   rR   r   staged_predict_probar   r7   r   rU   r   rL   r   r   )	rC   rD   rg   ri   rh   rj   r<   r   staged_probas	            r>   test_staged_predict_probar     s?    $$t!DDAq#w$3WGstWagFF
$"
5C	~	&
C,,V4BJJG 
' GGGW $$V,||v||+++ - s{{6*F3 008||A,"4"4Q"7777L&&q)))) 9 c//7F! 
'	&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!   )rL   r   r   staged_T)record)rR   randomRandomStateuniformastyper   r7   getattrwarningscatch_warningslistr   )	r   rV   rngrC   rD   	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 Q0M 2avvmA&!+,,, B
 2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
   r7   rC   rD   r   rL   rM   rN   rO   rP   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
   r4   r5   r6   r7   rC   rR   r|   rO   r   rL   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%   rv   )rI   r1   r^   alphar-   rs   )rI   r1   r^   r-   )r   r7   r~   r}   rL   r   )rV   clf_quantile
y_quantileclf_aey_aes        r>   test_quantile_lossr    s{    ,'L UE"%%e,J&'	F JJue>>% DJ%rq   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strrD   r7   rC   r   rL   rM   rN   rO   rP   )r<   symbol_ys     r>   test_symbol_labelsr    sa    
$#A
FCCQK HGGAxs{{1~tC[,A'BC#coo&&&&rq   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
   rR   asarrayrD   float32r7   rC   r   rL   rM   rN   rO   rP   )r<   float_ys     r>   test_float_class_labelsr    sh    
$#A
FCjj"**-GGGAws{{1~rzz+RZZ'PQ#coo&&&&rq   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().r2   )r
   rR   r
  rD   int32newaxisr4   warnsr   r7   rC   r   rL   rM   rN   rO   rP   )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	  )rR   r   rC   r
   r7   rD   r   rL   rM   rN   rO   rP   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&&&&rq   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!   rv   rI   r-   ru   r   r   )gRQ?g333333?gQ?g)\(g)\(?r"   )decimal)r7   rC   rD   oob_improvement_rU   r   rR   array)r  r   s     r>   test_oob_improvementr  Y  sl     *qCI MM!Q%%++A.#555""2A&
01rq   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\   rv   r  r   r    r   )rI   r-   ru   n_iter_no_change)r   rd   r7   oob_scores_rU   r4   approx
oob_score_)r  rC   rD   r   s       r>   test_oob_scoresr%  i  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Krq   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   rd   r7   r4   r5   AttributeErroroob_attribute)r  r(  rC   rD   r   s        r>   test_oob_attributes_errorr)    s^     $$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$   rG   r!   rv   r   r   r   r    r   )rI   r1   r-   ru   r!  )r
   r7   r8   r9   r:   re   r  rU   rI   r"  r4   r#  r$  )r   re   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Krq   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!   皙?)rI   r-   verboseru    %10s%16sr#   )Iter
Train LosszOOB ImproveRemaining Timec              3       K   | ]  }d   ywr!   Nrc   .0ls     r>   	<genexpr>z&test_verbose_output.<locals>.<genexpr>       87!7      sysior.  stdoutr
   r7   rC   rD   seekreadlinerstripjoinsum	readlinesrA  r.  
old_stdoutr<   verbose_outputheadertrue_headern_liness           r>   test_verbose_outputrP    s    JCJ
$q!sC GGAqMZZNCJ $$&--/F((F8vhl23 7 K &   8^55788GWrq   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"   )rI   r-   r0  r1  r2  r3  )r4  r5  r6  c              3       K   | ]  }d   ywr8  rc   r9  s     r>   r<  z+test_more_verbose_output.<locals>.<genexpr>  r=  r>  r@  rJ  s           r>   test_more_verbose_outputrS    s    JCJ
$#Aq
QCGGAqMZZNCJ $$&--/F((F8vhl23 7 K
 &   8^55788G'>>rq   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\   ra   r!   rI   r^   r-   TrI   r^   
warm_startr-   r   )	r   rd   r7   
set_paramsr   r   rL   r   r   rT  rV   rC   rD   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Frq   c                 J   t        j                  d|      \  }} | dd|      }|j                  ||        | ddd|      }|j                  ||       |j                  d       |j                  ||       t	        |j                  |      |j                  |             y )	Nr$   r\   i,  r!   rV  TrW  r   )r   rd   r7   rY  r   rL   rZ  s         r>   test_warm_start_n_estimatorsr_    s     $$sASTDAq
3!:L
MCGGAqMA$EWF JJq!
3'
JJq!FNN1%s{{1~6rq   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rI   r^   rX  n   r"   rI   r^   r   r      r   )r   rd   r7   rY  rP   r^   range)rT  rC   rD   r[  is        r>   test_warm_start_max_depthrh    s     $$sCDAq
3!
=CGGAqMNNqN1GGAqM ??4 **a///1b\r1u%//1444 rq   c                 F   t        j                  dd      \  }} | dd      }|j                  ||        | ddd      }|j                  ||       |j                  d       |j                  ||       t	        |j                  |      |j                  |             y )	Nr$   r!   r\   rc  Tra  F)rX  )r   rd   r7   rY  r   rL   )rT  rC   rD   r[  est_2s        r>   test_warm_start_clearrk  +  s     $$sCDAq
3!
,CGGAqMSA$?E	IIaO	&	IIaOemmA.A?rq   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\   rv   T)rI   r^   ru   rX  r-   r    ra   r   NFrI   rX  )
r   rd   r7   r"  r$  rO   r4   r#  rY  r   )r   rC   rD   rI   r   
oob_scores	oob_scoren_more_estimatorss           r>    test_warm_start_state_oob_scoresrq  :  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5rq   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\   Tra  c   r   )r   rd   r7   rY  r4   r5   r6   rT  rC   rD   r[  s       r>   $test_warm_start_smaller_n_estimatorsru  Z  sh     $$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\   rc  Trm  )r   rd   r7   r   rY  rI   r   rL   )rT  rC   rD   r[  est2s        r>   "test_warm_start_equal_n_estimatorsrx  e  sy     $$sCDAq
3!
,CGGAqM:DOO!1!1dOCHHQNdll1os{{1~>rq   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\   Tra  rb  rv   )rI   ru   rJ   r    )r   rd   r7   rY  r   r  rR   r   r"  r   r4   r#  r$  rt  s       r>   test_warm_start_oob_switchr{  s  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&--"????rq   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\   ra   rv   )rI   r^   ru   r-   TrI   r^   ru   r-   rX  r   r    )
r   rd   r7   rY  r   r  r"  r4   r#  r$  )rT  rC   rD   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Erq   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\   rv   Tr}  ra   r   r    )r   rd   r7   rL   rY  r   r  r"  r4   r#  r$  )	rT  r  rC   rD   	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:rq   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)rI   r-   rX  re  r   )r   rd   r7   rY  rR   r   r   rL   )rT  rV   rC   rD   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!&<=rq   c                     | dk(  ryy)z#Returns True on the 10th iteration.	   TFrc   )rg  r[  localss      r>   early_stopping_monitorr    s    Avrq   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   rv   )rI   r^   r-   ru   )monitorr   r'   r    rx   r   T)rI   r^   r-   ru   rX  Frm  )r   rd   r7   r  rI   rP   rU   rQ   r  r"  r4   r#  r$  rY  rt  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&--"????rq   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   rI   r^   r-   rb   rd  )sklearn.tree._treer  r   rd   r
   r7   rP   tree_r^   children_leftrU   )r  rC   rD   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Prq   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   r7   r~   r}   rP   r  r  rU   )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Prq   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!   zerorv   )rI   r^   r-   rB   r_   )r	   r7   r~   r}   r   rL   r   )rV   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"""rq   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  )rI   r^   r-   rB   gQ?r   )r8   r9   rR   r  r:   r
   r7   re   )rV   rC   rD   r[  masks        r>   test_zero_estimator_clfr  ?  s    		A
A
$13EFC GGAqM99Q?T!!! 6DAdGAteH
$13EFC GGAqM99Q?T!!!rq   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^   rb   rd  )r^   )r   rd   r7   rP   r  r^   )r  rC   rD   r  r[  r  s         r>   test_max_leaf_nodes_max_depthr  V  s     $$sCDAq	A
!
4
8
8A
>C??4 &&D>>Q

"
&
&q!
,C??4 &&D>>Qrq   c                     t        j                  dd      \  }} | d      }|j                  ||       |j                  j                  D ]  }|j
                  dk(  rJ  y )Nr$   r!   r\   r   )min_impurity_decrease)r   rd   r7   rP   flatr  )r  rC   rD   r[  r  s        r>   test_min_impurity_decreaser  f  sY    $$sCDAq
C
0CGGAqM$$ ))S000 %rq   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'   Trm  r   r!   r"   r#   )r
   r7   rP   rU   r   s    r>   %test_warm_start_wo_nestimators_changer  r  s     %"
FCGGaVaVq!f%??  #r)))GGaVaVq!f%??  #r)))rq   )r1   value))rr   rv   )rs   rJ   )rt   rv   )r   rv   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_   rI   r1   rz   )r   r7   rL   )r1   r  rC   rD   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+++rq   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  rF   r   )rI   r1   rz   )r
   r7   r   rL   )rC   rD   r{   r1   r  s        r>   *test_non_uniform_weights_toy_edge_case_clfr    sm    
Q!Q!Q!Q(AA M+'QTB
q!=12::1vh/!5 ,rq   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   r`   r!   r   )r-   r)   r*   	n_classesr'   r"   gHz>)rI   r-   r^   r  )r   make_multilabel_classificationr7   r   rT   rL   r   
issubclassr
   r   predict_log_probar   zipstaged_decision_function)	r  r  rD   rC   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. 
OJ &j#6	 
 >rq   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#   *   )rI   r!  r_   r^   r-   tolMbP?r   gffffff?)r   r   r7   n_estimators_re   )
r  rC   rD   rI   gb_large_tolgb_small_tolrg   rh   ri   rj   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3rq   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\   r`   r   r#   r  )rI   r_   r^   r-   rx   )r   r
   r7   r   r  )rC   rD   gbcgbrs       r>   -test_gradient_boosting_without_early_stoppingr    s     A>DAq
$sabC GGAqM
#sabC GGAqM """"""rq   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  )rI   r!  validation_fractionr_   r^   r-   r   )r  r   r!  )rI   r!  r_   r^   r  r-   r   )r   r
   r   rY  r   r   r7   r  )rC   rD   r  gbc2gbc3r  gbr2gbr3rg   rh   ri   rj   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1rq   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 memberr2   r
   r4   r5   r6   r7   )rC   rD   r  s      r>   test_early_stopping_stratifiedr  -  s`    
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   rc   rq   r>   _make_multiclassr  9  s    CCrq   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$   rA   rz   z*estimator.*does not support sample weightsr2   )	rR   r   r   r   r7   r   r4   r5   r6   )r  dataset_makerinit_estimatorrV   rC   rD   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-@ 
W	V	Vs   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   rA   z>The initial estimator Pipeline does not support sample weightsr2   rz   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   r7   r4   r5   r6   rR   r|   rU   r   reescaper   )rC   rD   rB   r  
invalid_nur   s         r>   )test_gradient_boosting_with_init_pipeliner  \  s    *DAq)+,D	"	-BFF1aL	N
 	q!2771771:#67	
 J	"",Y	8  
,BIIg4F	G6j1&D1
q!2771771:#67	 
H	G
 
 
H	Gs   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   r/  )r!  r-   r  z0The training data after the early stopping splitr2   g?r  )rC   rD   r  s      r>   test_early_stopping_n_classesr  z  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   )rR   r   r|   r   r7   r   r   r   )rC   rD   r  s      r>   'test_gbr_degenerate_feature_importancesr    sQ    
A
A
#
%
)
)!Q
/Cs//"BJJ1OPrq   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   rs   r0   rt   N)rR   tilearangeminimumc_r   r   r/   rU   r   r7   rL   r   )n_repr)   rD   x1x2rC   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Hrq   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   rJ   Noverflowr2   g|=)	r   r   simplefilterr   rR   r   r4   r  RuntimeWarningrc   rq   r>   test_safe_divider    s    		 	 	"g&BJJu-q1Q666BJJsORZZ_=BBB 
# 
nJ	7RZZ&. 
8	7	 
#	" 
8	7s   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"   rr   r$   r1   rI   )
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ñح
@>rz  Nr!   rz   )
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=)rR   r  r  r  r   r7   r  r   rL   rQ   r  )	r)   rD   r  r  rC   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Orq   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"   rt   r$   r/  )r1   rI   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>rz  N)rR   r  r  r  r   r7   r   r   clossdeltar  rL   rQ   r)   rD   r  r  rC   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Crq   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"   rG   r$   r
  g
t?gr3>r  r  )
gu>?g5Ү^?g?g	i?gN?gv^q!?g2C6 ?gȍl?g1oEa	?g5C?rz  N
rR   r  r  r  r
   r7   r  r   r   rQ   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Crq   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"   rG   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=>rz  Nr  r  s           r>   ,test_multinomial_error_exact_backward_compatr"  i  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Crq   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]   rv   r%   Nr"   )r_   ru   rI   rb   r^   r-   min_samples_leafr  rc   )r   rd   r
   r   r   r  r7   )rV   rC   rD   paramsr<   s        r>   test_gb_denominator_zeror&    sz     $$sDDAq *F %
.v
.C		 	 	"g&1 
#	"	"s   (A55A>)__doc__r  r   numpyrR   r4   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_ESTIMATORSrC   rD   rM   rN   r~   r}   r   r   r   	load_irisr8   permutationr:   r   permr9   r?   rE   markparametrizerY   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r%  r)  r+  rP  rS  r]  r_  rh  rk  rq  ru  rx  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r&  rc   rq   r>   <module>rC     s   
    )   A 9 R - > D 1 . 4 * '  , 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rq   