a
    ;Za@(                     @   s  d Z ddlZddlmZ ddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZm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( ddl)m*Z*m+Z+ G dd dZ,e,ddd e,ddd dgde,ddd dgde,d ed!d"gde,d#ed!d"gde,d$e!g d%de,d&d'd g d(dgZ-d)d* Z.d+d, Z/g d-Z0d.d/ e/ D Z1d0d1 Z2ej3j4d2e1e2d3d4d5 Z5dS )6zCommon tests for metaestimators    N)	signature)BaseEstimator)is_regressor)make_classification)all_estimators)_enforce_estimator_tags_x)_enforce_estimator_tags_ycheck_is_fitted)set_random_state)Pipelinemake_pipeline)GridSearchCVRandomizedSearchCV)TfidfVectorizer)RFERFECV)BaggingClassifier)NotFittedErrorSelfTrainingClassifier)RidgeLogisticRegression)StandardScalerMaxAbsScalerc                   @   s   e Zd Zde fddZdS )DelegatorData c                 C   s   || _ || _|| _|| _d S N)name	constructfit_argsskip_methods)selfr   r   r!   r    r   r   @lib/python3.9/site-packages/sklearn/tests/test_metaestimators.py__init__   s    zDelegatorData.__init__N)__name__
__module____qualname__r   r$   r   r   r   r#   r      s   r   r   c                 C   s   t d| fgS )Nest)r   r(   r   r   r#   <lambda>&       r*   r   c                 C   s   t | ddgiddS )Nparam      )
param_gridcv)r   r)   r   r   r#   r*   )   r+   score)r!   r   c                 C   s   t | ddgidddS )Nr,   r-   r.      )param_distributionsr0   n_iter)r   r)   r   r   r#   r*   .   s   r   	transforminverse_transformr   r   )r5   r6   r1   predict_probapredict_log_probapredictr   c                 C   s   t | S r   r   r)   r   r   r#   r*   C   r+   )r5   r6   r7   c               
      s  dd  G  fdddt } dd | j D }|  tD ]}|  }||}|D ]}||jv rfqVt||stJ t||sJ d|j|f |dkrt	
t, t|||jd	 |jd
  W d    n1 s0    Y  qVt	
t$ t|||jd	  W d    qV1 s0    Y  qV|j|j  |D ]R}||jv rFq2|dkrnt|||jd	 |jd
  nt|||jd	  q2|D ]X}||jv rq| |d}||}t||rJ t||rJ d|j|f qq<d S )Nc                    s   t  fdd}|S )Nc                    s&   | j  jkrtd| j  t | S )Nz%r is hidden)hidden_methodr%   AttributeError	functoolspartial)objmethodr   r#   wrapperL   s    z=test_metaestimator_delegation.<locals>.hides.<locals>.wrapper)property)r@   rA   r   r?   r#   hidesK   s    z,test_metaestimator_delegation.<locals>.hidesc                       s|   e Zd ZdddZd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S )z3test_metaestimator_delegation.<locals>.SubEstimatorr2   Nc                 S   s   || _ || _d S r   )r,   r:   )r"   r,   r:   r   r   r#   r$   U   s    z<test_metaestimator_delegation.<locals>.SubEstimator.__init__c                 _   s   t |jd | _g | _dS )Nr2   T)npZarangeshapeZcoef_Zclasses_r"   Xyargskwargsr   r   r#   fitY   s    z7test_metaestimator_delegation.<locals>.SubEstimator.fitc                 S   s   t |  d S r   r	   )r"   r   r   r#   
_check_fit^   s    z>test_metaestimator_delegation.<locals>.SubEstimator._check_fitc                 _   s   |    |S r   rL   r"   rG   rI   rJ   r   r   r#   r6   a   s    zEtest_metaestimator_delegation.<locals>.SubEstimator.inverse_transformc                 _   s   |    |S r   rM   rN   r   r   r#   r5   f   s    z=test_metaestimator_delegation.<locals>.SubEstimator.transformc                 _   s   |    t|jd S Nr   rL   rD   ZonesrE   rN   r   r   r#   r9   k   s    z;test_metaestimator_delegation.<locals>.SubEstimator.predictc                 _   s   |    t|jd S rO   rP   rN   r   r   r#   r7   p   s    zAtest_metaestimator_delegation.<locals>.SubEstimator.predict_probac                 _   s   |    t|jd S rO   rP   rN   r   r   r#   r8   u   s    zEtest_metaestimator_delegation.<locals>.SubEstimator.predict_log_probac                 _   s   |    t|jd S rO   rP   rN   r   r   r#   decision_functionz   s    zEtest_metaestimator_delegation.<locals>.SubEstimator.decision_functionc                 _   s   |    dS )N      ?rM   rF   r   r   r#   r1      s    z9test_metaestimator_delegation.<locals>.SubEstimator.score)r2   N)N)r%   r&   r'   r$   rK   rL   r6   r5   r9   r7   r8   rQ   r1   r   rC   r   r#   SubEstimatorT   s"   







