Ë
    çÍ:jñr  ã                   ó,  — d dl Z d dlmZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZmZmZ d dlmZmZmZmZ dddd	d
ddœZg d¢Z G d„ d«      Z G d„ de«      Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zdd„Zedk(  r e«        yy)é    N)Úchain)ÚCounter)ÚdrtÚlinearlogic)ÚAbstractVariableExpressionÚ
ExpressionÚLambdaExpressionÚVariableÚVariableExpression)ÚBigramTaggerÚRegexpTaggerÚTrigramTaggerÚUnigramTaggerÚex_quantÚ
univ_quantÚdef_artÚno_quant)ÚaÚanÚeveryÚtheÚnoÚdefault)ÚnmodÚvmodÚpunctc                   óX   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zy)ÚGlueFormulaNc                 óÞ  — |s
t        «       }t        |t        «      rt        j                  |«      | _        n3t        |t        «      r|| _        nt        d|›d|j                  ›�«      ‚t        |t        «      r0t        j                  «       j                  |«      | _        || _        y t        |t        j                  «      r|| _        || _        y t        d|›d|j                  ›�«      ‚©Nz+Meaning term neither string or expression: ú, z(Glue term neither string or expression: )ÚsetÚ
isinstanceÚstrr   Ú
fromstringÚmeaningÚRuntimeErrorÚ	__class__r   ÚLinearLogicParserÚparseÚglueÚindices©Úselfr&   r+   r,   s       úb/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/sem/glue.pyÚ__init__zGlueFormula.__init__%   sÅ   € ÙÜ“eˆGä�gœsÔ#Ü%×0Ñ0°Ó9ˆD�LÜ˜¤Ô,Ø"ˆD�Låâ˜G×-Ò-ð/óð ô
 �dœCÔ Ü#×5Ñ5Ó7×=Ñ=¸dÓCˆDŒIð ˆ�ô ˜œk×4Ñ4Ô5ØˆDŒIð ˆ�õ â˜Ÿšð)óð ó    c                 óØ  — | j                   |j                   z  rt        j                  d| › d|› d�«      ‚| j                   |j                   z  }	 t        j                  | j                  |j                  |j                   «      }|j                  }|rW| j                  j                  «       j                  j                  ddd…   D ]   }| j                  t        d|z  «      |«      }Œ" | j                  j                  |«      }| j                  |||«      S # t        j                  $ r>}t        j                  d| j                  «       › d|j                  «       › d�«      |‚d}~ww xY w)zyself = (\x.(walk x), (subj -o f))
        arg  = (john        ,  subj)
        returns ((walk john),          f)
        ú'z' applied to 'z'.  Indices are not disjoint.Néÿÿÿÿzv%s)r,   r   ÚLinearLogicApplicationExceptionÚApplicationExpressionr+   Úsimplifyr&   Ú
antecedentÚdependenciesÚmake_LambdaExpressionr
   Úapplytor(   )r.   ÚargÚreturn_indicesÚreturn_glueÚeÚarg_meaning_abstractedÚdepÚreturn_meanings           r/   r;   zGlueFormula.applyto?   sS  € ð
 �<‰<˜#Ÿ+™+Ò%Ü×=Ñ=Ø�D�6˜¨ uÐ,IÐJóð ð "Ÿ\™\¨C¯K©KÑ7ˆNð	Ü%×;Ñ;Ø—	‘	˜3Ÿ8™8 S§[¡[óˆKð "%§¡ÐÙØ—y‘y×)Ñ)Ó+×6Ñ6×CÑCÙ�"�ñò �ð *.×)CÑ)CÜ˜U S™[Ó)Ð+Aó*Ñ&ðð Ÿ™×-Ñ-Ð.DÓEˆà�~‰~˜n¨k¸>ÓJÐJøô ×:Ñ:ò 	Ü×=Ñ=Ø�D—M‘M“OÐ$ N°3·<±<³>Ð2BÀ!ÐDóàðûð	ús   Á5D ÄE)Ä+9E$Å$E)c                 ó   — t        |«      S ©N)r   ©r.   Únames     r/   Úmake_VariableExpressionz#GlueFormula.make_VariableExpression`   s   € Ü! $Ó'Ð'r1   c                 ó   — t        ||«      S rD   )r	   ©r.   ÚvariableÚterms      r/   r:   z!GlueFormula.make_LambdaExpressionc   s   € Ü ¨$Ó/Ð/r1   c                 ó.  — t        |t        «      sJ ‚t        |j                  t        «      sJ ‚| j	                  | j                  |j                  j                  | j                  «      t        j                  |j                  | j                  «      «      S rD   )
r#   r   r&   r   r(   r:   rJ   r   ÚImpExpressionr+   ©r.   Úothers     r/   Úlambda_abstractzGlueFormula.lambda_abstractf   sn   € Ü˜%¤Ô-Ð-Ð-Ü˜%Ÿ-™-Ô)CÔDÐDÐDØ�~‰~Ø×&Ñ& u§}¡}×'=Ñ'=¸t¿|¹|ÓLÜ×%Ñ% e§j¡j°$·)±)Ó<ó
ð 	
r1   c                 óè   — |s
t        «       }| j                  j                  «       j                  || j                  «      \  }}|| j	                  | j
                  ||j                  «       h«      gz   S )z)From Iddo Lev's PhD Dissertation p108-109)r   r+   r7   Úcompile_posr(   r&   Úget)r.   ÚcounterÚcompiled_glueÚ	new_formss       r/   ÚcompilezGlueFormula.compilen   sg   € áÜ“iˆGØ%)§Y¡Y×%7Ñ%7Ó%9×%EÑ%EØ�T—^‘^ó&
