o
    i                     @   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.   r/var/www/html/eduruby.in/lip-sync/lip-sync-env/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yZ
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   rA   r9   )r-   r:   Zpredict_paramsr=   r<   r>   r?   r.   r.   r/   rA   _   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   ZcallerZcalleer8   rA   )r9   rD   r.   )r   	__class____name__r5   r,   addr   )r-   routerr>   r?   r.   r.   r/   get_metadata_routingh   s,   
z#SimplePipeline.get_metadata_routingN)rG   
__module____qualname____doc__r0   r1   rA   rJ   r.   r.   r.   r/   r*   A   s    	r*   TZ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testrB   fooparamaliasbarvaluer1   excludecarrotTscore	estimatorrE   r[   rD   )r   r   r1   add_requestpytestraisesAssertionErrorrY   r   add_self_requestr   rH   r	   r   )requestsr.   r.   r/   test_assert_request_is_empty{   s,   

rc   r[   )registry)r[   rd   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;   rd   rZ   r.   r.   r/   $test_estimator_puts_self_in_registry   s   re   zval, res))FF)TF)NF)$UNUSED$F)$WARN$Fzinvalid-inputF)Z	valid_argTc                 C      t | |ksJ d S r+   )r   valresr.   r.   r/   test_request_type_is_alias      rm   ))FT)TT)NT)rf   T)rg   Trh   )Z	alias_argFc                 C   ri   r+   )r   rj   r.   r.   r/   test_request_type_is_valid   rn   ro   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)rG   rK   rL   Z$_OddEstimator__metadata_request__fitr.   r.   r.   r/   OddEstimator   s    rr   rq   Trq   metadatart   rq   )r   r!   r1   rb   lenr   r   rJ   r
   r8   r   )rr   Zodd_requestZtrs_requestZest_requestr.   r.   r/   test_default_requests   s$   


rw   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                   @   rp   )z+test_default_request_override.<locals>.BasegroupsTN)rG   rK   rL   Z_Base__metadata_request__splitr.   r.   r.   r/   Base       ry   c                   @   rp   )z.test_default_request_override.<locals>.class_1rx   sample_domainN)rG   rK   rL   Z!_class_1__metadata_request__splitr.   r.   r.   r/   class_1   rz   r|   c                   @   rp   )z.test_default_request_override.<locals>.Class_1rx   r{   N)rG   rK   rL   Z!_Class_1__metadata_request__splitr.   r.   r.   r/   Class_1   rz   r}   splitrx   r{   N)r   r   _get_metadata_request)ry   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matchZinvalid_methodrx   )r^   r_   	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)rG   rK   rL   r.   r.   r.   r/   InvalidObject  s    r   z#either implement the routing methodr   r1   r   )r^   r_   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   Zempty_paramsZrouted_paramsZparams_for_methodZ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 )NrZ   rq   zo[sample_weight] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.fitr   Fr1   )r   parentTr   r   rq   alternative_weight)r   )r   r   r1   r:   r;   
my_weightsr   r^   r_   
ValueErrorreescapeset_fit_requestr   
estimator_)ZclfZ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 )NTFru   rs   r@   inner_weightsr   rZ   outer_weights   r'      )rt   rq   r   r   r   r1   )r   r   rt   r8   r   )r*   r   r
   r   set_transform_requestr   r	   set_predict_requestr1   r:   r;   r   r   r4   Ztransformer_r   rA   )pipelinew1w2Z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 )NTFru   r   r   rZ   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   )rt   rq   r   )r*   r   r
   r   r   r   r	   r^   r_   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   r^   r_   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)rq   my_paramTrq   r   my_other_paramr   )rG   rK   rL   Z1_TestDefaultsBadMethodName__metadata_request__fitZ3_TestDefaultsBadMethodName__metadata_request__scoreZ:_TestDefaultsBadMethodName__metadata_request__other_methodr.   r.   r.   r/   TestDefaultsBadMethodName  s    r   c                   @   r   )z/test_get_metadata_routing.<locals>.TestDefaultsN)rq   r   Tr   r   )rG   rK   rL   Z$_TestDefaults__metadata_request__fitZ&_TestDefaults__metadata_request__scoreZ(_TestDefaults__metadata_request__predictr.   r.   r.   r/   TestDefaults  s    r   z8'MetadataRequest' object has no attribute 'other_method'r   T)r   r   rq   )r   rq   r   )rY   r1   rA   r   )r   r   )r   r^   r_   r   rJ   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)rG   rK   rL   Z'_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+   )rG   rK   rL   Z0_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+   rG   rK   rL   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+   )rG   rK   rL   r   UNUSEDZ._ImplicitRequestRemoval__metadata_request__fitr1   r.   r.   r.   r/   ImplicitRequestRemoval6  s    
