
    0Ph҂                        d Z ddlZddlm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mZmZ ddlmZmZmZmZmZmZ dd	lmZmZ dd
lmZmZmZm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z?m@Z@mAZA ddlBmCZCmDZDmEZE  e            ZFeFjG        eFjH        cZIZJ e            ZKeKjG        eKjH        cZLZM edd          \  ZNZO edd          \  ZPZQejR        S                    dd e+ddd          g          ejR        S                    dd ed          g          ejR        S                    dd dg          d!                                     ZTd" ZUd# ZVd$ ZWejR        S                    dd e*ddd          g          ejR        S                    d%di f ed          i f e            d&difg          ejR        S                    dd dg          d'                                     ZXejR        S                    d(eCeDz   eEz             d)             ZYejR        S                    d(eCeDz   eEz             d*             ZZd+ Z[ G d, d-ee          Z\ G d. d/ee          Z]ejR        S                    d0eMd1g ie^d2feMd3 e&            fd4 e4d56          fgd7d8e^d9feMd1d3 e&            fd: e]            fgie_d;feMd3 e&            fd: e5d56          fg e]            d<e_d;fg          d=             Z`ejR        S                    d0eJd1g ie^d2feJd1d3 e%            fd: e\            fgie_d;feJd3 e%            fd: e6            fg e\            d<e_d;fg          d>             ZaejR        S                    d? ed3 e&d          fd4 e5d          fg@          eLddA         eMddA         f e d3 e%            fd4 e6d          fg@          eIeJfgdBdCgD          dE             ZbdF ZcejR        S                    dG ed3 e&            fd4 e5d          fg e&             e*ddH          I          g edJ          R  e d3 e%            fd4 e6d          fg e%             e*ddH          I          eIeJfgdBdCgD          dK             ZddL ZeejR        f                    dM          ejR        S                    dG ed3 e&            fd4 e5d          fg e&            <          g edJ          R  e d3 e%            fd4 e6d          fg e%            <          eIeJfgdBdCgD          dN                         ZgejR        S                    dOeed7 e&d          eLeMfe edP e%            eIeJfg          dQ             ZhejR        S                    dG ed3 e&            fd4 e4            fgdRS          eLeMf e d3 e%            fd4 e6            fgdRS          eIeJfg          dT             ZiejR        S                    dUeee&fee e%fg          dV             ZjejR        S                    dW e0d           ed          gdXdYgD          dZ             Zkd[ ZlejR        S                    d\d]dPg          ejR        S                    dd dg          d^                         ZmejR        S                    d_ ed3 e&d          fd4 e5d          fg@          eKjn        eLeMg d`f ed3 e&d          fdad4 e5d          fg@          eKjn        eLddA         eMddA         dbdcgf e d3 e%            fd4 e6d          fg@          eFjn        eIeJdddegfgg dfD          ejR        S                    ddd g          dg                         Zodh Zpdi ZqejR        S                    djee8fe e9fg          dk             ZrejR        S                    djee8fe e9fg           edl          dm                         ZsejR        S                    djee8fe e9fg          ejR        S                    dndo ejt        eLju        d                   fdpg           edl          dq                                     ZvejR        S                    djee8fe e9fg           edl          dr                         ZwdS )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                    t          t          t                    t          t          d          \  }}}}dt	                      fdt                      fg}t          ||| |          }|                    ||           |                    |           |	                    |           |
                    ||          dk    sJ |                    |          }	|rdnd}
|	j        d	         |
k    sJ |rt          ||	d d d
d f                    |                    d           |                    ||           |                    |           |	                    |           ||                    |           |                    |          }	|rdnd}|	j        d	         |k    sJ |rt          ||	d d d
d f                    d S d S )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               d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/ensemble/tests/test_stacking.pytest_stacking_classifier_irisr^   C   s    (8fvR( ( ($GVWf +--.	0DEJ
'	  C GGGWKKf99VV$$s****mmF##G"-4BB1=44444 1233000NNfNGGGWKKff%%%mmF##G&1!8q=99999 1233000001 1    c                  @   t          d          \  } }t          t          |           ||d          \  }}}}dt                      fdt	          d          fg}t          |d	          }|                    ||           |                    |          }|j        d
         dk    sJ dt                      fdt                      fg}|
                    |           |                    ||           |                    |          }|j        d
         dk    sJ d S )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   s7   ...DAq"2a!ab# # #GVWa 
!##$	%26667J 
q
9
9
9CGGGWmmF##G=q     +--.	0DEJNNjN)))GGGWmmF##G=q      r_   c                     t          t          t                    t          t          d          \  } }}}ddt	          d          fg}t          dd          }t          dt	          d          fg|d	
          }t          ||d	
          }|                    | |           |                    | |           t          |	                    |          |	                    |                     t          |
                    |          |
                    |                     t          |                    |          |                    |                     d S )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      sS    #3fvR# # #GVWa !5)*C*C*C"DEJ	Rb	A	A	AB
