o
    `^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   )random_statec                 C   s   || _ || _|| _|| _d S N)name	constructfit_argsskip_methods)selfr"   r#   r%   r$   r   r   _/home/air/shanriGPT/back/venv/lib/python3.10/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   s    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   s    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   s    )r8   r9   r:   c               
      s  dd  G  fdddt } dd | j D }|  tD ]}|  }||}|D ]d}||jv r2q*t||s9J t||sGJ d|j|f |dkrot	
t t|||jd	 |jd
  W d    n1 siw   Y  q*t	
t t|||jd	  W d    n1 sw   Y  q*|j|j  |D ]%}||jv rq|dkrt|||jd	 |jd
  qt|||jd	  q|D ]'}||jv rq| |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)nparangeshapecoef_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 r!   rR   r&   rM   rO   rP   r   r   r'   r9   o      zEtest_metaestimator_delegation.<locals>.SubEstimator.inverse_transformc                 _   rS   r!   rT   rU   r   r   r'   r8   t   rV   z=test_metaestimator_delegation.<locals>.SubEstimator.transformc                 _      |    t|jd S Nr   rR   rG   onesrI   rU   r   r   r'   r<   y      z;test_metaestimator_delegation.<locals>.SubEstimator.predictc                 _   rW   rX   rY   rU   r   r   r'   r:   ~   r[   zAtest_metaestimator_delegation.<locals>.SubEstimator.predict_probac                 _   rW   rX   rY   rU   r   r   r'   r;      r[   zEtest_metaestimator_delegation.<locals>.SubEstimator.predict_log_probac                 _   rW   rX   rY   rU   r   r   r'   decision_function   r[   zEtest_metaestimator_delegation.<locals>.SubEstimator.decision_functionc                 _   s   |    dS )N      ?rT   rL   r   r   r'   r4      rV   z9test_metaestimator_delegation.<locals>.SubEstimator.score)r5   Nr!   )r)   r*   r+   r(   rQ   rR   r9   r8   r<   r:   r;   r\   r4   r   rF   r   r'   SubEstimatorb   s$    







r_   c                 S   s$   g | ]}| d s| ds|qS )_rQ   )
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"   pytestraisesr   getattrr$   rQ   )r_   methodsdelegator_datadelegate	delegatorrC   r   r^   r'   test_metaestimator_delegationW   sr   	0





rq   c                 C   sD  h d|@ rGt | rtt t }dddgi}ntt t }dddgi}|ddhrAd|v r4dd	ini }t| ||fi |S t| |S d
|v redtt t fdtt tddfg}t| |S d|v rt | rd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_estimatorridge__alphag?r]   logisticregression__Cr2   r6   r7   r1   transformer_listtrans1trans2F)	with_mean
estimatorsest1)alphaest2r5   )CN)	r   r   r	   r   r   intersectiontyper   r   )meta_estimatorinit_paramsrr   r2   extra_paramsrw   r   r   r'   _get_instance_with_pipeline   s>   r   c               	   c   s    t dtt  tt D ]?\} }tt|j}t d|j| |h ds(qt	t
 t|D ]}t | t||V  q1W d   n1 sHw   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: 
>   rr   rs   r{   rt   rw   N)printlenr   sortedsetr   
parametersr)   r   r   r   r   r   )r`   	Estimatorsigr   r   r   r'   0_generate_meta_estimator_instances_with_pipeline   s"   	
r   )AdaBoostClassifierAdaBoostRegressorr   BaggingRegressorClassifierChainFrozenEstimatorIterativeImputerOneVsOneClassifierRANSACRegressorr
   r   RegressorChainr   SequentialFeatureSelectorc                 C   s   g | ]
}|j jtvr|qS r   )	__class__r)   )DATA_VALIDATION_META_ESTIMATORS_TO_IGNORE)rb   r,   r   r   r'   rd   )  s
    rd   c                 C   s   | j jS r!   )r   r)   )rr   r   r   r'   _get_meta_estimator_id0  s   r   rr   )idsc                 C   s   t jd}t|  d}|jt jg dtd|d}t| r%|j|d}n|j	d|d}t
| | }t| | }| || t| drGJ d S )Nr      )aabbcc)dtype)size   n_features_in_)rG   randomRandomStater   choicearrayobjectr   normalrandintr   tolistr   rQ   ri   )rr   rng	n_samplesrM   rN   r   r   r'   -test_meta_estimators_delegate_data_validation4  s   r   )<__doc__r?   
contextlibr   inspectr   numpyrG   rj   sklearn.baser   r   sklearn.datasetsr   sklearn.ensembler   sklearn.exceptionsr   sklearn.feature_extraction.textr	   sklearn.feature_selectionr
   r   sklearn.linear_modelr   r   sklearn.model_selectionr   r   sklearn.pipeliner   r   sklearn.preprocessingr   r   sklearn.semi_supervisedr   sklearn.utilsr   -sklearn.utils._test_common.instance_generatorr   sklearn.utils._testingr   r   sklearn.utils.estimator_checksr   r   sklearn.utils.validationr   r   rh   rq   r   r   r   DATA_VALIDATION_META_ESTIMATORSr   markparametrizer   r   r   r   r'   <module>   sz    
&s/