
    {Kg;c              	       H   d Z ddlZddlZddl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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#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+ ejX                  j[                  d      Z.ddgddgddgddgddgddggZ/g dZ0g dZ1ddgddgddggZ2g dZ3g dZ4 ejj                         Z6e.jo                  e6jp                  jr                        Z: ee6jv                  e6jp                  e.      \  e6_;        e6_8         ejx                         Z= ee=jv                  e=jp                  e.      \  e=_;        e=_8        d Z>d Z?ej                  j                  d      ej                  j                  dddg      d                ZCd! ZDej                  j                  d      d"        ZEej                  j                  d#g d$      d%        ZFej                  j                  d      ej                  j                  dddg      d&               ZGd' ZHej                  j                  d      d(        ZIej                  j                  d      d)        ZJd* ZKd+ ZLd, ZMej                  j                  d- eNg e(e)e+e'e*e(d.e)z  z               d/        ZOej                  j                  d- eNg e(e)e+e'e*e(d.e)z  z               d0        ZPd1 ZQd2 ZRej                  j                  d      ej                  j                  dddg      d3               ZSd4 ZTej                  j                  d      ej                  j                  dddg      d5               ZUej                  j                  d6 e       e6jv                  e6jp                  f e       e=jv                  e=jp                  fg      d7        ZVd8 ZWej                  j                  d      ej                  j                  dddg      d9               ZXd: ZYy);z6Testing 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assert_array_less)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                  >   t        j                  g dg dg dg dg      t        j                  j                  d            d d t         j                  f   z   G fdd      }  |        }t        |d	t        j                              }t        |j                  j                         t        j                  |      j                         sJ t        t        j                  |d      g d
       t        t        j                  |d      g d       y )N)r   ư>r   )gRQ?g333333?皙?)igRQ?g      ?)r&   r   g&.>r   axisc                       e Zd Z fdZy)'test_samme_proba.<locals>.MockEstimatorc                 H    t        |j                  j                         S N)r   shape)selfXprobss     o/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/ensemble/tests/test_weight_boosting.pypredict_probaz5test_samme_proba.<locals>.MockEstimator.predict_probaD   s    qww4L    N)__name__
__module____qualname__r3   )r1   s   r2   MockEstimatorr+   C   s    	r4   r8   r"   )r    r   r   r    )r   r   r   r   )nparrayabssumnewaxisr
   	ones_liker   r.   isfiniteallargminargmax)r8   mocksamme_probar1   s      @r2   test_samme_probarE   8   s     HH	'):OLE 
RVVEII1I%&q"**}55E 
 ?DtQU(;<K{((%++6;;{#''))) ryy15|Dryy15|Dr4   c                  
   t        j                  t        t                    } t	        d      j                  t        |       }t        |j                  t              t        j                  t        t              df             y )NSAMME	algorithmr   )r9   oneslenr0   r   fitr   r3   )y_tclfs     r2   test_oneclass_adaboost_probarO   U   sR     ''#a&/C
