
    0Ph                        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 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/m0Z0 ej1        2                    d          Z3d\  Z4Z5e36                    e4e5          Z7e38                    dde4          Z9e38                    dde4          Z:e36                    e4          Z;e36                    e4          Z< G d de          Z= ed          d             Z>ej?        @                    d e e                       e e                       e e                       e e             e                       e e             e                      g           ed          d                         ZAej?        @                    dg d           ed          d                         ZBej?        @                    dg d           ed          d                         ZC ed          d              ZD ed          d!             ZE ed          d"             ZF ed          d#             ZGej?        @                    d$e!          ej?        @                    d%dd%g g           ed          d&                                     ZH ed          d'             ZI ed          d(             ZJ ed          d)             ZK ed          d*             ZL ed          d+             ZM ed          d,             ZN ed          d-             ZO ed          d.             ZP ed          d/             ZQ ed          d0             ZR ed          d1             ZS ed          d2             ZT ed          d3             ZU ed          ej?        @                    d4 e#d5d67          V                    d8d9:          d;f e)d5<          d=f e*d5<          W                     e             e+            W                    d>d>?          @          dAfg           ed          dB                                     ZXej?        @                    dC e+            dDd6dEd?eYdFf e+            dDdEd6d?eYdGf e*d5<          dHdI e*d5<          ieYdJf e            dKdEdieZdLfg           ed          dM                         Z[ ed          dN             Z\ ed          dO             Z] ed          dP             Z^ ed          dQ             Z_ ed          dR             Z` ed          dS             Za ed          dT             Zb ed          dU             Zc ed          dV             Zd ed          dW             Ze ed          dX             Zf ed          dY             ZgdS )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                   *    e Zd ZdZd Zd Zd Zd ZdS )SimplePipelinezA 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                     || _         d S N)steps)selfr/   s     c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/tests/test_metadata_routing.py__init__zSimplePipeline.__init__J   s    


    c           	         g | _         t          | dfi |}|}t          | j        d d                   D ]\  }} t	          |          j        ||fi |                    d|           j        }| j                             |            |j        |fi |                    d|           j        }| j                              t	          | j        d                   j        ||fi |j	        j                   | S )Nfitstep_)
steps_r#   	enumerater/   r   r5   getappend	transform	predictor)	r0   Xy
fit_paramsparamsX_transformedisteptransformers	            r1   r5   zSimplePipeline.fitM   s.    u;;
;; CRC11 	 	GAt)%++/q $*JJ{q{{$;$;$? K K{+++1K1 !'KAKK!8!8!B MM 	%E$*R.!!%mQOO&:J:NOO	
 	
 	
 r3   c           	         t          |            |}t          | dfi |}t          | j        d d                   D ].\  }} |j        |fi |                    d|           j        }/ | j        d         j        |fi |j        j        S )Npredictr6   r7   )r$   r#   r9   r8   r<   r:   rG   r=   )r0   r>   predict_paramsrB   rA   rC   rD   s          r1   rG   zSimplePipeline.predict_   s     yCCNCC SbS!122 	S 	SGAt*DN1RR

;1;;0G0G0QRRMM&t{2&}QQ8H8PQQQr3   c           
         t          | j        j                  }t          | j        d d                   D ]f\  }} |j        d
i d| |idt                                          dd                              dd                              dd          i g|                    | j        d         t                                          dd                              dd          	           |S )Nownerr6   r7   method_mappingr5   callercalleer<   rG   )r=   rL    )r   	__class____name__r9   r/   addr    )r0   routerrC   rD   s       r1   get_metadata_routingz#SimplePipeline.get_metadata_routingh   s   dn&=>>> CRC11 	 	GAtFJ  1;;% ,E%00E+66Ik::     	

jn(??SeS,,S	)S44	 	 	
 	
 	
 r3   N)rR   
