
    Ng                        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    r e	d-          Z/e/0                    d.d/d0d1d2d34           e/0                    d5d6d7d1d2d84           e/0                    d9d:d;d1d2d<4           e/0                    d=d>d?d1d2d@4           e/1                                \  Z2Z3 e4e3          dAk    re/5                    dB            e+e2j6        C          Z7 ee7          8                    e3d         9                    dD          e2j:        e2j;        E          Z<e< e=d           dS e<>                                ?                                Z<e2j@        r1 e=e<@                                A                                           dS e<B                                 dS dS )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dS )Boxerz
    This class is an interface to Johan Bos's program Boxer, a wide-coverage
    semantic parser that produces Discourse Representation Structures (DRSs).
    NFTc                 |    |t                      }|| _        || _        || _        |                     ||           dS )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         J/var/www/html/ai-engine/env/lib/python3.11/site-packages/nltk/sem/boxer.py__init__zBoxer.__init__A   sH    & !($>$@$@!&;#'*****    c                    |                      d||          | _        t          j                            t          j                            | j        d d         d                    | _        |                      d||          | _        d S )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]   sr    ++GWgFF"$'"2"2GLL"-{;;#
 #
 ++GWgFFr$   c                 v    ||gnd}|                      |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   sZ     +7*B))E7)]HgVV 	?=U===>>>r$   c                 t    ||gnd}|                      |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   sX     +7*B))5'=(GTT 	?=U===>>>r$   c                 F    |                      d |D             |||          S )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``
        c                     g | ]}|gS  rB   ).0r8   s     r"   
<listcomp>z)Boxer.interpret_sents.<locals>.<listcomp>   s    )))eW)))r$   )r5   )r   inputsr;   r:   r    s        r"   interpret_sentszBoxer.interpret_sents   s3     ))))&)))=(G
 
 	
r$   c           
         |Kt          |          t          |          k    sJ t          t          j        d |D                       sJ d}n>t	          t          t          t          t          |                                        }d}|                     ||||          }| 	                    ||          }| 
                    ||          fd|D             S )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V  	d S NrB   )rC   ids     r"   	<genexpr>z.Boxer.interpret_multi_sents.<locals>.<genexpr>   s&      )Q)QR"D.)Q)Q)Q)Q)Q)Qr$   TF)r    c                 <    g | ]}                     |d           S rI   )get)rC   rJ   drs_dicts     r"   rD   z/Boxer.interpret_multi_sents.<locals>.<listcomp>   s'    ???2R&&???r$   )lenr   operatorand_listmapstrrange_call_candc_call_boxer_parse_to_drs_dict)	r   rE   r;   r:   r    use_disc_id	candc_out	boxer_outrN   s	           @r"   r5   zBoxer.interpret_multi_sents   s     $v;;#m"4"44444(-)Q)Q=)Q)Q)QRRRRRKK S%F*<*<!=!=>>MK$$V]Hg$VV	$$Y$@@	
 **9kBB????????r$   c                    dt           j                            | j        ddg|                   ddg}|                     d                    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   0   K   | ]\  }}d | dg|z   V  dS )z<META>''NrB   )rC   r<   rJ   s      r"   rK   z$Boxer._call_candc.<locals>.<genexpr>   s6      SSuq"oooo&*SSSSSSr$   )r+   r,   r.   r/   _callsumzipr*   )r   rE   r;   r:   r    argss         r"   rV   zBoxer._call_candc   s     GLL07K2H2RSS	
 zzIISSFM8R8RSSS   O

 

 
	
r$   c                    d}	 t          j        ddd          \  }}t          j        |d          }|                    |                    d                     |r|                                 n# |r|                                 w w xY wdd	d
ddd	dg| j                 dd	dg| j                 ddddd|g}| 	                    d| j
        ||          }t          j        |           |S )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   ra   r0   remove)r   rZ   r    ffdtemp_filenamerd   stdouts           r"   rW   zBoxer._call_boxer   s    	 ( 0D! ! !B 	"c""AGGI$$W--... 			  				 fdm,fdl+
" D$/4AA
	-   s   AA2 2Bc           	      8    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   s6    Y;v.
 
 
 	
r$   c                    |rYt          d|           t          d|           t          d|           t          d|dz   d                    |          z              |2|g|z   }t          j        |t          j        t          j                  }nVd                    ||d                    |                    }t          j        |t          j        t          j        d	
          }|                                \  }}|r;t          d|j                   |rt          d|d           |rt          d|d           |j        dk    r=t          d                    |d                    |          |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: N)ry   stderrzecho "{}" | {} {}T)ry   r   shellzReturn code:zstdout:
r^   zstderr:
r   z&ERROR CALLING: {} {}
Returncode: {}
{})	printr.   
subprocessPopenPIPEformatcommunicate
returncoder6   )	r   	input_strbinaryrd   r    cmdpry   r   s	            r"   ra   zBoxer._call   s     	=*f%%%'4   (I&&&*fslSXXd^^;<<< (T/C Z_Z_UUUAA%,,YOOC JOJO4  A  	1.!,/// 1k64000 1k64000<1:AACHHTNNAL&    r$   c                    |                     d                              d          }i }d}|t          |          k     r||         }|                    d          r|                    d          }|d|         }|d         dk    r|d         dk    r
|d	d         }||d	z   |                    d
                   }	|d	z  }||         }|                    d|	 d          sJ |dd          dk    r|d d         dz   }|                    d          sJ d|             t          d|	 d          }
