
    g                     R    d dl mZ d dlmZ  G d de      Zd Zedk(  r e        yy)    )chain)Counterc                   ~    e Zd Zd Zd Zd Zd Zd ZddZd Z	e
d	        Ze
dd
       Ze
d        Zd Zd ZddZy)
FStructurec                 >    || vrg | |<   | |   j                  |       y)zo
        Append 'item' to the list at 'key'.  If no list exists for 'key', then
        construct one.
        N)append)selfkeyitems      A/var/www/openai/venv/lib/python3.12/site-packages/nltk/sem/lfg.py
safeappendzFStructure.safeappend   s&    
 d?DIS	    c                 N    t         j                  | |j                         |       y N)dict__setitem__lower)r	   r
   values      r   r   zFStructure.__setitem__   s    syy{E2r   c                 J    t         j                  | |j                               S r   )r   __getitem__r   r	   r
   s     r   r   zFStructure.__getitem__   s    ciik22r   c                 J    t         j                  | |j                               S r   )r   __contains__r   r   s     r   r   zFStructure.__contains__   s      syy{33r   c                 D    | j                         }|j                  |      S r   )to_depgraphto_glueformula_list)r	   	glue_dictdepgraphs      r   r   zFStructure.to_glueformula_list!   s!    ##%,,X66r   Nc                 T   ddl m}  |       }|j                  }| j                  |dd       |j	                         D ]^  \  }}d |j                         D        D ]?  }|d   |k(  s|d   }|d   j                  |g        |d   |   j                  |d          A ` |d	   |_        |S )
Nr   DependencyGraphROOTc              3   2   K   | ]  }|d    dk7  s|  yw)relTOPN ).0ns     r   	<genexpr>z)FStructure.to_depgraph.<locals>.<genexpr>/   s     F.QAeH4Eq.s   headr$   depsaddress   )	nltk.parse.dependencygraphr!   nodes_to_depgraphitemsvalues
setdefaultr   root)	r	   r$   r!   r   r/   r,   noden2relations	            r   r   zFStructure.to_depgraph%   s    >"$%F+ #[[]MGTF%,,.Ff:(!%yHL++Hb9L*11"Y-@	 G + ar   c           
         t        |      }||   j                  || j                  d   | j                  d   ||d       t        |       D ]  }t        | |         D ]  }t	        |t
              r|j                  |||       't	        |t              r,t        |      }||   j                  ||d   |d   ||d       ct	        |t              r|D ]  }|j                  |||        t        d|z          y )Nr   r-   )r,   wordtagr*   r$   0feature %s is not an FStruct, a list, or a tuple)
lenupdatepredsorted
isinstancer   r0   tuplelist	Exception)	r	   r/   r*   r$   indexfeaturer   	new_indexr(   s	            r   r0   zFStructure._to_depgraph9   s    E
e 		!yy|	
 d|GtG}-dJ/%%eUG<e, #E
I)$++'0$(G#'7$)#*  d+!ueW= " $JWT % . $r   c                 B    t         j                  | j                  |       S r   )r   _read_depgraphr4   )r   s    r   read_depgraphzFStructure.read_depgraph]   s    ((AAr   c           
      d   |s
t               }| d   j                         dv r
| d   | d   fS t               }d |_        t        j	                  |j                               |_        ||_        | d   | d   }}|d d dk(  r&|dd dk(  r|j                  d	d
       ||d d f|_        |j                  s	||f|_        t        j                  | d   j                               D cg c]  }|j                  |    }}|D ]-  }	|j                  |	d   t        j                  |	|||             / |S c c}w )Nr$   )specpunctr9   r:      VB   Dtense)PASTrQ   r+   )r   r   r   r>   _make_labelgetlabelparentr   r   from_iterabler2   r/   rH   )
r5   r   label_counterrV   fstructr9   r:   idxchildrenchilds
             r   rH   zFStructure._read_depgrapha   sJ   #IM;"33L$u+.. !lGGL&22=3D3D3FGGM#GNVd5k#D2Aw$q8s?&&w0AB $c"1g<< $c{ !..tF|/B/B/DEEC s#E   """%L--eX}gV " Ns   !D-c                 \    g d| dz
     }t        |       dz  }|dkD  r|t        |      z   S |S )z
        Pick an alphabetic character as identifier for an entity in the model.

        :param value: where to index into the list of characters
        :type value: int
        )fghijklmr(   opqrstuvwxyzabcder-      r   )intstr)r   letternums      r   rS   zFStructure._make_label   sB    
6 !)78 %jB7CH$$Mr   c                 B    | j                         j                  dd      S )N
 )__str__replacer	   s    r   __repr__zFStructure.__repr__   s    ||~%%dB//r   c                 "    | j                         S r   )pretty_formatr   s    r   r   zFStructure.__str__   s    !!##r   c                    	 d| j                   z  }	 |d| j                  d   z  z  }t        |       D ]  }| |   D ]  }t	        |t
              rP|t        |      z   dz   t        | j                         z   }|dj                  d|z  ||j                  |            z  }ct	        |t              r|dj                  d|z  ||d         z  }t	        |t              r>|d	j                  d|z  |d
d|t        |      z   dz   z  z  j                  |            z  }t        d|z          |dz   S # t        $ r d}Y +w xY w# t        $ r Y %w xY w)Nz%s:[[z	pred '%s'r   rO   z
{}{} {} z

{}{} '{}'z
{}{} {{{}}}z
%srM   r;   ])rU   	NameErrorr>   r?   r@   r   r<   formatr   rA   rB   joinrC   )r	   indentaccumrE   r   next_indents         r   r   zFStructure.pretty_format   ss   	TZZ'E	[DIIaL11E d|GWdJ/"(3w<"7!";c$**o"MK[//v**;7 E
  e,]11#.'4PQ7SSEd+_33v3&3w<*?!*C#DEKKDQ E $JWT # & $* s{9  	E	  		s"   D. E  .D=<D= 	EEr   )NN)rO   )__name__
__module____qualname__r   r   r   r   r   r   r0   staticmethodrI   rH   rS   r   r   r   r&   r   r   r   r      su    3347("H B B " "H ' 'R0$r   r   c                      ddl m}   | d      } | d      } | d      } | d      }||||g}|D ]   }t        t        j	                  |             " y )Nr   r    zEsso       NNP     2       SUB
said       VBD     0       ROOT
the        DT      5       NMOD
Whiting    NNP     5       NMOD
field      NN      6       SUB
started    VBD     2       VMOD
production NN      6       OBJ
Tuesday    NNP     6       VMOD
zUJohn    NNP     2       SUB
sees    VBP     0       ROOT
Mary    NNP     2       OBJ
zWa       DT      2       SPEC
man     NN      3       SUBJ
walks   VB      0       ROOT
zevery   DT      2       SPEC
girl    NN      3       SUBJ
chases  VB      0       ROOT
a       DT      5       SPEC
dog     NN      3       OBJ
)r.   r!   printr   rI   )r!   dg1dg2dg3dg4	depgraphsdgs          r   demo_read_depgraphr      st    :
		C 	C 	C 	C c3$Ij&&r*+ r   __main__N)	itertoolsr   nltk.internalsr   r   r   r   r   r&   r   r   <module>r      s7     "G GT),X z r   