Ñ"ˆ˜	ð Ø�N‰N˜4Ÿ<™<¨¸¿¹»¸ÓHð
ñ 
ð 	
r1   c                 óœ   — | j                  | j                  j                  «       | j                  j                  «       | j                  «      S rD   )r(   r&   r7   r+   r,   ©r.   s    r/   r7   zGlueFormula.simplifyy   s8   € Ø�~‰~Ø�L‰L×!Ñ!Ó# T§Y¡Y×%7Ñ%7Ó%9¸4¿<¹<ó
ð 	
r1   c                 ó    — | j                   |j                   k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rD   )r(   r&   r+   rN   s     r/   Ú__eq__zGlueFormula.__eq__~   sA   € à�N‰N˜eŸo™oÑ-ò (Ø—‘ §¡Ñ-ò(à—	‘	˜UŸZ™ZÑ'ð	
r1   c                 ó   — | |k(   S rD   © rN   s     r/   Ú__ne__zGlueFormula.__ne__…   s   € Ø˜5‘=Ð Ð r1   c                 ó0   — t        | «      t        |«      k  S rD   ©r$   rN   s     r/   Ú__lt__zGlueFormula.__lt__‰   s   € Ü�4‹yœ3˜u›:Ñ%Ð%r1   c                 óô   — t        | j                  t        «      sJ ‚| j                  › d| j                  › �}| j                  r4|ddj                  d„ t        | j                  «      D «       «      z   dz   z  }|S )Nú : z : {r!   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrD   r`   )Ú.0Úindexs     r/   ú	<genexpr>z&GlueFormula.__str__.<locals>.<genexpr>‘   s   è ø€ Ò"P°%¤3 u§:Ñ"Pùs   ‚ú})r#   r,   r"   r&   r+   ÚjoinÚsorted)r.   Úaccums     r/   Ú__str__zGlueFormula.__str__Œ   sl   € Ü˜$Ÿ,™,¬Ô,Ð,Ð,Ø—<‘<�.  D§I¡I ;Ð/ˆØ�<Š<ØØ˜Ÿ™Ñ"P¼6À$Ç,Á,Ó;OÔ"PÓPÑPÐSVÑVñˆEð ˆr1   c                 ó   — d| z  S )Nú%sr]   rY   s    r/   Ú__repr__zGlueFormula.__repr__•   s   € Ø�d‰{Ðr1   rD   )Ú__name__Ú
__module__Ú__qualname__r0   r;   rG   r:   rP   rW   r7   r[   r^   ra   rl   ro   r]   r1   r/   r   r   $   s@   „ óò4KòB(ò0ò
ó	
ò
ò

ò!ò&òór1   r   c                   ól   — e Zd Zdd„Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚGlueDictNc                 ó@   — || _         || _        | j                  «        y rD   )ÚfilenameÚfile_encodingÚ	read_file)r.   rv   Úencodings      r/   r0   zGlueDict.__init__š   s   € Ø ˆŒØ%ˆÔØ�‰Õr1   c                 ó�  — |r| j                  «        	 t        j                  j                  | j                  d| j
                  ¬«      }|j                  «       }|D �]a  }|j                  «       }t        |«      sŒ |d   dk(  rŒ)|j                  dd«      }g }d}d}	d}
d }t        |«      dkD  rŠt        |d   «      D ]y  \  }}|d	k(  r|dk(  r|dz   }	|dz  }Œ|d
k(  r2|dz  }|dk(  sŒ+|d   |	|
 }|d   |
dz   | }|j                  ||g«       ŒR|dk(  r	|dk(  sŒ]|}
Œ`|dk(  sŒf|dk7  rt        d|z   «      ‚ n t        |«      dkD  rb|d   j                  d«      dz   }|d   j                  d«      }||k(  rt        «       }n't        d„ |d   || j                  d«      D «       «      }	 |d   j                  d	«      }|d   j                  d
«      }|d   d | j                  «       }|d   |dz   | }|| vri | |<   |€{|rQ| |   D ]G  }|| |   vrg | |   |<   | |   |   }| |   |   j#                  |«       | |   |   j#                  |«       ŒI �Œõd | |   vrg | |   d <   | |   d    j#                  |«       �Œ|| |   vrg | |   |<   |r| |   |   j#                  | |   |   «       | |   |   j#                  |«       �Œd y # t        $ rU}	 t        j                  j                  d| j                  z   d| j
                  ¬«      }n# t        $ r |‚w xY wY d }~�ŒÑd }~ww xY w# t         $ r |d   j                  «       }d }Y �ŒQw xY w)NÚtext)Úformatry   zfile:r   ú#rc   é   é   ú(ú)ú,z&Formula syntax is incorrect for entry ú[ú]c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrD   )Ústrip)re   Úrs     r/   rg   z%GlueDict.read_file.<locals>.<genexpr>è   s   è ø€ ò .Ø&'˜Ÿ™Ÿ	ñ.ùs   ‚)ÚclearÚnltkÚdataÚloadrv   rw   ÚLookupErrorÚ
