U
    3d1                  	   @   s  d dl Z d dlZd dl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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 d dlmZ d dlmZ d dl m!Z! d dl"Z"e# 2 e$de% ej&Z'e(dd ede'dD Z)W 5 Q R X dddddgZ*dddd d!d"gZ+e"j,-d#e"j,-d$e"j,j.ed%d&d'd( Z/ee%d)d*d+ Z0d,d- Z1d.d/ Z2d0d1 Z3e"j,4d2e d3d4 Z5d5d6 Z6dS )7    N)walk_packages)	signature)enable_iterative_imputer)enable_halving_search_cv)IS_PYPY)check_docstring_parameters)_get_func_name)ignore_warnings)all_estimators)_enforce_estimator_tags_y)_enforce_estimator_tags_X)_construct_instance)
sp_versionparse_version)_is_deprecated)make_classificationLogisticRegression)FunctionTransformerignorec                 C   s,   g | ]$}d |d ksd|d ks|d qS )z._   z.tests. ).0Zpckgr   r   K/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/tests/test_docstring_parameters.py
<listcomp>+   s    r   sklearn.)prefixpathz%sklearn.utils.deprecation.load_mlcompzsklearn.pipeline.make_pipelinezsklearn.pipeline.make_unionz%sklearn.utils.extmath.safe_sparse_dotzsklearn.utils._joblibfitZscoreZfit_predictZfit_transformZpartial_fitZpredictzignore::FutureWarningzignore::DeprecationWarningztest segfaults on PyPyreasonc                     sZ  t jddd ddlm}  g }tD ]  dr4q" dkr>q"tjdd	 t	 }W 5 Q R X t
|t
j}d
d |D }|D ]\}}g }|tks|drqt
|rqtjdd	}| |}W 5 Q R X t|rtd| |d f t|dd }	t|	rqn|	d k	r"|t|j|7 }|jD ]l}
t||
}t|rDq(d }|
tkr~t|}d|jkr~|jd jd kr~dg}t||d}||7 }q(||7 }qt
|t
j} fdd|D }|D ]j\}}|drܐq|dkr drqt|tfddtD st|s|t|7 }qq"d|}t|dkrVt d| d S )Nnumpydocz+numpydoc is required to test the docstringsr   r   	docscrapez	.conftestzsklearn.utils.fixesT)recordc                 S   s    g | ]}|d  j dr|qS )r   sklearn)
__module__
startswith)r   clsr   r   r   r   b   s      z-test_docstring_parameters.<locals>.<listcomp>_z"Error for __init__ of %s in %s:
%s__init__y)r   c                    s   g | ]}|d  j  kr|qS )r   )r&   )r   fnnamer   r   r      s      configurationsetupc                 3   s   | ]}| kV  qd S )Nr   )r   d)name_r   r   	<genexpr>   s     z,test_docstring_parameters.<locals>.<genexpr>
zDocstring Error:
)!pytestimportorskipr!   r#   PUBLIC_MODULESendswithwarningscatch_warnings	importlibimport_moduleinspect
getmembersisclass_DOCSTRING_IGNORESr'   
isabstractClassDoclenRuntimeErrorgetattrr   r   r*   methods_METHODS_IGNORE_NONE_Yr   
parametersdefault
isfunctionr   anyjoinAssertionError)r#   Z	incorrectmoduleclassescnamer(   Zthis_incorrectwZcdocZcls_initmethod_namemethodZparam_ignoresigresultZ	functionsfnamefuncmsgr   )r.   r2   r   test_docstring_parametersH   sv     










rY   categoryc               	   C   s~   t tjddD ]j\} }}tr.d|ksd|kr.qt|}zt|}W n tk
r^   Y qY nX d|kst	dd| fqd S )Nr   )r   Z_svmlight_format_ioz feature_extraction._hashing_fast	z""%s" has tabs, please remove them zor add it to the ignore list)
r   r%   __path__r   r;   r<   r=   	getsourceIOErrorrM   )importermodnameispkgmodsourcer   r   r   	test_tabs   s     


re   c                 C   s   | t  dddgiS )NCg?r   r   )ZSearchCVr   r   r   _construct_searchcv_instance   s    rg   c                 C   s\   | j dkr | ddddgfgdS | j dkr<| dt fgd	S | j d
krX| dt fgdS d S )NColumnTransformerZtransformerZpassthroughr   r   )ZtransformersPipelineZclf)ZstepsFeatureUnion)Ztransformer_list)__name__r   r   )	Estimatorr   r   r   $_construct_compose_pipeline_instance   s    