I155567  C
 "ZPQRRRHGGGWLL'"""CKK'')9)9&)A)ABBBC%%f--x/E/Ef/M/MNNNCMM&))8+=+=f+E+EFFFFFr_   c                  F   t          t          t                    t          d          \  } }}}ddt	          d          fg}t          dd          }t          dt	          d          fg|d	          }t          ||d	          }|                    | |           |                    | |           t          |	                    |          |	                    |                     t          |
                    |          |
                    |                     d S )
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# # #GVWa !5)*C*C*C"DEJ	BR	@	@	@B
I155567  C
 !JqQQQHGGGWLL'"""CKK'')9)9&)A)ABBBCMM&))8+=+=f+E+EFFFFFr_   zfinal_estimator, predict_params
return_stdc                     t          t          t                    t          d          \  }}}}dt	                      fdt                      fg}t          ||| |          }	|	                    ||            |	j        |fi |}
|rdnd}|rt          |
          |k    sJ |	
                    |          }|rdnd}|j        d         |k    sJ |rt          ||d d d	d f                    |	                    d
           |	                    ||           |	                    |           |	
                    |          }|rdnd}|j        d         |k    sJ |rt          ||d d d	d f                    d S d S )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      s    #3j:B# # #GVWa )++,uikk.BCJ
'	  C GGGWS[22>22F"07QQa 56{{44444mmF##G"-4BB1=44444 2344 0111NNfNGGGWKKmmF##G'2!9=99999 2344 0111112 2r_   sparse_containerc                    t           | t          t                              t          d          \  }}}}dt	                      fdt                      fg}t          dd          }t          ||dd	          }|                    ||           |	                    |          }t          ||d d d
d f                    t          j        |          sJ |j        |j        k    sJ d S )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# # #GVWa )++,uikk.BCJ	BR	@	@	@B
raT  C GGGWmmF##G CDD)9:::?7#####=GN******r_   c                    t           | t          t                              t          d          \  }}}}dt	                      fdt                      fg}t          dd          }t          ||dd	          }|                    ||           |	                    |          }t          ||d d d
d f                    t          j        |          sJ |j        |j        k    sJ d S )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# # #GVWa +--.	0DEJ	Rb	A	A	AB
raT  C GGGWmmF##G BCC999?7#####=GN******r_   c                  8   t          t          d d                   t          d d         }} dt                      fdt	                      fg}t          |          }|                    | |           |                    |           }|j        d         dk    sJ d S )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     s    
 6$3$<  &#,B+--.7M7O7O0PQJ


3
3
3CGGBOOO]]2F<?ar_   c                       e Zd Zd Zd ZdS )NoWeightRegressorc                 ^    t                      | _        | j                            ||          S N)r   rv   rM   selfrf   rg   s      r]   rM   zNoWeightRegressor.fit  s%    !##x||Aq!!!r_   c                 @    t          j        |j        d                   S )Nr   )nponesrR   )r   rf   s     r]   rN   zNoWeightRegressor.predict   s    wqwqz"""r_   N)__name__
__module____qualname__rM   rN    r_   r]   r   r     s2        " " "# # # # #r_   r   c                       e Zd Zd ZdS )NoWeightClassifierc                 b    t          d          | _        | j                            ||          S )N
stratified)strategy)r   rY   rM   r   s      r]   rM   zNoWeightClassifier.fit%  s*    "L999x||Aq!!!r_   N)r   r   r   rM   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           	         t          j        ||          5  t          di |ddi}|                    t	          t
                    | t          j        t
          j        d                              d d d            d S # 1 swxY w Y   d S 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   *  s    T 
