
    /h              	          S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
Jr  SSKJrJrJrJrJrJrJrJrJr  SSKJrJrJrJr   " S S	5      r " S
 S\5      r " S S\5      r " S S5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\!5      r" " S S\!5      r# " S S\!5      r$ " S S\!5      r% " S S\!5      r& " S  S!\!5      r' " S" S#\!5      r( " S$ S%\!5      r) " S& S'5      r* " S( S)5      r+ " S* S+\,5      r-\.S,:X  GaF  \	" S-5      r/\/Ra                  S.S/S0S1S2S3S49  \/Ra                  S5S6S7S1S2S8S49  \/Ra                  S9S:S;S1S2S<S49  \/Ra                  S=S>S?S1S2S@S49  \/Rc                  5       u  r2r3\4" \35      SA:w  a  \/Rk                  SB5        \+" \2Rl                  SC9r7\" \75      Rq                  \3S   Rs                  SD5      \2Rt                  \2Rv                  SE9r<\<c	  \=" S5        g\<R}                  5       R                  5       r<\2R                  (       a%  \=" \<R                  5       R                  5       5        g\<R                  5         gg)Fa  
An interface to Boxer.

This interface relies on the latest version of the development (subversion) version of
C&C and Boxer.

Usage
=====

Set the environment variable CANDC to the bin directory of your CandC installation.
The models directory should be in the CandC root directory.
For example::

    /path/to/candc/
    bin/
        candc
        boxer
    models/
        boxer/
    N)reduce)OptionParserfind_binary)	DRSDrtApplicationExpressionDrtEqualityExpressionDrtNegatedExpressionDrtOrExpression	DrtParserDrtProposition	DrtTokensDrtVariableExpression)ExpectedMoreTokensExceptionLogicalExpressionExceptionUnexpectedTokenExceptionVariablec                       \ rS rSrSr     SS jrSS jrSS jrSS jr SS	 jr	 SS
 jr
SS jrSS jrSS jr/ S4S jrS rS rSrg)Boxer;   z
This class is an interface to Johan Bos's program Boxer, a wide-coverage
semantic parser that produces Discourse Representation Structures (DRSs).
NFc                 d    Uc
  [        5       nXl        XPl        X l        U R	                  X45        g)aj  
:param boxer_drs_interpreter: A class that converts from the
    ``AbstractBoxerDrs`` object hierarchy to a different object.  The
    default is ``NltkDrtBoxerDrsInterpreter``, which converts to the NLTK
    DRT hierarchy.
:param elimeq: When set to true, Boxer removes all equalities from the
    DRSs and discourse referents standing in the equality relation are
    unified, but only if this can be done in a meaning-preserving manner.
:param resolve: When set to true, Boxer will resolve all anaphoric DRSs and perform merge-reduction.
    Resolution follows Van der Sandt's theory of binding and accommodation.
N)NltkDrtBoxerDrsInterpreter_boxer_drs_interpreter_resolve_elimeqset_bin_dir)selfboxer_drs_interpreterelimeqbin_dirverboseresolves         F/var/www/auris/envauris/lib/python3.13/site-packages/nltk/sem/boxer.py__init__Boxer.__init__A   s1    & !($>$@!&;#*    c                     U R                  SX5      U l        [        R                  R	                  [        R                  R                  U R                  S S S5      5      U l        U R                  SX5      U l        g )Ncandcz	../modelsboxer)_find_binary
_candc_binospathnormpathjoin_candc_models_path
_boxer_bin)r   r    r!   s      r#   r   Boxer.set_bin_dir]   s`    ++GWF"$''"2"2GGLL"-{;#
 ++GWFr&   c                 p    Ub  U/OSnU R                  U//XSU5      u  nU(       d  [        SU S35      eU$ )a  
Use Boxer to give a first order representation.

:param input: str Input sentence to parse
:param occur_index: bool Should predicates be occurrence indexed?
:param discourse_id: str An identifier to be inserted to each occurrence-indexed predicate.
:return: ``drt.DrtExpression``
NUnable to interpret: ""interpret_multi_sents	Exceptionr   inputdiscourse_idquestionr!   discourse_idsds          r#   	interpretBoxer.interpretd   sI     +7*B))E7)]gV4UG1=>>r&   c                 n    Ub  U/OSnU R                  U/XSU5      u  nU(       d  [        SU S35      eU$ )a8  
Use Boxer to give a first order representation.

:param input: list of str Input sentences to parse as a single discourse
:param occur_index: bool Should predicates be occurrence indexed?
:param discourse_id: str An identifier to be inserted to each occurrence-indexed predicate.
:return: ``drt.DrtExpression``
Nr5   r6   r7   r:   s          r#   interpret_multiBoxer.interpret_multis   sG     +7*B))5'=GT4UG1=>>r&   c                 T    U R                  U Vs/ s H  oU/PM     snX#U5      $ s  snf )aK  
Use Boxer to give a first order representation.