__module____qualname____doc__r2   r5   rG   rU   rP   r3   r1   r,   r,   A   s]             $R R R    r3   r,   Tenable_metadata_routingc            	      V   t          d          } t          |            | j                            dd            t          |            | j                            dd           t	          j        t                    5  t          |            d d d            n# 1 swxY w Y   t          | d           | j                            d	d
           t	          j        t                    5  t          | d           d d d            n# 1 swxY w Y   t          | ddg           t          t          d          	                    t          d                                         t                      t                                          dd                               d S )NtestrJ   fooparamaliasbarvaluer5   excludecarrotTscore	estimatorrM   rh   rL   )r   r   r5   add_requestpytestraisesAssertionErrorrf   r   add_self_requestr   rS   r
   r    )requestss    r1   test_assert_request_is_emptyrp   {   s   V,,,HH%%%L5555H%%%L5888	~	&	& * *)))* * * * * * * * * * * * * * *
 He4444NXT:::	~	&	& 9 9%88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9
 Hug.>???? V$$$		/$???	@	@	(**(??..eE.JJ 
 

 

    s$    BB #B -DDDrh   )registry)rh   rq   c                 \    |                      t          t                     | | j        v sJ dS )z=Check that an estimator puts itself in the registry upon fit.N)r5   r>   r?   rq   rg   s    r1   $test_estimator_puts_self_in_registryrs      s2     MM!Q	*******r3   zval, res))FF)TF)NF)$UNUSED$F)$WARN$Fzinvalid-inputF)	valid_argTc                 0    t          |           |k    sJ d S r.   )r   valress     r1   test_request_type_is_aliasr|      #     C  C''''''r3   ))FT)TT)NT)rt   T)ru   Trv   )	alias_argFc                 0    t          |           |k    sJ d S r.   )r   ry   s     r1   test_request_type_is_validr      r}   r3   c                  j    G d dt                     } t           |                       }|j        j        ddik    sJ t	          t          t                                j        j                  rJ t          t                                                                 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          |           d S )Nc                       e Zd ZddiZdS )+test_default_requests.<locals>.OddEstimatorsample_weightTN)rR   rV   rW   $_OddEstimator__metadata_request__fitrP   r3   r1   OddEstimatorr      s         T#
r3   r   r   Tr   metadatar   r   )r   r"   r5   ro   lenr   r   rU   r   r<   r	   )r   odd_requesttrs_requestest_requests       r1   test_default_requestsr      so   
 
 
 
 
} 
 
 
 )88K?#'>>>>> )*@*B*BCCGPQQQQQ244IIKKLLL()=)?)?@@K?#( (      )$QU-V-VVVVVK(((()<)>)>??K?#( (     K(((((r3   c                      G d dt                     }  G d d|           } G d d|           }t           |                                            ddd	ii           t           |                                            ddd	ii           d
S )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                       e Zd ZddiZdS )+test_default_request_override.<locals>.BasegroupsTN)rR   rV   rW   _Base__metadata_request__splitrP   r3   r1   Baser      s        %-t$4!!!r3   r   c                       e Zd ZddiZdS ).test_default_request_override.<locals>.class_1r   sample_domainN)rR   rV   rW   !_class_1__metadata_request__splitrP   r3   r1   class_1r              %-$?!!!r3   r   c                       e Zd ZddiZdS ).test_default_request_override.<locals>.Class_1r   r   N)rR   rV   rW   !_Class_1__metadata_request__splitrP   r3   r1   Class_1r      r   r3   r   splitr   r   N)r   r   _get_metadata_request)r   r   r   s      r1   test_default_request_overrider      s   5 5 5 5 5} 5 5 5@ @ @ @ @$ @ @ @@ @ @ @ @$ @ @ @ 		''))Gh5P+Q   		''))Gh5P+Q    r3   c                      t          j        t          d          5  t          t	                      dt
                     d d d            d S # 1 swxY w Y   d S )Nz Can only route and process inputmatchinvalid_methodr   )rk   rl   	TypeErrorr#   r	   	my_groupsrP   r3   r1   #test_process_routing_invalid_methodr     s    	y(J	K	K	K S S+--/?	RRRRS S S S S S S S S S S S S S S S S Ss   $AAAc                       G d d          } t          j        t          d          5  t           |             dt                     d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS ):test_process_routing_invalid_object.<locals>.InvalidObjectN)rR   rV   rW   rP   r3   r1   InvalidObjectr     s        r3   r   z#either implement the routing methodr   r5   r   )rk   rl   AttributeErrorr#   r   )r   s    r1   #test_process_routing_invalid_objectr     s            
~-R	S	S	S B ByAAAAB B B B B B B B B B B B B B B B B Bs    AAAmethoddefaultc                 ,   i }t          t                      dfi |}||          }t          |t                    sJ t	          |                                          t	          t                    k    sJ |                    | |          }||k    sJ d S )Nr5   )r   )r#   r	   
isinstancedictsetkeysr   r:   )r   r   empty_paramsrouted_paramsparams_for_methoddefault_params_for_methods         r1   2test_process_routing_empty_params_get_with_defaultr     s     L#$7$9$95QQLQQM &f-'..... %%''((CLL8888 !. 1 1&' 1 J J$(9999999r3   c                     t          t                                } |                     t          t                     t          t                                } |                     t          t          t
                     t          t                                } d}t          j        t          t          j        |                    5  |                     t          t          t
                     d d d            n# 1 swxY w Y   t          t                                          d                    } |                     t          t          t
                     t          | j        dd           t          t                                          d                    } |                     t          t          t
                     t          | j        ddt
          	           t          t                                          d
                    } |                     t          t          t
                     t          | j        ddt
          	           d S )Nrg   r   zo[sample_weight] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.fitr   Fr5   )r   parentTr   r   r   alternative_weight)r   )r   r   r5   r>   r?   