rT   c                 S   s$   g | ]}| d s| ds|qS )_rK   )
startswith).0kr   r   r#   
<listcomp>   s   z1test_metaestimator_delegation.<locals>.<listcomp>z1%s does not have method %r when its delegate doesr1   r   r2   )r:   z+%s has method %r when its delegate does not)r   __dict__keyssortDELEGATING_METAESTIMATORSr   r!   hasattrr   pytestZraisesr   getattrr    rK   )rT   methodsZdelegator_dataZdelegateZ	delegatorr@   r   rS   r#   test_metaestimator_delegationI   sf    	0


$6


rb   c                  c   sz  t t D ]h\} }tt|j}d|v s:d|v s:d|v rt|r^tt t }dddgi}ntt t	 }dddgi}d|v sd	|v rd
|v rd
dini }|||fi |V  n
||V  q
d|v rdtt t
 fdtt tddfg}||V  q
d|v r
t|r:dtt tddfdtt tddfg}n,dtt t	ddfdtt t	ddfg}||V  q
q
q
dS )zGenerate instances of meta-estimators fed with a pipeline

    Are considered meta-estimators all estimators accepting one of "estimator",
    "base_estimator" or "estimators".
    	estimatorZbase_estimatorZ	regressorZridge__alphag?rR   Zlogisticregression__Cr/   r3   r4   r.   transformer_listZtrans1Ztrans2F)Z	with_meanZ
estimatorsZest1)ZalphaZest2r2   )CN)sortedr   setr   
parametersr   r   r   r   r   r   r   )rU   Z	EstimatorZsigrc   r/   Zextra_paramsrd   r   r   r#   0_generate_meta_estimator_instances_with_pipeline   s>    
ri   )ZAdaBoostClassifierZAdaBoostRegressorr   ZBaggingRegressorZClassifierChainZIterativeImputerZOneVsOneClassifierZRANSACRegressorr   r   ZRegressorChainr   ZSequentialFeatureSelectorc                 C   s   g | ]}|j jtvr|qS r   )	__class__r%   )DATA_VALIDATION_META_ESTIMATORS_TO_IGNORE)rW   r(   r   r   r#   rY     s   rY   c                 C   s   | j jS r   )rj   r%   )rc   r   r   r#   _get_meta_estimator_id  s    rl   rc   )Zidsc                 C   s   t jd}t|  d}|jt jg dtd|d}t| rJ|j|d}n|j	d|d}t
| | }t| | }| || t| drJ d S )Nr      )ZaaZbbZcc)Zdtype)size   Zn_features_in_)rD   ZrandomZRandomStater   ZchoiceZarrayobjectr   ZnormalZrandintr   tolistr   rK   r^   )rc   rngZ	n_samplesrG   rH   r   r   r#   -test_meta_estimators_delegate_data_validation  s    rs   )6__doc__r<   inspectr   ZnumpyrD   r_   Zsklearn.baser   r   Zsklearn.datasetsr   Zsklearn.utilsr   Zsklearn.utils.estimator_checksr   r   Zsklearn.utils.validationr
   Zsklearn.utils._testingr   Zsklearn.pipeliner   r   Zsklearn.model_selectionr   r   Zsklearn.feature_extraction.textr   Zsklearn.feature_selectionr   r   Zsklearn.ensembler   Zsklearn.exceptionsr   Zsklearn.semi_supervisedr   Zsklearn.linear_modelr   r   Zsklearn.preprocessingr   r   r   r]   rb   ri   rk   ZDATA_VALIDATION_META_ESTIMATORSrl   ZmarkZparametrizers   r   r   r   r#   <module>   sr   $s;