splitlinesr†   ÚlenÚsplitÚ	enumerateÚappendr'   rf   Ú	frozensetÚ	ExceptionÚextend)r.   Úempty_firstÚcontentsr?   ÚlinesÚlineÚpartsÚglue_formulasÚparen_countÚtuple_startÚtuple_commaÚrelationshipsÚiÚcÚmeaning_termÚ	glue_termÚ	rel_startÚrel_endÚstart_inheritanceÚend_inheritanceÚsemÚ	supertypeÚrelsr+   s                           r/   rx   zGlueDict.read_fileŸ   sõ  € ÙØ�J‰JŒLð	Ü—y‘y—~‘~Ø—‘ f°t×7IÑ7Ið &ó ˆHð ×#Ñ#Ó%ˆàó a	ˆDà—:‘:“<ˆDÜ�t”9ØØ�A‰w˜#Š~Øà—J‘JØ�qóˆEð ˆMØˆKØˆKØˆKà ˆMä�5‹z˜AŠ~Ü% e¨A¡hÓ/ò ‘D�A�qØ˜C’xØ&¨!Ò+Ø*+¨a©%˜KØ# qÑ(™Ø˜cšØ# qÑ(˜Ø&¨!Ó+Ø+0°©8Ø +¨Kð,˜Lð ).¨a©°¸q±À1Ð(E˜IØ)×0Ñ0Ø!-¨yÐ 9õð ˜cšà'¨1Ó,à*+™KØ˜c›à'¨1Ò,ä".Ø HÈ4Ñ Oó#ð ñ ð7ô: �5‹z˜AŠ~Ø! !™HŸN™N¨3Ó/°!Ñ3�	Ø ™(Ÿ.™.¨Ó-�Ø Ò'Ü$-£K‘Mä$-ñ .Ø+0°©8°I¸gÐ+F×+LÑ+LÈSÓ+Qô.ó %�Mð!Ø$)¨!¡H§N¡N°3Ó$7Ð!Ø"'¨¡(§.¡.°Ó"5�Ø˜A‘hÐ1Ð 1Ð2×8Ñ8Ó:�Ø! !™HÐ%6¸Ñ%:¸_ÐM�	ð
 ˜$‰Ø��S‘	ð Ð%ñ Ø $ Y¡ò ˜Ø t¨C¡yÑ0Ø.0˜D ™I d™OØ# I™¨tÑ4˜Ø˜S™	 $™×.Ñ.¨tÔ4Ø˜S™	 $™×.Ñ.Ø)õòð  4¨¡9Ñ,Ø*,˜˜S™	 $™Ø˜‘I˜d‘O×*Ñ*Ø%öð !¨¨S©	Ñ1Ø/1�D˜‘I˜mÑ,ÙØ˜‘I˜mÑ,×3Ñ3°D¸±OÀMÑ4RÔSØ�S‘	˜-Ñ(×/Ñ/Ø!öña	øô ò 	ðÜŸ9™9Ÿ>™>Ø˜dŸm™mÑ+°FÀT×EWÑEWð *ó ‘øô ò Ø�ðúõ ûð	ûôR ò !Ø˜A‘h—n‘nÓ&�Ø “	ð!ús<   ”6K Æ*A	L#Ë	L Ë9LÌLÌLÌLÌL Ì#MÍMc                 óø   — d}| D ]r  }d|z  }| |   D ]c  }d}| |   |   D ]T  }|dk(  r	||dz   z  }n|dt        |«      dz   z  z  }|d|z  z  }|r|t        | |   |   «      k(  r|d|z  z  }|dz  }|dz  }ŒV Œe Œt |S )	NÚ rn   r   z: ú r~   z : %sú
)rŽ   )r.   rk   ÚposÚstr_posÚrelsetrŸ   Úgfs          r/   rl   zGlueDict.__str__  sÊ   € ØˆØò 	ˆCØ˜S‘jˆGØ˜s™)ò �Ø�Ø˜s™) FÑ+ò 	�BØ˜A’vØ ¨4¡Ñ/™à ¬¨G«°qÑ(8Ñ!9Ñ9˜Ø˜T B™YÑ&�EÙ !¤s¨4°©9°VÑ+<Ó'=Ò"=Ø ¨6Ñ!1Ñ1˜Ø˜T‘M�EØ˜‘F‘Añ	ñð	ð ˆr1   c           	      óÂ  — |€l|j                   d   }t        t        j                  |d   j	                  «       «      «      }|j                   |d      }| j                  ||t        «       |«      S | j                  |||«      }t        j                  |d   j	                  «       «      D ]4  }	|j                   |	   }
|j                  | j                  ||
||«      «       Œ6 |S )Nr   Údeps)	ÚnodesÚlistr   Úfrom_iterableÚvaluesÚto_glueformula_listr   Úlookupr”   )r.   ÚdepgraphÚnoderT   ÚverboseÚtopÚdepListÚrootÚglueformulasÚdep_idxrA   s              r/   r¸   zGlueDict.to_glueformula_list&  sÓ   € Øˆ<à—.‘. Ñ#ˆCÜœ5×.Ñ.¨s°6©{×/AÑ/AÓ/CÓDÓEˆGØ—>‘> '¨!¡*Ñ-ˆDà×+Ñ+¨H°d¼G»IÀwÓOÐOà—{‘{ 4¨°7Ó;ˆÜ×*Ñ*¨4°©<×+>Ñ+>Ó+@ÓAò 	ˆGØ—.‘. Ñ)ˆCØ×ÑØ×(Ñ(¨°3¸ÀÓIõð	ð
 Ðr1   c           	      ó   — | j                  |«      }d }|D ]  }|| v sŒ| |   } n |€g S | j                  ||«       | j                  |||«      }t        |«      st	        d|d   ›d|d   ›d|d   ›d�«      ‚| j                  ||d   |||«      S )Nz,There is no GlueDict entry for sem type of 'Úwordz' with tag 'Útagz', and rel 'Úrelr3   )Úget_semtypesÚadd_missing_dependenciesÚ_lookup_semtype_optionrŽ   ÚKeyErrorÚ#get_glueformulas_from_semtype_entry)r.   r»   rº   rT   Úsemtype_namesÚsemtyperF   r¹   s           r/   r¹   zGlueDict.lookup7  s»   € Ø×)Ñ)¨$Ó/ˆàˆØ!ò 	ˆDØ�tŠ|Ø˜t™*�Ùð	ð ˆ?àˆIà×%Ñ% d¨HÔ5à×,Ñ,¨W°d¸HÓEˆä�6Œ{Ýà15°f³¸tÀE»{ÈDÐQVËKðYóð ð
 ×7Ñ7Ø�D˜‘L $¨°'ó