my_weightsr	   rk   rl   
ValueErrorreescapeset_fit_requestr   
estimator_)clferr_messages     r1   test_simple_metadata_routingr   +  sX   
 !+A+C+C
D
D
DCGGAqMMM !+A+C+C
D
D
DCGGAq
G+++ !+>+@+@
A
A
AC	5  
z;)?)?	@	@	@ 0 01J///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 !%''77e7LL  C GGAq
G+++CN5GGGG !%''77d7KK  C GGAq
G+++uU*   
 !%''77. 8 
 
  C
 GGAqZG000uU*     s   (C??DDc            	      Z   t          t          t                                          dd                              dd                    t          t                                          dd                              d                                        d	          g          } d
gdgdg}}}|                     t          t          t          |||           t          | j        d         j        ddt                     t          | j        d         j        dd|           t          | j        d
         dd|           t          | j        d
         j        dd|           |                     t          |           t          | j        d         j        dd|           d S )NTFr   r   rE   inner_weightsr   rg   outer_weights   r(      )r   r   r   r   r   r5   )r   r   r   r<   r   )r,   r   r   r   set_transform_requestr   r
   set_predict_requestr5   r>   r?   r   r   r8   transformer_r   rG   )pipelinew1w2w3s       r1   test_nested_routingr   d  s    022 $eDD&&TE&JJ  
 ",.. OO$$5$99   oOo<<	
 H qcA3BBLL	1y"TV     '	    '	    5b    %eEQS    Qb)))'	     r3   c                     t          t          t                                          dd                              d                    t          t                                          d                                        d          g          } dgd	g}}t          j        t          t          j        d
                    5  |                     t          t          t          ||           d d d            d S # 1 swxY w Y   d S )NTFr   r   r   rg   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   )r,   r   r   r   r   r   r
   rk   rl   r   r   r   r5   r>   r?   r   )r   r   r   s      r1   test_nested_routing_conflictr     se    022 $eDD&&T&::  
 ",..>>T>RR  oOo<<		
 H S1#B	I: 

 

 

 S S 	QIRrRRRS S S S S S S S S S S S S S S S S Ss   
*DDDc                     t          t                                          d                    } t          j        t
          t          j        d                    5  |                     t          t                                        t          t                     d d d            n# 1 swxY w Y   t          t                                          d                    } t          j        t
          t          j        d                    5  |                     t          t                                        t          t                     d d d            d S # 1 swxY w Y   d S )	NTr   r   z4transform got unexpected argument(s) {'other_param'}r   other_paramFz6transform got unexpected argument(s) {'sample_weight'})r   r   r   rk   rl   r   r   r   r5   r>   r?   r<   r   )trss    r1   test_invalid_metadatar     s    (**@@t@TT  C 
yOPP
 
 
 ; ; 	1z:::	; ; ; ; ; ; ; ; ; ; ; ; ; ; ; (**@@u@UU  C 
yQRR
 
 
 = = 	1<<<	= = = = = = = = = = = = = = = = = =s&   A B**B.1B.A EE#&E#c                      G d dt                     }  G d dt                     }t          j        t          d          5   |                                              d d d            n# 1 swxY w Y   dd d dd d d	d
did}t           |                                            |            |                                d          }dd d dd d d	d
did}t          |                                |            |                                d          }dd d dd dd	d
did}t          |                                |           d S )Nc                   ,    e Zd ZdddZddddZddiZdS )<test_get_metadata_routing.<locals>.TestDefaultsBadMethodNameN)r   my_paramTr   r   my_other_paramr   )rR   rV   rW   1_TestDefaultsBadMethodName__metadata_request__fit3_TestDefaultsBadMethodName__metadata_request__score:_TestDefaultsBadMethodName__metadata_request__other_methodrP   r3   r1   TestDefaultsBadMethodNamer     sH        !#
 #

 ""%
 %
