U
    _»{j%‡  ã                   @   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-dŒdd„Z.dd„ Z/d�d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„ ZUd€d�„ ZVd‚dƒ„ ZWd„d…„ ZXd†d‡„ ZYdˆd‰„ ZZdŠd‹„ 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/bwave/python/venv/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 )z–Check 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 )zëUtility 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s†t‚t|ƒ ttƒ ƒ}|jjd d dœks®t‚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   zñIn 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s˜t‚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s”t‚| jddd� | jdd
iks´t‚| jddd� | jddiksÔt‚| jd	d�dhksêt‚| 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s–t‚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sˆt‚|j| 
¡ k	sšt‚ttƒ j	d
d�d�}tdd�j|d	�}t|jƒt| ¡ ƒksÚt‚t|jƒt| 
¡ ƒksôt‚|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s€t‚| j	ddd
d�ddhksœt‚| j	dd
d
d�| j	ddd
d�ksÀt‚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