o
    پiG                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZmZmZ ddl	m
Z
 ddddd	d
dZddddddddZdZdZdee fddZG dd de
ZdS )    N)DictListOptionalUnion   )DatasetInfoimagenet-1kzimagenet-21k-miilzimagenet-12kzimagenet-22kzimagenet-22k-mszimagenet-21k-goog)i  i+  i-.  iQU  iRU  iSU  zimagenet_synsets.txtzimagenet12k_synsets.txtzimagenet22k_synsets.txtzimagenet21k_goog_synsets.txtzimagenet21k_miil_synsets.txtzimagenet22k_ms_synsets.txt)
imagenet1kimagenet12kimagenet22kimagenet21kimagenet21kgoogimagenet21kmiilimagenet22kmszimagenet_synset_to_lemma.txtz!imagenet_synset_to_definition.txtreturnc                 C   sX   t | tr| dd }nt| dd }|s t| di }|dd }|r&|tvr(d S t| S )Nnum_classespretrained_cfg)
isinstancedictgetgetattr_NUM_CLASSES_TO_SUBSET)model_or_cfgr   r    r   K/home/ubuntu/.local/lib/python3.10/site-packages/timm/data/imagenet_info.pyinfer_imagenet_subset!   s   
r   c                       s   e Zd Zddef fddZdd Zdd Zdd
ededee	e e
eef f fddZdefddZdded
edefddZdded
edefddZ  ZS )ImageNetInfor   subsetc                    s   t    tdd| }|tv sJ d| dt| }ttt	j
d|}|d | _ttt	j
dt}tj|d dd}t|| _ttt	j
dt}tj|d dd}t|| _d S )	Nz[-_\s] zUnknown imagenet subset ._infozutf-8	)	delimiter)super__init__resublower_SUBSETSpkgutilget_data__name__ospathjoindecode
splitlines_synsets_LEMMA_FILEcsvreaderr   _lemmas_DEFINITION_FILE_definitions)selfr   synset_filesynset_data
lemma_datar4   definition_data	__class__r   r   r$   2   s   

zImageNetInfo.__init__c                 C   s
   t | jS Nlenr1   r8   r   r   r   r   E   s   
zImageNetInfo.num_classesc                 C   s   | j S r?   r1   rB   r   r   r   label_namesH   s   zImageNetInfo.label_namesFdetailedas_dictr   c                    s0   |r fddj D S  fddj D S )Nc                    s   i | ]
}|j | d qS rE   label_name_to_description.0labelrE   r8   r   r   
<dictcomp>M   s    z3ImageNetInfo.label_descriptions.<locals>.<dictcomp>c                    s   g | ]	}j | d qS rG   rI   rK   rN   r   r   
<listcomp>O   s    z3ImageNetInfo.label_descriptions.<locals>.<listcomp>rC   )r8   rE   rF   r   rN   r   label_descriptionsK   s   zImageNetInfo.label_descriptionsc                 C   sB   d|  krt | jk sn J d| dt | j d| j| S )Nr   zIndex (z ) out of range for dataset with z	 classes.r@   )r8   indexr   r   r   index_to_label_nameQ   s   
z ImageNetInfo.index_to_label_namerR   c                 C   s   |  |}| j||dS )NrH   )rS   rJ   )r8   rR   rE   rM   r   r   r   index_to_descriptionV   s   
z!ImageNetInfo.index_to_descriptionrM   c                 C   s2   |r| j |  d| j|  }|S | j |  }|S )Nz: )r5   r7   )r8   rM   rE   descriptionr   r   r   rJ   Z   s
   z&ImageNetInfo.label_name_to_description)r   )FF)F)r+   
__module____qualname__strr$   r   rD   boolr   r   r   rQ   rS   intrT   rJ   __classcell__r   r   r=   r   r   0   s    , r   )r3   r,   r)   r%   typingr   r   r   r   dataset_infor   r   r(   r2   r6   rX   r   r   r   r   r   r   <module>   s2    
	