a
    �ù»jr\  ã                   @   s¤  d dl Z d dl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 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Zd dlZd d	lmZmZmZmZmZmZm Z m!Z!m"Z"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/ d dl0m1Z1 G dd„ dƒZ2dd„ Z3ej4dd�dd„ ƒZ5ej4dd�dd„ ƒZ6ej4dd„ ƒZ7ej4dd„ ƒZ8ej9 :ddee2g¡dd„ ƒZ;dd „ Z<d!d"„ Z=d#d$„ Z>d%d&„ Z?ej9 :d'd(gd(d)gf¡d*d+„ ƒZ@ej9 :d,d-d.d/g d0¢fd1d2d3g d4¢fd5d6d7d8d9gfg¡d:d;„ ƒZAd<d=„ ZBej9 :d>d?i d@dAgfdBi d@gfdCdDdEidFdGgfg¡dHdI„ ƒZCdJdK„ ZDdLdM„ ZEdNdO„ ZFdPdQ„ ZGej9 :dRedSdTdUdVdWgfe%dXdYdZdVg fe!d[d\dZdVdWgfe"d]d]dZdVd^d_gfed`daddVg fedbdcdAdVg feeddde�dfdgdAdVg fg¡dhdi„ ƒZHej9 :djeejIeJfeejIejIfeejIeJfe!ejIeJfe"ejIejIfe%ejIeJfg¡dkdl„ ƒZKdmdn„ ZLdodp„ ZMdqdr„ ZNdsdt„ ZOdudv„ ZPdwdx„ ZQdydz„ ZRd{d|„ ZSd}d~„ ZTdd€„ ZUdS )�é    N)Úpartial)Ú	resources)ÚPath)ÚdumpsÚloads©ÚMock)Ú	HTTPError)Úurlparse)Úclear_data_homeÚ
fetch_fileÚget_data_homeÚload_breast_cancerÚload_diabetesÚload_digitsÚ
load_filesÚ	load_irisÚload_linnerudÚload_sample_imageÚload_sample_imagesÚ	load_wine)ÚRemoteFileMetadataÚ$_derive_folder_and_filename_from_urlÚ_fetch_remoteÚload_csv_dataÚload_gzip_compressed_csv_data©Úcheck_as_frame)Úscale)ÚBunchc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú
_DummyPathz8Minimal class that implements the os.PathLike interface.c                 C   s
   || _ d S ©N©Úpath)Úselfr#   © r%   úFE:\soccer\ml_env\Lib\site-packages\sklearn/datasets/tests/test_base.pyÚ__init__0   s    z_DummyPath.__init__c                 C   s   | j S r!   r"   )r$   r%   r%   r&   Ú
__fspath__3   s    z_DummyPath.__fspath__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r(   r%   r%   r%   r&   r    -   s   r    c                 C   s   t j | ¡rt | ¡ d S r!   )Úosr#   ÚisdirÚshutilÚrmtreer"   r%   r%   r&   Ú_remove_dir7   s    r1   Úmodule)Úscopec                 c   s    t |  d¡ƒ}|V  t|ƒ d S )NZscikit_learn_data_home_test©ÚstrÚmktempr1   ©Ztmpdir_factoryZtmp_filer%   r%   r&   Ú	data_home<   s    r8   c                 c   s    t |  d¡ƒ}|V  t|ƒ d S )NZscikit_learn_load_files_testr4   r7   r%   r%   r&   Úload_files_rootC   s    r9   c                 c   sB   t j| d�}t j|dd�}| d¡ | ¡  t|ƒV  t|ƒ d S )N©ÚdirF)r;   Údeleteó   Hello World!
)ÚtempfileÚmkdtempÚNamedTemporaryFileÚwriteÚcloser5   r1   )r9   Ztest_category_dir1Zsample_filer%   r%   r&   Útest_category_dir_1J   s    

rC   c                 c   s"   t j| d�}t|ƒV  t|ƒ d S )Nr:   )r>   r?   r5   r1   )r9   Ztest_category_dir2r%   r%   r&   Útest_category_dir_2T   s    
rD   Úpath_containerc                 C   s~   | d ur| |ƒ}t |d�}||ks&J ‚tj |¡s6J ‚| d urF| |ƒ}t|d� tj |¡r`J ‚t |d�}tj |¡szJ ‚d S )N)r8   )r   r-   r#   Úexistsr   )rE   r8   r%   r%   r&   Útest_data_home[   s    


