a
    �ù»jÍ†  ã                   @   s   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ƒ ZFeFjGeFjH ZIZJeƒ ZKeKjGeKjH ZLZMeddd�\ZNZOeddd�\ZPZQejR Sdde+dddd�g¡ejR Sddedd�g¡ejR Sdd dg¡d!d"„ ƒƒƒZTd#d$„ ZUd%d&„ ZVd'd(„ ZWejR Sdde*dddd�g¡ejR Sd)di fedd�i feƒ d*difg¡ejR Sdd dg¡d+d,„ ƒƒƒZXejR Sd-eCeD eE ¡d.d/„ ƒZYejR Sd-eCeD eE ¡d0d1„ ƒZZd2d3„ Z[G d4d5„ d5eeƒZ\G d6d7„ d7eeƒZ]ejR Sd8eMd9g ie^d:feMd;e&ƒ fd<e4d=d>�fgd?d@œe^dAfeMd9d;e&ƒ fdBe]ƒ fgie_dCfeMd;e&ƒ fdBe5d=d>�fge]ƒ dDœe_dCfg¡dEdF„ ƒZ`ejR Sd8eJd9g ie^d:feJd9d;e%ƒ fdBe\ƒ fgie_dCfeJd;e%ƒ fdBe6ƒ fge\ƒ dDœe_dCfg¡dGdH„ ƒZaejRjSdIed;e&dd�fd<e5dd�fgdJ�eLddK… eMddK… fe d;e%ƒ fd<e6dd�fgdJ�eIeJfgdLdMgdN�dOdP„ ƒZbdQdR„ ZcejRjSdSed;e&ƒ fd<e5dd�fge&ƒ e*dddT�dU�geddV�¢R e d;e%ƒ fd<e6dd�fge%ƒ e*dddT�dU�eIeJfgdLdMgdN�dWdX„ ƒZddYdZ„ ZeejR fd[¡ejRjSdSed;e&ƒ fd<e5dd�fge&ƒ dD�geddV�¢R e d;e%ƒ fd<e6dd�fge%ƒ dD�eIeJfgdLdMgdN�d\d]„ ƒƒZgejR Sd^eed?e&dd�eLeMfe ed_e%ƒ eIeJfg¡d`da„ ƒZhejR SdSed;e&ƒ fd<e4ƒ fgdbdc�eLeMfe d;e%ƒ fd<e6ƒ fgdbdc�eIeJfg¡ddde„ ƒZiejR Sdfeee&fee e%fg¡dgdh„ ƒZjejRjSdie0dd�edd�gdjdkgdN�dldm„ ƒZkdndo„ ZlejR Sdpdqd_g¡ejR Sdd dg¡drds„ ƒƒZmejRjSdted;e&dd�fd<e5dd�fgdJ�eKjneLeMg du¢fed;e&dd�fdvd<e5dd�fgdJ�eKjneLddK… eMddK… dwdxgfe d;e%ƒ fd<e6dd�fgdJ�eFjneIeJdydzgfgg d{¢dN�ejR Sddd g¡d|d}„ ƒƒZod~d„ Zpd€d�„ ZqejR Sd‚ee8fe e9fg¡dƒd„„ ƒZrejR Sd‚ee8fe e9fg¡edd…�d†d‡„ ƒƒZsejR Sd‚ee8fe e9fg¡ejR Sdˆd‰e teLjud ¡fdŠg¡edd…�d‹dŒ„ ƒƒƒZvejR Sd‚ee8fe e9fg¡edd…�d�dŽ„ ƒƒZwdS )�z+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é   é*   )Z	n_classesÚrandom_stateé   ÚcvT)Zn_splitsÚshuffler2   Úfinal_estimator©r2   ÚpassthroughFc                 C   sH  t ttƒttdd�\}}}}dtƒ fdtƒ fg}t||| |d�}| ||¡ | |¡ | 	|¡ | 
||¡dkstJ ‚| |¡}	|r†dnd}
|	jd	 |
ksœJ ‚|rºt||	d d …d
d …f ƒ |jdd� | ||¡ | |¡ | 	|¡ |d u rø| |¡ | |¡}	|�rdnd}|	jd	 |k�s$J ‚|�rDt||	d d …d
d …f ƒ d S )Nr1   ©Zstratifyr2   ÚlrÚsvc©Ú
estimatorsr6   r4   r8   çš™™™™™é?é
   é   é   éüÿÿÿÚdrop©r:   é   r0   )r   r!   ÚX_irisÚy_irisr   r#   r   ÚfitÚpredictÚpredict_probaÚscoreÚ	transformÚshaper*   Ú
