
    g                        d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ  G d d	      Z G d
 de      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! G d de!      Z" G d de!      Z# G d de!      Z$ G d de!      Z% G d de!      Z& G d  d!e!      Z' G d" d#e!      Z( G d$ d%e!      Z) G d& d'      Z* G d( d)      Z+ G d* d+e,      Z-e.d,k(  rQ e	d-      Z/e/ja                  d.d/d0d1d2d34       e/ja                  d5d6d7d1d2d84       e/ja                  d9d:d;d1d2d<4       e/ja                  d=d>d?d1d2d@4       e/jc                         \  Z2Z3 e4e3      dAk7  re/jk                  dB        e+e2jl                  C      Z7 ee7      jq                  e3d   js                  dD      e2jt                  e2jv                  E      Z<e<	 e=d       ye<j}                         j                         Z<e2j                  r% e=e<j                         j                                ye<j                          yy)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                   ~    e Zd ZdZ	 	 	 	 	 ddZddZddZddZ	 ddZ	 dd	Z	dd
Z
ddZddZg dfdZd Zd Zy)Boxerz
    This class is an interface to Johan Bos's program Boxer, a wide-coverage
    semantic parser that produces Discourse Representation Structures (DRSs).
    NFc                 j    |
t               }|| _        || _        || _        | j	                  ||       y)a  
        :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         C/var/www/openai/venv/lib/python3.12/site-packages/nltk/sem/boxer.py__init__zBoxer.__init__A   s9    & !($>$@!&;#'*    c                    | j                  d||      | _        t        j                  j	                  t        j                  j                  | j                  d d d            | _        | j                  d||      | _        y )Ncandcz	../modelsboxer)_find_binary
_candc_binospathnormpathjoin_candc_models_path
_boxer_bin)r   r   r    s      r"   r   zBoxer.set_bin_dir]   sd    ++GWgF"$''"2"2GGLL"-{;#
 ++GWgFr$   c                 f    ||gnd}| j                  |gg|||      \  }|st        d| d      |S )aI  
        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"   	interpretzBoxer.interpretd   sK     +7*B))E7)]HgV4UG1=>>r$   c                 d    ||gnd}| j                  |g|||      \  }|st        d| d      |S )ah  
        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``
        Nr2   r3   r4   r7   s          r"   interpret_multizBoxer.interpret_multis   sI     +7*B))5'=(GT4UG1=>>r$   c                 R    | j                  |D cg c]  }|g c}|||      S c c}w )a{  
        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``
        )r5   )r   inputsr;   r:   r    r8   s         r"   interpret_sentszBoxer.interpret_sents   s4     ))"()&eW&)=(G
 	
)s   
$c           
         |?t        |      t        |      k(  sJ t        t        j                  d |D              sJ d}n-t	        t        t        t        t        |                        }d}| j                  ||||      }| j                  ||      }| j                  ||      }|D 	cg c]  }	|j                  |	d       c}	S c c}	w )ac  
        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   $   K   | ]  }|d u 
 y wN ).0ids     r"   	<genexpr>z.Boxer.interpret_multi_sents.<locals>.<genexpr>   s     )Q=R"D.=s   TF)r    )lenr   operatorand_listmapstrrange_call_candc_call_boxer_parse_to_drs_dictget)
r   rA   r;   r:   r    use_disc_id	candc_out	boxer_outdrs_dictrH   s
             r"   r5   zBoxer.interpret_multi_sents   s     $v;#m"4444(--)Q=)QRRRK S%F*<!=>MK$$V]Hg$V	$$Y$@	
 **9kB1>?2R&???s   -C	c                     dt         j                  j                  | j                  ddg|         ddg}| j	                  dj                  t        d t        ||      D        g             | j                  ||      S )aF  
        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   6   K   | ]  \  }}d | dg|z     yw)z<META>''NrF   )rG   r<   rH   s      r"   rI   z$Boxer._call_candc.<locals>.<genexpr>   s'     S8Ruq"t1o&*8Rs   )r+   r,   r.   r/   _callsumzipr*   )r   rA   r;   r:   r    argss         r"   rQ   zBoxer._call_candc   s~     GGLL007K2H2RS	
 zzIISFM8RS OO

 
	
r$   c                    d}	 t        j                  ddd      \  }}t        j                  |d      }|j	                  |j                  d             |r|j                          	 dd	d
ddd	dg| j                     dd	dg| j                     ddddd|g}| j                  d| j                  ||      }t        j                  |       |S # |r|j                          w w xY w)z
        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   r^   r0   remove)r   rV   r    ffdtemp_filenamera   stdouts           r"   rR   zBoxer._call_boxer   s     	 ( 0 0D!B 		"c"AGGI$$W-.	 fdmm,fdll+
" D$//4A
		- - 	 s   AC C c           	      0    t        ||dgd||dz   g|      S )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)   zBoxer._find_binary   s,    Y;v.
 	
r$   c                    |rEt        d|       t        d|       t        d|       t        d|dz   dj                  |      z          |;|g|z   }t        j                  |t        j                  t        j                        }nWdj                  ||dj                  |            }t        j                  |t        j                  t        j                  d	      }|j                         \  }}|r4t        d
|j                         |rt        d|d       |rt        d|d       |j                  dk7  r6t        dj                  |dj                  |      |j                  |            |S )a  
        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: )rv   stderrzecho "{}" | {} {}T)rv   r   shellzReturn code:zstdout:
r[   zstderr:
r   z&ERROR CALLING: {} {}
Returncode: {}
{})	printr.   
subprocessPopenPIPEformatcommunicate
returncoder6   )	r   	input_strbinaryra   r    cmdprv   r   s	            r"   r^   z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                 <   |j                  d      j                  d      }i }d}|t        |      k  rh||   }|j                  d      r<|j	                  d      }|d| }|d   dk(  r|d   dk(  r|d	d }||d	z   |j	                  d
       }	|d	z  }||   }|j                  d|	 d      sJ |dd  dk(  r|d d dz   }|j                  d      s