rG   c                 C   s>   t | ƒ}t|jƒdksJ ‚t|jƒdks,J ‚|jd u s:J ‚d S )Nr   )r   ÚlenÚ	filenamesÚtarget_namesÚDESCR)r9   Úresr%   r%   r&   Útest_default_empty_load_fileso   s    rM   c                 C   sN   t |ƒ}t|jƒdksJ ‚t|jƒdks,J ‚|jd u s:J ‚|jdgksJJ ‚d S )Né   é   r=   )r   rH   rI   rJ   rK   Údata©rC   rD   r9   rL   r%   r%   r&   Útest_default_load_filesv   s
    rR   c                 C   sp   t j | ¡ t j¡ ¡ }t|d|gdd�}t|jƒdks<J ‚t|j	ƒdksNJ ‚|j
dks\J ‚|jdgkslJ ‚d S )NÚtestúutf-8)ÚdescriptionÚ
categoriesÚencodingrN   zHello World!
)r-   r#   ÚabspathÚsplitÚsepÚpopr   rH   rI   rJ   rK   rP   )rC   rD   r9   ÚcategoryrL   r%   r%   r&   Ú.test_load_files_w_categories_desc_and_encoding~   s    
ÿr]   c                 C   sT   t |dd�}t|jƒdksJ ‚t|jƒdks0J ‚|jd u s>J ‚| d¡d u sPJ ‚d S )NF)Zload_contentrN   rO   rP   )r   rH   rI   rJ   rK   ÚgetrQ   r%   r%   r&   Útest_load_files_wo_load_contentŒ   s
    r_   Úallowed_extensionsz.txtz.jsonc                    sn   | d ‰ˆ  ¡  d}‡fdd„|D ƒ}|D ]}| d¡ q*t| ˆ d�}t‡ fdd„|D ƒƒt|jƒksjJ ‚dS )	z;Check the behaviour of `allowed_extension` in `load_files`.Úsub)z	file1.txtz