w
/
3
3As
;Cc//2BGGSVQK4HIr4   zignore:The SAMME.R algorithmrI   rG   SAMME.Rc                    t        | d      }|j                  t        t               t	        |j                  t              t               t	        t        j                  t        j                  t                    |j                         |j                  t              j                  t        t              dfk(  sJ |j                  t              j                  t        t              fk(  sJ y )Nr   rI   r$   r    )r   rL   r0   y_classr   predictT	y_t_classr9   uniqueasarrayclasses_r3   r.   rK   decision_function)rI   rN   s     r2   test_classification_toyr[   a   s     yq
ACGGAws{{1~y1ryyI!67FQ%%#a&!444  #))c!fY666r4   c                      t        d      } | j                  t        t               t	        | j                  t              t               y )Nr   r#   )r	   rL   r0   y_regrr   rT   rU   y_t_regr)rN   s    r2   test_regression_toyr_   m   s,    

+CGGAvs{{1~x0r4   c                     t        j                  t        j                        } d x}}dD ]h  }t	        |      }|j                  t        j                  t        j                         t        | |j                         |j                  t        j                        }|dk(  r|}|}|j                  d   t        |       k(  sJ |j                  t        j                        j                  d   t        |       k(  sJ |j                  t        j                  t        j                        }|dkD  sJ d||fz         t        |j                        dkD  sJ t        t        d |j                  D                    t        |j                        k(  riJ  d|_        t#        d	t        j$                  |j                  t        j                        |z
               y )
NrG   rP   rH   rG   r   g?z'Failed with algorithm %s and score = %fc              3   4   K   | ]  }|j                     y wr-   r#   .0ests     r2   	<genexpr>ztest_iris.<locals>.<genexpr>   s     C?Cs''?   rP   r   )r9   rW   iristargetr   rL   datar   rY   r3   r.   rK   rZ   scoreestimators_setrI   r   r;   )classes	clf_samme
prob_sammealgrN   probark   s          r2   	test_irisrs   w   su    ii$G!!I
# 3/		4;;'7CLL1!!$)),'>IJ{{1~W---$$TYY/55a8CLHHH		$))T[[1s{TEeTT{ 3??#a'''3C3??CCDOOI
 
 	
 
% $2 $Ia	 7 7		 BZ OPQr4   loss)linearsquareexponentialc                    t        | d      }|j                  t        j                  t        j                         |j                  t        j                  t        j                        }|dkD  sJ t        |j                        dkD  sJ t        t        d |j                  D                    t        |j                        k(  sJ y )Nr   )rt   r$   g?r   c              3   4   K   | ]  }|j                     y wr-   r#   rc   s     r2   rf   z test_diabetes.<locals>.<genexpr>   s     ?3##rg   )	r	   rL   diabetesrj   ri   rk   rK   rl   rm   )rt   regrk   s      r2   test_diabetesr|      s     A
6CGGHMM8??+IIhmmX__5E4<< s!###s?s??@CDXXXXr4   c                    t         j                  j                  d      }|j                  dt        j
                  j                        }|j                  dt        j
                  j                        }t        | d      }|j                  t        j                  t        j
                  |       |j                  t        j                        }|j                  t        j                        D cg c]  }| }}|j                  t        j                        }|j                  t        j                        D cg c]  }| }	}|j                  t        j                  t        j
                  |      }
|j!                  t        j                  t        j
                  |      D cg c]  }| }}t#        |      dk(  sJ t%        ||d          t#        |	      dk(  sJ t%        ||	d          t#        |      dk(  sJ t%        |
|d          t'        dd      }|j                  t        j                  t        j
                  |       |j                  t        j                        }|j                  t        j                        D cg c]  }| }}|j                  t        j                  t        j
                  |      }
|j!                  t        j                  t        j
                  |      D cg c]  }| }}t#        |      dk(  sJ t%        ||d          t#        |      dk(  sJ t%        |
|d          y c c}w c c}w c c}w c c}w c c}w )Nr   
   size)rI   n_estimatorssample_weightr   )r   r$   )r9   randomRandomStaterandintrh   ri   r.   rz   r   rL   rj   rT   staged_predictr3   staged_predict_probark   staged_scorerK   r   r	   )rI   rngiris_weightsdiabetes_weightsrN   predictionspstaged_predictionsrr   staged_probasrk   sstaged_scoress                r2   test_staged_predictr      s    ))


"C;;r(9(9;:L{{2HOO,A,A{B
yr
BC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(((k+=b+AB}###e]2%67}###e]2%67 !
<CGGHMM8??:JGK++hmm,K%(%7%7%FG%F!%FGIIhmmX__DTIUE !!MM8??:J " 

A 	

   !"b(((k+=b+AB}###e]2%67A DD  Hs   3	M>	M+	M	M=	Mc                  T   t        t                     } dddd}t        | |      }|j                  t        j
                  t        j                         t        t               d      } ddd}t        | |      }|j                  t        j
                  t        j                         y )N)	estimator)r   r    ra   )r   estimator__max_depthrI   r   r   r$   )r   r   )
r   r   r   rL   rh   rj   ri   r	   r   rz   )boost
parametersrN   s      r2   test_gridsearchr      s     )?)ABE &)J
 uj
)CGGDIIt{{# (=(?aPE"(&IJ
uj
)CGGHMM8??+r4   c                  ~   dd l } dD ]  }t        |      }|j                  t        j                  t        j
                         |j                  t        j                  t        j
                        }| j                  |      }| j                  |      }t        |      |j                  k(  sJ |j                  t        j                  t        j
                        }||k(  rJ  t        d      }|j                  t        j                  t        j
                         |j                  t        j                  t        j
                        }| j                  |      }| j                  |      }t        |      |j                  k(  sJ |j                  t        j                  t        j
                        }||k(  sJ y )Nr   ra   rH   r#   )pickler   rL   rh   rj   ri   rk   dumpsloadstype	__class__r	   rz   )r   rq   objrk   r   obj2score2s          r2   test_pickler      s/     $ 3/		4;;'		$))T[[1LL||ADzS]]***DIIt{{3 $ 
