
    h$,fW                     	   U d dl Z d dl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 d dlmZ d dlmZmZmZmZmZmZmZmZ d dl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# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK d dlLmMZM ej                  j                  d      ZPd\  ZQZRePj                  eQeR      ZTePj                  d deQ      ZV ej                  eV      ZXePj                  d deQdf      ZY eZeYj                  d         D  cg c]  }  ej                  eYdd| f          c} Z\ePj                  d deQ      Z]ePj                  eQ      Z^ ej                  d dg e`eV      dz  z        Za ej                  d      d        Zce<ddeTeYd d!gd"e;dd#eTeYd d!gd!d$e\iid%e
dd#eTeVd gd&d'e:d(d#eTeYd gd"e=d(deTeYd gd"e)eTeVd)d d*gd+d gd,e1dd#d-d.d/d0giieTeVd gd1d)d d*gd+d gd2e4dd#d3d.d/d0giieTeVd gd1d)d d*gd+d gd2e2dd#d-d.d/d0giieTeVd gd1d)d d*gd+d gd2e3dd#d3d.d/d0giieTeVd gd1d)d d*gd+d gd2e7dd#eTeVd d!gd!d$eXiid%e6dd#eTeVd d!gd1d!d$eXiid4e8dd#d5dieTeVd gd6e dd#eTeVd d!gd!d$eXiid%e,eTeVd+d gd7e%eTeVd+d gd7e'eTeVd+d gd7e*eTeYd+d gd7e+eTeYd+d gd7e&eTeVd+d gd7e(eTeVd+d gd7gZdeeefd8<   	 edD cg c]  } eg|d9   j                         c}Zi e        e        e        e        e?g        e        e#        e-        e eC              e eC              e/        e.        eA eC              e! eC              e eC              e eD              e        e eC              e eD             gZjd: Zkej                  j                  dej      d;        Znej                  j                  dej      d<        Zod= Zpej                  j                  d9edei>      d?        Zqej                  j                  d9edei>      d@        Zrej                  j                  d9edei>      dA        Zsej                  j                  d9edei>      dB        Ztej                  j                  d9edei>      dC        Zuej                  j                  d9edei>      dD        Zvyc c} w c c}w )E    Nconfig_context)is_classifier)CalibratedClassifierCV)TransformedTargetRegressor)GraphicalLassoCV)AdaBoostClassifierAdaBoostRegressorBaggingClassifierBaggingRegressorStackingClassifierStackingRegressorVotingClassifierVotingRegressor)UnsetMetadataPassedError)enable_halving_search_cvenable_iterative_imputer)RFERFECVSelectFromModelSequentialFeatureSelector)IterativeImputer)ElasticNetCVLarsCVLassoCVLassoLarsCVLogisticRegressionCVMultiTaskElasticNetCVMultiTaskLassoCVOrthogonalMatchingPursuitCVRANSACRegressorRidgeClassifierCVRidgeCV)GridSearchCVHalvingGridSearchCVHalvingRandomSearchCVRandomizedSearchCV)OneVsOneClassifierOneVsRestClassifierOutputCodeClassifier)ClassifierChainMultiOutputClassifierMultiOutputRegressorRegressorChain)FeatureUnion)SelfTrainingClassifier)	ConsumingClassifierConsumingRegressorConsumingScorerConsumingSplitterNonConsumingClassifierNonConsumingRegressor	_Registryassert_request_is_emptycheck_recorded_metadata)MetadataRouter*   )d         )size   
      T)autousec               #   V   K   t        d      5  d ddd       y# 1 sw Y   yxY ww)zEnable SLEP006 for all tests.T)enable_metadata_routingNr        Rlib/python3.12/site-packages/sklearn/tests/test_metaestimators_metadata_routing.pyenable_slep006rI   [   s'      
	5   s   )	)&)	estimator	regressorfitpartial_fit)metaestimatorestimator_namerJ   Xyestimator_routing_methods