J d|        t        d|	 d      }
d	}d}t        ||
d        D ]?  \  }}|dk(  r|d	z  }|dk(  s|d	z  }|dk(  s!|
|z   d	z   }|||dz    dk(  r|dz   }n|d	z   } n |dkD  sJ ||d j                         }| j                  |||      }| j                  j                  |      ||<   |d	z  }|t        |      k  rh|S )Nrg   r[   r   zid(,   r]      )zsem(z').'z).zcan't parse line: z,[[]z',')rp   splitrJ   
startswithindexendswith	enumeratestrip
_parse_drsr   r=   )r   rW   rU   linesrX   iline	comma_idxr9   drs_idsearch_startbrace_count	drs_startjc	drs_inputparseds                    r"   rS   zBoxer._parse_to_drs_dict"  s     )//5#e*n8Du% JJsO	#Ai0?c)l2.>#.E#/"#5Li!mdjjo>QQxfXQ'78889&9t+D}}T*G.@,GG*"T&#45	%d<=&9:DAqCx#q(Cx#q(&!+(4q(81(<I#I	A>%G,5M	,5M	! ; !2~%~ 2.446	L+N)-)D)D)N)Nv)V&FAG #e*nH r$   c                 @    t        d |g|         j                  |      S rE   )BoxerOutputDrsParserparse)r   
drs_stringr9   rU   s       r"   r   zBoxer._parse_drsL  s"    #T<$8$EFLLZXXr$   )NFNFTF)NFF)__name__
__module____qualname____doc__r#   r   r=   r?   rB   r5   rQ   rR   r)   r^   rS   r   rF   r$   r"   r   r   ;   so     #+8G  CH
  CH@8
6%N
 -/ 'R(TYr$   r   c                       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d Zd Zd Zd Zd Zd Zd Zd Z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)"r   Nc                 Z    t        j                  |        || _        d| _        dg| _        y)zz
        This class is used to parse the Prolog DRS output from Boxer into a
        hierarchy of python objects.
        N)r]   r]   \F)r   r#   r9   sentence_id_offsetquote_charsr   r9   s     r"   r#   zBoxerOutputDrsParser.__init__Q  s-    
 	4 ("&34r$   c                 0    t        j                  | ||      S rE   )r   r   )r   data	signatures      r"   r   zBoxerOutputDrsParser.parse[  s    tT955r$   c                 
    g dS )N)(r   r   r   r   :rF   r   s    r"   get_all_symbolsz$BoxerOutputDrsParser.get_all_symbols^  s    --r$   c                 $    | j                  |      S rE   )
handle_drs)r   tokcontexts      r"   handlezBoxerOutputDrsParser.handlea  s    s##r$   c                     |S rE   rF   r   
expressionr   s      r"   attempt_adjunctsz%BoxerOutputDrsParser.attempt_adjunctsd      r$   c                 d    | j                         }| j                  ||      }|t        |      |S )zS
        Parse a DRS condition

        :return: list of ``DrtExpression``
        )tokenhandle_conditionr   )r   indicesr   accums       r"   parse_conditionz$BoxerOutputDrsParser.parse_conditiong  s6     jjl%%c73=*3//r$   c                     |dk(  r| j                         S |dv r" | j                  | j                        d g       S |dv r" | j                  | j                        d g       S y )Nri   )mergesmerge)alfa)	parse_drs_handle_binary_expression_make_merge_expression_handle_alfa)r   r   s     r"   r   zBoxerOutputDrsParser.handle_drss  sl    %<>>##''N411$2M2MNtUWXXH_A4$$T%@%@A$KK r$   c                    |dk(  r| j                         gS |dk(  r| j                  | j                        gn|dk(  r| j                  | j                        gn|dk(  r| j	                         gn|dk(  r| j                         gn|dk(  r| j                         gn|dk(  r| j                         gnt|dk(  r| j                         gn]|d	k(  r| j                         nG|d
k(  r| j                         gn0|dk(  r| j                         gn|dk(  r| j                         gng t        fd| j                  |      D        g       S )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   \   K   | ]  \  }}D cg c]  } |||       c}   y c c}w wrE   rF   )rG   
sent_indexword_indicescondcondss       r"   rI   z8BoxerOutputDrsParser.handle_condition.<locals>.<genexpr>  s;      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_duplexr_   _sent_and_word_indices)r   r   r   r   s      @r"   r   z%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                     | j                  | j                         d       | j                  d       }| j                  | j                         d       t        |      S )Nr   r   )assertTokenr   process_next_expressionBoxerNotr   ri   s     r"   r   z BoxerOutputDrsParser._handle_not  sH    s+**40s+}r$   c                      j                   j                         d        j                          j                   j                         d        j                          j                   j                         d        j                          j                   j                         d       t         j                                j                   j                         d        fd}|S )Nr   r   r   c           	      :    t        j                  | |      S rE   	BoxerPredr9   )r   r   r}   posr   sensevariables     r"   _handle_pred_fz9BoxerOutputDrsParser._handle_pred.<locals>._handle_pred_f  s&    !!:|XtSRW r$   r   r   parse_variableint)r   r  r}   r  r  r  s   ` @@@@r"   r   z!BoxerOutputDrsParser._handle_pred  s    s+&&(s+zz|s+jjls+DJJL!s+	 	
 r$   c                      j                   j                         d       g  j                   j                         d        j                   j                         d        j                  d        j                   j                         d        j                          j                   j                         d        j                  d        j                   j                         d        fdS )Nr   r   r   r   c           	      :    t        j                  | |      S rE   BoxerWhqr9   r   r   	ans_typesd1d2refr   s     r"   <lambda>z5BoxerOutputDrsParser._handle_duplex.<locals>.<lambda>      z<BR1
r$   )r   r   r   r  )r   r  r  r  r  s   `@@@@r"   r   z#BoxerOutputDrsParser._handle_duplex  s    s+	" 	u-s+))$/s+!!#s+))$/s+
 	
r$   c                      j                   j                         d        j                          j                   j                         d        j                          j                   j                         d        j                          j                   j                         d        j                          j                   j                         d        fdS )Nr   r   r   c           	      :    t        j                  | |      S rE   )
BoxerNamedr9   )r   r   r}   r   r  typer  s     r"   r  z4BoxerOutputDrsParser._handle_named.<locals>.<lambda>  s    
z<4u1
r$   r   r   r  )r   r}   r  r  r  s   `@@@@r"   r   z"BoxerOutputDrsParser._handle_named  s    s+&&(s+zz|s+zz|s+

s+
 	
r$   c                      j                   j                         d        j                          j                   j                         d        j                          j                   j                         d        j                          j                   j                         d       t         j                                j                   j                         d        fdS )Nr   r   r   c           	      :    t        j                  | |      S rE   )BoxerRelr9   )r   r   r   r   r  var1var2s     r"   r  z2BoxerOutputDrsParser._handle_rel.<locals>.<lambda>  s    z<tS%1
r$   r  )r   r   r  r  r  s   `@@@@r"   r   z BoxerOutputDrsParser._handle_rel  s    s+""$s+""$s+jjls+DJJL!s+
 	
