U
    f.                     @   s,  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	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 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$ G dd dZ%dd Z&ej'dddd Z(ej'dddd Z)ej'dd Z*ej'dd Z+ej,-ddee%gdd Z.dd Z/dd Z0d d! Z1d"d# Z2ej,-d$d%gd%d&gfd'd( Z3ej,-d)d*d+d,d-d.d/gfd0d1d2d3d4d5gfd6d7d8d9d:gfgd;d< Z4d=d> Z5ej,-d?d@i dAdBgfdCi dAgfdDdEdFidGdHgfgdIdJ Z6dKdL Z7dMdN Z8dOdP Z9dQdR Z:ej,-dSedTdUdVdWdXgfedYdZd[dWg fed\d]d[dWdXgfed^d^d[dWd_d`gfedadbddWg fedcdddBdWg feededfdgdhdBdWg fgdidj Z;ej,-dkeej<e=feej<ej<feej<e=feej<e=feej<ej<feej<e=fgdldm Z>dndo Z?dpdq Z@drds ZAdtdu ZBdS )v    N)partial)Path)dumpsloads)clear_data_homeget_data_homeload_breast_cancerload_diabetesload_digits
load_files	load_irisload_linnerudload_sample_imageload_sample_images	load_wine)load_csv_dataload_gzip_compressed_csv_datacheck_as_frame)scale)Bunch_is_resourcec                   @   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   G/tmp/pip-target-lpfmz8o1/lib/python/sklearn/datasets/tests/test_base.py__init__&   s    z_DummyPath.__init__c                 C   s   | j S r   r   )r   r   r   r   
__fspath__)   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_dir-   s    r*   module)scopec                 c   s    t | d}|V  t| d S )NZscikit_learn_data_home_teststrmktempr*   Ztmpdir_factoryZtmp_filer   r   r   	data_home2   s    r1   c                 c   s    t | d}|V  t| d S )NZscikit_learn_load_files_testr-   r0   r   r   r   load_files_root9   s    r2   c                 c   sB   t j| d}t j|dd}|d |  t|V  t| d S )NdirF)r4   delete   Hello World!
)tempfilemkdtempNamedTemporaryFilewritecloser.   r*   )r2   Ztest_category_dir1Zsample_filer   r   r   test_category_dir_1@   s    

r<   c                 c   s"   t j| d}t|V  t| d S )Nr3   )r7   r8   r.   r*   )r2   Ztest_category_dir2r   r   r   test_category_dir_2J   s    
r=   path_containerc                 C   s~   | d k	r| |}t |d}||ks&ttj|s6t| d k	rF| |}t|d tj|r`tt |d}tj|sztd S )N)r1   )r   AssertionErrorr&   r   existsr   )r>   r1   r   r   r   test_data_homeQ   s    


rA   c                 C   s>   t | }t|jdkstt|jdks,t|jd ks:td S )Nr   )r   len	filenamesr?   target_namesDESCR)r2   resr   r   r   test_default_empty_load_filese   s    rG   c                 C   sN   t |}t|jdkstt|jdks,t|jd ks:t|jdgksJtd S )N      r6   )r   rB   rC   r?   rD   rE   datar<   r=   r2   rF   r   r   r   test_default_load_filesl   s
    rL   c                 C   sp   t j| t j }t|d|gdd}t|jdks<t	t|j
dksNt	|jdks\t	|jdgkslt	d S )Ntestzutf-8)description
categoriesencodingrH   zHello World!
)r&   r   abspathsplitseppopr   rB   rC   r?   rD   rE   rJ   )r<   r=   r2   categoryrF   r   r   r   .test_load_files_w_categories_desc_and_encodingt   s       rV   c                 C   sT   t |dd}t|jdkstt|jdks0t|jd ks>t|dd ksPtd S )NF)Zload_contentrH   rI   rJ   )r   rB   rC   r?   rD   rE   getrK   r   r   r   test_load_files_wo_load_content   s
    rX   allowed_extensionsz.txtz.jsonc                    sn   | d    d}fdd|D }|D ]}|d q*t|  d}t fdd|D t|jksjt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>   s     z6test_load_files_allowed_extensions.<locals>.<listcomp>s   hellorY   c                    s   g | ]}|j  krt|qS r   )suffixr.   )r\   pr`   r   r   r_      s     
 N)mkdirwrite_bytesr   setrC   r?   )Ztmp_pathrY   filespathsrb   rF   r   )rY   r^   r   "test_load_files_allowed_extensions   s    rh   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.csv9     Z	malignantZbenignc                 C   sV   t | \}}}|jd |ks t|jd |ks2t|jd |ksDttj|| d S )Nr   rH   )r   shaper?   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
    rv   c                  C   s   d} d}t | d}t | |d}t|dks.tt|dks>ttj|d |d  tj|d |d  tj|d	 |d	  |d
 dstd S )Nrk   ziris.rstdata_file_namerx   descr_file_namerm      r   rH   rI   z.. _iris_dataset:)r   rB   r?   rq   rr   rs   
