o
    `^h                     @   s6  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j12dZ3d\Z4Z5e36e4e5Z7e3j8dde4dZ9e3j8dde4dZ:e36e4Z;e36e4Z<G dd deZ=edddd Z>ej?@dee dee dee dee e dee e dgedddd ZAej?@dg dedddd  ZBej?@dg d!eddd"d# ZCeddd$d% ZDeddd&d' ZEeddd(d) ZFeddd*d+ ZGej?@d,e!ej?@d-dd-g geddd.d/ ZHeddd0d1 ZIeddd2d3 ZJeddd4d5 ZKeddd6d7 ZLeddd8d9 ZMeddd:d; ZNeddd<d= ZOeddd>d? ZPeddd@dA ZQedddBdC ZRedddDdE ZSedddFdG ZTedddHdI ZUeddej?@dJe#dKdLdMjVdNdOdPdQfe)dKdRdSfe*dKdRjWe e+ jWdTdTdUdVdWfgedddXdY ZXej?@dZe+ d[dLd\dUeYd]fe+ d[d\dLdUeYd^fe*dKdRd_d`e*dKdRieYdafe dbd\dieZdcfgeddddde Z[edddfdg Z\edddhdi Z]edddjdk Z^edddldm Z_edddndo Z`edddpdq Zaedddrds Zbedddtdu Zcedddvdw Zdedddxdy Zeedddzd{ Zfeddd|d} Zgd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
   c                   @   s0   e Zd ZdZdd Zdd Zdd Zd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                 C   s
   || _ d S N)steps)selfr,    r.   a/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/sklearn/tests/test_metadata_routing.py__init__J   s   
zSimplePipeline.__init__c           	      K   s   g | _ t| dfi |}|}t| jd d D ]-\}}t|j||fi |d| j}| j | |j|fi |d| j}q| j t| jd j||fi |j	j | S )Nfitstep_)
steps_r"   	enumerater,   r   r1   getappend	transform	predictor)	r-   Xy
fit_paramsparamsX_transformedisteptransformerr.   r.   r/   r1   M   s&    zSimplePipeline.fitc                 K   sv   t |  |}t| dfi |}t| jd d D ]\}}|j|fi |d| j}q| jd j|fi |jjS )Npredictr2   r3   )r#   r"   r5   r4   r8   r6   rB   r9   )r-   r:   predict_paramsr>   r=   r?   r@   r.   r.   r/   rB   _   s   "zSimplePipeline.predictc              	   C   s   t | jjd}t| jd d D ]%\}}|jd
i d| |idt jdddjdddjdddi q|j| jd t jdddjdddd	 |S )Nownerr2   r3   method_mappingr1   callercalleer8   rB   )r9   rF   r.   )r   	__class____name__r5   r,   addr   )r-   routerr?   r@   r.   r.   r/   get_metadata_routingh   s,   
z#SimplePipeline.get_metadata_routingN)rK   
__module____qualname____doc__r0   r1   rB   rN   r.   r.   r.   r/   r*   A   s    	r*   Tenable_metadata_routingc                  C   s  t dd} t|  | jjdd d t|  | jjddd tt t|  W d    n1 s1w   Y  t| dd | jjd	d
d tt t| dd W d    n1 sZw   Y  t| ddgd ttdd	t
d djt t jdddd d S )NtestrD   fooparamaliasbarvaluer1   excludecarrotTscore	estimatorrG   r`   rF   )r   r   r1   add_requestpytestraisesAssertionErrorr^   r   add_self_requestr   rL   r	   r   )requestsr.   r.   r/   test_assert_request_is_empty{   s,   

rh   r`   )registry)r`   ri   c                 C   s   |  tt | | jv sJ dS )z=Check that an estimator puts itself in the registry upon fit.N)r1   r:   r;   ri   r_   r.   r.   r/   $test_estimator_puts_self_in_registry   s   rj   zval, res))FF)TF)NF)$UNUSED$F)$WARN$Fzinvalid-inputF)	valid_argTc                 C      t | |ksJ d S r+   )r   valresr.   r.   r/   test_request_type_is_alias      rs   ))FT)TT)NT)rk   T)rl   Trm   )	alias_argFc                 C   ro   r+   )r   rp   r.   r.   r/   test_request_type_is_valid   rt   rv   c                  C   s   G d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s9J |j	jd d dksDJ t| tt
 }|jjd d dksXJ t| d S )Nc                   @      e Zd ZddiZdS )z+test_default_requests.<locals>.OddEstimatorsample_weightTN)rK   rO   rP   $_OddEstimator__metadata_request__fitr.   r.   r.   r/   OddEstimator   s    rz   rx   Trx   metadatar|   rx   )r   r!   r1   rg   lenr   r   rN   r
   r8   r   )rz   odd_requesttrs_requestest_requestr.   r.   r/   test_default_requests   s$   