+CGGHMM8??+IIhmmX__5ESA<<?D:&&&ZZx7FF??r4   c            	      &   t        j                  ddddddd      \  } }dD ]m  }t        |	      }|j                  | |       |j                  }|j
                  d   dk(  sJ |d dt        j                  f   |dd  k\  j                         rmJ  y )
Ni  r~   r"   r   Fr   )	n_samples
n_featuresn_informativen_redundant
n_repeatedr   r$   ra   rH   )	r   make_classificationr   rL   feature_importances_r.   r9   r=   r@   )r0   yrq   rN   importancess        r2   test_importancesr     s     ''DAq $ 3/1..  #r)))BQB

N+{12>CCEEE $r4   c                     t               } t        j                  d      }t        j                  t
        |      5  | j                  t        t        t        j                  dg             d d d        y # 1 sw Y   y xY w)Nz*sample_weight.shape == (1,), expected (6,)matchr   r   )r   reescapepytestraises
ValueErrorrL   r0   rS   r9   rX   )rN   msgs     r2   ,test_adaboost_classifier_sample_weight_errorr   '  sP    

C
))@
AC	z	-7"**bT*:; 
.	-	-s   1A55A>c                  Z   ddl m}  t         |        d      }|j                  t        t
               t        t               d      }|j                  t        t               ddl m} t         |       d      }|j                  t        t
               t        t               d      }|j                  t        t
               ddgddgddgddgg}g d}t        t               d      }t        j                  t        d	
      5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nr   )RandomForestClassifierrG   rH   )RandomForestRegressorr#   r   )r!   barr   r    zworse than randomr   )sklearn.ensembler   r   rL   r0   r]   r   rS   r   r	   r   r   r   r   )r   rN   r   X_faily_fails        r2   test_estimatorr   /  s    7 35
ICGGAv
SUg
6CGGAw6
13!
DCGGAv
CE
2CGGAv !fq!fq!fq!f-F!F
SUg
6C	z)<	= 
>	=	=s   D!!D*c                      d} t        ddd      }t        j                  t        |       5  |j	                  t
        j                  t
        j                         d d d        y # 1 sw Y   y xY w)Nz+Sample weights have reached infinite values   g      7@rG   )r   learning_raterI   r   )r   r   warnsUserWarningrL   rh   rj   ri   )r   rN   s     r2   test_sample_weights_infiniter   K  sE    
7C
"DG
TC	k	-		4;;' 
.	-	-s   /A$$A-z(sparse_container, expected_internal_type   c                     G d dt               }t        j                  dddd      \  }}t        j                  |      }t        ||d	      \  }}}} | |      }	 | |      }
t         |d
      dd      j                  |	|      }t         |d
      dd      j                  ||      }|j                  |
      }|j                  |      }t        ||       |j                  |
      }|j                  |      }t        ||       |j                  |
      }|j                  |      }t        ||       |j                  |
      }|j                  |      }t        ||       |j                  |
|      }|j                  ||      }t        ||       |j                  |
      }|j                  |      }t!        ||      D ]  \  }}t        ||        |j#                  |
      }|j#                  |      }t!        ||      D ]  \  }}t        ||        |j%                  |
      }|j%                  |      }t!        ||      D ]  \  }}t        ||        |j'                  |