classifierclasses)rN   rO   rJ   rP   rQ   rR   method_argsF)rN   rO   rJ   rP   rQ   rR   preserves_metadatabase_estimatorscoringscorecv)rN   rP   rQ   scorer_namescorer_routing_methodscv_namecv_routing_methods
param_gridalphag?g?subset)rN   rO   rJ   	init_argsrP   rQ   rR   rV   r[   r\   r]   r^   param_distributions)rN   rO   rJ   rP   rQ   rR   rV   rU   random_state)rN   rO   rJ   rb   rP   rQ   rR   )rN   rP   rQ   r]   r^   METAESTIMATORSrN   c                    | j                  di       }d\  }}d\  }}d\  }}d| v rR| d   }	t               }| d   }
|r|
dk(  rt        |      }n&t        |      }n|
dk(  rt	               }n
t               }|||	<   d| v r | d   }t               }t        |      }|||<   d| v r | d   }t               }t        |      }|||<   |||f||f||ffS )	a=  Get the init args for a metaestimator

    This is a helper function to get the init args for a metaestimator from
    the METAESTIMATORS list. It returns an empty dict if no init args are
    required.

    Parameters
    ----------
    metaestimator_info : dict
        The metaestimator info from METAESTIMATORS

    sub_estimator_consumes : bool
        Whether the sub-estimator consumes metadata or not.

    Returns
    -------
    kwargs : dict
        The init args for the metaestimator.

    (estimator, estimator_registry) : (estimator, registry)
        The sub-estimator and the corresponding registry.

    (scorer, scorer_registry) : (scorer, registry)
        The scorer and the corresponding registry.

    (cv, cv_registry) : (CV splitter, registry)
        The CV splitter and the corresponding registry.
    rb   )NNrJ   rO   rK   r[   )registryr]   )getr7   r2   r1   r6   r5   r3   r4   )metaestimator_infosub_estimator_consumeskwargsrJ   estimator_registryscorerscorer_registryrZ   cv_registryrO   sub_estimator_typer[   r]   s                rH   get_init_argsrq   ^  s!   :  ##K4F$.!I!(FO OB((+,<=&[/<!![0./AB	/0BC	![013	24	!*~**(7#+ /:${&&$Y/k4w 		&'	!	[	 rG   c                     t        j                  t              5  | j                          ddd       y# 1 sw Y   yxY w)zvTest that get_metadata_routing is not implemented on meta-estimators for
    which we haven't implemented routing yet.N)pytestraisesNotImplementedErrorget_metadata_routingrJ   s    rH   0test_unsupported_estimators_get_metadata_routingrx     s2     
*	+ )&&() ) )s   4=c                     t        j                  t              5  	 | j                  dggdgdg       	 ddd       y# t        $ r t        w xY w# 1 sw Y   yxY w)zTest that fit raises NotImplementedError when metadata routing is
    enabled and a metadata is passed on meta-estimators for which we haven't
    implemented routing yet.r@   sample_weightN)rs   rt   ru   rL   	TypeErrorrw   s    rH   -test_unsupported_estimators_fit_with_metadatar}     sc    
 
*	+ &	&MMA3%!QCM8& &  	& &%	&& &s   A>AAAc                      t               } t               }| |usJ | t        j                  |       u sJ | t        j                  |       u sJ y )N)r7   copydeepcopy)abs     rH   test_registry_copyr     sI    AAA::		!a    rG   )idsc                     | d   }t        | d      ^}} |di |}d| v rddgi}nd }t        |j                         |       t        |j                         t              sJ y )	NrN   Trj   r]   splittersplit)excluderF   )rq   r8   rv   
isinstancer:   )rN   clsrk   _instancer   s         rH   test_default_requestr     sp     
(C}TJJFQ}V}HM! y)H99;WMh335~FFFrG   c                    d| vry | d   }| d   }| d   }| d   }|D ]  }dD ]  }t        | d      ^}\  }}	\  }
}	}	|
r |
j                  di |di t        t        d|   }||i}d	| d
|j                  j
                   d| } |di |}t        j                  t        t        j                  |            5  t        ||      } |||fi | d d d          y # 1 sw Y   xY w)NrJ   rN   rP   rQ   rR   r{   metadataTr   [z@] are passed but are not explicitly set as requested or not for .)matchrF   )rq   set_score_requestr{   r   	__class____name__rs   rt   r   reescapegetattr)rN   r   rP   rQ   routing_methodsmethod_namekeyrk   rJ   r   rm   valmethod_kwargsmsgr   methods                   rH   0test_error_on_missing_requests_for_sub_estimatorr     s4    -' 	

(CcAcA#$?@O& .0 	.C6Cd73FNYKVQ! (((7C;7$1xHMC #JMC5 !++445Q{mE 
 }V}H7ryy~N . ;7q!-}-. .	... .s   :CC'c           	      >   d| vry d }| d   }| d   }| d   }| d   }| j                  dd      }|D ]  }d	D ]  }t        t        d	|   }	||	i}
t        | d
      \  }\  }}\  }}\  }}|r	 ||d       |r|j	                  dd        |||        |di |}t        ||      }| j                  di       j                  |i       } |||fi |
| |sJ |du r|D ]  }t        ||fi |
  |dk(  s|D ]  }t        ||fd|
j                         i|
 !   y )NrJ   c                 n    t        | d| d      } |dd       t        |       r|dk(  r
 |d       y y y )Nset__requestTr   rM   rT   )r   r   )rJ   r   set_request_for_methods      rH   set_requestzHtest_setting_request_on_sub_estimator_removes_error.<locals>.set_request  sB    !(d;-x4P!QTDA#}(D"40 )E#rG   rN   rP   rQ   rR   rV   Tr   r   rY   groupsr   rU   ra   split_paramsrF   )rh   r{   r   rq   set_split_requestr   r9   keys)rN   r   r   rP   rQ   r   rV   r   r   r   r   rk   rJ   rg   rm   r   rZ   r   r   extra_method_argss                       rH   3test_setting_request_on_sub_estimator_removes_errorr     s    -' 	1 
(CcAcA#$?@O&**+?F&  0 	C$1xHMC #JMBOdC?F)Y;FAQ FG,$$D4$@	;/}V}HX{3F - 1 1- D H HR! 1a>=>,=> O8!T)!) UI+I{TmTU#x/!) I+!# &3%7%7%9 (	3	 rG   c                    d| vry d }| d   }| d   }| d   }| d   }|D ]f  }t        | d      \  }\  }}	\  }	}	\  }	}	 |d
i |}
 |||       t        |
|      }| j                  d	i       j                  |i       } |||fi | h y )NrJ   c                 L    t        |       r|dk(  r| j                  d       y y y )NrM   Tr   )r   set_partial_fit_request)rJ   r   s     rH   r   z7test_non_consuming_estimator_works.<locals>.set_request5  s+    #}(D--d-; )E#rG   rN   rP   rQ   rR   Fr   rU   rF   )rq   r   rh   )rN   r   r   rP   rQ   r   r   rk   rJ   r   r   r   r   s                rH   "test_non_consuming_estimator_worksr   +  s    
 -' 	<
 