file2.jsonz
file3.jsonzfile4.mdc                    s   g | ]}ˆ | ‘qS r%   r%   ©Ú.0Úf)Údr%   r&   Ú
<listcomp>œ   ó    z6test_load_files_allowed_extensions.<locals>.<listcomp>s   hello©r`   c                    s   g | ]}|j ˆ v rt|ƒ‘qS r%   )Úsuffixr5   )rc   Úprh   r%   r&   rf       rg   N)ÚmkdirÚwrite_bytesr   ÚsetrI   )Ztmp_pathr`   ÚfilesÚpathsrj   rL   r%   )r`   re   r&   Ú"test_load_files_allowed_extensions–   s    ÿrp   zHfilename, expected_n_samples, expected_n_features, expected_target_nameszwine_data.csvé²   é   )Zclass_0Zclass_1Zclass_2úiris.csvé–   é   )ZsetosaZ
versicolorZ	virginicazbreast_cancer.csvé9  é   Z	malignantZbenignc                 C   sV   t | ƒ\}}}|jd |ks J ‚|jd |ks2J ‚|jd |ksDJ ‚tj ||¡ d S )Nr   rN   )r   ÚshapeÚnpÚtestingÚassert_array_equal)ÚfilenameZexpected_n_samplesZexpected_n_featuresZexpected_target_namesÚactual_dataZactual_targetZactual_target_namesr%   r%   r&   Útest_load_csv_data¥   s
    r~   c                  C   s–   d} d}t | d�}t | |d�}t|ƒdks.J ‚t|ƒdks>J ‚tj |d |d ¡ tj |d |d ¡ tj |d	 |d	 ¡ |d
  d¡s’J ‚d S )Nrs   ziris.rst©Údata_file_name©r€   Údescr_file_nameru   é   r   rN   rO   éÿÿÿÿz.. _iris_dataset:)r   rH   ry   rz   r{   Ú
startswith)r€   r‚   Zres_without_descrZres_with_descrr%   r%   r&   Útest_load_csv_data_with_descr·   s    
ÿr†   z filename, kwargs, expected_shapezdiabetes_data_raw.csv.gzéº  é
   údiabetes_target.csv.gzzdigits.csv.gzÚ	delimiterú,é  éA   c                 C   s&   t | fi |¤Ž}|jt|ƒks"J ‚d S r!   )r   rx   Útuple)r|   ÚkwargsZexpected_shaper}   r%   r%   r&   Ú"test_load_gzip_compressed_csv_dataÉ   s    	r�   c                  C   sB   d} d}t | d�}t | |d�\}}tj ||¡ | d¡s>J ‚d S )Nr‰   zdiabetes.rstr   r�   z.. _diabetes_dataset:)r   ry   rz   r{   r…   )r€   r‚   Zexpected_datar}   Údescrr%   r%   r&   Ú-test_load_gzip_compressed_csv_data_with_descrÖ   s    
þ
r’   c                  C   sÈ   z¦t ƒ } t| jƒdksJ ‚t| jƒdks,J ‚| j}t |d ddd d …f tjg d¢tjd�k¡sfJ ‚t |d ddd d …f tjg d¢tjd�k¡sšJ ‚| js¤J ‚W n t	yÂ   t
 d¡ Y n0 d S )NrO   r   )é®   éÉ   éç   )ÚdtyperN   )rO   é   rr   ú3Could not load sample images, PIL is not available.)r   rH   ÚimagesrI   ry   ÚallÚarrayÚuint8rK   ÚImportErrorÚwarningsÚwarn)rL   r™   r%   r%   r&   Útest_load_sample_imagesä   s    44r    c                  C   sJ   z(t dƒ} | jdksJ ‚| jdks&J ‚W n tyD   t d¡ Y n0 d S )Nz	china.jpgrœ   )i«  i€  rƒ   r˜   )r   r–   rx   r�   rž   rŸ   )Úchinar%   r%   r&   Útest_load_sample_imageô   s    r¢   c                  C   sn   t dd�} | jjdksJ ‚| jjs*J dƒ‚t| jƒdks<J ‚| jsFJ ‚t ƒ }tj	j
t| jƒd |jdd� d	S )
zTest to check that we load a scaled version by default but that we can
    get an unscaled version when setting `scaled=False`.F)Zscaled©r‡   rˆ   r‡   rˆ   g»‘T5@g-Cëâ6?)ZatolN)r   rP   rx   ÚtargetÚsizerH   Úfeature_namesrK   ry   rz   Zassert_allcloser   )Zdiabetes_rawZdiabetes_defaultr%   r%   r&   Útest_load_diabetes_rawý   s    

ÿr§   zEloader_func, data_shape, target_shape, n_target, has_descr, filenames)rv   rw   )rv   rO   Tr|   )rq   rr   )rq   rƒ   )rt   ru   )rt   )é   rƒ   Zdata_filenameZtarget_filenamer£   )r‡   )rŒ   é@   )rŒ   é	   )Zn_class)éQ  r©   )r«   c                    sª   | ƒ ‰ t ˆ tƒsJ ‚ˆ jj|ks$J ‚ˆ jj|ks4J ‚tˆ dƒrTtˆ jƒ|d ksTJ ‚|d urntˆ jƒ|ksnJ ‚|r|ˆ j	s|J ‚|r¦dˆ v sŒJ ‚t
‡ fdd„|D ƒƒs¦J ‚d S )Nr¦   rN   Údata_modulec                    s.   g | ]&}|ˆ v o(t  ˆ d  ¡ˆ |   ¡ ‘qS )r¬   )r   rn   Úis_filerb   ©Úbunchr%   r&   rf   /  s   þztest_loader.<locals>.<listcomp>)Ú
isinstancer   rP   rx   r¤   ÚhasattrrH   r¦   rJ   rK   rš   )Úloader_funcZ
data_shapeZtarget_shapeZn_targetZ	has_descrrI   r%   r®   r&   Útest_loader  s"    


ýÿr³   z%loader_func, data_dtype, target_dtypec                 C   s   | ƒ }t || ||d� d S )N)Zexpected_data_dtypeZexpected_target_dtyper   )r²   Z
data_dtypeZtarget_dtypeZdefault_resultr%   r%   r&   Útest_toy_dataset_frame_dtype7  s    ür´   c                  C   s2   t dd�} tt| ƒƒ}d|_|d |jks.J ‚d S )NÚx)rµ   Úy)r   r   r   rµ   ©r¯   Zbunch_from_pklr%   r%   r&   Útest_loads_dumps_bunchL  s    
r¸   c                  C   sf   t dd�} d| jd< tt| ƒƒ}|jdks.J ‚|d dks>J ‚d|_|jdksRJ ‚|d dksbJ ‚d S )NÚoriginal)Úkeyzset from __dict__rº   Úchanged)r   Ú__dict__r   r   rº   r·   r%   r%   r&   Ú8test_bunch_pickle_generated_with_0_16_and_read_with_0_17S  s    

r½   c                  C   s   t ƒ } dt| ƒv sJ ‚d S )NrP   )r   r;   )rP   r%   r%   r&   Útest_bunch_dirh  s    r¾   c                  C   s€   d} t jt| d�� ddlm} W d  ƒ n1 s40    Y  d} t jt| d�� ddlm} W d  ƒ n1 sr0    Y  dS )zLCheck that we raise the ethical warning when trying to import `load_boston`.z8The Boston housing prices dataset has an ethical problem©Úmatchr   )Úload_bostonNzBcannot import name 'non_existing_function' from 'sklearn.datasets')Únon_existing_function)ÚpytestÚraisesr�   Úsklearn.datasetsrÁ   rÂ   )ÚmsgrÁ   rÂ   r%   r%   r&   Útest_load_boston_errorn  s    *rÇ   c              	   C   sæ   d}t d|dƒ}tt|dddt ¡ d�d�}|  d|¡ tjtd	d
��Œ}tj	tdd
�� t
|ddd� W d  ƒ n1 sz0    Y  |jdks’J ‚|D ]}t|jƒd|› �ks–J ‚q–t|ƒdksÄJ ‚W d  ƒ n1 sØ0    Y  dS )z'Check retry mechanism in _fetch_remote.z8https://scikit-learn.org/this_file_does_not_exist.tar.gzZinvalid_fileNé”  ú	Not Found)ÚurlÚcoderÆ   ÚhdrsÚfp©Zside_effectú"sklearn.datasets._base.urlretrievezRetry downloadingr¿   zHTTP Error 404rƒ   r   )Z	n_retriesÚdelayru   zRetry downloading from url: )r   r   r	   ÚioÚBytesIOÚsetattrrÃ   ÚwarnsÚUserWarningrÄ   r   Ú
call_countr5   ÚmessagerH   )ÚmonkeypatchrÊ   Zinvalid_remote_fileÚurlretrieve_mockÚrecordÚrr%   r%   r&   Ú1test_fetch_remote_raise_warnings_with_invalid_urlz  s    ÿÿ,rÜ   c                  C   s   t dƒ\} }| dksJ ‚|dks$J ‚t dƒ\} }| dks<J ‚|dksHJ ‚t dƒ\} }| dks`J ‚|dkslJ ‚t dƒ\} }| dks„J ‚|d	ks�J ‚t d
ƒ\} }| dks¨J ‚|d	ks´J ‚t dƒ\} }| dksÌJ ‚|dksØJ ‚t dƒ\} }| dksðJ ‚|dksüJ ‚t dƒ\} }| dk�sJ ‚|dk�s$J ‚t dƒ\} }| dk�s>J ‚|dk�sLJ ‚t dƒ\} }| dk�sfJ ‚|dk�stJ ‚t dƒ\} }| dk�sŽJ ‚|dk�sœJ ‚t dƒ\} }| dk�s¶J ‚|d	k�sÄJ ‚tjtdd�� t dƒ W d   ƒ n1 �sò0    Y  d S )Nzhttps://example.com/file.tar.gzúexample.comzfile.tar.gzu2   https://example.com/Ù†Ù…ÙˆÙ†Ù‡ Ù†Ù…Ø§ÛŒÙ†Ø¯Ù‡.datau   Ù†Ù…ÙˆÙ†Ù‡-Ù†Ù…Ø§ÛŒÙ†Ø¯Ù‡.dataz)https://example.com/path/to-/.file.tar.gzzexample.com/path_tozhttps://example.com/Zdownloaded_filezhttps://example.comz2https://example.com/path/@to/data.json?param=valuez	data.jsonz4https://example.com/path/@@to._/-_.data.json.#anchorz"https://example.com//some_file.txtzsome_file.txtzhttp://example/../some_file.txtZexamplez'https://example.com/!.'.,/some_file.txtz+https://example.com/a/!.'.,/b/some_file.txtzexample.com/a_bzhttps://example.com/!.'.,zInvalid URLr¿   z
https:/../)r   rÃ   rÄ   Ú
ValueError)Úfolderr|   r%   r%   r&   Ú(test_derive_folder_and_filename_from_url‘  sp    ÿÿÿÿÿÿÿÿÿrà   c                    s   ‡ fdd„}t |d�S )Nc                    sH   t ˆ ƒ}t| ƒj d¡}||  ¡ s4t| ddd d ƒ‚t || |¡ d S )Nú/rÈ   rÉ   )r   r
   r#   ÚstriprF   r	   r/   Úcopy)rÊ   Z
