U
    3dM                  $   @   sB  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ZddlmZmZmZmZmZ ddlmZ ddlmZmZmZ dd	lmZmZm Z 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. ddl/m0Z0 ddl1Z1ddl2m3Z3 ddl2m4Z4 ddl5m6Z6 ddl#m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl<m>Z> ddl?m@Z@ ddl?mAZA ddl?mBZB ddl?mCZC ddlDmEZE ddl(mFZF ddlGmHZHmIZI ddl*mJZJmKZK dd l/mLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY d!d" ZZdd$d%Z[ej\]d&ee[d#d'd(fe[d%fee[d)d%fe=d*d+d,fe=d#d-d.d/d0d1fgd2d3 Z^dd4d5Z_ePe`e_ d6d7 Zad8d9 Zbd:d; Zcd<d= Zdej\]d>ed d?d@ Zee+dAdB ZfdCdD ZgdEdF ZhdGdH ZidIdJ ZjePe`ej dKdL Zkej\j]dMe_ eNdNdOdP Zlej\j]dMe_ eNdNdQdR ZmdSdT Zne`ee_ eEe=d#d+ge`ej en Zoej\j]dMeoeNdNdUdV ZpdWdXgZqdYdZ Zrd[d\ e_d]D Zsej\j]d]eseNdNd^d_ Ztd`d\ e_ D Zudadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddg$Zvej\j]dMeueNdNdd Zwej\]ddd\ e) D dd Zxej\j]dMe_ eNdNdd Zyej\]deeeee e!e"e&e'eeeeeegdd Zze`ee_d]eEe7 e8 e9dde$ddgZ{ej\j]dMe{eNdNdd Z|ej\j]dMe{eNdNdd Z}ej\j]dMe{eNdNdd Z~dS )z.
General tests for all estimators in sklearn.
    N)isgenerator	signature)productchain)partial)AffinityPropagationBirch	MeanShiftOPTICSSpectralClustering)
make_blobs)IsomapTSNELocallyLinearEmbedding)LocalOutlierFactorKNeighborsClassifierKNeighborsRegressorRadiusNeighborsClassifierRadiusNeighborsRegressor)FunctionTransformer)LabelPropagationLabelSpreading)all_estimators)ignore_warnings)ConvergenceWarning)FitFailedWarning)check_estimator)enable_iterative_imputer)enable_halving_search_cv)PCA)StandardScalerMinMaxScalerOneHotEncoder)LinearClassifierMixin)LogisticRegression)Ridge)GridSearchCV)RandomizedSearchCV)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_param_validation'check_transformer_get_feature_names_out.check_transformer_get_feature_names_out_pandascheck_set_output_transform!check_set_output_transform_pandas$check_global_ouptut_transform_pandas!check_get_feature_names_out_errorc                  C   s4   t  D ](\} }d| }|  drt|qd S )NzDBase estimators such as {0} should not be included in all_estimatorsbase)r   formatlower
startswithAssertionError)name	Estimatormsg rF   =/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/tests/test_common.py test_all_estimator_no_base_classW   s    rH      c                 C   s   d S NrF   )xyrF   rF   rG   _sample_func`   s    rM   zval, expected)rL   z_sample_func(y=1)Zworldg       @)CzLogisticRegression(C=2.0)z	newton-cgZbalancedT)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td S rJ   )r2   rB   )valexpectedrF   rF   rG   test_get_check_estimator_idsd   s    rS   c              	   c   sD   t | dD ]4\}}zt|}W n tk
r6   Y q
Y nX |V  q
d S )Ntype_filter)r   r0   r.   )rU   rC   rD   	estimatorrF   rF   rG   _tested_estimators{   s    
rW   c              	   C   s0   t tttfd t|  ||  W 5 Q R X d S Ncategory)r   FutureWarningr   UserWarningr1   rV   checkrequestrF   rF   rG   test_estimators   s    r`   c                  C   s   t t dd} t| std S )NT)Zgenerate_only)r   r$   r   rB   )Zall_instance_gen_checksrF   rF   rG   "test_check_estimator_generate_only   s    ra   c               
   C   s   t d t } tjtjtjd d}tj|d}tj	|sRt 
d zft| tj}ddgt_t : tdt td}t| tdd	 W 5 Q R X W 5 Q R X W 5 |t_t|  X d S )
NZCythonr   z..zsetup.pyzsetup.py not availableconfigignore__main__)__name__)pytestZimportorskiposgetcwdpathabspathjoinsklearn__path__existsskipsysargvchdirwarningscatch_warningssimplefilterr\   openexecreaddict)cwdZ
setup_pathZsetup_filenameZold_argvfrF   rF   rG   test_configure   s     





,r|   c               	   c   sp   t dd} tjddP | D ]D\}}t|dg }t|r:qd|   krt|tr||fV  qW 5 Q R X d S )N
classifierrT   TrecordZ_required_parametersrP   )	r   rs   rt   getattrlen
get_paramskeys
issubclassr#   )classifiersrC   ZclazzZrequired_parametersrF   rF   rG   _tested_linear_classifiers   s    
 r   zname, Classifierc                 C   s   t | | d S rJ   )r3   )rC   