! -7+=(((r3   r   c                   ,    e Zd ZdddZddddZddiZdS )/test_get_metadata_routing.<locals>.TestDefaultsN)r   r   Tr   r   )rR   rV   rW   $_TestDefaults__metadata_request__fit&_TestDefaults__metadata_request__score(_TestDefaults__metadata_request__predictrP   r3   r1   TestDefaultsr     sH        !"#
 #

 ""%
 %
!
 (24&8###r3   r   z8'MetadataRequest' object has no attribute 'other_method'r   T)r   r   r   )r   r   r   )rf   r5   rG   r   )r   r   )r   rk   rl   r   rU   r   set_score_requestr   )r   r   expectedests       r1   test_get_metadata_routingr     s>   > > > > >$6 > > >
9 
9 
9 
9 
9) 
9 
9 
9 
X
 
 
 ; ; 	"!##88:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "!
 
 #!
 
 % H <<>>III
,..
*
*M
*
B
BC &"!
 
 #!
 
 % H 1133X>>>
,..
(
(t
(
<
<C "!
 
 #!
 
 % H 1133X>>>>>s   A++A/2A/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 | |<   |                                 D ]u\  }}t           |                      j        j        |k    sJ t           |                                            d            |                                d d            vd S )Nc                       e Zd ZddiZd ZdS )6test_setting_default_requests.<locals>.ExplicitRequestpropNc                     | S r.   rP   r0   r>   r?   kwargss       r1   r5   z:test_setting_default_requests.<locals>.ExplicitRequest.fit       Kr3   )rR   rV   rW   '_ExplicitRequest__metadata_request__fitr5   rP   r3   r1   ExplicitRequestr     s-        #)4.	 	 	 	 	r3   r   r   c                       e Zd ZddiZddZdS )?test_setting_default_requests.<locals>.ExplicitRequestOverwriter   TNc                     | S r.   rP   r0   r>   r?   r   r   s        r1   r5   zCtest_setting_default_requests.<locals>.ExplicitRequestOverwrite.fit*  r   r3   r.   )rR   rV   rW   0_ExplicitRequestOverwrite__metadata_request__fitr5   rP   r3   r1   ExplicitRequestOverwriter   %  s4         $*4.	 	 	 	 	 	r3   r  Tc                       e Zd ZddZdS )6test_setting_default_requests.<locals>.ImplicitRequestNc                     | S r.   rP   r   s        r1   r5   z:test_setting_default_requests.<locals>.ImplicitRequest.fit1  r   r3   r.   rR   rV   rW   r5   rP   r3   r1   ImplicitRequestr  /  s(        	 	 	 	 	 	r3   r  c                   (    e Zd Zdej        iZddZdS )=test_setting_default_requests.<locals>.ImplicitRequestRemovalr   Nc                     | S r.   rP   r   s        r1   r5   zAtest_setting_default_requests.<locals>.ImplicitRequestRemoval.fit;  r   r3   r.   )rR   rV   rW   r   UNUSED._ImplicitRequestRemoval__metadata_request__fitr5   rP   r3   r1   ImplicitRequestRemovalr	  6  s9         $*+;+B"C	 	 	 	 	 	r3   r  r5   rc   )r   r   itemsr"   r5   ro   r   rU   )
test_casesr   r  r  r  Klassro   s          r1   test_setting_default_requestsr    s    J    -    $*4.J    =    -3D>J'(    -   
 $*4.J        *,J%&%++--    x%eegg..2;xGGGG < < > >NNNND$   r3   c                       G d dt                     } t          j        t          d          5   |                                              ddd           dS # 1 swxY w Y   dS )zFTest that removing a metadata using UNUSED which doesn't exist raises.c                   &    e Zd Zdej        iZd ZdS )Ftest_removing_non_existing_param_raises.<locals>.InvalidRequestRemovalr   c                     | S r.   rP   r   s       r1   r5   zJtest_removing_non_existing_param_raises.<locals>.InvalidRequestRemoval.fitO  r   r3   N)rR   rV   rW   r   r  -_InvalidRequestRemoval__metadata_request__fitr5   rP   r3   r1   InvalidRequestRemovalr  J  s4         $*+;+B"C	 	 	 	 	r3   r  zTrying to remove parameterr   N)r   rk   rl   r   rU   )r  s    r1   'test_removing_non_existing_param_raisesr  F  s            
z)E	F	F	F 7 7446667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   AA Ac                     t          dd          } t          j        t          d          5  |                     dd           d d d            n# 1 swxY w Y   |                     dd            | j        dd ik    sJ |                     dd	           | j        dd	ik    sJ |                     dd
           | j        dd
ik    sJ |                     dd           | j        dd
ik    sJ |                     dd           | j        ddik    sJ |                     d	          dhk    sJ |                     d
          dhk    sJ d S )Nr\   r5   rK   r   zThe alias you're setting forr   r]   gffffff?r^   FTra   )return_alias)r   rk   rl   r   rj   ro   _get_param_names)mmrs    r1   test_method_metadata_requestr  V  s   
