a
    �ù»jk  ã                   @   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J ‚| d|jddd… dd�}|j|jdd … ksNJ ‚t |j¡ ¡ d	d
gksjJ ‚t|jƒt|jƒks‚J ‚t|jƒt|j	ƒksšJ ‚|j	d	 }|j|jd	  }|j 
|¡}|j	t |j|k¡d	 d	  }||ksêJ ‚| dddd�\}}t|ƒt|j	ƒk�sJ ‚|j|jjk�s(J ‚d S )NÚallF)ÚsubsetÚshuffleú.. _20newsgroups_dataset:éÿÿÿÿéýÿÿÿ)r   Ú
categoriesr   éþÿÿÿr   é   T)r   r   Z
return_X_y)ÚDESCRÚ
startswithZtarget_namesÚnpÚuniqueÚtargetÚtolistÚlenÚ	filenamesÚdataÚindexÚwhereÚshape)	Úfetch_20newsgroups_fxtr   Z	data2catsZentry1ÚcategoryÚlabelZentry2ÚXÚy© r$   úHE:\soccer\ml_env\Lib\site-packages\sklearn/datasets/tests/test_20news.pyÚtest_20news   s"    ÿ
r&   c                 C   s\   | dd�}t |d ƒt |jƒks$J ‚t |d ƒt |jƒks>J ‚t |d ƒt |jƒksXJ ‚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%   Útest_20news_length_consistency5   s    
r(   c                 C   sj  | dd�}t  |j¡r"|jjdks&J ‚|jjdks6J ‚|jjd dksJJ ‚|jjtjks\J ‚|j	 
d¡slJ ‚| dd�}t  |j¡rŽ|jjdks’J ‚|jjd	ks¢J ‚|jjd d
ks¶J ‚|jjtjksÈJ ‚|j	 
d¡sØJ ‚t| dd�}t||ƒ | dd�}t  |j¡�r|jjdk�sJ ‚|jjdk�s*J ‚|jjd dk�s@J ‚|jjtjk�sTJ ‚|j	 
d¡�sfJ ‚d S )NÚtrainr'   Zcsr)é2,  é;ü r   r*   r   Útest)él  r+   r-   r
   )éžI  r+   r.   )ÚspÚissparser   Úformatr   r   Zdtyper   Zfloat64r   r   r   r   )Ú!fetch_20newsgroups_vectorized_fxtÚbunchZ
fetch_funcr$   r$   r%   Útest_20news_vectorizedA   s(    



 r4   c                 C   sf   | dd�}| dd�}|d d d… }|d d d… }t |t|ƒƒ t tjj| ¡ dd�d¡sbJ ‚d S )NFr   Tr   éd   r   )Zaxis)r	   r   r   ZallcloseZlinalgZnormZtodense)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s2J ‚t‡ fdd„|jjD ƒƒsPJ ‚dD ]}|| ¡ v sTJ ‚qTd| ¡ v szJ ‚|j	j
dksŠJ ‚d S )	NZpandasT©Zas_frame)r*   i<ü c                    s   g | ]}t |ˆ jƒ‘qS r$   )Ú
isinstanceZSparseDtype)Ú.0Úcol©Úpdr$   r%   Ú
<listcomp>q   ó    z(test_20news_as_frame.<locals>.<listcomp>)ÚbeginnerZ	beginnersZ	beginningZ
beginningsZbeginsZbegleyZbegoneZcategory_class)ÚpytestZimportorskipr   Úframer   r
   r   ZdtypesÚkeysr   Úname)r2   r3   rA   Zexpected_featurer$   r;   r%   Útest_20news_as_framei   s    


	rD   c                 C   s   t | ƒ d S )N)r   )r2   Zhide_available_pandasr$   r$   r%   Útest_as_frame_no_pandas‚   s    rE   c              
   C   sœ   t dƒ�€}t dƒ�X}d|_d|_d}tjt|d�� | dd� W d   ƒ n1 sR0    Y  W d   ƒ n1 sp0    Y  W d   ƒ n1 sŽ0    Y  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    

rI   )Ú__doc__Ú	functoolsr   Zunittest.mockr   Únumpyr   r@   Zscipy.sparseÚsparser/   Z"sklearn.datasets.tests.test_commonr   r   r   Zsklearn.preprocessingr   Zsklearn.utils._testingr	   r&   r(   r4   r6   rD   rE   rI   r$   r$   r$   r%   Ú<module>   s    
