
    -i҂                        S r SSKrSSKJr  SSKrSSKrSSKJr  SSK	J
r
  SSKJr  SSKJrJrJrJr  SSKJrJrJrJrJrJr  SS	KJrJr  SS
KJrJrJrJ r   SSK!J"r"J#r#  SSK$J%r%J&r&J'r'J(r(  SSK)J*r*J+r+J,r,  SSK-J.r.  SSK/J0r0  SSK1J2r2  SSK3J4r4J5r5J6r6  SSK7J8r8J9r9J:r:J;r;  SSK<J=r=  SSK>J?r?J@r@JArA  SSKBJCrCJDrDJErE  \" 5       rF\FR                  \FR                  srIrJ\" 5       rK\KR                  \KR                  srLrM\" SSS9u  rNrO\" SSS9u  rPrQ\R                  R                  SS\+" SSSS9/5      \R                  R                  SS\" SS9/5      \R                  R                  SS S/5      S! 5       5       5       rTS" rUS# rVS$ rW\R                  R                  SS\*" SSSS9/5      \R                  R                  S%S0 4\" SS90 4\" 5       S&S04/5      \R                  R                  SS S/5      S' 5       5       5       rX\R                  R                  S(\C\D-   \E-   5      S) 5       rY\R                  R                  S(\C\D-   \E-   5      S* 5       rZS+ r[ " S, S-\\5      r\ " S. S/\\5      r]\R                  R                  S0\MS1/ 0\^S24\MS3\&" 5       4S4\4" S5S694/S7S8.\^S94\MS1S3\&" 5       4S:\]" 5       4/0\_S;4\MS3\&" 5       4S:\5" S5S694/\]" 5       S<.\_S;4/5      S= 5       r`\R                  R                  S0\JS1/ 0\^S24\JS1S3\%" 5       4S:\\" 5       4/0\_S;4\JS3\%" 5       4S:\6" 5       4/\\" 5       S<.\_S;4/5      S> 5       ra\R                  R                  S?\" S3\&" SS94S4\5" SS94/S@9\LSSA \MSSA 4\ " S3\%" 5       4S4\6" SS94/S@9\I\J4/SBSC/SD9SE 5       rbSF rc\R                  R                  SG\" S3\&" 5       4S4\5" SS94/\&" 5       \*" SSSH9SI9/\" SSJ9Q7\ " S3\%" 5       4S4\6" SS94/\%" 5       \*" SSSH9SI9\I\J4/SBSC/SD9SK 5       rdSL re\R                  R                  SM5      \R                  R                  SG\" S3\&" 5       4S4\5" SS94/\&" 5       S<9/\" SSJ9Q7\ " S3\%" 5       4S4\6" SS94/\%" 5       S<9\I\J4/SBSC/SD9SN 5       5       rg\R                  R                  SO\\S7\&" SS9\L\M4\ \SP\%" 5       \I\J4/5      SQ 5       rh\R                  R                  SG\" S3\&" 5       4S4\4" 5       4/SRSS9\L\M4\ " S3\%" 5       4S4\6" 5       4/SRSS9\I\J4/5      ST 5       ri\R                  R                  SU\\\&4\\ \%4/5      SV 5       rj\R                  R                  SW\0" SS9\" SS9/SXSY/SD9SZ 5       rkS[ rl\R                  R                  S\S]SP/5      \R                  R                  SS S/5      S^ 5       5       rm\R                  R                  S_\" S3\&" SS94S4\5" SS94/S@9\KR                  \L\M/ S`Q4\" S3\&" SS94SaS4\5" SS94/S@9\KR                  \LSSA \MSSA SbSc/4\ " S3\%" 5       4S4\6" SS94/S@9\FR                  \I\JSdSe/4// SfQSD9\R                  R                  SSS /5      Sg 5       5       roSh rpSi rq\R                  R                  Sj\\84\ \94/5      Sk 5       rr\R                  R                  Sj\\84\ \94/5      \" SSl9Sm 5       5       rs\R                  R                  Sj\\84\ \94/5      \R                  R                  SnSo\R                  " \LR                  S   5      4Sp/5      \" SSl9Sq 5       5       5       rv\R                  R                  Sj\\84\ \94/5      \" SSl9Sr 5       5       rwg)sz+Test the stacking classifier and regressor.    N)Mock)assert_array_equal)sparse)config_context)BaseEstimatorClassifierMixinRegressorMixinclone)load_breast_cancerload_diabetes	load_irismake_classificationmake_multilabel_classificationmake_regression)DummyClassifierDummyRegressor)RandomForestClassifierRandomForestRegressorStackingClassifierStackingRegressor)ConvergenceWarningNotFittedError)LinearRegressionLogisticRegressionRidgeRidgeClassifier)KFoldStratifiedKFoldtrain_test_split)KNeighborsClassifier)MLPClassifier)scale)SVC	LinearSVC	LinearSVR)ConsumingClassifierConsumingRegressor	_Registrycheck_recorded_metadata)CheckingClassifier)assert_allcloseassert_allclose_dense_sparseignore_warnings)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERS   *   )	n_classesrandom_state   cvT)n_splitsshuffler4   final_estimatorr4   passthroughFc                    [        [        [        5      [        [        SS9u  p4pVS[	        5       4S[        5       4/n[        UUU US9nUR                  X55        UR                  U5        UR                  U5        UR                  XF5      S:  d   eUR                  U5      n	U(       a  SOSn
U	R                  S	   U
:X  d   eU(       a  [        XIS S 2S
S 24   5        UR                  SS9  UR                  X55        UR                  U5        UR                  U5        Uc  UR                  U5        UR                  U5      n	U(       a  SOSnU	R                  S	   U:X  d   eU(       a  [        XIS S 2S
S 24   5        g g )Nr2   stratifyr4   lrsvc
estimatorsr9   r6   r;   皙?
         dropr?      r1   )r   r"   X_irisy_irisr   r$   r   fitpredictpredict_probascore	transformshaper+   
set_paramsdecision_function)r6   r9   r;   X_trainX_testy_trainy_testrB   clfX_transexpected_column_countexpected_column_count_drops               W/var/www/html/venv/lib/python3.13/site-packages/sklearn/ensemble/tests/test_stacking.pytest_stacking_classifier_irisr^   C   sh    (8fvR($GW +-.	0DEJ
'	C GGGKKf99V$s***mmF#G"-B1==4444230NNfNGGGKKff%mmF#G&1q==9999230     c                     [        SS9u  p[        [        U 5      XSS9u  p#pES[        5       4S[	        SS94/n[        USS	9nUR                  X$5        UR                  U5      nUR                  S
   S:X  d   eS[        5       4S[        5       4/nUR                  US9  UR                  X$5        UR                  U5      nUR                  S
   S:X  d   eg )NT
return_X_yr2   r=   r?   rfr:   r1   rB   r6   rF   r5   r@   rB   )r   r   r"   r   r   r   rM   rQ   rR   r$   rS   )	XyrU   rV   rW   _rB   rY   rZ   s	            r]   :test_stacking_classifier_drop_column_binary_classificationri   q   s    .DA"2a!b#GW 
!#$	%267J 
q
9CGGGmmF#G==q    +-.	0DEJNNjN)GGGmmF#G==q   r_   c                     [        [        [        5      [        [        SS9u  pp#SS[	        SS94/n[        SSS9n[        S[	        SS94/US	S
9n[        XES	S
9nUR                  X5        UR                  X5        [        UR                  U5      UR                  U5      5        [        UR                  U5      UR                  U5      5        [        UR                  U5      UR                  U5      5        g )Nr2   r=   r?   rH   r@   r   r:   rD   n_estimatorsr4      rB   r9   r6   )r   r"   rK   rL   r$   r   r   rM   r+   rN   rO   rQ   )rU   rV   rW   rh   rB   rc   rY   clf_drops           r]   'test_stacking_classifier_drop_estimatorrq      s     #3fvR#GW !5)*C"DEJ	Rb	AB
I1567C
 "ZPQRHGGGLL"CKK')9)9&)ABC%%f-x/E/Ef/MNCMM&)8+=+=f+EFr_   c                     [        [        [        5      [        SS9u  pp#SS[	        SS94/n[        SSS9n[        S[	        SS94/USS	9n[        XESS	9nUR                  X5        UR                  X5        [        UR                  U5      UR                  U5      5        [        UR                  U5      UR                  U5      5        g )
Nr2   r:   rk   svrr   rD   rl   rn   ro   )r   r"   
X_diabetes
y_diabetesr%   r   r   rM   r+   rN   rQ   )rU   rV   rW   rh   rB   rc   regreg_drops           r]   &test_stacking_regressor_drop_estimatorrx      s     #3j:B#GW !5)*C"DEJ	BR	@B
I1567C
 !JqQHGGGLL"CKK')9)9&)ABCMM&)8+=+=f+EFr_   zfinal_estimator, predict_params
return_stdc                    [        [        [        5      [        SS9u  pEpgS[	        5       4S[        5       4/n[        UUU US9n	U	R                  XF5        U	R                  " U40 UD6n
U(       a  SOSnU(       a  [        U
5      U:X  d   eU	R                  U5      nU(       a  SOSnUR                  S   U:X  d   eU(       a  [        X\S S 2S	S 24   5        U	R                  S
S9  U	R                  XF5        U	R                  U5        U	R                  U5      nU(       a  SOSnUR                  S   U:X  d   eU(       a  [        X\S S 2S	S 24   5        g g )Nr2   r:   r?   rs   rA   r5   rF      rH   rI      )r   r"   rt   ru   r   r%   r   rM   rN   lenrQ   rR   r+   rS   )r6   r9   predict_paramsr;   rU   rV   rW   rh   rB   rv   resultexpected_result_lengthrZ   r[   r\   s                  r]    test_stacking_regressor_diabetesr      sI    #3j:B#GW )+,uik.BCJ
'	C GGG[[2>2F"0Qa6{4444mmF#G"-B1==444434 01NNfNGGGKKmmF#G'2==999934 01 r_   sparse_containerc                    [        U " [        [        5      5      [        SS9u  pp4S[	        5       4S[        5       4/n[        SSS9n[        XVSSS	9nUR                  X5        UR                  U5      n[        X(S S 2S
S 24   5        [        R                  " U5      (       d   eUR                  UR                  :X  d   eg )Nr2   r:   r?   rs   rD   rl   rn   TrA   r|   )r   r"   rt   ru   r   r%   r   r   rM   rQ   r,   r   issparseformat	r   rU   rV   rW   rh   rB   rc   rY   rZ   s	            r]   *test_stacking_regressor_sparse_passthroughr      s    
 #3z*+Zb#GW )+,uik.BCJ	BR	@B
aTC GGGmmF#G CD)9:??7####==GNN***r_   c                    [        U " [        [        5      5      [        SS9u  pp4S[	        5       4S[        5       4/n[        SSS9n[        XVSSS	9nUR                  X5        UR                  U5      n[        X(S S 2S
S 24   5        [        R                  " U5      (       d   eUR                  UR                  :X  d   eg )Nr2   r:   r?   r@   rD   rl   rn   TrA   rG   )r   r"   rK   rL   r   r$   r   r   rM   rQ   r,   r   r   r   r   s	            r]   +test_stacking_classifier_sparse_passthroughr      s    
 #3v'b#GW +-.	0DEJ	Rb	AB
aTC GGGmmF#G BC9??7####==GNN***r_   c                      [        [        S S 5      [        S S pS[        5       4S[	        5       4/n[        US9nUR                  X5        UR                  U 5      nUR                  S   S:X  d   eg )Nd   r?   rc   re   rF   r5   )	r"   rK   rL   r   r   r   rM   rQ   rR   )X_y_rB   rY   X_metas        r]   )test_stacking_classifier_drop_binary_probr     sq    
 6$3< &#,+-.7M7O0PQJ


3CGGBO]]2F<<?ar_   c                        \ rS rSrS rS rSrg)NoWeightRegressori  c                 V    [        5       U l        U R                  R                  X5      $ N)r   rv   rM   selfrf   rg   s      r]   rM   NoWeightRegressor.fit  s    !#xx||A!!r_   c                 H    [         R                  " UR                  S   5      $ )Nr   )nponesrR   )r   rf   s     r]   rN   NoWeightRegressor.predict   s    wwqwwqz""r_   )rv   N)__name__
__module____qualname____firstlineno__rM   rN   __static_attributes__ r_   r]   r   r     s    "#r_   r   c                       \ rS rSrS rSrg)NoWeightClassifieri$  c                 T    [        SS9U l        U R                  R                  X5      $ )N
stratified)strategy)r   rY   rM   r   s      r]   rM   NoWeightClassifier.fit%  s!    "L9xx||A!!r_   rY   N)r   r   r   r   rM   r   r   r_   r]   r   r   $  s    "r_   r   zy, params, type_err, msg_errrB   zInvalid 'estimators' attribute,r?   svmiP  max_iterrO   )rB   stack_methodz+does not implement the method predict_probacorzdoes not support sample weightrB   r9   c           	         [         R                  " X#S9   [        S0 UDSS0D6nUR                  [	        [
        5      U [        R                  " [
        R                  S   5      S9  S S S 5        g ! , (       d  f       g = fNmatchr6   r1   r   sample_weightr   )	pytestraisesr   rM   r"   rK   r   r   rR   )rg   paramstype_errmsg_errrY   s        r]   test_stacking_classifier_errorr   *  sV    T 
x	/ 060a0fqQ0HI 
0	/	/   AA11
A?c           	         [         R                  " X#S9   [        S0 UDSS0D6nUR                  [	        [
        5      U [        R                  " [
        R                  S   5      S9  S S S 5        g ! , (       d  f       g = fr   )	r   r   r   rM   r"   rt   r   r   rR   )rg   r   r   r   rv   s        r]   test_stacking_regressor_errorr   Y  sY    2 
x	//&/Q/j!1BGGJ<L<LQ<O4PQ 
0	/	/r   zestimator, X, yre   r   r   r   )idsc                    [        U 5      nUR                  [        S[        R                  R                  S5      S9S9  [        U 5      nUR                  SS9  UR                  [        S[        R                  R                  S5      S9S9  [        UR                  X5      R                  U5      S S 2SS 24   UR                  X5      R                  U5      5        g )NTr   r8   r4   r6   rH   rI   rF   )	r
   rS   r   r   randomRandomStater+   rM   rQ   )	estimatorrf   rg   estimator_fullestimator_drops        r]   test_stacking_randomnessr   w  s    : 9%NBII,A,A!,DE   9%N(BII,A,A!,DE   1 **1-ae41 **1-r_   c                  r    [        S[        SS94S[        SS94/S9n U R                  [        [
        5        g )Nr?   i'  r   r   re   )r   r   r$   rM   rK   rL   r   s    r]   )test_stacking_classifier_stratify_defaultr     s<    
%v67Iv./
C GGFFr_   zstacker, X, yr   ro   ra   c                    [        U5      S-  n[        R                  " S/U-  S/[        U5      U-
  -  -   5      n[        XUSS9u  pVpxp[	        [
        S9   U R                  XW5        S S S 5        U R                  U5      n
[	        [
        S9   U R                  XW[        R                  " UR                  5      S9  S S S 5        U R                  U5      n[        X5        [	        [
        S9   U R                  XWU	S9  S S S 5        U R                  U5      n[        R                  " X-
  5      R                  5       S:  d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nn= f)	Nr5   g?g?r2   r:   )categoryr   r   )r~   r   arrayr   r-   r   rM   rN   r   rR   r+   abssum)stackerrf   rg   n_half_samplestotal_sample_weightrU   rV   rW   rh   sample_weight_trainy_pred_no_weighty_pred_unit_weighty_pred_biaseds                r]    test_stacking_with_sample_weightr     s7   B Vq[N((	##a&>*A!BB ;K	!;7GW!4 
"4	5G% 
6v.	"4	5GBGGGMM4JK 
6 0$9	"4	5G4GH 
6OOF+M66"23779A=== 
6	5 
6	5 
6	5s$   E/E0E)
E
E&)
E7c                      [        S[        SS94/[        SS9S9n U R                  [        [        [
        R                  " [        R                  S   5      S9  g )Nr?   T)expected_sample_weightr   r   r   )r   r*   rM   rK   rL   r   r   rR   )r   s    r]   0test_stacking_classifier_sample_weight_fit_paramr     sJ     -TJKL*$GG KKbggfll1o.FKGr_   z-ignore::sklearn.exceptions.ConvergenceWarningc                    [        U 5      n[        U 5      nUR                  SS9  UR                  SS9  UR                  X5        UR                  X5        [        UR                  UR                  5       H%  u  pV[        UR                  UR                  5        M'     [        R                  " [        SS9   [        UR                  R                  UR                  R                  5        S S S 5        g ! , (       d  f       g = f)Nr1   r   rn   z	Not equalr   )r
   rS   rM   zipestimators_r+   coef_r   r   AssertionErrorfinal_estimator_)r   rf   rg   stacker_cv_3stacker_cv_5est_cv_3est_cv_5s          r]   test_stacking_cv_influencer     s    B >L>Lq!q!QQ ",":":L<T<TU7 V 
~[	9))//1N1N1T1T	
 
:	9	9s   95C77
Dz7Stacker, Estimator, stack_method, final_estimator, X, yrN   c                 .   [        XESSS9u  pgpSU" 5       R                  Xh5      4SU" 5       R                  Xh5      4/n
U
 H9  u  p[        SS9Ul        [        X5      n[        US9nX.l        [        XU5        M;     U " U
S	US
9nUR                  Xy5        UR                  U
 VVs/ s H  u  pUPM	     snn:X  d   e[        S UR                   5       5      (       d   eUR                   H  n[        X5      nUR                  U5        M!     gs  snnf )z2Check the behaviour of stacking when `cv='prefit'`r2   g      ?)r4   	test_sized0d1rM   )name)side_effectprefit)rB   r6   r9   c              3   R   #    U  H  oR                   R                  S :H  v   M     g7f)r   N)rM   
call_count).0r   s     r]   	<genexpr>'test_stacking_prefit.<locals>.<genexpr>Z  s     R>Q}}''1,>Qs   %'N)	r   rM   r   getattrr   setattrr   allassert_called_with)Stacker	Estimatorr   r9   rf   rg   X_train1X_train2y_train1y_train2rB   rh   r   
stack_funcpredict_method_mockedr   stack_func_mocks                    r]   test_stacking_prefitr   *  s   . .>	2.*H 
y{x23	y{x23J #%(	Y5
 $ < *6&	)>? # (OG KK#"L9"LLLLRg>Q>QRRRRR ((	!):**84 ) #Ms   'Dr   rd   c                     [         R                  " [        5         U R                  X5        S S S 5        g ! , (       d  f       g = fr   )r   r   r   rM   )r   rf   rg   s      r]   test_stacking_prefit_errorr   b  s(    6 
~	&A 
'	&	&s	   6
Az!make_dataset, Stacking, Estimatorc                     " S SU5      nU " SSS9u  pEU" SU" 5       4/S9nUR                    S3n[        R                  " [        US	9   UR                    S S S 5        UR                  XE5        S
n[        R                  " [        US	9   UR                    S S S 5        g ! , (       d  f       NP= f! , (       d  f       g = f)Nc                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )8test_stacking_without_n_features_in.<locals>.MyEstimatori  z Estimator without n_features_in_c                 (   > [         TU ]  X5        U ?g r   )superrM   n_features_in_)r   rf   rg   	__class__s      r]   rM   <test_stacking_without_n_features_in.<locals>.MyEstimator.fit  s    GK#r_   r   )r   r   r   r   __doc__rM   r   __classcell__)r  s   @r]   MyEstimatorr    s    .	$ 	$r_   r  r   r   )r4   	n_samplesr?   re   z' object has no attribute n_features_in_r   z6'MyEstimator' object has no attribute 'n_features_in_')r   r   r   AttributeErrorr  rM   )make_datasetStackingr   r  rf   rg   r   msgs           r]   #test_stacking_without_n_features_inr    s    $i $ Q#6DAD+-#8"9:GF
GC	~S	1 
2 KK
BC	~S	1 
2	1 
2	1 
2	1s   B"B3"
B03
Cr   r!   r   c                    [        [        [        [        SS9u  pp4SnSU 4/n[        U[	        5       SS9R                  X5      nUR                  U5      nUR                  UR                  S   U4:X  d   e[        [        R                  " UR                  SS	9S
5      5      (       a   eUR                  U5      n	U	R                  UR                  :X  d   eg)zCheck the behaviour for the multilabel classification case and the
`predict_proba` stacking method.

Estimators are not consistent with the output arrays and we need to ensure that
we handle all cases.
r2   r=   r1   estrO   rB   r9   r   r   rF   )axisg      ?N)r   X_multilabely_multilabelr   r    rM   rQ   rR   anyr   iscloser   rN   )
r   rU   rV   rW   rX   	n_outputsrB   r   rZ   y_preds
             r]   1test_stacking_classifier_multilabel_predict_probar    s    $ (8l\($GW I)$%J ,.$ 
c'	  'G==V\\!_i88882::gkkqk1378888__V$F<<6<<'''r_   c                  Z   [        [        [        [        SS9u  pp#SnS[        5       4/n[	        U[        5       SS9R                  X5      nUR                  U5      nUR                  UR                  S   U4:X  d   eUR                  U5      nUR                  UR                  :X  d   eg)	zCheck the behaviour for the multilabel classification case and the
`decision_function` stacking method. Only `RidgeClassifier` supports this
case.
r2   r=   r1   r  rT   r  r   N)
r   r  r  r   r   r    rM   rQ   rR   rN   )	rU   rV   rW   rX   r  rB   r   rZ   r  s	            r]   5test_stacking_classifier_multilabel_decision_functionr    s    
 (8l\($GW I/+,-J ,.( 
c'	  'G==V\\!_i8888__V$F<<6<<'''r_   r   autoc                    [        [        [        [        SS9u  p#pEUR                  5       nSnS[	        SS94S[        SS94S[        5       4/n[        5       n	[        UU	UU S9R                  X$5      n
[        Xd5        U
R                  U5      nUR                  UR                  :X  d   eU S	:X  a  / S
QnOS/[        U5      -  nU
R                  U:X  d   eU[        U5      -  nU(       a  XR                  S   -  nU
R                  U5      nUR                  UR                  S   U4:X  d   e[        U
R                   ["        R$                  " SS/5      /U-  5        g)zCheck the behaviour for the multilabel classification case for stack methods
supported for all estimators or automatically picked up.
r2   r=   r1   mlpr:   rc   ridge)rB   r9   r;   r   r  )rO   rO   rT   rN   rF   r   N)r   r  r  copyr!   r   r   r    r   rM   r   rN   rR   r~   stack_method_rQ   classes_r   r   )r   r;   rU   rV   rW   rX   y_train_before_fitr  rB   r9   rY   r  expected_stack_methodsn_features_X_transrZ   s                  r]   0test_stacking_classifier_multilabel_auto_predictr)    se    (8l\($GW !I 
2./	%267	/#$J
 +,O
'!	
 
c'  )3[[ F<<6<<'''v!X"+s:!> 6666"S_4mmA..mmF#G==V\\!_.@AAAAs||bhh1v&6%7)%CDr_   z,stacker, feature_names, X, y, expected_names)stackingclassifier_lr0stackingclassifier_lr1stackingclassifier_lr2stackingclassifier_svm0stackingclassifier_svm1stackingclassifier_svm2)otherrH   stackingclassifier_lrstackingclassifier_svmstackingregressor_lrstackingregressor_svm)StackingClassifier_multiclassStackingClassifier_binaryr   c                     U R                  US9  U R                  [        U5      U5        U(       a  [        R                  " XA45      nU R                  U5      n[        Xd5        g)z/Check get_feature_names_out works for stacking.)r;   N)rS   rM   r"   r   concatenateget_feature_names_outr   )r   feature_namesrf   rg   expected_namesr;   	names_outs          r]   test_get_feature_names_outr=    sT    D ;/KKa!(GH--m<Iy1r_   c                     [        [        [        5      [        [        SS9u  pp#[	        S[        5       4/S9nUR                  X5        UR                  U5        UR                  U5        UR                  X5      S:  d   eg)zNCheck that a regressor can be used as the first layer in `StackingClassifier`.r2   r=   r"  re   rC   N)
r   r"   rK   rL   r   r   rM   rN   rO   rP   )rU   rV   rW   rX   rY   s        r]   'test_stacking_classifier_base_regressorr?  \  sq    '7fvR($GW '57);(<
=CGGGKKf99V$s***r_   c                     [        SS9u  pS[        5       4S[        SSS94/n[        SSS9n[        X#SS9nS	nS
n[        R
                  " [        US9 nUR                  X5      R                  U 5        SSS5        [        WR                  R                  [        5      (       d   eU[        UR                  R                  5      ;   d   eg! , (       d  f       N_= f)zCheck that we raise the proper AttributeError when the final estimator
does not implement the `decision_function` method, which is decorated with
`available_if`.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/28108
r2   r:   r?   rc   r5   rl   r1   ro   z>This 'StackingClassifier' has no attribute 'decision_function'zD'RandomForestClassifier' object has no attribute 'decision_function'r   N)r   r   r   r   r   r   r  rM   rT   
isinstancevalue	__cause__str)rf   rg   rB   r9   rY   	outer_msg	inner_msg	exec_infos           r]   -test_stacking_final_estimator_attribute_errorrH  h  s     B/DA 
!#$	%12FGJ -!"MO
1C QIVI	~Y	79''* 
8ioo//@@@@IOO556666 
8	7s   !C
CzEstimator, Childc                     [         R                  " [        SS9   U " SU" 5       /5      R                  [        [
        / SQSS9  SSS5        g! , (       d  f       g= f)z}Test that the right error message is raised when metadata is passed while
not supported when `enable_metadata_routing=False`.z1is only supported if enable_metadata_routing=Truer   rY   )rF   rF   rF   rF   rF   ar   metadataN)r   r   
ValueErrorrM   rK   rL   )r   Childs     r]   *test_routing_passed_metadata_not_supportedrO    sP     
M
 	5%'"#''F/C 	( 	

 
 
s   *A
A)enable_metadata_routingc                 D    U " SU" 5       4/5      nUR                  5         g )Nsub_est)get_metadata_routing)r   rN  r  s      r]   %test_get_metadata_routing_without_fitrT    s$     i)*
+Cr_   zprop, prop_valuer   )rL  rJ  c           
         U " SU" [        5       S9R                  " S0 US0D64SU" [        5       S9R                  " S0 US0D64/U" [        5       S9R                  " S0 US0D6S9nUR                  " [        [
        40 X#0D6  UR                  " [        [
        40 X#0D6  UR                  " [        40 X#0D6  UR                   H>  nUS   R                  n[        U5      (       d   eU H  n[        SUSSUS.X#0D6  M     M@     UR                  R                  n[        U5      (       d   e[        SUS	   S
S
US.X#0D6  g)z5Test that metadata is routed correctly for Stacking*.sub_est1)registryTsub_est2)r9   rF   rM   )objmethodparentsplit_paramsrN   Nr   )r(   set_fit_requestset_predict_requestrM   rK   rL   fit_transformrN   rB   rW  r~   r)   r   )r   rN  prop
prop_valuer  r   rW  rR  s           r]   -test_metadata_routing_for_stacking_estimatorsrc    sh     y{+;;KtTlK
 y{+;;KtTlK		
 y{3GGW4QU,WC GGFF1t01ff;(:;KK-4,-^^	Q<((8}}}G# "	
 $  	 $ ##,,Hx=== RL	
 
r_   c                 T   [         R                  " [        R                  S   5      Sp2U " SU" 5       4/5      nSUR                   S3n[
        R                  " [        [        R                  " U5      S9   UR                  [        [        X#S9  SSS5        g! , (       d  f       g= f)	zCTest that the right error is raised when metadata is not requested.r   rJ  rR  zb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitr   rK  N)r   r   rK   rR   r   r   r   rM  reescaperM   rL   )r   rN  r   rL  r  error_messages         r]   3test_metadata_routing_error_for_stacking_estimatorsrh    s     !ggfll1o68
i)*
+C	!!& 0	6 
 
z=)A	BmO 
C	B	Bs   6B
B')xr	  re  unittest.mockr   numpyr   r   numpy.testingr   scipyr   sklearnr   sklearn.baser   r   r	   r
   sklearn.datasetsr   r   r   r   r   r   sklearn.dummyr   r   sklearn.ensembler   r   r   r   sklearn.exceptionsr   r   sklearn.linear_modelr   r   r   r   sklearn.model_selectionr   r   r   sklearn.neighborsr    sklearn.neural_networkr!   sklearn.preprocessingr"   sklearn.svmr#   r$   r%   %sklearn.tests.metadata_routing_commonr&   r'   r(   r)   sklearn.utils._mockingr*   sklearn.utils._testingr+   r,   r-   sklearn.utils.fixesr.   r/   r0   diabetesdatatargetrt   ru   irisrK   rL   r  r  X_binaryy_binarymarkparametrizer^   ri   rq   rx   r   r   r   r   r   r   rM  	TypeErrorr   r   r   r   r   r   filterwarningsr   r   r   r  r  r  r)  r:  r=  r?  rH  rO  rT  r   rR   rc  rh  r   r_   r]   <module>r     s   1
 
    ,  " N N  :  B  M L 2 0 ' 1 1  6 
 O N?! 
J{DKK;b l )12F ( 1oq$RH
I 4"EF 6$1 7$1N!6G,G* 5!TPR#STU%	r
	B	/4		L$/0 6!2 7 V!2H 7.H++" 7.H++" # #"- " "	,#Z1RS -/0C01 !0 9	
 -/0.01 ,
	
  -/0Iv67 $6#7 ,	
3%(RJS(RJ "	lB'5VWT#3#56@Q@S8TUV,		
  +-.IK( $5#6 ,	
0R10R  -1=>I156 4CL4CL		
 +-.I156 		
, 
231  454(
  -/0I267 !3 4B7
	
  40
	
 +-.I267 !1 2B7 	
2 
237  :>;:>:H KL -/0I267 !3 4		
  40		
 +-.I267 !1 2 
	
. 
233  6
7 M8
2 = B/	
 	
* 5+* 5F  !#5#785#%.I 	
 +-.IK(  
	
010 '	02DE	+-=>4  	2& 	B/ 
23  
(
(8(0 &))<=6*E 7 >*EZ 2 -1=>I156 	
( -1=>%I156 4CL4CL'(	
" +-.I156 ""&'	
I3h	m  ;x u62 7y;z2	+7B 	01	./	
	
 	01	./ - . 	01	./ /2776<<?+CDFWX -+ .+\ 	01	./ -P .Pr_   