r   r1   rV   )r   r   itemsr!   r1   rb   r   rJ   )Z
test_casesr   r   r   r   ZKlassrb   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)rG   rK   rL   r   r   Z-_InvalidRequestRemoval__metadata_request__fitr1   r.   r.   r.   r/   InvalidRequestRemovalJ  s    
r   zTrying to remove parameterr   N)r   r^   r_   r   rJ   )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 )NrO   r1   rC   r   zThe alias you're setting forr   rP   gffffff?rQ   FTrT   )return_alias)r   r^   r_   r   r]   rb   _get_param_names)Z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)rG   rK   rL   Z _Consumer__metadata_request__fitr.   r.   r.   r/   Consumerm  rz   r   rO   rB   rP   rT   rQ   r1   rV   r   )r   r   r!   objectr   r1   r]   rb   )r   mrZ
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.rO   rB   r1   rP   r   r<   TrQ   rT   N)r   consumesr   r   r1   r]   )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   rZ   rq   r   r1   r   N)r   r	   r   rJ   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>.WeightedMetaRegressorWarnrq   N)rG   rK   rL   r   WARNZ1_WeightedMetaRegressorWarn__metadata_request__fitr.   r.   r.   r/   WeightedMetaRegressorWarn      r   4Support for .* has recently been added to this classr   Fr   rZ   )
r   r^   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>.ConsumingRegressorWarnrq   N)rG   rK   rL   r   r   Z._ConsumingRegressorWarn__metadata_request__fitr.   r.   r.   r/   ConsumingRegressorWarn  r   r   r   r   rZ   r   )	r	   r^   r   r   r   r1   r:   r;   r   )r   r.   r.   r/   test_estimator_warnings  s   "r   zobj, stringrO   r1   r   rP   rT   rQ   z{'foo': 'bar'}rB   z{}rA   rE   r\   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   ri   r+   )str)r   stringr.   r.   r/   test_string_representations  s   r   z%obj, method, inputs, err_cls, err_msgrH   invalidzGiven calleezGiven callerra   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.   )r^   r_   getattr)r   r   ZinputsZ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   rE   r   )r1   r8   r   )r1   r1   rY   z([{'caller': 'score', 'callee': 'score'}])r   rH   listr   r   Z_routesrv   repr)mmZ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nestedrB   rR   TrQ   rO   r   r   )r   Znested_weightsrZ   )r   r1   r]   r   ra   r   Z_self_requestr	   r   rJ   r   r   )r   rI   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 )NrO   rB   weightsr   r1   rE   )r   rD   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}}}}rY   T)rD   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   rH   r	   r   r   r   r   rI   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 )NrO   rB   rZ   self_weightsr   transform_weightsr1   rE   )r   rD   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   Zignore_self_request>   r   rt   r   >   rq   rt   r   rt   )
r   ra   r   r	   r   rH   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/   rA     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/   rY     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+   rG   rK   rL   r1   r   r   r   rA   r  r  r  rY   r~   r8   r
  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;   rq   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:   rq   r.   r.   r/   rA     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.   r.   r/   rY     r   r  c                 S   r   r+   r.   r  r.   r.   r/   r~     r   r  c                 S   r   r+   r.   r  r.   r.   r/   r8     r   r	  c                 S   r   r+   r.   r  r.   r.   r/   r
    r   r  r+   NNr  r.   r.   r.   r/   r    s    










)r   r   hasattrr   r   )r  r   r.   r.   r/   test_method_generation  s   &'r  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;   rP   rT   r.   r.   r/   r1     r   z3test_composite_methods.<locals>.SimpleEstimator.fitc                 S   r   r+   r.   )r-   r:   rP   rT   r.   r.   r/   rA     r   z7test_composite_methods.<locals>.SimpleEstimator.predictc                 S   r   r+   r.   )r-   r:   r   r.   r.   r/   r8     r   z9test_composite_methods.<locals>.SimpleEstimator.transformr  r+   )rG   rK   rL   r1   rA   r8   r.   r.   r.   r/   r    s    

r  )rT   rP   r   )rT   rP   TrO   )rP   rT   z!Conflicting metadata requests forr   )rT   r   )r   rJ   r   rb   r   r   r^   r_   r   r   r   )r  r   r.   r.   r/   test_composite_methods  s0   


r  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.FrN   zThis method is only availabler   Tr   N)r   r^   r_   RuntimeErrorr   r   r.   r.   r.   r/   !test_no_feature_flag_raises_error  s   "r  c                   C   s   t t djttdd dS )zCTest that passing None as metadata when not requested doesn't raiserZ   Nr   )r   r	   r1   r:   r;   r.   r.   r.   r/   test_none_metadata_passed'  s   r  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;   rt   r.   r.   r/   r1   6  r   z4test_no_metadata_always_works.<locals>.Estimator.fitr+   r   r.   r.   r.   r/   	Estimator5  r   r  rZ   z3Estimator has not implemented metadata routing yet.r   rt   N)
r    r   r   r1   r:   r;   r^   r_   NotImplementedErrorr   )r  r.   r.   r/   test_no_metadata_always_works-  s   "r  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.rZ   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   r^   r_   r   r1   r:   r;   )Zweighted_metapipemsgr.   r.   r/   %test_unsetmetadatapassederror_correctB  s   
"r   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   r  r  N)
r
   r   r   r   r^   r_   r   r   r:   r;   )r!  r  r  r.   r.   r/   ;test_unsetmetadatapassederror_correct_for_composite_methodsS  s   "r"  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   r#  z>set_fit_request() takes 0 positional argument but 1 were givenr   TNr   )r   r   r   r^   r_   r   r   )r#  error_messager.   r.   r/   test_unbound_set_methods_workf  s   
"r%  )hrM   r   numpynpr^   Zsklearnr   Zsklearn.baser   r   Zsklearn.exceptionsr   Zsklearn.linear_modelr   Zsklearn.pipeliner   Z%sklearn.tests.metadata_routing_commonr   r	   r
   r   r   r   r   r   r   r   r   r   Zsklearn.utilsr   Z sklearn.utils._metadata_requestsr   r   r   r   r   r   r   r   Zsklearn.utils.metadata_routingr   r   r   r    r!   r"   Zsklearn.utils.validationr#   randomZRandomStaterngNMZrandr:   randintr;   r   r   Zmy_other_weightsr*   rc   markZparametrizere   rm   ro   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   rH   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r"  r%  r.   r.   r.   r/   <module>   s@   8( 


:
#








8
0


L
.







!



,
]
4




