
    /iiv                        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     i/var/www/html/bet.cuttalo.com/ml/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          |           }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   r9   r/   addr    )r0   routerrC   rD   s       r1   get_metadata_routingz#SimplePipeline.get_metadata_routingh   s	   d+++ CRC11 	 	GAtFJ  1;;% ,E%00E+66Ik::     	

jn(??SeS,,S	)S44	 	 	
 	
 	
 r3   N)__name__
__module____qualname____doc__r2   r5   rG   rS   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   rg   rL   )r   r   r5   add_requestpytestraisesAssertionErrorre   r   add_self_requestr   rQ   r
   r    )requestss    r1   test_assert_request_is_emptyro   {   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rg   )registry)rg   rp   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?   rp   rf   s    r1   $test_estimator_puts_self_in_registryrr      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)rs   T)rt   Tru   )	alias_argFc                 0    t          |           |k    sJ d S r.   )r   rx   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dZdS )+test_default_requests.<locals>.OddEstimatorsample_weightTNc                     | S r.   rP   r0   r>   r?   s      r1   r5   z/test_default_requests.<locals>.OddEstimator.fit       Kr3   r.   )rT   rU   rV   $_OddEstimator__metadata_request__fitr5   rP   r3   r1   OddEstimatorr      s7         T#

	 	 	 	 	 	r3   r   r   Tr   metadatar   r   )r   r"   r5   rn   lenr   r   rS   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dZdS )+test_default_request_override.<locals>.BasegroupsTNc                     d S r.   rP   r   s      r1   splitz1test_default_request_override.<locals>.Base.split       Dr3   r.   )rT   rU   rV   _Base__metadata_request__splitr   rP   r3   r1   Baser      s3        %-t$4!	 	 	 	 	 	r3   r   c                       e Zd ZddiZddZdS ).test_default_request_override.<locals>.class_1r   sample_domainNc                     d S r.   rP   r   s      r1   r   z4test_default_request_override.<locals>.class_1.split  r   r3   r.   )rT   rU   rV   !_class_1__metadata_request__splitr   rP   r3   r1   class_1r     3        %-$?!	 	 	 	 	 	r3   r   c                       e Zd ZddiZddZdS ).test_default_request_override.<locals>.Class_1r   r   Nc                     d S r.   rP   r   s      r1   r   z4test_default_request_override.<locals>.Class_1.split  r   r3   r.   )rT   rU   rV   !_Class_1__metadata_request__splitr   rP   r3   r1   Class_1r   	  r   r3   r   r   r   r   N)r   r   _get_metadata_request)r   r   r   s      r1   test_default_request_overrider      s        }       $       $    		''))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   )rj   rk   	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)rT   rU   rV   rP   r3   r1   InvalidObjectr     s        r3   r   z#either implement the routing methodr   r5   r   )rj   rk   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 )Nrf   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	   rj   rk   
ValueErrorreescapeset_fit_requestr   
estimator_)clferr_messages     r1   test_simple_metadata_routingr   7  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   rf   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   p  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   rf   r   r   r(   zIn WeightedMetaRegressor, there is a conflict on sample_weight between what is requested for this estimator and what is requested by its children. You can resolve this conflict by using an alias for the child estimators' requested metadata.r   )r   r   r   )r,   r   r   r   r   r   r
   rj   rk   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9 

 

 

 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   rj   rk   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                     } 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                   B    e Zd ZdddZddddZddiZd	dZd	dZd ZdS )
