
    Ug                        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< ej=        d          d             Z> G d de          Z?d Z@ejA        B                    d e e                       e e                       e e                       e e             e                       e e             e                      g          d             ZCejA        B                    dg d          d             ZDejA        B                    dg d          d              ZEd! ZFd" ZGd# ZHd$ ZIejA        B                    d%e!          ejA        B                    d&dd&g g          d'                         ZJd( ZKd) ZLd* ZMd+ ZNd, ZOd- ZPd. ZQd/ ZRd0 ZSd1 ZTd2 ZUd3 ZVd4 ZWejA        B                    d5 e#d6d78          X                    d9d:;          d<f e)d6=          d>f e*d6=          Y                     e             e+            Y                    d?d?@          A          dBfg          dC             ZZejA        B                    dD e+            dEd7dFd@e[dGf e+            dEdFd7d@e[dHf e*d6=          dIdJ e*d6=          ie[dKf e            dLdFdie\dMfg          dN             Z]dO Z^dP Z_dQ Z`dR ZadS ZbdT ZcdU ZddV ZedW ZfdX ZgdY ZhdZ ZidS )[z 
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
   T)autousec               #   d   K   t          d          5  dV  ddd           dS # 1 swxY w Y   dS )zEnable SLEP006 for all tests.Tenable_metadata_routingNr        b/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/tests/test_metadata_routing.pyenable_slep006r3   A   s       
	5	5	5                   s   %))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)selfr8   s     r2   __init__zSimplePipeline.__init__Q   s    


r1   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$   	enumerater8   r   r<   getappend	transform	predictor)	r9   Xy
fit_paramsparamsX_transformedisteptransformers	            r2   r<   zSimplePipeline.fitT   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	
 	
 	
 r1   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predictr=   r>   )r%   r$   r@   r?   rC   rA   rN   rD   )r9   rE   predict_paramsrI   rH   rJ   rK   s          r2   rN   zSimplePipeline.predictf   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Qr1   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ownerr=   r>   method_mappingr<   callercalleerC   rN   )rD   rS   r0   )r    	__class____name__r@   r8   addr!   )r9   routerrJ   rK   s       r2   get_metadata_routingz#SimplePipeline.get_metadata_routingo   s   dn&=>>> CRC11 	 	GAtFJ  1;;% ,E%00E+66Ik::     	

jn(??SeS,,S	)S44	 	 	
 	
 	
 r1   N)rX   
__module____qualname____doc__r:   r<   rN   r[   r0   r1   r2   r5   r5   H   s]             $R R R    r1   r5   c            	      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testrQ   fooparamaliasbarvaluer<   excludecarrotTscore	estimatorrT   rl   rS   )r   r   r<   add_requestpytestraisesAssertionErrorrj   r    add_self_requestr   rY   r   r!   )requestss    r2   test_assert_request_is_emptyrt      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rl   )registry)rl   ru   c                 \    |                      t          t                     | | j        v sJ dS )z=Check that an estimator puts itself in the registry upon fit.N)r<   rE   rF   ru   rk   s    r2   $test_estimator_puts_self_in_registryrw      s2     MM!Q	*******r1   zval, res))FF)TF)NF)$UNUSED$F)$WARN$Fzinvalid-inputF)	valid_argTc                 0    t          |           |k    sJ d S r7   )r   valress     r2   test_request_type_is_aliasr      #     C  C''''''r1   ))FT)TT)NT)rx   T)ry   Trz   )	alias_argFc                 0    t          |           |k    sJ d S r7   )r   r}   s     r2   test_request_type_is_validr      r   r1   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)rX   r\   r]   $_OddEstimator__metadata_request__fitr0   r1   r2   OddEstimatorr      s         T#
r1   r   r   Tr   metadatar   r   )r   r#   r<   rs   lenr   r   r[   r   rC   r
   )r   odd_requesttrs_requestest_requests       r2   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(((((r1   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)rX   r\   r]   _Base__metadata_request__splitr0   r1   r2   Baser      s        %-t$4!!!r1   r   c                       e Zd ZddiZdS ).test_default_request_override.<locals>.class_1r   sample_domainN)rX   r\   r]   !_class_1__metadata_request__splitr0   r1   r2   class_1r              %-$?!!!r1   r   c                       e Zd ZddiZdS ).test_default_request_override.<locals>.Class_1r   r   N)rX   r\   r]   !_Class_1__metadata_request__splitr0   r1   r2   Class_1r     r   r1   r   splitr   r   N)r   r   _get_metadata_request)r   r   r   s      r2   test_default_request_overrider      s   5 5 5 5 5} 5 5 5@ @ @ @ @$ @ @ @@ @ @ @ @$ @ @ @ 		''))Gh5P+Q   		''))Gh5P+Q    r1   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   )ro   rp   	TypeErrorr$   r
   	my_groupsr0   r1   r2   #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)rX   r\   r]   r0   r1   r2   InvalidObjectr     s        r1   r   z#either implement the routing methodr   r<   r   )ro   rp   AttributeErrorr$   r   )r   s    r2   #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 )Nr<   )r   )r$   r
   