:param inputs: list of str Input sentences to parse as individual discourses
:param occur_index: bool Should predicates be occurrence indexed?
:param discourse_ids: list of str Identifiers to be inserted to each occurrence-indexed predicate.
:return: list of ``drt.DrtExpression``
)r8   )r   inputsr>   r=   r!   r;   s         r#   interpret_sentsBoxer.interpret_sents   s0     ))"()&W&)=G
 	
)s   %c           
         UbE  [        U5      [        U5      :X  d   e[        [        R                  S U 5       5      (       d   eSnO-[	        [        [        [        [        U5      5      5      5      nSnU R                  XX4S9nU R                  XdS9nU R                  Xu5      nU V	s/ s H  oR                  U	S5      PM     sn	$ s  sn	f )a3  
Use Boxer to give a first order representation.

:param inputs: list of list of str Input discourses to parse
:param occur_index: bool Should predicates be occurrence indexed?
:param discourse_ids: list of str Identifiers to be inserted to each occurrence-indexed predicate.
:return: ``drt.DrtExpression``
Nc              3   (   #    U  H  oS Lv   M
     g 7fN ).0ids     r#   	<genexpr>.Boxer.interpret_multi_sents.<locals>.<genexpr>   s     )Q=RD.=s   TF)r!   )lenr   operatorand_listmapstrrange_call_candc_call_boxer_parse_to_drs_dictget)
r   rF   r>   r=   r!   use_disc_id	candc_out	boxer_outdrs_dictrN   s
             r#   r8   Boxer.interpret_multi_sents   s     $v;#m"4444(--)Q=)QRRRRK S%F*<!=>MK$$VH$V	$$Y$@	
 **9B1>?2R&???s   *Cc                     S[         R                  R                  U R                  SS/U   5      SS/nU R	                  SR                  [        S [        X5       5       / 5      5      U R                  UU5      $ )a  
Call the ``candc`` binary with the given input.

:param inputs: list of list of str Input discourses to parse
:param discourse_ids: list of str Identifiers to be inserted to each occurrence-indexed predicate.
:param filename: str A filename for the output file
:return: stdout
z--modelsr*   	questionsz--candc-printer
c              3   :   #    U  H  u  pS U S3/U-   v   M     g7f)z<META>''NrL   )rM   r?   rN   s      r#   rO   $Boxer._call_candc.<locals>.<genexpr>   s$     S8Ruqt1o&*8Rs   )r-   r.   r0   r1   _callsumzipr,   )r   rF   r>   r=   r!   argss         r#   rX   Boxer._call_candc   s|     GGLL007K2H2RS	
 zzIISF8RS OO

 
	
r&   c                    Sn [         R                  " SSSS9u  pE[        R                  " US5      nUR	                  UR                  S5      5        U(       a  UR                  5         SS	S
SSS	S/U R                     SS	S/U R                     SSSSSU/nU R                  SU R                  Xb5      n[        R                  " U5        U$ ! U(       a  UR                  5         f f = f)zo
Call the ``boxer`` binary with the given input.

:param candc_out: str output from C&C parser
:return: stdout
Nzboxer-z.inT)prefixsuffixtextwutf-8z--boxfalsez--semanticsdrsz	--resolvetruez--elimeqz--formatprologz--instantiatez--input)tempfilemkstempr-   fdopenwritedecodecloser   r   rg   r2   remove)r   r]   r!   ffdtemp_filenamerj   stdouts           r#   rY   Boxer._call_boxer   s     	 ( 0 0D!B 		"c"AGGI$$W-.	 fdmm,fdll+
" D$//4A
		- - 	 s   AC C'c           	      (    [        UUS/SXS-   /US9$ )NCANDCz)http://svn.ask.it.usyd.edu.au/trac/candc/z.exe)path_to_binenv_varsurlbinary_namesr!   r   )r   namer    r!   s       r#   r+   Boxer._find_binary   s*    Y;v.
 	
r&   c                    U(       aE  [        SU5        [        SU5        [        SU5        [        SUS-   SR                  U5      -   5        Uc9  U/U-   n[        R                  " U[        R                  [        R                  S9nOTSR                  XSR                  U5      5      n[        R                  " U[        R                  [        R                  SS	9nUR                  5       u  pxU(       a>  [        S
UR                  5        U(       a  [        SUS5        U(       a  [        SUS5        UR                  S:w  a6  [        SR                  USR                  U5      UR                  U5      5      eU$ )z
Call the binary with the given input.

:param input_str: A string whose contents are used as stdin.
:param binary: The location of the binary to call
:param args: A list of command-line arguments.
:return: stdout
zCalling:zArgs:zInput:zCommand: )r   stderrzecho "{}" | {} {}T)r   r   shellzReturn code:zstdout:
rc   zstderr:
r   z&ERROR CALLING: {} {}
Returncode: {}
{})	printr0   
subprocessPopenPIPEformatcommunicate
returncoder9   )	r   	input_strbinaryrj   r!   cmdpr   r   s	            r#   rg   Boxer._call   s+    *f%'4 (I&*fslSXXd^;< (T/C  Z__Z__UA%,,YOC  JOOJOO4A .!,,/k640k640<<1:AACHHTNALL&  r&   c                 b   UR                  S5      R                  S5      n0 nSnU[        U5      :  Gaz  X5   nUR                  S5      (       GaH  UR	                  S5      nUSU nUS   S:X  a  US   S:X  a  US	S nXgS	-   UR	                  S
5       n	US	-  nX5   nUR                  SU	 S35      (       d   eUSS  S:X  a  US S S-   nUR                  S5      (       d
   SU 35       e[        SU	 S35      n
S	nSn[        XjS  5       HB  u  pUS:X  a  US	-  nUS:X  d  M  US	-  nUS:X  d  M%  X-   S	-   nXlUS-    S:X  a  US-   nOUS	-   n  O   US:  d   eXlS R                  5       nU R                  XU5      nU R                  R                  U5      XH'   US	-  nU[        U5      :  a  GMz  U$ )Nrq   rc   r   zid(,   re      )zsem(z').'z).zcan't parse line: z,[[]z',')rz   splitrQ   
startswithindexendswith	enumeratestrip
_parse_drsr   r@   )r   r^   r\   linesr_   iline	comma_idxr<   drs_idsearch_startbrace_count	drs_startjc	drs_inputparseds                    r#   rZ   Boxer._parse_to_drs_dict"  s     )//5#e*n8Du%% JJsO	#Ai0?c)l2.>#.E#/"#5L!mdjjo>QxfXQ'788889&9t+D}}T**G.@,GG*"T&#45	%d=&9:DACx#q(Cx#q(&!+(4(81(<I#	A>%G,5M	,5M	! ; !2~%~ 2.446	+N)-)D)D)N)Nv)V&FAG #e*nH r&   c                 @    [        S U/U   5      R                  U5      $ rK   )BoxerOutputDrsParserparse)r   
drs_stringr<   r\   s       r#   r   Boxer._parse_drsL  s"    #T<$8$EFLLZXXr&   )r2   r   r,   r1   r   r   )NFNFTF)NFF)__name__
__module____qualname____firstlineno____doc__r$   r   r@   rC   rG   r8   rX   rY   r+   rg   rZ   r   __static_attributes__rL   r&   r#   r   r   ;   so     #+8G  CH
  CH@8
6%N
 -/ 'R(TYr&   r   c                       \ rS rSrS#S jrS#S jrS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S  r!S! r"S"r#g)$r   iP  Nc                 Z    [         R                  " U 5        Xl        SU l        S/U l        g)zb
This class is used to parse the Prolog DRS output from Boxer into a
hierarchy of python objects.
N)re   re   \F)r   r$   r<   sentence_id_offsetquote_charsr   r<   s     r#   r$   BoxerOutputDrsParser.__init__Q  s+    
 	4 ("&34r&   c                 0    [         R                  " XU5      $ rK   )r   r   )r   data	signatures      r#   r   BoxerOutputDrsParser.parse[  s    t955r&   c                 
    / SQ$ )N)(r   r   r   r   :rL   r   s    r#   get_all_symbols$BoxerOutputDrsParser.get_all_symbols^  s    --r&   c                 $    U R                  U5      $ rK   )
handle_drs)r   tokcontexts      r#   handleBoxerOutputDrsParser.handlea  s    s##r&   c                     U$ rK   rL   r   
expressionr   s      r#   attempt_adjuncts%BoxerOutputDrsParser.attempt_adjunctsd      r&   c                 d    U R                  5       nU R                  X!5      nUc  [        U5      eU$ )z;
Parse a DRS condition

:return: list of ``DrtExpression``
)tokenhandle_conditionr   )r   indicesr   accums       r#   parse_condition$BoxerOutputDrsParser.parse_conditiong  s4     jjl%%c3=*3//r&   c                     US:X  a  U R                  5       $ US;   a"  U R                  U R                  5      " S / 5      $ US;   a"  U R                  U R                  5      " S / 5      $ g )Nrs   )mergesmerge)alfa)	parse_drs_handle_binary_expression_make_merge_expression_handle_alfa)r   r   s     r#   r   BoxerOutputDrsParser.handle_drss  sh    %<>>##''11$2M2MNtUWXXH_$$T%@%@A$KK r&   c                   ^ US:X  a  U R                  5       /$ US:X  a  U R                  U R                  5      /mOUS:X  a  U R                  U R                  5      /mOUS:X  a  U R	                  5       /mOUS:X  a  U R                  5       /mOUS:X  a  U R                  5       /mOUS:X  a  U R                  5       /mOyUS:X  a  U R                  5       /mOaUS	:X  a  U R                  5       mOJUS
:X  a  U R                  5       /mO2US:X  a  U R                  5       /mOUS:X  a  U R                  5       /mO/ m[        U4S jU R                  U5       5       / 5      $ )zX
Handle a DRS condition

:param indices: list of int
:return: list of ``DrtExpression``
notorimpeqpropprednamedreltimexcardwhqduplexc              3   b   >#    U  H  u  pT Vs/ s H
  o3" X5      PM     snv   M!     g s  snf 7frK   rL   )rM   
sent_indexword_indicescondcondss       r#   rO   8BoxerOutputDrsParser.handle_condition.<locals>.<genexpr>  s6      0T,J =BBEDj/EB0T Cs   /*/)_handle_notr   _make_or_expression_make_imp_expression
_handle_eq_handle_prop_handle_pred_handle_named_handle_rel_handle_timex_handle_card_handle_whq_handle_duplexrh   _sent_and_word_indices)r   r   r   r  s      @r#   r   %BoxerOutputDrsParser.handle_condition{  sb    %<$$&''$;33D4L4LMNEE\33D4M4MNOED[__&'EF]&&()EF]&&()EG^'')*EE\%%'(EG^&&(EF]&&()EE\%%'(EH_((*+E E040K0KG0T 
 	
r&   c                     U R                  U R                  5       S5        U R                  S 5      nU R                  U R                  5       S5        [        U5      $ )Nr   r   )assertTokenr   process_next_expressionBoxerNotr   rs   s     r#   r   BoxerOutputDrsParser._handle_not  sH    s+**40s+}r&   c                   ^ ^^^^ T R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        [        T R                  5       5      mT R                  T R                  5       S5        UUU UU4S jnU$ )Nr   r   r   c           	      8   > [        TR                  XTTTT5      $ rK   	BoxerPredr<   )r   r   r   posr   sensevariables     r#   _handle_pred_f9BoxerOutputDrsParser._handle_pred.<locals>._handle_pred_f  s$    !!:XtSRW r&   r  r   parse_variableint)r   r  r   r  r  r  s   ` @@@@r#   r	  !BoxerOutputDrsParser._handle_pred  s    s+&&(s+zz|s+jjls+DJJL!s+	 	
 r&   c                   ^ ^^^^ T R                  T R                  5       S5        / mT R                  T R                  5       S5        T R                  T R                  5       S5        T R                  S 5      mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  S 5      mT R                  T R                  5       S5        UUUUU 4S j$ )Nr   r   r   r   c           	      8   > [        TR                  XTTTT5      $ rK   BoxerWhqr<   r   r   	ans_typesd1d2refr   s     r#   <lambda>5BoxerOutputDrsParser._handle_duplex.<locals>.<lambda>      zBR1
r&   )r  r   r  r"  )r   r*  r+  r,  r-  s   `@@@@r#   r  #BoxerOutputDrsParser._handle_duplex  s    s+	" 	u-s+))$/s+!!#s+))$/s+
 
 	
r&   c                   ^ ^^^^ T R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        UU UUU4S j$ )Nr   r   r   c           	      8   > [        TR                  XTTTT5      $ rK   )
BoxerNamedr<   )r   r   r   r   r  typer  s     r#   r.  4BoxerOutputDrsParser._handle_named.<locals>.<lambda>  s    
z4u1
r&   r  r   r"  )r   r   r  r5  r  s   `@@@@r#   r
  "BoxerOutputDrsParser._handle_named  s    s+&&(s+zz|s+zz|s+

s+
 
 	
r&   c                   ^ ^^^^ T R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        [        T R                  5       5      mT R                  T R                  5       S5        UU UUU4S j$ )Nr   r   r   c           	      8   > [        TR                  XTTTT5      $ rK   )BoxerRelr<   )r   r   r   r   r  var1var2s     r#   r.  2BoxerOutputDrsParser._handle_rel.<locals>.<lambda>  s    ztS%1
r&   r!  )r   r   r  r<  r=  s   `@@@@r#   r   BoxerOutputDrsParser._handle_rel  s    s+""$s+""$s+jjls+DJJL!s+
 
 	
r&   c                    U R                  U R                  5       S5        U R                  5       nU R                  U R                  5       S5        U R                  U5      nU R                  U R                  5       S5        U$ )Nr   r   r   )r  r   r"  _handle_time_expression)r   arg	new_condss      r#   r  "BoxerOutputDrsParser._handle_timex  sh    s+!!#s+005	s+r&   c                 ^  ^ ^^ T R                  5       mT R                  T R                  5       S5        TS:X  a  T R                  T5      nOTS:X  a  T R                  T5      nOg T R                  T R                  5       S5        S nUU U4S j/U Vs/ s H
  oC" U5      PM     sn-   $ s  snf )Nr   datetimer   c                    ^  U 4S j$ )Nc                    > T$ rK   rL   )r   r   xs     r#   r.  PBoxerOutputDrsParser._handle_time_expression.<locals>.func_gen.<locals>.<lambda>  s    Ar&   rL   )rJ  s   `r#   func_gen>BoxerOutputDrsParser._handle_time_expression.<locals>.func_gen  s	    55r&   c           	      8   > [        TR                  XTTSS5      $ )Nnr   r  )r   r   rB  r   r   s     r#   r.  >BoxerOutputDrsParser._handle_time_expression.<locals>.<lambda>  s    Y!!:S#sA.r&   )r   r  _handle_date_handle_time)r   rB  r  rL  r  r   s   ``   @r#   rA  ,BoxerOutputDrsParser._handle_time_expression
  s    jjls+&=%%c*EF]%%c*Es+	6
 )..Xd^.	/ 	/ /s   B*c                    / nU R                  U R                  5       5      u  u  p4U R                  U R                  5       S5        U R                  5       nU R                  U R                  5       S5        UR	                  [        U R                  UUUSU 3SS5      5        U R                  U R                  5       S5        U R                  U R                  5       5      u  u  p4U R                  5       nUS:w  a?  UR                  SS	5      nUR	                  [        U R                  UUUS
U 3SS5      5        U R                  U R                  5       S5        U R                  U R                  5       5      u  u  p4U R                  5       nUS:w  a-  UR	                  [        U R                  UUUSU 3SS5      5        U R                  U R                  5       S5        U R                  U R                  5       5      u  u  p4U R                  5       nUS:w  a-  UR	                  [        U R                  UUUSU 3SS5      5        U$ )Nr   r   	date_pol_ar   r   XXXXr   _
date_year_XXdate_month_	date_day_)r  _parse_index_listr  r   appendr  r<   replace)	r   rB  r  r   r   polyearmonthdays	            r#   rQ  !BoxerOutputDrsParser._handle_date  s;   (,(C(C""$)
%	#* 	s+jjls+!!C5!
	
 	s+(,(C(C""$)
%	#* zz|6><<S)DLL%%  '
 	s+(,(C(C""$)
%	#* 

D=LL%% !%)
 	s+(,(C(C""$)
%	#* jjl$;LL%% u%
 r&   c                 4   / nU R                  5         U R                  5       nUS:w  a!  UR                  U R                  SX5      5        U R	                  U R                  5       S5        U R                  5         U R                  5       nUS:w  a!  UR                  U R                  SX5      5        U R	                  U R                  5       S5        U R                  5         U R                  5       nUS:w  a!  UR                  U R                  SX5      5        U$ )NrZ  r_hour_2r   r_min_2r_sec_2)r]  r   r^  
_make_atomr  )r   rB  r  hourminsecs         r#   rR  !BoxerOutputDrsParser._handle_timem  s     zz|4<LLS?@s+ jjl$;LLC=>s+ jjl$;LLC=>r&   c                 |  ^ ^^^ T R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        U UUU4S j$ )Nr   r   r   c                 6   > [        TR                  XTTT5      $ rK   )	BoxerCardr<   )r   r   r   r5  valuer  s     r#   r.  3BoxerOutputDrsParser._handle_card.<locals>.<lambda>  s    	z5$1
r&   r7  )r   r5  rq  r  s   `@@@r#   r  !BoxerOutputDrsParser._handle_card  s    s+&&(s+

s+zz|s+
 	
r&   c                   ^ ^^ T R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  S 5      mT R                  T R                  5       S5        UU U4S j$ )Nr   r   r   c                 4   > [        TR                  XTT5      $ rK   )	BoxerPropr<   )r   r   rs   r   r  s     r#   r.  3BoxerOutputDrsParser._handle_prop.<locals>.<lambda>  s    	z31
r&   )r  r   r"  r  )r   rs   r  s   `@@r#   r  !BoxerOutputDrsParser._handle_prop  sm    s+&&(s+**40s+
 	
r&   c                    / nU R                  U R                  5       S5        U R                  S5      S:w  a[  UR                  U R                  5       5        U R                  S5      S:X  a  U R                  5         U R                  S5      S:w  a  M[  U R                  5         U R                  U R                  5       S5        U$ )Nr   r   r   r   r   )r  r   r^  parse_index)r   r   s     r#   r]  &BoxerOutputDrsParser._parse_index_list  s    s+jjms"NN4++-.zz!}#

 jjms" 	

s+r&   c                    U R                  U R                  5       S5        U R                  U R                  5       S5        [        5       nU R                  S5      S:w  ak  U R                  5       nUR	                  U R                  5       5        U R                  S5      S:X  a  U R                  5         U R                  S5      S:w  a  Mk  U R                  5         U R                  U R                  5       S5        U R                  U R                  5       S5        / nU R                  S5      S:w  al  U R                  5       nUR                  U R                  U5      5        U R                  S5      S:X  a  U R                  5         U R                  S5      S:w  a  Ml  U R                  5         U R                  U R                  5       S5        [        [        U5      U5      $ )Nr   r   r   r   r   r   )
r  r   setr]  addr"  extendr   BoxerDrsrT   )r   refsr   r  s       r#   r   BoxerOutputDrsParser.parse_drs  sc    	s+s+ujjms",,.GHHT((*+zz!}#

	 jjms"
 	

s+s+jjms",,.GLL--g67zz!}#

	 jjms"
 	

s+T
E**r&   c                   ^^^ U R                  U R                  5       S5        U R                  S 5      mU R                  U R                  5       S5        U R                  S 5      mU R                  U R                  5       S5        UUU4S j$ )Nr   r   r   c                    > T" XTT5      $ rK   rL   r   r   drs1drs2make_callbacks     r#   r.  @BoxerOutputDrsParser._handle_binary_expression.<locals>.<lambda>      dD1
r&   r  r   r  )r   r  r  r  s    `@@r#   r   .BoxerOutputDrsParser._handle_binary_expression  so    s+++D1s+++D1s+
 	
r&   c                 |  ^^^ U R                  U R                  5       S5        U R                  5       nU R                  U R                  5       S5        U R                  S 5      mU R                  U R                  5       S5        U R                  S 5      mU R                  U R                  5       S5        UUU4S j$ )Nr   r   r   c                    > T" XTT5      $ rK   rL   r  s     r#   r.  3BoxerOutputDrsParser._handle_alfa.<locals>.<lambda>  r  r&   r  )r   r  r5  r  r  s    ` @@r#   r   !BoxerOutputDrsParser._handle_alfa  s    s+zz|s+++D1s+++D1s+
 	
r&   c                   ^ ^^ T R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        T R                  5       mT R                  T R                  5       S5        U UU4S j$ )Nr   r   r   c                 4   > [        TR                  XTT5      $ rK   )BoxerEqr<   )r   r   r   r<  r=  s     r#   r.  1BoxerOutputDrsParser._handle_eq.<locals>.<lambda>  s    zt1
r&   r7  )r   r<  r=  s   `@@r#   r  BoxerOutputDrsParser._handle_eq  sk    s+""$s+""$s+
 	
r&   c                   ^ ^^^^ T R                  T R                  5       S5        T R                  T R                  5       S5        / mT R                  S5      S:w  a  T R                  5       nT R                  T R                  5       S5        US:X  a   TR                  T R                  5       5        OpUS:X  aK  TR                  S5        T R                  5       nUS	:X  a  TR                  S
5        O1TR                  U5        OTR                  T R                  5       5        T R                  S5      S:w  a  M  T R                  5         T R                  T R                  5       S5        T R                  S 5      mT R                  T R                  5       S5        T R	                  5       mT R                  T R                  5       S5        T R                  S 5      mT R                  T R                  5       S5        UUUUU 4S j$ )Nr   r   r   r   r   desnumnumbercoucountr   r   c           	      8   > [        TR                  XTTTT5      $ rK   r'  r)  s     r#   r.  2BoxerOutputDrsParser._handle_whq.<locals>.<lambda>  r0  r&   )r  r   r^  r  r"  )r   cattypr*  r+  r,  r-  s   `  @@@@r#   r   BoxerOutputDrsParser._handle_whq  s   s+s+	jjms"**,CTZZ\3/e|  .  *jjl%<$$W-$$S)  . jjms" 	

