U
    9%e%                     @   s  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	m
Z
mZmZ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 ddlmZmZmZmZmZ dd	lmZ ej !d
Z"d\Z#Z$e"%e#e$Z&e"j'dde#dZ(e"j'dde#dZ)e"%e#Z*e"%e#Z+ej,dddd Z-dddZ.dd Z/dddZ0dd Z1G dd de
eeZ2G dd deeZ3G dd  d e
eeZ4G d!d" d"e	eZ5G d#d$ d$e	eZ6G d%d& d&e
e	eZ7G d'd( d(eeZ8G d)d* d*e
eeZ9G d+d, d,eZ:d-d. Z;ej<=d/d0d1d2d3d4d5d6gd7d8 Z>ej<=d/d9d:d;d<d=d5d>gd?d@ Z?dAdB Z@dCdD ZAdEdF ZBdGdH ZCdIdJ ZDdKdL ZEdMdN ZFdOdP ZGdQdR ZHdSdT ZIdUdV ZJdWdX ZKdYdZ ZLd[d\ ZMej<=d]ed^d_d`jNdadbdcddfed^dedffeOdgdhfed^dejPdie3 djdkfgdldm ZQej<=dne dodpd_dqeRdrfe dod_dpdqeRdsfedtdudpieRdvfed^dedwdxed^deieRdyfe6 dzdpdieSd{fgd|d} ZTd~d ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dS )z 
Metadata Routing Utility Tests
    Nconfig_context)BaseEstimatorClassifierMixinMetaEstimatorMixinRegressorMixinTransformerMixinclone)LinearRegression)metadata_routing)METHODSMethodMetadataRequest_MetadataRequesterrequest_is_aliasrequest_is_valid)MetadataRequestMetadataRouterMethodMappingget_routing_for_objectprocess_routing)check_is_fitted*   )d         )size
   T)Zautousec                	   c   s    t dd dV  W 5 Q R X dS )zEnable SLEP006 for all tests.TZenable_metadata_routingNr    r   r   b/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/tests/test_metadata_routing.pyenable_slep0061   s    r    c                 C   sx   t | tr&| D ]\}}t|j qdS |dkr2g n|}tD ]8}||krHq:t| |}dd |j D }t|r:t	q:dS )zCheck if a metadata request dict is empty.

    One can exclude a method or a list of methods from the check using the
    ``exclude`` parameter.
    Nc                 S   s&   g | ]\}}t |ts|d k	r|qS N
isinstancestr).0propaliasr   r   r   
<listcomp>H   s   
 z+assert_request_is_empty.<locals>.<listcomp>)
r#   r   assert_request_is_emptyrouterr   getattrrequestsitemslenAssertionError)Zmetadata_requestexclude_Zroute_mappingmethodmmrpropsr   r   r   r)   8   s    

r)   c                    s^      D ] \}}t| |}|j|kstq fddtD }|D ]}tt| |jr@tq@d S )Nc                    s   g | ]}| kr|qS r   r   )r%   r2   
dictionaryr   r   r(   U   s      z(assert_request_equal.<locals>.<listcomp>)r-   r+   r,   r/   r   r.   )requestr6   r2   r,   r3   Zempty_methodsr   r5   r   assert_request_equalP   s    
r8   c                 K   s4   t | dsi | _|s&dd | D }|| j|< dS )zUtility function to store passed metadata to a method.

    If record_default is False, kwargs whose values are "default" are skipped.
    This is so that checks on keyword arguments whose default was not changed
    are skipped.

    _recordsc                 S   s(   i | ] \}}t |tr|d kr||qS )defaultr"   )r%   keyvalr   r   r   
<dictcomp>e   s
   
  z#record_metadata.<locals>.<dictcomp>N)hasattrr9   r-   )objr2   Zrecord_defaultkwargsr   r   r   record_metadataZ   s    
rA   c                 K   sZ   t | dt |t }t| t| ks4t| D ]\}}|| |ks<tq<dS )zECheck whether the expected metadata is passed to the object's method.r9   N)r+   dictgetsetkeysr/   r-   )r?   r2   r@   recordsr;   valuer   r   r   check_recorded_metadatam   s    rH   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	MetaRegressorz(A meta-regressor which is only a router.c                 C   s
   || _ d S r!   	estimatorselfrK   r   r   r   __init__x   s    zMetaRegressor.__init__c                 K   s,   t | d|}t| jj||f|jj| _d S Nfit)r   r	   rK   rP   
estimator_rM   Xy
fit_paramsparamsr   r   r   rP   {   s    zMetaRegressor.fitc                 C   s   t | jjdj| jdd}|S Nowner
one-to-onerK   method_mapping)r   	__class____name__addrK   rM   r*   r   r   r   get_metadata_routing   s
     z"MetaRegressor.get_metadata_routingNr^   
__module____qualname____doc__rN   rP   ra   r   r   r   r   rI   u   s   rI   c                   @   s"   e Zd ZdZdddZdd ZdS )RegressorMetadataz!A regressor consuming a metadata.Nc                 C   s   t | d|d | S NrP   sample_weightrA   rM   rS   rT   ri   r   r   r   rP      s    zRegressorMetadata.fitc                 C   s   t jt|dS )N)shape)npZzerosr.   rM   rS   r   r   r   predict   s    zRegressorMetadata.predict)Nr^   rc   rd   re   rP   ro   r   r   r   r   rf      s   
rf   c                   @   s2   e Zd ZdZdd ZdddZdd Zd	d
 ZdS )WeightedMetaRegressorz*A meta-regressor which is also a consumer.c                 C   s
   || _ d S r!   rJ   rL   r   r   r   rN      s    zWeightedMetaRegressor.__init__Nc                 K   s>   t | d|d t| d||d}t| jj||f|jj| _| S rg   rA   r   r	   rK   rP   rQ   )rM   rS   rT   ri   rU   rV   r   r   r   rP      s    zWeightedMetaRegressor.fitc                 K   s    t | d|}| jj|f|jjS )Nro   )r   rQ   ro   rK   )rM   rS   predict_paramsrV   r   r   r   ro      s    zWeightedMetaRegressor.predictc                 C   s$   t | jjd| j| jdd}|S rW   r   r]   r^   add_self_requestr_   rK   r`   r   r   r   ra      s     z*WeightedMetaRegressor.get_metadata_routing)Nr^   rc   rd   re   rN   rP   ro   ra   r   r   r   r   rq      s
   