isinstancedictsetkeysr   rA   )r   r   empty_paramsrouted_paramsparams_for_methoddefault_params_for_methods         r2   2test_process_routing_empty_params_get_with_defaultr     s     L#$7$9$95QQLQQM &f-'..... %%''((CLL8888 !. 1 1&' 1 J J$(9999999r1   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           t          t                                          d                    } |                     t          t          t
                     t          | j        dt
                     t          t                                          d                    } |                     t          t          t
          	           t          | j        dt
                     d S )
Nrk   r   zo[sample_weight] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.fitr   Fr<   Talternative_weight)r   )r   r   r<   rE   rF   
my_weightsr
   ro   rp   
ValueErrorreescapeset_fit_requestr   
estimator_)clferr_messages     r2   test_simple_metadata_routingr   )  s9    !+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+++CNE222 !%''77d7KK  C GGAq
G+++CNELLLL !%''77. 8 
 
  C
 GGAqZG000CNELLLLLLs   (C??DDc            	      V   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t          d            t          | j        d         j        d|d            t          | j        d
         d|           t          | j        d
         j        d|           |                     t          |           t          | j        d         j        d|d            d S )NTFr   r   rL   inner_weightsr   rk   outer_weights   r)      )r   r   r   r   r   r<   rC   )r5   r   r   r   set_transform_requestr   r   set_predict_requestr<   rE   rF   r   r   r?   transformer_r   rN   )pipelinew1w2w3s       r2   test_nested_routingr   ]  s   022 $eDD&&TE&JJ  
 ",.. OO$$5$99   oOo<<	
 H qcA3BBLL	1y"TV     'RV    'BQU    HOA.RHHHHHOA.95PRSSSSQb)))'BQU     r1   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   rk   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   )r5   r   r   r   r   r   r   ro   rp   r   r   r   r<   rE   rF   r   )r   r   r   s      r2   test_nested_routing_conflictr     sc   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   ro   rp   r   r   r   r<   rE   rF   rC   r   )trss    r2   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   )rX   r\   r]   1_TestDefaultsBadMethodName__metadata_request__fit3_TestDefaultsBadMethodName__metadata_request__score:_TestDefaultsBadMethodName__metadata_request__other_methodr0   r1   r2   TestDefaultsBadMethodNamer     sH        !#
 #

 ""%
 %
