o
    پi                     @   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                   @   sH   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	           
      K   sV   |d u s	t |trt|pdf|||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   kwargs r   E/home/ubuntu/.local/lib/python3.10/site-packages/timm/data/dataset.py__init__   s    
zImageDataset.__init__c                 C   s  | j | \}}z| jr| nt|}W n@ tyU } z4td| d| j | dt	|  |  j
d7  _
| j
tk rO| |d t| j  W  Y d }~S |d }~ww d| _
| jre| jse|| j}| jd uro| |}|d u ryd}||fS | 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#   2   s,   (
$



zImageDataset.__getitem__c                 C   
   t | jS N)r$   r   r   r   r   r   __len__L      
zImageDataset.__len__c                 C   s   | j |||S r+   )r   r!   r   r&   basenameabsoluter   r   r   r!   O   s   zImageDataset.filenamec                 C      | j ||S r+   r   	filenamesr   r0   r1   r   r   r   r4   R      zImageDataset.filenames)Nr   NFr	   NNFF)__name__
__module____qualname__r   r#   r-   r!   r4   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dee fddZ	dddZ
dddZdS )IterableImageDatasetNr   Fr   *   r   r	   c                 K   sb   |d usJ t |tr#t|f||||||||	|
||||d|| _n|| _|| _|| _d| _d S )N)r   r   r   is_training
batch_sizenum_samplesseedrepeatsdownloadr   	input_key
target_key	max_stepsr   )r   r   r   r   r   r   r   )r   r   r   r   r   r=   r>   r?   r@   rA   rB   r   rC   rD   r   r   rE   r   r   r   r   r   X   s2   


zIterableImageDataset.__init__c                 c   sH    | j D ]\}}| jd ur| |}| jd ur| |}||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 )Nr-   r   )hasattrr   r$   r,   r   r   r   r-      s   
zIterableImageDataset.__len__c                 C   s    t | jdr| j| d S d S )N	set_epoch)rG   r   rH   )r   countr   r   r   rH      s   zIterableImageDataset.set_epochnum_workersc                 C   s"   t | jdr| jj|d d S d S )Nset_loader_cfg)rJ   )rG   r   rK   )r   rJ   r   r   r   rK      s   z#IterableImageDataset.set_loader_cfgc                 C   s   J d)NFz8Filename lookup by index not supported, use filenames().r   r/   r   r   r   r!      s   zIterableImageDataset.filenamec                 C   r2   r+   r3   r5   r   r   r   r4      r6   zIterableImageDataset.filenames)Nr   NFr   Nr<   r   Fr	   NNNNNr+   r7   )r8   r9   r:   r   rF   r-   rH   r   intrK   r!   r4   r   r   r   r   r;   V   s4    
-

r;   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   rQ   rS   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   rN   )r   listtupler$   rQ   r   rO   rP   r   xr   r   r   rR      s   "
zAugMixDataset._set_transformsc                 C   s   | j jS r+   )rQ   r   r,   r   r   r   r      s   zAugMixDataset.transformc                 C   s   |  | d S r+   )rR   rW   r   r   r   r      s   c                 C   s   | j d u r|S |  |S r+   )rP   rW   r   r   r   
_normalize   s   zAugMixDataset._normalizec                 C   sP   | j | \}}| |g}t| jd D ]}|| | | qt||fS )Nr   )rQ   rY   rangerS   appendrO   rV   )r   irX   yx_list_r   r   r   r#      s
   zAugMixDataset.__getitem__c                 C   r*   r+   )r$   rQ   r,   r   r   r   r-      r.   zAugMixDataset.__len__N)rN   )r8   r9   r:   __doc__r   rR   propertyr   setterrY   r#   r-   r   r   r   r   rM      s    


rM   )r`   iologgingtypingr   torchtorch.utils.datautilsdataPILr   readersr   	getLoggerr8   r   r"   Datasetr   IterableDatasetr;   rM   r   r   r   r   <module>   s    
AQ