
    -iU              	          S r SSKrSSKrSSKrSSKJr  SSKJrJ	r	  SSK
JrJr  SSKJrJr  SSKJr  SSKJr  SS	KJrJr  SS
KJrJr  SSKJrJr  SSKJr  SSKJ r   SSK!J"r"J#r#J$r$  SSK%J&r&J'r'J(r(J)r)J*r*  \RV                  RY                  S5      r-SS/SS/SS/SS/SS/SS//r./ SQr// SQr0SS/SS/SS//r1/ SQr2/ SQr3\Rh                  " 5       r5\-Rm                  \5Rn                  Rp                  5      r9\" \5Rt                  \5Rn                  \-S9u  \5l:        \5l7        \Rv                  " 5       r<\" \<Rt                  \<Rn                  \-S9u  \<l:        \<l7        S r=S r>S r?S r@S rA\R                  R                  S/ S Q5      S! 5       rDS" rES# rFS$ rGS% rHS& rIS' rJS( rK\R                  R                  S)\L" / \'Q\(Q\*Q\&Q\)Q\'S*\(-  -   5      5      S+ 5       rM\R                  R                  S)\L" / \'Q\(Q\*Q\&Q\)Q\'S*\(-  -   5      5      S, 5       rNS- rOS. rPS/ rQS0 rRS1 rS\R                  R                  S2\" 5       \5Rt                  \5Rn                  4\" 5       \<Rt                  \<Rn                  4/5      S3 5       rTS4 rUS5 rVS6 rWg)7z6Testing for the boost module (sklearn.ensemble.boost).    N)datasets)BaseEstimatorclone)DummyClassifierDummyRegressor)AdaBoostClassifierAdaBoostRegressor)_samme_proba)LinearRegression)GridSearchCVtrain_test_split)SVCSVR)DecisionTreeClassifierDecisionTreeRegressor)shuffle)NoSampleWeightWrapper)assert_allcloseassert_array_almost_equalassert_array_equal)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS      )foor    r    r   r   r   )r   r   r   r   r   r      )r    r   r   )r   r   r   random_statec                  D  ^ [         R                  " / SQ/ SQ/ SQ/ SQ/5      mT[         R                  " TR                  SS95      S S 2[         R                  4   -  m " U4S jS5      n U " 5       n[        US	[         R                  " T5      5      n[        UR                  TR                  5        [         R                  " U5      R                  5       (       d   e[        [         R                  " USS9/ S
Q5        [        [         R                  " USS9/ SQ5        g )N)r   ư>r   )gRQ?g333333?皙?)igRQ?g      ?)r%   r   g&.>r   axisc                   "   > \ rS rSrU 4S jrSrg)'test_samme_proba.<locals>.MockEstimatorB   c                 H   > [        UR                  TR                  5        T$ N)r   shape)selfXprobss     ^/var/www/html/venv/lib/python3.13/site-packages/sklearn/ensemble/tests/test_weight_boosting.pypredict_proba5test_samme_proba.<locals>.MockEstimator.predict_probaC   s    qww4L     N)__name__
__module____qualname____firstlineno__r3   __static_attributes__)r1   s   r2   MockEstimatorr*   B   s    	 	r5   r<   r!   )r   r   r   r   )r   r   r   r   )nparrayabssumnewaxisr
   	ones_liker   r.   isfiniteallargminargmax)r<   mocksamme_probar1   s      @r2   test_samme_probarI   7   s     HH	'):OLE 
