U
    ½mœdÜ  ã                   @   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 ddlmZ ddl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)Úassert_allclose_dense_sparse©Ú	normalizec           	      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&   ú[/home/sam/Atlas/atlas_env/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_consistency3   s    
r*   c                 C   sB  | dd�}t  |j¡st‚|jjdks*t‚|jjd dks>t‚|jjtjksPt‚|j	 
d¡s`t‚| dd�}t  |j¡szt‚|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¡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‚d S )NÚtrainr)   )é2,  é;ü r   r,   r   Útest)él  r-   r/   r   )éžI  r-   r0   )ÚspZisspmatrix_csrr   r   r    r   Zdtyper   Zfloat64r   r   r   r   )Ú!fetch_20newsgroups_vectorized_fxtÚbunchZ
fetch_funcr&   r&   r'   Útest_20news_vectorized?   s(    



r4   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   )r2   r$   ZX_ZX_normr&   r&   r'   Útest_20news_normalization]   s    

r6   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>o   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)r2   r3   r@   Zexpected_featurer&   r;   r'   Útest_20news_as_frameg   s    


	rC   c                 C   s   t | ƒ d S )Nr   )r2   Zhide_available_pandasr&   r&   r'   Útest_as_frame_no_pandas€   s    rD   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)Úmatchr7   )r   Zreturn_valuer?   ZraisesÚ
ValueError)r2   Zmock_is_existZ	mock_loadÚerr_msgr&   r&   r'   Útest_outdated_pickle„   s    

rH   )Ú__doc__Ú	functoolsr   Zunittest.mockr   r?   Únumpyr   Zscipy.sparseÚsparser1   Z"sklearn.datasets.tests.test_commonr   r   r   Zsklearn.utils._testingr   Zsklearn.preprocessingr
   r(   r*   r4   r6   rC   rD   rH   r&   r&   r&   r'   Ú<module>   s"    
