o
     Xxi                      @   sj   d dl Z G dd d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G dd deZdS )    Nc                   @   s   e Zd ZdZdZdZdS )NodeTypeSYS_DICT	USER_DICTUNKNOWNN)__name__
__module____qualname__r   r   r    r	   r	   M/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/janome/lattice.pyr      s    r   c                   @   s6   e Zd ZdZg dZejfddZdd Zdd Z	d	S )
Nodez
    Standard Node class
    )posindexsurfaceleft_idright_idcostpart_of_speech	infl_type	infl_form	base_formreadingphonetic	node_typemin_costback_pos
back_indexc                 C   sT   d| _ d| _d| _d| _d| _|\
| _| _| _| _| _	| _
| _| _| _| _|| _d S Nr   i)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   self
dict_entryr   r	   r	   r
   __init__#   s   
zNode.__init__c                 C   sf   d| j  d| j d| j d| j d| j d| j d| j d| j d| j d| j	 d| j
 d| j dS )N(z, z,                   z$)                       [back_pos = z, back_index = ])r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r
   __str__.   s   *zNode.__str__c                 C      | j S Nr   r$   r	   r	   r
   
node_label3      zNode.node_labelN)
r   r   r   __doc__	__slots__r   r   r!   r%   r)   r	   r	   r	   r
   r      s    r   c                   @   s.   e Zd ZdZg dZejfddZdd ZdS )SurfaceNodez,
    Node class with surface form only.
    r   r   r   r   r   numr   r   r   r   r   c                 C   s@   d| _ d| _d| _d| _d| _|\| _| _| _| _| _	|| _
d S r   r.   r   r	   r	   r
   r!   @   s   
zSurfaceNode.__init__c                 C   r&   r'   r(   r$   r	   r	   r
   r)   I   r*   zSurfaceNode.node_labelN)	r   r   r   r+   r,   r   r   r!   r)   r	   r	   r	   r
   r-   7   s
    	r-   c                   @   0   e Zd ZdZg dZdd Zdd Zdd Zd	S )
BOSz
    BOS node
    r   r   r   r   r   r   r   c                 C   s.   d| _ d| _d| _d| _d| _d| _d| _d S )Nr   r   r2   r$   r	   r	   r
   r!   V      
zBOS.__init__c                 C      dS )N__BOS__r	   r$   r	   r	   r
   r%   _      zBOS.__str__c                 C   r4   )Nr1   r	   r$   r	   r	   r
   r)   b   r6   zBOS.node_labelNr   r   r   r+   r,   r!   r%   r)   r	   r	   r	   r
   r1   M       	r1   c                   @   r0   )
EOSz
    EOS node
    )r   r   r   r   r   r   r   c                 C   s.   || _ d| _d| _d| _d| _d| _d| _d S r   )r   r   r   r   r   r   r   )r   r   r	   r	   r
   r!   o   r3   zEOS.__init__c                 C   s   d| j  dS )Nz__EOS__ [back_pos=r#   )r   r$   r	   r	   r
   r%   x      zEOS.__str__c                 C   r4   )Nr9   r	   r$   r	   r	   r
   r)   {   r6   zEOS.node_labelNr7   r	   r	   r	   r
   r9   f   r8   r9   c                   @   sN   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdd Z	dd Z
dS )Latticec                 C   sb   t  ggdd td|d D  | _g t  ggdd td|d D  | _g g| _d| _|| _d S )Nc                 S      g | ]}g qS r	   r	   .0ir	   r	   r
   
<listcomp>       z$Lattice.__init__.<locals>.<listcomp>r      c                 S   r<   r	   r	   r=   r	   r	   r
   r@      rA   )r1   rangesnodesenodes
conn_costspdic)r   sizerH   r	   r	   r
   r!      s
   $&