r   c                  C   sd   G dd dt } G dd d| }G d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                   @   rw   )z+test_default_request_override.<locals>.BasegroupsTN)rK   rO   rP   _Base__metadata_request__splitr.   r.   r.   r/   Base       r   c                   @   rw   )z.test_default_request_override.<locals>.class_1r   sample_domainN)rK   rO   rP   !_class_1__metadata_request__splitr.   r.   r.   r/   class_1   r   r   c                   @   rw   )z.test_default_request_override.<locals>.Class_1r   r   N)rK   rO   rP   !_Class_1__metadata_request__splitr.   r.   r.   r/   Class_1   r   r   splitr   r   N)r   r   _get_metadata_request)r   r   r   r.   r.   r/   test_default_request_override   s   r   c                   C   sD   t jtdd tt dtd W d    d S 1 sw   Y  d S )Nz Can only route and process inputmatchinvalid_methodr   )rc   rd   	TypeErrorr"   r   	my_groupsr.   r.   r.   r/   #test_process_routing_invalid_method  s   "r   c                  C   sR   G dd d} t jtdd t|  dtd W d    d S 1 s"w   Y  d S )Nc                   @   s   e Zd ZdS )z:test_process_routing_invalid_object.<locals>.InvalidObjectN)rK   rO   rP   r.   r.   r.   r/   InvalidObject  s    r   z#either implement the routing methodr   r1   r   )rc   rd   AttributeErrorr"   r   )r   r.   r.   r/   #test_process_routing_invalid_object  s   "r   methoddefaultc                 C   sd   i }t t dfi |}||  }t|tsJ t| ttks#J |j| |d}||ks0J d S )Nr1   )r   )r"   r   
isinstancedictsetkeysr   r6   )r   r   empty_paramsrouted_paramsparams_for_methoddefault_params_for_methodr.   r.   r/   2test_process_routing_empty_params_get_with_default  s   r   c                  C   s,  t t d} | tt t t d} | jtttd t t d} d}tjt	t
|d | jtttd W d    n1 s?w   Y  t t jddd} | jtttd t| jddd t t jddd} | jtttd t| jddtd	 t t jd
dd} | jtttd t| jddtd	 d S )Nr_   rx   zo[sample_weight] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.fitr   Fr1   )r   parentTr   r   rx   alternative_weight)r   )r   r   r1   r:   r;   
my_weightsr   rc   rd   
ValueErrorreescapeset_fit_requestr   
estimator_)clferr_messager.   r.   r/   test_simple_metadata_routing+  s>   


