U
    _»{jÛ  ã                   @   s    d Z ddlmZ ddlmZ ddlZddlZddlm	Z
 ddlmZmZmZ ddlmZ ddlmZ dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )zTest the 20news downloader, if the data is available,
or if specifically requested via environment variable
(e.g. for CI jobs).é    )Úpartial)ÚpatchN)Úcheck_as_frameÚcheck_pandas_dependency_messageÚcheck_return_X_y©Ú	normalize)Úassert_allclose_dense_sparsec           	      C   s,  | ddd�}|j  d¡st‚| d|jddd… dd�}|j|jdd … ksNt‚t |j¡ ¡ d	d
gksjt‚t|j	ƒt|jƒks‚t‚t|j	ƒt|j
ƒksšt‚|j
d	 }|j|jd	  }|j |¡}|j
t |j|k¡d	 d	  }||ksêt‚| dddd�\}}t|ƒt|j
ƒk�st‚|j|jjk�s(t‚d S )NÚallF)ÚsubsetÚshuffleú.. _20newsgroups_dataset:éÿÿÿÿéýÿÿÿ)r   Ú
categoriesr   éþÿÿÿr   é   T)r   r   Z
return_X_y)ÚDESCRÚ
startswithÚAssertionErrorZtarget_namesÚnpÚuniqueÚtargetÚtolistÚlenÚ	filenamesÚdataÚindexÚwhereÚshape)	Úfetch_20newsgroups_fxtr   Z	data2catsZentry1ÚcategoryÚlabelZentry2ÚXÚy© r%   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/datasets/tests/test_20news.pyÚtest_20news   s&      ÿ
r'   c                 C   s\   | dd�}t |d ƒt |jƒks$t‚t |d ƒt |jƒks>t‚t |d ƒt |jƒksXt‚dS )zuChecks the length consistencies within the bunch

    This is a non-regression test for a bug present in 0.16.1.
    r
   ©r   r   r   r   N)r   r   r   r   r   )r    r   r%   r%   r&   Útest_20news_length_consistency4   s    
r)   c                 C   sj  | dd�}t  |j¡r"|jjdks&t‚|jjdks6t‚|jjd dksJt‚|jjtj	ks\t‚|j
 d¡slt‚| dd�}t  |j¡rŽ|jjdks’t‚|jjd	ks¢t‚|jjd d
ks¶t‚|jjtj	ksÈt‚|j
 d¡sØt‚t| dd�}t||ƒ | dd�}t  |j¡�r|jjdk�st‚|jjdk�s*t‚|jjd dk�s@t‚|jjtj	k�sTt‚|j
 d¡�sft‚d S )NÚtrainr(   Zcsr)é2,  é;ü r   r+   r   Útest)él  r,   r.   r
   )éžI  r,   r/   )ÚspÚissparser   Úformatr   r   r   Zdtyper   Zfloat64r   r   r   r   )Ú!fetch_20newsgroups_vectorized_fxtÚbunchZ
fetch_funcr%   r%   r&   Útest_20news_vectorized@   s(    



 r5   c                 C   sf   | dd�}| dd�}|d d d… }|d d d… }t |t|ƒƒ t tjj| ¡ dd�d¡sbt‚d S )NFr   Tr   éd   r   )Zaxis)r	   r   r   ZallcloseZlinalgZnormZtodenser   )r3   r#   ZX_ZX_normr%   r%   r&   Útest_20news_normalization^   s    

r7   c                    sŽ   t  d¡‰ | dd�}t|| ƒ |j}|jdks2t‚t‡ fdd„|jjD ƒƒsPt‚dD ]}|| 	¡ ksTt‚qTd| 	¡ kszt‚|j
jdksŠt‚d S )	NZpandasT©Zas_frame)r+   i<ü c                    s   g | ]}t |ˆ jƒ‘qS r%   )Ú
isinstanceZSparseDtype)Ú.0Úcol©Úpdr%   r&   Ú
<listcomp>p   s     z(test_20news_as_frame.<locals>.<listcomp>)ÚbeginnerZ	beginnersZ	beginningZ
beginningsZbeginsZbegleyZbegoneZcategory_class)ÚpytestZimportorskipr   Úframer   r   r
   r   ZdtypesÚkeysr   Úname)r3   r4   rA   Zexpected_featurer%   r<   r&   Útest_20news_as_frameh   s    


	rD   c                 C   s   t | ƒ d S )N)r   )r3   Zhide_available_pandasr%   r%   r&   Útest_as_frame_no_pandas�   s    rE   c                 C   s`   t dƒ�N}t dƒ�:}d|_d|_d}tjt|d�� | dd� W 5 Q R X W 5 Q R X W 5 Q R X d S )Nzos.path.existszjoblib.loadT)r#   r$   zThe cached dataset located in)Úmatchr8   )r   Zreturn_valuer@   ZraisesÚ
ValueError)r3   Zmock_is_existZ	mock_loadÚerr_msgr%   r%   r&   Útest_outdated_pickle…   s    

rI   )Ú__doc__Ú	functoolsr   Zunittest.mockr   Únumpyr   r@   Zscipy.sparseÚsparser0   Z"sklearn.datasets.tests.test_commonr   r   r   Zsklearn.preprocessingr   Zsklearn.utils._testingr	   r'   r)   r5   r7   rD   rE   rI   r%   r%   r%   r&   Ú<module>   s    