ð 	
r1   c                 óè   — |d   j                  «       }|dk(  rZ|j                  |d      }| j                  d||«      }|d   }|d   j                  |g «       |d   |   j	                  |d   «       y y )NrÅ   ÚmainÚheadÚsubjr³   Úaddress)Úlowerr´   Úlookup_uniqueÚ
setdefaultr‘   )r.   r»   rº   rÅ   ÚheadnoderÐ   Úrelations          r/   rÇ   z!GlueDict.add_missing_dependenciesQ  s~   € Ø�5‰k×ÑÓ!ˆà�&Š=Ø—~‘~ d¨6¡lÑ3ˆHØ×%Ñ% f¨h¸ÓAˆDØ˜E‘{ˆHØ�‰L×#Ñ# H¨bÔ1Ø�‰L˜Ñ"×)Ñ)¨$¨y©/Õ:ð r1   c                 ó@  ‡— t        ˆfd„t        j                  |d   j                  «       «      D «       «      }	 ||   }|S # t        $ rR t        «       }t        |«      d hz
  D ]"  }t        |«      t        |«      kD  sŒ||k  sŒ!|}Œ$ |s	d |v rd }nY y ||   }Y |S w xY w)Nc              3   óª   •K  — | ]J  }‰j                   |   d    j                  «       t        vr"‰j                   |   d    j                  «       –— ŒL y­w)rÅ   N)r´   rÒ   ÚOPTIONAL_RELATIONSHIPS)re   rA   rº   s     €r/   rg   z2GlueDict._lookup_semtype_option.<locals>.<genexpr>]  sP   øè ø€ ò "