r$   c                    | j                  | j                         d       | j                         }| j                  | j                         d       | j                  |      }| j                  | j                         d       |S )Nr   r   r   )r   r   r  _handle_time_expression)r   arg	new_condss      r"   r   z"BoxerOutputDrsParser._handle_timex  sh    s+!!#s+005	s+r$   c                 T     j                          j                   j                         d       dk(  r j                        }ndk(  r j                        }ny  j                   j                         d       d } fdg|D cg c]
  } ||       c}z   S c c}w )Nr   datetimer   c                       fdS )Nc                     S rE   rF   )r   r   xs     r"   r  zPBoxerOutputDrsParser._handle_time_expression.<locals>.func_gen.<locals>.<lambda>  s    Ar$   rF   )r&  s   `r"   func_genz>BoxerOutputDrsParser._handle_time_expression.<locals>.func_gen  s	    55r$   c           	      :    t        j                  | |dd      S )Nnr   r   )r   r   r  r   r   s     r"   r  z>BoxerOutputDrsParser._handle_time_expression.<locals>.<lambda>  s    Y!!:|S#sA.r$   )r   r   _handle_date_handle_time)r   r  r   r'  r   r   s   ``   @r"   r  z,BoxerOutputDrsParser._handle_time_expression
  s    jjls+&=%%c*EF]%%c*Es+	6
 )..Xd^.	/ 	/ /s   B%c                    g }| j                  | j                               \  \  }}| j                  | j                         d       | j                         }| j                  | j                         d       |j	                  t        | j                  |||d| dd             | j                  | j                         d       | j                  | j                               \  \  }}| j                         }|dk7  r?|j                  dd	      }|j	                  t        | j                  |||d
| dd             | j                  | j                         d       | j                  | j                               \  \  }}| j                         }|dk7  r-|j	                  t        | j                  |||d| dd             | j                  | j                         d       | j                  | j                               \  \  }}| j                         }|dk7  r-|j	                  t        | j                  |||d| dd             |S )Nr   r   	date_pol_ar   r   XXXXr   _
date_year_XXdate_month_	date_day_)r   _parse_index_listr   r   appendr   r9   replace)	r   r  r   r   r   polyearmonthdays	            r"   r*  z!BoxerOutputDrsParser._handle_date  sC   (,(C(C""$)
%	#*l 	s+jjls+!!C5!
	
 	s+(,(C(C""$)
%	#*l zz|6><<S)DLL%%  '
 	s+(,(C(C""$)
%	#*l 

D=LL%% !%)
 	s+(,(C(C""$)
%	#*l jjl$;LL%% u%
 r$   c                 4   g }| j                          | j                         }|dk7  r"|j                  | j                  d||             | j	                  | j                         d       | j                          | j                         }|dk7  r"|j                  | j                  d||             | j	                  | j                         d       | j                          | j                         }|dk7  r"|j                  | j                  d||             |S )Nr2  r_hour_2r   r_min_2r_sec_2)r5  r   r6  
_make_atomr   )r   r  r   hourminsecs         r"   r+  z!BoxerOutputDrsParser._handle_timem  s     zz|4<LLS$?@s+ jjl$;LLC=>s+ jjl$;LLC=>r$   c                 z     j                   j                         d        j                          j                   j                         d        j                          j                   j                         d        j                          j                   j                         d        fdS )Nr   r   r   c                 8    t        j                  | |      S rE   )	BoxerCardr9   )r   r   r   r  valuer  s     r"   r  z3BoxerOutputDrsParser._handle_card.<locals>.<lambda>  s    	z<5$1
r$   r  )r   r  rG  r  s   `@@@r"   r   z!BoxerOutputDrsParser._handle_card  s    s+&&(s+

s+zz|s+
 	
r$   c                      j                   j                         d        j                          j                   j                         d        j                  d        j                   j                         d        fdS )Nr   r   r   c                 6    t        j                  | |      S rE   )	BoxerPropr9   )r   r   ri   r   r  s     r"   r  z3BoxerOutputDrsParser._handle_prop.<locals>.<lambda>  s    	z<31
r$   )r   r   r  r   )r   ri   r  s   `@@r"   r   z!BoxerOutputDrsParser._handle_prop  sm    s+&&(s+**40s+
 	
r$   c                    g }| j                  | j                         d       | j                  d      dk7  rX|j                  | j                                | j                  d      dk(  r| j                          | j                  d      dk7  rX| j                          | j                  | j                         d       |S )Nr   r   r   r   r   )r   r   r6  parse_index)r   r   s     r"   r5  z&BoxerOutputDrsParser._parse_index_list  s    s+jjms"NN4++-.zz!}#

 jjms" 	

s+r$   c                    | j                  | j                         d       | j                  | j                         d       t               }| j                  d      dk7  rh| j                         }|j	                  | j                                | j                  d      dk(  r| j                          | j                  d      dk7  rh| j                          | j                  | j                         d       | j                  | j                         d       g }| j                  d      dk7  ri| j                         }|j                  | j                  |             | j                  d      dk(  r| j                          | j                  d      dk7  ri| j                          | j                  | j                         d       t        t        |      |      S )Nr   r   r   r   r   r   )
r   r   setr5  addr  extendr   BoxerDrsrM   )r   refsr   r   s       r"   r   z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                    | j                  | j                         d       | j                  d       | j                  | j                         d       | j                  d       | j                  | j                         d       fdS )Nr   r   r   c                      | |      S rE   rF   r   r   drs1drs2make_callbacks     r"   r  z@BoxerOutputDrsParser._handle_binary_expression.<locals>.<lambda>      dD1
r$   r   r   r   )r   rX  rV  rW  s    `@@r"   r   z.BoxerOutputDrsParser._handle_binary_expression  so    s+++D1s+++D1s+
 	
r$   c                 z   | j                  | j                         d       | j                         }| j                  | j                         d       | j                  d       | j                  | j                         d       | j                  d       | j                  | j                         d       fdS )Nr   r   r   c                      | |      S rE   rF   rU  s     r"   r  z3BoxerOutputDrsParser._handle_alfa.<locals>.<lambda>  rY  r$   rZ  )r   rX  r  rV  rW  s    ` @@r"   r   z!BoxerOutputDrsParser._handle_alfa  s    s+zz|s+++D1s+++D1s+
 	
