a
    ;Za6                     @   s<  d Z ddlZddlZddlZddlZddlZddlmZmZ ddl	m
Z
mZ ddlm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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& 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 dd Z8dXddZ9ej:;dee9ddd fe9dfee9d!dfed"d#d$fedd%d&d'd(d)fgd*d+ Z<dYd,d-Z=e3e>e= d.d/ Z?d0d1 Z@eeAeBfd2d3d4 ZCd5d6 ZDej:;d7eD d8d9 ZEed:d; ZFd<d= ZGd>d? ZHd@dA ZIdBdC ZJe3e>eJ dDdE ZKej:j;dFe= e1dGdHdI ZLej:j;dFe= e1dGdJdK ZMdLdM ZNe>ee= e(edd#ge>eJ eN ZOej:j;dFeOe1dGdNdO ZPg dPZQdQdR ZRdSdT e=dUD ZSej:j;dUeSe1dGdVdW ZTdS )Zz.
General tests for all estimators in sklearn.
    N)isgenerator	signature)productchain)partial)all_estimators)ignore_warnings)ConvergenceWarning)FitFailedWarning)check_estimator)PCA)LinearClassifierMixin)LogisticRegression)Ridge)GridSearchCV)RandomizedSearchCV)enable_halving_search_cv)HalvingGridSearchCV)HalvingRandomSearchCV)make_pipeline)IS_PYPY)_DEFAULT_TAGS
_safe_tags)SkipTestset_random_state)	_construct_instance_set_checking_parameters_get_check_estimator_ids-check_class_weight_balanced_linear_classifierparametrize_with_checks(check_dataframe_column_names_consistency!check_n_features_in_after_fitting'check_transformer_get_feature_names_out.check_transformer_get_feature_names_out_pandasc                  C   s4   t  D ](\} }d| }|  drJ |qd S )NzDBase estimators such as {0} should not be included in all_estimatorsbase)r   formatlower
startswith)name	Estimatormsg r+   8lib/python3.9/site-packages/sklearn/tests/test_common.py test_all_estimator_no_base_class:   s    r-      c                 C   s   d S Nr+   )xyr+   r+   r,   _sample_funcC   s    r2   zval, expected)r1   z_sample_func(y=1)Zworldg       @)CzLogisticRegression(C=2.0)z	newton-cgZbalancedT)Zrandom_stateZsolverclass_weightZ
warm_startz]LogisticRegression(class_weight='balanced',random_state=1,solver='newton-cg',warm_start=True)c                 C   s   t | |ksJ d S r/   )r   )valZexpectedr+   r+   r,   test_get_check_estimator_idsG   s    r6   c              	   c   sB   t | dD ]2\}}zt|}W n ty4   Y q
Y n0 |V  q
d S )Ntype_filter)r   r   r   )r8   r(   r)   	estimatorr+   r+   r,   _tested_estimators^   s    
r:   c                 C   sD   t tttfd  t|  ||  W d    n1 s60    Y  d S Ncategory)r   FutureWarningr	   UserWarningr   r9   ZcheckZrequestr+   r+   r,   test_estimatorsh   s    rA   c                  C   s   t t dd} t| sJ d S )NT)Zgenerate_only)r   r   r   )Zall_instance_gen_checksr+   r+   r,   "test_check_estimator_generate_onlyp   s    rB   r<   c               	   C   s  t d t } tjtjtjd d}tj|d}tj	|sRt 
d zt| tj}ddgt_t X tdt td$}t| tdd	 W d    n1 s0    Y  W d    n1 s0    Y  W |t_t|  n|t_t|  0 d S )
NZCythonr   z..zsetup.pyzsetup.py not availableZconfigignore__main__)__name__)pytestZimportorskiposgetcwdpathabspathjoinsklearn__path__existsskipchdirsysargvwarningscatch_warningssimplefilterr?   openexecreaddict)cwdZ
setup_pathZsetup_filenameZold_argvfr+   r+   r,   test_configureu   s$    





