a
    d                     @   s   d Z ddlZddlZddlmZ ddlZddlm  mZ ddl	m
Z
 ddlmZ eeZdZG dd	 d	ejZG d
d dejZG dd dejjjZdS )zh Quick n Simple Image Folder, Tarfile based DataSet

Hacked together by / Copyright 2019, Ross Wightman
    N)Optional)Image   )create_reader2   c                   @   s:   e Zd ZdddZdd Zd	d
 ZdddZdddZdS )ImageDatasetNtrainFRGBc	           	      C   sN   |d u st |tr&t|pd|||d}|| _|| _|| _|| _|| _d| _d S )N )rootsplit	class_mapr   )	
isinstancestrr   reader
load_bytesimg_mode	transformtarget_transform_consecutive_errors)	selfr   r   r   r   r   r   r   r    r   Z/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/data/dataset.py__init__   s    zImageDataset.__init__c                 C   s  | j | \}}z| jr| nt|}W n ty } zttd| d| j | dt	|  |  j
d7  _
| j
tk r| |d t| j  W  Y d }~S |W Y d }~n
d }~0 0 d| _
| jr| js|| j}| jd ur| |}|d u rd}n| jd ur| |}||fS )NzSkipped sample (index z, file z). r   r   )r   r   readr   open	Exception_loggerwarningfilenamer   r   _ERROR_RETRY__getitem__lenr   convertr   r   )r   indeximgtargeter   r   r   r"   0   s&    (
$


zImageDataset.__getitem__c                 C   s
   t | jS N)r#   r   r   r   r   r   __len__J   s    zImageDataset.__len__c                 C   s   | j |||S r)   )r   r    r   r%   basenameabsoluter   r   r   r    M   s    zImageDataset.filenamec                 C   s   | j ||S r)   r   	filenamesr   r-   r.   r   r   r   r0   P   s    zImageDataset.filenames)Nr   NFr	   NN)FF)FF)__name__
__module____qualname__r   r"   r+   r    r0   r   r   r   r   r      s          

r   c                
   @   sV   e Zd ZdddZdd	 Zd
d Zdd Zdee dddZ	dddZ
dddZdS )IterableImageDatasetNr   F*   r   c                 C   sP   |d usJ t |tr4t|||||||||	d	| _n|| _|
| _|| _d| _d S )N)r   r   r   is_training
batch_sizeseedrepeatsdownloadr   )r   r   r   r   r   r   r   )r   r   r   r   r   r7   r8   r9   r:   r;   r   r   r   r   r   r   V   s"    

zIterableImageDataset.__init__c                 c   sF   | j D ]:\}}| jd ur"| |}| jd ur6| |}||fV  qd S r)   )r   r   r   )r   r&   r'   r   r   r   __iter__w   s    



zIterableImageDataset.__iter__c                 C   s   t | jdrt| jS dS d S )Nr+   r   )hasattrr   r#   r*   r   r   r   r+      s    
zIterableImageDataset.__len__c                 C   s   t | jdr| j| d S )N	set_epoch)r=   r   r>   )r   countr   r   r   r>      s    zIterableImageDataset.set_epochnum_workersc                 C   s   t | jdr| jj|d d S )Nset_loader_cfgr@   )r=   r   rB   )r   rA   r   r   r   rB      s    z#IterableImageDataset.set_loader_cfgc                 C   s   dsJ dd S )NFz8Filename lookup by index not supported, use filenames().r   r,   r   r   r   r       s    zIterableImageDataset.filenamec                 C   s   | j ||S r)   r/   r1   r   r   r   r0      s    zIterableImageDataset.filenames)
Nr   NFNr6   r   FNN)N)FF)FF)r2   r3   r4   r   r<   r+   r>   r   intrB   r    r0   r   r   r   r   r5   T   s(             
! 
r5   c                   @   sT   e Zd ZdZdddZdd Zedd Zejd	d Zd
d Z	dd Z
dd ZdS )AugMixDatasetzCDataset wrapper to perform AugMix or other clean/augmentation mixes   c                 C   s6   d | _ d | _|| _| jjd ur,| | jj || _d S r)   )augmentation	normalizedatasetr   _set_transforms
num_splits)r   rH   rJ   r   r   r   r      s    zAugMixDataset.__init__c                 C   sF   t |ttfrt|dks"J d|d | j_|d | _|d | _d S )N   z&Expecting a tuple/list of 3 transformsr   r   rE   )r   listtupler#   rH   r   rF   rG   r   xr   r   r   rI      s    "
zAugMixDataset._set_transformsc                 C   s   | j jS r)   )rH   r   r*   r   r   r   r      s    zAugMixDataset.transformc                 C   s   |  | d S r)   )rI   rN   r   r   r   r      s    c                 C   s   | j d u r|S |  |S r)   )rG   rN   r   r   r   
_normalize   s    zAugMixDataset._normalizec                 C   sP   | j | \}}| |g}t| jd D ]}|| | | q(t||fS )Nr   )rH   rP   rangerJ   appendrF   rM   )r   irO   yZx_list_r   r   r   r"      s
    zAugMixDataset.__getitem__c                 C   s
   t | jS r)   )r#   rH   r*   r   r   r   r+      s    zAugMixDataset.__len__N)rE   )r2   r3   r4   __doc__r   rI   propertyr   setterrP   r"   r+   r   r   r   r   rD      s   


rD   )rV   iologgingtypingr   ZtorchZtorch.utils.datautilsdataZPILr   Zreadersr   	getLoggerr2   r   r!   ZDatasetr   ZIterableDatasetr5   rD   r   r   r   r   <module>   s   
?E