|      }|j'                  ||      }t!        ||      D ]  \  }}t        ||        |j(                  D cg c]  }|j*                   }}t-        |D cg c]  }||k(  	 c}      sJ y c c}w c c}w )Nc                   $     e Zd ZdZd fd	Z xZS )-test_sparse_classification.<locals>.CustomSVCz8SVC variant that records the nature of the training set.c                 L    t         |   |||       t        |      | _        | S z<Modification on fit caries data type for later verification.r   superrL   r   
data_type_r/   r0   r   r   r   s       r2   rL   z1test_sparse_classification.<locals>.CustomSVC.fite  %    GK1MK:"1gDOKr4   r-   r5   r6   r7   __doc__rL   __classcell__r   s   @r2   	CustomSVCr   b      F	 	r4   r   r         *   )	n_classesr   r   r$   r   r#   T)probabilityrG   )r   r$   rI   )r   r   make_multilabel_classificationr9   ravelr   r   rL   rT   r   rZ   r   predict_log_probar3   rk   staged_decision_functionzipr   r   r   rl   r   r@   )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   R  s    C  22rabDAq 	A'711'M$GVWf%g.N$V,M +- 
c.'"	  *- 
c'7	  +22=A(008)+<= +<<]K(::6B02CD +<<]K(::6B02CD +88G(66v>02CD +00G(..vv>02CD +CCMR(AA&I),-?AR)S%!.-@ *T +99-H(77?),-?AR)S%>=9 *T +??N(==fE),-?AR)S%!.-@ *T +77vN(55ffE),-?AR)S%>=9 *T $5#@#@A#@aQ\\#@EAU;U++U;<<< B;s   .K"K'c                     G d dt               }t        j                  dddd      \  }}t        ||d	      \  }}}} | |      }	 | |      }
t	         |       d
      j                  |	|      }t	         |       d
      j                  ||      }|j                  |
      }|j                  |      }t        ||       |j                  |
      }|j                  |      }t        ||      D ]  \  }}t        ||        |j                  D cg c]  }|j                   }}t        |D cg c]  }||k(  	 c}      sJ y c c}w c c}w )Nc                   $     e Zd ZdZd fd	Z xZS ))test_sparse_regression.<locals>.CustomSVRz8SVR variant that records the nature of the training set.c                 L    t         |   |||       t        |      | _        | S r   r   r   s       r2   rL   z-test_sparse_regression.<locals>.CustomSVR.fit  r   r4   r-   r   r   s   @r2   	CustomSVRr     r   r4   r   r   2   r   r   )r   r   	n_targetsr$   r   r#   r   )r   r   make_regressionr   r	   rL   rT   r   r   r   rl   r   r@   )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    s`    C  ##qrDAq (811'M$GVWf%g.N$V,M )9;QOSS
 ()+ANRRO
 +22=A(00813EF +99-H(77?+./BDV+W'!/>B ,X $4#?#?@#?aQ\\#?E@U;U++U;<<< A;s   E/E
c                       G d dt               } t         |        d      }|j                  t        t               t        |j                        t        |j                        k(  sJ y)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                       e Zd Zd Zd Zy)=test_sample_weight_adaboost_regressor.<locals>.DummyEstimatorc                      y r-    )r/   r0   r   s      r2   rL   zAtest_sample_weight_adaboost_regressor.<locals>.DummyEstimator.fit  s    r4   c                 F    t        j                  |j                  d         S )Nr   )r9   zerosr.   )r/   r0   s     r2   rT   zEtest_sample_weight_adaboost_regressor.<locals>.DummyEstimator.predict  s    88AGGAJ''r4   N)r5   r6   r7   rL   rT   r  r4   r2   DummyEstimatorr    s    		(r4   r  r"   r   N)r   r	   rL   r0   r]   rK   estimator_weights_estimator_errors_)r  r   s     r2   %test_sample_weight_adaboost_regressorr    sQ    ( ( n.Q?E	IIau''(C0G0G,HHHHr4   c                     t         j                  j                  d      } | j                  ddd      }| j	                  ddgd      }| j                  d      }t        t        d      d      }|j                  ||       |j                  |       |j                  |       t        t                     }|j                  ||       |j                  |       y	)
zX
    Check that the AdaBoost estimators can work with n-dimensional
    data matrix
    r   3   r"   r   most_frequent)strategyrG   rH   N)r9   r   r   randnchoicer   r   rL   rT   r3   r	   r   )r   r0   ycyrr   s        r2   test_multidimensional_Xr  
  s    
 ))


"C		"aA	QFB	B	2B1WE 
IIa	MM!	n./E	IIa	MM!r4   c                 R   t         j                  t         j                  }}t        t	                     }t        ||       }dj                  |j                  j                        }t        j                  t        |      5  |j                  ||       d d d        y # 1 sw Y   y xY w)N)r   rI   z {} doesn't support sample_weightr   )rh   rj   ri   r   r   r   formatr   r5   r   r   r   rL   )rI   r0   r   r   rN   err_msgs         r2   -test_adaboostclassifier_without_sample_weightr  $  sq     99dkkqA%o&78I
yI
FC077	8K8K8T8TUG	z	11 
2	1	1s   BB&c                     t         j                  j                  d      } t        j                  ddd      }d|z  dz   | j	                  |j
                  d         dz  z   }|j                  d	d
      }|d	xx   dz  cc<   d|d	<   t        t               d
d      }t        |      }t        |      }|j                  ||       |j                  |d d	 |d d	        t        j                  |      }d|d	<   |j                  |||       |j                  |d d	 |d d	       }|j                  |d d	 |d d	       }|j                  |d d	 |d d	       }	||k  sJ ||	k  sJ |t        j                  |	      k(  sJ y )Nr   r   d     )numg?r'   g-C6?r   r   r~   i'  )r   r   r$   r   )r9   r   r   linspacerandr.   reshaper	   r   r   rL   r>   rk   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_weightr+  /  s    ))


