a
    dT
                     @   sb   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 dd	d
ZG dd de
ZdS )z A dataset reader that reads single tarfile based datasets

This reader can read datasets consisting if a single tarfile containing images.
I am planning to deprecated it in favour of ParerImageInTar.

Hacked together by / Copyright 2020 Ross Wightman
    N)natural_key   )load_class_map)get_img_extensions)ReaderTc                    s   t dd}g }g }|  D ]\}| s(qtj|j\}}tj|}	tj|d }
|
 |v r|	| |	|	 q d u rt
|}tt|td}dd t|D   fddt||D }|rt|d	d
 d}| fS )NT)Zas_setr   )keyc                 S   s   i | ]\}}||qS  r   ).0idxcr   r   k/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/data/readers/reader_image_tar.py
<dictcomp>"       z#extract_tarinfo.<locals>.<dictcomp>c                    s$   g | ]\}}| v r| | fqS r   r   )r	   flclass_to_idxr   r   
<listcomp>#   r   z#extract_tarinfo.<locals>.<listcomp>c                 S   s   t | d jS Nr   )r   path)kr   r   r   <lambda>%   r   z!extract_tarinfo.<locals>.<lambda>)r   
getmembersisfileosr   splitbasenamesplitextlowerappendsetlistsortedr   	enumeratezip)tarfiler   sort
extensionsfileslabelsZtidirnamer   labelextZunique_labelsZsorted_labelsZtarinfo_and_targetsr   r   r   extract_tarinfo   s(    

r-   c                       s<   e Zd ZdZd fdd	Zdd Zdd Zdd
dZ  ZS )ReaderImageTarz Single tarfile dataset where classes are mapped to folders within tar
    NOTE: This class is being deprecated in favour of the more capable ReaderImageInTar that can
    operate on folders of tars or tars in tars.
     c                    s   t    d }|rt||}tj|s,J || _t|"}t	||\| _
| _W d    n1 sd0    Y  | j
| _d | _d S N)super__init__r   r   r   r   rootr%   openr-   samplesr   Zimgs)selfr3   	class_mapr   tf	__class__r   r   r2   .   s    

0zReaderImageTar.__init__c                 C   s:   | j d u rt | j| _ | j| \}}| j |}||fS r0   )r%   r4   r3   r5   extractfile)r6   indextarinfotargetfileobjr   r   r   __getitem__<   s
    
zReaderImageTar.__getitem__c                 C   s
   t | jS r0   )lenr5   )r6   r   r   r   __len__C   s    zReaderImageTar.__len__Fc                 C   s$   | j | d j}|r tj|}|S r   )r5   namer   r   r   )r6   r<   r   absolutefilenamer   r   r   	_filenameF   s    zReaderImageTar._filename)r/   )FF)	__name__
__module____qualname____doc__r2   r@   rB   rF   __classcell__r   r   r9   r   r.   )   s
   r.   )NT)rJ   r   r%   Ztimm.utils.miscr   r7   r   Zimg_extensionsr   readerr   r-   r.   r   r   r   r   <module>   s   