RVVEII1I%&q"**}55E 
 ?DtQU(;<K{((%++6;;{#'')))) ryy15|Dryy15|Dr5   c                  
   [         R                  " [        [        5      5      n [	        5       R                  [        U 5      n[        UR                  [        5      [         R                  " [        [        5      S45      5        g )Nr   )r=   oneslenr0   r   fitr   r3   )y_tclfs     r2   test_oneclass_adaboost_probarP   T   sP     ''#a&/C


"
"1c
*Cc//2BGGSVQK4HIr5   c                     [        SS9n U R                  [        [        5        [	        U R                  [        5      [        5        [	        [        R                  " [        R                  " [        5      5      U R                  5        U R                  [        5      R                  [        [        5      S4:X  d   eU R                  [        5      R                  [        [        5      4:X  d   eg )Nr   r"   r   )r   rM   r0   y_classr   predictT	y_t_classr=   uniqueasarrayclasses_r3   r.   rL   decision_functionrO   s    r2   test_classification_toyr[   ]   s    
!
,CGGAws{{1~y1ryyI!67FQ%%#a&!444  #))c!fY666r5   c                      [        SS9n U R                  [        [        5        [	        U R                  [        5      [        5        g Nr   r"   )r	   rM   r0   y_regrr   rS   rT   y_t_regrrZ   s    r2   test_regression_toyr`   g   s,    

+CGGAvs{{1~x0r5   c                     [         R                  " [        R                  5      n [	        5       nUR                  [        R                  [        R                  5        [        XR                  5        UR                  [        R                  5      nUR                  S   [        U 5      :X  d   eUR                  [        R                  5      R                  S   [        U 5      :X  d   eUR                  [        R                  [        R                  5      nUS:  d   SU< 35       e[        UR                  5      S:  d   e[        [        S UR                   5       5      5      [        UR                  5      :X  d   eg )Nr   g?zFailed with score = c              3   8   #    U  H  oR                   v   M     g 7fr-   r"   .0ests     r2   	<genexpr>test_iris.<locals>.<genexpr>        ?##   )r=   rV   iristargetr   rM   datar   rX   r3   r.   rL   rY   scoreestimators_set)classesrO   probarm   s       r2   	test_irisrr   n   s   ii$G

CGGDIIt{{#w-dii(E;;q>S\)))  +11!4GDDDIIdii-E3;1/uj11; s!###s?s??@CDXXXXr5   loss)linearsquareexponentialc                    [        U SS9nUR                  [        R                  [        R                  5        UR                  [        R                  [        R                  5      nUS:  d   e[        UR                  5      S:  d   e[        [        S UR                   5       5      5      [        UR                  5      :X  d   eg )Nr   )rs   r#   g?r   c              3   8   #    U  H  oR                   v   M     g 7fr-   r"   rc   s     r2   rf    test_diabetes.<locals>.<genexpr>   rh   ri   )	r	   rM   diabetesrl   rk   rm   rL   rn   ro   )rs   regrm   s      r2   test_diabetesr|      s     A
6CGGHMM8??+IIhmmX__5E4<< s!###s?s??@CDXXXXr5   c                     [         R                  R                  S5      n U R                  S[        R
                  R                  S9nU R                  S[        R
                  R                  S9n[        SS9nUR                  [        R                  [        R
                  US9  UR                  [        R                  5      nUR                  [        R                  5       Vs/ s H  oUPM     nnUR                  [        R                  5      nUR                  [        R                  5       Vs/ s H  oUPM     nnUR                  [        R                  [        R
                  US9n	UR!                  [        R                  [        R
                  US9 V
s/ s H  oPM     nn
[#        U5      S:X  d   e[%        XFS   5        [#        U5      S:X  d   e[%        XxS   5        [#        U5      S:X  d   e[%        XS   5        ['        SSS9nUR                  [        R                  [        R
                  US9  UR                  [        R                  5      nUR                  [        R                  5       Vs/ s H  oUPM     nnUR                  [        R                  [        R
                  US9n	UR!                  [        R                  [        R
                  US9 V
s/ s H  n
U
PM     nn
[#        U5      S:X  d   e[%        XFS   5        [#        U5      S:X  d   e[%        XS   5        g s  snf s  snf s  sn
f s  snf s  sn
f )Nr   
   sizen_estimatorssample_weightr   r   r#   )r=   randomRandomStaterandintrj   rk   r.   rz   r   rM   rl   rS   staged_predictr3   staged_predict_probarm   staged_scorerL   r   r	   )rngiris_weightsdiabetes_weightsrO   predictionspstaged_predictionsrq   staged_probasrm   sstaged_scoress               r2   test_staged_predictr      s   
))


"C;;r(9(9;:L{{2HOO,A,A{B
"
-CGGDIIt{{,G?++dii(K%(%7%7		%BC%B!%BCdii(E # 8 8 CD C1Q CMDIIdiiLIIE##DIIt{{,#WWaW   !"b(((kb+AB}###e2%67}###e2%67 !
<CGGHMM8??:JGK++hmm,K%(%7%7%FG%F!%FGIIhmmX__DTIUE !!MM8??:J " 

A 	

   !"b(((kb+AB}###e2%67A DD  Hs   &L33L8L==M&Mc                  B   [        [        5       S9n SSS.n[        X5      nUR                  [        R
                  [        R                  5        [        [        5       SS9n SSS.n[        X5      nUR                  [        R
                  [        R                  5        g )N	estimator)r   r   )r   estimator__max_depthr   r   r#   )
r   r   r   rM   rj   rl   rk   r	   r   rz   )boost
parametersrO   s      r2   test_gridsearchr      s}     )?)ABE &J u
)CGGDIIt{{# (=(?aPE"(&IJ
u
)CGGHMM8??+r5   c                  j   SS K n [        5       nUR                  [        R                  [        R
                  5        UR                  [        R                  [        R
                  5      nU R                  U5      nU R                  U5      n[        U5      UR                  :X  d   eUR                  [        R                  [        R
                  5      nX%:X  d   e[        SS9nUR                  [        R                  [        R
                  5        UR                  [        R                  [        R
                  5      nU R                  U5      nU R                  U5      n[        U5      UR                  :X  d   eUR                  [        R                  [        R
                  5      nX%:X  d   eg r]   )pickler   rM   rj   rl   rk   rm   dumpsloadstype	__class__r	   rz   )r   objrm   r   obj2score2s         r2   test_pickler      s    
CGGDIIt{{#IIdii-ESA<<?D:&&&ZZ		4;;/F?? 
+CGGHMM8??+IIhmmX__5ESA<<?D:&&&ZZx7F??r5   c            
         [         R                  " SSSSSSSS9u  p[        5       nUR                  X5        UR                  nUR
                  S   S:X  d   eUS S2[        R                  4   USS  :  R                  5       (       d   eg )Ni  r~   r!   r   Fr   )	n_samples
n_featuresn_informativen_redundant
n_repeatedr   r#   )	r   make_classificationr   rM   feature_importances_r.   r=   rA   rD   )r0   yrO   importancess       r2   test_importancesr      s    ''DA 
CGGAM**KQ2%%%BJJ';qr?:??AAAAr5   c                     [        5       n [        R                  " S5      n[        R                  " [
        US9   U R                  [        [        [        R                  " S/5      S9  S S S 5        g ! , (       d  f       g = f)Nz*sample_weight.shape == (1,), expected (6,)matchr   r   )r   reescapepytestraises
ValueErrorrM   r0   rR   r=   rW   )rO   msgs     r2   ,test_adaboost_classifier_sample_weight_errorr     sP    

C
))@
AC	z	-7"**bT*:; 
.	-	-s   /A22
B c                  F   SSK Jn   [        U " 5       5      nUR                  [        [
        5        [        [        5       5      nUR                  [        [        5        SSK Jn  [        U" 5       SS9nUR                  [        [
        5        [        [        5       SS9nUR                  [        [
        5        SS/SS/SS/SS//n/ SQn[        [        5       5      n[        R                  " [        SS9   UR                  X45        S S S 5        g ! , (       d  f       g = f)	Nr   )RandomForestClassifier)RandomForestRegressorr"   r   )r    barr   r   zworse than randomr   )sklearn.ensembler   r   rM   r0   r^   r   rR   r   r	   r   r   r   r   )r   rO   r   X_faily_fails        r2   test_estimatorr   	  s    7 35
6CGGAv
SU
#CGGAw6
13!
DCGGAv
CE
2CGGAv !fq!fq!fq!f-F!F
SU
#C	z)<	= 
>	=	=s   7D
D c                      Sn [        SSS9n[        R                  " [        U S9   UR	                  [
        R                  [
        R                  5        S S S 5        g ! , (       d  f       g = f)Nz+Sample weights have reached infinite values   g      7@)r   learning_rater   )r   r   warnsUserWarningrM   rj   rl   rk   )r   rO   s     r2   test_sample_weights_infiniter   %  sC    
7C
"D
AC	k	-		4;;' 
.	-	-s   /A
A,z(sparse_container, expected_internal_type   c                     " S S[         5      n[        R                  " SSSSS9u  p4[        R                  " U5      n[        X4SS	9u  pVpxU " U5      n	U " U5      n
[        U" S
S9SS9R                  X5      n[        U" S
S9SS9R                  XW5      nUR                  U
5      nUR                  U5      n[        X5        UR                  U
5      nUR                  U5      n[        X5        UR                  U
5      nUR                  U5      n[        X5        UR                  U
5      nUR                  U5      n[        X5        UR                  X5      nUR                  Xh5      n[        X5        UR                  U
5      nUR                  U5      n[!        X5       H  u  nn[        UU5        M     UR#                  U
5      nUR#                  U5      n[!        X5       H  u  nn[        UU5        M     UR%                  U
5      nUR%                  U5      n[!        X5       H  u  nn[        UU5        M     UR'                  X5      nUR'                  Xh5      n[!        X5       H  u  nn[        UU5        M     UR(                   Vs/ s H  nUR*                  PM     nn[-        U Vs/ s H  nUU:H  PM
     sn5      (       d   eg s  snf s  snf )Nc                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )-test_sparse_classification.<locals>.CustomSVCi<  z8SVC variant that records the nature of the training set.c                 D   > [         TU ]  XUS9  [        U5      U l        U $ z<Modification on fit caries data type for later verification.r   superrM   r   
data_type_r/   r0   r   r   r   s       r2   rM   1test_sparse_classification.<locals>.CustomSVC.fit?  #    GKMK:"1gDOKr5   r   r-   r7   r8   r9   r:   __doc__rM   r;   __classcell__r   s   @r2   	CustomSVCr   <      F	 	r5   r   r         *   )	n_classesr   r   r#   r   r"   T)probabilityr   )r   r   make_multilabel_classificationr=   ravelr   r   rM   rS   r   rY   r   predict_log_probar3   rm   staged_decision_functionzipr   r   r   rn   r   rD   )sparse_containerexpected_internal_typer   r0   r   X_trainX_testy_trainy_testX_train_sparseX_test_sparsesparse_classifierdense_classifiersparse_clf_resultsdense_clf_resultssparse_clf_resdense_clf_resitypests                       r2   test_sparse_classificationr   ,  s    C  22rabDA 	A'71'M$GW%g.N$V,M +- 
c."  *- 
c'  +22=A(008)= +<<]K(::6B0D +<<]K(::6B0D +88G(66v>0D +00G(..v>0D +CCMR(AA&I),-?)S%!.-@ *T +99-H(77?),-?)S%>=9 *T +??N(==fE),-?)S%!.-@ *T +77N(55fE),-?)S%>=9 *T $5#@#@A#@aQ\\#@EAU;U++U;<<<< B;s   K2Kc                     " S S[         5      n[        R                  " SSSSS9u  p4[        X4SS	9u  pVpxU " U5      n	U " U5      n
[	        U" 5       SS
9R                  X5      n[	        U" 5       SS
9R                  XW5      nUR                  U
5      nUR                  U5      n[        X5        UR                  U
5      nUR                  U5      n[        X5       H  u  nn[        UU5        M     UR                   Vs/ s H  nUR                  PM     nn[        U Vs/ s H  nUU:H  PM
     sn5      (       d   eg s  snf s  snf )Nc                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ ))test_sparse_regression.<locals>.CustomSVRi  z8SVR variant that records the nature of the training set.c                 D   > [         TU ]  XUS9  [        U5      U l        U $ r   r   r   s       r2   rM   -test_sparse_regression.<locals>.CustomSVR.fit  r   r5   r   r-   r   r   s   @r2   	CustomSVRr     r   r5   r   r   2   r   r   )r   r   	n_targetsr#   r   r"   r   )r   r   make_regressionr   r	   rM   rS   r   r   r   rn   r   rD   )r   r   r   r0   r   r   r   r   r   r   r   sparse_regressordense_regressorsparse_regr_resultsdense_regr_resultssparse_regr_resdense_regr_resr   r   r   s                       r2   test_sparse_regressionr	    sQ    C  ##qrDA (81'M$GW%g.N$V,M )9;QOSS
 ()+ANRRO
 +22=A(0081F +99-H(77?+./B+W'!/>B ,X $4#?#?@#?aQ\\#?E@U;U++U;<<<< A;s    D?!Ec                       " S S[         5      n [        U " 5       SS9nUR                  [        [        5        [        UR                  5      [        UR                  5      :X  d   eg)z
AdaBoostRegressor should work without sample_weights in the base estimator
The random weighted sampling is done internally in the _boost method in
AdaBoostRegressor.
c                        \ rS rSrS rS rSrg)=test_sample_weight_adaboost_regressor.<locals>.DummyEstimatori  c                     g r-   r6   )r/   r0   r   s      r2   rM   Atest_sample_weight_adaboost_regressor.<locals>.DummyEstimator.fit  s    r5   c                 H    [         R                  " UR                  S   5      $ )Nr   )r=   zerosr.   )r/   r0   s     r2   rS   Etest_sample_weight_adaboost_regressor.<locals>.DummyEstimator.predict  s    88AGGAJ''r5   r6   N)r7   r8   r9   r:   rM   rS   r;   r6   r5   r2   DummyEstimatorr    s    		(r5   r  r!   r   N)r   r	   rM   r0   r^   rL   estimator_weights_estimator_errors_)r  r   s     r2   %test_sample_weight_adaboost_regressorr    sQ    ( ( n.Q?E	IIau''(C0G0G,HHHHr5   c                     [         R                  R                  S5      n U R                  SSS5      nU R	                  SS/S5      nU R                  S5      n[        [        SS95      nUR                  X5        UR                  U5        UR                  U5        [        [        5       5      nUR                  X5        UR                  U5        g)zL
Check that the AdaBoost estimators can work with n-dimensional
data matrix
r   3   r!   r   most_frequent)strategyN)r=   r   r   randnchoicer   r   rM   rS   r3   r	   r   )r   r0   ycyrr   s        r2   test_multidimensional_Xr    s    
 ))


"C		"aA	QFB	B	2BHIE	IIa	MM!	n./E	IIa	MM!r5   c                  L   [         R                  [         R                  p[        [	        5       5      n[        US9nSR                  UR                  R                  5      n[        R                  " [        US9   UR                  X5        S S S 5        g ! , (       d  f       g = f)Nr   z {} doesn't support sample_weightr   )rj   rl   rk   r   r   r   formatr   r7   r   r   r   rM   )r0   r   r   rO   err_msgs        r2   -test_adaboostclassifier_without_sample_weightr"    si    99dkkq%o&78I
y
1C077	8K8K8T8TUG	z	1 
2	1	1s   :B
B#c                     [         R                  R                  S5      n [         R                  " SSSS9nSU-  S-   U R	                  UR
                  S   5      S-  -   nUR                  S	S
5      nUS	==   S-  ss'   SUS	'   [        [        5       S
SS9n[        U5      n[        U5      nUR                  X5        UR                  US S	 US S	 5        [         R                  " U5      nSUS	'   UR                  XUS9  UR                  US S	 US S	 5      nUR                  US S	 US S	 5      nUR                  US S	 US S	 5      n	Xx:  d   eXy:  d   eU[        R                  " U	5      :X  d   eg )Nr   r   d     )numg?r&   g-C6?r   r   r~   i'  r   r   r#   r   )r=   r   r   linspacerandr.   reshaper	   r   r   rM   rB   rm   r   approx)
r   r0   r   regr_no_outlierregr_with_weightregr_with_outlierr   score_with_outlierscore_no_outlierscore_with_weights
             r2   $test_adaboostregressor_sample_weightr2     s    ))


#C
As%A	q3388AGGAJ/&89A			"aA bERKEAbE ("$11O _-o. !#2#2'LLOMM"];*003B3B@&,,QsVQsV<(..q"vq"v>000111v}}->????r5   c                      [        [        R                  " SS9SS06u  pp#[        SS9nUR	                  X5        [        [        R                  " UR                  U5      SS9UR                  U5      5        g )NT)
return_X_yr#   r   r"   r   r'   )
r   r   load_digitsr   rM   r   r=   rF   r3   rS   )r   r   r   r   models        r2    test_adaboost_consistent_predictr7  &  sm     (8				.(=?($GW B/E	IIg
		%%%f-A6f8Mr5   zmodel, X, yc                     [         R                  " U5      nSUS'   Sn[        R                  " [        US9   U R                  XUS9  S S S 5        g ! , (       d  f       g = f)Nir   z1Negative values in data passed to `sample_weight`r   r   )r=   rB   r   r   r   rM   )r6  r0   r   r   r!  s        r2   #test_adaboost_negative_weight_errorr9  5  sJ     LLOMM"AG	z	1		!m	4 
2	1	1s   A
Ac                  h   [         R                  R                  S5      n U R                  SS9nU R	                  SS/SS9n[         R
                  " U5      S-  n[        SS	S
9n[        USS	S9nUR                  XUS9  [         R                  " UR                  5      R                  5       S:X  d   eg)zCheck that we don't create NaN feature importance with numerically
instable inputs.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/20320
r   )r%  r~   r   r   r   r%  gtDS 'T	r~      )	max_depthr#      r'  r   N)r=   r   r   normalr  rB   r   r   rM   isnanr   r@   )r   r0   r   r   tree	ada_models         r2   Ftest_adaboost_numerically_stable_feature_importance_with_small_weightsrB  E  s     ))


#C



#A

Aq6
%ALLOf,M!BR@D"TQSTIMM!mM488I223779Q>>>r5   c                    Sn[         R                  " USU S9u  p#[        SU S9R                  X#5      nUR	                  U5      n[        UR                  SS9SSS9  [        [        R                  " U5      5      SS	US-
  -  1:X  d   eUR                  U5       HH  n[        UR                  SS9SSS9  [        [        R                  " U5      5      SS	US-
  -  1:X  a  MH   e   UR                  S
S9R                  X#5        UR	                  U5      n[        UR                  SS9SSS9  UR                  U5       H  n[        UR                  SS9SSS9  M     g)zCheck that the decision function respects the symmetric constraint for weak
learners.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/26520
r!   r   )r   n_clusters_per_classr#   r   r'   r   g:0yE>)atolr   r   r   N)r   r   r   rM   rY   r   r@   ro   r=   rV   r   
set_params)global_random_seedr   r0   r   rO   y_scores         r2   test_adaboost_decision_functionrI  V  sY    I''!BTDA !:L
M
Q
QRS
WC##A&GGKKQK'6 ryy!"q"	A*>&???? //2+QT: 299W%&1bIM.B*CCCC 3 NNN"&&q,##A&GGKKQK'6//2+QT: 3r5   c                      [        SSS9n [        R                  " [        SS9   U R	                  [
        [        5        S S S 5        g ! , (       d  f       g = f)Nr   SAMME)r   	algorithmz'The parameter 'algorithm' is deprecatedr   )r   r   r   FutureWarningrM   r0   rR   )adaboost_clfs    r2   test_deprecated_algorithmrO  |  s:    %1HL	m+T	UG$ 
V	U	Us   A
A)Xr   r   numpyr=   r   sklearnr   sklearn.baser   r   sklearn.dummyr   r   r   r   r	   !sklearn.ensemble._weight_boostingr
   sklearn.linear_modelr   sklearn.model_selectionr   r   sklearn.svmr   r   sklearn.treer   r   sklearn.utilsr   sklearn.utils._mockingr   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   r   r   r   r   r   r   r   r0   rR   r^   rT   rU   r_   	load_irisrj   permutationrk   r   permrl   load_diabetesrz   rI   rP   r[   r`   rr   markparametrizer|   r   r   r   r   r   r   r   r   r   r	  r  r  r"  r2  r7  r9  rB  rI  rO  r6   r5   r2   <module>rc     s   < 	    - 9 B : 1 B   F ! 8 
  	iiA 	"XBx"bAq6Aq6Aq6:
(	"X1v1v	 
t{{''( DKKcJ 	4; !!#!(MM8??" x
E:J71Y, !DE
Y F
Y*8Z,$6B*< 8( .	
	
	
 	
 		

 	
 	^++	W=W=t .	
	
	
 	
 		

 	
 	^++	,=,=^I&*#@L 		tyy$++6		hmmX__=55?"";L%r5   