r$   c                      j                   j                         d        j                          j                   j                         d        j                          j                   j                         d        fdS )Nr   r   r   c                 6    t        j                  | |      S rE   )BoxerEqr9   )r   r   r   r  r  s     r"   r  z1BoxerOutputDrsParser._handle_eq.<locals>.<lambda>  s    z<t1
r$   r  )r   r  r  s   `@@r"   r   zBoxerOutputDrsParser._handle_eq  sk    s+""$s+""$s+
 	
r$   c                      j                   j                         d        j                   j                         d       g  j                  d      dk7  r؉ j                         } j                   j                         d       |dk(  r j                   j                                nn|dk(  rJj                  d        j                         }|d	k(  rj                  d
       n1j                  |       nj                   j                                 j                  d      dk7  r؉ j                           j                   j                         d        j                  d        j                   j                         d        j	                          j                   j                         d        j                  d        j                   j                         d        fdS )Nr   r   r   r   r   desnumnumbercoucountr   r   c           	      :    t        j                  | |      S rE   r
  r  s     r"   r  z2BoxerOutputDrsParser._handle_whq.<locals>.<lambda>  r  r$   )r   r   r6  r   r  )r   cattypr  r  r  r  s   `  @@@@r"   r   z BoxerOutputDrsParser._handle_whq  s   s+s+	jjms"**,CTZZ\3/e|  .  *jjl%<$$W-$$S)  . jjms" 	

s+))$/s+!!#s+))$/s+
 	
r$   c                 v    t        |j                  |j                  z   |j                  |j                  z         S rE   rQ  rR  r   r   r   r   rV  rW  s        r"   r   z+BoxerOutputDrsParser._make_merge_expression  s)    		DII-tzzDJJ/FGGr$   c                 4    t        | j                  ||||      S rE   )BoxerOrr9   rk  s        r"   r   z(BoxerOutputDrsParser._make_or_expression  s    t((*lD$OOr$   c                 D    t        |j                  |j                  |      S rE   rj  rk  s        r"   r   z)BoxerOutputDrsParser._make_imp_expression  s    		4::t44r$   c                 `    | j                         }t        j                  d|      sJ |       |S )Nz^[exps]\d+$)r   rematchr   vars     r"   r  z#BoxerOutputDrsParser.parse_variable  s+    jjlxx,1c1,
r$   c                 4    t        | j                               S rE   )r  r   r   s    r"   rL  z BoxerOutputDrsParser.parse_index  s    4::<  r$   c                    |D ch c]  }|dk\  s	|dz  dz
   }}|r?g }|D ]6  }|D cg c]  }||dz  dz
  k(  s|dz  dz
   }}|j                  ||f       8 |S |D cg c]
  }|dz  dz
   }}d|fgS c c}w c c}w c c}w )zD
        :return: list of (sent_index, word_indices) tuples
        r   i  r   N)r6  )r   r   r   sent_indicespairsr   r   s          r"   r   z+BoxerOutputDrsParser._sent_and_word_indices  s     18B116TQBE*
,3 ,3qza$hRS^7SQXNG    j,78	 +
 L4;<GqQXNGL<<()) C  =s   
A7
A7A<
A<!BrE   )"r   r   r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r*  r+  r   r   r5  r   r   r   r   r   r   r   r   r  rL  r   rF   r$   r"   r   r   P  s    56.$
L,
\&
B