s+))$/s+!!#s+))$/s+
 
 	
r&   c                 v    [        UR                  UR                  -   UR                  UR                  -   5      $ rK   r  r  r  r   r   r   r  r  s        r#   r   +BoxerOutputDrsParser._make_merge_expression  s)    		DII-tzzDJJ/FGGr&   c                 0    [        U R                  XX45      $ rK   )BoxerOrr<   r  s        r#   r  (BoxerOutputDrsParser._make_or_expression  s    t((*DOOr&   c                 D    [        UR                  UR                  U5      $ rK   r  r  s        r#   r  )BoxerOutputDrsParser._make_imp_expression  s    		4::t44r&   c                 l    U R                  5       n[        R                  " SU5      (       d   U5       eU$ )Nz^[exps]\d+$)r   rematchr   vars     r#   r"  #BoxerOutputDrsParser.parse_variable  s.    jjlxx,,1c1,
r&   c                 4    [        U R                  5       5      $ rK   )r#  r   r   s    r#   rz   BoxerOutputDrsParser.parse_index  s    4::<  r&   c                 ,   U Vs1 s H  o"S:  d  M
  US-  S-
  iM     nnU(       aD  / nU H:  nU Vs/ s H  o%US-  S-
  :X  d  M  US-  S-
  PM     nnUR                  XV45        M<     U$ U Vs/ s H
  o"S-  S-
  PM     nnSU4/$ s  snf s  snf s  snf )z4
:return: list of (sent_index, word_indices) tuples
r   i  r   N)r^  )r   r   r   sent_indicespairsr   r   s          r#   r  +BoxerOutputDrsParser._sent_and_word_indices  s     18B16TQBE*
,3 ,3qa$hRS^7SNQXNG    j78	 +
 L4;<GqXNGL<<()) C  =s   	BBBB/B)r<   r   r   rK   )$r   r   r   r   r$   r   r   r   r   r   r   r   r  r	  r  r
  r  r  rA  rQ  rR  r  r  r]  r   r   r   r  r  r   r  r  r"  rz  r  r   rL   r&   r#   r   r   P  s    56.$
