
    -i                        S r SSKrSSKrSSKrSSKJr  SSKJrJ	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JrJrJrJrJrJrJrJr  SS	KJr  SS
KJ r J!r!J"r"J#r#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/J0r0  \Rb                  Re                  S5      r3Su  r4r5\3Rm                  \4\55      r7\3Rq                  SS\4S9r9\3Rq                  SS\4S9r:\3Rm                  \45      r;\3Rm                  \45      r< " S S\5      r=\" SS9S 5       r>\R~                  R                  S\" \" 5       S9\" \" 5       S9\" \" 5       S9\" \" 5       \" 5       S9\" \" 5       \" 5       S9/5      \" SS9S 5       5       rA\R~                  R                  S/ SQ5      \" SS9S 5       5       rB\R~                  R                  S/ SQ5      \" SS9S 5       5       rC\" SS9S  5       rD\" SS9S! 5       rE\" SS9S" 5       rF\" SS9S# 5       rG\R~                  R                  S$\!5      \R~                  R                  S%SS%/ /5      \" SS9S& 5       5       5       rH\" SS9S' 5       rI\" SS9S( 5       rJ\" SS9S) 5       rK\" SS9S* 5       rL\" SS9S+ 5       rM\" SS9S, 5       rN\" SS9S- 5       rO\" SS9S. 5       rP\" SS9S/ 5       rQ\" SS9S0 5       rR\" SS9S1 5       rS\" SS9S2 5       rT\" SS9S3 5       rU\" SS9\R~                  R                  S4\#" S5S6S79R                  S8S9S:9S;4\)" S5S<9S=4\*" S5S<9R                  \" 5       \+" 5       R                  S>S>S?9S@9SA4/5      \" SS9SB 5       5       5       rX\R~                  R                  SC\+" 5       SDS6SES?.\YSF4\+" 5       SDSES6S?.\YSG4\*" S5S<9SHSI\*" S5S<90\YSJ4\" 5       SKSES0\ZSL4/5      \" SS9SM 5       5       r[\" SS9SN 5       r\\" SS9SO 5       r]\" SS9SP 5       r^\" SS9SQ 5       r_\" SS9SR 5       r`\" SS9SS 5       ra\" SS9ST 5       rb\" SS9SU 5       rc\" SS9SV 5       rd\" SS9SW 5       re\" SS9SX 5       rf\" SS9SY 5       rgg)Zz 
Metadata Routing Utility Tests
    N)config_context)BaseEstimatorclone)UnsetMetadataPassedError)LinearRegression)Pipeline)ConsumingClassifierConsumingRegressorConsumingTransformerMetaRegressorMetaTransformerNonConsumingClassifierWeightedMetaClassifierWeightedMetaRegressor	_Registryassert_request_equalassert_request_is_emptycheck_recorded_metadata)metadata_routing)COMPOSITE_METHODSMETHODSSIMPLE_METHODSMethodMetadataRequest
MethodPair_MetadataRequesterrequest_is_aliasrequest_is_valid)MetadataRequestMetadataRouterMethodMapping_RoutingNotSupportedMixinget_routing_for_objectprocess_routing)check_is_fitted*   )d         )size
   c                   0    \ rS rSrSrS rS rS rS rSr	g)	SimplePipelineA   zA very simple pipeline, assuming the last step is always a predictor.

Parameters
----------
steps : iterable of objects
    An iterable of transformers with the last step being a predictor.
c                     Xl         g N)steps)selfr0   s     V/var/www/html/venv/lib/python3.13/site-packages/sklearn/tests/test_metadata_routing.py__init__SimplePipeline.__init__J   s    
    c           	      $   / U l         [        U S40 UD6nUn[        U R                  S S 5       H  u  pg[	        U5      R
                  " XR40 UR                  SU 35      R
                  D6nU R                   R                  U5        UR                  " U40 UR                  SU 35      R                  D6nM     U R                   R                  [	        U R                  S   5      R
                  " XR40 UR                  R
                  D65        U $ )Nfitstep_)
steps_r#   	enumerater0   r   r7   getappend	transform	predictor)	r1   Xy
fit_paramsparamsX_transformedisteptransformers	            r2   r7   SimplePipeline.fitM   s     u;
; CR1GA+//$*JJqc{$;$?$?K KK{+'11!'eA3K!8!B!BM 2 	$**R.!%%mO&:J:J:N:NO	
 r5   c           	      >   [        U 5        Un[        U S40 UD6n[        U R                  S S 5       H4  u  pVUR                  " U40 UR                  SU 35      R                  D6nM6     U R                  S   R                  " U40 UR                  R                  D6$ )Npredictr8   r9   )r$   r#   r;   r:   r>   r<   rJ   r?   )r1   r@   predict_paramsrD   rC   rE   rF   s          r2   rJ   SimplePipeline.predict_   s     yCNC Sb!12GA NN1R

U1#;0G0Q0QRM 3 {{2&&}Q8H8H8P8PQQr5   c                    [        U R                  R                  S9n[        U R                  S S 5       HR  u  p#UR
                  " S
0 SU 3U0DS[        5       R                  SSS9R                  SSS9R                  SSS90D6  MT     UR                  U R                  S   [        5       R                  SSS9R                  SSS9S	9  U$ )Nownerr8   r9   method_mappingr7   callercalleer>   rJ   )r?   rP    )r   	__class____name__r;   r0   addr    )r1   routerrE   rF   s       r2   get_metadata_routing#SimplePipeline.get_metadata_routingh   s    dnn&=&=> CR1GAJJ 1#;%,E%0E+6Ik: 2 	

