
    h$,fƇ                     z   d Z ddlZddlZddlZddlmZ ddl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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%m&Z&m'Z'm(Z(m)Z)m*Z* dd
l+m,Z, ejZ                  j]                  d      Z/d\  Z0Z1e/je                  e0e1      Z3e/ji                  dde0      Z5e/ji                  dde0      Z6e/je                  e0      Z7e/je                  e0      Z8 ejr                  d      d        Z: G d de      Z;d Z<ejz                  j}                  d e e              e e              e e              e e        e              e e        e             g      d        Z?ejz                  j}                  dg d      d        Z@ejz                  j}                  dg d      d        ZAd ZBd  ZCd! ZDejz                  j}                  d"e      ejz                  j}                  d#dd#g g      d$               ZEd% ZFd& ZGd' ZHd( ZId) ZJd* ZKd+ ZLd, ZMd- ZNd. ZOd/ ZPd0 ZQd1 ZRejz                  j}                  d2 ed3d45      j                  d6d78      d9f e%d3:      d;f e'j                  d<      d=f e&d3:      j                  d> e       ?      d@fg      dA        ZVejz                  j}                  dB e'       dCdDd4dEeWdFf e'       dCd4dDdEeWdGfe'dHdIdDieWdJf e&d3:      dKdL e&d3:      ieWdMf e       dNdDdieXdOfg      dP        ZYdQ ZZdR Z[dS Z\dT Z]dU Z^dV Z_dW Z`dX ZadY Zby)Zz 
Metadata Routing Utility Tests
    Nconfig_context)BaseEstimatorclone)LinearRegression)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
   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        Clib/python3.12/site-packages/sklearn/tests/test_metadata_routing.pyenable_slep006r1   ?   s'      
	5   s   )	)&)c                   (    e Zd ZdZd Zd Zd Zd Zy)SimplePipelinezEA very simple pipeline, assuming the last step is always a predictor.c                     || _         y N)steps)selfr6   s     r0   __init__zSimplePipeline.__init__I   s	    
r/   c           	      &   g | _         t        | dfi |}|}t        | j                  d d       D ]  \  }} t	        |      j
                  ||fi |j                  d|       j
                  }| j                   j                  |        |j                  |fi |j                  d|       j                  } | j                   j                   t	        | j                  d         j
                  ||fi |j                  j
                         | S )Nfitstep_)
steps_r"   	enumerater6   r   r:   getappend	transform	predictor)	r7   Xy
fit_paramsparamsX_transformedisteptransformers	            r0   r:   zSimplePipeline.fitL   s    u;
; CR1 	GAt)%+//q$*JJqc{$;$?$?K KK{+1K11!'eA3K!8!B!BM	 	%E$**R.!%%mQO&:J:J:N:NO	
 r/   c           	      <   t        |        |}t        | dfi |}t        | j                  d d       D ]4  \  }} |j                  |fi |j                  d|       j                  }6  | j                  d   j                  |fi |j                  j                  S )Npredictr;   r<   )r#   r"   r>   r=   rA   r?   rL   rB   )r7   rC   predict_paramsrG   rF   rH   rI   s          r0   rL   zSimplePipeline.predict^   s     yCNC Sb!12 	SGAt*DNN1R

U1#;0G0Q0QRM	S 't{{2&&}Q8H8H8P8PQQr/   c           
      r   t        | j                  j                        }t        | j                  d d       D ][  \  }} |j
                  di d| |idt               j                  dd      j                  dd      j                  dd      i ] |j                  | j                  d   d	
       |S )Nownerr;   r<   method_mappingr:   calleecallerrA   rL   
one-to-one)rB   rQ   r.   )r   	__class____name__r>   r6   addr   )r7   routerrH   rI   s       r0   get_metadata_routingz#SimplePipeline.get_metadata_routingg   s    dnn&=&=> CR1 	GAtFJJ 1#;%,E%0K6K	:	 	