L,
\&
B

/*L\,
	

+2




>HP5
!*r&   r   c                   @    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
rg)BoxerDrsParseri"  z<
Reparse the str form of subclasses of ``AbstractBoxerDrs``
Nc                 <    [         R                  " U 5        Xl        g rK   )r   r$   r<   r   s     r#   r$   BoxerDrsParser.__init__'  s    4 (r&   c                     [         R                  [         R                  [         R                  [         R                  [         R
                  /$ rK   )r   OPENCLOSECOMMAOPEN_BRACKETCLOSE_BRACKETr   s    r#   r   BoxerDrsParser.get_all_symbols+  s3    NNOOOO""##
 	
r&   c                     U$ rK   rL   r   s      r#   r   BoxerDrsParser.attempt_adjuncts4  r   r&   c           	          US:X  Ga  U R                  [        R                  5        U R                  b  U R                  OU R	                  5       nU R                  [        R
                  5        U R                  5       nU R                  [        R
                  5        [        [        [        U R                  5       5      5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        U R	                  5       nU R                  [        R
                  5        U R	                  5       nU R                  [        R
                  5        [        U R	                  5       5      n	U R                  [        R                  5        [        X4XVXxU	5      $ US:X  Ga  U R                  [        R                  5        U R                  b  U R                  OU R	                  5       nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        [        [        U R                  5       5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        U R	                  5       nU R                  [        R
                  5        U R	                  5       n
U R                  [        R
                  5        [        U R	                  5       5      n	U R                  [        R                  5        [        X4XVXzU	5      $ US:X  Ga  U R                  [        R                  5        U R                  b  U R                  OU R	                  5       nU R                  [        R
                  5        U R                  5       nU R                  [        R
                  5        [        [        [        U R                  5       5      5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        U R	                  5       nU R                  [        R
                  5        [        U R	                  5       5      n	U R                  [        R                  5        [        X4X[XU	5      $ US:X  GaZ  U R                  [        R                  5        U R                  b  U R                  OU R	                  5       nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        [        [        [        U R                  5       5      5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        U R                  S 5      nU R                  [        R                  5        [!        X4XVU5      $ US:X  aZ  U R                  [        R                  5        U R                  S 5      nU R                  [        R                  5        [#        U5      $ US:X  a  U R                  [        R                  5        U R                  S 5      nU R                  [        R
                  5        U R                  S 5      nU R                  [        R                  5        [%        UR&                  UR(                  U5      $ US:X  Ga@  U R                  [        R                  5        U R                  b  U R                  OU R	                  5       nU R                  [        R
                  5        U R                  5       nU R                  [        R
                  5        [        [        U R                  5       5      nU R                  [        R
                  5        U R                  S 5      nU R                  [        R
                  5        U R                  S 5      nU R                  [        R                  5        [+        X4X_U5      $ US:X  GaY  U R                  [        R                  5        U R                  b  U R                  OU R	                  5       nU R                  [        R
                  5        U R                  5       nU R                  [        R
                  5        [        [        [        U R                  5       5      5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R                  5        [-        X4X[U5      $ US	:X  Gax  U R                  [        R                  5        U R                  b  U R                  OU R	                  5       nU R                  [        R
                  5        U R                  5       nU R                  [        R
                  5        [        [        U R                  5       5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        U R	                  5       nU R                  [        R
                  5        U R	                  5       n
U R                  [        R                  5        [/        X4UUUU
5      $ US
:X  Ga  U R                  [        R                  5        U R                  b  U R                  OU R	                  5       nU R                  [        R
                  5        U R                  5       nU R                  [        R
                  5        [        [        [        U R                  5       5      5      nU R                  [        R
                  5        U R                  5       nU R                  [        R
                  5        U R                  S 5      nU R                  [        R
                  5        [        U R	                  5       5      nU R                  [        R
                  5        U R                  S 5      nU R                  [        R                  5        [1        X4UUUUU5      $   [;        U5      5       e! [2         a%  n[5        U R6                  [9        U5      5      UeS nAff = f)Nr   r   r   r   r   r   r   r   r   r   )assertNextTokenr   r  r<   r   r  nullableIntTokenrT   rU   r#  handle_refsr  r  r4  r;  r  rv  r  r  r  r  r  r  rp  r(  r9   r   _currentIndexrV   repr)r   r   r   disc_idsent_idword_idsr  r   r  r  r5  r<  r=  r   rs   r  r  r  rq  r*  es                        r#   r   BoxerDrsParser.handle7  s	   c	P f}$$Y^^4)-):):)FD%%DJJL  $$Y__5//1$$Y__5C)9)9); <=$$Y__5tzz|,$$Y__5zz|$$Y__5jjl$$Y__5DJJL)$$Y__5 8tRWXX$$Y^^4)-):):)FD%%DJJL  $$Y__5djjl+$$Y__5sD$4$4$67$$Y__5tzz|,$$Y__5zz|$$Y__5zz|$$Y__5DJJL)$$Y__5!h$e  $$Y^^4)-):):)FD%%DJJL  $$Y__5//1$$Y__5C)9)9); <=$$Y__54::<($$Y__54::<($$Y__5jjl$$Y__5DJJL)$$Y__5($USS$$Y^^4)-):):)FD%%DJJL  $$Y__5djjl+$$Y__5C)9)9); <=$$Y__5tzz|,$$Y__52248$$Y__5 8sKK$$Y^^42248$$Y__5}$$$Y^^433D9$$Y__533D9$$Y__5		4::t<<$$Y^^4)-):):)FD%%DJJL  $$Y__5//1$$Y__5sD$4$4$67$$Y__533D9$$Y__533D9$$Y__5wFF$$Y^^4)-):):)FD%%DJJL  $$Y__5//1$$Y__5C)9)9); <=$$Y__54::<($$Y__54::<($$Y__5wFF$$Y^^4)-):):)FD%%DJJL  $$Y__5//1$$Y__5sD$4$4$67$$Y__5$**,'$$Y__5

$$Y__5zz|$$Y__5 8S%NN$$Y^^4)-):):)FD%%DJJL  $$Y__5//1$$Y__5C)9)9); <=$$Y__5 ,,.	$$Y__533D9$$Y__5$**,'$$Y__533D9$$Y__5(ItSRVWW% * 	 d3iu  	P,T-?-?QHaO	PsW   F>v  F>v   Gv  E v  )Av  	B%v  /Ev  6Ev  E>v  F9v   
w* w

wc                 H    U R                  5       nUS:w  a  [        U5      $ S $ )NNone)r   r#  )r   ts     r#   r  BoxerDrsParser.nullableIntToken  s"    JJLfs1v.$.r&   c                 v     U R                  5       $ ! [         a  n[        UR                  S5      UeS nAff = f)NzVariable expected.)r   r   r   )r   descriptionr  s      r#   get_next_token_variable&BoxerDrsParser.get_next_token_variable  s;    	T::<* 	T-agg7KLRSS	Ts    
838)r<   rK   )r   r   r   r   r   r$   r   r   r   r  r  r   rL   r&   r#   r  r  "  s(    )
e N/Tr&   r  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)AbstractBoxerDrsi  c                 @    U R                  5       u  pnXU-  -
  X#U-
  4$ z;
:return: (set<variables>, set<events>, set<propositions>)
)
_variables)r   	variableseventspropositionss       r#   r  AbstractBoxerDrs.variables  s-     +///*;'	<l23VF=RSSr&   c                 j    0 n[        SU R                  5       5       H  u  p#U H  nX!U'   M	     M     U$ )N)zr  r   )ri   r  )r   vartypesr  varsvs        r#   variable_typesAbstractBoxerDrs.variable_types  s9    ?DNN,<=GA  > r&   c                 <    [        5       [        5       [        5       4$ r  r}  r   s    r#   r  AbstractBoxerDrs._variables  s     suce$$r&   c                     [        5       $ rK   r  r   s    r#   atomsAbstractBoxerDrs.atoms  	    ur&   c                     U $ rK   rL   r   s    r#   cleanAbstractBoxerDrs.clean      r&   c                 F    UR                  SS5      R                  SS5      $ )N-rX  re   )r_  )r   r   s     r#   _clean_nameAbstractBoxerDrs._clean_name  s     ||C%--c377r&   c                     U $ rK   rL   r   r}   s     r#   renumber_sentences#AbstractBoxerDrs.renumber_sentences  r  r&   c                     [        U  5      $ rK   )hashr   s    r#   __hash__AbstractBoxerDrs.__hash__
  s    tfr&   rL   N)r   r   r   r   r  r  r  r  r  r  r  r  r   rL   r&   r#   r  r    s+    T%8r&   r  c                   `    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 r\R                  rSrg)r  i  Nc                 R    [         R                  U 5        Xl        X l        X0l        g rK   )r  r$   r  r  
consequent)r   r  r  r  s       r#   r$   BoxerDrs.__init__  s    !!$'	
$r&   c                 `   [        5       [        5       [        5       4nU R                   H6  n[        XR                  5       5       H  u  p4UR	                  U5        M     M8     U R
                  b=  [        XR
                  R                  5       5       H  u  p4UR	                  U5        M     U$ rK   )r}  r  ri   r  updater  )r   r  r  sr  s        r#   r  BoxerDrs._variables  s    UCE35)	JJDI'89 :  ??&I'A'A'CD Er&   c                     [        [        R                  S U R                   5       [	        5       5      nU R
                  b)  UR                  U R
                  R                  5       5        U$ )Nc              3   @   #    U  H  oR                  5       v   M     g 7frK   )r  )rM   r  s     r#   rO   !BoxerDrs.atoms.<locals>.<genexpr>   s     %Jztjjllzs   )r   rR   or_r  r}  r  r  r  )r   r  s     r#   r  BoxerDrs.atoms  sH    x||%Jtzz%JCER??&LL..01r&   c                     U R                   (       a  U R                   R                  5       OS n[        U R                  U R                   Vs/ s H  o"R                  5       PM     snU5      $ s  snf rK   )r  r  r  r  r  )r   r  r   s      r#   r  BoxerDrs.clean%  sI    04T__**,T
		tzz#Bz!GGIz#BJOO#Bs   A-
c           	          U R                   (       a  U R                   R                  U5      OS n[        U R                  U R                   Vs/ s H  o3R                  U5      PM     snU5      $ s  snf rK   )r  r  r  r  r  )r   r}   r  r   s       r#   r  BoxerDrs.renumber_sentences)  sV    >BooT__77:SW
IIDA,,Q/Dj
 	
Ds   A/
c                     SR                  SR                  S U R                   5       5      SR                  S U R                   5       5      5      nU R                  b  SU SU R                   S3nU$ )Nzdrs([{}], [{}]), c              3   ,   #    U  H
  nS U-  v   M     g7f%sNrL   )rM   rs     r#   rO   $BoxerDrs.__repr__.<locals>.<genexpr>1  s     2	1dQh	   c              3   ,   #    U  H
  nS U-  v   M     g7fr  rL   )rM   r   s     r#   rO   r  2  s     3
1dQh
r  zimp(r   )r   r0   r  r  r  )r   r  s     r#   __repr__BoxerDrs.__repr__/  sh    $$II2		22II3

33
 ??&qcDOO,A.Ar&   c                    U R                   UR                   :H  =(       a    U R                  UR                  :H  =(       a    [        U R                  5      [        UR                  5      :H  =(       a_    [	        [
        R                  S [        U R                  UR                  5       5       5      =(       a    U R                  UR                  :H  $ )Nc              3   .   #    U  H  u  pX:H  v   M     g 7frK   rL   )rM   c1c2s      r#   rO   "BoxerDrs.__eq__.<locals>.<genexpr>>  s     T7SVR7S   )		__class__r  rQ   r  r   rR   rS   ri   r  r   others     r#   __eq__BoxerDrs.__eq__8  s    NNeoo- 4		UZZ'4DJJ3u{{#334 Ts4::u{{7ST4 5#3#33	
r&   c                     X:X  + $ rK   rL   r   s     r#   __ne__BoxerDrs.__ne__C        r&   )r  r  r  rK   r   r   r   r   r$   r  r  r  r  r  r"  r%  r  r  r   rL   r&   r#   r  r    s8    %P
	
!  ((Hr&   r  c                   \    \ rS rSrS rS rS rS rS rS r	S r
S	 r\R                  rS
rg)r  iI  c                 :    [         R                  U 5        Xl        g rK   )r  r$   rs   r  s     r#   r$   BoxerNot.__init__J  s    !!$'r&   c                 6    U R                   R                  5       $ rK   )rs   r  r   s    r#   r  BoxerNot._variablesN  s    xx""$$r&   c                 6    U R                   R                  5       $ rK   rs   r  r   s    r#   r  BoxerNot.atomsQ      xx~~r&   c                 H    [        U R                  R                  5       5      $ rK   )r  rs   r  r   s    r#   r  BoxerNot.cleanT  s    ())r&   c                 J    [        U R                  R                  U5      5      $ rK   )r  rs   r  r  s     r#   r  BoxerNot.renumber_sentencesW  s    33A677r&   c                      SU R                   -  $ )Nznot(%s)rs   r   s    r#   r  BoxerNot.__repr__Z  s    DHH%%r&   c                 t    U R                   UR                   :H  =(       a    U R                  UR                  :H  $ rK   )r  rs   r   s     r#   r"  BoxerNot.__eq__]  s'    ~~0JTXX5JJr&   c                     X:X  + $ rK   rL   r   s     r#   r%  BoxerNot.__ne__`  r'  r&   r7  Nr(  rL   r&   r#   r  r  I  s8    % *8&K!  ((Hr&   r  c                   J    \ rS rSrS rS rS rS r\R                  r	S r
Srg)	BoxerIndexedif  c                 R    [         R                  U 5        Xl        X l        X0l        g rK   )r  r$   r<   r   r   )r   r<   r   r   s       r#   r$   BoxerIndexed.__init__g  s!    !!$'($(r&   c                     U 1$ rK   rL   r   s    r#   r  BoxerIndexed.atomsm  s	    vr&   c                 V   U R                   UR                   :H  =(       a    U R                  UR                  :H  =(       aj    U R                  UR                  :H  =(       aJ    U R                  UR                  :H  =(       a*    [	        [
        R                  S [        X5       5       5      $ )Nc              3   .   #    U  H  u  pX:H  v   M     g 7frK   rL   )rM   r  os      r#   rO   &BoxerIndexed.__eq__.<locals>.<genexpr>v  s     &K:J$!qv:Jr  )r  r<   r   r   r   rR   rS   ri   r   s     r#   r"  BoxerIndexed.__eq__p  s    NNeoo- M!!U%7%77M5#3#33M !!U%7%77M x}}&K#d:J&KL	
r&   c                     X:X  + $ rK   rL   r   s     r#   r%  BoxerIndexed.__ne__y  r'  r&   c           	          SR                  U R                  5       U R                  U R                  SR	                  S U R
                   5       5      5      nU  H  nUSU-  -  nM     US-   $ )Nz{}({}, {}, [{}]r  c              3   ,   #    U  H
  nS U-  v   M     g7fr  rL   )rM   wis     r#   rO   (BoxerIndexed.__repr__.<locals>.<genexpr>  s     <*;BdRi*;r  z, %sr   )r   _predr<   r   r0   r   )r   r  r  s      r#   r  BoxerIndexed.__repr__~  se    $$JJLOOII<$*;*;<<	
 A!OA 3wr&   )r<   r   r   N)r   r   r   r   r$   r  r"  r%  r  r  r  r   rL   r&   r#   r>  r>  f  s(    )
!  ((H	r&   r>  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)r  i  c                 `    [         R                  XX#5        X@l        XPl        X`l        Xpl        g rK   )r>  r$   r  r   r  r  )r   r<   r   r   r  r   r  r  s           r#   r$   BoxerPred.__init__  s&    d*K	
r&   c                 B    U R                   1[        5       [        5       4$ rK   r  r}  r   s    r#   r  BoxerPred._variables      
CE35))r&   c           	          [        U R                  U R                  U R                  UU R                  U R
                  U R                  5      $ rK   )r  r<   r   r   r   r  r  r  s     r#   
change_varBoxerPred.change_var  s@    OOIIHHJJ
 	
r&   c           	          [        U R                  U R                  U R                  U R                  U R                  U R                  5      U R                  U R                  5      $ rK   )	r  r<   r   r   r  r  r   r  r  r   s    r#   r  BoxerPred.clean  sO    OOHHTYY'HHJJ
 	
r&   c           	          U" U R                   5      n[        U R                  UU R                  U R                  U R
                  U R                  U R                  5      $ rK   )r   r  r<   r   r  r   r  r  )r   r}   new_sent_indexs      r#   r  BoxerPred.renumber_sentences  sN    4??+HHIIHHJJ
 	
r&   c                 p    [        U R                  U R                  U R                  U R                  45      $ rK   )iterr  r   r  r  r   s    r#   __iter__BoxerPred.__iter__  s&    TXXtyy$((DJJ?@@r&   c                     g)Nr   rL   r   s    r#   rN  BoxerPred._pred      r&   )r   r  r  r  Nr   r   r   r   r$   r  rX  r  r  ra  rN  r   rL   r&   r#   r  r    s&    *	
	


Ar&   r  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)r4  i  c                 `    [         R                  XX#5        X@l        XPl        X`l        Xpl        g rK   )r>  r$   r  r   r5  r  )r   r<   r   r   r  r   r5  r  s           r#   r$   BoxerNamed.__init__  s&    d*K		
r&   c                 B    U R                   1[        5       [        5       4$ rK   rT  r   s    r#   r  BoxerNamed._variables  rV  r&   c           	          [        U R                  U R                  U R                  UU R                  U R
                  U R                  5      $ rK   )r4  r<   r   r   r   r5  r  r  s     r#   rX  BoxerNamed.change_var  s@    OOIIIIJJ
 	
r&   c           	          [        U R                  U R                  U R                  U R                  U R                  U R                  5      U R                  U R                  5      $ rK   )	r4  r<   r   r   r  r  r   r5  r  r   s    r#   r  BoxerNamed.clean  sO    OOHHTYY'IIJJ
 	
r&   c           	          [        U R                  U" U R                  5      U R                  U R                  U R
                  U R                  U R                  5      $ rK   )r4  r<   r   r   r  r   r5  r  r  s     r#   r  BoxerNamed.renumber_sentences  sI    dooHHIIIIJJ
 	
r&   c                 p    [        U R                  U R                  U R                  U R                  45      $ rK   )r`  r  r   r5  r  r   s    r#   ra  BoxerNamed.__iter__  s&    TXXtyy$))TZZ@AAr&   c                     g)Nr   rL   r   s    r#   rN  BoxerNamed._pred  s    r&   )r   r  r5  r  Nrf  rL   r&   r#   r4  r4    s&    *	
	
	
Br&   r4  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
r;  i  c                 `    [         R                  XX#5        X@l        XPl        X`l        Xpl        g rK   )r>  r$   r<  r=  r   r  )r   r<   r   r   r<  r=  r   r  s           r#   r$   BoxerRel.__init__  s&    d*K		
r&   c                 X    U R                   U R                  1[        5       [        5       4$ rK   r<  r=  r}  r   s    r#   r  BoxerRel._variables       DII&su55r&   c           
          [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  5      U R                  5      $ rK   )	r;  r<   r   r   r<  r=  r  r   r  r   s    r#   r  BoxerRel.clean  sO    OOIIIITXX&JJ
 	
r&   c           	          [        U R                  U" U R                  5      U R                  U R                  U R
                  U R                  U R                  5      $ rK   )r;  r<   r   r   r<  r=  r   r  r  s     r#   r  BoxerRel.renumber_sentences  sI    dooIIIIHHJJ
 	
r&   c                 p    [        U R                  U R                  U R                  U R                  45      $ rK   )r`  r<  r=  r   r  r   s    r#   ra  BoxerRel.__iter__  s&    TYY		488TZZ@AAr&   c                     g)Nr   rL   r   s    r#   rN  BoxerRel._pred      r&   )r   r  r<  r=  N)r   r   r   r   r$   r  r  r  ra  rN  r   rL   r&   r#   r;  r;    s!    6	
	
Br&   r;  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)rv  i  c                 H    [         R                  XX#5        X@l        XPl        g rK   )r>  r$   r  rs   )r   r<   r   r   r  rs   s         r#   r$   BoxerProp.__init__  s    d*Kr&   c                     [        [        [        R                  [	        5       [	        5       U R
                  14U R                  R                  5       5      5      $ rK   )tuplerU   rR   r  r}  r  rs   r  r   s    r#   r  BoxerProp._variables  s=    sucedhhZ8$((:M:M:OP
 	
r&   c                     U R                   1$ rK   r7  r   s    r#   referenced_labelsBoxerProp.referenced_labels$  s    zr&   c                 6    U R                   R                  5       $ rK   r/  r   s    r#   r  BoxerProp.atoms'  r1  r&   c                     [        U R                  U R                  U R                  U R                  U R
                  R                  5       5      $ rK   )rv  r<   r   r   r  rs   r  r   s    r#   r  BoxerProp.clean*  s=    OOHHHHNN
 	
r&   c           	          [        U R                  U" U R                  5      U R                  U R                  U R
                  R                  U5      5      $ rK   )rv  r<   r   r   r  rs   r  r  s     r#   r  BoxerProp.renumber_sentences3  sF    dooHHHH''*
 	
r&   c                 D    [        U R                  U R                  45      $ rK   )r`  r  rs   r   s    r#   ra  BoxerProp.__iter__<  s    TXXtxx())r&   c                     g)Nr   rL   r   s    r#   rN  BoxerProp._pred?  re  r&   )rs   r  N)r   r   r   r   r$   r  r  r  r  r  ra  rN  r   rL   r&   r#   rv  rv    s*    


 

*r&   rv  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
r  iC  c                 H    [         R                  XX#5        X@l        XPl        g rK   )r>  r$   r<  r=  )r   r<   r   r   r<  r=  s         r#   r$   BoxerEq.__init__D      d*K		r&   c                 X    U R                   U R                  1[        5       [        5       4$ rK   rz  r   s    r#   r  BoxerEq._variablesI  r|  r&   c                     [        5       $ rK   r  r   s    r#   r  BoxerEq.atomsL  r  r&   c                     [        U R                  U" U R                  5      U R                  U R                  U R
                  5      $ rK   )r  r<   r   r   r<  r=  r  s     r#   r  BoxerEq.renumber_sentencesO  ;    dooIIII
 	
r&   c                 D    [        U R                  U R                  45      $ rK   )r`  r<  r=  r   s    r#   ra  BoxerEq.__iter__X      TYY		*++r&   c                     g)Nr   rL   r   s    r#   rN  BoxerEq._pred[      r&   )r<  r=  N)r   r   r   r   r$   r  r  r  ra  rN  r   rL   r&   r#   r  r  C  s     
6
,r&   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	rp  i_  c                 T    [         R                  XX#5        X@l        XPl        X`l        g rK   )r>  r$   r  rq  r5  )r   r<   r   r   r  rq  r5  s          r#   r$   BoxerCard.__init__`  s!    d*K
	r&   c                 B    U R                   1[        5       [        5       4$ rK   rT  r   s    r#   r  BoxerCard._variablesf  rV  r&   c                     [        U R                  U" U R                  5      U R                  U R                  U R
                  U R                  5      $ rK   )rp  r<   r   r   r  rq  r5  r  s     r#   r  BoxerCard.renumber_sentencesi  sB    dooHHJJII
 	
r&   c                 Z    [        U R                  U R                  U R                  45      $ rK   )r`  r  rq  r5  r   s    r#   ra  BoxerCard.__iter__s  s     TXXtzz499566r&   c                     g)Nr   rL   r   s    r#   rN  BoxerCard._predv  re  r&   )r5  rq  r  N)
r   r   r   r   r$   r  r  ra  rN  r   rL   r&   r#   rp  rp  _  s    *
7r&   rp  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)r  iz  c                 H    [         R                  XX#5        X@l        XPl        g rK   )r>  r$   r  r  )r   r<   r   r   r  r  s         r#   r$   BoxerOr.__init__{  r  r&   c                     [        [        [        R                  U R                  R                  5       U R                  R                  5       5      5      $ rK   )r  rU   rR   r  r  r  r  r   s    r#   r  BoxerOr._variables  s4    Styy';';'=tyy?S?S?UVWWr&   c                 l    U R                   R                  5       U R                  R                  5       -  $ rK   r  r  r  r   s    r#   r  BoxerOr.atoms  #    yy 499??#444r&   c                     [        U R                  U R                  U R                  U R                  R                  5       U R                  R                  5       5      $ rK   )r  r<   r   r   r  r  r  r   s    r#   r  BoxerOr.clean  sD    OOIIOOIIOO
 	
r&   c                     [        U R                  U" U R                  5      U R                  U R                  U R
                  5      $ rK   )r  r<   r   r   r  r  r  s     r#   r  BoxerOr.renumber_sentences  r  r&   c                 D    [        U R                  U R                  45      $ rK   )r`  r  r  r   s    r#   ra  BoxerOr.__iter__  r  r&   c                     g)Nr   rL   r   s    r#   rN  BoxerOr._pred  r  r&   )r  r  Nr   r   r   r   r$   r  r  r  r  ra  rN  r   rL   r&   r#   r  r  z  s&    
X5

,r&   r  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)r(  i  c                 `    [         R                  XX#5        X@l        XPl        X`l        Xpl        g rK   )r>  r$   r*  r  r  r  )r   r<   r   r   r*  r  r  r  s           r#   r$   BoxerWhq.__init__  s(     	d*K"	 	r&   c           	          [        [        [        R                  U R                  1[        5       [        5       4U R                  R                  5       U R                  R                  5       5      5      $ rK   )	r  rU   rR   r  r  r}  r  r  r  r   s    r#   r  BoxerWhq._variables  sR    --#%/		$$&		$$&	
 	
r&   c                 l    U R                   R                  5       U R                  R                  5       -  $ rK   r  r   s    r#   r  BoxerWhq.atoms  r  r&   c           
          [        U R                  U R                  U R                  U R                  U R
                  R                  5       U R                  U R                  R                  5       5      $ rK   )	r(  r<   r   r   r*  r  r  r  r  r   s    r#   r  BoxerWhq.clean  sR    OONNIIOOMMIIOO
 	
r&   c           	          [        U R                  U" U R                  5      U R                  U R                  U R
                  U R                  U R                  5      $ rK   )r(  r<   r   r   r*  r  r  r  r  s     r#   r  BoxerWhq.renumber_sentences  sI    dooNNIIMMII
 	
r&   c                     [        SSR                  U R                  5      -   S-   U R                  U R                  U R
                  45      $ )Nr   r   r   )r`  r0   r*  r  r  r  r   s    r#   ra  BoxerWhq.__iter__  s>    388DNN++c1499dmmTYYW
 	
r&   c                     g)Nr   rL   r   s    r#   rN  BoxerWhq._pred  r  r&   )r*  r  r  r  Nr  rL   r&   r#   r(  r(    s%    
5	
	


r&   r(  c                       \ rS rSrS rSrg)PassthroughBoxerDrsInterpreteri  c                     U$ rK   rL   )r   exs     r#   r@   (PassthroughBoxerDrsInterpreter.interpret  s    	r&   rL   N)r   r   r   r   r@   r   rL   r&   r#   r  r    s    r&   r  c                   0    \ rS rSrSS jrS rS rS rSrg)	r   i  c                     Xl         g rK   _occur_index)r   occur_indexs     r#   r$   #NltkDrtBoxerDrsInterpreter.__init__  s    'r&   c           	         [        U[        5      (       a  [        UR                   Vs/ s H  n[	        U5      PM     sn[        [        U R                  UR                  5      5      5      nUR                  b   U R                  UR                  5      Ul	        U$ [        U[        5      (       a$  [        U R                  UR                  5      5      $ [        U[        5      (       aF  U R                  UR                   SUR                    3U5      nU R#                  XAR$                  5      $ [        U[&        5      (       aG  U R                  SUR(                   SUR                    3U5      nU R#                  XAR$                  5      $ [        U[*        5      (       aE  U R                  SUR,                  -  U5      nU R#                  XAR.                  UR0                  5      $ [        U[2        5      (       a8  [5        [	        UR$                  5      U R                  UR                  5      5      $ [        U[6        5      (       aD  [9        [;        [	        UR.                  5      5      [;        [	        UR0                  5      5      5      $ [        U[<        5      (       aG  U R                  SUR(                   SUR>                   3U5      nU R#                  XAR$                  5      $ [        U[@        5      (       a>  [C        U R                  URD                  5      U R                  URF                  5      5      $ [        U[H        5      (       ap  U R                  URD                  5      nU R                  URF                  5      n[        UR                  UR                  -   UR                  UR                  -   5      $  URJ                  RL                   SU 35       es  snf )z<
:param ex: ``AbstractBoxerDrs``
:return: ``DrtExpression``
rX  ne_r  card_z: )'
isinstancer  r   r  r   rT   rU   r@   r  r  r  r
   rs   r  _add_occur_indexingr  r   ri  r  r4  r5  r;  r   r<  r=  rv  r   r  r	   r   rp  rq  r  r   r  r  r(  r  r   )r   r  r  rs   r   r  r  s          r#   r@   $NltkDrtBoxerDrsInterpreter.interpret  s   
 b(##&(gg.g!g.S5R0SC }}(!%!>JH%%'rvv(>??I&&++rvvhay,A2FD??400J''++c"''!BGG9,ErJD??400H%%++DBFFOR@D??4"''::I&&!(266"2DNN2664JKKG$$(%hrww&78%hrww&78  I&&++eBGG9AbhhZ,H"MD??400G$$"4>>"''#:DNN277<STTH%%>>"''*D>>"''*Dtyy499,djj4::.EFF6../r"66uA /s   O c           	      |    [        [        U5      5      nU H!  n[        U[        [        U5      5      5      nM#     U$ rK   )r   r   r   )r   r   rj   r   rB  s        r#   ri  %NltkDrtBoxerDrsInterpreter._make_atom  s:    %htn5C,,Xc];E  r&   c                     U R                   (       a`  UR                  bS  UR                  (       a  USUR                  -  -  nUSUR                  -  -  nUS[        UR                  5      S   -  -  nU$ )Nz_%sz_s%sz_w%sr   )r  r   r<   sortedr   )r   baser  s      r#   r  .NltkDrtBoxerDrsInterpreter._add_occur_indexing  sc    !://FR]]**DFVBOO4Q777Dr&   r  Nr   )	r   r   r   r   r$   r@   ri  r  r   rL   r&   r#   r   r     s    ('7Rr&   r   c                       \ rS rSrSrg)UnparseableInputExceptioni  rL   N)r   r   r   r   r   rL   r&   r#   r  r    s    r&   r  __main__zusage: %prog TEXT [options]z	--verbosez-vzdisplay verbose logs
store_trueFr!   )helpactiondefaultdestz--folz-fz
output FOLfolz
--questionz-qzinput is a questionr=   z--occurz-ozoccurrence indexr  r   zincorrect number of arguments)r  z\n)r=   r!   )Cr   rR   r-   r  r   rv   	functoolsr   optparser   nltk.internalsr   nltk.sem.drtr   r   r	   r
   r   r   r   r   r   nltk.sem.logicr   r   r   r   r   r   r  r  r  r  r>  r  r4  r;  rv  r  rp  r  r(  r  r   r9   r  r   opts
add_option
parse_argsoptionsrj   rQ   errorr  interpreterrC   r   r=   r!   rs   r   simplifyeliminate_equalityr  	normalizepretty_printrL   r&   r#   <module>r     s  *  	 	    ! &
 
 
 RY RYjO*9 O*dDTY DTN" "J8) 8)v) ):!# !H1 1h0 0f%| %P' 'Tl 8 6"l "J3| 3l 
; ;|		 	 z56DOO#   	OOLuSX   	OO"   	OO   oo'OWd
4yA~

23,9L9LMK


,
,Qew'7'7 - C {dlln//1;;#'')%%'([ r&   