U
    ¯Ê¹jô  ã                   @   sl  d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
 zddlmZ dZW n ek
rd   dZY nX zddlmZ dZW n ek
r’   dZY nX zdd	lmZ dZW n ek
rÀ   dZY nX zdd
lmZ dZW n ek
rî   dZY nX ddlmZmZ eeeeee	d�Zeddd�Zedddddd�Zdd„ Zdeee eeeeeeeee eeedœdd„ZdS )zE Dataset Factory

Hacked together by / Copyright 2021, Ross Wightman
é    N)ÚOptional)ÚCIFAR100ÚCIFAR10ÚMNISTÚKMNISTÚFashionMNISTÚImageFolder)Ú	Places365TF)ÚINaturalist)ÚQMNIST)ÚImageNeté   )ÚIterableImageDatasetÚImageDataset)Zcifar10Zcifar100ZmnistZkmnistZfashion_mnist)ÚtrainZtraining)ÚvalZvalidÚ
validationÚevalZ
evaluationc                    s^   |  d¡d }tj ˆ |¡}tj |¡r,|S ‡ fdd„}|tkrJ|tƒ‰ n|tkrZ|tƒ‰ ˆ S )Nú[r   c                    s0   | D ]&}t j ˆ |¡}t j |¡r|  S qˆ S ©N)ÚosÚpathÚjoinÚexists)ZsynÚsÚtry_root©Úroot© úX/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/data/dataset_factory.pyÚ_try2   s
    
z_search_split.<locals>._try)Úsplitr   r   r   r   Ú_TRAIN_SYNONYMÚ_EVAL_SYNONYM)r   r!   Z
split_namer   r    r   r   r   Ú_search_split+   s    
r$   r   é*   ÚRGB)Únamer   r!   Úsearch_splitÚ	class_mapÚ
load_bytesÚis_trainingÚdownloadÚ
batch_sizeÚnum_samplesÚseedÚrepeatsÚinput_img_modec                 K   s  dd„ |  ¡ D ƒ}|  ¡ } |  d¡�r|  dd¡d } tf ||dœ|—Ž}| tkrxt|  }|tk}|f d|i|—Ž}�q| d	ksŠ| d
k�rts–tdƒ‚d}| d¡}t	|ƒdkrÚ|d  d¡}t	|ƒdkrÒ|d }|d }|tkrèd}n|t
krôd}tf ||dœ|—Ž}�q| dk�rVt�s$tdƒ‚|tk�r4d}n|t
k�rBd}tf d|i|—Ž}nÂ| dk�rŠt�sntdƒ‚|tk}tf d|i|—Ž}nŽ| dk�rÄt�s¢tdƒ‚|t
k�r°d}tf d|i|—Ž}nT| dk�sØ| dk�r|�rötj |¡�röt||ƒ}t|f|Ž}nd�std| › �ƒ‚nú|  d ¡�rBt|f| |||d!œ|—Ž}nÒ|  d"¡�rvt|f| ||||||	||
|d#œ
|—Ž}nž|  d$¡�rªt|f| ||||||	||
|d#œ
|—Ž}nj|  d%¡�rÜt|f| |||||	||
|d&œ	|—Ž}n8|�rútj |¡�rút||ƒ}t|f| |||d'œ|—Ž}|S )(a   Dataset factory method

    In parentheses after each arg are the type of dataset supported for each arg, one of:
      * folder - default, timm folder (or tar) based ImageDataset
      * torch - torchvision based datasets
      * HFDS - Hugging Face Datasets
      * TFDS - Tensorflow-datasets wrapper in IterabeDataset interface via IterableImageDataset
      * WDS - Webdataset
      * all - any of the above

    Args:
        name: dataset name, empty is okay for folder based datasets
        root: root folder of dataset (all)
        split: dataset split (all)
        search_split: search for split specific child fold from root so one can specify
            `imagenet/` instead of `/imagenet/val`, etc on cmd line / config. (folder, torch/folder)
        class_map: specify class -> index mapping via text file or dict (folder)
        load_bytes: load data, return images as undecoded bytes (folder)
        download: download dataset if not present and supported (HFDS, TFDS, torch)
        is_training: create dataset in train mode, this is different from the split.
            For Iterable / TDFS it enables shuffle, ignored for other datasets. (TFDS, WDS)
        batch_size: batch size hint for (TFDS, WDS)
        seed: seed for iterable datasets (TFDS, WDS)
        repeats: dataset repeats per iteration i.e. epoch (TFDS, WDS)
        input_img_mode: Input image color conversion mode e.g. 'RGB', 'L' (folder, TFDS, WDS, HFDS)
        **kwargs: other args to pass to dataset

    Returns:
        Dataset object
    c                 S   s   i | ]\}}|d k	r||“qS r   r   )Ú.0ÚkÚvr   r   r   Ú
<dictcomp>m   s       z"create_dataset.<locals>.<dictcomp>ztorch/ú/é   éÿÿÿÿ)r   r,   r   ZinaturalistZinatz@Please update to PyTorch 1.10, torchvision 0.11+ for InaturalistÚfullr   r   Ú_Z
2021_trainZ
2021_valid)ÚversionÚtarget_typeZ	places365zGPlease update to a newer PyTorch and torchvision for Places365 dataset.ztrain-standardr   r!   ZqmnistzDPlease update to a newer PyTorch and torchvision for QMNIST dataset.ZimagenetzFPlease update to a newer PyTorch and torchvision for ImageNet dataset.Zimage_folderÚfolderFzUnknown torchvision dataset zhfds/)Úreaderr!   r)   r1   zhfids/)
r>   r!   r)   r+   r,   r-   r.   r0   r/   r1   ztfds/zwds/)	r>   r!   r)   r+   r-   r.   r0   r/   r1   )r>   r)   r*   r1   )ÚitemsÚlowerÚ
startswithr!   ÚdictÚ_TORCH_BASIC_DSr"   Úhas_inaturalistÚAssertionErrorÚlenr#   r
   Úhas_places365r	   Ú
has_qmnistr   Úhas_imagenetr   r   r   Úisdirr$   r   r   r   )r'   r   r!   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   ÚkwargsZtorch_kwargsZds_classZ	use_trainZdsr<   Zsplit_splitr   r   r   Úcreate_dataset?   sì    .







ÿûúÿõôÿõôÿöõ
ÿûúrL   )Nr   TNFFFr   Nr%   r   r&   ) Ú__doc__r   Útypingr   Ztorchvision.datasetsr   r   r   r   r   r   r	   rG   ÚImportErrorr
   rD   r   rH   r   rI   Zdatasetr   r   rB   rC   r"   r#   r$   ÚstrÚboolÚintrL   r   r   r   r   Ú<module>   sz    



û            óó