set_paramsÚdecision_function)r4   r6   r8   ÚX_trainÚX_testÚy_trainÚy_testr=   ÚclfÚX_transÚexpected_column_countÚexpected_column_count_drop© rX   úJE:\soccer\ml_env\Lib\site-packages\sklearn/ensemble/tests/test_stacking.pyÚtest_stacking_classifier_irisC   s<    
ÿü






rZ   c            	      C   sÂ   t dd�\} }tt| ƒ||dd�\}}}}dtƒ fdtdd�fg}t|dd	�}| ||¡ | |¡}|jd
 dksvJ ‚dtƒ fdt	ƒ fg}|j
|d� | ||¡ | |¡}|jd
 dks¾J ‚d S )NT©Z
return_X_yr1   r9   r:   Úrfr7   r0   ©r=   r4   rA   r3   r;   ©r=   )r
   r   r!   r   r   r   rH   rL   rM   r#   rN   )	ÚXÚyrP   rQ   rR   Ú_r=   rT   rU   rX   rX   rY   Ú:test_stacking_classifier_drop_column_binary_classificationq   s     ÿþ

rb   c                  C   sÀ   t ttƒttdd�\} }}}ddtdd�fg}tddd�}tdtdd�fg|d	d
�}t||d	d
�}| | |¡ | | |¡ t| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ t| |¡| |¡ƒ d S )Nr1   r9   ©r:   rC   r;   r   r7   r?   ©Zn_estimatorsr2   é   ©r=   r6   r4   )r   r!   rF   rG   r#   r   r   rH   r*   rI   rJ   rL   )rP   rQ   rR   ra   r=   r\   rT   Zclf_droprX   rX   rY   Ú'test_stacking_classifier_drop_estimatorŒ   s     ÿýrg   c                  C   s¨   t ttƒtdd�\} }}}ddtdd�fg}tddd�}tdtdd�fg|dd	�}t||dd	�}| | |¡ | | |¡ t| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ d S )
Nr1   r7   rc   Úsvrr   r?   rd   re   rf   )r   r!   Ú
X_diabetesÚ
y_diabetesr$   r   r   rH   r*   rI   rL   )rP   rQ   rR   ra   r=   r\   ÚregZreg_droprX   rX   rY   Ú&test_stacking_regressor_drop_estimator¢   s    
ÿýrl   zfinal_estimator, predict_paramsZ
return_stdc                 C   s2  t ttƒtdd�\}}}}dtƒ fdtƒ fg}t||| |d�}	|	 ||¡ |	j|fi |¤Ž}
|rddnd}|r|t	|
ƒ|ks|J ‚|	 
|¡}|rŽdnd}|jd |ks¤J ‚|rÂt||d d …d	d …f ƒ |	jd
d� |	 ||¡ |	 |¡ |	 
|¡}|rödnd}|jd |k�sJ ‚|�r.t||d d …d	d …f ƒ d S )Nr1   r7   r:   rh   r<   r3   rA   é   éöÿÿÿrC   rD   é   )r   r!   ri   rj   r   r$   r   rH   rI   ÚlenrL   rM   r*   rN   )r4   r6   Zpredict_paramsr8   rP   rQ   rR   ra   r=   rk   ÚresultZexpected_result_lengthrU   rV   rW   rX   rX   rY   Ú test_stacking_regressor_diabetes·   s8    
ÿü


rr   Úsparse_containerc           	      C   s    t | ttƒƒtdd�\}}}}dtƒ fdtƒ fg}tddd�}t||ddd	�}| ||¡ | 	|¡}t
||d d …d
d …f ƒ t |¡sŒJ ‚|j|jksœJ ‚d S )Nr1   r7   r:   rh   r?   rd   re   Tr<   rn   )r   r!   ri   rj   r   r$   r   r   rH   rL   r+   r   ÚissparseÚformat©	rs   rP   rQ   rR   ra   r=   r\   rT   rU   rX   rX   rY   Ú*test_stacking_regressor_sparse_passthroughå   s    ÿÿ
rw   c           	      C   s    t | ttƒƒtdd�\}}}}dtƒ fdtƒ fg}tddd�}t||ddd	�}| ||¡ | 	|¡}t
||d d …d
d …f ƒ t |¡sŒJ ‚|j|jksœJ ‚d S )Nr1   r7   r:   r;   r?   rd   re   Tr<   rB   )r   r!   rF   rG   r   r#   r   r   rH   rL   r+   r   rt   ru   rv   rX   rX   rY   Ú+test_stacking_classifier_sparse_passthroughù   s    ÿÿ
rx   c                  C   sh   t td d… ƒtd d…  } }dtƒ fdtƒ fg}t|d�}| | |¡ | | ¡}|jd dksdJ ‚d S )Néd   r:   r\   r^   rA   r3   )	r!   rF   rG   r   r   r   rH   rL   rM   )ZX_Zy_r=   rT   ZX_metarX   rX   rY   Ú)test_stacking_classifier_drop_binary_prob  s    