xw	/	/	/ J J 00600a000fqQ0H0HIIIJ J J J J J J J J J J J J J J J J J   ABBBc           	         t          j        ||          5  t          di |ddi}|                    t	          t
                    | t          j        t
          j        d                              d d d            d S # 1 swxY w Y   d S r   )	r   r   r   rM   r"   rt   r   r   rR   )rg   r   r   r   rv   s        r]   test_stacking_regressor_errorr   Y  s    2 
xw	/	/	/ R R//&//Q///j!!1BGJ<LQ<O4P4PQQQR R R R R R R R R R R R R R R R R Rr   zestimator, X, yre   r   r   r   )idsc                 J   t          |           }|                    t          dt          j                            d                               t          |           }|                    d           |                    t          dt          j                            d                               t          |                    ||                              |          d d dd f         |                    ||                              |                     d S )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BI,A,A!,D,DEEE     9%%N(((BI,A,A!,D,DEEE     1a  **1--aaae41a  **1--    r_   c                      t          dt          d          fdt          d          fg          } |                     t          t
                     d S )Nr?   i'  r   r   re   )r   r   r$   rM   rK   rL   )rY   s    r]   )test_stacking_classifier_stratify_defaultr     s^    
%v6667Iv.../
  C GGFFr_   zstacker, X, yr   ro   ra   c                    t          |          dz  }t          j        dg|z  dgt          |          |z
  z  z             }t          |||d          \  }}}}}	}t	          t
                    5  |                     ||           d d d            n# 1 swxY w Y   |                     |          }
t	          t
                    5  |                     ||t          j        |j	                             d d d            n# 1 swxY w Y   |                     |          }t          |
|           t	          t
                    5  |                     |||	           d d d            n# 1 swxY w Y   |                     |          }t          j        |
|z
                                            dk    sJ d S )	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     s   B VVq[N(	##a&&>*A!BB  ;K	1!; ; ;7GVWa!4a 
"4	5	5	5 & &GW%%%& & & & & & & & & & & & & & &v..	"4	5	5	5 L LGWBGGM4J4JKKKL L L L L L L L L L L L L L L 00$&8999	"4	5	5	5 I IGW4GHHHI I I I I I I I I I I I I I IOOF++M6"]2337799A======s6   1BBB	0DD	D	
E//E36E3c                      t          dt          d          fgt          d                    } |                     t          t          t          j        t          j        d                              d S )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     sk     -TJJJKL*$GGG  G KKbgfl1o.F.FKGGGGGr_   z-ignore::sklearn.exceptions.ConvergenceWarningc                    t          |           }t          |           }|                    d           |                    d           |                    ||           |                    ||           t          |j        |j                  D ]\  }}t          |j        |j                    t          j        t          d          5  t          |j
        j        |j
        j                   d d d            d S # 1 swxY w Y   d S )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     sP   B >>L>>Lq!!!q!!!QQ ",":L<TUU 8 8(7777 
~[	9	9	9 
 
)/1N1T	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   %C>>DDz7Stacker, Estimator, stack_method, final_estimator, X, yrN   c                 t   t          ||dd          \  }}}}	d |                                ||          fd |                                ||          fg}
|
D ]R\  }}t          d          |_        t          ||          }t          |          }||_        t          |||           S | |
d	|
          }|                    ||	           |j        d |