d	}d}t          ||
d                    D ]G\  }}|dk    r|d	z  }|dk    r1|d	z  }|dk    r&|
|z   d	z   }|||dz            dk    r|dz   }n|d	z   } nH|dk    sJ ||d                                         }|                     |||          }| j	        
                    |          ||<   |d	z  }|t          |          k     |S )Nrj   r^   r   zid(,   r`      )zsem(z').'z).zcan't parse line: z,[[]z',')rs   splitrO   
startswithindexendswith	enumeratestrip
_parse_drsr   r=   )r   r[   rY   linesrN   iline	comma_idxr9   drs_idsearch_startbrace_count	drs_startjc	drs_inputparseds                    r"   rX   zBoxer._parse_to_drs_dict"  sx     ))//55#e**nn8Du%%  W JJsOO	#AiK0?c))l2.>#.E.E#/"#5Li!mdjjoo=>QQx'7f'7'7'7888889&&9t+D}}T**GG,G,G,GGGG"#4&#4#4#455	%d<==&9:: " "DAqCxx#q(Cxx#q(&!++(4q(81(<I#I	A$=>%GG,5M		,5M	!E 2~~~~ 2.4466	L+NN)-)D)N)Nv)V)V&FAG #e**nnH r$   c                 V    t          d |g|                                       |          S rI   )BoxerOutputDrsParserparse)r   
drs_stringr9   rY   s       r"   r   zBoxer._parse_drsL  s(    #T<$8$EFFLLZXXXr$   )NFNFTF)NFF)__name__
__module____qualname____doc__r#   r   r=   r?   rF   r5   rV   rW   r)   ra   rX   r   rB   r$   r"   r   r   ;   s:         #+ + + +8G G G G        CH
 
 
 
  CH@ @ @ @8
 
 
 
6% % % %N
 
 
 
 -/ ' ' ' 'R( ( (TY Y Y Y 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!dS )"r   Nc                 Z    t          j        |            || _        d| _        dg| _        dS )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  s6    
 	4   ("&34r$   c                 .    t          j        | ||          S rI   )r   r   )r   data	signatures      r"   r   zBoxerOutputDrsParser.parse[  s    tT9555r$   c                 
    g dS )N)(r   r   r   r   :rB   r   s    r"   get_all_symbolsz$BoxerOutputDrsParser.get_all_symbols^  s    ----r$   c                 ,    |                      |          S rI   )
handle_drs)r   tokcontexts      r"   handlezBoxerOutputDrsParser.handlea  s    s###r$   c                     |S rI   rB   r   
expressionr   s      r"   attempt_adjunctsz%BoxerOutputDrsParser.attempt_adjunctsd      r$   c                 |    |                                  }|                     ||          }|t          |          |S )zS
        Parse a DRS condition

        :return: list of ``DrtExpression``
        )tokenhandle_conditionr   )r   indicesr   accums       r"   parse_conditionz$BoxerOutputDrsParser.parse_conditiong  s>     jjll%%c733=*3///r$   c                     |dk    r|                                  S |dv r$ |                     | j                  d g           S |dv r$ |                     | j                  d g           S d S )Nrl   )mergesmerge)alfa)	parse_drs_handle_binary_expression_make_merge_expression_handle_alfa)r   r   s     r"   r   zBoxerOutputDrsParser.handle_drss  s~    %<<>>###'''N411$2MNNtUWXXXH__A4$$T%@AA$KKK _r$   c                    |dk    r|                                  gS |dk    r|                     | j                  gn|dk    r|                     | j                  gn|dk    r|                                 gn|dk    r|                                 gn|dk    r|                                 gn|dk    r|                                 gn|dk    r|                                 gnq|d	k    r| 	                                nV|d
k    r| 
                                gn:|dk    r|                                 gn|dk    r|                                 gng t          fd|                     |          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   | ]\  fd D             V  dS )c                 (    g | ]} |          S rB   rB   )rC   cond
sent_indexword_indicess     r"   rD   zCBoxerOutputDrsParser.handle_condition.<locals>.<genexpr>.<listcomp>  s%    BBBDj,//BBBr$   NrB   )rC   r   r   condss    @@r"   rK   z8BoxerOutputDrsParser.handle_condition.<locals>.<genexpr>  sU        ,J CBBBBEBBB     r$   )_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_duplexrb   _sent_and_word_indices)r   r   r   r   s      @r"   r   z%BoxerOutputDrsParser.handle_condition{  s    %<<$$&&''$;;33D4LMMNEEE\\33D4MNNOEED[[__&&'EEF]]&&(()EEF]]&&(()EEG^^''))*EEE\\%%''(EEG^^&&((EEF]]&&(()EEE\\%%''(EEH__((**+EE E   040K0KG0T0T   
 
 	
r$   c                     |                      |                                 d           |                     d           }|                      |                                 d           t          |          S )Nr   r   )assertTokenr   process_next_expressionBoxerNotr   rl   s     r"   r   z BoxerOutputDrsParser._handle_not  s]    s+++**400s+++}}r$   c                 l                                                           d                                                                                                   d                                                                                                   d                                                                                                   d           t                                                                                                            d            fd}|S )Nr   r   r   c           	      8    t          j        | |          S rI   	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+++jjlls+++DJJLL!!s+++	 	 	 	 	 	 	 	 	
 r$   c                 ~                                                           d           g                                                        d                                                                  d                                d                                                                  d                                                                                                   d                                d                                                                  d            fdS )Nr   r   r   r   c           	      8    t          j        | |          S rI   BoxerWhqr9   r   r   	ans_typesd1d2refr   s     r"   <lambda>z5BoxerOutputDrsParser._handle_duplex.<locals>.<lambda>  #    z<BR1
 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                 N                                                           d                                                                                                   d                                                                                                   d                                                                                                   d                                                                                                   d            fdS )Nr   r   r   c           	      8    t          j        | |          S rI   )
BoxerNamedr9   )r   r   r   r   r  typer  s     r"   r  z4BoxerOutputDrsParser._handle_named.<locals>.<lambda>  s#    
z<4u1
 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                 h                                                           d                                                                                                   d                                                                                                   d                                                                                                   d           t                                                                                                            d            fdS )Nr   r   r   c           	      8    t          j        | |          S rI   )BoxerRelr9   )r   r   r   r   r  var1var2s     r"   r  z2BoxerOutputDrsParser._handle_rel.<locals>.<lambda>  s#    z<tS%1
 1
 r$   r	  )r   r   r  r  r   s   `@@@@r"   r   z BoxerOutputDrsParser._handle_rel  s   s+++""$$s+++""$$s+++jjlls+++DJJLL!!s+++
 
 
 
 
 
 
 
 	
r$   c                 H   |                      |                                 d           |                                 }|                      |                                 d           |                     |          }|                      |                                 d           |S )Nr   r   r   )r   r   r
  _handle_time_expression)r   arg	new_condss      r"   r   z"BoxerOutputDrsParser._handle_timex  s    s+++!!##s+++0055	s+++r$   c                 z                                                                                             d           dk    r                               }ndk    r                               }nd S                                                        d           d  fdgfd|D             z   S )Nr   datetimer   c                       fdS )Nc                     S rI   rB   )r   r   xs     r"   r  zPBoxerOutputDrsParser._handle_time_expression.<locals>.func_gen.<locals>.<lambda>  s    A r$   rB   )r*  s   `r"   func_genz>BoxerOutputDrsParser._handle_time_expression.<locals>.func_gen  s    55555r$   c           	      8    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$   c                 &    g | ]} |          S rB   rB   )rC   r   r+  s     r"   rD   z@BoxerOutputDrsParser._handle_time_expression.<locals>.<listcomp>  s!    ...XXd^^...r$   )r   r   _handle_date_handle_time)r   r#  r   r+  r   s   `` @@r"   r"  z,BoxerOutputDrsParser._handle_time_expression
  s    jjlls+++&==%%c**EEF]]%%c**EE4s+++	6 	6 	6     
 /......	/ 	/r$   c                 j   g }|                      |                                           \  \  }}|                     |                                 d           |                                 }|                     |                                 d           |                    t          | j        |||d| dd                     |                     |                                 d           |                      |                                           \  \  }}|                                 }|dk    rF|                    dd	          }|                    t          | j        |||d