jjn(?SeS,S	)S4	 	 	
 r5   )r0   r:   N)
rV   
__module____qualname____firstlineno____doc__r3   r7   rJ   rY   __static_attributes__rT   r5   r2   r,   r,   A   s    $Rr5   r,   Tenable_metadata_routingc            
         [        SS9n [        U 5        U R                  R                  SS S9  [        U 5        U R                  R                  SSS9  [        R
                  " [        5         [        U 5        S S S 5        [        U SS9  U R                  R                  S	S
S9  [        R
                  " [        5         [        U SS9  S S S 5        [        U SS/S9  [        [        SS9R                  [        S S95      R                  [        5       [        5       R                  SSS9S95        g ! , (       d  f       N= f! , (       d  f       N= f)NtestrN   fooparamaliasbarvaluer7   excludecarrotTscore	estimatorrQ   ro   rP   )r   r   r7   add_requestpytestraisesAssertionErrorrm   r   add_self_requestr   rW   r
   r    )requestss    r2   test_assert_request_is_emptyrw   {   s   V,HH%LL55H%LL58	~	&) 
'
 He4NNXT:	~	&%8 
'
 Hug.>? V$		/$?	@	(*(?..eE.J 
 

! 
'	& 
'	&s   .D4 E4
E
Ero   )registry)ro   rx   c                 Z    U R                  [        [        5        X R                  ;   d   eg)z=Check that an estimator puts itself in the registry upon fit.N)r7   r@   rA   rx   rn   s    r2   $test_estimator_puts_self_in_registryrz      s$     MM!Q*****r5   zval, res))FF)TF)NF)$UNUSED$F)$WARN$Fzinvalid-inputF)	valid_argTc                 &    [        U 5      U:X  d   eg r/   )r   valress     r2   test_request_type_is_aliasr           C C'''r5   ))FT)TT)NT)r{   T)r|   Tr}   )	alias_argFc                 &    [        U 5      U:X  d   eg r/   )r   r   s     r2   test_request_type_is_validr      r   r5   c                  `    " S S[         5      n [        U " 5       5      nUR                  R                  SS0:X  d   e[	        [        [        5       5      R                  R                  5      (       a   e[        [        5       R                  5       5        [        [        5       5      nUR                  R                  S S S.:X  d   eUR                  R                  S S S.:X  d   e[        U5        [        [        5       5      nUR                  R                  S S S.:X  d   e[        U5        g )Nc                       \ rS rSrSS0rSrg)+test_default_requests.<locals>.OddEstimator   sample_weightTrT   N)rV   r[   r\   r]   $_OddEstimator__metadata_request__fitr_   rT   r5   r2   OddEstimatorr      s     T#
r5   r   r   Tr   metadatar   r   )r   r"   r7   rv   lenr   r   rY   r   r>   r	   )r   odd_requesttrs_requestest_requests       r2   test_default_requestsr      s   
} 
 )8K??##'>>>> )*@*BCGGPPQQQQ24IIKL()=)?@K??##(      ))$QU-VVVVK(()<)>?K??##(    K(r5   c                       " S S[         5      n  " S SU 5      n " S SU 5      n[        U" 5       R                  5       SSS	005        [        U" 5       R                  5       SSS	005        g
)zTest that default requests are correctly overridden regardless of the ASCII order
of the class names, hence testing small and capital letter class name starts.
Non-regression test for https://github.com/scikit-learn/scikit-learn/issues/28430
c                       \ rS rSrSS0rSrg)+test_default_request_override.<locals>.Base   groupsTrT   N)rV   r[   r\   r]   _Base__metadata_request__splitr_   rT   r5   r2   Baser      s    %-t$4!r5   r   c                       \ rS rSrSS0rSrg).test_default_request_override.<locals>.class_1   r   sample_domainrT   N)rV   r[   r\   r]   !_class_1__metadata_request__splitr_   rT   r5   r2   class_1r          %-$?!r5   r   c                       \ rS rSrSS0rSrg).test_default_request_override.<locals>.Class_1   r   r   rT   N)rV   r[   r\   r]   !_Class_1__metadata_request__splitr_   rT   r5   r2   Class_1r      r   r5   r   splitr   r   N)r   r   _get_metadata_request)r   r   r   s      r2   test_default_request_overrider      sr    5} 5@$ @@$ @ 	'')Gh5P+Q 	'')Gh5P+Qr5   c                      [         R                  " [        SS9   [        [	        5       S[
        S9  S S S 5        g ! , (       d  f       g = f)Nz Can only route and process inputmatchinvalid_methodr   )rr   rs   	TypeErrorr#   r	   	my_groupsrT   r5   r2   #test_process_routing_invalid_methodr     s/    	y(J	K+-/?	R 
L	K	Ks	   ;
A	c                       " S S5      n [         R                  " [        SS9   [        U " 5       S[        S9  S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrSrg):test_process_routing_invalid_object.<locals>.InvalidObjecti  rT   N)rV   r[   r\   r]   r_   rT   r5   r2   InvalidObjectr     s    r5   r   z#either implement the routing methodr   r7   r   )rr   rs   AttributeErrorr#   r   )r   s    r2   #test_process_routing_invalid_objectr     s8      
~-R	SyA 
T	S	Ss   A
Amethoddefaultc                     0 n[        [        5       S40 UD6nX0   n[        U[        5      (       d   e[	        UR                  5       5      [	        [        5      :X  d   eUR                  XS9nXT:X  d   eg )Nr7   )r   )r#   r	   
isinstancedictsetkeysr   r<   )r   r   empty_paramsrouted_paramsparams_for_methoddefault_params_for_methods         r2   2test_process_routing_empty_params_get_with_defaultr     s     L#$7$95QLQM &-'.... %%'(CL888 !. 1 1& 1 J$999r5   c                     [        [        5       S9n U R                  [        [        5        [        [        5       S9n U R                  [        [        [
        S9  [        [        5       S9n Sn[        R                  " [        [        R                  " U5      S9   U R                  [        [        [
        S9  S S S 5        [        [        5       R                  SS9S9n U R                  [        [        [
        S9  [        U R                  SSS9  [        [        5       R                  SS9S9n U R                  [        [        [
        S9  [        U R                  SS[
        S	9  [        [        5       R                  S
S9S9n U R                  [        [        [
        S9  [        U R                  SS[
        S	9  g ! , (       d  f       GN
= f)Nrn   r   zo[sample_weight] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.fitr   Fr7   )r   parentTr   r   r   alternative_weight)r   )r   r   r7   r@   rA   
my_weightsr	   rr   rs   
ValueErrorreescapeset_fit_requestr   
estimator_)clferr_messages     r2   test_simple_metadata_routingr   +  sr   
 !+A+C
DCGGAqM !+A+C
DCGGAq
G+ !+>+@
AC	5  
z;)?	@1J/ 
A !%'77e7LC GGAq
G+CNN5G !%'77d7KC GGAq
G+uU*
 !%'77. 8 
C
 GGAqZG0uU*A 
A	@s   F;;
G
c            
         [        [        [        5       R                  SSS9R	                  SSS9S9[        [        5       R                  SSS9R                  SS9S9R                  S	S9/5      n S
/S/S/p2nU R                  [        [        [        XUS9  [        U R                  S   R                  SS[        S9  [        U R                  S   R                  SSUS9  [        U R                  S
   SSUS9  [        U R                  S
   R                  SSUS9  U R!                  [        US9  [        U R                  S   R                  SSUS9  g )NTFr   r   rG   inner_weightsr   rn   outer_weights   r(      )r   r   r   r   r   r7   )r   r   r   r>   r   )r,   r   r   r   set_transform_requestr   r
   set_predict_requestr7   r@   rA   r   r   r:   transformer_r   rJ   )pipelinew1w2w3s       r2   test_nested_routingr   d  sj    02 $eD&&TE&J
 ",. O$$5$9 oOo<	
H qcA3BBLL	1yTV   ''	 ''	 5b %%eEQS Qb)''	r5   c            	         [        [        [        5       R                  SSS9R	                  SS9S9[        [        5       R                  SS9S9R                  SS9/5      n S/S	/p![        R                  " [        [        R                  " S
5      S9   U R                  [        [        [        XS9  S S S 5        g ! , (       d  f       g = f)NTFr   r   r   rn   r   r   r(   zIn WeightedMetaRegressor, there is a conflict on sample_weight between what is requested for this estimator and what is requested by its children. You can resolve this conflict by using an alias for the child estimators' requested metadata.r   )r   r   r   )r,   r   r   r   r   r   r
   rr   rs   r   r   r   r7   r@   rA   r   )r   r   r   s      r2   test_nested_routing_conflictr     s     02 $eD&&T&:
 ",.>>T>RoOo<		
H S1#	II9

 	QIRR

 

 

s   B;;
C	c                  X   [        [        5       R                  SS9S9n [        R                  " [
        [        R                  " S5      S9   U R                  [        [        5      R                  [        [        S9  S S S 5        [        [        5       R                  SS9S9n [        R                  " [
        [        R                  " S5      S9   U R                  [        [        5      R                  [        [        S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	NTr   r   z4transform got unexpected argument(s) {'other_param'}r   other_paramFz6transform got unexpected argument(s) {'sample_weight'})r   r   r   rr   rs   r   r   r   r7   r@   rA   r>   r   )trss    r2   test_invalid_metadatar     s     (*@@t@TC 
yyOP
 	1z:	
 (*@@u@UC 
yyQR
 	1<	
 

 

 
s   1D
1D

D
D)c                       " S S[         5      n  " S S[         5      n[        R                  " [        SS9   U " 5       R	                  5         S S S 5        SS S S.S S S	.S
S0S.n[        U" 5       R	                  5       U5        U" 5       R                  SS9nSS S S.S S S	.S
S0S.n[        UR	                  5       U5        U" 5       R                  SS9nSS S S.S SS	.S
S0S.n[        UR	                  5       U5        g ! , (       d  f       N= f)Nc                   2    \ rS rSrSSS.rSSSS.rSS0rSrg)<test_get_metadata_routing.<locals>.TestDefaultsBadMethodNamei  N)r   my_paramTr   r   my_other_paramr   rT   )rV   r[   r\   r]   1_TestDefaultsBadMethodName__metadata_request__fit3_TestDefaultsBadMethodName__metadata_request__score:_TestDefaultsBadMethodName__metadata_request__other_methodr_   rT   r5   r2   TestDefaultsBadMethodNamer     s0    !#

 ""%
! -7+=(r5   r   c                   2    \ rS rSrSSS.rSSSS.rSS0rSrg)/test_get_metadata_routing.<locals>.TestDefaultsi  N)r   r   Tr   r   rT   )rV   r[   r\   r]   $_TestDefaults__metadata_request__fit&_TestDefaults__metadata_request__score(_TestDefaults__metadata_request__predictr_   rT   r5   r2   TestDefaultsr     s0    !"#

 ""%
!
 (24&8#r5   r   z8'MetadataRequest' object has no attribute 'other_method'r   T)r   r   r   )r   r   r   )rm   r7   rJ   r   )r   r   )r   rr   rs   r   rY   r   set_score_requestr   )r   r   expectedests       r2   test_get_metadata_routingr     sG   >$6 >
9) 
9 
X
 	"#88:
 "!
 #!
 %H <<>I
.
*
*M
*
BC &"!
 #!
 %H 113X>
.
(
(t
(
<C "!
 #!
 %H 113X>_
 
s   C??
Dc                     [        5       n  " S S[        5      nSS 0X'    " S S[        5      nSS0X'    " S S[        5      nSS 0X'    " S	 S
[        5      n0 X'   U R                  5        Hc  u  pV[        U" 5       5      R                  R
                  U:X  d   e[        U" 5       R                  5       SS9  U" 5       R	                  S S 5        Me     g )Nc                   "    \ rS rSrSS0rS rSrg)6test_setting_default_requests.<locals>.ExplicitRequesti  propNc                     U $ r/   rT   r1   r@   rA   kwargss       r2   r7   :test_setting_default_requests.<locals>.ExplicitRequest.fit       Kr5   rT   )rV   r[   r\   r]   '_ExplicitRequest__metadata_request__fitr7   r_   rT   r5   r2   ExplicitRequestr     s    #)4.	r5   r  r  c                   &    \ rS rSrSS0rSS jrSrg)?test_setting_default_requests.<locals>.ExplicitRequestOverwritei%  r  TNc                     U $ r/   rT   r1   r@   rA   r  r  s        r2   r7   Ctest_setting_default_requests.<locals>.ExplicitRequestOverwrite.fit*  r  r5   rT   r/   )rV   r[   r\   r]   0_ExplicitRequestOverwrite__metadata_request__fitr7   r_   rT   r5   r2   ExplicitRequestOverwriter
  %  s     $*4.	r5   r  Tc                       \ rS rSrSS jrSrg)6test_setting_default_requests.<locals>.ImplicitRequesti/  Nc                     U $ r/   rT   r  s        r2   r7   :test_setting_default_requests.<locals>.ImplicitRequest.fit1  r  r5   rT   r/   rV   r[   r\   r]   r7   r_   rT   r5   r2   ImplicitRequestr  /  s    	r5   r  c                   :    \ rS rSrS\R
                  0rSS jrSrg)=test_setting_default_requests.<locals>.ImplicitRequestRemovali6  r  Nc                     U $ r/   rT   r  s        r2   r7   Atest_setting_default_requests.<locals>.ImplicitRequestRemoval.fit;  r  r5   rT   r/   )	rV   r[   r\   r]   r   UNUSED._ImplicitRequestRemoval__metadata_request__fitr7   r_   rT   r5   r2   ImplicitRequestRemovalr  6  s     $*+;+B+B"C	r5   r  r7   rj   )r   r   itemsr"   r7   rv   r   rY   )
test_casesr  r  r  r  Klassrv   s          r2   test_setting_default_requestsr     s     J-  $*4.J=  -3D>J(- 
 $*4.J  *,J&%++-%eg.22;;xGGG < < >ND$ .r5   c                       " S S[         5      n [        R                  " [        SS9   U " 5       R	                  5         SSS5        g! , (       d  f       g= f)zFTest that removing a metadata using UNUSED which doesn't exist raises.c                   6    \ rS rSrS\R
                  0rS rSrg)Ftest_removing_non_existing_param_raises.<locals>.InvalidRequestRemovaliJ  r  c                     U $ r/   rT   r  s       r2   r7   Jtest_removing_non_existing_param_raises.<locals>.InvalidRequestRemoval.fitO  r  r5   rT   N)	rV   r[   r\   r]   r   r  -_InvalidRequestRemoval__metadata_request__fitr7   r_   rT   r5   r2   InvalidRequestRemovalr#  J  s     $*+;+B+B"C	r5   r'  zTrying to remove parameterr   N)r   rr   rs   r   rY   )r'  s    r2   'test_removing_non_existing_param_raisesr(  F  s;      
z)E	F446 
G	F	Fs   A
Ac                  ^   [        SSS9n [        R                  " [        SS9   U R	                  SSS9  S S S 5        U R	                  SS S9  U R
                  SS 0:X  d   eU R	                  SS	S9  U R
                  SS	0:X  d   eU R	                  SS
S9  U R
                  SS
0:X  d   eU R	                  SSS9  U R
                  SS
0:X  d   eU R	                  SSS9  U R
                  SS0:X  d   eU R                  S	S9S1:X  d   eU R                  S
S9S1:X  d   eg ! , (       d  f       N= f)Nrc   r7   rO   r   zThe alias you're setting forr   rd   gffffff?re   FTrh   )return_alias)r   rr   rs   r   rq   rv   _get_param_names)mmrs    r2   test_method_metadata_requestr.  V  s9   
fU
;C	z)G	He3/ 
I OO%tO,<<E4=(((OO%uO-<<E5>)))OO%tO,<<E4=(((OO%uO-<<E4=(((OO%uO-<<E5>)))U3w>>>T2ug=== 
I	Hs   D
D,c                      " S S[         5      n [        [        S 5      5        [        [        [        5       5      5        [	        SS9nUR
                  R                  SSS9  [        U5      n[        USS	9  UR
                  R                  SS0:X  d   e[        U " 5       5      n[        USS	9  UR
                  R                  S
S 0:X  d   eg )Nc                       \ rS rSrSS0rSrg)-test_get_routing_for_object.<locals>.Consumerim  r  NrT   )rV   r[   r\   r]    _Consumer__metadata_request__fitr_   rT   r5   r2   Consumerr1  m  s    #)4.r5   r3  rc   rN   rd   rh   re   r7   rj   r  )r   r   r"   objectr   r7   rq   rv   )r3  mr
mr_factorys      r2   test_get_routing_for_objectr7  k  s    1= 1 2489268<=	v	&BFFU%0'+JJ6>>""uen444	
	+BB.66??vtn,,,r5   c                  B   [        SS9n U R                  SS1S9[        5       :X  d   e[        SS9n U R                  R                  SSS9  U R                  SS1S9S1:X  d   e[        SS9n U R                  R                  SSS9  U R                  SSS1S9S1:X  d   eg	)
z@Test that MetadataRequest().consumes() method works as expected.rc   rN   r7   rd   r   rC   Tre   rh   N)r   consumesr   r   r7   rq   )requests    r2   %test_metadata_request_consumes_methodr<  ~  s     6*G5%9SUBBBF+GKK%t45%9eWDDDF+GKK%u55%@UGKKKr5   c                      [        [        5       R                  SS9S9S1S14[        [        5       R                  SS9S9SS1S14/n U  H*  u  pnUR                  5       R	                  SUS9U:X  a  M*   e   g)	z=Test that MetadataRouter().consumes method works as expected.Tr   rn   r   r   r7   r9  N)r   r
   r   rY   r:  )casesobjinputoutputs       r2   $test_metadata_router_consumes_methodrB    s     ",.>>T>R 	
 ",.>>". ? 
 ?+N	
E& $F'')22%2NRXXXX $r5   c                       " S S[         5      n [        R                  " [        SS9   U " [	        5       R                  SS9S9R                  [        [        [        S9  S S S 5        g ! , (       d  f       g = f)Nc                   0    \ rS rSrS\R
                  0rSrg)>test_metaestimator_warnings.<locals>.WeightedMetaRegressorWarni  r   rT   N)rV   r[   r\   r]   r   WARN1_WeightedMetaRegressorWarn__metadata_request__fitr_   rT   r5   r2   WeightedMetaRegressorWarnrE        #24D4I4I"Jr5   rH  4Support for .* has recently been added to this classr   Fr   rn   )
r   rr   warnsUserWarningr   r   r7   r@   rA   r   )rH  s    r2   test_metaestimator_warningsrM    sc    K$9 K 
Q
 	"&(88u8M	

#a*#
-
 
 
s   7A))
A7c                       " S S[         5      n [        R                  " [        SS9   [	        U " 5       S9R                  [        [        [        S9  S S S 5        g ! , (       d  f       g = f)Nc                   0    \ rS rSrS\R
                  0rSrg)7test_estimator_warnings.<locals>.ConsumingRegressorWarni  r   rT   N)rV   r[   r\   r]   r   rF  ._ConsumingRegressorWarn__metadata_request__fitr_   rT   r5   r2   ConsumingRegressorWarnrP    rI  r5   rR  rJ  r   rn   r   )	r
   rr   rK  rL  r   r7   r@   rA   r   )rR  s    r2   test_estimator_warningsrS    sZ    K!3 K 
Q
 	 6 89==q
 	> 	

 
 
s   *A
A*zobj, stringrc   r7   r*  rd   rh   re   z{'foo': 'bar'}rN   z{}rJ   rQ   rp   a*  {'estimator': {'mapping': [{'caller': 'predict', 'callee': 'predict'}], 'router': {'fit': {'sample_weight': None, 'metadata': None}, 'partial_fit': {'sample_weight': None, 'metadata': None}, 'predict': {'sample_weight': None, 'metadata': None}, 'score': {'sample_weight': None, 'metadata': None}}}}c                 &    [        U 5      U:X  d   eg r/   )str)r?  strings     r2   test_string_representationsrW    s    > s8vr5   z%obj, method, inputs, err_cls, err_msgrW   invalidzGiven calleezGiven callerru   r?  z@Given `obj` is neither a `MetadataRequest` nor does it implementr   zUnexpected argsc                     [         R                  " X4S9   [        X5      " S0 UD6  S S S 5        g ! , (       d  f       g = f)Nr   rT   )rr   rs   getattr)r?  r   inputserr_clserr_msgs        r2   test_validationsr^    s-    F 
w	.&v& 
/	.	.s   0
>c                     [        5       R                  SSS9R                  SSS9n [        U 5      nUS   S:X  d   eUS   S:X  d   e[        5       n [         H-  nU R                  X"S9  [	        X"5      U R
                  ;   a  M-   e   [        U R
                  5      [        [        5      :X  d   e[        5       R                  SSS9n [        U 5      S	:X  d   eg )
Nr7   r>   rQ   r   )r7   r>   r   )r7   r7   rm   z([{'caller': 'score', 'callee': 'score'}])r    rW   listr   r   _routesr   repr)mmmm_listr   s      r2   test_methodmappingre    s     		E+	.	E%	(  2hG1:----1:'''	B
f,&)RZZ777  rzz?c'l***			GG		<B8AAAAr5   c                  N   [        SS9n U R                  R                  SSS9  [        SS9R	                  U 5      n[        UR                  5      [        U 5      :X  d   eUR                  U Ld   e[        5       R                  SS9n[        SS9R	                  US	9n[        UR                  5      [        UR                  5       5      :X  d   eUR                  UR                  5       Ld   e[        [        5       R                  S
S9S9n[        SS9R	                  US	9n[        UR                  5      [        UR                  5       5      :X  d   e[        UR                  5      [        UR                  5       5      :w  d   eUR                  UR                  5       Ld   eg )NnestedrN   rf   Tre   rc   r   r   )r?  nested_weightsrn   )r   r7   rq   r   ru   rU  _self_requestr
   r   rY   r   r   )r;  rX   r   s      r2   $test_metadatarouter_add_self_requestrj  "  s    H-GKK'6&)::7CFv##$G444w... 

.
.\
.
JC&)::s:CFv##$C,D,D,F(GGGGs'?'?'AAAA  $&66EU6VC &)::s:CFv##$C,E,E,G(HHHH v##$C,D,D,F(GGGGs'@'@'BBBBr5   c                  P   [        SS9R                  [        5       R                  SS9[	        5       R                  SSS9S9n [        U 5      S:X  d   e[        SS9R                  [	        5       R                  SS	S9[        5       R                  S
S9S9n [        U 5      S:X  d   eg )Nrc   rN   weightsr   r7   rQ   )r   rP   a!  {'est': {'mapping': [{'caller': 'fit', 'callee': 'fit'}], 'router': {'fit': {'sample_weight': 'weights', 'metadata': None}, 'partial_fit': {'sample_weight': None, 'metadata': None}, 'predict': {'sample_weight': None, 'metadata': None}, 'score': {'sample_weight': None, 'metadata': None}}}}rm   T)rP   r   a  {'est': {'mapping': [{'caller': 'fit', 'callee': 'score'}], 'router': {'fit': {'sample_weight': None, 'metadata': None}, 'partial_fit': {'sample_weight': None, 'metadata': None}, 'predict': {'sample_weight': None, 'metadata': None}, 'score': {'sample_weight': True, 'metadata': None}}}})r   rW   r
   r   r    rU  r   rX   s    r2   test_metadata_routing_addrn  @  s     &)-- 00y0I$**%*F . F
 	F		 &)--$**%*H 222F . F
 	F		r5   c                     [        SS9R                  [        [        5       S9R	                  SS95      R                  [        5       R	                  SS9[        5       R                  SSS9S	9n [        U 5      S
:X  d   eU R                  SSSS91 Sk:X  d   eU R                  SSSS91 Sk:X  d   eU R                  SSSS9SS1:X  d   eU R                  SSSS9U R                  SSSS9:X  d   eg )Nrc   rN   rn   self_weightsr   transform_weightsr7   rQ   )r   rP   a^  {'$self_request': {'fit': {'sample_weight': 'self_weights'}, 'score': {'sample_weight': None}}, 'trs': {'mapping': [{'caller': 'fit', 'callee': 'fit'}], 'router': {'fit': {'sample_weight': 'transform_weights', 'metadata': None}, 'transform': {'sample_weight': None, 'metadata': None}, 'inverse_transform': {'sample_weight': None, 'metadata': None}}}}TF)r   r+  ignore_self_request>   r   rp  rq  >   r   r   rq  r   )
r   ru   r   r
   r   rW   r   r    rU  r,  rm  s    r2   %test_metadata_routing_get_param_namesrs  _  sr    	V$		!,>,@AQQ, R 


 
$&661 7  )?..eE.J	 
 

   	FM	M	M ""4U # 	:; ; ; ""5e # 	;< < < ""5d # 
)	*+ + + ""4T # 		 	 5d 
! 
  r5   c                  6    " S S[         5      n [         H  n[        U " 5       SU S35      (       d  M   e    " S S[         5      n [         H  n[        U " 5       SU S35      (       d  M   e   [         H  n[        U " 5       SU S35      (       a  M   e   g )Nc                   `    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSS jrS rS rSrg)/test_method_generation.<locals>.SimpleEstimatori  c                     g r/   rT   r1   r@   rA   s      r2   r7   3test_method_generation.<locals>.SimpleEstimator.fit      r5   c                     g r/   rT   rx  s      r2   fit_transform=test_method_generation.<locals>.SimpleEstimator.fit_transform  rz  r5   c                     g r/   rT   rx  s      r2   fit_predict;test_method_generation.<locals>.SimpleEstimator.fit_predict  rz  r5   c                     g r/   rT   rx  s      r2   partial_fit;test_method_generation.<locals>.SimpleEstimator.partial_fit  rz  r5   c                     g r/   rT   r1   r@   s     r2   rJ   7test_method_generation.<locals>.SimpleEstimator.predict  rz  r5   c                     g r/   rT   r  s     r2   predict_proba=test_method_generation.<locals>.SimpleEstimator.predict_proba  rz  r5   c                     g r/   rT   r  s     r2   predict_log_probaAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba  rz  r5   c                     g r/   rT   r  s     r2   decision_functionAtest_method_generation.<locals>.SimpleEstimator.decision_function  rz  r5   c                     g r/   rT   rx  s      r2   rm   5test_method_generation.<locals>.SimpleEstimator.score  rz  r5   Nc                     g r/   rT   rx  s      r2   r   5test_method_generation.<locals>.SimpleEstimator.split  rz  r5   c                     g r/   rT   r  s     r2   r>   9test_method_generation.<locals>.SimpleEstimator.transform  rz  r5   c                     g r/   rT   r  s     r2   inverse_transformAtest_method_generation.<locals>.SimpleEstimator.inverse_transform  rz  r5   rT   r/   rV   r[   r\   r]   r7   r|  r  r  rJ   r  r  r  rm   r   r>   r  r_   rT   r5   r2   SimpleEstimatorrv    s>    												r5   r  set__requestc                       \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS	 jr
SS
 jrSS jrSS jrSS jrSS jrSrg)rv  i  Nc                     g r/   rT   r1   r@   rA   r   s       r2   r7   ry    rz  r5   c                     g r/   rT   r  s       r2   r|  r}    rz  r5   c                     g r/   rT   r  s       r2   r  r    rz  r5   c                     g r/   rT   r  s       r2   r  r    rz  r5   c                     g r/   rT   r1   r@   r   s      r2   rJ   r    rz  r5   c                     g r/   rT   r  s      r2   r  r    rz  r5   c                     g r/   rT   r  s      r2   r  r    rz  r5   c                     g r/   rT   r  s      r2   r  r    rz  r5   c                     g r/   rT   r  s       r2   rm   r    rz  r5   c                     g r/   rT   r  s       r2   r   r    rz  r5   c                     g r/   rT   r  s      r2   r>   r    rz  r5   c                     g r/   rT   r  s      r2   r  r    rz  r5   rT   r/   NNr  rT   r5   r2   r  rv    s>    												r5   )r   r   hasattrr   r   )r  r   s     r2   test_method_generationr    s    $- $L ?,VHH.EFFFF $- $N $?,VHH.EFFFF $ !(D*ABBBB !r5   c                  &    " S S[         5      n U " 5       nUR                  5       R                  R                  S S S S.:X  d   eUR                  5       R                  R                  S S S.:X  d   eUR                  SSS9  [        R                  " [        SS	9   UR                  5       R                    S S S 5        UR                  SS
9  [        R                  " [        SS	9   UR                  5       R                    S S S 5        UR                  SSS9  UR                  5       R                    UR                  SS9  UR                  5       R                  R                  SSSS.:X  d   eg ! , (       d  f       N= f! , (       d  f       N= f)Nc                   2    \ rS rSrSS jrSS jrSS jrSrg)	/test_composite_methods.<locals>.SimpleEstimatori  Nc                     g r/   rT   )r1   r@   rA   rd   rh   s        r2   r7   3test_composite_methods.<locals>.SimpleEstimator.fit  rz  r5   c                     g r/   rT   )r1   r@   rd   rh   s       r2   rJ   7test_composite_methods.<locals>.SimpleEstimator.predict  rz  r5   c                     g r/   rT   )r1   r@   r   s      r2   r>   9test_composite_methods.<locals>.SimpleEstimator.transform  rz  r5   rT   r  r/   )rV   r[   r\   r]   r7   rJ   r>   r_   rT   r5   r2   r  r    s    			r5   r  )rh   rd   r   )rh   rd   Trc   )rd   rh   z!Conflicting metadata requests forr   )rh   r   )r   rY   r|  rv   r  r   rr   rs   r   r   r   )r  r   s     r2   test_composite_methodsr    su   	- 	 
C ##%33<<A   
 ##%11::dSW>XXXX Df-	z)L	M  ".. 
N
 %	z)L	M  ".. 
N
 &1** $/##%33<<A   # 
N	M 
N	Ms   E1&F1
E?
Fc                      [        SS9   [        R                  " [        SS9   [	        5       R                  SS9  SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)zCTest that when feature flag disabled, set_{method}_requests raises.Fr`   zThis method is only availabler   Tr   N)r   rr   rs   RuntimeErrorr	   r   rT   r5   r2   !test_no_feature_flag_raises_errorr    sM     
	6]]</NO!111E P 
7	6OO 
7	6s!   AAA
A	A
A,c                  T    [        [        5       S9R                  [        [        SS9  g)zCTest that passing None as metadata when not requested doesn't raisern   Nr   )r   r
   r7   r@   rA   rT   r5   r2   test_none_metadata_passedr  '  s"     .0155a$5Or5   c                  0    " S S[         [        5      n [        U " 5       S9R                  [        [
        5        [        R                  " [        SS9   [        U " 5       S9R                  [        [
        [        S9  SSS5        g! , (       d  f       g= f)zTest that when no metadata is passed, having a meta-estimator which does
not yet support metadata routing works.

Non-regression test for https://github.com/scikit-learn/scikit-learn/issues/28246
c                       \ rS rSrSS jrSrg)0test_no_metadata_always_works.<locals>.Estimatori5  Nc                     U $ r/   rT   )r1   r@   rA   r   s       r2   r7   4test_no_metadata_always_works.<locals>.Estimator.fit6  r  r5   rT   r/   r  rT   r5   r2   	Estimatorr  5      	r5   r  rn   z3Estimator has not implemented metadata routing yet.r   r   N)
r!   r   r   r7   r@   rA   rr   rs   NotImplementedErrorr   )r  s    r2   test_no_metadata_always_worksr  -  sj    -} 
 IK(,,Q2	#X
 		,00A	0J
 
 
s   *B
Bc                     [        [        5       S9n [        U /5      n[        R                  " S5      n[
        R                  " [        US9   UR                  [        [        SS9  SSS5        g! , (       d  f       g= f)zyTest that UnsetMetadataPassedError raises the correct error message when
set_{method}_request is not set in nested cases.rn   a  [metadata] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.fit, which is used within WeightedMetaClassifier.fit. Call `ConsumingClassifier.set_fit_request({metadata}=True/False)` for each metadata you want to request/ignore.r   blahr  N)r   r	   r,   r   r   rr   rs   r   r7   r@   rA   )weighted_metapipemsgs      r2   %test_unsetmetadatapassederror_correctr  B  s`     +5H5JKM=/*D
))	0C 
/s	;A' 
<	;	;s   A00
A>c                      [        5       n [        SU 4/5      n[        R                  " S5      n[        R
                  " [        US9   UR                  [        [        SS9  SSS5        g! , (       d  f       g= f)zTest that UnsetMetadataPassedError raises the correct error message when
composite metadata request methods are not set in nested cases.consuming_transformeraA  [metadata] are passed but are not explicitly set as requested or not requested for ConsumingTransformer.fit_transform, which is used within Pipeline.fit_transform. Call `ConsumingTransformer.set_fit_request({metadata}=True/False).set_transform_request({metadata}=True/False)` for each metadata you want to request/ignore.r   r  r  N)
r   r   r   r   rr   rs   r   r|  r@   rA   )r  r  r  s      r2   ;test_unsetmetadatapassederror_correct_for_composite_methodsr  S  sf     12-/DEFGD
))	9C 
/s	;1a&1 
<	;	;s   A++
A9c                      " S S[         5      n [        R                  " S5      n[        R                  " [
        US9   U " 5       R                  S5        SSS5        U R                  U l        U " 5       R                  SS9  [        R                  " [
        US9   U " 5       R                  S5        SSS5        g! , (       d  f       Nl= f! , (       d  f       g= f)a  Tests that if the set_{method}_request is unbound, it still works.

Also test that passing positional arguments to the set_{method}_request fails
with the right TypeError message.

Non-regression test for https://github.com/scikit-learn/scikit-learn/issues/28632
c                       \ rS rSrSS jrSrg)(test_unbound_set_methods_work.<locals>.Aip  Nc                     U $ r/   rT   r  s       r2   r7   ,test_unbound_set_methods_work.<locals>.A.fitq  r  r5   rT   r/   r  rT   r5   r2   Ar  p  r  r5   r  z>set_fit_request() takes 0 positional argument but 1 were givenr   TNr   )r   r   r   rr   rs   r   r   )r  error_messages     r2   test_unbound_set_methods_workr  f  s    M  IIHM
 
y	6	D! 
7 ))A Cd+ 
y	6	D! 
7	6 
7	6 
7	6s   B<C<
C

C)hr^   r   numpynprr   sklearnr   sklearn.baser   r   sklearn.exceptionsr   sklearn.linear_modelr   sklearn.pipeliner   %sklearn.tests.metadata_routing_commonr	   r
   r   r   r   r   r   r   r   r   r   r   sklearn.utilsr    sklearn.utils._metadata_requestsr   r   r   r   r   r   r   r   sklearn.utils.metadata_routingr   r   r    r!   r"   r#   sklearn.utils.validationr$   randomRandomStaterngNMrandr@   randintrA   r   r   my_other_weightsr,   rw   markparametrizerz   r   r   r   r   r   r   r   r   r   r   r   r   r   r(  r.  r7  r<  rB  rM  rS  rq   rW   rW  r   r   r^  re  rj  rn  rs  r  r  r  r  r  r  r  r  rT   r5   r2   <module>r     s   
   " 8 1 %    +	 	 	  5iiB1HHQNKK11KKK2AK&	XXa[
88A; 7] 7t -  . F Y[1IK0ik2)<)>U(:(<y{S	 -+ .	+  -( .(
  -( .(
 -) .)< - .. -S .S
 -B .B 7+T9b$9:-: . ; ,: -5 .5p -- .-` -S .S: -= .=, -I? .I?X -+  .+ \ -7 .7 -> .>( -- .-$ -L .L -Y .Y6 -	. .	. -	
 .	
 - "u=II5 J  		
 &)	

 (,,,.,22)I2V - 
@	
8 - .9 .< + O	2	
 O E2	
 (N01N	
  !	
- B -' .C D'
 -B .B* -C .C: - .< -) .)X -ZC .ZCz -1 .1h -F .F -P .P
 -K .K( -( .(  -2 .2$ -" ."r5   