U
    ¯Ê¹jG  ã                   @   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krPd S t| S )NÚnum_classesÚpretrained_cfg)Ú
isinstanceÚdictÚgetÚgetattrÚ_NUM_CLASSES_TO_SUBSET)Zmodel_or_cfgr   r   © r   úV/var/www/html/bwave/python/venv/lib/python3.8/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ks4t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ÚAssertionErrorÚ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+   ©r2   r   r   r   r   E   s    zImageNetInfo.num_classesc                 C   s   | j S r5   ©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:   r2   r   r   Ú
<dictcomp>M   s      z3ImageNetInfo.label_descriptions.<locals>.<dictcomp>c                    s   g | ]}ˆj |ˆ d �‘qS r<   r>   r@   rC   r   r   Ú
<listcomp>O   s     z3ImageNetInfo.label_descriptions.<locals>.<listcomp>r8   )r2   r:   r;   r   rC   r   Úlabel_descriptionsK   s    zImageNetInfo.label_descriptionsr	   c                 C   sB   d|  krt | jƒk s8n td|› dt | jƒ› d�ƒ‚| j| S )Nr   zIndex (z ) out of range for dataset with z	 classes.)r6   r+   r"   )r2   Úindexr   r   r   Úindex_to_label_nameQ   s    ÿz ImageNetInfo.index_to_label_name)rG   r:   r
   c                 C   s   |   |¡}| j||d�S )Nr=   )rH   r?   )r2   rG   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/   r1   )r2   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   rF   rH   ÚintrI   r?   Ú__classcell__r   r   r3   r   r   0   s   (r   )r-   r&   r#   r   Útypingr   r   r   r   Zdataset_infor   r   r!   r,   r0   rM   r   r   r   r   r   r   Ú<module>   s0   ú
ù	