! -7+=(((r1   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   )rX   r\   r]   $_TestDefaults__metadata_request__fit&_TestDefaults__metadata_request__score(_TestDefaults__metadata_request__predictr0   r1   r2   TestDefaultsr     sH        !"#
 #

 ""%
 %
!
 (24&8###r1   r   z8'MetadataRequest' object has no attribute 'other_method'r   T)r   r   r   )r   r   r   )rj   r<   rN   r   )r   r   )r   ro   rp   r   r[   r   set_score_requestr   )r   r   expectedests       r2   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 r7   r0   r9   rE   rF   kwargss       r2   r<   z:test_setting_default_requests.<locals>.ExplicitRequest.fit      Kr1   )rX   r\   r]   '_ExplicitRequest__metadata_request__fitr<   r0   r1   r2   ExplicitRequestr     s-        #)4.	 	 	 	 	r1   r   r   c                       e Zd ZddiZddZdS )?test_setting_default_requests.<locals>.ExplicitRequestOverwriter   TNc                     | S r7   r0   r9   rE   rF   r   r   s        r2   r<   zCtest_setting_default_requests.<locals>.ExplicitRequestOverwrite.fit  r   r1   r7   )rX   r\   r]   0_ExplicitRequestOverwrite__metadata_request__fitr<   r0   r1   r2   ExplicitRequestOverwriter     s4         $*4.	 	 	 	 	 	r1   r  Tc                       e Zd ZddZdS )6test_setting_default_requests.<locals>.ImplicitRequestNc                     | S r7   r0   r  s        r2   r<   z:test_setting_default_requests.<locals>.ImplicitRequest.fit  r   r1   r7   rX   r\   r]   r<   r0   r1   r2   ImplicitRequestr    s(        	 	 	 	 	 	r1   r	  c                   (    e Zd Zdej        iZddZdS )=test_setting_default_requests.<locals>.ImplicitRequestRemovalr   Nc                     | S r7   r0   r  s        r2   r<   zAtest_setting_default_requests.<locals>.ImplicitRequestRemoval.fit"  r   r1   r7   )rX   r\   r]   r   UNUSED._ImplicitRequestRemoval__metadata_request__fitr<   r0   r1   r2   ImplicitRequestRemovalr    s9         $*+;+B"C	 	 	 	 	 	r1   r  r<   rg   )r   r   itemsr#   r<   rs   r   r[   )
test_casesr   r  r	  r  Klassrs   s          r2   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$   r1   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 r7   r0   r   s       r2   r<   zJtest_removing_non_existing_param_raises.<locals>.InvalidRequestRemoval.fit5  r   r1   N)rX   r\   r]   r   r  -_InvalidRequestRemoval__metadata_request__fitr<   r0   r1   r2   InvalidRequestRemovalr  0  s4         $*+;+B"C	 	 	 	 	r1   r  zTrying to remove parameterr   N)r   ro   rp   r   r[   )r  s    r2   'test_removing_non_existing_param_raisesr  -  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`   r<   rR   r   zThe alias you're setting forr   ra   gffffff?rb   FTre   )return_alias)r   ro   rp   r   rn   rs   _get_param_names)mmrs    r2   test_method_metadata_requestr   <  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)rX   r\   r]    _Consumer__metadata_request__fitr0   r1   r2   Consumerr#  Q  s        #)4.r1   r%  r`   rQ   ra   re   rb   r<   rg   r   )r   r   r#   objectr   r<   rn   rs   )r%  mr
mr_factorys      r2   test_get_routing_for_objectr)  P  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,,,,,,r1   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`   rQ   r<   ra   r   rH   Trb   re   N)r    consumesr   r   r<   rn   )requests    r2   %test_metadata_request_consumes_methodr.  b  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Kr1   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   rk   r   r   r<   r+  N)r   r   r   r[   r,  )casesobjinputoutputs       r2   $test_metadata_router_consumes_methodr4  p  s     ",..>>T>RR   	
 ",..>>". ?    
 ?+N	
E& $ Y YUF''))22%2NNRXXXXXXY Yr1   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)rX   r\   r]   r   WARN1_WeightedMetaRegressorWarn__metadata_request__fitr0   r1   r2   WeightedMetaRegressorWarnr7            #24D4I"Jr1   r:  4Support for .* has recently been added to this classr   Fr   rk   )
r   ro   warnsUserWarningr   r   r<   rE   rF   r   )r:  s    r2   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)rX   r\   r]   r   r8  ._ConsumingRegressorWarn__metadata_request__fitr0   r1   r2   ConsumingRegressorWarnrB    r;  r1   rD  r<  r   rk   r   )	r   ro   r=  r>  r   r<   rE   rF   r   )rD  s    r2   test_estimator_warningsrE    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`   r<   r  ra   re   rb   z{'foo': 'bar'}rQ   z{}rN   rT   rm   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 r7   )str)r1  strings     r2   test_string_representationsrI    s!    : s88vr1   z%obj, method, inputs, err_cls, err_msgrY   invalidzGiven calleezGiven callerrr   r1  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   r0   )ro   rp   getattr)r1  r   inputserr_clserr_msgs        r2   test_validationsrP    s    D 
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 )
Nr<   rC   rT   r   )r<   rC   r   )r<   r<   rj   z([{'caller': 'score', 'callee': 'score'}])r!   rY   listr   r   _routesr   repr)mmmm_listr   s      r2   test_methodmappingrW    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Ar1   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nestedrQ   rc   Trb   r`   r   r   )r1  nested_weightsrk   )r   r<   rn   r    rr   rG  _self_requestr   r   r[   r   r   )r-  rZ   r   s      r2   $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Br1   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`   rQ   weightsr   r<   rT   )r   rS   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}}}}rj   T)rS   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    rY   r   r   r!   rG  r   rZ   s    r2   test_metadata_routing_addr`    s   &)))--  00y0II$**%*FF .  F
 	F	 	 	 	 &)))--$**%*HH  222FF .  F
 	F	 	 	 	 	 	r1   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`   rQ   rk   self_weightsr   transform_weightsr<   rT   )r   rS   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   rb  rc  >   r   r   rc  r   )