local_pathZserver_rootÚ	file_path©Úserver_sider%   r&   Ú_urlretrieve_mockÙ  s
    z,_mock_urlretrieve.<locals>._urlretrieve_mockrÎ   r   )ræ   rç   r%   rå   r&   Ú_mock_urlretrieveØ  s    rè   c              	   C   s”  t |ƒ}|d }| ¡  |d }d}|j|dd� |d }| ¡  |d }|jddd� |d	 }| ¡  t|ƒ}|  d
|¡ |  dt|d�¡ tdƒ}	|	|d d ksªJ ‚|	jdd�|ks¾J ‚tdƒ}	|	|d d d ksÞJ ‚|	jdd�| d¡ksøJ ‚t 	d¡}
t
 t¡�J t
j|
d�� tddd� W d   ƒ n1 �s>0    Y  W d   ƒ n1 �s^0    Y  |d d }t| ¡ ƒ|d gk�s�J ‚d S )Nræ   ú
data.jsonlú{"a": 1, "b": 2}
rT   ©rW   Z	subfolderzother_file.txtzSome important text data.r8   rÏ   z$sklearn.datasets._base.get_data_home)Zreturn_valueúhttps://example.com/data.jsonlrÝ   z,https://example.com/subfolder/other_file.txtzERetry downloading from url: https://example.com/subfolder/invalid.txtr¿   z)https://example.com/subfolder/invalid.txtr   )rÐ   )r   rk   Ú
write_textrè   rÓ   r   r   Ú	read_textÚreÚescaperÃ   rÄ   r	   rÔ   ÚsortedÚiterdir)rØ   Útmpdirræ   Ú	data_fileÚserver_dataZserver_subfolderZother_data_filer8   rÙ   Úfetched_file_pathÚexpected_warning_msgZlocal_subfolderr%   r%   r&   Útest_fetch_file_using_data_homeã  sR    
ÿÿÿÿÿ
ÿþFrø   c                 C   s  |  d¡}t|d ƒ}d}|j|dd� |  d¡}t|ƒ}|  d|¡ td|d	�}||d ksbJ ‚|jdd�|ksvJ ‚|jd
ks„J ‚td|d	�}||d ks J ‚|jdd�|ks´J ‚|jd
ksÂJ ‚| ¡  td|d	�}||d ksæJ ‚|jdd�|ksúJ ‚|jdk�s
J ‚d S )Nræ   ré   rê   rT   rë   Úclient_siderÏ   rì   ©rß   rN   rO   )	rk   r   rí   rè   rÓ   r   rî   rÖ   Úunlink)rØ   ró   ræ   rô   rõ   rù   rÙ   rö   r%   r%   r&   Útest_fetch_file_without_sha256  s:    