TZZ^L
Ir/   N)rW   
__module____qualname____doc__r8   r:   rL   rZ   r.   r/   r0   r3   r3   F   s    O$Rr/   r3   c                     t        d      } t        |        | j                  j                  dd        t        |        | j                  j                  dd       t	        j
                  t              5  t        |        d d d        t        | d       | j                  j                  d	d
       t	        j
                  t              5  t        | d       d d d        t        | ddg       t        t        d      j                  t        d             j                  dt                            y # 1 sw Y   xY w# 1 sw Y   lxY w)NtestrO   fooparamaliasbarvaluer:   excludecarrotTscore	estimatorrQ   rk   )r   r   r:   add_requestpytestraisesAssertionErrorri   r   add_self_requestr   rX   r	   )requestss    r0   test_assert_request_is_emptyrs   u   s   V,HH%LL55H%LL58	~	& *)*
 He4NNXT:	~	& 9%89
 Hug.>? V$		/$?	@	E-?-A	B!* *9 9s   6D:E:EErk   )registry)rk   rt   c                 X    | j                  t        t               | | j                  v sJ y)z=Check that an estimator puts itself in the registry upon fit.N)r:   rC   rD   rt   rj   s    r0   $test_estimator_puts_self_in_registryrv      s&     MM!Q	*****r/   zval, res))FF)TF)NF)$UNUSED$F)$WARN$Fzinvalid-inputF)	valid_argTc                 $    t        |       |k(  sJ y r5   )r   valress     r0   test_request_type_is_aliasr           C C'''r/   ))FT)TT)NT)rw   T)rx   Try   )	alias_argFc                 $    t        |       |k(  sJ y r5   )r   r|   s     r0   test_request_type_is_validr      r   r/   c                  N    G d dt               } t         |              }|j                  j                  ddik(  sJ t	        t        t                     j                  j                        rJ t        t               j                                t        t                     }|j                  j                  d d dk(  sJ |j                  j                  d d dk(  sJ t        |       t        t                     }|j                  j                  d d dk(  sJ t        |       y )Nc                       e Zd ZddiZy)+test_default_requests.<locals>.OddEstimatorsample_weightTN)rW   r[   r\   $_OddEstimator__metadata_request__fitr.   r/   r0   OddEstimatorr      s     T#
r/   r   r   Tr   metadatar   r   )r   r!   r:   rr   lenr   r   rZ   r
   rA   r   )r   odd_requesttrs_requestest_requests       r0   test_default_requestsr      s   
} 
 )8K??##'>>>> )*@*BCGGPPQQQ24IIKL()=)?@K??##(      ))$QU-VVVVK(()<)>?K??##(    K(r/   c                      t        j                  t        d      5  t        t	               dt
               d d d        y # 1 sw Y   y xY w)Nz Can only route and process inputmatchinvalid_methodgroups)rn   ro   	TypeErrorr"   r   	my_groupsr.   r/   r0   #test_process_routing_invalid_methodr      s;    	y(J	K S+-/?	RS S Ss   A  A	c                       G d d      } t        j                  t        d      5  t         |        dt               d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy):test_process_routing_invalid_object.<locals>.InvalidObjectN)rW   r[   r\   r.   r/   r0   InvalidObjectr      s    r/   r   z#either implement the routing methodr   r:   r   )rn   ro   AttributeErrorr"   r   )r   s    r0   #test_process_routing_invalid_objectr      sD      
~-R	S ByAB B Bs   AAmethoddefaultc                     i }t        t               dfi |}||    }t        |t              sJ t	        |j                               t	        t              k(  sJ |j                  | |      }||k(  sJ y )Nr:   )r   )r"   r   
isinstancedictsetkeysr   r?   )r   r   empty_paramsrouted_paramsparams_for_methoddefault_params_for_methods         r0   2test_process_routing_empty_params_get_with_defaultr      s     L#$7$95QLQM &f-'... %%'(CL888 !. 1 1&' 1 J$(9999r/   c                     t        t                     } | j                  t        t               t        t                     } | j                  t        t        t
               t        t                     } d}t        j                  t        t        j                  |            5  | j                  t        t        t
               d d d        t        t               j                  d            } | j                  t        t        t
               t        | j                  d       t        t               j                  d            } | j                  t        t        t
               t        | j                  dt
               t        t               j                  d            } | j                  t        t        t
        	       t        | j                  dt
               y # 1 sw Y   %xY w)
Nrj   r   ze[sample_weight] are passed but are not explicitly set as requested or not for ConsumingClassifier.fitr   Fr:   Talternative_weight)r   )r   r   r:   rC   rD   
my_weightsr   rn   ro   
ValueErrorreescapeset_fit_requestr   
estimator_)clferr_messages     r0   test_simple_metadata_routingr     sj    !+A+C
DCGGAqM !+A+C
DCGGAq
G+ !+>+@
AC	+  
z;)?	@ 01J/0 !%'77e7LC GGAq
G+CNNE2 !%'77d7KC GGAq
G+CNNEL !%'77. 8 
C
 GGAqZG0CNNEL=0 0s   '!G++G5c            	         t        t        t               j                  dd      j	                  dd            t        t               j                  dd      j                  d            j                  d	      g      } d
gdgdg}}}| j                  t        t        t        |||       t        | j                  d   j                  dt        d        t        | j                  d   j                  d|d        t        | j                  d
   d|       t        | j                  d
   j                  d|       | j!                  t        |       t        | j                  d   j                  d|d        y )NTFr   r   rJ   inner_weightsr   rj   outer_weights   r'      )r   r   r   r   r   r:   rA   )r3   r   r
   r   set_transform_requestr   r	   set_predict_requestr:   rC   rD   r   r   r=   transformer_r   rL   )pipelinew1w2w3s       r0   test_nested_routingr   6  sX   02 $eD&&TE&J
 ",. O$$5$9 oOo<	
H qcA3BBLL	1y"TV   ''RV ''BQU HOOA.RHHOOA.995PRSQb)''BQUr/   c                     t        t        t               j                  dd      j	                  d            t        t               j                  d            j                  d      g      } dgd	g}}t        j                  t        t        j                  d
            5  | j                  t        t        t        ||       d d d        y # 1 sw Y   y xY w)NTFr   r   r   rj   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 estimator(s) requested metadata.r   )r   r   r   )r3   r   r
   r   r   r   r	   rn   ro   r   r   r   r:   rC   rD   r   )r   r   r   s      r0   test_nested_routing_conflictr   Y  s    02 $eD&&T&:
 ",.>>T>RoOo<		
H S1#B	II:

 S 	QIRrRS S Ss   '#CCc                  l   t        t               j                  d            } t        j                  t
        t        j                  d            5  | j                  t        t              j                  t        t               d d d        t        t               j                  d            } t        j                  t
        t        j                  d            5  | j                  t        t              j                  t        t               d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	NTr   r   z4transform got unexpected argument(s) {'other_param'}r   other_paramFz6transform got unexpected argument(s) {'sample_weight'})r   r
   r   rn   ro   r   r   r   r:   rC   rD   rA   r   )trss    r0   test_invalid_metadatar   v  s    
(*@@t@TC 
yyOP
 ; 	1z:	; (*@@u@UC 
yyQR
 = 	1<	= =; ;= =s   4D!4D*D'*D3c                  &    G d dt               }  G d dt               }t        j                  t        d      5   |        j	                          d d d        dd d dd d d	d
did}t         |       j	                         |        |       j                  d      }dd d dd d d	d
did}t        |j	                         |        |       j                  d      }dd d dd dd	d
did}t        |j	                         |       y # 1 sw Y   xY w)Nc                   *    e Zd ZdddZddddZddiZy)<test_get_metadata_routing.<locals>.TestDefaultsBadMethodNameN)r   my_paramTr   r   my_other_paramr   )rW   r[   r\   1_TestDefaultsBadMethodName__metadata_request__fit3_TestDefaultsBadMethodName__metadata_request__score:_TestDefaultsBadMethodName__metadata_request__other_methodr.   r/   r0   TestDefaultsBadMethodNamer     s0    !#

 ""%
! -7+=(r/   r   c                   *    e Zd ZdddZddddZddiZy)/test_get_metadata_routing.<locals>.TestDefaultsN)r   r   Tr   r   )rW   r[   r\   $_TestDefaults__metadata_request__fit&_TestDefaults__metadata_request__score(_TestDefaults__metadata_request__predictr.   r/   r0   TestDefaultsr     s0    !"#

 ""%
!
 (24&8#r/   r   z8'MetadataRequest' object has no attribute 'other_method'r   T)r   r   r   )r   r   r   )ri   r:   rL   r   )r   r   )r   rn   ro   r   rZ   r   set_score_requestr   )r   r   expectedests       r0   test_get_metadata_routingr     sL   >$6 >
9) 
9 
X
 ; 	"#88:; "!
 #!
 %H <<>I
.
*
*M
*
BC &"!
 #!
 %H 113X>
.
(
(t
(
<C "!
 #!
 %H 113X>_; ;s   DDc                     t               }  G d dt              }dd i| |<    G d dt              }ddi| |<    G d dt              }dd i| |<    G d	 d
t              }i | |<   | j                         D ]e  \  }}t         |             j                  j
                  |k(  sJ t         |       j                         d        |       j	                  d d        g y )Nc                       e Zd ZddiZd Zy)6test_setting_default_requests.<locals>.ExplicitRequestpropNc                     | S r5   r.   r7   rC   rD   kwargss       r0   r:   z:test_setting_default_requests.<locals>.ExplicitRequest.fit      Kr/   )rW   r[   r\   '_ExplicitRequest__metadata_request__fitr:   r.   r/   r0   ExplicitRequestr     s    #)4.	r/   r   r   c                       e Zd ZddiZddZy)?test_setting_default_requests.<locals>.ExplicitRequestOverwriter   TNc                     | S r5   r.   r7   rC   rD   r   r   s        r0   r:   zCtest_setting_default_requests.<locals>.ExplicitRequestOverwrite.fit  r   r/   r5   )rW   r[   r\   0_ExplicitRequestOverwrite__metadata_request__fitr:   r.   r/   r0   ExplicitRequestOverwriter     s     $*4.	r/   r   Tc                       e Zd ZddZy)6test_setting_default_requests.<locals>.ImplicitRequestNc                     | S r5   r.   r   s        r0   r:   z:test_setting_default_requests.<locals>.ImplicitRequest.fit  r   r/   r5   rW   r[   r\   r:   r.   r/   r0   ImplicitRequestr     s    	r/   r   c                   0    e Zd Zdej                  iZddZy)=test_setting_default_requests.<locals>.ImplicitRequestRemovalr   Nc                     | S r5   r.   r   s        r0   r:   zAtest_setting_default_requests.<locals>.ImplicitRequestRemoval.fit  r   r/   r5   )rW   r[   r\   r   UNUSED._ImplicitRequestRemoval__metadata_request__fitr:   r.   r/   r0   ImplicitRequestRemovalr     s     $*+;+B+B"C	r/   r   r:   rf   )r   r   itemsr!   r:   rr   r   rZ   )
test_casesr   r   r   r   Klassrr   s          r0   test_setting_default_requestsr     s    J-  $*4.J=  -3D>J'(- 
 $*4.J  *,J%&%++-  x%eg.22;;xGGG < < >ND$ r/   c                       G d dt               } t        j                  t        d      5   |        j	                          ddd       y# 1 sw Y   yxY w)zFTest that removing a metadata using UNUSED which doesn't exist raises.c                   .    e Zd Zdej                  iZd Zy)Ftest_removing_non_existing_param_raises.<locals>.InvalidRequestRemovalr   c                     | S r5   r.   r   s       r0   r:   zJtest_removing_non_existing_param_raises.<locals>.InvalidRequestRemoval.fit  r   r/   N)rW   r[   r\   r   r   -_InvalidRequestRemoval__metadata_request__fitr:   r.   r/   r0   InvalidRequestRemovalr  	  s     $*+;+B+B"C	r/   r  zTrying to remove parameterr   N)r   rn   ro   r   rZ   )r  s    r0   'test_removing_non_existing_param_raisesr    sC      
z)E	F 74467 7 7s   A

Ac                     t        dd      } t        j                  t        d      5  | j	                  dd       d d d        | j	                  dd        | j
                  dd ik(  sJ | j	                  dd	       | j
                  dd	ik(  sJ | j	                  dd
       | j
                  dd
ik(  sJ | j	                  dd       | j
                  dd
ik(  sJ | j	                  dd       | j
                  ddik(  sJ | j                  d	      dhk(  sJ | j                  d
      dhk(  sJ y # 1 sw Y   xY w)Nr_   r:   rP   r   zThe alias you're setting forr   r`   gffffff?ra   FTrd   )return_alias)r   rn   ro   r   rm   rr   _get_param_names)mmrs    r0   test_method_metadata_requestr    s>   
fU
;C	z)G	H 0e3/0 OO%tO,<<E4=(((OO%uO-<<E5>)))OO%tO,<<E4=(((OO%uO-<<E4=(((OO%uO-<<E5>)))U3w>>>T2ug===0 0s   D44D=c                      G d dt               } t        t        d              t        t        t                            t	        d      }|j
                  j                  dd       t        |      }t        |d	       |j
                  j                  ddik(  sJ t         |              }t        |d	       |j
                  j                  d
d ik(  sJ y )Nc                       e Zd ZddiZy)-test_get_routing_for_object.<locals>.Consumerr   N)rW   r[   r\    _Consumer__metadata_request__fitr.   r/   r0   Consumerr  *  s    #)4.r/   r  r_   rO   r`   rd   ra   r:   rf   r   )r   r   r!   objectr   r:   rm   rr   )r  mr
mr_factorys      r0   test_get_routing_for_objectr  )  s    1= 1 2489268<=	v	&BFFU%0'+JJ6>>""uen444	
	+BB.66??vtn,,,r/   c                  l   t        d      } | j                  ddh      t               k(  sJ t        d      } | j                  j                  dd       | j                  ddh      dhk(  sJ t        d      } | j                  j                  dd       | j                  dddh      dhk(  sJ y	)
z@Test that MetadataRequest().consumes() method works as expected.r_   rO   r:   r`   r   rF   Tra   rd   N)r   consumesr   r   r:   rm   )requests    r0   %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Kr/   c                     t        t               j                  d            dhdhft        t               j                  d            ddhdhfg} | D ],  \  }}}|j                         j	                  d|      |k(  r,J  y)	z=Test that MetadataRouter().consumes method works as expected.Tr   rj   r   r   r:   r  N)r   r	   r   rZ   r  )casesobjinputoutputs       r0   $test_metadata_router_consumes_methodr!  I  s     ",.>>T>R 	
 ",.>>". ? 
 ?+N	
E& $ YUF'')22%2NRXXXXYr/   c                       G d dt               } t        j                  t        d      5   | t	               j                  d            j                  t        t        t               d d d        y # 1 sw Y   y xY w)Nc                   (    e Zd Zdej                  iZy)>test_metaestimator_warnings.<locals>.WeightedMetaRegressorWarnr   N)rW   r[   r\   r   WARN1_WeightedMetaRegressorWarn__metadata_request__fitr.   r/   r0   WeightedMetaRegressorWarnr$  e      #24D4I4I"Jr/   r'  4Support for .* has recently been added to this classr   Fr   rj   )
r   rn   warnsUserWarningr   r   r:   rC   rD   r   )r'  s    r0   test_metaestimator_warningsr,  d  sh    K$9 K 
Q
 . 	"&(88u8M	

#a*#
-. . .s   A A44A=c                       G d dt               } t        j                  t        d      5  t	         |              j                  t        t        t               d d d        y # 1 sw Y   y xY w)Nc                   (    e Zd Zdej                  iZy)7test_estimator_warnings.<locals>.ConsumingRegressorWarnr   N)rW   r[   r\   r   r%  ._ConsumingRegressorWarn__metadata_request__fitr.   r/   r0   ConsumingRegressorWarnr/  q  r(  r/   r1  r)  r   rj   r   )	r	   rn   r*  r+  r   r:   rC   rD   r   )r1  s    r0   test_estimator_warningsr2  p  s_    K!3 K 
Q
 
 	 6 89==q
 	> 	

 
 
s   0A$$A-zobj, stringr_   r:   r	  r`   rd   ra   z{'foo': 'bar'}rO   z{}ri   ([{'callee': 'score', 'caller': 'score'}]rL   rl   a  {'estimator': {'mapping': [{'callee': 'predict', 'caller': '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}}}}c                 $    t        |       |k(  sJ y r5   )str)r  strings     r0   test_string_representationsr7  |  s    : s8vr/   z%obj, method, inputs, err_cls, err_msgrX   invalidrR   zGiven calleezGiven callerfrom_strroutez0route should be 'one-to-one' or a single method!rq   r  z@Given `obj` is neither a `MetadataRequest` nor does it implementr   zUnexpected argsc                     t        j                  ||      5   t        | |      di | d d d        y # 1 sw Y   y xY w)Nr   r.   )rn   ro   getattr)r  r   inputserr_clserr_msgs        r0   test_validationsr@    s<    R 
wg	. 'V&v&' ' 's   4=c                     t               j                  dd      j                  dd      } t        |       }|d   dk(  sJ |d   dk(  sJ t        j                  d      } t        D ]  }t        ||      | j                  v rJ  t        | j                        t        t              k(  sJ t        j                  d	      } t        |       d
k(  sJ y )Nr:   rA   )rT   rS   r   )rA   r:   r   )r:   r:   rU   ri   r3  )	r   rX   listr9  r   r   _routesr   repr)mmmm_listr   s      r0   test_methodmappingrG    s    	E+	.	E%	(  2hG1:----1:'''				-B 8&&)RZZ7778rzz?c'l***				(B8AAAAr/   c                  |   t        d      } | j                  j                  dd       t        d      j	                  |       }t        |j                        t        |       k(  sJ |j                  | usJ t               j                  d      }t        d      j	                  |	      }t        |j                        t        |j                               k(  sJ |j                  |j                         usJ t        t               j                  d
            }t        d      j	                  |	      }t        |j                        t        |j                               k(  sJ t        |j                        t        |j                               k7  sJ |j                  |j                         usJ y )NnestedrO   rb   Tra   r_   r   r   )r  nested_weightsrj   )r   r:   rm   r   rq   r5  _self_requestr	   r   rZ   r   _get_metadata_request)r  rY   r   s      r0   $test_metadatarouter_add_self_requestrM    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Br/   c                  J   t        d      j                  dt               j                  d            } t	        |       dk(  sJ t        d      j                  t               j                  dd	      t               j                  d
            } t	        |       dk(  sJ y )Nr_   rO   r:   weightsr   )rQ   r   a  {'est': {'mapping': [{'callee': 'fit', 'caller': '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}}}}ri   rR   Ta  {'est': {'mapping': [{'callee': 'score', 'caller': 'fit'}], 'router': {'fit': {'sample_weight': None, 'metadata': None}, 'partial_fit': {'sample_weight': None, 'metadata': None}, 'predict': {'sample_weight': None, 'metadata': None}, 'score': {'sample_weight': True}}}})r   rX   r	   r   r5  r   r   rY   s    r0   test_metadata_routing_addrQ    s    &)-- 00y0I . F
 	FH	H	H &)--$**'%*H 222F . F
 	FH	H	Hr/   c                     t        d      j                  t        t                     j	                  d            j                  dt               j	                  d            } t        |       d	k(  sJ | j                  dd
d      h dk(  sJ | j                  ddd      h dk(  sJ | j                  ddd
      ddhk(  sJ | j                  dd
d
      | j                  ddd
      k(  sJ y )Nr_   rO   rj   self_weightsr   r:   transform_weights)rQ   r   a^  {'$self_request': {'fit': {'sample_weight': 'self_weights'}, 'score': {'sample_weight': None}}, 'trs': {'mapping': [{'callee': 'fit', 'caller': '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   rS  rT  >   r   r   rT  r   )	r   rq   r   r	   r   rX   r
   r5  r  rP  s    r0   %test_metadata_routing_get_param_namesrV    s\   V$		!,>,@AQQ, R 


 
 $&661 7  
 

   	FM	M	M ""4U # 	:; ; ; ""5e # 	;< < < ""5d # 
)	*+ + + ""4T # 		 	 5d 
! 
  r/   c                      G d dt               } t        D ]  }t         |        d| d      sJ   G d dt               } t        D ]  }t         |        d| d      sJ  t        D ]  }t         |        d| d      rJ  y )Nc                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 ZddZd Zd Zy
)/test_method_generation.<locals>.SimpleEstimatorc                      y r5   r.   r7   rC   rD   s      r0   r:   z3test_method_generation.<locals>.SimpleEstimator.fitI      r/   c                      y r5   r.   r[  s      r0   fit_transformz=test_method_generation.<locals>.SimpleEstimator.fit_transformL  r\  r/   c                      y r5   r.   r[  s      r0   fit_predictz;test_method_generation.<locals>.SimpleEstimator.fit_predictO  r\  r/   c                      y r5   r.   r[  s      r0   partial_fitz;test_method_generation.<locals>.SimpleEstimator.partial_fitR  r\  r/   c                      y r5   r.   r7   rC   s     r0   rL   z7test_method_generation.<locals>.SimpleEstimator.predictU  r\  r/   c                      y r5   r.   rd  s     r0   predict_probaz=test_method_generation.<locals>.SimpleEstimator.predict_probaX  r\  r/   c                      y r5   r.   rd  s     r0   predict_log_probazAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba[  r\  r/   c                      y r5   r.   rd  s     r0   decision_functionzAtest_method_generation.<locals>.SimpleEstimator.decision_function^  r\  r/   c                      y r5   r.   r[  s      r0   ri   z5test_method_generation.<locals>.SimpleEstimator.scorea  r\  r/   Nc                      y r5   r.   r[  s      r0   splitz5test_method_generation.<locals>.SimpleEstimator.splitd  r\  r/   c                      y r5   r.   rd  s     r0   rA   z9test_method_generation.<locals>.SimpleEstimator.transformg  r\  r/   c                      y r5   r.   rd  s     r0   inverse_transformzAtest_method_generation.<locals>.SimpleEstimator.inverse_transformj  r\  r/   r5   rW   r[   r\   r:   r^  r`  rb  rL   rf  rh  rj  ri   rm  rA   rp  r.   r/   r0   SimpleEstimatorrY  G  s>    												r/   rr  set__requestc                   l    e Zd ZddZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZy)rY  Nc                      y r5   r.   r7   rC   rD   r   s       r0   r:   z3test_method_generation.<locals>.SimpleEstimator.fitr  r\  r/   c                      y r5   r.   rw  s       r0   r^  z=test_method_generation.<locals>.SimpleEstimator.fit_transformu  r\  r/   c                      y r5   r.   rw  s       r0   r`  z;test_method_generation.<locals>.SimpleEstimator.fit_predictx  r\  r/   c                      y r5   r.   rw  s       r0   rb  z;test_method_generation.<locals>.SimpleEstimator.partial_fit{  r\  r/   c                      y r5   r.   r7   rC   r   s      r0   rL   z7test_method_generation.<locals>.SimpleEstimator.predict~  r\  r/   c                      y r5   r.   r|  s      r0   rf  z=test_method_generation.<locals>.SimpleEstimator.predict_proba  r\  r/   c                      y r5   r.   r|  s      r0   rh  zAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba  r\  r/   c                      y r5   r.   r|  s      r0   rj  zAtest_method_generation.<locals>.SimpleEstimator.decision_function  r\  r/   c                      y r5   r.   rw  s       r0   ri   z5test_method_generation.<locals>.SimpleEstimator.score  r\  r/   c                      y r5   r.   rw  s       r0   rm  z5test_method_generation.<locals>.SimpleEstimator.split  r\  r/   c                      y r5   r.   r|  s      r0   rA   z9test_method_generation.<locals>.SimpleEstimator.transform  r\  r/   c                      y r5   r.   r|  s      r0   rp  zAtest_method_generation.<locals>.SimpleEstimator.inverse_transform  r\  r/   r5   NNrq  r.   r/   r0   rr  z/test_method_generation.<locals>.SimpleEstimatorp  s>    												r/   )r   r   hasattrr   r   )rr  r   s     r0   test_method_generationr  B  s    
$- $L  G?,VHH.EFFFG$- $N $ G?,VHH.EFFFG ! C(D*ABBBCr/   c                  ,    G d dt               }  |        }|j                         j                  j                  d d d dk(  sJ |j                         j                  j                  d d dk(  sJ |j                  dd       t        j                  t        d	      5  |j                         j                   d d d        |j                  d
       t        j                  t        d	      5  |j                         j                   d d d        |j                  dd       |j                         j                   |j                  d       |j                         j                  j                  ddddk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)Nc                   $    e Zd ZddZddZddZy)/test_composite_methods.<locals>.SimpleEstimatorNc                      y r5   r.   )r7   rC   rD   r`   rd   s        r0   r:   z3test_composite_methods.<locals>.SimpleEstimator.fit  r\  r/   c                      y r5   r.   )r7   rC   r`   rd   s       r0   rL   z7test_composite_methods.<locals>.SimpleEstimator.predict  r\  r/   c                      y r5   r.   )r7   rC   r   s      r0   rA   z9test_composite_methods.<locals>.SimpleEstimator.transform  r\  r/   r  r5   )rW   r[   r\   r:   rL   rA   r.   r/   r0   rr  r    s    			r/   rr  )rd   r`   r   )rd   r`   Tr_   )r`   rd   z!Conflicting metadata requests forr   )rd   r   )r   rZ   r^  rr   r`  r   rn   ro   r   r   r   )rr  r   s     r0   test_composite_methodsr    s   
	- 	 