àØ�~‰~˜cÑ" 5Ñ)×/Ñ/Ó1Ô9OÑOð �N‰N˜3Ñ Ñ&×,Ñ,×.ñ"
ùs   ƒAAr³   )r’   r   r¶   r·   rÉ   r"   rŽ   )r.   rÌ   r»   rº   rž   r¹   Ú
best_matchÚrelset_options      `    r/   rÈ   zGlueDict._lookup_semtype_option\  s½   ø€ Ü!ó "
ä×*Ñ*¨4°©<×+>Ñ+>Ó+@ÓAô"
ó 
ˆð	)Ø˜]Ñ+ˆFð( ˆøô' ò 	)ô
 #›ˆJÜ!$ W£°°Ñ!6ò /�ä˜Ó&¬¨Z«Ó8Ø%¨Ó5à!.‘Jð/ñ Ø˜7‘?Ø!%‘JáØ˜ZÑ(‰Fàˆð'	)ús#   »A Á<BÁ?BÂBÂBÂBc                 ó²   — |d   j                  «       }|d   j                  «       }|dk(  r|t        v r
t        |   gS t        d   gS |dv r|d   |gS |d   gS )zj
        Based on the node, return a list of plausible semtypes in order of
        plausibility.
        rÅ   rÃ   Úspecr   )r   r   rÄ   )rÒ   ÚSPEC_SEMTYPES)r.   r»   rÅ   rÃ   s       r/   rÆ   zGlueDict.get_semtypesz  sw   € ð
 �5‰k×ÑÓ!ˆØ�F‰|×!Ñ!Ó#ˆà�&Š=Ø”}Ñ$Ü% dÑ+Ð,Ð,ä% iÑ0Ð1Ð1ØÐ$Ñ$Ø˜‘K Ð%Ð%à˜‘K�=Ð r1   c                 óH  — g }| j                  «       }|D ]Š  \  }}	 || j                  ||«      |	«      }
t        |«      s||
_        n|› t        |«      dz   › �|
_        | j	                  |
j
                  |||j                  «       «      |
_        |j                  |
«       ŒŒ |S )Nr   )Úget_GlueFormula_factoryÚget_meaning_formularŽ   rÃ   Úinitialize_labelsr+   rS   r‘   )r.   r¹   rÃ   r»   rº   rT   rÀ   ÚglueFormulaFactoryr&   r+   r±   s              r/   rÊ   z,GlueDict.get_glueformulas_from_semtype_entryŒ  s¦   € ð ˆà!×9Ñ9Ó;ÐØ#ò 		$‰MˆG�TÙ# D×$<Ñ$<¸WÀdÓ$KÈTÓRˆBÜ�|Ô$Ø�•à!˜F¤3 |Ó#4°qÑ#8Ð"9Ð:�”à×,Ñ,¨R¯W©W°d¸HÀgÇkÁkÃmÓTˆBŒGà×Ñ Õ#ð		$ð Ðr1   c                 óJ   — |j                  dd«      }|j                  d|«      S )z¤
        :param generic: A meaning formula string containing the
            parameter "<word>"
        :param word: The actual word to be replace "<word>"
        ú.r«   z<word>)Úreplace)r.   ÚgenericrÃ   s      r/   rá   zGlueDict.get_meaning_formulaž  s%   € ð �|‰|˜C Ó$ˆØ�‰˜x¨Ó.Ð.r1   c           	      ó¤  — t        |t        j                  «      ri| j                  |j                  j                  «       |||«      }|d   j                  «       rt        j                  |«      S t        j                  |«      S t        j                  | j                  |j                  |||«      | j                  |j                  |||«      «      S )Nr   )r#   r   ÚAtomicExpressionÚfind_label_namerF   rÒ   Úisupperr   ÚConstantExpressionrM   râ   r8   Ú
consequent)r.   Úexprr»   rº   Úunique_indexrF   s         r/   râ   zGlueDict.initialize_labels§  s¦   € Ü�dœK×8Ñ8Ô9Ø×'Ñ'¨¯	©	¯©Ó(9¸4ÀÈ<ÓXˆDØ�A‰w�‰Ô Ü"×5Ñ5°dÓ;Ð;ä"×5Ñ5°dÓ;Ð;ä×,Ñ,Ø×&Ñ& t§¡¸¸hÈÓUØ×&Ñ& t§¡¸¸hÈÓUóð r1   c                 óÌ  — 	 |j                  d«      }|d | }||dz   d  }|dk(  r$| j                  ||j                  |d      ||«      S | j                  || j                  |||«      ||«      S # t        $ rì | j                  |«      }|dk(  r|cY S |dk(  rd|z  cY S |dk(  rd	|z  cY S |dk(  r#| j                  |j                  |d      «      cY S |d
k(  r|j                  «       › |› �cY S |dk(  r$| j                  | j                  d||«      «      cY S |dk(  r$| j                  | j                  d||«      «      cY S | j                  | j                  |||«      «      cY S w xY w)Nrå   r   ÚsuperrÏ   ÚfÚvz%svr‡   z%srÚvarr   ÚconjaÚbÚconjb)rf   rê   r´   rÓ   Ú
ValueErrorÚ	get_labelÚupper)	r.   rF   r»   rº   rï   ÚdotÚ
before_dotÚ	after_dotÚlbls	            r/   rê   zGlueDict.find_label_name´  s†  € ð!	PØ—*‘*˜S“/ˆCà˜d˜s˜ˆJØ˜S 1™W˜Y˜ˆIØ˜WÒ$Ø×+Ñ+Ø˜xŸ~™~¨d°6©lÑ;¸XÀ|óð ð ×+Ñ+ØØ×&Ñ& z°4¸ÓBØØ ó	ð øô ò 	PØ—.‘. Ó&ˆCØ�sŠ{Ø’
Ø˜’Ø˜s‘{Ò"Ø˜’Ø˜s‘{Ò"Ø˜’Ø—~‘~ h§n¡n°T¸&±\Ñ&BÓCÒCØ˜’ØŸ)™)›+˜ | nÐ5Ò5Ø˜’Ø—~‘~ d×&8Ñ&8¸À$ÈÓ&QÓRÒRØ˜’Ø—~‘~ d×&8Ñ&8¸À$ÈÓ&QÓRÒRà—~‘~ d×&8Ñ&8¸¸tÀXÓ&NÓOÒOð#	PúsB   ‚AA. Á	$A. Á.!E#Â
E#Â
E#Â)&E#ÃE#Ã,'E#Ä'E#Ä>"E#Å"E#c                 óf   — |d   }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
        rÑ   )rò   ÚgÚhrŸ   ÚjÚkÚlÚmÚnÚoÚpÚqr‡   ÚsÚtÚuró   ÚwÚxÚyÚzr   rö   r    Údr?   r   é   r   )Úintr$   )r.   r»   ÚvalueÚletterÚnums        r/   rù   zGlueDict.get_labelØ  sM   € ð �Y‘ˆò
ð6 �!‰)ñ7ˆô8 �%‹j˜BÑˆØ�Š7ØœC ›HÑ$Ð$àˆMr1   c                 ó¨  — t        j                  |d   j                  «       «      D �cg c]B  }|j                  |   d   j	                  «       |j	                  «       k(  r|j                  |   ‘ŒD }}t        |«      dk(  rt        dj                  |d   |«      «      ‚t        |«      dkD  rt        dj                  |d   |«      «      ‚|d   S c c}w )z\
        Lookup 'key'. There should be exactly one item in the associated relation.
        r³   rÅ   r   z#'{}' doesn't contain a feature '{}'rÃ   r   z&'{}' should only have one feature '{}')r   r¶   r·   r´   rÒ   rŽ   rÉ   r|   )r.   rÅ   r»   rº   rA   r³   s         r/   rÓ   zGlueDict.lookup_unique  sÓ   € ô ×*Ñ*¨4°©<×+>Ñ+>Ó+@ÓAö
àØ�~‰~˜cÑ" 5Ñ)×/Ñ/Ó1°S·Y±Y³[Ò@ð �N‰N˜3Óð
ˆð 
ô ˆt‹9˜Š>ÜØ5×<Ñ<¸TÀ&¹\È3ÓOóð ô �‹Y˜Š]ÜØ8×?Ñ?ÀÀVÁÈcÓRóð ð ˜‘7ˆNùò
s   ©ACc                 ó   — t         S rD   )r   rY   s    r/   rà   z GlueDict.get_GlueFormula_factory  s   € ÜÐr1   rD   )T)NNF)rp   rq   rr   r0   rx   rl   r¸   r¹   rÇ   rÈ   rÆ   rÊ   rá   râ   rê   rù   rÓ   rà   r]   r1   r/   rt   rt   ™   sR   „ óó
sòjó$ò"
ò4;òò<!ò$ò$/òò"PòH)òVó*r1   rt   c                   óT   — e Zd Z	 dd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zy)ÚGlueNc                 ó²   — || _         || _        || _        ddlm}  |«       | _        |r|| _        y t        j                  j                  ddd«      | _        y )Nr   )ÚProver9ÚgrammarsÚsample_grammarszglue.semtype)
r¼   Úremove_duplicatesÚ	depparserr‰   r  ÚproverÚsemtype_fileÚosÚpathri   )r.   r"  r  r   r¼   r  s         r/   r0   zGlue.__init__  sN   € ð ˆŒØ!2ˆÔØ"ˆŒå á“iˆŒáØ ,ˆDÕä "§¡§¡ØÐ-¨~ó!ˆDÕr1   c           	      óî   — |r| j                   j                  |«       y | j                   j                  t        j                  j                  t        j                  j                  ddd«      «      «       y )Nr  r  zglue_train.conll)	r   ÚtrainÚtrain_from_filer‰   rŠ   Úfindr#  r$  ri   )r.   Ú	depgraphss     r/   Útrain_depparserzGlue.train_depparser/  sO   € ÙØ�N‰N× Ñ  Õ+à�N‰N×*Ñ*Ü—	‘	—‘Ü—G‘G—L‘L Ð->Ð@RÓSóõr1   c                 óv   — g }| j                  |«      D ]"  }|j                  | j                  |«      «       Œ$ |S rD   )Úparse_to_compiledr”   Úget_readings)r.   ÚsentenceÚreadingsÚagendas       r/   Úparse_to_meaningzGlue.parse_to_meaning9  s=   € ØˆØ×,Ñ,¨XÓ6ò 	7ˆFØ�O‰O˜D×-Ñ-¨fÓ5Õ6ð	7àˆr1   c                 ó:  — g }t        |«      }t        «       }t        «       }|�râ|j                  «       }|j                  j	                  «       }t        |t        j                  «      rØ|D ]³  }	 t        |j                  t        j                  «      r|j                  j                  }	nt        j                  «       }	|j                  j                  ||	«       ||   D ]=  }
|j                  |
j                  z  rŒ	 |j                  |j                  |
«      «       Œ? Œµ 	 ||j                     j                  |«       nÂ|D ]¨  }||   D ]ž  }	 t        |j                  t        j                  «      r|j                  j                  }	nt        j                  «       }	|j                  ||	«       |j                  |j                  z  s!	 |j                  |j                  |«      «       Œ  Œª 	 ||   j                  |«       |r�Œâ|D ]7  }||   D ]-  }t        |j                  «      |k(  sŒ| j'                  ||«       Œ/ Œ9 |D ]7  }||   D ]-  }t        |j                  «      |k(  sŒ| j'                  ||«       Œ/ Œ9 |S # t        j                   $ r Y �Œ¸w xY w# t        j"                  $ r Y �ŒFw xY w# t$        $ r |g||j                  <   Y ŒÍw xY w# t        j                   $ r Y Œÿw xY w# t        j"                  $ r Y �Œ¸w xY w# t$        $ r
 |g||<   Y �Œw xY wrD   )rŽ   ÚdictÚpopr+   r7   r#   r   rM   r6   ÚbindingsÚBindingDictr8   Úunifyr,   r‘   r;   r5   ÚUnificationExceptionrÉ   Ú_add_to_reading_list)r.   r0  r/  Úagenda_lengthÚatomicsÚ
nonatomicsÚcurÚ	glue_simpÚkeyr5  ÚatomicÚ	nonatomicÚentryr±   s                 r/   r-  zGlue.get_readings?  sô  € ØˆÜ˜F›ˆÜ“&ˆÜ“Vˆ
ÚØ—*‘*“,ˆCØŸ™×)Ñ)Ó+ˆIÜØœ;×4Ñ4ôð #ò �CðÜ% c§h¡h´×0QÑ0QÔRØ'*§x¡x×'8Ñ'8™Hä'2×'>Ñ'>Ó'@˜HØ!×,Ñ,×2Ñ2°3¸ÔAØ&-¨c¡lò )˜Fà #§¡¨f¯n©nÓ <ð!)Ø$*§M¡M°#·+±+¸fÓ2EÕ$Fñ)ðð"=Ø˜y×3Ñ3Ñ4×;Ñ;¸CÕ@ð
 &ò !�CØ%/°¡_ò !˜	ð!Ü)Ø )§¡´×0QÑ0Qô ð ,5¯>©>×+BÑ+B¡ä+6×+BÑ+BÓ+D Ø%ŸO™O¨C°Ô:à #§¡¨i×.?Ñ.?Ò ?ð!)Ø$*§M¡M°)×2CÑ2CÀCÓ2HÔ$Iøñ!ð!ð&/Ø˜IÑ&×-Ñ-¨cÔ2óc ðj ò 	<ˆEØ˜e‘nò <�Ü�r—z‘z“? mÓ3Ø×-Ñ-¨b°(Õ;ñ<ð	<ð  ò 	<ˆEØ  Ñ'ò <�Ü�r—z‘z“? mÓ3Ø×-Ñ-¨b°(Õ;ñ<ð	<ð ˆøôU (3×'RÑ'Rò !)Ú$(ð!)ûä&×;Ñ;ò Úðûô  ò =Ø8;°u�J˜y×3Ñ3Ó4ð=ûô& (3×'RÑ'Rò !)Ù$(ð!)ûä*×?Ñ?ò !Ú ð!ûô  ò /Ø*-¨�G˜IÔ&ð/úsŒ   Á/BJÃ= JÄJÄ"J5 ÅA:K-Ç
 KÇ/L ÊJÊJÊJÊJÊJ2Ê1J2Ê5KËKËK*Ë'K-Ë)K*Ë*K-Ë-LÌLÌLÌLc                 ó  — d}| j                   r2|D ]-  }	 |j                  |j                  | j                  «      rd} nŒ/ |r|j                  |j                  «       y y # t        $ r}t        d|«       Y d }~Œid }~ww xY w)NTFz2Error when checking logical equality of statements)r  Úequivr&   r!  r“   Úprintr‘   )r.   ÚglueformulaÚreading_listÚadd_readingÚreadingr?   s         r/   r9  zGlue._add_to_reading_listƒ  s�   € ØˆØ×!Ò!Ø'ò 	S�ðSØ—}‘} [×%8Ñ%8¸$¿+¹+ÔFØ&+˜Ùð Gð	Sñ Ø×Ñ × 3Ñ 3Õ4ð øô !ò Sô ÐNÐPQ×RÑRûð	Sús   •(A Á 	A?Á)A:Á:A?c                 ó®   — | j                  |«      D �cg c]  }| j                  |«      ‘Œ }}|D �cg c]  }| j                  |«      ‘Œ c}S c c}w c c}w rD   )Ú	dep_parseÚdepgraph_to_glueÚgfl_to_compiled)r.   r.  ÚdgÚgflsÚgfls        r/   r,  zGlue.parse_to_compiled”  sN   € Ø48·N±NÀ8Ó4LÖM¨b�×%Ñ% bÕ)ÐMˆÐMØ59Ö:¨c�×$Ñ$ SÕ)Ò:Ð:ùò NùÚ:s
   ”A²Ac                 óø   — | j                   €"ddlm}  || j                  «       ¬«      | _         | j                   j                  s| j                  «        | j                   j                  || j                  ¬«      S )z³
        Return a dependency graph for the sentence.

        :param sentence: the sentence to be parsed
        :type sentence: list(str)
        :rtype: DependencyGraph
        r   ©Ú
MaltParser©Útagger)r¼   )r   Ú
nltk.parserS  Úget_pos_taggerÚ_trainedr*  r*   r¼   )r.   r.  rS  s      r/   rK  zGlue.dep_parse˜  s]   € ð �>‰>Ð!Ý-á'¨t×/BÑ/BÓ/DÔEˆDŒNØ�~‰~×&Ò&Ø× Ñ Ô"Ø�~‰~×#Ñ# H°d·l±lÐ#ÓCÐCr1   c                 ó@   — | j                  «       j                  |«      S rD   )Úget_glue_dictr¸   )r.   rº   s     r/   rL  zGlue.depgraph_to_glueª  s   € Ø×!Ñ!Ó#×7Ñ7¸ÓAÐAr1   c                 ó,   — t        | j                  «      S rD   )rt   r"  rY   s    r/   rZ  zGlue.get_glue_dict­  s   € Ü˜×)Ñ)Ó*Ð*r1   c                 ó¾   — t        «       }g }|D ]"  }|j                  |j                  |«      «       Œ$ | j                  rt	        d«       |D ]  }t	        |«       Œ |S )NzCompiled Glue Premises:)r   r”   rW   r¼   rE  )r.   rP  Úindex_counterÚreturn_listr±   Úcgfs         r/   rM  zGlue.gfl_to_compiled°  sd   € Ü›	ˆØˆØò 	:ˆBØ×Ñ˜rŸz™z¨-Ó8Õ9ð	:ð �<Š<ÜÐ+Ô,Ø"ò �Ü�c•
ðð Ðr1   c                 ó¼   — ddl m} t        g d¢«      }|j                  d¬«      }t	        ||¬«      }t        ||¬«      }t        ||¬«      }t        ddg|¬«      }|S )	Nr   )Úbrown)	)z^-?[0-9]+(\.[0-9]+)?$ÚCD)z(The|the|A|a|An|an)$ÚAT)z.*able$ÚJJ)z.*ness$ÚNN)z.*ly$ÚRB)z.*s$ÚNNS)z.*ing$ÚVBG)z.*ed$ÚVBD)z.*re  Únews)Ú
categories)Úbackoff)z(A|a|An|an)$r   )z(Every|every|All|all)$r   )Únltk.corpusra  r   Útagged_sentsr   r   r   )r.   ra  Úregexp_taggerÚbrown_trainÚunigram_taggerÚbigram_taggerÚtrigram_taggerÚmain_taggers           r/   rW  zGlue.get_pos_tagger½  sm   € Ý%ä$ò
ó
ˆð ×(Ñ(°FÐ(Ó;ˆÜ& {¸MÔJˆÜ$ [¸.ÔIˆÜ& {¸MÔJˆô #Ø*Ð,UÐVØ"ô
ˆð
 Ðr1   ©NFNFrD   )rp   rq   rr   r0   r*  r1  r-  r9  r,  rK  rL  rZ  rM  rW  r]   r1   r/   r  r    s@   „ àRWóó$òòBòH5ò";òDò$Bò+òór1   r  c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)ÚDrtGlueFormulaNc                 ó  — |s
t        «       }t        |t        «      r%t        j                  j                  |«      | _        n=t        |t        j                  «      r|| _        nt        d|›d|j                  ›�«      ‚t        |t        «      r0t        j                  «       j                  |«      | _        || _        y t        |t        j                  «      r|| _        || _        y t        d|›d|j                  ›�«      ‚r    )r"   r#   r$   r   ÚDrtExpressionr%   r&   r'   r(   r   r)   r*   r+   r   r,   r-   s       r/   r0   zDrtGlueFormula.__init__Ü  sÑ   € ÙÜ“eˆGä�gœsÔ#Ü×,Ñ,×7Ñ7¸Ó@ˆD�LÜ˜¤×!2Ñ!2Ô3Ø"ˆD�Låâ˜G×-Ò-ð/óð ô
 �dœCÔ Ü#×5Ñ5Ó7×=Ñ=¸dÓCˆDŒIð ˆ�ô ˜œk×4Ñ4Ô5ØˆDŒIð ˆ�õ â˜Ÿšð)óð r1   c                 ó,   — t        j                  |«      S rD   )r   ÚDrtVariableExpressionrE   s     r/   rG   z&DrtGlueFormula.make_VariableExpressionö  s   € Ü×(Ñ(¨Ó.Ð.r1   c                 ó.   — t        j                  ||«      S rD   )r   ÚDrtLambdaExpressionrI   s      r/   r:   z$DrtGlueFormula.make_LambdaExpressionù  s   € Ü×&Ñ& x°Ó6Ð6r1   rD   )rp   rq   rr   r0   rG   r:   r]   r1   r/   rw  rw  Û  s   „ óò4/ó7r1   rw  c                   ó   — e Zd Zd„ Zy)ÚDrtGlueDictc                 ó   — t         S rD   )rw  rY   s    r/   rà   z#DrtGlueDict.get_GlueFormula_factoryþ  s   € ÜÐr1   N)rp   rq   rr   rà   r]   r1   r/   r  r  ý  s   „ ór1   r  c                   ó   — e Zd Z	 dd„Zd„ Zy)ÚDrtGlueNc                 ó|   — |s!t         j                  j                  ddd«      }t        j	                  | ||||«       y )Nr  r  zdrt_glue.semtype)r#  r$  ri   r  r0   )r.   r"  r  r   r¼   s        r/   r0   zDrtGlue.__init__  s9   € ñ ÜŸ7™7Ÿ<™<ØÐ-Ð/AóˆLô 	�‰�d˜LÐ*;¸YÈÕPr1   c                 ó,   — t        | j                  «      S rD   )r  r"  rY   s    r/   rZ  zDrtGlue.get_glue_dict  s   € Ü˜4×,Ñ,Ó-Ð-r1   ru  )rp   rq   rr   r0   rZ  r]   r1   r/   r‚  r‚    s   „ àRWóQó.r1   r‚  c                 ób  — ddl m} g d¢}t        d«       t        g d¢«      } ||¬«      }t	        |d¬«      }t        |«      D ]i  \  }}|| k(  s| d	k(  sŒt        d
|› d|› �«       |j                  |j                  «       «      D ]  }t        |j                  «       «       Œ t        d«       Œk y )Nr   rR  )zDavid sees MaryzDavid eats a sandwichzevery man chases a dogzevery man believes a dog sleepszJohn gives David a sandwichzJohn chases himselfz"============== DEMO ==============))z^(David|Mary|John)$ÚNNP)zN^(sees|eats|chases|believes|gives|sleeps|chases|persuades|tries|seems|leaves)$ÚVB)z!^(go|order|vanish|find|approach)$r‡  )z^(a)$r   )z	^(every)$r   )z.^(sandwich|man|dog|pizza|unicorn|cat|senator)$re  )z^(big|gray|former)$rd  )z^(him|himself)$ÚPRPrT  F)r   r¼   r4   z[[[Example z]]]  r«   )	rV  rS  rE  r   r  r�   r1  r�   r7   )	Úshow_examplerS  ÚexamplesrU  r   r+   rŸ   r.  rI  s	            r/   Údemor‹    s³   € Ý%ò€Hô$ 
Ð
.Ô/äò	
ó€Fñ   &Ô)€IÜ˜)¨UÔ3€Dä  Ó*ò ‰ˆˆ8Ø�Ò °Ó 2Ü�K ˜s %¨ zÐ2Ô3Ø×0Ñ0°·±Ó1AÓBò *�Ü�g×&Ñ&Ó(Õ)ð*ä�"�Iñr1   Ú__main__)r4   )r#  Ú	itertoolsr   r‰   Únltk.internalsr   Únltk.semr   r   Únltk.sem.logicr   r   r	   r
   r   Únltk.tagr   r   r   r   rÞ   rÙ   r   r3  rt   r  rw  r  r‚  r‹  rp   r]   r1   r/   ú<module>r’     s´   ðó 
Ý ã Ý "ß %÷õ ÷ NÓ Mð 
Ø
ØØØ
Øñ€ò 3Ð ÷rñ rôj@ˆtô @÷F|ñ |ô~7�[ô 7ôD�(ô ô
.ˆdô .ó/ðd ˆzÒÙ…Fð r1   