Rr\   c                  c   s   t dd} tjddZ | D ]D\}}t|dg }t|r:qd|   v rt|tr||fV  qW d    n1 sv0    Y  d S )NZ
classifierr7   T)recordZ_required_parametersr4   )	r   rS   rT   getattrlen
get_paramskeys
issubclassr   )Zclassifiersr(   ZclazzZrequired_parametersr+   r+   r,   _tested_linear_classifiers   s    
rc   zname, Classifierc                 C   s   t | | d S r/   )r   )r(   Z
Classifierr+   r+   r,   -test_class_weight_balanced_linear_classifiers   s    rd   c                  C   s   t jtjddd d} dd | D }|dg D ]\}d|v r<q.trRd	|v s.d
|v rRq.t|dd}t|ddD ]}t||sjJ d||qjq.d S )Nsklearn.c                 S   s   d S r/   r+   _r+   r+   r,   <lambda>       z-test_import_all_consistency.<locals>.<lambda>)rI   prefixonerrorc                 S   s   g | ]\}}}|qS r+   r+   ).0rg   modnamer+   r+   r,   
<listcomp>   ri   z/test_import_all_consistency.<locals>.<listcomp>rL   z.tests.Z_svmlight_format_ioz feature_extraction._hashing_fastZdummy)fromlist__all__r+   z#Module '{0}' has no attribute '{1}')	pkgutilwalk_packagesrL   rM   r   
__import__r^   hasattrr%   )ZpkgsZsubmodsrm   packager(   r+   r+   r,   test_import_all_consistency   s$    rv   c                  C   sR   d} t jtjdd dD ]4\}}}d|v s|ds|| v r>q|tjv sJ qd S )N)ZutilsZtestsr$   ZsetupZconftestc                 S   s   d S r/   r+   rf   r+   r+   r,   rh      ri   z3test_root_import_all_completeness.<locals>.<lambda>)rI   rk   .rg   )rq   rr   rL   rM   r'   rp   )Z
EXCEPTIONSrg   rm   r+   r+   r,   !test_root_import_all_completeness   s    
rx   c                     s`   t d h ddd tjtjddD  fdd D } | g ks\J d	| d S )
Nz(?x)
                                      \.externals(\.|$)|
                                      \.tests(\.|$)|
                                      \._
                                      >   zsklearn.datasets.datazsklearn.datasets.imageszsklearn.datasets.descrc                 S   s   i | ]\}}}||qS r+   r+   )rl   rg   r(   ispkgr+   r+   r,   
<dictcomp>   s   z1test_all_tests_are_importable.<locals>.<dictcomp>re   )rj   c                    s6   g | ].\}}|r|vr  |s|d  vr|qS )z.tests)search)rl   r(   ry   ZHAS_TESTS_EXCEPTIONSlookupZresource_modulesr+   r,   rn      s   
z1test_all_tests_are_importable.<locals>.<listcomp>z{{0} do not have `tests` subpackages. Perhaps they require __init__.py or an add_subpackage directive in the parent setup.py)recompilerq   rr   rL   rM   itemsr%   )Zmissing_testsr+   r|   r,   test_all_tests_are_importable   s    
r   c                  C   sv   d} t jt| d tt W d    n1 s00    Y  t jt| d ttg W d    n1 sh0    Y  d S )Nz8Passing a class was deprecated.* isn't supported anymore)match)rF   Zraises	TypeErrorr   r   r   r*   r+   r+   r,   test_class_support_removed   s
    &r   c                  c   s  t ttttgtdddgiftdddgifgD ]P\} \}}t| j}d|v rTddini }| | |fddi|}t| |V  q.t tttt	gtd	ddgiftd
ddgifgD ]`\} \}}t| j}d|v rddini }| t
t | |fddi|jdd}t| |V  qd S )NZalphag?g      ?r3   Zmin_resourcesZsmallestZcv   Zridge__alphaZlogisticregression__Craise)Zerror_score)r   r   r   r   r   r   r   
parametersr   r   r   r   
set_params)ZSearchCVr)   Z
param_gridZinit_paramsZextra_paramsZ	search_cvr+   r+   r,   _generate_search_cv_instances   sP    

r   c                 C   s>   t ttttfd ||  W d    n1 s00    Y  d S r;   )r   r>   r	   r?   r
   r@   r+   r+   r,   test_search_cv'  s    r   r9   )Zidsc                 C   sH   t | }| D ]2\}}tt| }|dkr4|tf}t||sJ qdS )z$Check that estimator tags are valid.Z_xfail_checksN)r   r   typer   rY   
isinstance)r9   Ztagsr(   tagZcorrect_tagsr+   r+   r,   test_valid_tag_types7  s    r   c                 C   s   t |  t| jj|  d S r/   )r   r!   	__class__rE   )r9   r+   r+   r,   &test_check_n_features_in_after_fittingF  s    r   c                  c   s   t  D ]} t|  }d|v r0| jdddV  qd|v rv| jddd}|jjdv rntj|tjj	dd	d
V  q|V  qd|v r| jddV  qd S )N	oob_scoreT)r   Z	bootstrapearly_stoppingr.   )r   n_iter_no_change>   ZMLPClassifierZMLPRegressorzMLP still validates in fitr   )Zmarksr   )r   )
r:   setr`   r   r   rE   rF   ZparammarkZxfail)r9   Z
est_paramsestr+   r+   r,   _estimators_that_predict_in_fitN  s    

r   c              	   C   s   t |  ttdd td }t| jj|  W d    n1 sB0    Y  |D ]}dt|j	vsPJ qPW d    n1 s|0    Y  d S )Nr<   z was fitted without feature names)
r   r   r>   rF   Zwarnsr    r   rE   strmessage)r9   r]   Zwarningr+   r+   r,   #test_pandas_column_name_consistencym  s    "r   )ZclusterZcross_decompositionZdecompositionZdiscriminant_analysisZensembleZimputeZisotonicZkernel_approximationZpreprocessingZmanifoldZ	neighborsZneural_networkZrandom_projectionc                 C   s&   t | drdS | jdd }|tvS )NZget_feature_names_outTrw   r.   )rt   
__module__split"GET_FEATURES_OUT_MODULES_TO_IGNORE)transformermoduler+   r+   r,   '_include_in_get_feature_names_out_check  s    
r   c                 C   s   g | ]}t |r|qS r+   )r   )rl   r   r+   r+   r,   rn     s   rn   r   c                 C   sR   t |  ttd, t| jj|  t| jj|  W d    n1 sD0    Y  d S r;   )r   r   r>   r"   r   rE   r#   )r   r+   r+   r,   'test_transformers_get_feature_names_out  s    r   )r.   )N)U__doc__rG   rS   rQ   r~   rq   inspectr   r   	itertoolsr   r   	functoolsr   rF   Zsklearn.utilsr   Zsklearn.utils._testingr   Zsklearn.exceptionsr	   r
   Zsklearn.utils.estimator_checksr   rL   Zsklearn.decompositionr   Zsklearn.linear_model._baser   Zsklearn.linear_modelr   r   Zsklearn.model_selectionr   r   Zsklearn.experimentalr   r   r   Zsklearn.pipeliner   r   Zsklearn.utils._tagsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r-   r2   r   Zparametrizer6   r:   listrA   rB   DeprecationWarningr>   r\   rc   rd   rv   rx   r   r   r   r   r   r   r   Zcolumn_name_estimatorsr   r   r   ZGET_FEATURES_OUT_ESTIMATORSr   r+   r+   r+   r,   <module>   s   ,	








%,




