U
    ¯Ê¹jB  ã                   @   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_readeré2   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 kst |tƒr&t|pd|||d�}|| _|| _|| _|| _|| _d| _d S )NÚ )ÚrootÚsplitÚ	class_mapr   )	Ú
isinstanceÚstrr   ÚreaderÚ
load_bytesÚinput_img_modeÚ	transformÚtarget_transformÚ_consecutive_errors)	Úselfr   r   r   r   r   r   r   r   © r   úP/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/data/dataset.pyÚ__init__   s    üzImageDataset.__init__c                 C   s  | j | \}}z| jr| ¡ nt |¡}W n† tk
r° } zht d|› d| j  |¡› dt	|ƒ› �¡ |  j
d7  _
| j
tk rœ|  |d t| j ƒ ¡ W Y ¢
S |‚W 5 d }~X Y nX d| _
| jrÐ| jsÐ| | j¡}| jd k	rä|  |¡}|d kròd}n| jd k	�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   Fr   é*   r   r	   c                 C   sZ   |d k	st ‚t|tƒr>t|||||||||	|
||||d�| _n|| _|| _|| _d| _d S )N)r   r   r   Úis_trainingÚ
batch_sizeÚnum_samplesÚseedÚrepeatsÚdownloadr   Ú	input_keyÚ
target_keyÚ	max_stepsr   )ÚAssertionErrorr   r   r   r   r   r   r   )r   r   r   r   r   r7   r8   r9   r:   r;   r<   r   r=   r>   r   r   r?   r   r   r   r   V   s,    
ò
zIterableImageDataset.__init__c                 c   sF   | j D ]:\}}| jd k	r"|  |¡}| jd k	r6|  |¡}||fV  qd S r)   )r   r   r   )r   r&   r'   r   r   r   Ú__iter__�   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)rB   r   rC   )r   Úcountr   r   r   rC   �   s    zIterableImageDataset.set_epoch©Únum_workersc                 C   s   t | jdƒr| jj|d� d S )NÚset_loader_cfgrE   )rB   r   rG   )r   rF   r   r   r   rG   ”   s    z#IterableImageDataset.set_loader_cfgc                 C   s   dst 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   NFr   Nr6   r   Fr	   NNNNN)N)FF)FF)r2   r3   r4   r   rA   r+   rC   r   ÚintrG   r    r0   r   r   r   r   r5   T   s2                  ï
+ þþ
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 k	r,|  | jj¡ || _d S r)   )ÚaugmentationÚ	normalizeÚdatasetr   Ú_set_transformsÚ
num_splits)r   rM   rO   r   r   r   r   ¦   s    zAugMixDataset.__init__c                 C   sF   t |ttfƒrt|ƒdks"tdƒ‚|d | j_|d | _|d | _d S )Né   z&Expecting a tuple/list of 3 transformsr   r   rJ   )	r   ÚlistÚtupler#   r@   rM   r   rK   rL   ©r   Úxr   r   r   rN   ®   s    "
zAugMixDataset._set_transformsc                 C   s   | j jS r)   )rM   r   r*   r   r   r   r   ´   s    zAugMixDataset.transformc                 C   s   |   |¡ d S r)   )rN   rS   r   r   r   r   ¸   s    c                 C   s   | j d kr|S |   |¡S r)   )rL   rS   r   r   r   Ú
_normalize¼   s    zAugMixDataset._normalizec                 C   sP   | j | \}}|  |¡g}t| jd ƒD ]}| |  |  |¡¡¡ q(t|ƒ|fS )Nr   )rM   rU   ÚrangerO   ÚappendrK   rR   )r   ÚirT   ÚyZx_listÚ_r   r   r   r"   ¿   s
    zAugMixDataset.__getitem__c                 C   s
   t | jƒS r)   )r#   rM   r*   r   r   r   r+   Ç   s    zAugMixDataset.__len__N)rJ   )r2   r3   r4   Ú__doc__r   rN   Úpropertyr   ÚsetterrU   r"   r+   r   r   r   r   rI   £   s   


rI   )r[   ÚioÚloggingÚtypingr   ZtorchZtorch.utils.dataÚutilsÚdataZPILr   Zreadersr   Ú	getLoggerr2   r   r!   ZDatasetr   ZIterableDatasetr5   rI   r   r   r   r   Ú<module>   s   
?O