startswith)rx   rz   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|}|jt|kstd S r   )r   rp   tupler?   )rt   kwargsZexpected_shaperu   r   r   r   "test_load_gzip_compressed_csv_data   s    	r   c                  C   sB   d} d}t | d}t | |d\}}tj|| |ds>td S )Nr   zdiabetes.rstrw   ry   z.. _diabetes_dataset:)r   rq   rr   rs   r}   r?   )rx   rz   Zexpected_dataru   descrr   r   r   -test_load_gzip_compressed_csv_data_with_descr   s    

r   c                  C   s   zt  } t| jdkstt| jdks,t| j}t|d ddd d f tjdddgtjdkshtt|d ddd d f tjddd	gtjdkst| j	stW n t
k
r   td
 Y nX d S )NrI   r            )dtyperH      rj   3Could not load sample images, PIL is not available.)r   rB   imagesr?   rC   rq   allarrayuint8rE   ImportErrorwarningswarn)rF   r   r   r   r   test_load_sample_images   s    66r   c                  C   sL   z(t d} | jdkst| jdks&tW n tk
rF   td Y nX d S )Nz	china.jpgr   )i  i  r{   r   )r   r   r?   rp   r   r   r   )chinar   r   r   test_load_sample_image   s    r   c                  C   sn   t dd} | jjdkst| jjs*tdt| jdks<t| jsFt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   gT5@g-C6?)ZatolN)r	   rJ   rp   r?   targetsizerB   feature_namesrE   rq   rr   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)rn   ro   )rn   rI   Trt   )ri   rj   )ri   r{   )rl   rm   )rl   )   r{   Zdata_filenameZtarget_filenamer   )r   )r   @   )r   	   )Zn_class)Q  r   )r   c                    s   |   t  tst jj|ks$t jj|ks4tt drTt j|d ksTt|d k	rnt j	|ksnt|r| j
s|t|rd kstt fdd|D std S )Nr   rH   data_modulec                    s&   g | ]}| ko t  d   | qS )r   r   r[   bunchr   r   r_   %  s   ztest_loader.<locals>.<listcomp>)
isinstancer   r?   rJ   rp   r   hasattrrB   r   rD   rE   r   )loader_funcZ
data_shapeZtarget_shapeZn_targetZ	has_descrrC   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_dtype,  s    r   c                  C   s2   t dd} tt| }d|_|d |jks.td S )Nx)r   y)r   r   r   r   r?   r   Zbunch_from_pklr   r   r   test_loads_dumps_bunchA  s    
r   c                  C   sf   t dd} d| jd< tt| }|jdks.t|d dks>td|_|jdksRt|d dksbtd S )Noriginal)keyzset from __dict__r   changed)r   __dict__r   r   r   r?   r   r   r   r   8test_bunch_pickle_generated_with_0_16_and_read_with_0_17H  s    

r   c                  C   s   t  } dt| kstd S )NrJ   )r   r4   r?   )rJ   r   r   r   test_bunch_dir]  s    r   c               	   C   sX   d} t jt| d ddlm} W 5 Q R X d} t jt| d ddlm} W 5 Q R X 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_bostonzBcannot import name 'non_existing_function' from 'sklearn.datasets')non_existing_functionN)pytestZraisesr   sklearn.datasetsr   r   )msgr   r   r   r   r   test_load_boston_errorc  s    r   )Cr&   r(   r7   r   	functoolsr   pathlibr   pickler   r   numpyrq   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Zsklearn.datasets._baser   r   Z"sklearn.datasets.tests.test_commonr   Zsklearn.preprocessingr   Zsklearn.utilsr   Zsklearn.utils.fixesr   r   r*   Zfixturer1   r2   r<   r=   markZparametrizerA   rG   rL   rV   rX   rh   rv   r~   r   r   r   r   r   r   Zfloat64intr   r   r   r   r   r   r   r   r   <module>   s   4





	







	






