a
    h,                     @   s  d Z ddlZddlmZ ddlmZ ddlZddl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 dd
lmZmZ ddlmZmZ ddlmZ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& ddl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 G dd dZ1e1ddd e1ddd dgde1ddd dgde1d ed!d"gde1d#eg d$de1d%eg d&de1d'd(d g d)dgZ2d*d+ Z3d,d- Z4d.d/ Z5g d0Z6d1d2 e5 D Z7d3d4 Z8ej9j:d5e7e8d6d7d8 Z;dS )9zCommon tests for metaestimators    N)suppress)	signature)BaseEstimatoris_regressor)make_classification)BaggingClassifier)NotFittedError)TfidfVectorizer)RFERFECV)LogisticRegressionRidge)GridSearchCVRandomizedSearchCV)Pipelinemake_pipeline)MaxAbsScalerStandardScalerSelfTrainingClassifier)all_estimators)_construct_instances)SkipTestset_random_state)_enforce_estimator_tags_X_enforce_estimator_tags_ycheck_is_fittedc                   @   s    e Zd ZdeddfddZdS )DelegatorData r   )Zrandom_statec                 C   s   || _ || _|| _|| _d S N)name	constructfit_argsskip_methods)selfr!   r"   r$   r#   r   r   ]/var/www/html/assistant/venv/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>2       r-   r   c                 C   s   t | ddgiddS )Nparam      )
param_gridcv)r   r,   r   r   r&   r-   5   r.   score)r$   r   c                 C   s   t | ddgidddS )Nr/   r0   r1      )param_distributionsr3   n_iter)r   r,   r   r   r&   r-   :   s   r
   	transforminverse_transformr   )r8   r9   r4   r   )r8   r9   r4   predict_probapredict_log_probapredictr   c                 C   s   t | S r    r   r,   r   r   r&   r-   Q   r.   )r8   r9   r:   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&   wrapperZ   s    z=test_metaestimator_delegation.<locals>.hides.<locals>.wrapper)property)rC   rD   r   rB   r&   hidesY   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>.SubEstimatorr5   Nc                 S   s   || _ || _d S r    )r/   r=   )r%   r/   r=   r   r   r&   r'   c   s    z<test_metaestimator_delegation.<locals>.SubEstimator.__init__c                 _   s   t |jd | _g | _dS )Nr5   T)npZarangeshapeZcoef_Zclasses_r%   Xyargskwargsr   r   r&   fitg   s    z7test_metaestimator_delegation.<locals>.SubEstimator.fitc                 S   s   t |  d S r    r   )r%   r   r   r&   
_check_fitl   s    z>test_metaestimator_delegation.<locals>.SubEstimator._check_fitc                 _   s   |    |S r    rO   r%   rJ   rL   rM   r   r   r&   r9   o   s    zEtest_metaestimator_delegation.<locals>.SubEstimator.inverse_transformc                 _   s   |    |S r    rP   rQ   r   r   r&   r8   t   s    z=test_metaestimator_delegation.<locals>.SubEstimator.transformc                 _   s   |    t|jd S Nr   rO   rG   ZonesrH   rQ   r   r   r&   r<   y   s    z;test_metaestimator_delegation.<locals>.SubEstimator.predictc                 _   s   |    t|jd S rR   rS   rQ   r   r   r&   r:   ~   s    zAtest_metaestimator_delegation.<locals>.SubEstimator.predict_probac                 _   s   |    t|jd S rR   rS   rQ   r   r   r&   r;      s    zEtest_metaestimator_delegation.<locals>.SubEstimator.predict_log_probac                 _   s   |    t|jd S rR   rS   rQ   r   r   r&   decision_function   s    zEtest_metaestimator_delegation.<locals>.SubEstimator.decision_functionc                 _   s   |    dS )N      ?rP   rI   r   r   r&   r4      s    z9test_metaestimator_delegation.<locals>.SubEstimator.score)r5   N)N)r(   r)   r*   r'   rN   rO   r9   r8   r<   r:   r;   rT   r4   r   rF   r   r&   SubEstimatorb   s"   







rW   c                 S   s$   g | ]}| d s| ds|qS )_rN   )
startswith).0kr   r   r&   
<listcomp>   s   z1test_metaestimator_delegation.<locals>.<listcomp>z1%s does not have method %r when its delegate doesr4   r   r5   )r=   z+%s has method %r when its delegate does not)r   __dict__keyssortDELEGATING_METAESTIMATORSr"   r$   hasattrr!   pytestZraisesr   getattrr#   rN   )rW   methodsZdelegator_dataZdelegateZ	delegatorrC   r   rV   r&   test_metaestimator_delegationW   sf    	0


$6


re   c                 C   sH  h d|@ rt | r0tt t }dddgi}ntt t }dddgi}|ddhrd|v rhdd	ini }t| ||fi |S t| |S d
|v rdtt t fdtt tddfg}t| |S d|v rDt | 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}t| |S dS )zLGiven a single meta-estimator instance, generate an instance with a pipeline>   	estimator	regressorbase_estimatorZridge__alphag?rU   Zlogisticregression__Cr2   r6   r7   r1   transformer_listZtrans1Ztrans2F)Z	with_mean
estimatorsZest1)alphaZest2r5   )CN)	r   r   r	   r   r   intersectiontyper   r   )meta_estimatorZinit_paramsrf   r2   Zextra_paramsri   r   r   r&   _get_instance_with_pipeline   s<    

rp   c               	   c   s   t dtt  tt D ]~\} }tt|j}t d|j| |h dsNqt	t
2 t|D ]}t | t||V  q`W d   q1 s0    Y  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".
    zestimators: 
>   rf   rj   rg   ri   rh   N)printlenr   sortedsetr   
parametersr(   rm   r   r   r   rp   )rX   Z	Estimatorsigro   r   r   r&   0_generate_meta_estimator_instances_with_pipeline   s    	
rx   )ZAdaBoostClassifierZAdaBoostRegressorr   ZBaggingRegressorZClassifierChainZFrozenEstimatorZ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)rZ   r+   r   r   r&   r\   )  s   r\   c                 C   s   | j jS r    )ry   r(   )rf   r   r   r&   _get_meta_estimator_id0  s    r{   rf   )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bbcc)Zdtype)size   Zn_features_in_)rG   randomZRandomStater   choicearrayobjectr   normalrandintr   tolistr   rN   ra   )rf   rngZ	n_samplesrJ   rK   r   r   r&   -test_meta_estimators_delegate_data_validation4  s    r   )<__doc__r?   
contextlibr   inspectr   numpyrG   rb   Zsklearn.baser   r   Zsklearn.datasetsr   Zsklearn.ensembler   Zsklearn.exceptionsr   Zsklearn.feature_extraction.textr	   Zsklearn.feature_selectionr
   r   Zsklearn.linear_modelr   r   Zsklearn.model_selectionr   r   Zsklearn.pipeliner   r   Zsklearn.preprocessingr   r   Zsklearn.semi_supervisedr   Zsklearn.utilsr   Z-sklearn.utils._test_common.instance_generatorr   Zsklearn.utils._testingr   r   Zsklearn.utils.estimator_checksr   r   Zsklearn.utils.validationr   r   r`   re   rp   rx   rz   ZDATA_VALIDATION_META_ESTIMATORSr{   markZparametrizer   r   r   r   r&   <module>   sx   
&s/