r   c                  C   s   t tt jdddjddddtt jdddjdddjd	dg} d
gdgdg}}}| jt	t
t|||d t| jd jddtd t| jd jdd|d t| jd
 dd|d t| jd
 jdd|d | jt	|d t| jd jdd|d d S )NTFr}   r{   rA   inner_weightsr   r_   outer_weights   r'      )r|   rx   r   r   r   r1   )r   r   r|   r8   r   )r*   r   r
   r   set_transform_requestr   r	   set_predict_requestr1   r:   r;   r   r   r4   transformer_r   rB   )pipelinew1w2w3r.   r.   r/   test_nested_routingd  s`   



r   c                  C   s   t tt jdddjdddtt jdddjddg} dgd	g}}tjt	t
d
d | jttt||d W d    d S 1 sFw   Y  d S )NTFr}   r   r   r_   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|   rx   r   )r*   r   r
   r   r   r   r	   rc   rd   r   r   r   r1   r:   r;   r   )r   r   r   r.   r.   r/   test_nested_routing_conflict  s0   "r   c                  C   s   t t jddd} tjttdd | t	t
jt	td W d    n1 s*w   Y  t t jddd} tjttdd | t	t
jt	td W d    d S 1 sZw   Y  d S )	NTr   r   z4transform got unexpected argument(s) {'other_param'}r   other_paramFz6transform got unexpected argument(s) {'sample_weight'})r   r
   r   rc   rd   r   r   r   r1   r:   r;   r8   r   )trsr.   r.   r/   test_invalid_metadata  s$   "r   c                  C   s   G dd dt } G dd dt }tjtdd |    W d    n1 s'w   Y  dd d dd d d	d
did}t|  | | jdd}dd d dd d d	d
did}t| | | jd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 )z<test_get_metadata_routing.<locals>.TestDefaultsBadMethodNameN)rx   my_paramTrx   r   my_other_paramr   )rK   rO   rP   1_TestDefaultsBadMethodName__metadata_request__fit3_TestDefaultsBadMethodName__metadata_request__score:_TestDefaultsBadMethodName__metadata_request__other_methodr.   r.   r.   r/   TestDefaultsBadMethodName  s    r   c                   @   r   )z/test_get_metadata_routing.<locals>.TestDefaultsN)rx   r   Tr   r   )rK   rO   rP   $_TestDefaults__metadata_request__fit&_TestDefaults__metadata_request__score(_TestDefaults__metadata_request__predictr.   r.   r.   r/   TestDefaults  s    r   z8'MetadataRequest' object has no attribute 'other_method'r   T)r   r   rx   )r   rx   r   )r^   r1   rB   r   )r   r   )r   rc   rd   r   rN   r   set_score_requestr   )r   r   expectedestr.   r.   r/   test_get_metadata_routing  sN   r   c                  C   s   t  } G dd dt}dd i| |< G dd dt}ddi| |< G dd dt}dd i| |< G d	d
 d
t}i | |< |  D ]\}}t| jj|ksLJ t|  dd | d d  q=d S )Nc                   @   s   e Zd ZddiZdd ZdS )z6test_setting_default_requests.<locals>.ExplicitRequestpropNc                 [      | S r+   r.   r-   r:   r;   kwargsr.   r.   r/   r1         z:test_setting_default_requests.<locals>.ExplicitRequest.fit)rK   rO   rP   '_ExplicitRequest__metadata_request__fitr1   r.   r.   r.   r/   ExplicitRequest  s    r   r   c                   @   s   e Zd ZddiZdddZdS )z?test_setting_default_requests.<locals>.ExplicitRequestOverwriter   TNc                 [   r   r+   r.   r-   r:   r;   r   r   r.   r.   r/   r1   *  r   zCtest_setting_default_requests.<locals>.ExplicitRequestOverwrite.fitr+   )rK   rO   rP   0_ExplicitRequestOverwrite__metadata_request__fitr1   r.   r.   r.   r/   ExplicitRequestOverwrite%  s    r   Tc                   @      e Zd ZdddZdS )z6test_setting_default_requests.<locals>.ImplicitRequestNc                 [   r   r+   r.   r   r.   r.   r/   r1   1  r   z:test_setting_default_requests.<locals>.ImplicitRequest.fitr+   rK   rO   rP   r1   r.   r.   r.   r/   ImplicitRequest/  s    r   c                   @   s    e Zd ZdejiZdddZdS )z=test_setting_default_requests.<locals>.ImplicitRequestRemovalr   Nc                 [   r   r+   r.   r   r.   r.   r/   r1   ;  r   zAtest_setting_default_requests.<locals>.ImplicitRequestRemoval.fitr+   )rK   rO   rP   r   UNUSED._ImplicitRequestRemoval__metadata_request__fitr1   r.   r.   r.   r/   ImplicitRequestRemoval6  s    
r   r1   r[   )r   r   itemsr!   r1   rg   r   rN   )
test_casesr   r   r   r   Klassrg   r.   r.   r/   test_setting_default_requests  s   r   c                  C   sN   G dd dt } tjtdd |    W d   dS 1 s w   Y  dS )zFTest that removing a metadata using UNUSED which doesn't exist raises.c                   @   s   e Zd ZdejiZdd ZdS )zFtest_removing_non_existing_param_raises.<locals>.InvalidRequestRemovalr   c                 [   r   r+   r.   r   r.   r.   r/   r1   O  r   zJtest_removing_non_existing_param_raises.<locals>.InvalidRequestRemoval.fitN)rK   rO   rP   r   r   -_InvalidRequestRemoval__metadata_request__fitr1   r.   r.   r.   r/   InvalidRequestRemovalJ  s    
r   zTrying to remove parameterr   N)r   rc   rd   r   rN   )r   r.   r.   r/   'test_removing_non_existing_param_raisesF  s   "r   c                  C   s  t ddd} tjtdd | jddd W d    n1 sw   Y  | jdd d | jdd iks4J | jdd	d | jdd	iksDJ | jdd
d | jdd
iksTJ | jddd | jdd
iksdJ | jddd | jddikstJ | jd	ddhksJ | jd
ddhksJ d S )NrT   r1   rE   r   zThe alias you're setting forr   rU   gffffff?rV   FTrY   )return_alias)r   rc   rd   r   rb   rg   _get_param_names)mmrr.   r.   r/   test_method_metadata_requestV  s    r   c                  C   s   G dd dt } ttd  ttt  tdd}|jjddd t|}t|dd	 |jjddiks6J t|  }t|dd	 |jjd
d iksKJ d S )Nc                   @   s   e Zd ZddiZdS )z-test_get_routing_for_object.<locals>.Consumerr   N)rK   rO   rP    _Consumer__metadata_request__fitr.   r.   r.   r/   Consumerm  r   r   rT   rD   rU   rY   rV   r1   r[   r   )r   r   r!   objectr   r1   rb   rg   )r   mr
mr_factoryr.   r.   r/   test_get_routing_for_objectk  s   

r   c                  C   s   t dd} | jddhdt ksJ tdd} | jjddd | jddhddhks,J tdd} | jjddd | jdddhddhksGJ d	S )
z@Test that MetadataRequest().consumes() method works as expected.rT   rD   r1   rU   r   r=   TrV   rY   N)r   consumesr   r   r1   rb   )requestr.   r.   r/   %test_metadata_request_consumes_method~  s   


 r   c                  C   sl   t t jddddhdhft t jdddddhdhfg} | D ]\}}}| jd|d|ks3J q!dS )	z=Test that MetadataRouter().consumes method works as expected.Tr   r_   rx   r   r1   r   N)r   r	   r   rN   r   )casesobjinputoutputr.   r.   r/   $test_metadata_router_consumes_method  s$   r   c                  C   sd   G dd dt } tjtdd | t jdddjttt	d W d    d S 1 s+w   Y  d S )Nc                   @      e Zd ZdejiZdS )z>test_metaestimator_warnings.<locals>.WeightedMetaRegressorWarnrx   N)rK   rO   rP   r   WARN1_WeightedMetaRegressorWarn__metadata_request__fitr.   r.   r.   r/   WeightedMetaRegressorWarn      r  4Support for .* has recently been added to this classr   Fr   r_   )
r   rc   warnsUserWarningr   r   r1   r:   r;   r   )r  r.   r.   r/   test_metaestimator_warnings  s   "r  c                  C   s\   G dd dt } tjtdd t|  djtttd W d    d S 1 s'w   Y  d S )Nc                   @   r   )z7test_estimator_warnings.<locals>.ConsumingRegressorWarnrx   N)rK   rO   rP   r   r   ._ConsumingRegressorWarn__metadata_request__fitr.   r.   r.   r/   ConsumingRegressorWarn  r  r  r  r   r_   r   )	r	   rc   r  r  r   r1   r:   r;   r   )r  r.   r.   r/   test_estimator_warnings  s   "r	  zobj, stringrT   r1   r   rU   rY   rV   z{'foo': 'bar'}rD   z{}rB   rG   ra   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                 C   ro   r+   )str)r   stringr.   r.   r/   test_string_representations  s   r  z%obj, method, inputs, err_cls, err_msgrL   invalidzGiven calleezGiven callerrf   r   z@Given `obj` is neither a `MetadataRequest` nor does it implementr   zUnexpected argsc                 C   sH   t j||d t| |di | W d    d S 1 sw   Y  d S )Nr   r.   )rc   rd   getattr)r   r   inputserr_clserr_msgr.   r.   r/   test_validations  s   #"r  c                  C   s   t  jdddjddd} t| }|d dksJ |d dks!J t  } tD ]}| j||d t||| jv s9J q&t| jttksEJ t  jddd} t| d	ksUJ d S )
Nr1   r8   rG   r   )r1   r8   r   )r1   r1   r^   z([{'caller': 'score', 'callee': 'score'}])r   rL   listr   r   _routesr~   repr)mmmm_listr   r.   r.   r/   test_methodmapping  s    r  c                  C   s
  t dd} | jjddd tdd| }t|jt| ks J |j| us'J t jdd}tddj|d	}t|jt|	 ksDJ |j|	 usMJ t
t jd
dd}tddj|d	}t|jt| ksmJ t|jt|	 kszJ |j| usJ d S )NnestedrD   rW   TrV   rT   r   r   )r   nested_weightsr_   )r   r1   rb   r   rf   r
  _self_requestr	   r   rN   r   r   )r   rM   r   r.   r.   r/   $test_metadatarouter_add_self_request"  s    
r  c                  C   sx   t ddjt jddt jdddd} t| dksJ t ddjt jdd	dt jd
dd} t| dks:J d S )NrT   rD   weightsr   r1   rG   )r   rF   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}}}}r^   T)rF   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   rL   r	   r   r   r
  r   rM   r.   r.   r/   test_metadata_routing_add@  s   

	r  c                  C   s   t ddtt djddjt jddt jdddd	} t| d
ks(J | j	ddddh dks6J | j	ddddh dksDJ | j	ddddddhksRJ | j	dddd| j	ddddksdJ d S )NrT   rD   r_   self_weightsr   transform_weightsr1   rG   )r   rF   a^  {'$self_request': {'fit': {'sample_weight': 'self_weights'}, 'score': {'sample_weight': None}}, 'trs': {'mapping': [{'caller': 'fit', 'callee': 'fit'}], 'router': {'fit': {'sample_weight': 'transform_weights', 'metadata': None}, 'transform': {'sample_weight': None, 'metadata': None}, 'inverse_transform': {'sample_weight': None, 'metadata': None}}}}TF)r   r   ignore_self_request>   r|   r   r!  >   r|   rx   r!  r|   )
r   rf   r   r	   r   rL   r
   r   r
  r   r  r.   r.   r/   %test_metadata_routing_get_param_names_  sL   r#  c                  C   s   G dd dt } tD ]}t|  d| drJ q
G dd dt } tD ]}t|  d| dr1J q#tD ]}t|  d| dsBJ q4d S )Nc                   @   sn   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dZdd Zdd ZdS )/test_method_generation.<locals>.SimpleEstimatorc                 S      d S r+   r.   r-   r:   r;   r.   r.   r/   r1     r   3test_method_generation.<locals>.SimpleEstimator.fitc                 S   r%  r+   r.   r&  r.   r.   r/   fit_transform  r   =test_method_generation.<locals>.SimpleEstimator.fit_transformc                 S   r%  r+   r.   r&  r.   r.   r/   fit_predict  r   ;test_method_generation.<locals>.SimpleEstimator.fit_predictc                 S   r%  r+   r.   r&  r.   r.   r/   partial_fit  r   ;test_method_generation.<locals>.SimpleEstimator.partial_fitc                 S   r%  r+   r.   r-   r:   r.   r.   r/   rB     r   7test_method_generation.<locals>.SimpleEstimator.predictc                 S   r%  r+   r.   r.  r.   r.   r/   predict_proba  r   =test_method_generation.<locals>.SimpleEstimator.predict_probac                 S   r%  r+   r.   r.  r.   r.   r/   predict_log_proba  r   Atest_method_generation.<locals>.SimpleEstimator.predict_log_probac                 S   r%  r+   r.   r.  r.   r.   r/   decision_function  r   Atest_method_generation.<locals>.SimpleEstimator.decision_functionc                 S   r%  r+   r.   r&  r.   r.   r/   r^     r   5test_method_generation.<locals>.SimpleEstimator.scoreNc                 S   r%  r+   r.   r&  r.   r.   r/   r     r   5test_method_generation.<locals>.SimpleEstimator.splitc                 S   r%  r+   r.   r.  r.   r.   r/   r8     r   9test_method_generation.<locals>.SimpleEstimator.transformc                 S   r%  r+   r.   r.  r.   r.   r/   inverse_transform  r   Atest_method_generation.<locals>.SimpleEstimator.inverse_transformr+   rK   rO   rP   r1   r(  r*  r,  rB   r0  r2  r4  r^   r   r8   r9  r.   r.   r.   r/   SimpleEstimator  s    
r<  set__requestc                   @   s   e Zd ZdddZdddZdddZddd	Zdd
dZdddZdddZ	dddZ
dddZdddZdddZdddZdS )r$  Nc                 S   r%  r+   r.   r-   r:   r;   rx   r.   r.   r/   r1     r   r'  c                 S   r%  r+   r.   r?  r.   r.   r/   r(    r   r)  c                 S   r%  r+   r.   r?  r.   r.   r/   r*    r   r+  c                 S   r%  r+   r.   r?  r.   r.   r/   r,    r   r-  c                 S   r%  r+   r.   r-   r:   rx   r.   r.   r/   rB     r   r/  c                 S   r%  r+   r.   r@  r.   r.   r/   r0    r   r1  c                 S   r%  r+   r.   r@  r.   r.   r/   r2    r   r3  c                 S   r%  r+   r.   r@  r.   r.   r/   r4    r   r5  c                 S   r%  r+   r.   r?  r.   r.   r/   r^     r   r6  c                 S   r%  r+   r.   r?  r.   r.   r/   r     r   r7  c                 S   r%  r+   r.   r@  r.   r.   r/   r8     r   r8  c                 S   r%  r+   r.   r@  r.   r.   r/   r9    r   r:  r+   NNr;  r.   r.   r.   r/   r<    s    










)r   r   hasattrr   r   )r<  r   r.   r.   r/   test_method_generation  s   &'rC  c                  C   s  G dd dt } |  }| jjd d d dksJ | jjd d dks&J |jddd tjtdd	 | j W d    n1 sDw   Y  |j	dd
 tjtdd	 | j W d    n1 sfw   Y  |j	ddd | j |j
dd | jjddddksJ d S )Nc                   @   s*   e Zd ZdddZdddZd	ddZdS )
z/test_composite_methods.<locals>.SimpleEstimatorNc                 S   r%  r+   r.   )r-   r:   r;   rU   rY   r.   r.   r/   r1     r   z3test_composite_methods.<locals>.SimpleEstimator.fitc                 S   r%  r+   r.   )r-   r:   rU   rY   r.   r.   r/   rB     r   z7test_composite_methods.<locals>.SimpleEstimator.predictc                 S   r%  r+   r.   )r-   r:   r   r.   r.   r/   r8     r   z9test_composite_methods.<locals>.SimpleEstimator.transformrA  r+   )rK   rO   rP   r1   rB   r8   r.   r.   r.   r/   r<    s    

r<  )rY   rU   r   )rY   rU   TrT   )rU   rY   z!Conflicting metadata requests forr   )rY   r   )r   rN   r(  rg   r*  r   rc   rd   r   r   r   )r<  r   r.   r.   r/   test_composite_methods  s0   


rD  c                	   C   s|   t dd/ tjtdd t jdd W d   n1 sw   Y  W d   dS W d   dS 1 s7w   Y  dS )zCTest that when feature flag disabled, set_{method}_requests raises.FrR   zThis method is only availabler   Tr   N)r   rc   rd   RuntimeErrorr   r   r.   r.   r.   r/   !test_no_feature_flag_raises_error  s   "rF  c                   C   s   t t djttdd dS )zCTest that passing None as metadata when not requested doesn't raiser_   Nr   )r   r	   r1   r:   r;   r.   r.   r.   r/   test_none_metadata_passed'  s   rG  c                  C   sr   G dd dt t} t|  dtt tjtdd t|  djttt	d W d   dS 1 s2w   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                   @   r   )z0test_no_metadata_always_works.<locals>.EstimatorNc                 S   r   r+   r.   )r-   r:   r;   r|   r.   r.   r/   r1   6  r   z4test_no_metadata_always_works.<locals>.Estimator.fitr+   r   r.   r.   r.   r/   	Estimator5  r  rH  r_   z3Estimator has not implemented metadata routing yet.r   r|   N)
r    r   r   r1   r:   r;   rc   rd   NotImplementedErrorr   )rH  r.   r.   r/   test_no_metadata_always_works-  s   "rK  c                  C   sd   t t d} t| g}td}tjt|d |jt	t
dd W d   dS 1 s+w   Y  dS )z}Test that UnsetMetadataPassedError raises the correct error message when
    set_{method}_request is not set in nested cases.r_   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   blahrI  N)r   r   r*   r   r   rc   rd   r   r1   r:   r;   )weighted_metapipemsgr.   r.   r/   %test_unsetmetadatapassederror_correctB  s   
"rP  c                  C   sb   t  } td| fg}td}tjt|d |jtt	dd W d   dS 1 s*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   rL  rI  N)
r
   r   r   r   rc   rd   r   r(  r:   r;   )rQ  rN  rO  r.   r.   r/   ;test_unsetmetadatapassederror_correct_for_composite_methodsS  s   "rR  c                  C   s   G dd dt } td}tjt|d |  d W d   n1 s%w   Y  | j| _|  jdd tjt|d |  d W d   dS 1 sNw   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                   @   r   )z(test_unbound_set_methods_work.<locals>.ANc                 S   r   r+   r.   r?  r.   r.   r/   r1   q  r   z,test_unbound_set_methods_work.<locals>.A.fitr+   r   r.   r.   r.   r/   Ap  r  rS  z>set_fit_request() takes 0 positional argument but 1 were givenr   TNr   )r   r   r   rc   rd   r   r   )rS  error_messager.   r.   r/   test_unbound_set_methods_workf  s   
"rU  )hrQ   r   numpynprc   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*   rh   markparametrizerj   rs   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  rb   rL   r  r   r   r  r  r  r  r#  rC  rD  rF  rG  rK  rP  rR  rU  r.   r.   r.   r/   <module>   s@   8( 


:
#








8
0


L
.







!



,
]
4