rm   c                 C   sB   t jdddgdddgdddgdddgdddggt jd}| |dS )Nr   r      )Zdtype)
dictionary)nparrayZfloat64)rl   rp   r   r   r   _construct_sparse_coder   s
    *rs   zname, Estimatorc              
   C   s.  t d ddlm} ||}|d }|jdkr<t|}n0|jdkrPt|}n|jdkrdt|}nt	|}|jdkr|j
d	d
 nj|jdkr|j
dd nR|jdks|jdr|j
dd n.|jdkr|j
d	d n|jdkr|j
d	d |jdkr|j
dd |jdkr|j
dd |jdkr6|j
dd |jdkrN|j
dd |jd krf|j
d!d" |jd#krttd$krd%nd&}|j
|d' |jd(kr|j
dd) i }|jd*r|jd+krd,d-d.d/g}n |jd0krdd	d1d2dd3g}d }	n*td4d2dd	d	d5\}}	t||	}	t||}d6| d7 krF||	 n4d8| d7 krn|tj|	|	f  n|||	 |D ]\}
|
j|krq~d9|
j }d:|krq~ttd; t||
jstW 5 Q R X q~t|}d<d= |D }t| |}t| |}|r*td>|j d?| d S )@Nr!   r   r"   Z
Attributes)ZHalvingRandomSearchCVZRandomizedSearchCVZHalvingGridSearchCVZGridSearchCV)rh   ri   rj   ZSparseCoderZSelectKBestro   )kZDummyClassifierZ
stratified)ZstrategyZCCAZPLSr   )Zn_components)ZGaussianRandomProjectionZSparseRandomProjectionZTSNE)Z
perplexityZSequentialFeatureSelectorauto)Zn_features_to_selectZFastICAzunit-variance)ZwhitenZMiniBatchDictionaryLearning   )Z
batch_size)ZKMeansZMiniBatchKMeans)Zn_init)ZMultinomialNBZComplementNBZBernoulliNBZCategoricalNBT)Zforce_alphaZQuantileRegressorz1.6.0Zhighszinterior-point)solverZMDS)Znormalized_stressZ
Vectorizer)ZCountVectorizerZHashingVectorizerZTfidfVectorizerzThis is the first document.z%This document is the second document.zAnd this is the third one.zIs this the first document?ZDictVectorizer)foobar   )rx   Zbaz   )Z	n_samplesZ
n_featuresZn_redundantZ	n_classesZrandom_stateZ1dlabelsZX_typesZ2dlabels zonly rZ   c                 S   s   g | ]
}|j qS r   r-   )r   attrr   r   r   r   J  s     z1test_fit_docstring_attributes.<locals>.<listcomp>zUndocumented attributes for z: )!r5   r6   r!   r#   rB   rk   rg   rm   rs   r   Z
set_paramsr'   r   r   r8   r   r   r   Z	_get_tagsr   rq   Zc_r.   rL   desclowerr	   FutureWarninghasattrrM   _get_all_fitted_attributesset
difference)r.   rl   r#   doc
attributesZestrw   Zskipped_attributesXr+   r}   r~   fit_attrZfit_attr_namesZundocumented_attrsr   r   r   test_fit_docstring_attributes   s    















 r   c                 C   s   t | j }t r tjdtd t| jD ]R}t	| j|}t
|tsLq0zt	| | W n ttfk
rv   Y q0Y nX || q0W 5 Q R X dd |D S )zBGet all the fitted attributes of an estimator including propertieserrorrZ   c                 S   s$   g | ]}| d r|d s|qS )r)   )r8   r'   )r   rt   r   r   r   r   i  s     
 
 z._get_all_fitted_attributes.<locals>.<listcomp>)list__dict__keysr9   r:   filterwarningsr   dir	__class__rE   
isinstancepropertyAttributeErrorappend)Z	estimatorr   r.   objr   r   r   r   S  s    


r   )7r=   r9   r;   pkgutilr   r   Znumpyrq   Zsklearn.experimentalr   r   r%   Zsklearn.utilsr   Zsklearn.utils._testingr   r   r	   r
   Zsklearn.utils.estimator_checksr   r   r   Zsklearn.utils.fixesr   r   Zsklearn.utils.deprecationr   Zsklearn.datasetsr   Zsklearn.linear_modelr   Zsklearn.preprocessingr   r5   r:   simplefilterr   r]   Zsklearn_pathr   r7   r@   rG   markr   ZskipifrY   re   rg   rm   rs   Zparametrizer   r   r   r   r   r   <module>   sp   





P

	
 	