rz   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNoWeightRegressorc                 C   s   t ƒ | _| j ||¡S ©N)r   rk   rH   ©Úselfr_   r`   rX   rX   rY   rH     s    zNoWeightRegressor.fitc                 C   s   t  |jd ¡S )Nr   )ÚnpÚonesrM   )r~   r_   rX   rX   rY   rI      s    zNoWeightRegressor.predictN)Ú__name__Ú
__module__Ú__qualname__rH   rI   rX   rX   rX   rY   r{     s   r{   c                   @   s   e Zd Zdd„ ZdS )ÚNoWeightClassifierc                 C   s   t dd�| _| j ||¡S )NZ
stratified)Zstrategy)r   rT   rH   r}   rX   rX   rY   rH   %  s    zNoWeightClassifier.fitN)r�   r‚   rƒ   rH   rX   rX   rX   rY   r„   $  s   r„   zy, params, type_err, msg_errr=   zInvalid 'estimators' attribute,r:   ÚsvmiPÃ  ©Zmax_iterrJ   )r=   Ústack_methodz+does not implement the method predict_probaZcorzdoes not support sample weight©r=   r6   c                 C   sh   t j||d��F tf i |¤ddi¤Ž}|jttƒ| t tjd ¡d� W d   ƒ n1 sZ0    Y  d S ©N©Úmatchr4   r0   r   ©Úsample_weight)	ÚpytestÚraisesr   rH   r!   rF   r   r€   rM   )r`   ÚparamsÚtype_errÚmsg_errrT   rX   rX   rY   Útest_stacking_classifier_error*  s    *r“   c                 C   sh   t j||d��F tf i |¤ddi¤Ž}|jttƒ| t tjd ¡d� W d   ƒ n1 sZ0    Y  d S r‰   )	rŽ   r�   r   rH   r!   ri   r   r€   rM   )r`   r�   r‘   r’   rk   rX   rX   rY   Útest_stacking_regressor_errorY  s    r”   zestimator, X, yr^   ry   r   r   )Zidsc                 C   sŽ   t | ƒ}|jtdtj d¡d�d� t | ƒ}|jdd� |jtdtj d¡d�d� t| ||¡ |¡d d …dd …f | ||¡ |¡ƒ d S )NTr   ©r5   r2   ©r4   rC   rD   rA   )	r	   rN   r   r   ÚrandomZRandomStater*   rH   rL   )Ú	estimatorr_   r`   Zestimator_fullZestimator_droprX   rX   rY   Útest_stacking_randomnessw  s    ÿÿ þr™   c                  C   s2   t dtdd�fdtdd�fgd�} |  tt¡ d S )Nr:   i'  r†   r…   r^   )r   r   r#   rH   rF   rG   )rT   rX   rX   rY   Ú)test_stacking_classifier_stratify_default¥  s    þÿrš   zstacker, X, yr•   rf   r[   c                 C   sF  t |ƒd }t dg| dgt |ƒ|   ¡}t|||dd�\}}}}}	}ttd�� |  ||¡ W d   ƒ n1 sv0    Y  |  |¡}
ttd��( | j||t |j	¡d� W d   ƒ n1 sÂ0    Y  |  |¡}t
|
|ƒ ttd��  | j|||	d� W d   ƒ n1 �s0    Y  |  |¡}t |
| ¡ ¡ dk�sBJ ‚d S )	Nr3   gš™™™™™¹?gÍÌÌÌÌÌì?r1   r7   )ÚcategoryrŒ   r   )rp   r   Úarrayr   r,   r   rH   rI   r€   rM   r*   ÚabsÚsum)Ústackerr_   r`   Zn_half_samplesZtotal_sample_weightrP   rQ   rR   ra   Zsample_weight_trainZy_pred_no_weightZy_pred_unit_weightZy_pred_biasedrX   rX   rY   Ú test_stacking_with_sample_weight²  s$    !ÿÿ*
6

0
r    c                  C   s>   t dtdd�fgtdd�d�} | jttt tjd ¡d� d S )Nr:   T)Zexpected_sample_weightrˆ   r   rŒ   )r   r)   rH   rF   rG   r   r€   rM   )rŸ   rX   rX   rY   Ú0test_stacking_classifier_sample_weight_fit_paramì  s
    þr¡   z-ignore::sklearn.exceptions.ConvergenceWarningc                 C   sª   t | ƒ}t | ƒ}|jdd� |jdd� | ||¡ | ||¡ t|j|jƒD ]\}}t|j|jƒ qNtjt	dd��" t|j
j|j
jƒ W d   ƒ n1 sœ0    Y  d S )Nr0   r–   re   z	Not equalrŠ   )r	   rN   rH   ÚzipÚestimators_r*   Zcoef_rŽ   r�   ÚAssertionErrorÚfinal_estimator_)rŸ   r_   r`   Zstacker_cv_3Zstacker_cv_5Zest_cv_3Zest_cv_5rX   rX   rY   Útest_stacking_cv_influenceõ  s    !ÿr¦   z7Stacker, Estimator, stack_method, final_estimator, X, yrI   c                 C   sê   t ||ddd�\}}}}	d|ƒ  ||¡fd|ƒ  ||¡fg}
|
D ]:\}}tdd�|_t||ƒ}t|d�}||_t|||ƒ q@| |
d	|d
�}| ||	¡ |jdd„ |
D ƒks®J ‚tdd„ |jD ƒƒsÆJ ‚|jD ]}t||ƒ}| |¡ qÌdS )z2Check the behaviour of stacking when `cv='prefit'`r1   g      à?)r2   Z	test_sizeZd0Zd1rH   )Úname)Zside_effectÚprefit)r=   r4   r6   c                 S   s   g | ]\}}|‘qS rX   rX   )Ú.0ra   r˜   rX   rX   rY   Ú
<listcomp>X  ó    z(test_stacking_prefit.<locals>.<listcomp>c                 s   s   | ]}|j jd kV  qdS )r   N)rH   Z
call_count)r©   r˜   rX   rX   rY   Ú	<genexpr>Z  r«   z'test_stacking_prefit.<locals>.<genexpr>N)	r   rH   r   Úgetattrr�   Úsetattrr£   ÚallZassert_called_with)ZStackerÚ	Estimatorr‡   r6   r_   r`   ZX_train1ZX_train2Zy_train1Zy_train2r=   ra   r˜   Z
stack_funcZpredict_method_mockedrŸ   Zstack_func_mockrX   rX   rY   Útest_stacking_prefit*  s*    ÿþ