zLattice.__init__c           	      C   s  |j |j d |j}}}| j}| j| j D ]/}|j ||j| }||k r,||}}q||krEt|t	rEt|t	rE|j
|j
k rE||}}q||j |_ |j|_|j|_| j|_t| j| j |_| j| j | t|drtt|jnd}| j| j|  | d S )Nr   rB   )r   r   r   rH   rE   rG   get_trans_costr   
isinstancer-   r/   r   r   r   r   lenrD   appendhasattrr   )	r   noder   	best_nodenode_left_idrH   enoder   node_lenr	   r	   r
   add   s,   
zLattice.addc                 C   sD   | j }|  j d7  _ | j| j  s|  j d7  _ | j| j  r| j | S NrB   )rG   rE   )r   old_pr	   r	   r
   forward   s   
zLattice.forwardc                 C   s.   t | j}| | | jd | jd  | _d S rU   )r9   rG   rT   rD   )r   eosr	   r	   r
   end   s   

zLattice.endc                 C   sx   t | jt| jd  d tsJ g }t| jd }d}|dkr6| j| | }|| |j}|j}|dks |  |S )NrB   r   )rK   rD   rL   r9   rM   r   r   reverse)r   pathr   r   rO   r	   r	   r
   backward   s   "
zLattice.backward
lattice.gvc                 C   s  dd }g }g }|   }tdt| jd D ]o}tdt| j| D ]b}| j| | }||r4||vr4q"||f}	|	|vrA||	 t|drKt|jnd}
tdt| j||
  D ]*}| j||
  | }||rm||vrmqY||
 |f}||vr|||	 ||	|f qYq"q| j|ddd}|d	 |d
 |d |D ]^}|\}}| j| | }| d| }|	  dt
|j }t|tst|trdnd}t|tst|ts||v rdnd}tjdkrdnd}|d| d| d| d| d| d q|D ]W}|\\}}\}}| j| | }| j| | }| d| }| d| }t
| j|j|j}||v r>||v r>dnd\}}|d| d| d| d| d| d  q|d! W d    d S 1 sjw   Y  d S )"Nc                 S   s   t | do
| jtjkS )Nr   )rN   r   r   r   )rO   r	   r	   r
   
is_unknown      z,Lattice.generate_dotfile.<locals>.is_unknownr   rB   r   wzutf-8modeencodingzdigraph G {
z  rankdir=LR;
z  ranksep=2.0;
.z\nellipsebox	lightblue	lightgrayntzMS UI Gothic z  z	 [label="z",shape=z,style=filled,fillcolor=z,fontname="z"];
)bluebold)blacksolidz -> z",color=z,style=z,fontcolor=red];
z}
)r\   rC   rL   rD   rM   rN   r   _Lattice__open_filewriter)   strr   rK   r1   r9   osnamerH   rJ   r   r   )r   filenamer^   node_idsedgesr[   r   r?   node1node1_idrS   jnode2node2_idfnode_ididxrO   id_strlabelshapecolorfontedgepos1idx1pos2idx2id_str1id_str2styler	   r	   r
   generate_dotfile   sb   




$" .$zLattice.generate_dotfilec                 C   s   t |||dS )Nra   )open)r   rt   rb   rc   r	   r	   r
   __open_file   r:   zLattice.__open_filec                 C   s   d dd | jD S )N
c                 s   s$    | ]}d  dd |D V  qdS ),c                 s   s    | ]}t |V  qd S r'   )rq   )r>   rO   r	   r	   r
   	<genexpr>   s    z,Lattice.__str__.<locals>.<genexpr>.<genexpr>N)join)r>   nodesr	   r	   r
   r      s   " z"Lattice.__str__.<locals>.<genexpr>)r   rD   r$   r	   r	   r
   r%      r_   zLattice.__str__N)r]   )r   r   r   r!   rT   rW   rY   r\   r   ro   r%   r	   r	   r	   r
   r;      s    
4r;   )rr   r   objectr   r-   r1   r9   r;   r	   r	   r	   r
   <module>   s   