a
    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.   _/var/www/html/assistant/venv/lib/python3.9/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 ]Z\}}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}q0| 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\}}|jf 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   	__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 sb0    Y  t| dd | jjd	d
d tt t| dd W d    n1 s0    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   s   t | |ksJ d S r+   )r   valresr.   r.   r/   test_request_type_is_alias   s    rl   ))FT)TT)NT)rf   T)rg   Trh   )Z	alias_argFc                 C   s   t | |ksJ d S r+   )r   ri   r.   r.   r/   test_request_type_is_valid   s    rm   c                  C   s   G dd dt } t|  }|jjddiks.J ttt jjrDJ tt   tt }|jjd d dksrJ |j	jd d dksJ t| tt
 }|jjd d dksJ t| d S )Nc                   @   s   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   ro   rn   Trn   metadatarq   rn   )r   r!   r1   rb   lenr   r   rJ   r
   r8   r   )ro   Zodd_requestZtrs_requestZest_requestr.   r.   r/   test_default_requests   s$    


rt   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                   @   s   e Zd ZddiZdS )z+test_default_request_override.<locals>.BasegroupsTN)rG   rK   rL   Z_Base__metadata_request__splitr.   r.   r.   r/   Base   s   rv   c                   @   s   e Zd ZddiZdS )z.test_default_request_override.<locals>.class_1ru   sample_domainN)rG   rK   rL   Z!_class_1__metadata_request__splitr.   r.   r.   r/   class_1   s   rx   c                   @   s   e Zd ZddiZdS )z.test_default_request_override.<locals>.Class_1ru   rw   N)rG   rK   rL   Z!_Class_1__metadata_request__splitr.   r.   r.   r/   Class_1   s   ry   splitru   rw   N)r   r   _get_metadata_request)rv   rx   ry   r.   r.   r/   test_default_request_override   s    r|   c                   C   sB   t jtdd  tt dtd W d    n1 s40    Y  d S )Nz Can only route and process inputmatchZinvalid_methodru   )r^   r_   	TypeErrorr"   r   	my_groupsr.   r.   r.   r/   #test_process_routing_invalid_method  s    r   c                  C   sP   G dd d} t jtdd  t|  dtd W d    n1 sB0    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sFJ |j| |d}||ks`J 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~0    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   rn   zo[sample_weight] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.fitr}   Fr1   )r   parentTr   r   rn   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 )NTFrr   rp   r@   inner_weightsr   rZ   outer_weights   r'      )rq   rn   r   r   r   r1   )r   r   rq   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    n1 s0    Y  d S )NTFrr   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 estimator(s) requested metadata.r}   )rq   rn   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  s.    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 sT0    Y  t t jddd} tjttdd& | t	t
jt	td W d    n1 s0    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     4r   c                  C   s   G dd dt } G dd dt }tjtdd |    W d    n1 sN0    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                   @   s*   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)rn   my_paramTrn   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                   @   s*   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>.TestDefaultsN)rn   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   rn   )r   rn   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  sL    (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sJ t|  dd | d d  qzd S )Nc                   @   s   e Zd ZddiZdd ZdS )z6test_setting_default_requests.<locals>.ExplicitRequestpropNc                 [   s   | S r+   r.   r-   r:   r;   kwargsr.   r.   r/   r1      s    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                 [   s   | S r+   r.   r-   r:   r;   r   r   r.   r.   r/   r1   *  s    zCtest_setting_default_requests.<locals>.ExplicitRequestOverwrite.fit)N)rG   rK   rL   Z0_ExplicitRequestOverwrite__metadata_request__fitr1   r.   r.   r.   r/   ExplicitRequestOverwrite%  s   r   Tc                   @   s   e Zd ZdddZdS )z6test_setting_default_requests.<locals>.ImplicitRequestNc                 [   s   | S r+   r.   r   r.   r.   r/   r1   1  s    z:test_setting_default_requests.<locals>.ImplicitRequest.fit)N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                 [   s   | S r+   r.   r   r.   r.   r/   r1   ;  s    zAtest_setting_default_requests.<locals>.ImplicitRequestRemoval.fit)N)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   sL   G dd dt } tjtdd |    W d   n1 s>0    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                 [   s   | S r+   r.   r   r.   r.   r/   r1   O  s    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>0    Y  | jdd d | jdd ikshJ | jdd	d | jdd	iksJ | jdd
d | jdd
iksJ | jddd | jdd
iksJ | jddd | jddiksJ | jd	ddhksJ | jd
ddhksJ 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slJ t|  }t|dd	 |jjd
d iksJ 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  s   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sXJ tdd} | jjddd | jdddhddhksJ 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sBJ qBdS )	z=Test that MetadataRouter().consumes method works as expected.Tr   rZ   rn   r   r1   r   N)r   r	   r   rJ   r   )Zcasesobjinputoutputr.   r.   r/   $test_metadata_router_consumes_method  s"    r   c                  C   sb   G dd dt } tjtdd0 | t jdddjttt	d W d    n1 sT0    Y  d S )Nc                   @   s   e Zd ZdejiZdS )z>test_metaestimator_warnings.<locals>.WeightedMetaRegressorWarnrn   N)rG   rK   rL   r   WARNZ1_WeightedMetaRegressorWarn__metadata_request__fitr.   r.   r.   r/   WeightedMetaRegressorWarn  s   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   sZ   G dd dt } tjtdd( t|  djtttd W d    n1 sL0    Y  d S )Nc                   @   s   e Zd ZdejiZdS )z7test_estimator_warnings.<locals>.ConsumingRegressorWarnrn   N)rG   rK   rL   r   r   Z._ConsumingRegressorWarn__metadata_request__fitr.   r.   r.   r/   ConsumingRegressorWarn  s   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   s   t | |ksJ d S 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   sF   t j||d$ t| |f i | W d    n1 s80    Y  d S )Nr}   )r^   r_   getattr)r   r   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s2J |d dksBJ t  } tD ]&}| j||d t||| jv sLJ qLt| jttksJ t  jddd} t| d	ksJ d S )
Nr1   r8   rE   r   )r1   r8   r   )r1   r1   rY   z([{'caller': 'score', 'callee': 'score'}])r   rH   listr   r   Z_routesrs   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sNJ t jdd}tddj|d	}t|jt|	 ksJ |j|	 usJ t
t jd
dd}tddj|d	}t|jt| ksJ t|jt|	 ksJ |j| usJ 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stJ 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sPJ | j	ddddh dkslJ | j	ddddh dksJ | j	ddddddhksJ | j	dddd| j	ddddksJ 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   r   rq   >   rn   rq   r   rq   )
r   ra   r   r	   r   rH   r
   r   r   r   r   r.   r.   r/   %test_metadata_routing_get_param_names_  sJ    
	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rFJ qFtD ]}t|  d| dshJ qhd 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   s   d S r+   r.   r-   r:   r;   r.   r.   r/   r1     s    3test_method_generation.<locals>.SimpleEstimator.fitc                 S   s   d S r+   r.   r   r.   r.   r/   fit_transform  s    =test_method_generation.<locals>.SimpleEstimator.fit_transformc                 S   s   d S r+   r.   r   r.   r.   r/   fit_predict  s    ;test_method_generation.<locals>.SimpleEstimator.fit_predictc                 S   s   d S r+   r.   r   r.   r.   r/   partial_fit  s    ;test_method_generation.<locals>.SimpleEstimator.partial_fitc                 S   s   d S r+   r.   r-   r:   r.   r.   r/   rA     s    7test_method_generation.<locals>.SimpleEstimator.predictc                 S   s   d S r+   r.   r   r.   r.   r/   predict_proba  s    =test_method_generation.<locals>.SimpleEstimator.predict_probac                 S   s   d S r+   r.   r   r.   r.   r/   predict_log_proba  s    Atest_method_generation.<locals>.SimpleEstimator.predict_log_probac                 S   s   d S r+   r.   r   r.   r.   r/   decision_function  s    Atest_method_generation.<locals>.SimpleEstimator.decision_functionc                 S   s   d S r+   r.   r   r.   r.   r/   rY     s    5test_method_generation.<locals>.SimpleEstimator.scoreNc                 S   s   d S r+   r.   r   r.   r.   r/   rz     s    5test_method_generation.<locals>.SimpleEstimator.splitc                 S   s   d S r+   r.   r   r.   r.   r/   r8     s    9test_method_generation.<locals>.SimpleEstimator.transformc                 S   s   d S r+   r.   r   r.   r.   r/   inverse_transform  s    Atest_method_generation.<locals>.SimpleEstimator.inverse_transform)NrG   rK   rL   r1   r   r   r   rA   r   r   r   rY   rz   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   s   d S r+   r.   r-   r:   r;   rn   r.   r.   r/   r1     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   r     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   r     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   r     s    r   c                 S   s   d S r+   r.   r-   r:   rn   r.   r.   r/   rA     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   r     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   r     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   r     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   rY     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   rz     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   r8     s    r   c                 S   s   d S r+   r.   r  r.   r.   r/   r     s    r   )N)N)N)N)N)N)N)N)N)NN)N)Nr  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s2J | jjd d dksLJ |jddd tjtdd	 | j W d    n1 s0    Y  |j	dd
 tjtdd	 | j W d    n1 s0    Y  |j	ddd | j |j