ÿ

r±   r¨   r]   c                 C   s:   t  t¡� |  ||¡ W d   ƒ n1 s,0    Y  d S r|   )rŽ   r�   r   rH   )rŸ   r_   r`   rX   rX   rY   Útest_stacking_prefit_errorb  s    r²   z!make_dataset, Stacking, Estimatorc                 C   sº   G dd„ d|ƒ}| ddd�\}}|d|ƒ fgd�}|j › d�}tjt|d	�� |j W d   ƒ n1 sh0    Y  | ||¡ d
}tjt|d	�� |j W d   ƒ n1 s¬0    Y  d S )Nc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )z8test_stacking_without_n_features_in.<locals>.MyEstimatorz Estimator without n_features_in_c                    s   t ƒ  ||¡ | `d S r|   )ÚsuperrH   Ún_features_in_r}   ©Ú	__class__rX   rY   rH   �  s    z<test_stacking_without_n_features_in.<locals>.MyEstimator.fit)r�   r‚   rƒ   Ú__doc__rH   Ú__classcell__rX   rX   rµ   rY   ÚMyEstimatorŒ  s   r¹   r   ry   )r2   Z	n_samplesr:   r^   z' object has no attribute n_features_in_rŠ   z6'MyEstimator' object has no attribute 'n_features_in_')r�   rŽ   r�   ÚAttributeErrorr´   rH   )Zmake_datasetZStackingr°   r¹   r_   r`   rŸ   ÚmsgrX   rX   rY   Ú#test_stacking_without_n_features_in�  s    $r¼   r˜   r    r   c           
      C   sš   t tttdd�\}}}}d}d| fg}t|tƒ dd� ||¡}| |¡}|j|jd |fks`J ‚tt	 
|jdd	�d
¡ƒr|J ‚| |¡}	|	j|jks–J ‚dS )zÚCheck 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.
    r1   r9   r0   ÚestrJ   ©r=   r6   r‡   r   rA   )Zaxisg      ð?N)r   ÚX_multilabelÚy_multilabelr   r   rH   rL   rM   Úanyr   Úiscloserž   rI   )
r˜   rP   rQ   rR   rS   Ú	n_outputsr=   rŸ   rU   Úy_predrX   rX   rY   Ú1test_stacking_classifier_multilabel_predict_proba¢  s"    ÿ
ýü

rÅ   c            	      C   s€   t tttdd�\} }}}d}dtƒ fg}t|tƒ dd� | |¡}| |¡}|j|jd |fksbJ ‚| 	|¡}|j|jks|J ‚dS )	zŸCheck the behaviour for the multilabel classification case and the
    `decision_function` stacking method. Only `RidgeClassifier` supports this
    case.
    r1   r9   r0   r½   rO   r¾   r   N)
r   r¿   rÀ   r   r   r   rH   rL   rM   rI   )	rP   rQ   rR   rS   rÃ   r=   rŸ   rU   rÄ   rX   rX   rY   Ú5test_stacking_classifier_multilabel_decision_functionÉ  s     ÿýü

rÆ   r‡   Úautoc                 C   s  t tttdd�\}}}}| ¡ }d}dtdd�fdtdd�fdtƒ fg}tƒ }	t||	|| d� 	||¡}
t
||ƒ |
 |¡}|j|jksŠJ ‚| d	krœg d
¢}ndgt|ƒ }|
j|ks¸J ‚|t|ƒ }|rÖ||jd 7 }|
 |¡}|j|jd |fksøJ ‚t
|
jt ddg¡g| ƒ dS )zŽCheck the behaviour for the multilabel classification case for stack methods
    supported for all estimators or automatically picked up.
    r1   r9   r0   Zmlpr7   r\   Úridge)r=   r6   r8   r‡   rÇ   )rJ   rJ   rO   rI   rA   r   N)r   r¿   rÀ   Úcopyr    r   r   r   r   rH   r   rI   rM   rp   Zstack_method_rL   Zclasses_r   rœ   )r‡   r8   rP   rQ   rR   rS   Zy_train_before_fitrÃ   r=   r6   rT   rÄ   Zexpected_stack_methodsZn_features_X_transrU   rX   rX   rY   Ú0test_stacking_classifier_multilabel_auto_predictá  s>    ÿýüû



rÊ   z,stacker, feature_names, X, y, expected_names)Zstackingclassifier_lr0Zstackingclassifier_lr1Zstackingclassifier_lr2Zstackingclassifier_svm0Zstackingclassifier_svm1Zstackingclassifier_svm2)ÚotherrC   Zstackingclassifier_lrZstackingclassifier_svmZstackingregressor_lrZstackingregressor_svm)ZStackingClassifier_multiclassZStackingClassifier_binaryr   c                 C   sF   | j |d� |  t|ƒ|¡ |r.t ||f¡}|  |¡}t||ƒ dS )z/Check get_feature_names_out works for stacking.)r8   N)rN   rH   r!   r   ZconcatenateZget_feature_names_outr   )rŸ   Úfeature_namesr_   r`   Zexpected_namesr8   Z	names_outrX   rX   rY   Útest_get_feature_names_out  s    B
rÍ   c                  C   sf   t ttƒttdd�\} }}}tdtƒ fgd�}| | |¡ | |¡ | |¡ | 	||¡dksbJ ‚dS )zNCheck that a regressor can be used as the first layer in `StackingClassifier`.r1   r9   rÈ   r^   r>   N)
r   r!   rF   rG   r   r   rH   rI   rJ   rK   )rP   rQ   rR   rS   rT   rX   rX   rY   Ú'test_stacking_classifier_base_regressor\  s    ÿ

