
    Ng                         d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ 	 	 	 	 dd
edeeeeef                  dee         dedef
dZ G d de          ZdS )z A dataset reader that extracts images from folders

Folders are scanned recursively to find image files. Labels are based
on the folder hierarchy, just leaf folders by default.

Hacked together by / Copyright 2020 Ross Wightman
    N)DictListOptionalSetTupleUnionnatural_key   )load_class_map)get_img_extensions)ReaderTfoldertypesclass_to_idxleaf_name_onlysortc                 r   |st          d          nt          |          }g }g }t          j        | dd          D ]\  }}}	|| k    r t          j                            ||           nd}
|rt          j                            |
          n$|
                    t          j        j        d          }|	D ]}t          j        	                    |          \  }}|
                                |v rH|                    t          j                            ||                     |                    |           Kt          |          }t          t          |t                              }d	 t!          |          D             fd
t#          ||          D             }|rt          |d           }|fS )a   Walk folder recursively to discover images and map them to classes by folder names.

    Args:
        folder: root of folder to recrusively search
        types: types (file extensions) to search for in path
        class_to_idx: specify mapping for class (folder name) to class index if set
        leaf_name_only: use only leaf-name of folder walk for class names
        sort: re-sort found images by name (for consistent ordering)

    Returns:
        A list of image and target tuples, class_to_idx mapping
    T)as_setF)topdownfollowlinks _N)keyc                     i | ]\  }}||	S  r   ).0idxcs      a/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/data/readers/reader_image_folder.py
<dictcomp>z+find_images_and_targets.<locals>.<dictcomp>4   s    FFF633FFF    c                 2    g | ]\  }}|v 	||         fS r   r   )r   flr   s      r    
<listcomp>z+find_images_and_targets.<locals>.<listcomp>5   s2    ggg41aUVZfUfUf1l1o.UfUfUfr"   c                 ,    t          | d                   S Nr   r	   )ks    r    <lambda>z)find_images_and_targets.<locals>.<lambda>7   s    kRSTURVFWFW r"   )r   setoswalkpathrelpathbasenamereplacesepsplitextlowerappendjoinlistsortedr
   	enumeratezip)r   r   r   r   r   labels	filenamesrootsubdirsfilesrel_pathlabelr$   baseextunique_labelssorted_labelsimages_and_targetss     `               r    find_images_and_targetsrG      s   & 49Hd++++c%jjEFI "4 P P P % %gu59V^^27??4000".<d  ***(BRBRSUSZS^`cBdBd 	% 	%A((++ID#yy{{e##  dA!6!6777e$$$		%
 FVM{CCCDDFFY}-E-EFFFgggg3y&;Q;Qggg Y#$6<W<WXXX|++r"   c                   8     e Zd Z	 	 d fd	Zd Zd Zd	dZ xZS )
ReaderImageFolderr   Nc           	         t                                                       || _        d }|rt          ||          }d }|r|                    d          }t          |||          \  | _        | _        t          | j                  dk    r4t          d| dd
                    t                                           d S )N;)r   r   r   z Found 0 images in subfolders of z!. Supported image extensions are z, )super__init__r=   r   splitrG   samplesr   lenRuntimeErrorr6   r   )selfr=   	class_map	input_keyr   
find_types	__class__s         r    rM   zReaderImageFolder.__init__=   s     		 	;))T::L
 	."--J*A%+
 +
 +
'd'
 t|!!T4 T T26))<N<P<P2Q2QT TU U U "!r"   c                 F    | j         |         \  }}t          |d          |fS )Nrb)rO   open)rR   indexr.   targets       r    __getitem__zReaderImageFolder.__getitem__V   s'    |E*fD$''r"   c                 *    t          | j                  S )N)rP   rO   )rR   s    r    __len__zReaderImageFolder.__len__Z   s    4<   r"   Fc                     | j         |         d         }|r t          j                            |          }n'|s%t          j                            || j                  }|S r(   )rO   r,   r.   r0   r/   r=   )rR   rZ   r0   absolutefilenames        r    	_filenamezReaderImageFolder._filename]   sV    <&q) 	<w''11HH 	<wx;;Hr"   )r   N)FF)__name__
__module____qualname__rM   r\   r^   rb   __classcell__)rV   s   @r    rI   rI   ;   s}        
 	U U U U U U2( ( (! ! !       r"   rI   )NNTT)__doc__r,   typingr   r   r   r   r   r   timm.utils.miscr
   rS   r   img_extensionsr   readerr   strboolrG   rI   r   r"   r    <module>rn      s1    
			 : : : : : : : : : : : : : : : : ' ' ' ' ' ' % % % % % % . . . . . .      
 48'+#&, &,&,dE3./0&, tn&, 	&,
 &, &, &, &,R( ( ( ( ( ( ( ( ( (r"   