dd | jjddddksJ 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   s   d S r+   r.   )r-   r:   r;   rP   rT   r.   r.   r/   r1     s    z3test_composite_methods.<locals>.SimpleEstimator.fitc                 S   s   d S r+   r.   )r-   r:   rP   rT   r.   r.   r/   rA     s    z7test_composite_methods.<locals>.SimpleEstimator.predictc                 S   s   d S r+   r.   )r-   r:   r   r.   r.   r/   r8     s    z9test_composite_methods.<locals>.SimpleEstimator.transform)NN)NN)N)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  s,    
((

r	  c                	   C   sj   t ddL tjtdd t jdd W d   n1 s>0    Y  W d   n1 s\0    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   sp   G dd dt t} t|  dtt tjtdd( t|  djttt	d W d   n1 sb0    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                   @   s   e Zd ZdddZdS )z0test_no_metadata_always_works.<locals>.EstimatorNc                 S   s   | S r+   r.   )r-   r:   r;   rq   r.   r.   r/   r1   6  s    z4test_no_metadata_always_works.<locals>.Estimator.fit)Nr   r.   r.   r.   r/   	Estimator5  s   r  rZ   z3Estimator has not implemented metadata routing yet.r}   rq   N)
r    r   r   r1   r:   r;   r^   r_   NotImplementedErrorr   )r  r.   r.   r/   test_no_metadata_always_works-  s    r  c                  C   sb   t t d} t| g}td}tjt|d  |jt	t
dd W d   n1 sT0    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   s`   t  } td| fg}td}tjt|d  |jtt	dd W d   n1 sR0    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 sJ0    Y  | j| _|  jdd tjt|d |  d W d   n1 s0    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                   @   s   e Zd ZdddZdS )z(test_unbound_set_methods_work.<locals>.ANc                 S   s   | S r+   r.   r  r.   r.   r/   r1   q  s    z,test_unbound_set_methods_work.<locals>.A.fit)Nr   r.   r.   r.   r/   Ap  s   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   rl   rm   rt   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