| dd                     |                     |                                 d           |                      |                                           \  \  }}|                                 }|dk    r0|                    t          | j        |||d| dd                     |                     |                                 d           |                      |                                           \  \  }}|                                 }|dk    r0|                    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  s   (,(C(C""$$)
 )
%	#*l 	s+++jjlls+++!!C!! 
	
 
	
 
	
 	s+++(,(C(C""$$)
 )
%	#*l zz||6>><<S))DLL% ''' 
 
 
 	s+++(,(C(C""$$)
 )
%	#*l 

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

s+++zz||s+++
 
 
 
 
 
 
 	
r$   c                 X                                                           d                                                                                                   d                                d                                                                  d            fdS )Nr   r   r   c                 4    t          j        | |          S rI   )	BoxerPropr9   )r   r   rl   r   r  s     r"   r  z3BoxerOutputDrsParser._handle_prop.<locals>.<lambda>  s    	z<31
 1
 r$   )r   r   r
  r   )r   rl   r  s   `@@r"   r   z!BoxerOutputDrsParser._handle_prop  s    s+++&&((s+++**400s+++
 
 
 
 
 
 	
r$   c                    g }|                      |                                 d           |                     d          dk    rm|                    |                                            |                     d          dk    r|                                  |                     d          dk    m|                                  |                      |                                 d           |S )Nr   r   r   r   r   )r   r   r;  parse_index)r   r   s     r"   r:  z&BoxerOutputDrsParser._parse_index_list  s    s+++jjmms""NN4++--...zz!}}##

 jjmms"" 	

s+++r$   c                    |                      |                                 d           |                      |                                 d           t                      }|                     d          dk    r|                                 }|                    |                                            |                     d          dk    r|                                  |                     d          dk    |                                  |                      |                                 d           |                      |                                 d           g }|                     d          dk    r|                                 }|                    |                     |                     |                     d          dk    r|                                  |                     d          dk    |                                  |                      |                                 d           t          t          |          |          S )Nr   r   r   r   r   r   )
r   r   setr:  addr
  extendr   BoxerDrsrR   )r   refsr   r   s       r"   r   zBoxerOutputDrsParser.parse_drs  s    	s+++s+++uujjmms"",,..GHHT((**+++zz!}}##

	 jjmms""
 	

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

	 jjmms""
 	

s+++T

E***r$   c                 Z   |                      |                                 d           |                     d           |                      |                                 d           |                     d           |                      |                                 d           fdS )Nr   r   r   c                       | |          S rI   rB   r   r   drs1drs2make_callbacks     r"   r  z@BoxerOutputDrsParser._handle_binary_expression.<locals>.<lambda>      dD1
 1
 r$   r   r   r   )r   r]  r[  r\  s    `@@r"   r   z.BoxerOutputDrsParser._handle_binary_expression  s    s+++++D11s+++++D11s+++
 
 
 
 
 
 	
r$   c                    |                      |                                 d           |                                 }|                      |                                 d           |                     d           |                      |                                 d           |                     d           |                      |                                 d           fdS )Nr   r   r   c                       | |          S rI   rB   rZ  s     r"   r  z3BoxerOutputDrsParser._handle_alfa.<locals>.<lambda>  r^  r$   r_  )r   r]  r  r[  r\  s    ` @@r"   r   z!BoxerOutputDrsParser._handle_alfa  s    s+++zz||s+++++D11s+++++D11s+++
 
 
 
 
 
 	
r$   c                 V                                                           d                                                                                                   d                                                                                                   d            fdS )Nr   r   r   c                 4    t          j        | |          S rI   )BoxerEqr9   )r   r   r   r  r   s     r"   r  z1BoxerOutputDrsParser._handle_eq.<locals>.<lambda>  s    z<t1
 1
 r$   r  )r   r  r   s   `@@r"   r   zBoxerOutputDrsParser._handle_eq  s    s+++""$$s+++""$$s+++
 
 
 
 
 
 	
r$   c                                                                            d                                                                  d           g                      d          dk    r                                 }                                                       d           |dk    r(                                                                n|dk    r[                    d                                            }|d	k    r                    d
           n=                    |           n'                                                                                     d          dk                                                                                             d                                d                                                                  d                                                                                                   d                                d                                                                  d            fdS )Nr   r   r   r   r   desnumnumbercoucountr   r   c           	      8    t          j        | |          S rI   r  r  s     r"   r  z2BoxerOutputDrsParser._handle_whq.<locals>.<lambda>  r  r$   )r   r   r;  r   r
  )r   cattypr  r  r  r  s   `  @@@@r"   r   z BoxerOutputDrsParser._handle_whq  s/   s+++s+++	jjmms""**,,CTZZ\\3///e||  ....  ***jjll%<<$$W----$$S))))  ... jjmms"" 	

s+++))$//s+++!!##s+++))$//s+++
 
 
 
 
 
 
 
 	
r$   c                 V    t          |j        |j        z   |j        |j        z             S rI   rV  rW  r   r   r   r   r[  r\  s        r"   r   z+BoxerOutputDrsParser._make_merge_expression  s$    	DI-tzDJ/FGGGr$   c                 2    t          | j        ||||          S rI   )BoxerOrr9   rp  s        r"   r   z(BoxerOutputDrsParser._make_or_expression  s    t(*lD$OOOr$   c                 8    t          |j        |j        |          S rI   ro  rp  s        r"   r   z)BoxerOutputDrsParser._make_imp_expression  s    	4:t444r$   c                 l    |                                  }t          j        d|          s
J |            |S )Nz^[exps]\d+$)r   rematchr   vars     r"   r
  z#BoxerOutputDrsParser.parse_variable  s4    jjllx,,11c111
r$   c                 D    t          |                                           S rI   )r  r   r   s    r"   rQ  z BoxerOutputDrsParser.parse_index  s    4::<<   r$   c                     d |D             }|r.g }|D ]'fd|D             }|                     |f           (|S d |D             }d|fgS )zD
        :return: list of (sent_index, word_indices) tuples
        c                 *    h | ]}|d k    |dz  dz
  S )r     r   rB   rC   r   s     r"   	<setcomp>z>BoxerOutputDrsParser._sent_and_word_indices.<locals>.<setcomp>  s%    BBB1166TQ666r$   c                 8    g | ]}|d z  dz
  k    |d z  dz
  S r|  r   rB   )rC   r   r   s     r"   rD   z?BoxerOutputDrsParser._sent_and_word_indices.<locals>.<listcomp>  s;          '(za$hRS^7S7SQXN7S7S7Sr$   c                     g | ]
}|d z  dz
  S r  rB   r}  s     r"   rD   z?BoxerOutputDrsParser._sent_and_word_indices.<locals>.<listcomp>  s     <<<qQXN<<<r$   N)r;  )r   r   sent_indicespairsr   r   s        @r"   r   z+BoxerOutputDrsParser._sent_and_word_indices  s     CBBBB 
	*E* 9 9
       ,3      j,78888L<<G<<<L<())r$   rI   )"r   r   r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r"  r/  r0  r   r   r:  r   r   r   r   r   r   r   r   r
  rQ  r   rB   r$   r"   r   r   P  s       5 5 5 56 6 6 6. . .$ $ $  
 
 
