o
    h
                     @   s   d dl mZmZ d dlmZmZmZ d dlmZmZm	Z	m
Z
 G dd deZG dd deZG dd	 d	eZG d
d deZdS )    )CounterOrderedDict)	BaseVocabBaseMultiVocab	CharVocab)CompositeVocabVOCAB_PREFIXEMPTYEMPTY_IDc                       sF   e Zd Zd fdd	Z fddZ fd	d
Zdd Zdd Z  ZS )	WordVocabN r   Fc                    s<   |d ur|ng | _ t j|||||d |  jdg7  _d S )N)langidxcutofflowerignore)r   super__init__state_attrs)selfdatar   r   r   r   r   	__class__ R/var/www/html/env_mimamsha/lib/python3.10/site-packages/stanza/models/pos/vocab.pyr      s   zWordVocab.__init__c                    s&   t | jdkr|tkrdS t |S )Nr   _)lenr   r
   r   id2unit)r   idr   r   r   r      s   zWordVocab.id2unitc                    s.   t | jdkr|| jv r| jt S t |S )Nr   )r   r   _unit2idr	   r   unit2id)r   unitr   r   r   r       s   
zWordVocab.unit2idc                    s   j rtfddjD  ntfddjD  t  D ]} | jk s0|jv r3 |= q"tttt   fdddd _	dd	 t
j	D _d S )
Nc                    s$   g | ]}|D ]	}| j   qqS r   )r   r   .0sentwr   r   r   
<listcomp>   s   $ z)WordVocab.build_vocab.<locals>.<listcomp>c                    s    g | ]}|D ]}| j  qqS r   )r   r"   r&   r   r   r'      s     c                    s    |  S )Nr   )k)counterr   r   <lambda>!   s    z'WordVocab.build_vocab.<locals>.<lambda>T)keyreversec                 S   s   i | ]\}}||qS r   r   )r#   ir%   r   r   r   
<dictcomp>"   s    z)WordVocab.build_vocab.<locals>.<dictcomp>)r   r   r   listkeysr   r   r   sorted_id2unit	enumerater   )r   r(   r   )r)   r   r   build_vocab   s   (zWordVocab.build_vocabc                 C   s"   d t| ddd | jD S )Nz<{}: {}>,c                 s   s    | ]}d | V  qdS )z|%s|Nr   )r#   xr   r   r   	<genexpr>%   s    z$WordVocab.__str__.<locals>.<genexpr>)formattypejoinr2   r&   r   r   r   __str__$   s   "zWordVocab.__str__)Nr   r   r   FN)	__name__
__module____qualname__r   r   r    r4   r;   __classcell__r   r   r   r   r      s    r   c                       s   e Zd Zd fdd	Z  ZS )	XPOSVocabNr   r   Fc                       t  j|||||d d S N)r   sepkeyedr   r   r   r   r   r   rC   rD   r   r   r   r   (      zXPOSVocab.__init__)Nr   r   r   Fr<   r=   r>   r   r?   r   r   r   r   r@   '       r@   c                       s   e Zd Zd fdd	Z  ZS )	FeatureVocabNr   r   |Tc                    rA   rB   rE   rF   r   r   r   r   ,   rG   zFeatureVocab.__init__)Nr   r   rK   TrH   r   r   r   r   rJ   +   rI   rJ   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   _vocabsitems
state_dictr9   r<   )r   state	key2classr(   vr   r   r   rP   0   s   zMultiVocab.state_dictc                 C   s^   t tttd}|  }d|v sJ d|d}| D ]\}}|| }|| |||< q|S )N)r   r   r@   rJ   rM   z-Cannot find class name mapping in state dict!)r   r   r@   rJ   poprO   load_state_dict)clsrP   
class_dictnewrR   r(   rS   	classnamer   r   r   rU   :   s   
zMultiVocab.load_state_dictN)r<   r=   r>   rP   classmethodrU   r   r   r   r   rL   /   s    
rL   N)collectionsr   r   stanza.models.common.vocabr   r   r   r   r   r	   r
   r   r@   rJ   rL   r   r   r   r   <module>   s    !