r    rr   r   r   r   rY   r   r!   rG  r  r_  s    r2   %test_metadata_routing_get_param_namesre  9  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 
! 
 
     r1   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 r7   r0   r9   rE   rF   s      r2   r<   z3test_method_generation.<locals>.SimpleEstimator.fitl      Dr1   c                     d S r7   r0   rj  s      r2   fit_transformz=test_method_generation.<locals>.SimpleEstimator.fit_transformo  rk  r1   c                     d S r7   r0   rj  s      r2   fit_predictz;test_method_generation.<locals>.SimpleEstimator.fit_predictr  rk  r1   c                     d S r7   r0   rj  s      r2   partial_fitz;test_method_generation.<locals>.SimpleEstimator.partial_fitu  rk  r1   c                     d S r7   r0   r9   rE   s     r2   rN   z7test_method_generation.<locals>.SimpleEstimator.predictx  rk  r1   c                     d S r7   r0   rs  s     r2   predict_probaz=test_method_generation.<locals>.SimpleEstimator.predict_proba{  rk  r1   c                     d S r7   r0   rs  s     r2   predict_log_probazAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba~  rk  r1   c                     d S r7   r0   rs  s     r2   decision_functionzAtest_method_generation.<locals>.SimpleEstimator.decision_function  rk  r1   c                     d S r7   r0   rj  s      r2   rj   z5test_method_generation.<locals>.SimpleEstimator.score  rk  r1   Nc                     d S r7   r0   rj  s      r2   r   z5test_method_generation.<locals>.SimpleEstimator.split  rk  r1   c                     d S r7   r0   rs  s     r2   rC   z9test_method_generation.<locals>.SimpleEstimator.transform  rk  r1   c                     d S r7   r0   rs  s     r2   inverse_transformzAtest_method_generation.<locals>.SimpleEstimator.inverse_transform  rk  r1   r7   rX   r\   r]   r<   rm  ro  rq  rN   ru  rw  ry  rj   r   rC   r~  r0   r1   r2   SimpleEstimatorrh  j  s        	 	 		 	 		 	 		 	 		 	 		 	 		 	 		 	 		 	 		 	 	 		 	 		 	 	 	 	r1   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 )rh  Nc                     d S r7   r0   r9   rE   rF   r   s       r2   r<   z3test_method_generation.<locals>.SimpleEstimator.fit  rk  r1   c                     d S r7   r0   r  s       r2   rm  z=test_method_generation.<locals>.SimpleEstimator.fit_transform  rk  r1   c                     d S r7   r0   r  s       r2   ro  z;test_method_generation.<locals>.SimpleEstimator.fit_predict  rk  r1   c                     d S r7   r0   r  s       r2   rq  z;test_method_generation.<locals>.SimpleEstimator.partial_fit  rk  r1   c                     d S r7   r0   r9   rE   r   s      r2   rN   z7test_method_generation.<locals>.SimpleEstimator.predict  rk  r1   c                     d S r7   r0   r  s      r2   ru  z=test_method_generation.<locals>.SimpleEstimator.predict_proba  rk  r1   c                     d S r7   r0   r  s      r2   rw  zAtest_method_generation.<locals>.SimpleEstimator.predict_log_proba  rk  r1   c                     d S r7   r0   r  s      r2   ry  zAtest_method_generation.<locals>.SimpleEstimator.decision_function  rk  r1   c                     d S r7   r0   r  s       r2   rj   z5test_method_generation.<locals>.SimpleEstimator.score  rk  r1   c                     d S r7   r0   r  s       r2   r   z5test_method_generation.<locals>.SimpleEstimator.split  rk  r1   c                     d S r7   r0   r  s      r2   rC   z9test_method_generation.<locals>.SimpleEstimator.transform  rk  r1   c                     d S r7   r0   r  s      r2   r~  zAtest_method_generation.<locals>.SimpleEstimator.inverse_transform  rk  r1   r7   NNr  r0   r1   r2   r  z/test_method_generation.<locals>.SimpleEstimator  s       	 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 		 	 	 	 	 	r1   )r   r   hasattrr   r   )r  r   s     r2   test_method_generationr  e  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r1   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 r7   r0   )r9   rE   rF   ra   re   s        r2   r<   z3test_composite_methods.<locals>.SimpleEstimator.fit  rk  r1   c                     d S r7   r0   )r9   rE   ra   re   s       r2   rN   z7test_composite_methods.<locals>.SimpleEstimator.predict  rk  r1   c                     d S r7   r0   )r9   rE   r   s      r2   rC   z9test_composite_methods.<locals>.SimpleEstimator.transform  rk  r1   r  r7   )rX   r\   r]   r<   rN   rC   r0   r1   r2   r  r    sP        	 	 	 		 	 	 		 	 	 	 	 	r1   r  )re   ra   r   )re   ra   Tr`   )ra   re   z!Conflicting metadata requests forr   )re   r   )r   r[   rm  rs   ro  r   ro   rp   r   r   r   )r  r   s     r2   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.Fr.   zThis method is only availabler   Tr   N)r   ro   rp   RuntimeErrorr
   r   r0   r1   r2   !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 raiserk   Nr   )r   r   r<   rE   rF   r0   r1   r2   test_none_metadata_passedr    s5    .0011155a$5OOOOOr1   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 r7   r0   )r9   rE   rF   r   s       r2   r<   z4test_no_metadata_always_works.<locals>.Estimator.fit
  r   r1   r7   r  r0   r1   r2   	Estimatorr  	  (        	 	 	 	 	 	r1   r  rk   z3Estimator has not implemented metadata routing yet.r   r   N)
r"   r   r   r<   rE   rF   ro   rp   NotImplementedErrorr   )r  s    r2   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.rk   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
   r5   r   r   ro   rp   r   r<   rE   rF   )weighted_metapipemsgs      r2   %test_unsetmetadatapassederror_correctr    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   ro   rp   r   rm  rE   rF   )r  r  r  s      r2   ;test_unsetmetadatapassederror_correct_for_composite_methodsr  &  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 r7   r0   r  s       r2   r<   z,test_unbound_set_methods_work.<locals>.A.fitB  r   r1   r7   r  r0   r1   r2   Ar  A  r  r1   r  z>set_fit_request() takes 0 positional argument but 1 were givenr   TNr   )r   r   r   ro   rp   r   r   )r  error_messages     r2   test_unbound_set_methods_workr  8  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,)jr^   r   numpynpro   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randrE   randintrF   r   r   my_other_weightsfixturer3   r5   rt   markparametrizerw   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r)  r.  r4  r?  rE  rn   rY   rI  r   r   rP  rW  r\  r`  re  r  r  r  r  r  r  r  r  r0   r1   r2   <module>r     s4    
			      " " " " " "        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::: : ;: ,+:1M 1M 1Mh     F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 8 + MOO	22	
 MOO E22	
 N(((NN0001N	
  !!	
-   B' 'C   B'
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$" " " " "r1   