L L L,
 ,
 ,
\    &
 
 
B
 
 

 
 
  / / /*L L L\  ,
 
 
	
 	
 	

 
 
+ + +2
 
 


 

 


 
 

 
 
>H H HP P P5 5 5  
! ! !* * * * *r$   r   c                   8    e Zd ZdZd	dZd Zd Zd Zd Zd Z	dS )
BoxerDrsParserzD
    Reparse the str form of subclasses of ``AbstractBoxerDrs``
    Nc                 <    t          j        |            || _        d S rI   )r   r#   r9   r   s     r"   r#   zBoxerDrsParser.__init__'  s!    4   (r$   c                 t    t           j        t           j        t           j        t           j        t           j        gS rI   )r   OPENCLOSECOMMAOPEN_BRACKETCLOSE_BRACKETr   s    r"   r   zBoxerDrsParser.get_all_symbols+  s'    NOO"#
 	
r$   c                     |S rI   rB   r   s      r"   r   zBoxerDrsParser.attempt_adjuncts4  r   r$   c           	         	 |dk    r|                      t          j                   | j        | j        n|                                 }|                      t          j                   |                                 }|                      t          j                   t          t          t          | 
                                                    }|                      t          j                   t          |                                           }|                      t          j                   |                                 }|                      t          j                   |                                 }|                      t          j                   t          |                                           }	|                      t          j                   t          |||||||	          S |dk    r|                      t          j                   | j        | j        n|                                 }|                      t          j                   t          |                                           }|                      t          j                   t          t          | 
                                          }|                      t          j                   t          |                                           }|                      t          j                   |                                 }|                      t          j                   |                                 }
|                      t          j                   t          |                                           }	|                      t          j                   t          ||||||
|	          S |dk    r|                      t          j                   | j        | j        n|                                 }|                      t          j                   |                                 }|                      t          j                   t          t          t          | 
                                                    }|                      t          j                   t          |                                           }|                      t          j                   t          |                                           }|                      t          j                   |                                 }|                      t          j                   t          |                                           }	|                      t          j                   t          |||||||	          S |dk    rz|                      t          j                   | j        | j        n|                                 }|                      t          j                   t          |                                           }|                      t          j                   t          t          t          | 
                                                    }|                      t          j                   t          |                                           }|                      t          j                   |                     d           }|                      t          j                   t!          |||||          S |dk    rb|                      t          j                   |                     d           }|                      t          j                   t#          |          S |dk    r|                      t          j                   |                     d           }|                      t          j                   |                     d           }|                      t          j                   t%          |j        |j        |          S |dk    rT|                      t          j                   | j        | j        n|                                 }|                      t          j                   |                                 }|                      t          j                   t          t          | 
                                          }|                      t          j                   |                     d           }|                      t          j                   |                     d           }|                      t          j                   t+          |||||          S |dk    ry|                      t          j                   | j        | j        n|                                 }|                      t          j                   |                                 }|                      t          j                   t          t          t          | 
                                                    }|                      t          j                   t          |                                           }|                      t          j                   t          |                                           }|                      t          j                   t-          |||||          S |d	k    r|                      t          j                   | j        | j        n|                                 }|                      t          j                   |                                 }|                      t          j                   t          t          | 
                                          }|                      t          j                   t          |                                           }|                      t          j                   |                                 }|                      t          j                   |                                 }
|                      t          j                   t/          ||||||
          S |d
k    r|                      t          j                   | j        | j        n|                                 }|                      t          j                   |                                 }|                      t          j                   t          t          t          | 
                                                    }|                      t          j                   | 
                                }|                      t          j                   |                     d           }|                      t          j                   t          |                                           }|                      t          j                   |                     d           }|                      t          j                   t1          |||||||          S n5# t2          $ r(}t5          | j        t9          |                    |d }~ww xY wJ t;          |                      )Nr   r   r   r   r   r   r   r   r   r   )assertNextTokenr   r  r9   r   r  nullableIntTokenrR   rS   r  handle_refsr  r  r  r  r   rO  r   rV  rW  r   rr  rd  rK  r  r6   r   _currentIndexrT   repr)r   r   r   disc_idsent_idword_idsr  r   r  r  r  r  r   r   rl   r[  r\  rx  rL  r  es                        r"   r   zBoxerDrsParser.handle7  s   c	P f}}$$Y^444)-):)FD%%DJJLL  $$Y_555//11$$Y_555C)9)9);); < <==$$Y_555tzz||,,$$Y_555zz||$$Y_555jjll$$Y_555DJJLL))$$Y_555 '8XtSRWXXX$$Y^444)-):)FD%%DJJLL  $$Y_555djjll++$$Y_555sD$4$4$6$677$$Y_555tzz||,,$$Y_555zz||$$Y_555zz||$$Y_555DJJLL))$$Y_555!Wh$e   $$Y^444)-):)FD%%DJJLL  $$Y_555//11$$Y_555C)9)9);); < <==$$Y_5554::<<(($$Y_5554::<<(($$Y_555jjll$$Y_555DJJLL))$$Y_555(D$USSS$$Y^444)-):)FD%%DJJLL  $$Y_555djjll++$$Y_555C)9)9);); < <==$$Y_555tzz||,,$$Y_55522488$$Y_555 '8XsKKK$$Y^44422488$$Y_555}}$$$Y^44433D99$$Y_55533D99$$Y_555	4:t<<<$$Y^444)-):)FD%%DJJLL  $$Y_555//11$$Y_555sD$4$4$6$677$$Y_55533D99$$Y_55533D99$$Y_555w4FFF$$Y^444)-):)FD%%DJJLL  $$Y_555//11$$Y_555C)9)9);); < <==$$Y_5554::<<(($$Y_5554::<<(($$Y_555w4FFF$$Y^444)-):)FD%%DJJLL  $$Y_555//11$$Y_555sD$4$4$6$677$$Y_555$**,,''$$Y_555

$$Y_555zz||$$Y_555 '8S%NNN$$Y^444)-):)FD%%DJJLL  $$Y_555//11$$Y_555C)9)9);); < <==$$Y_555 ,,..	$$Y_55533D99$$Y_555$**,,''$$Y_55533D99$$Y_555(ItSRVWWW% &  	P 	P 	P,T-?QHHaO	Pd3iisW   G'z+ *G'z+ G4z+ F z+ A'z+ 0B'z+ Ez+ 3E?z+ 3Fz+ Gz+ +
{5#{{c                 X    |                                  }|dk    rt          |          nd S )NNone)r   r  )r   ts     r"   r  zBoxerDrsParser.nullableIntToken  s'    JJLLfs1vvv$.r$   c                 |    	 |                                  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  sO    	T::<<* 	T 	T 	T-ag7KLLRSS	Ts    
;6;rI   )
r   r   r   r   r#   r   r   r   r  r  rB   r$   r"   r  r  "  s         ) ) ) )
 
 
  e  e  e N/ / /T T T T Tr$   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
AbstractBoxerDrsc                 N    |                                  \  }}}|||z  z
  |||z
  fS zK
        :return: (set<variables>, set<events>, set<propositions>)
        )
_variables)r   	variableseventspropositionss       r"   r  zAbstractBoxerDrs.variables  s6     +///*;*;'	6<Vl23V\F=RSSr$   c                 n    i }t          d|                                           D ]\  }}|D ]}|||<   |S )N)zr  r   )rc   r  )r   vartypesr  varsvs        r"   variable_typeszAbstractBoxerDrs.variable_types  sR    ?DNN,<,<== 	  	 GAt     r$   c                 T    t                      t                      t                      fS r  rS  r   s    r"   r  zAbstractBoxerDrs._variables  s     suucee$$r$   c                     t                      S rI   r  r   s    r"   atomszAbstractBoxerDrs.atoms      uur$   c                     | S rI   rB   r   s    r"   cleanzAbstractBoxerDrs.clean      r$   c                 V    |                     dd                               dd          S )N-r5  r`   )r<  )r   r   s     r"   _clean_namezAbstractBoxerDrs._clean_name  s&    ||C%%--c3777r$   c                     | S rI   rB   r   rv   s     r"   renumber_sentencesz#AbstractBoxerDrs.renumber_sentences  r  r$   c                 "    t          |            S rI   )hashr   s    r"   __hash__zAbstractBoxerDrs.__hash__
  s    tIr$   N)r   r   r   r  r  r  r  r  r  r  r  rB   r$   r"   r  r    s        T T T  % % %    8 8 8      r$   r  c                   N    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d	 Z
ej        ZdS )rV  Nc                 d    t                               |            || _        || _        || _        d S rI   )r  r#   rW  r   
consequent)r   rW  r   r  s       r"   r#   zBoxerDrs.__init__  s/    !!$'''	
$r$   c                 x   t                      t                      t                      f}| j        D ]?}t          ||                                          D ]\  }}|                    |           @| j        Bt          || j                                                  D ]\  }}|                    |           |S rI   )rS  r   rc   r  updater  )r   r  r   sr  s        r"   r  zBoxerDrs._variables  s    UUCEE355)	J 	 	DIt'8'899  1?&It'A'A'C'CDD  1r$   c                     t          t          j        d | j        D             t	                                }| j        ,|                    | j                                                   |S )Nc              3   >   K   | ]}|                                 V  d S rI   )r  )rC   r   s     r"   rK   z!BoxerDrs.atoms.<locals>.<genexpr>   s*      %J%Jtdjjll%J%J%J%J%J%Jr$   )r   rP   or_r   rS  r  r  r  )r   r  s     r"   r  zBoxerDrs.atoms  sW    x|%J%Jtz%J%J%JCEERR?&LL..00111r$   c                     | j         r| j                                         nd }t          | j        d | j        D             |          S )Nc                 6    g | ]}|                                 S rB   )r  rC   r   s     r"   rD   z"BoxerDrs.clean.<locals>.<listcomp>'  s     #B#B#B!AGGII#B#B#Br$   )r  r  rV  rW  r   )r   r  s     r"   r  zBoxerDrs.clean%  sF    04IT_**,,,T
	#B#Btz#B#B#BJOOOr$   c                     | j         r| j                                       nd }t          | j        fd| j        D             |          S )Nc                 :    g | ]}|                               S rB   )r  )rC   r   rv   s     r"   rD   z/BoxerDrs.renumber_sentences.<locals>.<listcomp>,  s'    DDDA,,Q//DDDr$   )r  r  rV  rW  r   )r   rv   r  s    ` r"   r  zBoxerDrs.renumber_sentences)  sW    >BoWT_77:::SW
IDDDDDDDj
 
 	
r$   c                     d                     d                    d | j        D                       d                    d | j        D                                 }| j        d| d| j         d}|S )Nzdrs([{}], [{}]), c              3       K   | ]	}d |z  V  
dS %sNrB   rC   rs     r"   rK   z$BoxerDrs.__repr__.<locals>.<genexpr>1  s&      221dQh222222r$   c              3       K   | ]	}d |z  V  
dS r  rB   r  s     r"   rK   z$BoxerDrs.__repr__.<locals>.<genexpr>2  s&      331dQh333333r$   zimp(r   )r   r.   rW  r   r  )r   r  s     r"   __repr__zBoxerDrs.__repr__/  s    $$II22	22222II33
33333
 
 ?&.q..DO...Ar$   c                 .   | j         |j         k    o| j        |j        k    out          | j                  t          |j                  k    oKt	          t
          j        d t          | j        |j                  D                       o| j        |j        k    S )Nc              3   (   K   | ]\  }}||k    V  d S rI   rB   )rC   c1c2s      r"   rK   z"BoxerDrs.__eq__.<locals>.<genexpr>>  s*      TTVRbTTTTTTr$   )		__class__rW  rO   r   r   rP   rQ   rc   r  r   others     r"   __eq__zBoxerDrs.__eq__8  s    Neo- 4	UZ'4DJ3u{#3#334 TTs4:u{7S7STTT 4 5#33	
r$   c                     | |k     S rI   rB   r  s     r"   __ne__zBoxerDrs.__ne__C      5=  r$   rI   r   r   r   r#   r  r  r  r  r  r  r  r  r  rB   r$   r"   rV  rV    s        % % % %    P P P
 
 
  	
 	
 	
! ! !  (HHHr$   rV  c                   L    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej        Zd	S )
r   c                 H    t                               |            || _        d S rI   )r  r#   rl   r   s     r"   r#   zBoxerNot.__init__J  s!    !!$'''r$   c                 4    | j                                         S rI   )rl   r  r   s    r"   r  zBoxerNot._variablesN  s    x""$$$r$   c                 4    | j                                         S rI   rl   r  r   s    r"   r  zBoxerNot.atomsQ      x~~r$   c                 N    t          | j                                                  S rI   )r   rl   r  r   s    r"   r  zBoxerNot.cleanT  s    (()))r$   c                 P    t          | j                            |                    S rI   )r   rl   r  r  s     r"   r  zBoxerNot.renumber_sentencesW  s     33A66777r$   c                     d| j         z  S )Nznot(%s)rl   r   s    r"   r  zBoxerNot.__repr__Z  s    DH%%r$   c                 B    | j         |j         k    o| j        |j        k    S rI   )r  rl   r  s     r"   r  zBoxerNot.__eq__]  s    ~0JTX5JJr$   c                     | |k     S rI   rB   r  s     r"   r  zBoxerNot.__ne__`  r  r$   Nr  rB   r$   r"   r   r   I  s          % % %     * * *8 8 8& & &K K K! ! !  (HHHr$   r   c                   :    e Zd Zd Zd Zd Zd Zej        Zd Z	dS )BoxerIndexedc                 d    t                               |            || _        || _        || _        d S rI   )r  r#   r9   r   r   )r   r9   r   r   s       r"   r#   zBoxerIndexed.__init__g  s3    !!$'''($(r$   c                     | hS rI   rB   r   s    r"   r  zBoxerIndexed.atomsm  s	    vr$   c                     | j         |j         k    oa| j        |j        k    oQ| j        |j        k    oA| j        |j        k    o1t	          t
          j        d t          | |          D                       S )Nc              3   (   K   | ]\  }}||k    V  d S rI   rB   )rC   r  os      r"   rK   z&BoxerIndexed.__eq__.<locals>.<genexpr>v  s*      &K&K$!QqAv&K&K&K&K&K&Kr$   )r  r9   r   r   r   rP   rQ   rc   r  s     r"   r  zBoxerIndexed.__eq__p  s    Neo- M!U%77M5#33M !U%77M x}&K&K#dE:J:J&K&K&KLL	
r$   c                     | |k     S rI   rB   r  s     r"   r  zBoxerIndexed.__ne__y  r  r$   c           	          d                     |                                 | j        | j        d                    d | j        D                                 }| D ]
}|d|z  z  }|dz   S )Nz{}({}, {}, [{}]r  c              3       K   | ]	}d |z  V  
dS r  rB   )rC   wis     r"   rK   z(BoxerIndexed.__repr__.<locals>.<genexpr>  s&      <<BdRi<<<<<<r$   z, %sr   )r   _predr9   r   r.   r   )r   r  r  s      r"   r  zBoxerIndexed.__repr__~  sw    $$JJLLOII<<$*;<<<<<	
 
  	 	A!OAA3wr$   N)
r   r   r   r#   r  r  r  r  r  r  rB   r$   r"   r  r  f  si        ) ) )  
 
 
! ! !  (H	 	 	 	 	r$   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	r  c                 x    t                               | |||           || _        || _        || _        || _        d S rI   )r  r#   rx  r   r  r  )r   r9   r   r   rx  r   r  r  s           r"   r#   zBoxerPred.__init__  s<    dL*lKKK	


r$   c                 H    | j         ht                      t                      fS rI   rx  rS  r   s    r"   r  zBoxerPred._variables      
CEE355))r$   c           	      h    t          | j        | j        | j        || j        | j        | j                  S rI   )r  r9   r   r   r   r  r  rw  s     r"   
change_varzBoxerPred.change_var  s7    OIHJ
 
 	
r$   c           	          t          | j        | j        | j        | j        |                     | j                  | j        | j                  S rI   )	r  r9   r   r   rx  r  r   r  r  r   s    r"   r  zBoxerPred.clean  sG    OHTY''HJ
 
 	
r$   c           	           || j                   }t          | j        || j        | j        | j        | j        | j                  S rI   )r   r  r9   r   rx  r   r  r  )r   rv   new_sent_indexs      r"   r  zBoxerPred.renumber_sentences  sH    4?++HIHJ
 
 	
r$   c                 P    t          | j        | j        | j        | j        f          S rI   )iterrx  r   r  r  r   s    r"   __iter__zBoxerPred.__iter__  s!    TXty$(DJ?@@@r$   c                     dS )Nr   rB   r   s    r"   r  zBoxerPred._pred      vr$   N
r   r   r   r#   r  r  r  r  r  r  rB   r$   r"   r  r    s          * * *	
 	
 	
	
 	
 	


 

 

A A A    r$   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	r  c                 x    t                               | |||           || _        || _        || _        || _        d S rI   )r  r#   rx  r   r  r  )r   r9   r   r   rx  r   r  r  s           r"   r#   zBoxerNamed.__init__  s<    dL*lKKK		


r$   c                 H    | j         ht                      t                      fS rI   r  r   s    r"   r  zBoxerNamed._variables  r  r$   c           	      h    t          | j        | j        | j        || j        | j        | j                  S rI   )r  r9   r   r   r   r  r  rw  s     r"   r  zBoxerNamed.change_var  s7    OIIJ
 
 	
r$   c           	          t          | j        | j        | j        | j        |                     | j                  | j        | j                  S rI   )	r  r9   r   r   rx  r  r   r  r  r   s    r"   r  zBoxerNamed.clean  sG    OHTY''IJ
 
 	
r$   c           	          t          | j         || j                  | j        | j        | j        | j        | j                  S rI   )r  r9   r   r   rx  r   r  r  r  s     r"   r  zBoxerNamed.renumber_sentences  sC    AdoHIIJ
 
 	
r$   c                 P    t          | j        | j        | j        | j        f          S rI   )r  rx  r   r  r  r   s    r"   r  zBoxerNamed.__iter__  s!    TXty$)TZ@AAAr$   c                     dS )Nr   rB   r   s    r"   r  zBoxerNamed._pred  s    wr$   Nr  rB   r$   r"   r  r    s          * * *	
 	
 	
	
 	
 	
	
 	
 	
B B B    r$   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )r  c                 x    t                               | |||           || _        || _        || _        || _        d S rI   )r  r#   r  r   r   r  )r   r9   r   r   r  r   r   r  s           r"   r#   zBoxerRel.__init__  s<    dL*lKKK		


r$   c                 T    | j         | j        ht                      t                      fS rI   r  r   rS  r   s    r"   r  zBoxerRel._variables       DI&suu55r$   c           
          t          | j        | j        | j        | j        | j        |                     | j                  | j                  S rI   )	r  r9   r   r   r  r   r  r   r  r   s    r"   r  zBoxerRel.clean  sG    OIITX&&J
 
 	
r$   c           	          t          | j         || j                  | j        | j        | j        | j        | j                  S rI   )r  r9   r   r   r  r   r   r  r  s     r"   r  zBoxerRel.renumber_sentences  sC    AdoIIHJ
 
 	
r$   c                 P    t          | j        | j        | j        | j        f          S rI   )r  r  r   r   r  r   s    r"   r  zBoxerRel.__iter__  s!    TY	48TZ@AAAr$   c                     dS )Nr   rB   r   s    r"   r  zBoxerRel._pred      ur$   N)	r   r   r   r#   r  r  r  r  r  rB   r$   r"   r  r    sq          6 6 6	
 	
 	
	
 	
 	
B B B    r$   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
rO  c                 \    t                               | |||           || _        || _        d S rI   )r  r#   rx  rl   )r   r9   r   r   rx  rl   s         r"   r#   zBoxerProp.__init__  s.    dL*lKKKr$   c                     t          t          t          j        t	                      t	                      | j        hf| j                                                            S rI   )tuplerS   rP   r  rS  rx  rl   r  r   s    r"   r  zBoxerProp._variables  sF    suuceedhZ8$(:M:M:O:OPP
 
 	
r$   c                     | j         hS rI   r  r   s    r"   referenced_labelszBoxerProp.referenced_labels$  s    zr$   c                 4    | j                                         S rI   r  r   s    r"   r  zBoxerProp.atoms'  r  r$   c                 ~    t          | j        | j        | j        | j        | j                                                  S rI   )rO  r9   r   r   rx  rl   r  r   s    r"   r  zBoxerProp.clean*  s9    OHHNN
 
 	
r$   c           	          t          | j         || j                  | j        | j        | j                            |                    S rI   )rO  r9   r   r   rx  rl   r  r  s     r"   r  zBoxerProp.renumber_sentences3  sG    AdoHH''**
 
 	
r$   c                 8    t          | j        | j        f          S rI   )r  rx  rl   r   s    r"   r  zBoxerProp.__iter__<  s    TXtx()))r$   c                     dS )Nr   rB   r   s    r"   r  zBoxerProp._pred?  r  r$   N)r   r   r   r#   r  r  r  r  r  r  r  rB   r$   r"   rO  rO    s          

 
 

       
 
 

 
 
* * *    r$   rO  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )rd  c                 \    t                               | |||           || _        || _        d S rI   )r  r#   r  r   )r   r9   r   r   r  r   s         r"   r#   zBoxerEq.__init__D  .    dL*lKKK				r$   c                 T    | j         | j        ht                      t                      fS rI   r  r   s    r"   r  zBoxerEq._variablesI  r  r$   c                     t                      S rI   r  r   s    r"   r  zBoxerEq.atomsL  r  r$   c                 l    t          | j         || j                  | j        | j        | j                  S rI   )rd  r9   r   r   r  r   r  s     r"   r  zBoxerEq.renumber_sentencesO  9    AdoII
 
 	
r$   c                 8    t          | j        | j        f          S rI   )r  r  r   r   s    r"   r  zBoxerEq.__iter__X      TY	*+++r$   c                     dS )Nr   rB   r   s    r"   r  zBoxerEq._pred[      tr$   N)	r   r   r   r#   r  r  r  r  r  rB   r$   r"   rd  rd  C  sn          
6 6 6  
 
 
, , ,    r$   rd  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )rK  c                 j    t                               | |||           || _        || _        || _        d S rI   )r  r#   rx  rL  r  )r   r9   r   r   rx  rL  r  s          r"   r#   zBoxerCard.__init__`  s5    dL*lKKK
			r$   c                 H    | j         ht                      t                      fS rI   r  r   s    r"   r  zBoxerCard._variablesf  r  r$   c                 x    t          | j         || j                  | j        | j        | j        | j                  S rI   )rK  r9   r   r   rx  rL  r  r  s     r"   r  zBoxerCard.renumber_sentencesi  s>    AdoHJI
 
 	
r$   c                 D    t          | j        | j        | j        f          S rI   )r  rx  rL  r  r   s    r"   r  zBoxerCard.__iter__s  s    TXtz495666r$   c                     dS )Nr   rB   r   s    r"   r  zBoxerCard._predv  r  r$   N)r   r   r   r#   r  r  r  r  rB   r$   r"   rK  rK  _  s_          * * *
 
 
7 7 7    r$   rK  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	rr  c                 \    t                               | |||           || _        || _        d S rI   )r  r#   r[  r\  )r   r9   r   r   r[  r\  s         r"   r#   zBoxerOr.__init__{  r'  r$   c                     t          t          t          j        | j                                        | j                                                            S rI   )r  rS   rP   r  r[  r  r\  r   s    r"   r  zBoxerOr._variables  s:    Sty';';'='=ty?S?S?U?UVVWWWr$   c                 h    | j                                         | j                                        z  S rI   r[  r  r\  r   s    r"   r  zBoxerOr.atoms  %    y  49??#4#444r$   c                     t          | j        | j        | j        | j                                        | j                                                  S rI   )rr  r9   r   r   r[  r  r\  r   s    r"   r  zBoxerOr.clean  sC    OIOOIOO
 
 	
r$   c                 l    t          | j         || j                  | j        | j        | j                  S rI   )rr  r9   r   r   r[  r\  r  s     r"   r  zBoxerOr.renumber_sentences  r+  r$   c                 8    t          | j        | j        f          S rI   )r  r[  r\  r   s    r"   r  zBoxerOr.__iter__  r-  r$   c                     dS )Nr   rB   r   s    r"   r  zBoxerOr._pred  r/  r$   N
r   r   r   r#   r  r  r  r  r  r  rB   r$   r"   rr  rr  z  s          
X X X5 5 5
 
 

 
 
, , ,    r$   rr  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	r  c                 x    t                               | |||           || _        || _        || _        || _        d S rI   )r  r#   r  r[  r  r\  )r   r9   r   r   r  r[  r  r\  s           r"   r#   zBoxerWhq.__init__  s>     	dL*lKKK"	 			r$   c           	          t          t          t          j        | j        ht                      t                      f| j                                        | j                                                            S rI   )	r  rS   rP   r  r  rS  r[  r  r\  r   s    r"   r  zBoxerWhq._variables  s^    -#%%/	$$&&	$$&&	 
 
 	
r$   c                 h    | j                                         | j                                        z  S rI   r:  r   s    r"   r  zBoxerWhq.atoms  r;  r$   c           
          t          | j        | j        | j        | j        | j                                        | j        | j                                                  S rI   )	r  r9   r   r   r  r[  r  r  r\  r   s    r"   r  zBoxerWhq.clean  sM    ONIOOMIOO
 
 	
r$   c           	          t          | j         || j                  | j        | j        | j        | j        | j                  S rI   )r  r9   r   r   r  r[  r  r\  r  s     r"   r  zBoxerWhq.renumber_sentences  sC    AdoNIMI
 
 	
r$   c                     t          dd                    | j                  z   dz   | j        | j        | j        f          S )Nr   r   r   )r  r.   r  r[  r  r\  r   s    r"   r  zBoxerWhq.__iter__  s>    388DN+++c149dmTYW
 
 	
r$   c                     dS )Nr   rB   r   s    r"   r  zBoxerWhq._pred  r  r$   Nr@  rB   r$   r"   r  r    s}          
 
 
5 5 5	
 	
 	
	
 	
 	

 
 

    r$   r  c                       e Zd Zd ZdS )PassthroughBoxerDrsInterpreterc                     |S rI   rB   )r   exs     r"   r=   z(PassthroughBoxerDrsInterpreter.interpret  s    	r$   N)r   r   r   r=   rB   r$   r"   rJ  rJ    s#            r$   rJ  c                   (    e Zd ZddZd Zd Zd ZdS )r   Fc                     || _         d S rI   )_occur_index)r   occur_indexs     r"   r#   z#NltkDrtBoxerDrsInterpreter.__init__  s    'r$   c           	      L   t          |t                    rlt          d |j        D             t	          t          | j        |j                                      }|j        |                     |j                  |_        |S t          |t                    r't          |                     |j                            S t          |t                    r@|                     |j         d|j         |          }|                     ||j                  S t          |t$                    rA|                     d|j         d|j         |          }|                     ||j                  S t          |t(                    r?|                     d|j        z  |          }|                     ||j        |j                  S t          |t0                    r:t3          t5          |j                  |                     |j                            S t          |t6                    rNt9          t;          t5          |j                            t;          t5          |j                                      S t          |t<                    rA|                     d|j         d|j         |          }|                     ||j                  S t          |t@                    r@tC          |                     |j"                  |                     |j#                            S t          |tH                    r^|                     |j"                  }|                     |j#                  }t          |j        |j        z   |j        |j        z             S J |j%        j&         d|             )	zT
        :param ex: ``AbstractBoxerDrs``
        :return: ``DrtExpression``
        c                 ,    g | ]}t          |          S rB   )r   r  s     r"   rD   z8NltkDrtBoxerDrsInterpreter.interpret.<locals>.<listcomp>  s    ...!...r$   Nr5  ne_r  card_Fz: )'
isinstancerV  r   rW  rR   rS   r=   r   r  r   r
   rl   r  _add_occur_indexingr  r   rE  rx  r  r  r  r   r  r   rO  r   r   rd  r	   r   rK  rL  rr  r   r[  r\  r  r  r   )r   rL  rl   r   r[  r\  s         r"   r=   z$NltkDrtBoxerDrsInterpreter.interpret  s)   
 b(## !	G..bg...S5R5R0S0S C }(!%!>!>JH%% 	G'rv(>(>???I&& 	G++rv,A,A,A,A2FFD??4000J'' 	G++,E"',E,EBG,E,ErJJD??4000H%% 	G++DBFOR@@D??4"':::I&& 	G!(26"2"2DNN264J4JKKKG$$ 	G(%hrw&7&788%hrw&7&788   I&& 	G++,HBG,H,Hbh,H,H"MMD??4000G$$ 	G"4>>"'#:#:DNN27<S<STTTH%% 	G>>"'**D>>"'**Dty49,dj4:.EFFF6.66"66666r$   c           	          t          t          |                    }|D ],}t          |t          t          |                              }-|S rI   )r   r   r   )r   r   rd   r   r#  s        r"   rE  z%NltkDrtBoxerDrsInterpreter._make_atom  sP    %htnn55 	 	C,,Xc]];; EE r$   c                     | j         rH|j        A|j        r|d|j        z  z  }|d|j        z  z  }|dt          |j                  d         z  z  }|S )Nz_%sz_s%sz_w%sr   )rO  r   r9   sortedr   )r   baserL  s      r"   rV  z.NltkDrtBoxerDrsInterpreter._add_occur_indexing  sc     	8!: 0//FR]**DFVBO44Q777Dr$   Nr   )r   r   r   r#   r=   rE  rV  rB   r$   r"   r   r     sV        ( ( ( ('7 '7 '7R      r$   r   c                       e Zd ZdS )UnparseableInputExceptionN)r   r   r   rB   r$   r"   r\  r\    s        Dr$   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 indexrP  r   zincorrect number of arguments)rP  z\n)r:   r    )Cr   rP   r+   ru  r   ro   	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  rV  r   r  r  r  r  rO  rd  rK  rr  r  rJ  r   r6   r\  r   opts
add_option
parse_argsoptionsrd   rO   errorrP  interpreterr?   r   r:   r    rl   r   simplifyeliminate_equalityrc  	normalizepretty_printrB   r$   r"   <module>rs     s-   *  				 				            ! ! ! ! ! ! & & & & & &
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
           RY RY RY RY RY RY RY RYjO* O* O* O* O*9 O* O* O*dDT DT DT DT DTY DT DT DTN" " " " " " " "J8) 8) 8) 8) 8) 8) 8) 8)v) ) ) ) ) ) ) ):! ! ! ! !# ! ! !H1 1 1 1 1 1 1 1h0 0 0 0 0 0 0 0f% % % % %| % % %P' ' ' ' ' ' ' 'T    l   8       6" " " " "l " " "J3 3 3 3 3| 3 3 3l       
; ; ; ; ; ; ; ;|	 	 	 	 		 	 	 	 z<566DOO#     	OOLuSX     	OO"     	OO     oo''OWd
s4yyA~~

2333,,9LMMMK
%


,
,Qew'7 -  C {dllnn//11; 	E#''))%%''((((([ r$   