a
    dG                     @   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ee d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)Z
imagenet1kZimagenet12kZimagenet22kZimagenet21kZimagenet21kgoogZimagenet21kmiilZ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 }|rL|tvrPd S t| S )Nnum_classespretrained_cfg)
isinstancedictgetgetattr_NUM_CLASSES_TO_SUBSET)Zmodel_or_cfgr   r    r   `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/data/imagenet_info.pyinfer_imagenet_subset!   s    
r   c                       s   e Zd Zded fddZdd Zdd Zdeeee	e e
eef f d
ddZedddZdeeedddZdeeedddZ  ZS )ImageNetInfor   )subsetc                    s   t    tdd| }|tv s4J 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   Zsynset_fileZsynset_dataZ
lemma_datar-   Zdefinition_data	__class__r   r   r   2   s    

zImageNetInfo.__init__c                 C   s
   t | jS Nlenr*   r1   r   r   r   r   E   s    zImageNetInfo.num_classesc                 C   s   | j S r4   r*   r7   r   r   r   label_namesH   s    zImageNetInfo.label_namesF)detailedas_dictr
   c                    s4   |r fddj D S  fddj D S d S )Nc                    s   i | ]}|j | d qS r:   label_name_to_description.0labelr:   r1   r   r   
<dictcomp>M       z3ImageNetInfo.label_descriptions.<locals>.<dictcomp>c                    s   g | ]}j | d qS r<   r>   r@   rC   r   r   
<listcomp>O   rE   z3ImageNetInfo.label_descriptions.<locals>.<listcomp>r8   )r1   r:   r;   r   rC   r   label_descriptionsK   s    zImageNetInfo.label_descriptionsr	   c                 C   sB   d|  krt | jk s8n J d| dt | j d| j| S )Nr   zIndex (z ) out of range for dataset with z	 classes.r5   )r1   indexr   r   r   index_to_label_nameQ   s    z ImageNetInfo.index_to_label_name)rH   r:   r
   c                 C   s   |  |}| j||dS )Nr=   )rI   r?   )r1   rH   r:   rB   r   r   r   index_to_descriptionV   s    
z!ImageNetInfo.index_to_description)rB   r:   r
   c                 C   s0   |r | j |  d| j|  }n| j |  }|S )Nz: )r.   r0   )r1   rB   r:   descriptionr   r   r   r?   Z   s    z&ImageNetInfo.label_name_to_description)r   )FF)F)F)r$   
__module____qualname__strr   r   r9   boolr   r   r   rG   rI   intrJ   r?   __classcell__r   r   r2   r   r   0   s   (r   )r,   r%   r"   r   typingr   r   r   r   Zdataset_infor   r   r!   r+   r/   rN   r   r   r   r   r   r   <module>   s0   
	