þþþrü   c              	   C   sÎ  |  d¡}t|d ƒ}d}|j|dd� t | ¡ ¡ ¡ }|  d¡}t|ƒ}|  d|¡ t	d||d	�}||d ksvJ ‚|j
dd�|ksŠJ ‚|jd
ks˜J ‚t	d||d	�}||d ks¶J ‚|j
dd�|ksÊJ ‚|jd
ksØJ ‚|jddd� d|› d�}	tj|	d��V t	d||d	�}||d k�s J ‚|j
dd�|k�s6J ‚|jdk�sFJ ‚W d   ƒ n1 �s\0    Y  t	d||d	�}||d k�s†J ‚|j
dd�|k�sœJ ‚|jdk�s¬J ‚| ¡  t	d||d	�}||d k�sÔJ ‚|j
dd�|k�sêJ ‚|jdk�súJ ‚t	d|d�}||d k�sJ ‚|j
dd�|k�s.J ‚|jdk�s>J ‚d}
d}t d|› d|
› d�¡}tjt|d��L tj|d�� t	d||
d	� W d   ƒ n1 �s 0    Y  W d   ƒ n1 �sÀ0    Y  d S )Nræ   ré   rê   rT   rë   rù   rÏ   rì   )rß   Úsha256rN   zcorrupted contentszQSHA256 checksum of existing local file data.jsonl \(.*\) differs from expected \(z9\): re-downloading from https://example.com/data.jsonl \.r¿   rO   rƒ   rú   Zdeadbabecafebeefzdiffers from expectedz#The SHA256 checksum of data.jsonl (z) differs from expected (z).)rk   r   rí   Úhashlibrý   Ú
read_bytesÚ	hexdigestrè   rÓ   r   rî   rÖ   rÃ   rÔ   rû   rï   rð   rÄ   ÚOSError)rØ   ró   ræ   rô   rõ   Zexpected_sha256rù   rÙ   rö   Zexpected_msgZnon_matching_sha256r÷   Zexpected_error_msgr%   r%   r&   Útest_fetch_file_with_sha256?  s„    

ÿÿÿÿÿ0ÿÿþÿÿýr  )Vrþ   rÑ   r-   rï   r/   r>   rž   Ú	functoolsr   Ú	importlibr   Úpathlibr   Úpickler   r   Zunittest.mockr   Úurllib.errorr	   Úurllib.parser
   Únumpyry   rÃ   rÅ   r   r   r   r   r   r   r   r   r   r   r   r   Zsklearn.datasets._baser   r   r   r   r   Z"sklearn.datasets.tests.test_commonr   Zsklearn.preprocessingr   Zsklearn.utilsr   r    r1   Zfixturer8   r9   rC   rD   ÚmarkZparametrizerG   rM   rR   r]   r_   rp   r~   r†   r�   r’   r    r¢   r§   r³   Zfloat64Úintr´   r¸   r½   r¾   rÇ   rÜ   rà   rè   rø   rü   r  r%   r%   r%   r&   Ú<module>   sÄ   8





	



ýþ


ýþ
	úòþ




úþ

G4(