D             k    sJ t          d |j        D                       sJ |j        D ]'}t          ||          }|                    |           (dS )z2Check the behaviour of stacking when `cv='prefit'`r2   g      ?)r4   	test_sized0d1rM   )name)side_effectprefit)rB   r6   r9   c                     g | ]\  }}|S r   r   ).0rh   r   s      r]   
<listcomp>z(test_stacking_prefit.<locals>.<listcomp>X  s    "L"L"LI9"L"L"Lr_   c              3   6   K   | ]}|j         j        d k    V  dS )r   N)rM   
call_count)r   r   s     r]   	<genexpr>z'test_stacking_prefit.<locals>.<genexpr>Z  s,      RRy}'1,RRRRRRr_   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   . .>	12. . .*Hh( 
yy{{x223	yy{{x223J # @ @9%(((	Y55
 $ < < < *6&	<)>????g(O  G KK(###"L"L"L"L"LLLLLRRg>QRRRRRRRR ( 5 5	!)\::**844445 5r_   r   rd   c                     t          j        t                    5  |                     ||           d d d            d S # 1 swxY w Y   d S r   )r   r   r   rM   )r   rf   rg   s      r]   test_stacking_prefit_errorr   b  s    6 
~	&	&  Aq                 s   >AAz!make_dataset, Stacking, Estimatorc                     G d d|          } | dd          \  }} |d |            fg          }|j          d}t          j        t          |	          5  |j         d d d            n# 1 swxY w Y   |                    ||           d
}t          j        t          |	          5  |j         d d d            d S # 1 swxY w Y   d S )Nc                   "     e Zd ZdZ fdZ xZS )8test_stacking_without_n_features_in.<locals>.MyEstimatorz Estimator without n_features_in_c                 P    t                                          ||           | `d S r   )superrM   n_features_in_)r   rf   rg   	__class__s      r]   rM   z<test_stacking_without_n_features_in.<locals>.MyEstimator.fit  s'    GGKK1###r_   )r   r   r   __doc__rM   __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#666DAqhD++--#8"9:::G
G
G
GC	~S	1	1	1                 KK1
BC	~S	1	1	1                   s$   A//A36A3-CC	Cr   r!   r   c                    t          t          t          t          d          \  }}}}d}d| fg}t          |t	                      d                              ||          }|                    |          }|j        |j        d         |fk    sJ t          t          j
        |                    d	          d
                    rJ |                    |          }	|	j        |j        k    sJ dS )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\( ( ($GVWf I)$%J ,..$   
c'7	  ''G=V\!_i888882:gkkqk1137788888__V$$F<6<''''''r_   c                     t          t          t          t          d          \  } }}}d}dt                      fg}t	          |t                      d                              | |          }|                    |          }|j        |j        d         |fk    sJ |	                    |          }|j        |j        k    sJ dS )	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\( ( ($GVWf I/++,-J ,..(   
c'7	  ''G=V\!_i88888__V$$F<6<''''''r_   r   autoc                    t          t          t          t          d          \  }}}}|                                }d}dt	          d          fdt          d          fdt                      fg}t                      }	t          ||	||           	                    ||          }
t          ||           |
                    |          }|j        |j        k    sJ | d	k    rg d
}ndgt          |          z  }|
j        |k    sJ |t          |          z  }|r||j        d         z  }|
                    |          }|j        |j        d         |fk    sJ t          |
j        t#          j        ddg          g|z             dS )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#    s    (8l\( ( ($GVWf !I 
2.../	%26667	/##$J
 +,,O
'!	  
 
c'7  )7333[[  F<6<''''v!X!X!X"+s:!> 66666"S__4 /gmA..mmF##G=V\!_.@AAAAAs|bh1v&6&6%7)%CDDDD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                     |                      |           |                     t          |          |           |rt          j        ||f          }|                     |          }t          ||           dS )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_outr7    s|    D ;///KKa! I(GHH--m<<Iy.11111r_   c                  d   t          t          t                    t          t          d          \  } }}}t	          dt                      fg          }|                    | |           |                    |           |                    |           |	                    ||          dk    sJ dS )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_regressorr9  \  s    '7fvR( ( ($GVWf '577);(<
=
=
=CGGGWKKf99VV$$s******r_   c                     t          d          \  } }dt                      fdt          dd          fg}t          dd          }t          ||d          }d	}d
}t	          j        t          |          5 }|                    | |                              |            ddd           n# 1 swxY w Y   t          |j
        j        t                    sJ |t          |j
        j                  v sJ dS )a
  Check 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_errorrB  h  sH    B///DAq 
!##$	%12FFFGJ -!"MMMO
1  C QIVI	~Y	7	7	7 +91''***+ + + + + + + + + + + + + + +io/@@@@@IO566666666s   9*B//B36B3zEstimator, Childc                     t          j        t          d          5   | d |            g                              t          t
          g dd           ddd           dS # 1 swxY w Y   dS )zTest 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_supportedrI    s     
M
 
 
 
 
 		5%%''"##''F///C 	( 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   9A""A&)A&)enable_metadata_routingc                 Z     | d |            fg          }|                                  d S )Nsub_est)get_metadata_routing)r   rH  r  s      r]   %test_get_metadata_routing_without_fitrN    s9     )i)*