/*L\,
	

+2




>HP5
!*r$   r   c                   6    e Zd ZdZd	dZd Zd Zd Zd Zd Z	y)
BoxerDrsParserzD
    Reparse the str form of subclasses of ``AbstractBoxerDrs``
    Nc                 <    t        j                  |        || _        y rE   )r   r#   r9   r   s     r"   r#   zBoxerDrsParser.__init__'  s    4 (r$   c                     t         j                  t         j                  t         j                  t         j                  t         j
                  gS rE   )r   OPENCLOSECOMMAOPEN_BRACKETCLOSE_BRACKETr   s    r"   r   zBoxerDrsParser.get_all_symbols+  s3    NNOOOO""##
 	
r$   c                     |S rE   rF   r   s      r"   r   zBoxerDrsParser.attempt_adjuncts4  r   r$   c           	         	 |dk(  r| j                  t        j                         | j                  | j                  n| j	                         }| j                  t        j
                         | j                         }| j                  t        j
                         t        t        t        | j                                     }| j                  t        j
                         t        | j	                               }| j                  t        j
                         | j	                         }| j                  t        j
                         | j	                         }| j                  t        j
                         t        | j	                               }	| j                  t        j                         t        |||||||	      S |dk(  r| j                  t        j                         | j                  | j                  n| j	                         }| j                  t        j
                         t        | j	                               }| j                  t        j
                         t        t        | j                               }| j                  t        j
                         t        | j	                               }| j                  t        j
                         | j	                         }| j                  t        j
                         | j	                         }
| j                  t        j
                         t        | j	                               }	| j                  t        j                         t        ||||||
|	      S |dk(  r| j                  t        j                         | j                  | j                  n| j	                         }| j                  t        j
                         | j                         }| j                  t        j
                         t        t        t        | j                                     }| j                  t        j
                         t        | j	                               }| j                  t        j
                         t        | j	                               }| j                  t        j
                         | j	                         }| j                  t        j
                         t        | j	                               }	| j                  t        j                         t        |||||||	      S |dk(  r[| j                  t        j                         | j                  | j                  n| j	                         }| j                  t        j
                         t        | j	                               }| j                  t        j
                         t        t        t        | j                                     }| j                  t        j
                         t        | j	                               }| j                  t        j
                         | j                  d       }| j                  t        j                         t!        |||||      S |dk(  rZ| j                  t        j                         | j                  d       }| j                  t        j                         t#        |      S |dk(  r| j                  t        j                         | j                  d       }| j                  t        j
                         | j                  d       }| j                  t        j                         t%        |j&                  |j(                  |      S |dk(  rA| j                  t        j                         | j                  | j                  n| j	                         }| j                  t        j
                         | j                         }| j                  t        j
                         t        t        | j                               }| j                  t        j
                         | j                  d       }| j                  t        j
                         | j                  d       }| j                  t        j                         t+        |||||      S |dk(  rZ| j                  t        j                         | j                  | j                  n| j	                         }| j                  t        j
                         | j                         }| j                  t        j
                         t        t        t        | j                                     }| j                  t        j
                         t        | j	                               }| j                  t        j
                         t        | j	                               }| j                  t        j                         t-        |||||      S |d	k(  rx| j                  t        j                         | j                  | j                  n| j	                         }| j                  t        j
                         | j                         }| j                  t        j
                         t        t        | j                               }| j                  t        j
                         t        | j	                               }| j                  t        j
                         | j	                         }| j                  t        j
                         | j	                         }
| j                  t        j                         t/        ||||||
      S |d
k(  r| j                  t        j                         | j                  | j                  n| j	                         }| j                  t        j
                         | j                         }| j                  t        j
                         t        t        t        | j                                     }| j                  t        j
                         | j                         }| j                  t        j
                         | j                  d       }| j                  t        j
                         t        | j	                               }| j                  t        j
                         | j                  d       }| j                  t        j                         t1        |||||||      S 	 J t;        |             # t2        $ r%}t5        | j6                  t9        |            |d }~ww xY w)Nr   r   r   r   r   r   r   r   r   r   )assertNextTokenr   r|  r9   r   r~  nullableIntTokenrM   rN   r  handle_refsr}  r   r  r  r   rJ  r   rQ  rR  r   rm  r_  rF  r  r6   r   _currentIndexrO   repr)r   r   r   disc_idsent_idword_idsr  r}   r  r  r  r  r  r   ri   rV  rW  rs  rG  r  es                        r"   r   z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 '8XtSRW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!Wh$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(D$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 '8Xs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4FF$$Y^^4)-):):)FD%%DJJL  $$Y__5//1$$Y__5C)9)9); <=$$Y__54::<($$Y__54::<($$Y__5w4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 0Ev 7Ev E=v F8v 	w( wwc                 F    | j                         }|dk7  rt        |      S d S )NNone)r   r  )r   ts     r"   r  zBoxerDrsParser.nullableIntToken  s"    JJLfs1v.$.r$   c                 t    	 | j                         S # t        $ r}t        |j                  d      |d }~ww xY w)NzVariable expected.)r   r   r   )r   descriptionr  s      r"   get_next_token_variablez&BoxerDrsParser.get_next_token_variable  s;    	T::<* 	T-agg7KLRSS	Ts    	727rE   )
r   r   r   r   r#   r   r   r   r  r  rF   r$   r"   ry  ry  "  s(    )
e N/Tr$   ry  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
AbstractBoxerDrsc                 F    | j                         \  }}}|||z  z
  |||z
  fS zK
        :return: (set<variables>, set<events>, set<propositions>)
        )
_variables)r   	variableseventspropositionss       r"   r  zAbstractBoxerDrs.variables  s3     +///*;'	6<Vl23V\F=RSSr$   c                 f    i }t        d| j                               D ]  \  }}|D ]  }|||<   	  |S )N)zr  r   )r`   r  )r   vartypesr  varsvs        r"   variable_typeszAbstractBoxerDrs.variable_types  s=    ?DNN,<=GAt  > r$   c                 <    t               t               t               fS r  rN  r   s    r"   r  zAbstractBoxerDrs._variables  s     suce$$r$   c                     t               S rE   r  r   s    r"   atomszAbstractBoxerDrs.atoms  	    ur$   c                     | S rE   rF   r   s    r"   cleanzAbstractBoxerDrs.clean      r$   c                 F    |j                  dd      j                  dd      S )N-r0  r]   )r7  )r   r}   s     r"   _clean_namezAbstractBoxerDrs._clean_name  s     ||C%--c377r$   c                     | S rE   rF   r   rs   s     r"   renumber_sentencesz#AbstractBoxerDrs.renumber_sentences  r  r$   c                     t        |        S rE   )hashr   s    r"   __hash__zAbstractBoxerDrs.__hash__
  s    tfr$   N)r   r   r   r  r  r  r  r  r  r  r  rF   r$   r"   r  r    s+    T%8r$   r  c                   V    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d	 Z
ej                  Zy)rQ  Nc                 X    t         j                  |        || _        || _        || _        y rE   )r  r#   rR  r   
consequent)r   rR  r   r  s       r"   r#   zBoxerDrs.__init__  s%    !!$'	
$r$   c                 Z   t               t               t               f}| j                  D ]5  }t        ||j                               D ]  \  }}|j	                  |        7 | j
                  =t        || j
                  j                               D ]  \  }}|j	                  |        |S rE   )rN  r   r`   r  updater  )r   r  r   sr  s        r"   r  zBoxerDrs._variables  s    UCE35)	JJDIt'891 :  ??&It'A'A'CD1 Er$   c                     t        t        j                  d | j                  D        t	                     }| j
                  )|j                  | j
                  j                                |S )Nc              3   <   K   | ]  }|j                           y wrE   )r  )rG   r   s     r"   rI   z!BoxerDrs.atoms.<locals>.<genexpr>   s     %Jztdjjlzs   )r   rK   or_r   rN  r  r  r  )r   r  s     r"   r  zBoxerDrs.atoms  sH    x||%Jtzz%JCER??&LL..01r$   c                     | j                   r| j                   j                         nd }t        | j                  | j                  D cg c]  }|j                          c}|      S c c}w rE   )r  r  rQ  rR  r   )r   r  r   s      r"   r  zBoxerDrs.clean%  sK    04T__**,T
		tzz#Bz!AGGIz#BJOO#Bs   A&
c           	          | j                   r| j                   j                  |      nd }t        | j                  | j                  D cg c]  }|j                  |       c}|      S c c}w rE   )r  r  rQ  rR  r   )r   rs   r  r   s       r"   r  zBoxerDrs.renumber_sentences)  sX    >BooT__77:SW
IIDA,,Q/Dj
 	
Ds   A(
c                     dj                  dj                  d | j                  D              dj                  d | j                  D                    }| j                  d| d| j                   d}|S )Nzdrs([{}], [{}]), c              3   &   K   | ]	  }d |z    yw%sNrF   )rG   rs     r"   rI   z$BoxerDrs.__repr__.<locals>.<genexpr>1  s     2	1dQh	   c              3   &   K   | ]	  }d |z    ywr  rF   )rG   r   s     r"   rI   z$BoxerDrs.__repr__.<locals>.<genexpr>2  s     3
1dQh
r  zimp(r   )r   r.   rR  r   r  )r   r  s     r"   __repr__zBoxerDrs.__repr__/  sh    $$II2		22II3

33
 ??&qcDOO,A.Ar$   c                 |   | j                   |j                   k(  xr | j                  |j                  k(  xr t        | j                        t        |j                        k(  xrZ t	        t
        j                  d t        | j                  |j                        D              xr | j                  |j                  k(  S )Nc              3   ,   K   | ]  \  }}||k(    y wrE   rF   )rG   c1c2s      r"   rI   z"BoxerDrs.__eq__.<locals>.<genexpr>>  s     T7SVRb7S   )		__class__rR  rJ   r   r   rK   rL   r`   r  r   others     r"   __eq__zBoxerDrs.__eq__8  s    NNeoo- 4		UZZ'4DJJ3u{{#334 Ts4::u{{7ST4 5#3#33	
r$   c                     | |k(   S rE   rF   r  s     r"   __ne__zBoxerDrs.__ne__C      5=  r$   rE   r   r   r   r#   r  r  r  r  r  r  r  r  r  rF   r$   r"   rQ  rQ    s8    %P
	
!  ((Hr$   rQ  c                   T    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  Zy	)
r   c                 <    t         j                  |        || _        y rE   )r  r#   ri   r   s     r"   r#   zBoxerNot.__init__J  s    !!$'r$   c                 6    | j                   j                         S rE   )ri   r  r   s    r"   r  zBoxerNot._variablesN  s    xx""$$r$   c                 6    | j                   j                         S rE   ri   r  r   s    r"   r  zBoxerNot.atomsQ      xx~~r$   c                 H    t        | j                  j                               S rE   )r   ri   r  r   s    r"   r  zBoxerNot.cleanT  s    ())r$   c                 J    t        | j                  j                  |            S rE   )r   ri   r  r  s     r"   r  zBoxerNot.renumber_sentencesW  s    33A677r$   c                      d| j                   z  S )Nznot(%s)ri   r   s    r"   r  zBoxerNot.__repr__Z  s    DHH%%r$   c                 j    | j                   |j                   k(  xr | j                  |j                  k(  S rE   )r  ri   r  s     r"   r  zBoxerNot.__eq__]  s'    ~~0JTXX5JJr$   c                     | |k(   S rE   rF   r  s     r"   r  zBoxerNot.__ne__`  r  r$   Nr  rF   r$   r"   r   r   I  s8    % *8&K!  ((Hr$   r   c                   B    e Zd Zd Zd Zd Zd Zej                  Zd Z	y)BoxerIndexedc                 X    t         j                  |        || _        || _        || _        y rE   )r  r#   r9   r   r   )r   r9   r   r   s       r"   r#   zBoxerIndexed.__init__g  s'    !!$'($(r$   c                     | hS rE   rF   r   s    r"   r  zBoxerIndexed.atomsm  s	    vr$   c                 0   | j                   |j                   k(  xr| | j                  |j                  k(  xra | j                  |j                  k(  xrF | j                  |j                  k(  xr+ t	        t
        j                  d t        | |      D              S )Nc              3   ,   K   | ]  \  }}||k(    y wrE   rF   )rG   r  os      r"   rI   z&BoxerIndexed.__eq__.<locals>.<genexpr>v  s     &K:J$!QqAv:Jr  )r  r9   r   r   r   rK   rL   r`   r  s     r"   r  zBoxerIndexed.__eq__p  s    NNeoo- M!!U%7%77M5#3#33M !!U%7%77M x}}&K#dE:J&KL	
r$   c                     | |k(   S rE   rF   r  s     r"   r  zBoxerIndexed.__ne__y  r  r$   c           	          dj                  | j                         | j                  | j                  dj	                  d | j
                  D                    }| D ]
  }|d|z  z  } |dz   S )Nz{}({}, {}, [{}]r  c              3   &   K   | ]	  }d |z    ywr  rF   )rG   wis     r"   rI   z(BoxerIndexed.__repr__.<locals>.<genexpr>  s     <*;BdRi*;r  z, %sr   )r   _predr9   r   r.   r   )r   r  r  s      r"   r  zBoxerIndexed.__repr__~  se    $$JJLOOII<$*;*;<<	
 A!OA 3wr$   N)
r   r   r   r#   r  r  r  r  r  r  rF   r$   r"   r  r  f  s(    )
!  ((H	r$   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	r   c                 l    t         j                  | |||       || _        || _        || _        || _        y rE   )r  r#   rs  r}   r  r  )r   r9   r   r   rs  r}   r  r  s           r"   r#   zBoxerPred.__init__  s2    dL*lK	
r$   c                 B    | j                   ht               t               fS rE   rs  rN  r   s    r"   r  zBoxerPred._variables      
CE35))r$   c           	          t        | j                  | j                  | j                  || j                  | j
                  | j                        S rE   )r   r9   r   r   r}   r  r  rr  s     r"   
change_varzBoxerPred.change_var  s@    OOIIHHJJ
 	
r$   c           	          t        | j                  | j                  | j                  | j                  | j                  | j                        | j                  | j                        S rE   )	r   r9   r   r   rs  r  r}   r  r  r   s    r"   r  zBoxerPred.clean  sO    OOHHTYY'HHJJ
 	
r$   c           	           || j                         }t        | j                  || j                  | j                  | j
                  | j                  | j                        S rE   )r   r   r9   r   rs  r}   r  r  )r   rs   new_sent_indexs      r"   r  zBoxerPred.renumber_sentences  sN    4??+HHIIHHJJ
 	
r$   c                 p    t        | j                  | j                  | j                  | j                  f      S rE   )iterrs  r}   r  r  r   s    r"   __iter__zBoxerPred.__iter__  s&    TXXtyy$((DJJ?@@r$   c                      y)Nr   rF   r   s    r"   r  zBoxerPred._pred      r$   N
r   r   r   r#   r  r  r  r  r  r  rF   r$   r"   r   r     s&    *	
	


Ar$   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	r  c                 l    t         j                  | |||       || _        || _        || _        || _        y rE   )r  r#   rs  r}   r  r  )r   r9   r   r   rs  r}   r  r  s           r"   r#   zBoxerNamed.__init__  s2    dL*lK		
r$   c                 B    | j                   ht               t               fS rE   r  r   s    r"   r  zBoxerNamed._variables  r  r$   c           	          t        | j                  | j                  | j                  || j                  | j
                  | j                        S rE   )r  r9   r   r   r}   r  r  rr  s     r"   r  zBoxerNamed.change_var  s@    OOIIIIJJ
 	
r$   c           	          t        | j                  | j                  | j                  | j                  | j                  | j                        | j                  | j                        S rE   )	r  r9   r   r   rs  r  r}   r  r  r   s    r"   r  zBoxerNamed.clean  sO    OOHHTYY'IIJJ
 	
r$   c           	          t        | j                   || j                        | j                  | j                  | j
                  | j                  | j                        S rE   )r  r9   r   r   rs  r}   r  r  r  s     r"   r  zBoxerNamed.renumber_sentences  sI    dooHHIIIIJJ
 	
r$   c                 p    t        | j                  | j                  | j                  | j                  f      S rE   )r  rs  r}   r  r  r   s    r"   r  zBoxerNamed.__iter__  s&    TXXtyy$))TZZ@AAr$   c                      y)Nr   rF   r   s    r"   r  zBoxerNamed._pred  s    r$   Nr  rF   r$   r"   r  r    s&    *	
	
	
Br$   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)r  c                 l    t         j                  | |||       || _        || _        || _        || _        y rE   )r  r#   r  r  r   r  )r   r9   r   r   r  r  r   r  s           r"   r#   zBoxerRel.__init__  s2    dL*lK		
r$   c                 X    | j                   | j                  ht               t               fS rE   r  r  rN  r   s    r"   r  zBoxerRel._variables       DII&su55r$   c           
          t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                        | j                        S rE   )	r  r9   r   r   r  r  r  r   r  r   s    r"   r  zBoxerRel.clean  sO    OOIIIITXX&JJ
 	
r$   c           	          t        | j                   || j                        | j                  | j                  | j
                  | j                  | j                        S rE   )r  r9   r   r   r  r  r   r  r  s     r"   r  zBoxerRel.renumber_sentences  sI    dooIIIIHHJJ
 	
r$   c                 p    t        | j                  | j                  | j                  | j                  f      S rE   )r  r  r  r   r  r   s    r"   r  zBoxerRel.__iter__  s&    TYY		488TZZ@AAr$   c                      y)Nr   rF   r   s    r"   r  zBoxerRel._pred      r$   N)	r   r   r   r#   r  r  r  r  r  rF   r$   r"   r  r    s!    6	
	
Br$   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
rJ  c                 P    t         j                  | |||       || _        || _        y rE   )r  r#   rs  ri   )r   r9   r   r   rs  ri   s         r"   r#   zBoxerProp.__init__  s$    dL*lKr$   c                     t        t        t        j                  t	               t	               | j
                  hf| j                  j                                     S rE   )tuplerN   rK   r  rN  rs  ri   r  r   s    r"   r  zBoxerProp._variables  s=    sucedhhZ8$((:M:M:OP
 	
r$   c                     | j                   hS rE   r  r   s    r"   referenced_labelszBoxerProp.referenced_labels$  s    zr$   c                 6    | j                   j                         S rE   r  r   s    r"   r  zBoxerProp.atoms'  r  r$   c                     t        | j                  | j                  | j                  | j                  | j
                  j                               S rE   )rJ  r9   r   r   rs  ri   r  r   s    r"   r  zBoxerProp.clean*  s=    OOHHHHNN
 	
r$   c           	          t        | j                   || j                        | j                  | j                  | j
                  j                  |            S rE   )rJ  r9   r   r   rs  ri   r  r  s     r"   r  zBoxerProp.renumber_sentences3  sF    dooHHHH''*
 	
r$   c                 D    t        | j                  | j                  f      S rE   )r  rs  ri   r   s    r"   r  zBoxerProp.__iter__<  s    TXXtxx())r$   c                      y)Nr   rF   r   s    r"   r  zBoxerProp._pred?  r  r$   N)r   r   r   r#   r  r  r  r  r  r  r  rF   r$   r"   rJ  rJ    s*    


 

*r$   rJ  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)r_  c                 P    t         j                  | |||       || _        || _        y rE   )r  r#   r  r  )r   r9   r   r   r  r  s         r"   r#   zBoxerEq.__init__D  $    dL*lK		r$   c                 X    | j                   | j                  ht               t               fS rE   r  r   s    r"   r  zBoxerEq._variablesI  r  r$   c                     t               S rE   r  r   s    r"   r  zBoxerEq.atomsL  r  r$   c                     t        | j                   || j                        | j                  | j                  | j
                        S rE   )r_  r9   r   r   r  r  r  s     r"   r  zBoxerEq.renumber_sentencesO  ;    dooIIII
 	
r$   c                 D    t        | j                  | j                  f      S rE   )r  r  r  r   s    r"   r  zBoxerEq.__iter__X      TYY		*++r$   c                      y)Nr   rF   r   s    r"   r  zBoxerEq._pred[      r$   N)	r   r   r   r#   r  r  r  r  r  rF   r$   r"   r_  r_  C  s     
6
,r$   r_  c                   *    e Zd Zd Zd Zd Zd Zd Zy)rF  c                 ^    t         j                  | |||       || _        || _        || _        y rE   )r  r#   rs  rG  r  )r   r9   r   r   rs  rG  r  s          r"   r#   zBoxerCard.__init__`  s+    dL*lK
	r$   c                 B    | j                   ht               t               fS rE   r  r   s    r"   r  zBoxerCard._variablesf  r  r$   c                     t        | j                   || j                        | j                  | j                  | j
                  | j                        S rE   )rF  r9   r   r   rs  rG  r  r  s     r"   r  zBoxerCard.renumber_sentencesi  sB    dooHHJJII
 	
r$   c                 Z    t        | j                  | j                  | j                  f      S rE   )r  rs  rG  r  r   s    r"   r  zBoxerCard.__iter__s  s     TXXtzz499566r$   c                      y)Nr   rF   r   s    r"   r  zBoxerCard._predv  r  r$   N)r   r   r   r#   r  r  r  r  rF   r$   r"   rF  rF  _  s    *
7r$   rF  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	rm  c                 P    t         j                  | |||       || _        || _        y rE   )r  r#   rV  rW  )r   r9   r   r   rV  rW  s         r"   r#   zBoxerOr.__init__{  r  r$   c                     t        t        t        j                  | j                  j                         | j                  j                                     S rE   )r  rN   rK   r  rV  r  rW  r   s    r"   r  zBoxerOr._variables  s4    Styy';';'=tyy?S?S?UVWWr$   c                 l    | j                   j                         | j                  j                         z  S rE   rV  r  rW  r   s    r"   r  zBoxerOr.atoms  #    yy 499??#444r$   c                     t        | j                  | j                  | j                  | j                  j                         | j                  j                               S rE   )rm  r9   r   r   rV  r  rW  r   s    r"   r  zBoxerOr.clean  sD    OOIIOOIIOO
 	
r$   c                     t        | j                   || j                        | j                  | j                  | j
                        S rE   )rm  r9   r   r   rV  rW  r  s     r"   r  zBoxerOr.renumber_sentences  r  r$   c                 D    t        | j                  | j                  f      S rE   )r  rV  rW  r   s    r"   r  zBoxerOr.__iter__  r  r$   c                      y)Nr   rF   r   s    r"   r  zBoxerOr._pred  r!  r$   N
r   r   r   r#   r  r  r  r  r  r  rF   r$   r"   rm  rm  z  s&    
X5

,r$   rm  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	r  c                 l    t         j                  | |||       || _        || _        || _        || _        y rE   )r  r#   r  rV  r  rW  )r   r9   r   r   r  rV  r  rW  s           r"   r#   zBoxerWhq.__init__  s4     	dL*lK"	 	r$   c           	          t        t        t        j                  | j                  ht               t               f| j                  j                         | j                  j                                     S rE   )	r  rN   rK   r  r  rN  rV  r  rW  r   s    r"   r  zBoxerWhq._variables  sR    --#%/		$$&		$$&	
 	
r$   c                 l    | j                   j                         | j                  j                         z  S rE   r,  r   s    r"   r  zBoxerWhq.atoms  r-  r$   c           
          t        | j                  | j                  | j                  | j                  | j
                  j                         | j                  | j                  j                               S rE   )	r  r9   r   r   r  rV  r  r  rW  r   s    r"   r  zBoxerWhq.clean  sR    OONNIIOOMMIIOO
 	
r$   c           	          t        | j                   || j                        | j                  | j                  | j
                  | j                  | j                        S rE   )r  r9   r   r   r  rV  r  rW  r  s     r"   r  zBoxerWhq.renumber_sentences  sI    dooNNIIMMII
 	
r$   c                     t        ddj                  | j                        z   dz   | j                  | j                  | j
                  f      S )Nr   r   r   )r  r.   r  rV  r  rW  r   s    r"   r  zBoxerWhq.__iter__  s>    388DNN++c1499dmmTYYW
 	
r$   c                      y)Nr   rF   r   s    r"   r  zBoxerWhq._pred  r  r$   Nr2  rF   r$   r"   r  r    s%    
5	
	


r$   r  c                       e Zd Zd Zy)PassthroughBoxerDrsInterpreterc                     |S rE   rF   )r   exs     r"   r=   z(PassthroughBoxerDrsInterpreter.interpret  s    	r$   N)r   r   r   r=   rF   r$   r"   r<  r<    s    r$   r<  c                   &    e Zd ZddZd Zd Zd Zy)r   c                     || _         y rE   )_occur_index)r   occur_indexs     r"   r#   z#NltkDrtBoxerDrsInterpreter.__init__  s
    'r$   c           	      f   t        |t              rt        |j                  D cg c]  }t	        |       c}t        t        | j                  |j                                    }|j                   | j                  |j                        |_	        |S t        |t              r$t        | j                  |j                              S t        |t              rG| j                  |j                   d|j                    |      }| j#                  ||j$                        S t        |t&              rH| j                  d|j(                   d|j                    |      }| j#                  ||j$                        S t        |t*              rF| j                  d|j,                  z  |      }| j#                  ||j.                  |j0                        S t        |t2              r8t5        t	        |j$                        | j                  |j                              S t        |t6              rDt9        t;        t	        |j.                              t;        t	        |j0                                    S t        |t<              rH| j                  d|j(                   d|j>                   |      }| j#                  ||j$                        S t        |t@              r>tC        | j                  |jD                        | j                  |jF                              S t        |tH              rp| j                  |jD                        }| j                  |jF                        }t        |j                  |j                  z   |j                  |j                  z         S J |jJ                  jL                   d|        c c}w )zT
        :param ex: ``AbstractBoxerDrs``
        :return: ``DrtExpression``
        r0  ne_r  card_z: )'
isinstancerQ  r   rR  r   rM   rN   r=   r   r  r   r
   ri   r   _add_occur_indexingr  r}   r@  rs  r  r  r  r   r  r  rJ  r   r_  r	   r   rF  rG  rm  r   rV  rW  r  r  r   )r   r>  r  ri   r   rV  rW  s          r"   r=   z$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   N.c           	      x    t        t        |            }|D ]   }t        |t        t        |                  }" |S rE   )r   r   r   )r   r   ra   r   r  s        r"   r@  z%NltkDrtBoxerDrsInterpreter._make_atom  s:    %htn5C,,Xc];E  r$   c                     | j                   rZ|j                  N|j                  r|d|j                  z  z  }|d|j                  z  z  }|dt        |j                        d   z  z  }|S )Nz_%sz_s%sz_w%sr   )rA  r   r9   sortedr   )r   baser>  s      r"   rG  z.NltkDrtBoxerDrsInterpreter._add_occur_indexing  sc    !://FR]]**DFVBOO4Q777Dr$   Nr   )r   r   r   r#   r=   r@  rG  rF   r$   r"   r   r     s    ('7Rr$   r   c                       e Zd Zy)UnparseableInputExceptionN)r   r   r   rF   r$   r"   rM  rM    s    r$   rM  __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 indexrB  r   zincorrect number of arguments)rB  z\n)r:   r    )Cr   rK   r+   rp  r   rl   	functoolsr   optparser   nltk.internalsr   nltk.sem.drtr   r   r	   r
   r   r   r   r   r   nltk.sem.logicr   r   r   r   r   r   ry  r  rQ  r   r  r   r  r  rJ  r_  rF  rm  r  r<  r   r6   rM  r   opts
add_option
parse_argsoptionsra   rJ   errorrB  interpreterr?   r   r:   r    ri   r   simplifyeliminate_equalityrT  	normalizepretty_printrF   r$   r"   <module>rd     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$   