/test_get_metadata_routing.<locals>.TestDefaultsN)r   my_other_paramT)r   my_paramr   r   c                     | S r.   rP   r   s      r1   r5   z3test_get_metadata_routing.<locals>.TestDefaults.fit  r   r3   c                     d S r.   rP   r   s      r1   re   z5test_get_metadata_routing.<locals>.TestDefaults.score  r   r3   c                     d S r.   rP   r0   r>   s     r1   rG   z7test_get_metadata_routing.<locals>.TestDefaults.predict  r   r3   r.   )	rT   rU   rV   $_TestDefaults__metadata_request__fit&_TestDefaults__metadata_request__score(_TestDefaults__metadata_request__predictr5   re   rG   rP   r3   r1   TestDefaultsr     s        !"#
 #

 ""%
 %
!
 (24&8#	 	 	 		 	 	 		 	 	 	 	r3   r   T)r   r   r   )r   r   r   )re   r5   rG   r   )r   r   )r   r   rS   set_score_requestr   )r   expectedests      r1   test_get_metadata_routingr     s       )   . "!
 
 #!
 
 % H <<>>III
,..
*
*M
*
B
BC &"!
 
 #!
 
 % H 1133X>>>
,..
(
(t
(
<
<C "!
 
 #!
 
 % H 1133X>>>>>r3   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#  r   r3   )rT   rU   rV   '_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.   )rT   rU   rV   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.fit4  r   r3   r.   rT   rU   rV   r5   rP   r3   r1   ImplicitRequestr  2  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.   )rT   rU   rV   r   UNUSED._ImplicitRequestRemoval__metadata_request__fitr5   rP   r3   r1   ImplicitRequestRemovalr  9  s9         $*+;+B"C	 	 	 	 	 	r3   r  r5   rb   )r   r   itemsr"   r5   rn   r   rS   )
test_casesr   r  r	  r  Klassrn   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.fitR  r   r3   N)rT   rU   rV   r   r  -_InvalidRequestRemoval__metadata_request__fitr5   rP   r3   r1   InvalidRequestRemovalr  M  s4         $*+;+B"C	 	 	 	 	r3   r  zTrying to remove parameterr   N)r   rj   rk   r   rS   )r  s    r1   'test_removing_non_existing_param_raisesr  I  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]   FTr`   )return_alias)r   rj   rk   r   ri   rn   _get_param_names)mmrs    r1   test_method_metadata_requestr   Y  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dZdS )-test_get_routing_for_object.<locals>.Consumerr   Nc                     | S r.   rP   r   s      r1   r5   z1test_get_routing_for_object.<locals>.Consumer.fits  r   r3   r.   )rT   rU   rV    _Consumer__metadata_request__fitr5   rP   r3   r1   Consumerr#  p  s2        #)4.	 	 	 	 	 	r3   r&  r[   rJ   r\   r`   r]   r5   rb   r   )r   r   r"   objectr   r5   ri   rn   )r&  mr
mr_factorys      r1   test_get_routing_for_objectr*  n  s
       =    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]   r`   N)r   consumesr   r5   ri   )requests    r1   %test_metadata_request_consumes_methodr/    s     F+++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   rf   r   r   r5   r,  N)r   r
   r   rS   r-  )casesobjinputoutputs       r1   $test_metadata_router_consumes_methodr5    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)rT   rU   rV   r   WARN1_WeightedMetaRegressorWarn__metadata_request__fitrP   r3   r1   WeightedMetaRegressorWarnr8            #24D4I"Jr3   r;  2Support for .* has recently been added to .* classr   Fr   rf   )
r   rj   warnsUserWarningr   r   r5   r>   r?   r   )r;  s    r1   test_metaestimator_warningsr@    s    K K K K K$9 K K K 
O
 
 
 . . 	"!&((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)rT   rU   rV   r   r9  ._ConsumingRegressorWarn__metadata_request__fitrP   r3   r1   ConsumingRegressorWarnrC    r<  r3   rE  r=  r   rf   r   )	r
   rj   r>  r?  r   r5   r>   r?   r   )rE  s    r1   test_estimator_warningsrF    s    K K K K K!3 K K K 
O
 
 
 
 
 	 6 6 8 8999==q
 	> 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   >A::A>A>zobj, stringr[   r5   r  r\   r`   r]   z{'foo': 'bar'}rJ   z{}rG   rM   rh   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)r2  strings     r1   test_string_representationsrJ    s!    > s88vr3   z%obj, method, inputs, err_cls, err_msgrQ   invalidzGiven calleezGiven callerrm   r2  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   )rj   rk   getattr)r2  r   inputserr_clserr_msgs        r1   test_validationsrQ    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   re   z([{'caller': 'score', 'callee': 'score'}])r    rQ   listr   r   _routesr   repr)mmmm_listr   s      r1   test_methodmappingrX    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   )r2  nested_weightsrf   )r   r5   ri   r   rm   rH  _self_requestr
   r   rS   r   r   )r.  rR   r   s      r1   $test_metadatarouter_add_self_requestr]  (  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}}}}re   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   rQ   r
   r   r    rH  r   rR   s    r1   test_metadata_routing_addra  F  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   rf   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   rc  rd  >   r   r   rd  r   )