+
+Cr_   zprop, prop_valuer   )rF  rD  c           
          | d  |t                                j        di |difd  |t                                j        di |difg  |t                                j        di |di          } |j        t          t
          fi ||i  |j        t          t
          fi ||i  |j        t          fi ||i |j        D ]8}|d         j	        }t          |          sJ |D ]}t          d|dd|d||i 9|j        j	        }t          |          sJ t          d|d	         d
d
|d||i dS )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   rQ  r~   r)   r   )r   rH  prop
prop_valuer  r   rQ  rL  s           r]   -test_metadata_routing_for_stacking_estimatorsr]    s    ) ;y{{+++;KKtTlKK
 ;y{{+++;KKtTlKK		
 Hy{{333GWW4QU,WW  C CGFF11tZ0111Cff;;z(:;;;CK--4,---^  	Q<(8}} 	 	G# "	 
 $   	 #,Hx== RL	 
 
    r_   c                 f   t          j        t          j        d                   d}} | d |            fg          }d|j         d}t          j        t          t          j	        |                    5  |
                    t          t          ||           ddd           dS # 1 swxY w Y   dS )	zCTest that the right error is raised when metadata is not requested.r   rD  rL  zb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitr   rE  N)r   r   rK   rR   r   r   r   rG  reescaperM   rL   )r   rH  r   rF  r  error_messages         r]   3test_metadata_routing_error_for_stacking_estimatorsrb    s    !gfl1o668M
)i)*
+
+C	6!&	6 	6 	6 
 
z=)A)A	B	B	B P PmhOOOP P P P P P P P P P P P P P P P P Ps   5$B&&B*-B*)xr  r_  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   rG  	TypeErrorr   r   r   r   r   r   filterwarningsr   r   r   r  r  r  r#  r4  r7  r9  rB  rI  rN  r   rR   r]  rb  r   r_   r]   <module>r     sW   1 1
 
			            , , , , , ,       " " " " " " N N N N N N N N N N N N                : 9 9 9 9 9 9 9            B A A A A A A A            M L L L L L L L L L 2 2 2 2 2 2 0 0 0 0 0 0 ' ' ' ' ' ' 1 1 1 1 1 1 1 1 1 1            6 5 5 5 5 5         
 O N N N N N N N N N=??! 
Jy{{DK;;b   l )(12FFF ( 1ooq$RHHH
I  44"EEEF  66$1 $1 76  $1N! ! !6G G G,G G G* 55!TPR#S#S#STUU%	r
		B	/	/	/4			L$/0  66!2 !2 76  VU!2H 7.H + + +" 7.H + + +"     # # # # # # # #" " " " "- " " " "	,#Z1RS --//0CC0001 !0  9	
 --//0..001 ,
	
  --//0IIv6667 $6#5#7#7  ,	
3%( (RJ JS( (RJ "	lB'5VWT#3#3#5#56@Q@Q@S@S8TUV,		
  ++--.IIKK( $5#4#6#6  ,	
 0R R1 0R  --1===>II15556   4C4L4C4L		
 ++--.II15556   		
, 
231   4 5 4(
 
 
  --//0II26667 !3 2 4 45B777  
	
  4000
	
 
	
 ++--.II26667 !1 0 2 25B777   	
2 
237   :> >; :>:H H H KLL --//0II26667 !3 2 4 4  		
  4000		
 		
 ++--.II26667 !1 0 2 2   
	
. 
233   6
 
7  ML8
2 = B///	
 	
 * 5  5+ * 5F  !#5#5#7#785##%%.I   	
 ++--.IIKK(    
	
 0 1 0 '	02DE	+-=>   4  	2&&& 	B/// 
23  
 
( (
 
(8( ( (0 &))<==66*E *E 76 >=*EZ 2 --1===>II15556     	
( --1===>%II15556   4C4L4C4L'(	
" ++--.II15556   "&'	
I3h	 	 	m  ; ;x u662 2 76y; ;z2	+ 	+ 	+7 7 7B 	01	./ 	
 	
 	
 	01	./  ---  .-  	01	./  /7276<?+C+CDFWX  ---+ + .-  +\ 	01	./  ---P P .- P P Pr_   