(CcAcA#$?@O& 	*1>%2
.AAA ==I{+;/)--mR@DD[RTUq!)()	*rG   c           	         d| vry| d   }| d   }|D ]  }t        | d      \  }\  }}\  }}\  }	}|r|j                  dd       |j                  d       |	r|	j                  dd	        |di |}
t	        |
|      }d
t
        i}d|vr|
j                  t        t                |t        t        fi | |sJ |D ]  }t        d|ddd|   y)ziTest that any requested metadata is correctly routed to the underlying
    scorers in CV estimators.
    r[   NrN   r\   Tr   r   rz   r   r{   rL   rY   )objr   r   rF   )
rq   set_fit_requestr   r   r   r{   rL   rP   rQ   r9   )rN   r   r   r   rk   rJ   r   rm   rg   rZ   r   r   r   _scorers                 rH   +test_metadata_is_routed_correctly_to_scorerr   K  s   
 M)

(C#$<=O& >K$?
;A 2GR %%D4%H  t 4  t <==;/(-8#LLAq!%}%x 	G# /  		#rG   c                 |   d| vry| d   }| d   }| d   }| d   }|D ]  }t        | d      \  }\  }}\  }	}\  }
}|r|j                  dd	       |	r|	j                  dd	       |
j                  dd
        |di |}t        t
        d
}t        ||      } |||fi | |sJ |D ]  }t        d|dd|   y)zkTest that any requested metadata is correctly routed to the underlying
    splitters in CV estimators.
    r^   NrN   rP   rQ   Tr   Fr   r   r   )r   r   rF   )rq   r   r   r   r   r   r   r9   )rN   r   r   X_y_r   rk   rJ   r   rm   rZ   rg   r   r   r   	_splitters                   rH   -test_metadata_is_routed_correctly_to_splitterr   q  s   
 =0

(C#$89O	s	B	s	B& T>K$?
;A^b( %%EE%J$$55$I
D48==#)x@;/r2''x! 	TI#S	'S]S	TTrG   )wr   r   numpynprs   sklearnr   sklearn.baser   sklearn.calibrationr   sklearn.composer   sklearn.covariancer   sklearn.ensembler	   r
   r   r   r   r   r   r   sklearn.exceptionsr   sklearn.experimentalr   r   sklearn.feature_selectionr   r   r   r   sklearn.imputer   sklearn.linear_modelr   r   r   r   r   r   r   r    r!   r"   r#   sklearn.model_selectionr$   r%   r&   r'   sklearn.multiclassr(   r)   r*   sklearn.multioutputr+   r,   r-   r.   sklearn.pipeliner/   sklearn.semi_supervisedr0   %sklearn.tests.metadata_routing_commonr1   r2   r3   r4   r5   r6   r7   r8   r9   sklearn.utils.metadata_routingr:   randomRandomStaterngNMrandrP   randintrQ   uniquerT   y_multirangeshapeclasses_multir   r{   arraylenr   fixturerI   re   list__annotations__strr   METAESTIMATOR_IDSUNSUPPORTED_ESTIMATORSrq   markparametrizerx   r}   r   r   r   r   r   r   r   )irows   00rH   <module>r      s    	   " & 6 6 /	 	 	 8  ,     
  * :
 
 
 :iiB1HHQNKK11K
"))A,
++a!Q+
(38q9I3JKa71a4=)K;;q"1;%	1a&CFaK(	)   .% &+]%; /%!&+]%;%	='AB 0%!&+W# )*!&+W (* &+W . #('"2$g &%!"WsCj$9:&+W& #('"2$g ,%!+gSz-BC&+W& #('"2$g -%!"WsCj$9:&+W& #('"2$g /%!+gSz-BC&+W& #('"2$g -%!&+]%;%	7';< ,%!&+]%;&%	7';<	 .%!$b)&+W )%!&+]%;%	7';< 5$g &$g !$g /$g *$g  $g %$gwB BF@ DRRCS_-667R  	

 I.01134*,-(*+ (*+&()' .@F &<=) >) &<=
& >
&! .>OPG QG .>OP. Q.B .>OP5 Q5p .>OP* Q*> .>OP" Q"J .>OPT QT{ L` Ss    S-S