ClassifierrF   rF   rG   -test_class_weight_balanced_linear_classifiers   s    r   c                  C   s   t jtjddd d} dd | D }|dg D ]\}d|kr<q.trRd	|ks.d
|krRq.t|dd}t|ddD ]}t||sjtd	||qjq.d S )Nsklearn.c                 S   s   d S rJ   rF   _rF   rF   rG   <lambda>       z-test_import_all_consistency.<locals>.<lambda>)ri   prefixonerrorc                 S   s   g | ]\}}}|qS rF   rF   ).0r   modnamerF   rF   rG   
<listcomp>   s     z/test_import_all_consistency.<locals>.<listcomp>rl   z.tests.Z_svmlight_format_ioz feature_extraction._hashing_fastdummy)fromlist__all__rF   z#Module '{0}' has no attribute '{1}')
pkgutilwalk_packagesrl   rm   r+   
__import__r   hasattrrB   r?   )pkgsZsubmodsr   packagerC   rF   rF   rG   test_import_all_consistency   s*       r   c                  C   sR   d} t jtjdd dD ]4\}}}d|ks|ds|| kr>q|tjkstqd S )N)utilstestsr>   setupZconftestc                 S   s   d S rJ   rF   r   rF   rF   rG   r      r   z3test_root_import_all_completeness.<locals>.<lambda>)ri   r   .r   )r   r   rl   rm   rA   r   rB   )Z
EXCEPTIONSr   r   rF   rF   rG   !test_root_import_all_completeness   s     r   c                     sb   t d dddhdd tjtjddD  fd	d
 D } | g ks^td| d S )Nz(?x)
                                      \.externals(\.|$)|
                                      \.tests(\.|$)|
                                      \._
                                      zsklearn.datasets.datazsklearn.datasets.descrzsklearn.datasets.imagesc                 S   s   i | ]\}}}||qS rF   rF   )r   r   rC   ispkgrF   rF   rG   
<dictcomp>   s    z1test_all_tests_are_importable.<locals>.<dictcomp>r   )r   c                    s6   g | ].\}}|r|kr  |s|d  kr|qS )z.tests)search)r   rC   r   ZHAS_TESTS_EXCEPTIONSlookupZresource_modulesrF   rG   r      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compiler   r   rl   rm   itemsrB   r?   )Zmissing_testsrF   r   rG   test_all_tests_are_importable   s$    
r   c               	   C   sN   d} t jt| d tt W 5 Q R X t jt| d ttg W 5 Q R X d S )Nz8Passing a class was deprecated.* isn't supported anymore)match)rf   Zraises	TypeErrorr   r$   r4   rE   rF   rF   rG   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|k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|krddini }| t
t | |fddi|jdd}t| |V  qd S )Nalphag?      ?rN   Zmin_resources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SearchCVrD   Z
param_gridZinit_paramsZextra_paramsZ	search_cvrF   rF   rG   _generate_search_cv_instances  sR    

 r   c              	   C   s*   t ttttfd ||  W 5 Q R X d S rX   )r   r[   r   r\   r   r]   rF   rF   rG   test_search_cvA  s    r   rV   )idsc                 C   sH   t | }| D ]2\}}tt| }|dkr4|tf}t||stqdS )z$Check that estimator tags are valid.Z_xfail_checksN)r-   r   typer,   ry   