rÎ   c                  C   s´   t dd�\} }dtƒ fdtddd�fg}tddd�}t||dd�}d	}d
}tjt|d��"}| | |¡ | ¡ W d  ƒ n1 s€0    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
    r1   r7   r:   r\   r3   rd   r0   rf   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º   rH   rO   Ú
isinstanceÚvalueÚ	__cause__Ústr)r_   r`   r=   r6   rT   Z	outer_msgZ	inner_msgZ	exec_inforX   rX   rY   Ú-test_stacking_final_estimator_attribute_errorh  s    þÿ0rÓ   zEstimator, Childc                 C   sR   t jtdd��0 | d|ƒ gƒjttg d¢dd� W d  ƒ n1 sD0    Y  dS )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Š   rT   )rA   rA   rA   rA   rA   Úa©r�   ÚmetadataN)rŽ   r�   Ú
ValueErrorrH   rF   rG   )r°   ÚChildrX   rX   rY   Ú*test_routing_passed_metadata_not_supported‰  s    ÿÿrÙ   )Zenable_metadata_routingc                 C   s   | d|ƒ fgƒ}|  ¡  d S )NÚsub_est)Zget_metadata_routing)r°   rØ   r½   rX   rX   rY   Ú%test_get_metadata_routing_without_fitœ  s    
rÛ   zprop, prop_valuer�   )rÖ   rÔ   c              	   C   s(  | d|t ƒ d�jf i |di¤Žfd|t ƒ d�jf i |di¤Žfg|t ƒ d�jf i |di¤Žd�}|jttfi ||i¤Ž |jttfi ||i¤Ž |jtfi ||i¤Ž |jD ]@}|d j	}t
|ƒsÆJ ‚|D ] }tf |dd|dœ||i¤Ž qÊq¬|jj	}t
|ƒ�sJ ‚tf |d	 d
d
|dœ||i¤Ž dS )z5Test that metadata is routed correctly for Stacking*.Zsub_est1)ÚregistryTZsub_est2)r6   rA   rH   )ÚobjÚmethodÚparentZsplit_paramséÿÿÿÿrI   N)r'   Zset_fit_requestZset_predict_requestrH   rF   rG   Zfit_transformrI   r=   rÜ   rp   r(   r¥   )r°   rØ   ÚpropZ
prop_valuer½   r˜   rÜ   rÚ   rX   rX   rY   Ú-test_metadata_routing_for_stacking_estimatorsª  sF    þþû
õ

üû
üûrâ   c                 C   s~   t  tjd ¡d }}| d|ƒ fgƒ}d|j› d�}tjtt 	|¡d��" |j
tt||d� W d  ƒ n1 sp0    Y  dS )	zCTest that the right error is raised when metadata is not requested.r   rÔ   rÚ   zb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitrŠ   rÕ   N)r   r€   rF   rM   r�   rŽ   r�   r×   ÚreÚescaperH   rG   )r°   rØ   r�   rÖ   r½   Úerror_messagerX   rX   rY   Ú3test_metadata_routing_error_for_stacking_estimatorsã  s    
ÿÿræ   )xr·   rã   Zunittest.mockr   Únumpyr   rŽ   Znumpy.testingr   Zscipyr   Zsklearnr   Zsklearn.baser   r   r   r	   Zsklearn.datasetsr
   r   r   r   r   r   Zsklearn.dummyr   r   Zsklearn.ensembler   r   r   r   Zsklearn.exceptionsr   r   Zsklearn.linear_modelr   r   r   r   Zsklearn.model_selectionr   r   r   Zsklearn.neighborsr   Zsklearn.neural_networkr    Zsklearn.preprocessingr!   Zsklearn.svmr"   r#   r$   Z%sklearn.tests.metadata_routing_commonr%   r&   r'   r(   Zsklearn.utils._mockingr)   Zsklearn.utils._testingr*   r+   r,   Zsklearn.utils.fixesr-   r.   r/   ZdiabetesÚdataÚtargetri   rj   ZirisrF   rG   r¿   rÀ   ZX_binaryZy_binaryÚmarkZparametrizerZ   rb   rg   rl   rr   rw   rx   rz   r{   r„   r×   Ú	TypeErrorr“   r”   r™   rš   r    r¡   Úfilterwarningsr¦   r±   r²   r¼   rÅ   rÆ   rÊ   rÌ   rÍ   rÎ   rÓ   rÙ   rÛ   r€   rM   râ   ræ   rX   rX   rX   rY   Ú<module>   sŽ   ÿ
ÿÿ'ýþ$ÿ
ÿ
	þûöþÿ÷þûöçþ)
üþûöøþ
þÿ

øþÿøõè
þ
úÿ	÷þ
úöôå
	
þûÿøþû÷õçú	ú÷þ
#þú	þû÷÷þ
þþ
û÷
-þÿöýÿ

þõþÿþöÜ4Ê<!þþ
þþþþÿ.þþ