r   rm   r   r
   r   rQ   r   r    rH  r  r`  s    r1   %test_metadata_routing_get_param_namesrf  e  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   r   s      r1   r5   z3test_method_generation.<locals>.SimpleEstimator.fit  r   r3   c                     d S r.   rP   r   s      r1   fit_transformz=test_method_generation.<locals>.SimpleEstimator.fit_transform  r   r3   c                     d S r.   rP   r   s      r1   fit_predictz;test_method_generation.<locals>.SimpleEstimator.fit_predict  r   r3   c                     d S r.   rP   r   s      r1   partial_fitz;test_method_generation.<locals>.SimpleEstimator.partial_fit  r   r3   c                     d S r.   rP   r   s     r1   rG   z7test_method_generation.<locals>.SimpleEstimator.predict  r   r3   c                     d S r.   rP   r   s     r1   predict_probaz=test_method_generation.<locals>.SimpleEstimator.predict_proba  r   r3   c                     d S r.   rP   r   s     r1   predict_log_probazAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba  r   r3   c                     d S r.   rP   r   s     r1   decision_functionzAtest_method_generation.<locals>.SimpleEstimator.decision_function  r   r3   c                     d S r.   rP   r   s      r1   re   z5test_method_generation.<locals>.SimpleEstimator.score  r   r3   Nc                     d S r.   rP   r   s      r1   r   z5test_method_generation.<locals>.SimpleEstimator.split  r   r3   c                     d S r.   rP   r   s     r1   r<   z9test_method_generation.<locals>.SimpleEstimator.transform  r   r3   c                     d S r.   rP   r   s     r1   inverse_transformzAtest_method_generation.<locals>.SimpleEstimator.inverse_transform  r   r3   r.   rT   rU   rV   r5   rl  rn  rp  rG   rs  ru  rw  re   r   r<   r|  rP   r3   r1   SimpleEstimatorri    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 )ri  Nc                     d S r.   rP   r0   r>   r?   r   s       r1   r5   z3test_method_generation.<locals>.SimpleEstimator.fit  r   r3   c                     d S r.   rP   r  s       r1   rl  z=test_method_generation.<locals>.SimpleEstimator.fit_transform  r   r3   c                     d S r.   rP   r  s       r1   rn  z;test_method_generation.<locals>.SimpleEstimator.fit_predict  r   r3   c                     d S r.   rP   r  s       r1   rp  z;test_method_generation.<locals>.SimpleEstimator.partial_fit  r   r3   c                     d S r.   rP   r0   r>   r   s      r1   rG   z7test_method_generation.<locals>.SimpleEstimator.predict  r   r3   c                     d S r.   rP   r  s      r1   rs  z=test_method_generation.<locals>.SimpleEstimator.predict_proba  r   r3   c                     d S r.   rP   r  s      r1   ru  zAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba  r   r3   c                     d S r.   rP   r  s      r1   rw  zAtest_method_generation.<locals>.SimpleEstimator.decision_function  r   r3   c                     d S r.   rP   r  s       r1   re   z5test_method_generation.<locals>.SimpleEstimator.score  r   r3   c                     d S r.   rP   r  s       r1   r   z5test_method_generation.<locals>.SimpleEstimator.split  r   r3   c                     d S r.   rP   r  s      r1   r<   z9test_method_generation.<locals>.SimpleEstimator.transform  r   r3   c                     d S r.   rP   r  s      r1   r|  zAtest_method_generation.<locals>.SimpleEstimator.inverse_transform  r   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\   r`   s        r1   r5   z3test_composite_methods.<locals>.SimpleEstimator.fit  r   r3   c                     d S r.   rP   )r0   r>   r\   r`   s       r1   rG   z7test_composite_methods.<locals>.SimpleEstimator.predict  r   r3   c                     d S r.   rP   )r0   r>   r   s      r1   r<   z9test_composite_methods.<locals>.SimpleEstimator.transform  r   r3   r  r.   )rT   rU   rV   r5   rG   r<   rP   r3   r1   r~  r    sP        	 	 	 		 	 	 		 	 	 	 	 	r3   r~  )r`   r\   r   )r`   r\   Tr[   )r\   r`   z!Conflicting metadata requests forr   )r`   r   )r   rS   rl  rn   rn  r   rj   rk   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.FrX   zThis method is only availabler   Tr   N)r   rj   rk   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 raiserf   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.fit<  r   r3   r.   r  rP   r3   r1   	Estimatorr  ;  (        	 	 	 	 	 	r3   r  rf   z3Estimator has not implemented metadata routing yet.r   r   N)
r!   r   r   r5   r>   r?   rj   rk   NotImplementedErrorr   )r  s    r1   test_no_metadata_always_worksr  3  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.rf   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   rj   rk   r   r5   r>   r?   )weighted_metapipemsgs      r1   %test_unsetmetadatapassederror_correctr  H  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   rj   rk   r   rl  r>   r?   )r  r  r  s      r1   ;test_unsetmetadatapassederror_correct_for_composite_methodsr  Y  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.fitw  r   r3   r.   r  rP   r3   r1   Ar  v  r  r3   r  z>set_fit_request() takes 0 positional argument but 1 were givenr   TNr   )r   r   r   rj   rk   r   r   )r  error_messages     r1   test_unbound_set_methods_workr  l  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,)hrW   r   numpynprj   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,   ro   markparametrizerr   r{   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r*  r/  r5  r@  rF  ri   rQ   rJ  r   r   rQ  rX  r]  ra  rf  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	 	 ---+ + .-	 	+     ---( ( .- (
     ---( ( .- (
 ---) ) .-)B ---  .-@ ---S S .-S
 ---B B .-B 7++T9b$9::---: : .- ;: ,+: ---5 5 .-5p ---- - .--` ---S S .-S: ---= = .-=, ---@? @? .-@?F ---+  +  .-+ \ ---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   