C ##%33<<A   
 ##%11::dSW>XXXX Df-	z)L	M /  "../
 %	z)L	M /  "../
 &1** $/##%33<<A   #/ // /s   E>.F
>F
Fc                      t        d      5  t        j                  t        d      5  t	               j                  d       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zCTest that when feature flag disabled, set_{method}_requests raises.Fr,   zThis method is only availabler   Tr   N)r   rn   ro   RuntimeErrorr   r   r.   r/   r0   !test_no_feature_flag_raises_errorr    se    		6 F]]</NO 	F!111E	FF F	F 	FF Fs"   A!AA!A	A!!A*c                  `    t        t                     j                  t        t        d       y)zCTest that passing None as metadata when not requested doesn't raiserj   Nr   )r   r	   r:   rC   rD   r.   r/   r0   test_none_metadata_passedr    s     .0155a$5Or/   c                  <    G d dt         t              } t         |              j                  t        t
               t        j                  t        d      5  t         |              j                  t        t
        t               ddd       y# 1 sw Y   yxY w)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                       e Zd ZddZy)0test_no_metadata_always_works.<locals>.EstimatorNc                     | S r5   r.   )r7   rC   rD   r   s       r0   r:   z4test_no_metadata_always_works.<locals>.Estimator.fit  r   r/   r5   r   r.   r/   r0   	Estimatorr    s    	r/   r  rj   z3Estimator has not implemented metadata routing yet.r   )r   N)
r    r   r   r:   rC   rD   rn   ro   NotImplementedErrorr   )r  s    r0   test_no_metadata_always_worksr    ss    -} 
 IK(,,Q2	#X
 K 		,00A	0JK K Ks   0BB)cr]   r   numpynprn   sklearnr   sklearn.baser   r   sklearn.linear_modelr   %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randrC   randintrD   r   r   my_other_weightsfixturer1   r3   rs   markparametrizerv   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r!  r,  r2  rm   r9  rX   r7  r   r   r@  rG  rM  rQ  rV  r  r  r  r  r  r.   r/   r0   <module>r     s   
   " 2    +	 	 	  5iiB1HHQNKK11KKK2AK&	XXa[
88A;   ,] ,^@ Y[1IK0ik2)<)>U(:(<y{S	+	+ ((
 ((
)<S
B 7+T9b$9:: ; ,:1Mh FS:=,I?X+ \7>(-$LY6	.	
  "u=II5 J  		
 &)	
 
 			(*TU(,,(4F4H - .	
898 + O E2	
 O	2	
 i >	
 (N01N	
  !	
;$'P'Q'P'
B(C:8)XZCz1hFP
Kr/   