isinstancerB   )rV   tagsrC   tagZcorrect_tagsrF   rF   rG   test_valid_tag_typesQ  s    r   c                 C   s   t |  t| jj|  d S rJ   )r1   r6   	__class__re   )rV   rF   rF   rG   &test_check_n_features_in_after_fitting`  s    r   c                  c   s   t  D ]} t|  }d|kr0| jdddV  qd|krv| jddd}|jjdkrntj|tjj	dd	d
V  q|V  qd|kr| jddV  qd S )N	oob_scoreT)r   Z	bootstrapearly_stoppingrI   )r   n_iter_no_change>   MLPClassifierMLPRegressorzMLP still validates in fitr   )Zmarksr   )r   )
rW   setr   r   r   re   rf   parammarkxfail)rV   Z
est_paramsestrF   rF   rG   _estimators_that_predict_in_fith  s    
 
r   c              
   C   sd   t |  ttdH tjdd}t| jj|  W 5 Q R X |D ]}dt|j	ks>t
q>W 5 Q R X d S )NrY   Tr~   z was fitted without feature names)r1   r   r[   rs   rt   r5   r   re   strmessagerB   )rV   r   warningrF   rF   rG   #test_pandas_column_name_consistency  s     r   ZensembleZkernel_approximationc                 C   s&   t | drdS | jdd }|tkS )Nget_feature_names_outTr   rI   )r   
__module__split"GET_FEATURES_OUT_MODULES_TO_IGNORE)transformermodulerF   rF   rG   '_include_in_get_feature_names_out_check  s    
r   c                 C   s   g | ]}t |r|qS rF   )r   r   r   rF   rF   rG   r     s   r   r   c              	   C   s>   t |  ttd" t| jj|  t| jj|  W 5 Q R X d S rX   )r1   r   r[   r8   r   re   r9   )r   rF   rF   rG   'test_transformers_get_feature_names_out  s      r   c                 C   s   g | ]}t |d r|qS )r   )r   r   rF   rF   rG   r     s    
 ZAdditiveChi2SamplerZ	BinarizerZDictVectorizerZGaussianRandomProjectionZGenericUnivariateSelectZIterativeImputerZIsotonicRegressionZKBinsDiscretizerZ
KNNImputerZMaxAbsScalerr!   ZMissingIndicatorZ
NormalizerZOrdinalEncoderZPowerTransformerZQuantileTransformerZRFEZRFECVZRobustScalerZ	SelectFdrZ	SelectFprZSelectFromModelZ	SelectFweZSelectKBestZSelectPercentileZSequentialFeatureSelectorZSimpleImputerZSparseRandomProjectionZSplineTransformerZStackingClassifierZStackingRegressorr    ZTfidfTransformerZVarianceThresholdZVotingClassifierZVotingRegressorc                 C   s8   | j j}|tkr"tj| ddS t|  t||  d S )Nz0 is not failing with a consistent NotFittedError)reason)r   re   WHITELISTED_FAILING_ESTIMATORSrf   r   r1   r=   )rV   Zestimator_namerF   rF   rG   +test_estimators_get_feature_names_out_error  s    r   rD   c                 C   s   g | ]\}}|qS rF   rF   )r   rC   r   rF   rF   rG   r     s     c                    s^   t | j}dddtddgdgi g g}|D ],  fdd|D }| f |}|jf | q,d	S )
z3Check that init or set_param does not raise errors.g      @Z
helloworldr   g      @rI   c                    s   i | ]
}| qS rF   rF   )r   keyvaluerF   rG   r     s      zMtest_estimators_do_not_raise_errors_in_init_or_set_params.<locals>.<dictcomp>N)r   r   nparrayr   )rD   paramsZsmoke_test_values
new_paramsr   rF   r   rG   9test_estimators_do_not_raise_errors_in_init_or_set_params  s    

r   c                 C   s   | j j}t|  t||  d S rJ   )r   re   r1   r7   rV   rC   rF   rF   rG   test_check_param_validation  s    r   c                 C   sp   t dddd\}}t|}t|d d df }|  }||| t|drX|| t|drl|| d S )NP      r   )Z	n_samplesZ
n_featuresrO   	transformpredict)r   r   ZasfortranarrayroundZfitr   r   r   )rD   Xr   rL   r   rF   rF   rG   !test_f_contiguous_array_estimator  s    



r   F)Zsparse_outputz
one-to-one)Zfeature_names_outc              	   C   sT   | j j}t| ds$td| d t|  ttd t| j j|  W 5 Q R X d S )N
set_outputz(Skipping check_set_output_transform for z!: Does not support set_output APIrY   )	r   re   r   rf   ro   r1   r   r[   r:   r   rF   rF   rG   test_set_output_transformB  s    

r   c              	   C   sT   | j j}t| ds$td| d t|  ttd t| j j|  W 5 Q R X d S )Nr   z/Skipping check_set_output_transform_pandas for %: Does not support set_output API yetrY   )	r   re   r   rf   ro   r1   r   r[   r;   r   rF   rF   rG    test_set_output_transform_pandasQ  s    

r   c              	   C   sT   | j j}t| ds$td| d t|  ttd t| j j|  W 5 Q R X d S )Nr   z2Skipping check_global_ouptut_transform_pandas for r   rY   )	r   re   r   rf   ro   r1   r   r[   r<   r   rF   rF   rG   #test_global_output_transform_pandas`  s    

r   )rI   )N)__doc__rg   rs   rp   r   r   inspectr   r   	itertoolsr   r   	functoolsr   rf   Znumpyr   Zsklearn.clusterr   r   r	   r
   r   Zsklearn.datasetsr   Zsklearn.manifoldr   r   r   Zsklearn.neighborsr   r   r   r   r   Zsklearn.preprocessingr   Zsklearn.semi_supervisedr   r   Zsklearn.utilsr   Zsklearn.utils._testingr   Zsklearn.exceptionsr   r   Zsklearn.utils.estimator_checksr   rl   Zsklearn.experimentalr   r   Zsklearn.decompositionr   r    r!   r"   Zsklearn.linear_model._baser#   Zsklearn.linear_modelr$   r%   Zsklearn.model_selectionr&   r'   r(   r)   Zsklearn.pipeliner*   r+   Zsklearn.utils._tagsr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   rH   rM   r   ZparametrizerS   rW   listr`   ra   r|   r   r   r   r   r   r   r   r   r   r   r   Zcolumn_name_estimatorsr   r   r   ZGET_FEATURES_OUT_ESTIMATORSr   Z%ESTIMATORS_WITH_GET_FEATURE_NAMES_OUTr   r   r   r   r   ZSET_OUTPUT_ESTIMATORSr   r   r   rF   rF   rF   rG   <module>   s  @	



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


  

  
  
  