#C
As%A	q3388AGGAJ/&89A			"aA bERKEAbE ("$11O _-o. !Q#2#2'LLOMM"A];*003B3B@&,,QsVQsV<(..q"vq"v> 0000 1111v}}->????r4   c                    t        t        j                  d      ddi\  }}}}t        | d      }|j	                  ||       t        t        j                  |j                  |      d      |j                  |             y )NT)
return_X_yr$   r   rR   r   r(   )
r   r   load_digitsr   rL   r   r9   rB   r3   rT   )rI   r   r   r   r   models         r2    test_adaboost_consistent_predictr0  X  su     (8				.(=?($GVWf DE	IIgw
		%%%f-A6f8Mr4   zmodel, X, yc                     t        j                  |      }d|d<   d}t        j                  t        |      5  | j                  |||       d d d        y # 1 sw Y   y xY w)Nir   z1Negative values in data passed to `sample_weight`r   r   )r9   r>   r   r   r   rL   )r/  r0   r   r   r  s        r2   #test_adaboost_negative_weight_errorr2  i  sL     LLOMM"AG	z	1		!Qm	4 
2	1	1s   AAc                     t         j                  j                  d      } | j                  d      }| j	                  ddgd      }t        j
                  |      dz  }t        dd	
      }t        |ddd	      }|j                  |||       t        j                  |j                        j                         dk(  sJ y)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$      rG   )r   r   rI   r$   r   N)r9   r   r   normalr  r>   r   r   rL   isnanr   r<   )r   r0   r   r   tree	ada_models         r2   Ftest_adaboost_numerically_stable_feature_importance_with_small_weightsr;  y  s     ))


#C



#A

Aq6
%ALLOf,M!BR@D"R7I MM!QmM488I223779Q>>>r4   c                    d}t        j                  |d|      \  }}t        d||       j                  ||      }|j	                  |      }t        |j                  d      dd       | d	k(  r+t        t        j                  |            dd
|dz
  z  hk(  sJ |j                  |      D ]Q  }t        |j                  d      dd       | d	k(  s't        t        j                  |            dd
|dz
  z  hk(  rQJ  |j                  d      j                  ||       |j	                  |      }t        |j                  d      dd       |j                  |      D ]   }t        |j                  d      dd       " y)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$   rI   r(   r   g:0yE>)atolrG   r   r   r  N)r   r   r   rL   rZ   r   r<   rm   r9   rW   r   
set_params)rI   global_random_seedr   r0   r   rN   y_scores          r2   test_adaboost_decision_functionrB    sv    I''!BTDAq %79	c!Qi  ##A&GGKKQK'6G 299W%&1bIM.B*CCCC //2+QT: ryy)*q"	A2F.GGGG 3 NNN"&&q!,##A&GGKKQK'6//2+QT: 3r4   c                      t        d      } t        j                  t        t	        j
                  d            5  | j                  t        t               d d d        y # 1 sw Y   y xY w)Nr   r  z1The SAMME.R algorithm (the default) is deprecatedr   )	r   r   r   FutureWarningr   r   rL   r0   rS   )adaboost_clfs    r2   !test_deprecated_samme_r_algorithmrF    sJ    %15L	iiKL
 	G$	
 
 
s   AA()Zr   r   numpyr9   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   r   sklearn.utils.fixesr   r   r   r   r   r   r   r   r0   rS   r]   rU   rV   r^   	load_irisrh   permutationri   r   permrj   load_diabetesrz   rE   rO   markfilterwarningsparametrizer[   r_   rs   r|   r   r   r   r   r   r   r   r   r   r  r  r  r  r+  r0  r2  r;  rB  rF  r  r4   r2   <module>r[     s   < 	    - 9 B : 1 B   F ! 8   	iiA 	"XBx"bAq6Aq6Aq6:
(	"X1v1v	 x
t{{''( DKKcJ 	4; "8!!#!(MM8??" x
E:J :;w	&:;7 < <71 :;R <RD !DE
Y F
Y  :;w	&:;*8 < <*8Z,, :; <> :;F <F,< 8( .	
	
	
 	
 		

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

 	
 	^++	,=,=^I&4 :;w	&:; < <#@R :;w	&:; < < 		tyy$++6		hmmX__=55?, :;w	&:;&; < <&;T%r4   