fU
;
;
;C	z)G	H	H	H 0 0e3///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 OO%tO,,,<E4=((((OO%uO---<E5>))))OO%tO,,,<E4=((((OO%uO---<E4=((((OO%uO---<E5>))))U33w>>>>T22ug======s   AAAc                      G d dt                     } t          t          d                      t          t          t                                           t	          d          }|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 d S )Nc                       e Zd ZddiZdS )-test_get_routing_for_object.<locals>.Consumerr   N)rR   rV   rW    _Consumer__metadata_request__fitrP   r3   r1   Consumerr!  m  s        #)4.r3   r#  r\   rJ   r]   ra   r^   r5   rc   r   )r   r   r"   objectr   r5   rj   ro   )r#  mr
mr_factorys      r1   test_get_routing_for_objectr'  k  s
   1 1 1 1 1= 1 1 1 24889992688<<===	v	&	&	&BFU%000'++JJ6666>"uen4444	

	+	+BB....6?vtn,,,,,,r3   c                     t          d          } |                     ddh          t                      k    sJ t          d          } | j                            dd           |                     ddh          dhk    sJ t          d          } | j                            dd           |                     dddh          dhk    sJ d	S )
z@Test that MetadataRequest().consumes() method works as expected.r\   rJ   r5   r]   r   rA   Tr^   ra   N)r   consumesr   r   r5   rj   )requests    r1   %test_metadata_request_consumes_methodr,  ~  s     6***G5%99SUUBBBBF+++GK%t4445%99eWDDDDF+++GK%u5555%@@UGKKKKKKr3   c                  L   t          t                                          d                    dhdhft          t                                          d                    ddhdhfg} | D ]5\  }}}|                                                    d|          |k    sJ 6dS )	z=Test that MetadataRouter().consumes method works as expected.Tr   rg   r   r   r5   r)  N)r   r
   r   rU   r*  )casesobjinputoutputs       r1   $test_metadata_router_consumes_methodr2    s     ",..>>T>RR   	
 ",..>>". ?    
 ?+N	
E& $ Y YUF''))22%2NNRXXXXXXY Yr3   c                  6    G d dt                     } t          j        t          d          5   | t	                                          d                                        t          t          t                     d d d            d S # 1 swxY w Y   d S )Nc                        e Zd Zdej        iZdS )>test_metaestimator_warnings.<locals>.WeightedMetaRegressorWarnr   N)rR   rV   rW   r   WARN1_WeightedMetaRegressorWarn__metadata_request__fitrP   r3   r1   WeightedMetaRegressorWarnr5            #24D4I"Jr3   r8  4Support for .* has recently been added to this classr   Fr   rg   )
r   rk   warnsUserWarningr   r   r5   r>   r?   r   )r8  s    r1   test_metaestimator_warningsr=    s    K K K K K$9 K K K 
Q
 
 
 . . 	"!&((88u8MM	
 	
 	

#a*#
-
-
-. . . . . . . . . . . . . . . . . .s   ABBBc                      G d dt                     } t          j        t          d          5  t	           |                                           t          t          t                     d d d            d S # 1 swxY w Y   d S )Nc                        e Zd Zdej        iZdS )7test_estimator_warnings.<locals>.ConsumingRegressorWarnr   N)rR   rV   rW   r   r6  ._ConsumingRegressorWarn__metadata_request__fitrP   r3   r1   ConsumingRegressorWarnr@    r9  r3   rB  r:  r   rg   r   )	r
   rk   r;  r<  r   r5   r>   r?   r   )rB  s    r1   test_estimator_warningsrC    s    K K K K K!3 K K K 
Q
 
 
 
 
 	 6 6 8 8999==q
 	> 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   >A::A>A>zobj, stringr\   r5   r  r]   ra   r^   z{'foo': 'bar'}rJ   z{}rG   rM   ri   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                 0    t          |           |k    sJ d S r.   )str)r/  strings     r1   test_string_representationsrG    s!    > s88vr3   z%obj, method, inputs, err_cls, err_msgrS   invalidzGiven calleezGiven callerrn   r/  z@Given `obj` is neither a `MetadataRequest` nor does it implementr   zUnexpected argsc                     t          j        ||          5   t          | |          di | d d d            d S # 1 swxY w Y   d S )Nr   rP   )rk   rl   getattr)r/  r   inputserr_clserr_msgs        r1   test_validationsrN    s    F 
