a
    dM                  	   @   s2  d Z ddl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yV   dZ
Y n0 zddlmZ dZW n ey   dZY n0 zddlmZ dZW n ey   dZY n0 zdd	lmZ dZW n ey   dZY n0 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ddZdS )zE Dataset Factory

Hacked together by / Copyright 2021, Ross Wightman
    N)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v rJ|t n|tv 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 b/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/data/dataset_factory.py_try1   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   *   c                 K   s  |   } | dr
| ddd } tf ||d|}| tv rft|  }|tv }|f d|i|}q| dksv| dkrtsJ d	d
}|d}t|dkr|d d}t|dkr|d }|d }|tv rd}n|tv rd}t	f ||d|}q| dkrBt
sJ d|tv r d}n|tv r.d}tf d|i|}n| dkrvtsZJ d|tv }tf d|i|}n| dkrtsJ d|tv rd}tf d|i|}nX| dks| dkr|rtj|rt||}t|fi |}ndsJ d|  n| dr0t|f| ||d|}n| d r`t|f| ||||||
|	d!|}nd| d"rt|f| |||||
|	d#|}n6|rtj|rt||}t|f| ||d$|}|S )%a   Dataset factory method

    In parenthesis 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)
        **kwargs: other args to pass to dataset

    Returns:
        Dataset object
    ztorch//   )r   downloadr   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   	class_mapztfds/)r-   r   r.   is_trainingr'   
batch_sizerepeatsseedzwds/)r-   r   r.   r/   r0   r1   r2   )r-   r.   
load_bytes)lower
startswithr   dict_TORCH_BASIC_DSr    has_inaturalistlenr!   r	   has_places365r   
has_qmnistr
   has_imagenetr   r   r   isdirr"   r   r   r   )namer   r   Zsearch_splitr.   r3   r/   r'   r0   r2   r1   kwargsZtorch_kwargsZds_classZ	use_trainZdsr+   Zsplit_splitr   r   r   create_dataset>   s    +








	
r@   )	r   TNFFFNr#   r   )__doc__r   Ztorchvision.datasetsr   r   r   r   r   r   r   r:   ImportErrorr	   r8   r
   r;   r   r<   Zdatasetr   r   r6   r7   r    r!   r"   r@   r   r   r   r   <module>   sV    



         