rq   c                   @   s    e Zd ZdZdd Zdd ZdS )ClassifierNoMetadataz5An estimator which accepts no metadata on any method.c                 C   s   | S r!   r   rM   rS   rT   r   r   r   rP      s    zClassifierNoMetadata.fitc                 C   s   t t|S r!   rm   Zonesr.   rn   r   r   r   ro      s    zClassifierNoMetadata.predictNrp   r   r   r   r   rw      s   rw   c                   @   s"   e Zd ZdZdddZdd ZdS )ClassifierFitMetadataz:An estimator accepting two metadata in its ``fit`` method.Nc                 C   s   t | d||d | S )NrP   ri   brandrj   )rM   rS   rT   ri   r|   r   r   r   rP      s    zClassifierFitMetadata.fitc                 C   s   t t|S r!   ry   rn   r   r   r   ro      s    zClassifierFitMetadata.predict)NNrp   r   r   r   r   rz      s   
rz   c                   @   s*   e Zd ZdZdd Zd	ddZdd ZdS )
SimpleMetaClassifierzEA meta-estimator which also consumes sample_weight itself in ``fit``.c                 C   s
   || _ d S r!   rJ   rL   r   r   r   rN      s    zSimpleMetaClassifier.__init__Nc                 K   s>   t | d|d t| d||d}t| jj||f|jj| _| S rg   rr   )rM   rS   rT   ri   r@   rV   r   r   r   rP      s    zSimpleMetaClassifier.fitc                 C   s$   t | jjd| j| jdd}|S )NrX   rP   r[   rt   r`   r   r   r   ra      s     z)SimpleMetaClassifier.get_metadata_routing)Nrb   r   r   r   r   r}      s   
r}   c                   @   s$   e Zd ZdZdddZdddZdS )	TransformerMetadataz:A transformer which accepts metadata on fit and transform.Nc                 C   s   t | d||d | S )NrP   r|   ri   rj   )rM   rS   rT   r|   ri   r   r   r   rP      s    zTransformerMetadata.fitc                 C   s   t | d|d |S )N	transformrh   rj   rM   rS   ri   r   r   r   r      s    zTransformerMetadata.transform)NNN)N)r^   rc   rd   re   rP   r   r   r   r   r   r~      s   
r~   c                   @   s4   e Zd ZdZdd ZdddZdddZd	d
 ZdS )MetaTransformerzA simple meta-transformer.c                 C   s
   || _ d S r!   transformer)rM   r   r   r   r   rN      s    zMetaTransformer.__init__Nc                 K   s,   t | d|}t| jj||f|jj| _| S rO   )r   r	   r   rP   transformer_rR   r   r   r   rP      s    zMetaTransformer.fitc                 K   s    t | d|}| jj|f|jjS )Nr   )r   r   r   r   )rM   rS   rT   Ztransform_paramsrV   r   r   r   r      s    zMetaTransformer.transformc                 C   s   t | jjdj| jddS )NrX   rZ   )r   r\   )r   r]   r^   r_   r   )rM   r   r   r   ra      s     z$MetaTransformer.get_metadata_routing)N)N)r^   rc   rd   re   rN   rP   r   ra   r   r   r   r   r      s
   

r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )SimplePipelinezEA very simple pipeline, assuming the last step is always a predictor.c                 C   s
   || _ d S r!   )steps)rM   r   r   r   r   rN      s    zSimplePipeline.__init__c           	      K   s   g | _ t| d|}|}t| jd d D ]R\}}t|j||f|d| j}| j | |j|f|d| j}q(| j t| jd j||f|j	j | S )NrP   step_)
steps_r   	enumerater   r	   rP   rC   appendr   	predictor)	rM   rS   rT   rU   rV   X_transformedistepr   r   r   r   rP      s(     zSimplePipeline.fitc                 K   sh   t |  |}t| d|}t| jd d D ]$\}}|j|f|d| j}q*| jd j|f|jjS )Nro   r   r   )r   r   r   r   r   rC   ro   r   )rM   rS   rs   r   rV   r   r   r   r   r   ro     s    zSimplePipeline.predictc              	   C   s   t | jjd}t| jd d D ]F\}}|jf d| |idt jdddjdddjdddi q |j| jd d	d
 |S )NrX   r   r   r\   rP   calleecallerr   ro   rZ   )r   r\   )r   r]   r^   r   r   r_   r   )rM   r*   r   r   r   r   r   ra     s$       
z#SimplePipeline.get_metadata_routingNrv   r   r   r   r   r      s
   	r   c               	   C   s   t dd} t|  | jjdd d t|  | jjddd tt t|  W 5 Q R X t| dd | jjd	d
d tt t| dd W 5 Q R X t| ddgd ttdd	t
d djdt d d S )NtestrX   fooparamr'   barrG   rP   r0   carrotTscorerJ   r\   rK   )r   r)   rP   add_requestpytestraisesr/   r   r   ru   rq   r_   rf   )r,   r   r   r   test_assert_request_is_empty$  s(    

 r   zval, res)FF)TF)NF)$UNUSED$F)$WARN$F)zinvalid-inputF)Z	valid_argTc                 C   s   t | |kstd S r!   )r   r/   r<   resr   r   r   test_request_type_is_aliasD  s    r   )FT)TT)NT)r   T)r   T)Z	alias_argFc                 C   s   t | |kstd S r!   )r   r/   r   r   r   r   test_request_type_is_validU  s    r   c                  C   s   G dd dt } t|  }|jjddiks.tttt jjrDttt   tt	 }|jjd d dksrt|j
jdd ikstt| tt }|jjd d dkstt| d S )Nc                   @   s   e Zd ZddiZdS )z+test_default_requests.<locals>.OddEstimatorri   TN)r^   rc   rd   Z$_OddEstimator__metadata_request__fitr   r   r   r   OddEstimatorg  s    r   ri   Tr{   )r   r   rP   r,   r/   r.   rw   r)   ra   r~   r   rz   )r   Zodd_requestZtrs_requestZest_requestr   r   r   test_default_requestsf  s*    

 

r   c                	   C   s,   t jtdd tt di  W 5 Q R X d S )Nz Can only route and process inputmatchZinvalid_method)r   r   	TypeErrorr   rz   r   r   r   r   #test_process_routing_invalid_method  s    r   c               	   C   s:   G dd d} t jtdd t|  di  W 5 Q R X d S )Nc                   @   s   e Zd ZdS )z:test_process_routing_invalid_object.<locals>.InvalidObjectN)r^   rc   rd   r   r   r   r   InvalidObject  s   r   zhas not implemented the routingr   rP   )r   r   AttributeErrorr   )r   r   r   r   #test_process_routing_invalid_object  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 5 Q R X t t jddd} | jtttd t| jdd d d t t jddd} | jtttd t| jdtd d t t jd	dd} | jtttd
 t| jdtd d d S )NrJ   rh   zg[sample_weight] are passed but are not explicitly set as requested or not for ClassifierFitMetadata.fitr   FrP   r{   Talternative_weight)r   )r}   rw   rP   rS   rT   
my_weightsrz   r   r   
ValueErrorreescapeset_fit_requestrH   rQ   )ZclfZerr_messager   r   r   test_simple_metadata_routing  s4    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dg  }}}| jtt	t
|||d t| jd jdt
d d t| jd jd|d t| jd	 d|d t| jd	 jd|d | jt|d t| jd jd|d d S )NTFr   rh   r   inner_weightsrJ   outer_weights   r      )r|   ri   r   r   r   rP   r   )r   r   r~   r   set_transform_requestrq   rf   rP   rS   rT   	my_groupsrH   r   r   rQ   ro   )pipelinew1w2Zw3r   r   r   test_nested_routing  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 5 Q R X d S )NTFr   rh   r   rJ   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|   ri   r   )r   r   r~   r   r   rq   rf   r   r   r   r   r   rP   rS   rT   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 5 Q R X t t jddd} tjttdd | t	t
jt	td W 5 Q R X d S )	NTrh   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   rP   rS   rT   r   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 5 Q R X 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)ri   my_paramTri   r   my_other_paramr   )r^   rc   rd   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)ri   r   Tr   r   )r^   rc   rd   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   ri   )r   ri   r   )r   rP   ro   r   )r   rh   )r   r   r   r   ra   r8   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st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>.ExplicitRequestr&   Nc                 [   s   | S r!   r   rM   rS   rT   r@   r   r   r   rP   q  s    z:test_setting_default_requests.<locals>.ExplicitRequest.fit)r^   rc   rd   Z'_ExplicitRequest__metadata_request__fitrP   r   r   r   r   ExplicitRequestm  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   rM   rS   rT   r&   r@   r   r   r   rP   {  s    zCtest_setting_default_requests.<locals>.ExplicitRequestOverwrite.fit)N)r^   rc   rd   Z0_ExplicitRequestOverwrite__metadata_request__fitrP   r   r   r   r   ExplicitRequestOverwritev  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   rP     s    z:test_setting_default_requests.<locals>.ImplicitRequest.fit)N)r^   rc   rd   rP   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   rP     s    zAtest_setting_default_requests.<locals>.ImplicitRequestRemoval.fit)N)r^   rc   rd   r   UNUSEDZ._ImplicitRequestRemoval__metadata_request__fitrP   r   r   r   r   ImplicitRequestRemoval  s   
r   rP   r   )	rB   r   r-   r   rP   r,   r/   r)   ra   )Z
test_casesr   r   r   r   ZKlassr,   r   r   r   test_setting_default_requestsi  s    r   c               	   C   s8   G dd dt } tjtdd |    W 5 Q R X 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   rP     s    zJtest_removing_non_existing_param_raises.<locals>.InvalidRequestRemoval.fitN)r^   rc   rd   r   r   Z-_InvalidRequestRemoval__metadata_request__fitrP   r   r   r   r   InvalidRequestRemoval  s   
r   zTrying to remove parameterr   N)r   r   r   r   ra   )r   r   r   r   'test_removing_non_existing_param_raises  s    r   c               	   C   s  t ddd} tjtdd | jddd W 5 Q R X | jdd d | jdd iksTt| jdd	d | jdd	ikstt| jdd
d | jdd
ikst| jddd | jdd
ikst| jddd | jddikst| jd	ddhkst| jd
ddhkstd S )Nr   rP   rY   r2   zThe alias you're setting forr   r   gffffff?r   FTr   )return_alias)r   r   r   r   r   r,   r/   _get_param_names)r3   r   r   r   test_method_metadata_request  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sltt|  }t|dd	 |jjd
d ikstd S )Nc                   @   s   e Zd ZddiZdS )z-test_get_routing_for_object.<locals>.Consumerr&   N)r^   rc   rd   Z _Consumer__metadata_request__fitr   r   r   r   Consumer  s   r   r   rX   r   r   r   rP   r   r&   )	r   r)   r   objectr   rP   r   r,   r/   )r   mrZ
mr_factoryr   r   r   test_get_routing_for_object  s    

r   c               	   C   sN   G dd dt } tjtdd& | t jdddjttt	d W 5 Q R X d S )Nc                   @   s   e Zd ZdejiZdS )z>test_metaestimator_warnings.<locals>.WeightedMetaRegressorWarnri   N)r^   rc   rd   r   WARNZ1_WeightedMetaRegressorWarn__metadata_request__fitr   r   r   r   WeightedMetaRegressorWarn  s   r   4Support for .* has recently been added to this classr   Frh   rJ   )
rq   r   warnsUserWarningr
   r   rP   rS   rT   r   )r   r   r   r   test_metaestimator_warnings  s       r   c               	   C   sF   G dd dt } tjtdd t|  djtttd W 5 Q R X d S )Nc                   @   s   e Zd ZdejiZdS )z6test_estimator_warnings.<locals>.RegressorMetadataWarnri   N)r^   rc   rd   r   r   Z-_RegressorMetadataWarn__metadata_request__fitr   r   r   r   RegressorMetadataWarn  s   r   r   r   rJ   rh   )	rf   r   r   r   rI   rP   rS   rT   r   )r   r   r   r   test_estimator_warnings  s       r   zobj, stringr   rP   r   r   r   r   z{'foo': 'bar'}rX   z{}r   ([{'callee': 'score', 'caller': 'score'}]ro   r   z{'estimator': {'mapping': [{'callee': 'predict', 'caller': 'predict'}], 'router': {'fit': {'sample_weight': None}, 'score': {'sample_weight': None}}}}c                 C   s   t | |kstd S r!   )r$   r/   )r?   stringr   r   r   test_string_representations  s    r   z%obj, method, inputs, err_cls, err_msgr_   invalidr   zGiven calleezGiven callerfrom_strZroutez0route should be 'one-to-one' or a single method!ru   r?   z@Given `obj` is neither a `MetadataRequest` nor does it implementr   zUnexpected argsc              	   C   s.   t j||d t| |f | W 5 Q R X d S )Nr   )r   r   r+   )r?   r2   inputsZerr_clserr_msgr   r   r   test_validations  s    )r   c                  C   sz   t  jdddjddd} t| }|d dks2t|d dksBtt d} t| d	ks\tt d
} t| dksvtd S )NrP   r   )r   r   r   )r   rP   r   )rP   rP   rZ   a  [{'callee': 'fit', 'caller': 'fit'}, {'callee': 'partial_fit', 'caller': 'partial_fit'}, {'callee': 'predict', 'caller': 'predict'}, {'callee': 'predict_proba', 'caller': 'predict_proba'}, {'callee': 'predict_log_proba', 'caller': 'predict_log_proba'}, {'callee': 'decision_function', 'caller': 'decision_function'}, {'callee': 'score', 'caller': 'score'}, {'callee': 'split', 'caller': 'split'}, {'callee': 'transform', 'caller': 'transform'}, {'callee': 'inverse_transform', 'caller': 'inverse_transform'}]r   r   )r   r_   listr/   r   r$   repr)mmZmm_listr   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@t|j| k	sNtt j	dd}tddj|d	}t|jt|
 kst|j|
 k	sttt j	d
dd}tddj|d	}t|jt| kstt|jt|
 kst|j| k	std S )NnestedrX   r   Tr   r   r   rh   )r?   Znested_weightsrJ   )r   rP   r   r   ru   r$   Z_self_requestr/   rf   r   ra   rq   Z_get_metadata_request)r7   r*   r   r   r   r   $test_metadatarouter_add_self_requestK  s     
r   c                  C   sl   t ddjdt jddd} t| dks.tt ddjt jddd	t jd
dd} t| dkshtd S )Nr   rX   rP   weightsrh   )r\   r   z{'est': {'mapping': [{'callee': 'fit', 'caller': 'fit'}], 'router': {'fit': {'sample_weight': 'weights'}, 'score': {'sample_weight': None}}}}r   r   Tz{'est': {'mapping': [{'callee': 'score', 'caller': 'fit'}], 'router': {'fit': {'sample_weight': None}, 'score': {'sample_weight': True}}}})r   r_   rf   r   r$   r/   r   r   r*   r   r   r   test_metadata_routing_addh  s     

r   c                  C   s   t ddtt djddjdt jddd} t| d	ksDt| j	dd
dddddhksbt| j	dddddddhkst| j	ddd
dddhkst| j	dd
d
d| j	ddd
dkstd S )Nr   rX   rJ   Zself_weightsrh   rP   Ztransform_weights)r\   r   a	  {'$self_request': {'fit': {'sample_weight': 'self_weights'}, 'score': {'sample_weight': None}}, 'trs': {'mapping': [{'callee': 'fit', 'caller': 'fit'}], 'router': {'fit': {'brand': None, 'sample_weight': 'transform_weights'}, 'transform': {'sample_weight': None}}}}TF)r2   r   Zignore_self_requestr|   ri   )
r   ru   rq   rf   r   r_   r~   r$   r/   r   r   r   r   r   %test_metadata_routing_get_param_names  s^    
	          r   c                  C   sh   G dd dt } tD ]}t|  d| drtqG dd dt } tD ]}t|  d| dsFtqFd S )Nc                   @   s^   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dZ
dd Zdd ZdS )/test_method_generation.<locals>.SimpleEstimatorc                 S   s   d S r!   r   rx   r   r   r   rP     s    3test_method_generation.<locals>.SimpleEstimator.fitc                 S   s   d S r!   r   rx   r   r   r   partial_fit  s    ;test_method_generation.<locals>.SimpleEstimator.partial_fitc                 S   s   d S r!   r   rn   r   r   r   ro     s    7test_method_generation.<locals>.SimpleEstimator.predictc                 S   s   d S r!   r   rn   r   r   r   predict_proba  s    =test_method_generation.<locals>.SimpleEstimator.predict_probac                 S   s   d S r!   r   rn   r   r   r   predict_log_proba  s    Atest_method_generation.<locals>.SimpleEstimator.predict_log_probac                 S   s   d S r!   r   rn   r   r   r   decision_function  s    Atest_method_generation.<locals>.SimpleEstimator.decision_functionc                 S   s   d S r!   r   rx   r   r   r   r     s    5test_method_generation.<locals>.SimpleEstimator.scoreNc                 S   s   d S r!   r   rx   r   r   r   split  s    5test_method_generation.<locals>.SimpleEstimator.splitc                 S   s   d S r!   r   rn   r   r   r   r     s    9test_method_generation.<locals>.SimpleEstimator.transformc                 S   s   d S r!   r   rn   r   r   r   inverse_transform  s    Atest_method_generation.<locals>.SimpleEstimator.inverse_transform)Nr^   rc   rd   rP   r   ro   r   r  r  r   r  r   r	  r   r   r   r   SimpleEstimator  s   
r  set__requestc                   @   sp   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S ) r   Nc                 S   s   d S r!   r   rk   r   r   r   rP     s    r   c                 S   s   d S r!   r   rk   r   r   r   r     s    r   c                 S   s   d S r!   r   r   r   r   r   ro     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   rk   r   r   r   r     s    r  c                 S   s   d S r!   r   rk   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
  )N)N)N)N)N)N)N)NN)N)Nr  r   r   r   r   r    s   








)r   r   r>   r/   )r  r2   r   r   r   test_method_generation  s      r  c                
   C   sB   t dd. tjtdd t jdd W 5 Q R X W 5 Q R X dS )zCTest that when feature flag disabled, set_{method}_requests raises.Fr   zThis method is only availabler   Trh   N)r   r   r   RuntimeErrorrz   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 raiserJ   Nrh   )rI   rf   rP   rS   rT   r   r   r   r   test_none_metadata_passed  s    r  )N)T)\re   r   numpyrm   r   Zsklearnr   Zsklearn.baser   r   r   r   r   r	   Zsklearn.linear_modelr
   Zsklearn.utilsr   Z sklearn.utils._metadata_requestsr   r   r   r   r   Zsklearn.utils.metadata_routingr   r   r   r   r   Zsklearn.utils.validationr   randomZRandomStaterngNMZrandrS   randintrT   r   r   Zmy_other_weightsZfixturer    r)   r8   rA   rH   rI   rf   rq   rw   rz   r}   r~   r   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r   <module>   s   







/ 

 4#L. 
 
(
,L