U
    Ov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   D/tmp/pip-unpacked-wheel-qu3nn_q2/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)Z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    r0   c                 c   s    t | d}|V  t| d S )NZscikit_learn_load_files_testr,   r/   r   r   r   load_files_root9   s    r1   c                 c   sB   t j| d}t j|dd}|d |  t|V  t| d S )NdirF)r3   delete   Hello World!
)tempfilemkdtempNamedTemporaryFilewritecloser-   r*   )r1   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 )Nr2   )r6   r7   r-   r*   )r1   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)r0   )r   AssertionErrorr&   r   existsr   )r=   r0   r   r   r   test_data_homeQ   s    


r@   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)r1   resr   r   r   test_default_empty_load_filese   s    rF   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      r5   )r   rA   rB   r>   rC   rD   datar;   r<   r1   rE   r   r   r   test_default_load_filesl   s
    rK   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encodingrG   zHello World!
)r&   r   abspathsplitseppopr   rA   rB   r>   rC   rD   rI   )r;   r<   r1   categoryrE   r   r   r   .test_load_files_w_categories_desc_and_encodingt   s       rU   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_contentrG   rH   rI   )r   rA   rB   r>   rC   rD   getrJ   r   r   r   test_load_files_wo_load_content   s
    rW   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rX   c                    s   g | ]}|j  krt|qS r   )suffixr-   )r[   pr_   r   r   r^      s     
 N)mkdirwrite_bytesr   setrB   r>   )Ztmp_pathrX   filespathsra   rE   r   )rX   r]   r   "test_load_files_allowed_extensions   s    rg   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   rG   )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
    ru   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 )Nrj   ziris.rstdata_file_namerw   descr_file_namerl      r   rG   rH   z.. _iris_dataset:)r   rA   r>   rp   rq   rr   
startswith)rw   ry   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   ro   tupler>   )rs   kwargsZexpected_shapert   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.rstrv   rx   z.. _diabetes_dataset:)r   rp   rq   rr   r|   r>   )rw   ry   Zexpected_datart   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 )NrH   r            )dtyperG      ri   3Could not load sample images, PIL is not available.)r   rA   imagesr>   rB   rp   allarrayuint8rD   ImportErrorwarningswarn)rE   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  rz   r   )r   r   r>   ro   r   r   r   )Z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	   rI   ro   r>   targetsizerA   feature_namesrD   rp   rq   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)rm   rn   )rm   rH   Trs   )rh   ri   )rh   rz   )rk   rl   )rk   )   rz   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   rG   data_modulec                    s&   g | ]}| ko t  d   | qS )r   r   rZ   bunchr   r   r^   %  s   ztest_loader.<locals>.<listcomp>)
isinstancer   r>   rI   ro   r   hasattrrA   r   rC   rD   r   )loader_funcZ
data_shapeZtarget_shapeZn_targetZ	has_descrrB   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 )NrI   )r   r3   r>   )rI   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(   r6   r   	functoolsr   pathlibr   pickler   r   Znumpyrp   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fixturer0   r1   r;   r<   markZparametrizer@   rF   rK   rU   rW   rg   ru   r}   r   r   r   r   r   r   Zfloat64intr   r   r   r   r   r   r   r   r   <module>   s   4





	





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