wg	.	.	. ' 'V&&v&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   ;??c                  $   t                                          dd                              dd          } t          |           }|d         dk    sJ |d         dk    sJ t                      } t          D ]2}|                     ||           t	          ||          | j        v sJ 3t          | j                  t          t                    k    sJ t                                          dd          } t          |           d	k    sJ d S )
Nr5   r<   rM   r   )r5   r<   r   )r5   r5   rf   z([{'caller': 'score', 'callee': 'score'}])r    rS   listr   r   _routesr   repr)mmmm_listr   s      r1   test_methodmappingrU    s    		E+	.	.	E%	(	(  2hhG1:-----1:''''	B 8 8
fV,,,&&))RZ77777rz??c'll****			GG		<	<B88AAAAAAAr3   c                     t          d          } | j                            dd           t          d                              |           }t          |j                  t          |           k    sJ |j        | usJ t                                          d          }t          d                              |	          }t          |j                  t          |	                                          k    sJ |j        |	                                usJ t          t                                          d
                    }t          d                              |	          }t          |j                  t          |                                          k    sJ t          |j                  t          |	                                          k    sJ |j        |                                usJ d S )NnestedrJ   r_   Tr^   r\   r   r   )r/  nested_weightsrg   )r   r5   rj   r   rn   rE  _self_requestr
   r   rU   r   r   )r+  rT   r   s      r1   $test_metadatarouter_add_self_requestrZ  "  s    H---GK'666&)))::7CCFv#$$G4444w.... 


.
.\
.
J
JC&)))::s:CCFv#$$C,D,D,F,F(G(GGGGGs'?'?'A'AAAAA  $&&66EU6VV  C &)))::s:CCFv#$$C,E,E,G,G(H(HHHHH v#$$C,D,D,F,F(G(GGGGGs'@'@'B'BBBBBBBr3   c                     t          d                              t                                          d          t	                                          dd                    } t          |           dk    sJ t          d                              t	                                          dd	          t                                          d
                    } t          |           dk    sJ d S )Nr\   rJ   weightsr   r5   rM   )r   rL   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}}}}rf   T)rL   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   rS   r
   r   r    rE  r   rT   s    r1   test_metadata_routing_addr^  @  s
    &)))--  00y0II$**%*FF .  F
 	F	 	 	 	 &)))--$**%*HH  222FF .  F
 	F	 	 	 	 	 	r3   c                     t          d                              t          t                                                    d                                        t                                          d          t                                          dd          	          } t          |           d
k    sJ | 	                    ddd          h dk    sJ | 	                    ddd          h dk    sJ | 	                    ddd          ddhk    sJ | 	                    ddd          | 	                    ddd          k    sJ d S )Nr\   rJ   rg   self_weightsr   transform_weightsr5   rM   )r   rL   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   r`  ra  >   r   r   ra  r   )
r   rn   r   r
   r   rS   r   r    rE  r  r]  s    r1   %test_metadata_routing_get_param_namesrc  _  s    	V$$$		!,>,@,@AAAQQ, R  

 


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

 

   	FM	M 	M 	M 	M ""4U #  	:	:	:; ; ; ; ""5e #  	;	;	;< < < < ""5d #  
)	*+ + + + ""4T #  		 	 5d 
! 
 
     r3   c                  B    G d dt                     } t          D ] }t           |             d| d          rJ ! G d dt                     } t          D ] }t           |             d| d          rJ !t          D ] }t           |             d| d          sJ !d S )Nc                   X    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d
S )/test_method_generation.<locals>.SimpleEstimatorc                     d S r.   rP   r0   r>   r?   s      r1   r5   z3test_method_generation.<locals>.SimpleEstimator.fit      Dr3   c                     d S r.   rP   rh  s      r1   fit_transformz=test_method_generation.<locals>.SimpleEstimator.fit_transform  ri  r3   c                     d S r.   rP   rh  s      r1   fit_predictz;test_method_generation.<locals>.SimpleEstimator.fit_predict  ri  r3   c                     d S r.   rP   rh  s      r1   partial_fitz;test_method_generation.<locals>.SimpleEstimator.partial_fit  ri  r3   c                     d S r.   rP   r0   r>   s     r1   rG   z7test_method_generation.<locals>.SimpleEstimator.predict  ri  r3   c                     d S r.   rP   rq  s     r1   predict_probaz=test_method_generation.<locals>.SimpleEstimator.predict_proba  ri  r3   c                     d S r.   rP   rq  s     r1   predict_log_probazAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba  ri  r3   c                     d S r.   rP   rq  s     r1   decision_functionzAtest_method_generation.<locals>.SimpleEstimator.decision_function  ri  r3   c                     d S r.   rP   rh  s      r1   rf   z5test_method_generation.<locals>.SimpleEstimator.score  ri  r3   Nc                     d S r.   rP   rh  s      r1   r   z5test_method_generation.<locals>.SimpleEstimator.split  ri  r3   c                     d S r.   rP   rq  s     r1   r<   z9test_method_generation.<locals>.SimpleEstimator.transform  ri  r3   c                     d S r.   rP   rq  s     r1   inverse_transformzAtest_method_generation.<locals>.SimpleEstimator.inverse_transform  ri  r3   r.   rR   rV   rW   r5   rk  rm  ro  rG   rs  ru  rw  rf   r   r<   r|  rP   r3   r1   SimpleEstimatorrf    s        	 	 		 	 		 	 		 	 		 	 		 	 		 	 		 	 		 	 		 	 	 		 	 		 	 	 	 	r3   r~  set__requestc                   n    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dS )rf  Nc                     d S r.   rP   r0   r>   r?   r   s       r1   r5   z3test_method_generation.<locals>.SimpleEstimator.fit  ri  r3   c                     d S r.   rP   r  s       r1   rk  z=test_method_generation.<locals>.SimpleEstimator.fit_transform  ri  r3   c                     d S r.   rP   r  s       r1   rm  z;test_method_generation.<locals>.SimpleEstimator.fit_predict  ri  r3   c                     d S r.   rP   r  s       r1   ro  z;test_method_generation.<locals>.SimpleEstimator.partial_fit  ri  r3   c                     d S r.   rP   r0   r>   r   s      r1   rG   z7test_method_generation.<locals>.SimpleEstimator.predict  ri  r3   c                     d S r.   rP   r  s      r1   rs  z=test_method_generation.<locals>.SimpleEstimator.predict_proba  ri  r3   c                     d S r.   rP   r  s      r1   ru  zAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba  ri  r3   c                     d S r.   rP   r  s      r1   rw  zAtest_method_generation.<locals>.SimpleEstimator.decision_function  ri  r3   c                     d S r.   rP   r  s       r1   rf   z5test_method_generation.<locals>.SimpleEstimator.score  ri  r3   c                     d S r.   rP   r  s       r1   r   z5test_method_generation.<locals>.SimpleEstimator.split  ri  r3   c                     d S r.   rP   r  s      r1   r<   z9test_method_generation.<locals>.SimpleEstimator.transform  ri  r3   c                     d S r.   rP   r  s      r1   r|  zAtest_method_generation.<locals>.SimpleEstimator.inverse_transform  ri  r3   r.   NNr}  rP   r3   r1   r~  z/test_method_generation.<locals>.SimpleEstimator  s       	 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 	 	 	r3   )r   r   hasattrr   r   )r~  r   s     r1   test_method_generationr    s$   $ $ $ $ $- $ $ $L  G G??,,.EV.E.E.EFFFFFF$ $ $ $ $- $ $ $N $ G G??,,.EV.E.E.EFFFFFF ! C C((*A*A*A*ABBBBBBC Cr3   c                  D    G d dt                     }  |             }|                                j        j        d d d dk    sJ |                                j        j        d d dk    sJ |                    dd           t          j        t          d	          5  |                                j         d d d            n# 1 swxY w Y   |	                    d
           t          j        t          d	          5  |                                j         d d d            n# 1 swxY w Y   |	                    dd           |                                j         |
                    d           |                                j        j        ddddk    sJ d S )Nc                   &    e Zd ZddZddZddZdS )/test_composite_methods.<locals>.SimpleEstimatorNc                     d S r.   rP   )r0   r>   r?   r]   ra   s        r1   r5   z3test_composite_methods.<locals>.SimpleEstimator.fit  ri  r3   c                     d S r.   rP   )r0   r>   r]   ra   s       r1   rG   z7test_composite_methods.<locals>.SimpleEstimator.predict  ri  r3   c                     d S r.   rP   )r0   r>   r   s      r1   r<   z9test_composite_methods.<locals>.SimpleEstimator.transform  ri  r3   r  r.   )rR   rV   rW   r5   rG   r<   rP   r3   r1   r~  r    sP        	 	 	 		 	 	 		 	 	 	 	 	r3   r~  )ra   r]   r   )ra   r]   Tr\   )r]   ra   z!Conflicting metadata requests forr   )ra   r   )r   rU   rk  ro   rm  r   rk   rl   r   r   r   )r~  r   s     r1   test_composite_methodsr    sn   	 	 	 	 	- 	 	 	 /

C ##%%3<A A    
 ##%%1:dSW>X>XXXXX Df---	z)L	M	M	M / /  ""../ / / / / / / / / / / / / / /
 %%%	z)L	M	M	M / /  ""../ / / / / / / / / / / / / / /
 &111** $///##%%3<A A      s$   CC	C	D''D+.D+c                     t          d          5  t          j        t          d          5  t	                                          d           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zCTest that when feature flag disabled, set_{method}_requests raises.FrY   zThis method is only availabler   Tr   N)r   rk   rl   RuntimeErrorr	   r   rP   r3   r1   !test_no_feature_flag_raises_errorr    s&    
	6	6	6 F F]</NOOO 	F 	F!!111EEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	FF F F F F F F F F F F F F F F F F Fs4   A4#AA4A 	 A4#A 	$A44A8;A8c                  ~    t          t                                                    t          t          d           dS )zCTest that passing None as metadata when not requested doesn't raiserg   Nr   )r   r
   r5   r>   r?   rP   r3   r1   test_none_metadata_passedr  '  s7     .0011155a$5OOOOOr3   c                      G d dt           t                    } t           |                                           t          t
                     t          j        t          d          5  t           |                                           t          t
          t                     ddd           dS # 1 swxY w Y   dS )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dS )0test_no_metadata_always_works.<locals>.EstimatorNc                     | S r.   rP   )r0   r>   r?   r   s       r1   r5   z4test_no_metadata_always_works.<locals>.Estimator.fit6  r   r3   r.   r  rP   r3   r1   	Estimatorr  5  (        	 	 	 	 	 	r3   r  rg   z3Estimator has not implemented metadata routing yet.r   r   N)
r!   r   r   r5   r>   r?   rk   rl   NotImplementedErrorr   )r  s    r1   test_no_metadata_always_worksr  -  s       -}   
 IIKK(((,,Q222	#X
 
 
 K K 			,,,00A	0JJJK K K K K K K K K K K K K K K K K Ks   +>B66B:=B:c                  2   t          t                                } t          | g          }t          j        d          }t          j        t          |          5  |                    t          t          d           ddd           dS # 1 swxY w Y   dS )z}Test that UnsetMetadataPassedError raises the correct error message when
    set_{method}_request is not set in nested cases.rg   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   rk   rl   r   r5   r>   r?   )weighted_metapipemsgs      r1   %test_unsetmetadatapassederror_correctr  B  s     +5H5J5JKKKM=/**D
)	0 C 
/s	;	;	; ( (A'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   #BBBc                     t                      } t          d| fg          }t          j        d          }t	          j        t          |          5  |                    t          t          d           ddd           dS # 1 swxY w Y   dS )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   rk   rl   r   rk  r>   r?   )r  r  r  s      r1   ;test_unsetmetadatapassederror_correct_for_composite_methodsr  S  s     122-/DEFGGD
)	9 C 
/s	;	;	; 2 21a&1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   #B  BBc                      G d dt                     } t          j        d          }t          j        t
          |          5   |                                 d           ddd           n# 1 swxY w Y   | j        | _         |                                 d           t          j        t
          |          5   |                                 d           ddd           dS # 1 swxY w Y   dS )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                       e Zd ZddZdS )(test_unbound_set_methods_work.<locals>.ANc                     | S r.   rP   r  s       r1   r5   z,test_unbound_set_methods_work.<locals>.A.fitq  r   r3   r.   r  rP   r3   r1   Ar  p  r  r3   r  z>set_fit_request() takes 0 positional argument but 1 were givenr   TNr   )r   r   r   rk   rl   r   r   )r  error_messages     r1   test_unbound_set_methods_workr  f  s       M    IH M
 
y	6	6	6 " "	D!!!" " " " " " " " " " " " " " " )A ACCd+++ 
y	6	6	6 " "	D!!!" " " " " " " " " " " " " " " " " "s$   A--A14A1=C((C,/C,)hrX   r   numpynprk   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>   randintr?   r   r   my_other_weightsr,   rp   markparametrizers   r|   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r'  r,  r2  r=  rC  rj   rS   rG  r   r   rN  rU  rZ  r^  rc  r  r  r  r  r  r  r  r  rP   r3   r1   <module>r     s    
			      " " " " " "        8 7 7 7 7 7 1 1 1 1 1 1 % % % % % %                            + * * * * *	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                5 4 4 4 4 4iB1HHQNNKK11KKK2AK&&	XXa[[
88A;; 7 7 7 7 7] 7 7 7t ---    .- F YY[[111IIKK000iikk222)<)<)>)>UUU(:(:(<(<yy{{SSS	 	 ---+ + .-	 	+     ---( ( .- (
     ---( ( .- (
 ---) ) .-)< ---  .-. ---S S .-S
 ---B B .-B 7++T9b$9::---: : .- ;: ,+: ---5 5 .-5p ---- - .--` ---S S .-S: ---= = .-=, ---I? I? .-I?X ---+  +  .-+ \ ---7 7 .-7 ---> > .->( ---- - .--$ ---L L .-L ---Y Y .-Y6 ---	. 	. .-	. ---	
 	
 .-	
 --- "!u===II5 J   		
 O&)))	

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