o
    h)
                     @   sx   d dl mZmZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ G dd deZdd	 ZG d
d deZdS )    )CounterOrderedDict)	BaseVocabBaseMultiVocab	CharVocabCompositeVocab)VOCAB_PREFIX)PretrainedWordVocab)	WordVocabc                   @   s   e Zd ZdZdd ZdS )TagVocabz& A vocab for the output tag sequence. c                    sZ   t fddjD  tttt   fdddd _dd tjD _d S )	Nc                    s    g | ]}|D ]}| j  qqS  )idx).0sentwselfr   R/var/www/html/env_mimamsha/lib/python3.10/site-packages/stanza/models/ner/vocab.py
<listcomp>   s     z(TagVocab.build_vocab.<locals>.<listcomp>c                    s    |  S )Nr   )k)counterr   r   <lambda>   s    z&TagVocab.build_vocab.<locals>.<lambda>T)keyreversec                 S   s   i | ]\}}||qS r   r   )r   ir   r   r   r   
<dictcomp>       z(TagVocab.build_vocab.<locals>.<dictcomp>)	r   datar   listsortedkeys_id2unit	enumerate_unit2idr   r   )r   r   r   build_vocab
   s   (zTagVocab.build_vocabN)__name__
__module____qualname____doc__r$   r   r   r   r   r      s    r   c                 C   s   | d rt d| d ttd  }dd |D }t|| d dd d}t|jd t| d kr4t d	|jd | d krAt d
|S )Nlowerz4Did not expect an NER vocab with 'lower' set to Truer!   c                 S   s   g | ]}|gggqS r   r   )r   xr   r   r   r      r   z%convert_tag_vocab.<locals>.<listcomp>langr   )r   r+   r   sepzBFailed to construct a new vocab of the same length as the originalzAFailed to construct a new vocab in the same order as the original)AssertionErrorlenr   r   r!   )
state_dictitemsvocabr   r   r   convert_tag_vocab   s   r2   c                   @   s    e Zd Zdd Zedd ZdS )
MultiVocabc                 C   sF   t  }t  }| j D ]\}}| ||< t|j||< q||d< |S )z= Also save a vocab name to class name mapping in state dict. 
_key2class)r   _vocabsr0   r/   typer%   )r   state	key2classr   vr   r   r   r/       s   zMultiVocab.state_dictc                 C   sf   t jtjttjtjd}|  }d|v sJ d|d}| D ]\}}|| }|| |||< q |S )N)r   r	   r   r   r
   r4   z-Cannot find class name mapping in state dict!)r   load_state_dictr	   r2   r   r
   popr0   )clsr/   
class_dictnewr8   r   r9   	classnamer   r   r   r:   *   s   
zMultiVocab.load_state_dictN)r%   r&   r'   r/   classmethodr:   r   r   r   r   r3      s    
r3   N)collectionsr   r   stanza.models.common.vocabr   r   r   r   r   stanza.models.common.pretrainr	   stanza.models.pos.vocabr
   r   r2   r3   r   r   r   r   <module>   s    