o
    À¿iJÒ  ã                   @   s¶  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	„ d	ƒZG d
d„ deƒZG dd„ deƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ de!ƒZ"G dd„ de!ƒZ#G dd„ de!ƒZ$G dd„ de!ƒZ%G dd„ de!ƒZ&G d d!„ d!e!ƒZ'G d"d#„ d#e!ƒZ(G d$d%„ d%e!ƒZ)G d&d'„ d'ƒZ*G d(d)„ d)ƒZ+G d*d+„ d+e,ƒZ-e.d,krYe	d-ƒZ/e/j0d.d/d0d1d2d3d4 e/j0d5d6d7d1d2d8d4 e/j0d9d:d;d1d2d<d4 e/j0d=d>d?d1d2d@d4 e/ 1¡ \Z2Z3e4e3ƒdAkre/ 5dB¡ e+e2j6dCZ7ee7ƒj8e3d  9dD¡e2j:e2j;dEZ<e<du r?e=dƒ dS e< >¡  ?¡ Z<e2j@rSe=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                   @   s–   e Zd ZdZ					ddd„Zddd„Zdd	d
„Zddd„Z	ddd„Z	ddd„Z	ddd„Z
ddd„Zddd„Zg dfdd„Zdd„ Zd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                 C   s0   |du r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Úresolve© r   úB/home/ubuntu/.local/lib/python3.10/site-packages/nltk/sem/boxer.pyÚ__init__A   s   zBoxer.__init__c                 C   sF   |   d||¡| _tj tj | jd d… d¡¡| _|   d||¡| _d S )NÚcandcéûÿÿÿz	../modelsÚboxer)Ú_find_binaryÚ
_candc_binÚosÚpathÚnormpathÚjoinÚ_candc_models_pathÚ
_boxer_bin)r   r   r   r   r   r    r   ]   s
   ÿzBoxer.set_bin_dirc                 C   s@   |dur|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Údr   r   r    Ú	interpretd   s
   	zBoxer.interpretc                 C   s>   |dur|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``
        Nr-   r.   r/   r2   r   r   r    Úinterpret_multis   s
   	zBoxer.interpret_multic                 C   s   |   d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                 S   s   g | ]}|g‘qS r   r   )Ú.0r3   r   r   r    Ú
<listcomp>Ž   s    z)Boxer.interpret_sents.<locals>.<listcomp>)r0   )r   Úinputsr6   r5   r   r   r   r    Úinterpret_sents‚   s   ÿzBoxer.interpret_sentsc                    s”   |durt |ƒt |ƒksJ ‚ttjdd„ |D ƒƒsJ ‚d}nttttt |ƒƒƒƒ}d}| j||||d}| j	||d}|  
||¡‰ ‡ fd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                 s   s    | ]}|d uV  qd S ©Nr   ©r:   Úidr   r   r    Ú	<genexpr>ž   ó   € z.Boxer.interpret_multi_sents.<locals>.<genexpr>TF)r   c                    s   g | ]}ˆ   |d ¡‘qS r>   )Úgetr?   ©Údrs_dictr   r    r;   «   ó    z/Boxer.interpret_multi_sents.<locals>.<listcomp>)Úlenr   ÚoperatorÚand_ÚlistÚmapÚstrÚrangeÚ_call_candcÚ_call_boxerÚ_parse_to_drs_dict)r   r<   r6   r5   r   Úuse_disc_idÚ	candc_outÚ	boxer_outr   rD   r    r0   ‘   s   zBoxer.interpret_multi_sentsc              	   C   sN   dt j | jddg| ¡ddg}|  d td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                 s   s&    | ]\}}d |› dg| V  qdS )z<META>'ú'Nr   )r:   r7   r@   r   r   r    rA   ¿   s   €$ z$Boxer._call_candc.<locals>.<genexpr>)r'   r(   r*   r+   Ú_callÚsumÚzipr&   )r   r<   r6   r5   r   Úargsr   r   r    rN   ­   s    
üþÿ÷zBoxer._call_candcc                 C   sª   d}z t jdddd\}}t |d¡}| | d¡¡ W |r"| ¡  n|r*| ¡  w w dd	d
ddd	dg| j dd	dg| j ddddd|g}|  	d| j
||¡}t |¡ |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   rW   r,   Úremove)r   rR   r   ÚfÚfdÚtemp_filenamerZ   Ústdoutr   r   r    rO   È   s>   
ÿ€ÿ
ÿñ
zBoxer._call_boxerc                 C   s   t ||dgd||d g|d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   r   r   r    r%   ï   s   
úzBoxer._find_binaryc           	      C   s   |rt d|ƒ t d|ƒ t d|ƒ t d|d d |¡ ƒ |du r7|g| }tj|tjtjd}| ¡ \}}n|g| }tj|tjtjtjd}|j| d	¡d
\}}|rkt d|jƒ |rct d|dƒ |rkt 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)rn   Ústderr)Ústdinrn   rv   r_   )r3   zReturn code:zstdout:
rU   zstderr:
r   z&ERROR CALLING: {} {}
Returncode: {}
{})
Úprintr*   Ú
subprocessÚPopenÚPIPEÚcommunicateÚencodeÚ
returncoder1   Úformat)	r   Ú	input_strÚbinaryrZ   r   ÚcmdÚprn   rv   r   r   r    rW   ù   s<   	




ü
ÿÿzBoxer._callc                 C   sÆ  |  d¡ d¡}i }d}|t|ƒk rá|| }| d¡r×| d¡}|d|… }|d dkr8|d dkr8|d	d… }||d	 | d
¡… }	|d	7 }|| }| d|	› d¡sVJ ‚|dd … dkrf|d d… d }| d¡srJ d|› ƒ‚td|	› dƒ}
d	}d}t||
d … ƒD ]3\}}|dkr’|d	7 }|dkr¹|d	8 }|dkr¹|
| d	 }|||d … dkr³|d }n|d	 } nq†|dksÀJ ‚||d…  ¡ }|  |||¡}| j	 
|¡||< |d	7 }|t|ƒk s|S )Nr_   rU   r   zid(ú,é   rV   éÿÿÿÿé   ú)zsem(éüÿÿÿz').'z).zcan't parse line: z,[ú[ú]z','éþÿÿÿ)rh   ÚsplitrG   Ú
startswithÚindexÚendswithÚ	enumerateÚstripÚ
_parse_drsr   r8   )r   rS   rQ   ÚlinesrE   ÚiÚlineÚ	comma_idxr4   Údrs_idÚsearch_startÚbrace_countÚ	drs_startÚjÚcÚ	drs_inputÚparsedr   r   r    rP   &  sN   


€Ý$zBoxer._parse_to_drs_dictc                 C   s   t d |g| ƒ |¡S r>   )ÚBoxerOutputDrsParserÚparse)r   Ú
drs_stringr4   rQ   r   r   r    r“   P  ó   zBoxer._parse_drs)NFNFT©F)NFF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r   r8   r9   r=   r0   rN   rO   r%   rW   rP   r“   r   r   r   r    r   ;   s*    
ú



ÿ
ÿ


'
-*r   c                   @   s  e Zd Zd@dd„Zd@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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d(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!dS )Ar    Nc                 C   s"   t  | ¡ || _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)rV   rV   ú\F)r   r!   r4   Úsentence_id_offsetÚquote_chars©r   r4   r   r   r    r!   U  s   
zBoxerOutputDrsParser.__init__c                 C   s   t  | ||¡S r>   )r   r¡   )r   ÚdataÚ	signaturer   r   r    r¡   _  ó   zBoxerOutputDrsParser.parsec                 C   s   g d¢S )N)ú(rˆ   r„   rŠ   r‹   ú:r   ©r   r   r   r    Úget_all_symbolsb  ó   z$BoxerOutputDrsParser.get_all_symbolsc                 C   s
   |   |¡S r>   )Ú
handle_drs)r   ÚtokÚcontextr   r   r    Úhandlee  ó   
zBoxerOutputDrsParser.handlec                 C   ó   |S r>   r   ©r   Ú
expressionr·   r   r   r    Úattempt_adjunctsh  ó   z%BoxerOutputDrsParser.attempt_adjunctsc                 C   s(   |   ¡ }|  ||¡}|du rt|ƒ‚|S )zS
        Parse a DRS condition

        :return: list of ``DrtExpression``
        N)ÚtokenÚhandle_conditionr   )r   Úindicesr¶   Úaccumr   r   r    Úparse_conditionk  s
   z$BoxerOutputDrsParser.parse_conditionc                 C   sH   |dkr|   ¡ S |dv r|  | j¡d g ƒS |dv r"|  | j¡d g ƒS d S )Nra   )ÚmergeÚsmerge)Úalfa)Ú	parse_drsÚ_handle_binary_expressionÚ_make_merge_expressionÚ_handle_alfa)r   r¶   r   r   r    rµ   w  s   ÿzBoxerOutputDrsParser.handle_drsc                    s  |dkr	|   ¡ gS |dkr|  | j¡g‰ ng|dkr!|  | j¡g‰ n[|dkr+|  ¡ g‰ nQ|dkr5|  ¡ g‰ nG|dkr?|  ¡ g‰ n=|dkrI|  ¡ g‰ n3|dkrS|  ¡ g‰ n)|d	kr\|  	¡ ‰ n |d
krf|  
¡ g‰ n|dkrp|  ¡ g‰ n|dkrz|  ¡ g‰ ng ‰ t‡ fd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   s(    | ]\‰ ‰‡ ‡fd d„ˆD ƒV  qdS )c                    s   g | ]}|ˆ ˆƒ‘qS r   r   ©r:   Úcond©Ú
sent_indexÚword_indicesr   r    r;   §  ó    zCBoxerOutputDrsParser.handle_condition.<locals>.<genexpr>.<listcomp>Nr   )r:   ©ÚcondsrÙ   r    rA   ¦  s
   € ÿ
ÿz8BoxerOutputDrsParser.handle_condition.<locals>.<genexpr>)Ú_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_duplexrX   Ú_sent_and_word_indices)r   r¶   rÁ   r   rÝ   r    rÀ     s>   


þûz%BoxerOutputDrsParser.handle_conditionc                 C   s2   |   |  ¡ d¡ |  d ¡}|   |  ¡ d¡ t|ƒS )Nr°   rˆ   )ÚassertTokenr¿   Úprocess_next_expressionÚBoxerNot©r   ra   r   r   r    rß   ­  s   
z BoxerOutputDrsParser._handle_notc                    sŒ   ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ˆ ¡ ‰ ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ tˆ ¡ ƒ‰ˆ  ˆ ¡ d¡ ‡ ‡‡‡‡fdd„}|S )Nr°   r„   rˆ   c                    s   t ˆj| |ˆˆ ˆˆƒS r>   ©Ú	BoxerPredr4   rÙ   ©rt   Úposr   ÚsenseÚvariabler   r    Ú_handle_pred_f¿  s   ÿz9BoxerOutputDrsParser._handle_pred.<locals>._handle_pred_f©rì   r¿   Úparse_variableÚint)r   rö   r   rò   r    rä   ³  s   z!BoxerOutputDrsParser._handle_predc                    s”   ˆ  ˆ ¡ d¡ g ‰ ˆ  ˆ ¡ d¡ ˆ  ˆ ¡ d¡ ˆ d ¡‰ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ˆ d ¡‰ˆ  ˆ ¡ d¡ ‡ ‡‡‡‡fdd„S )Nr°   rÕ   r„   rˆ   c                    ó   t ˆj| |ˆ ˆˆˆƒS r>   ©ÚBoxerWhqr4   rÙ   ©Ú	ans_typesÚd1Úd2Úrefr   r   r    Ú<lambda>ã  ó    ÿz5BoxerOutputDrsParser._handle_duplex.<locals>.<lambda>)rì   r¿   rí   rø   r²   r   rý   r    rê   Æ  s   

z#BoxerOutputDrsParser._handle_duplexc                    s„   ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ˆ ¡ ‰ ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ‡ ‡‡‡‡fdd„S )Nr°   r„   rˆ   c                    s   t ˆj| |ˆˆ ˆˆƒS r>   )Ú
BoxerNamedr4   rÙ   ©rt   r   rô   Útyperõ   r   r    r  ò  r  z4BoxerOutputDrsParser._handle_named.<locals>.<lambda>©rì   r¿   rø   r²   r   r  r    rå   ç  s   z"BoxerOutputDrsParser._handle_namedc                    sˆ   ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ˆ ¡ ‰ ˆ  ˆ ¡ d¡ tˆ ¡ ƒ‰ˆ  ˆ ¡ d¡ ‡ ‡‡‡‡fdd„S )Nr°   r„   rˆ   c                    s   t ˆj| |ˆˆˆ ˆƒS r>   )ÚBoxerRelr4   rÙ   ©rÒ   r   rô   Úvar1Úvar2r   r    r    r  z2BoxerOutputDrsParser._handle_rel.<locals>.<lambda>r÷   r²   r   r	  r    ræ   ö  s   z BoxerOutputDrsParser._handle_relc                 C   sF   |   |  ¡ d¡ |  ¡ }|   |  ¡ d¡ |  |¡}|   |  ¡ d¡ |S )Nr°   r„   rˆ   )rì   r¿   rø   Ú_handle_time_expression)r   ÚargÚ	new_condsr   r   r    rç     s   
z"BoxerOutputDrsParser._handle_timexc                    s€   ˆ  ¡ ‰ˆ ˆ  ¡ d¡ ˆdkrˆ ˆ ¡}nˆdkr ˆ ˆ ¡}nd S ˆ ˆ  ¡ d¡ dd„ ‰‡ ‡‡fdd„g‡fd	d
„|D ƒ S )Nr°   ÚdateÚtimerˆ   c                    s   ‡ fdd„S )Nc                    s   ˆ S r>   r   rÙ   ©Úxr   r    r    s    zPBoxerOutputDrsParser._handle_time_expression.<locals>.func_gen.<locals>.<lambda>r   r  r   r  r    Úfunc_gen  ó   z>BoxerOutputDrsParser._handle_time_expression.<locals>.func_genc                    s   t ˆj| |ˆ ˆddƒS )NÚnr   rð   rÙ   )r  r   r¶   r   r    r    r  z>BoxerOutputDrsParser._handle_time_expression.<locals>.<lambda>c                    s   g | ]}ˆ |ƒ‘qS r   r   r×   )r  r   r    r;   !  ó    z@BoxerOutputDrsParser._handle_time_expression.<locals>.<listcomp>)r¿   rì   Ú_handle_dateÚ_handle_time)r   r  rÞ   r   )r  r  r   r¶   r    r    s   ÿüz,BoxerOutputDrsParser._handle_time_expressionc           	   
   C   st  g }|   |  ¡ ¡\\}}|  |  ¡ d¡ |  ¡ }|  |  ¡ d¡ | t| j|||d|› ddƒ¡ |  |  ¡ d¡ |   |  ¡ ¡\\}}|  ¡ }|dkrb| dd	¡}| t| j|||d
|› ddƒ¡ |  |  ¡ d¡ |   |  ¡ ¡\\}}|  ¡ }|dkr| t| j|||d|› ddƒ¡ |  |  ¡ d¡ |   |  ¡ ¡\\}}|  ¡ }|dkr¸| 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ñ   r4   Úreplace)	r   r  rÞ   rÚ   rÛ   ÚpolÚyearÚmonthÚdayr   r   r    r  #  sŽ   
ÿùÿ
ÿùÿ
ÿùÿ
ÿùÿz!BoxerOutputDrsParser._handle_datec                 C   s¬   g }|   ¡  |  ¡ }|dkr| |  d||¡¡ |  |  ¡ d¡ |   ¡  |  ¡ }|dkr6| |  d||¡¡ |  |  ¡ d¡ |   ¡  |  ¡ }|dkrT| |  d||¡¡ |S )Nr  Úr_hour_2r„   Úr_min_2Úr_sec_2)r!  r¿   r"  Ú
_make_atomrì   )r   r  rÞ   ÚhourÚminÚsecr   r   r    r  q  s    z!BoxerOutputDrsParser._handle_timec                    sj   ˆ   ˆ  ¡ d¡ ˆ  ¡ ‰ˆ   ˆ  ¡ d¡ ˆ  ¡ ‰ˆ   ˆ  ¡ d¡ ˆ  ¡ ‰ˆ   ˆ  ¡ d¡ ‡ ‡‡‡fdd„S )Nr°   r„   rˆ   c                    s   t ˆ j| |ˆˆˆƒS r>   )Ú	BoxerCardr4   rÙ   ©r   r  Úvaluerõ   r   r    r    s    ÿz3BoxerOutputDrsParser._handle_card.<locals>.<lambda>r  r²   r   r0  r    rè   ‡  s   z!BoxerOutputDrsParser._handle_cardc                    sR   ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ˆ d ¡‰ ˆ  ˆ ¡ d¡ ‡ ‡‡fdd„S )Nr°   r„   rˆ   c                    s   t ˆj| |ˆˆ ƒS r>   )Ú	BoxerPropr4   rÙ   ©ra   r   rõ   r   r    r  ›  ó    ÿz3BoxerOutputDrsParser._handle_prop.<locals>.<lambda>)rì   r¿   rø   rí   r²   r   r3  r    rã   ”  s   
z!BoxerOutputDrsParser._handle_propc                 C   sp   g }|   |  ¡ d¡ |  d¡dkr*| |  ¡ ¡ |  d¡dkr#|  ¡  |  d¡dks|  ¡  |   |  ¡ d¡ |S )NrŠ   r   r‹   r„   r±   )rì   r¿   r"  Úparse_index)r   rÁ   r   r   r    r!  Ÿ  s   ýz&BoxerOutputDrsParser._parse_index_listc                 C   s
  |   |  ¡ d¡ |   |  ¡ d¡ tƒ }|  d¡dkr7|  ¡ }| |  ¡ ¡ |  d¡dkr0|  ¡  |  d¡dks|  ¡  |   |  ¡ d¡ |   |  ¡ d¡ g }|  d¡dkrr|  ¡ }| |  |¡¡ |  d¡dkrk|  ¡  |  d¡dksT|  ¡  |   |  ¡ d¡ tt	|ƒ|ƒS )Nr°   rŠ   r   r‹   r„   rˆ   )
rì   r¿   Úsetr!  Úaddrø   ÚextendrÃ   ÚBoxerDrsrJ   )r   ÚrefsrÁ   rÞ   r   r   r    rÇ   «  s,   üüzBoxerOutputDrsParser.parse_drsc                    sT   |   |  ¡ d¡ |  d ¡‰ |   |  ¡ d¡ |  d ¡‰|   |  ¡ d¡ ‡ ‡‡fdd„S )Nr°   r„   rˆ   c                    ó   ˆ| |ˆ ˆƒS r>   r   rÙ   ©Údrs1Údrs2Úmake_callbackr   r    r  Ê  ó    ÿz@BoxerOutputDrsParser._handle_binary_expression.<locals>.<lambda>©rì   r¿   rí   )r   r?  r   r<  r    rÈ   Ä  s   

z.BoxerOutputDrsParser._handle_binary_expressionc                    sl   |   |  ¡ d¡ |  ¡ }|   |  ¡ d¡ |  d ¡‰ |   |  ¡ d¡ |  d ¡‰|   |  ¡ d¡ ‡ ‡‡fdd„S )Nr°   r„   rˆ   c                    r;  r>   r   rÙ   r<  r   r    r  Ö  r@  z3BoxerOutputDrsParser._handle_alfa.<locals>.<lambda>rA  )r   r?  r  r   r<  r    rÊ   Î  s   

z!BoxerOutputDrsParser._handle_alfac                    sP   ˆ   ˆ  ¡ d¡ ˆ  ¡ ‰ˆ   ˆ  ¡ d¡ ˆ  ¡ ‰ˆ   ˆ  ¡ d¡ ‡ ‡‡fdd„S )Nr°   r„   rˆ   c                    s   t ˆ j| |ˆˆƒS r>   )ÚBoxerEqr4   rÙ   ©r   r
  r  r   r    r  à  r4  z1BoxerOutputDrsParser._handle_eq.<locals>.<lambda>r  r²   r   rC  r    râ   Ú  s   zBoxerOutputDrsParser._handle_eqc                    s0  ˆ  ˆ ¡ d¡ ˆ  ˆ ¡ d¡ g ‰ ˆ d¡dkr\ˆ ¡ }ˆ  ˆ ¡ d¡ |dkr1ˆ  ˆ ¡ ¡ n$|dkrNˆ  d¡ ˆ ¡ }|d	krHˆ  d
¡ nˆ  |¡ nˆ  ˆ ¡ ¡ ˆ d¡dksˆ ¡  ˆ  ˆ ¡ d¡ ˆ d ¡‰ˆ  ˆ ¡ d¡ ˆ ¡ ‰ˆ  ˆ ¡ d¡ ˆ d ¡‰ˆ  ˆ ¡ d¡ ‡ ‡‡‡‡fdd„S )Nr°   rŠ   r   r‹   r±   ÚdesÚnumÚnumberÚcouÚcountr„   rˆ   c                    rú   r>   rû   rÙ   rý   r   r    r  ÿ  r  z2BoxerOutputDrsParser._handle_whq.<locals>.<lambda>)rì   r¿   r"  rí   rø   )r   ÚcatÚtypr   rý   r    ré   ä  s2   
ó

z BoxerOutputDrsParser._handle_whqc                 C   s   t |j|j |j|j ƒS r>   ©r9  r:  rÞ   ©r   rÚ   rÛ   r=  r>  r   r   r    rÉ     s   z+BoxerOutputDrsParser._make_merge_expressionc                 C   s   t | j||||ƒS r>   )ÚBoxerOrr4   rL  r   r   r    rà     ó   z(BoxerOutputDrsParser._make_or_expressionc                 C   s   t |j|j|ƒS r>   rK  rL  r   r   r    rá   	  ó   z)BoxerOutputDrsParser._make_imp_expressionc                 C   s    |   ¡ }t d|¡sJ |ƒ‚|S )Nz^[exps]\d+$)r¿   ÚreÚmatch©r   Úvarr   r   r    rø     s   z#BoxerOutputDrsParser.parse_variablec                 C   s   t |  ¡ ƒS r>   )rù   r¿   r²   r   r   r    r5    r  z BoxerOutputDrsParser.parse_indexc                    s\   dd„ |D ƒ}|r"g }|D ]‰ ‡ fdd„|D ƒ}|  ˆ |f¡ q|S dd„ |D ƒ}d|fgS )zD
        :return: list of (sent_index, word_indices) tuples
        c                 S   s    h | ]}|d kr|d d ’qS )r   éè  r‡   r   ©r:   r•   r   r   r    Ú	<setcomp>  s     z>BoxerOutputDrsParser._sent_and_word_indices.<locals>.<setcomp>c                    s(   g | ]}ˆ |d  d kr|d  d ‘qS ©rT  r‡   r   rU  ©rÚ   r   r    r;     s    "z?BoxerOutputDrsParser._sent_and_word_indices.<locals>.<listcomp>c                 S   s   g | ]}|d  d ‘qS rW  r   rU  r   r   r    r;   "  rF   N)r"  )r   rÁ   Úsent_indicesÚpairsrÛ   r   rX  r    rë     s   
ÿ
z+BoxerOutputDrsParser._sent_and_word_indicesr>   )"r¥   r¦   r§   r!   r¡   r³   r¸   r½   rÃ   rµ   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    T  s@    


.!	N

r    c                   @   sB   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚBoxerDrsParserzD
    Reparse the str form of subclasses of ``AbstractBoxerDrs``
    Nc                 C   ó   t  | ¡ || _d S r>   )r   r!   r4   r¬   r   r   r    r!   +  ó   

zBoxerDrsParser.__init__c                 C   s   t jt jt jt jt jgS r>   )r   ÚOPENÚCLOSEÚCOMMAÚOPEN_BRACKETÚCLOSE_BRACKETr²   r   r   r    r³   /  s   ûzBoxerDrsParser.get_all_symbolsc                 C   rº   r>   r   r»   r   r   r    r½   8  r¾   zBoxerDrsParser.attempt_adjunctsc              
   C   sü  z`|dkrn|   tj¡ | jd ur| jn|  ¡ }|   tj¡ |  ¡ }|   tj¡ ttt	|  
¡ ƒƒ}|   tj¡ t	|  ¡ ƒ}|   tj¡ |  ¡ }|   tj¡ |  ¡ }|   tj¡ t	|  ¡ ƒ}	|   tj¡ t|||||||	ƒW S |dkrÚ|   tj¡ | jd ur€| jn|  ¡ }|   tj¡ t	|  ¡ ƒ}|   tj¡ tt	|  
¡ ƒ}|   tj¡ t	|  ¡ ƒ}|   tj¡ |  ¡ }|   tj¡ |  ¡ }
|   tj¡ t	|  ¡ ƒ}	|   tj¡ t||||||
|	ƒW S |dkrI|   tj¡ | jd urí| jn|  ¡ }|   tj¡ |  ¡ }|   tj¡ ttt	|  
¡ ƒƒ}|   tj¡ t	|  ¡ ƒ}|   tj¡ t	|  ¡ ƒ}|   tj¡ |  ¡ }|   tj¡ t	|  ¡ ƒ}	|   tj¡ t|||||||	ƒW S |dkr¢|   tj¡ | jd ur]| jn|  ¡ }|   tj¡ t	|  ¡ ƒ}|   tj¡ ttt	|  
¡ ƒƒ}|   tj¡ t	|  ¡ ƒ}|   tj¡ |  d ¡}|   tj¡ t|||||ƒW S |dkr½|   tj¡ |  d ¡}|   tj¡ t|ƒW S |dkrç|   tj¡ |  d ¡}|   tj¡ |  d ¡}|   tj¡ t|j|j|ƒW S |dkr;|   tj¡ | jd urû| jn|  ¡ }|   tj¡ |  ¡ }|   tj¡ tt	|  
¡ ƒ}|   tj¡ |  d ¡}|   tj¡ |  d ¡}|   tj¡ t|||||ƒW S |dkr“|   tj¡ | jd urO| jn|  ¡ }|   tj¡ |  ¡ }|   tj¡ ttt	|  
¡ ƒƒ}|   tj¡ t	|  ¡ ƒ}|   tj¡ t	|  ¡ ƒ}|   tj¡ t|||||ƒW S |d	krò|   tj¡ | jd ur§| jn|  ¡ }|   tj¡ |  ¡ }|   tj¡ tt	|  
¡ ƒ}|   tj¡ t	|  ¡ ƒ}|   tj¡ |  ¡ }|   tj¡ |  ¡ }
|   tj¡ t||||||
ƒW S |d
kr`|   tj¡ | jd ur| jn|  ¡ }|   tj¡ |  ¡ }|   tj¡ ttt	|  
¡ ƒƒ}|   tj¡ |  
¡ }|   tj¡ |  d ¡}|   tj¡ t	|  ¡ ƒ}|   tj¡ |  d ¡}|   tj¡ t|||||||ƒW S W n tyw } z	t| jt|ƒƒ|‚d }~ww J t|ƒƒ‚)NrÐ   rÑ   rÒ   rÏ   rË   rÍ   rÌ   rÎ   rÔ   rÕ   )ÚassertNextTokenr   r^  r4   r¿   r`  ÚnullableIntTokenrJ   rK   rù   Úhandle_refsr_  rñ   r  r  rí   r2  rî   r9  r:  rÞ   rM  rB  r/  rü   r1   r   Ú_currentIndexrL   Úrepr)r   r¶   r·   Údisc_idÚsent_idÚword_idsrõ   rt   ró   rô   r  r
  r  rÒ   ra   r=  r>  rS  r1  rþ   Úer   r   r    r¸   ;  s.  
ÿÿÿ
ÿ
ÿ







ÿ


ÿ
ÿ
ÿ

î€ÿzBoxerDrsParser.handlec                 C   s   |   ¡ }|dkrt|ƒS d S )NÚNone)r¿   rù   )r   Útr   r   r    rd  â  s   zBoxerDrsParser.nullableIntTokenc              
   C   s2   z|   ¡ W S  ty } zt|jdƒ|‚d }~ww )NzVariable expected.)r¿   r   r   )r   Údescriptionrk  r   r   r    Úget_next_token_variableæ  s   
€ÿz&BoxerDrsParser.get_next_token_variabler>   )
r¥   r¦   r§   r¨   r!   r³   r½   r¸   rd  ro  r   r   r   r    r[  &  s    
	 (r[  c                   @   óL   e 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S )ÚAbstractBoxerDrsc                 C   s$   |   ¡ \}}}|||B  ||| fS ©zK
        :return: (set<variables>, set<events>, set<propositions>)
        )Ú
_variables)r   Ú	variablesÚeventsÚpropositionsr   r   r    rt  î  s   zAbstractBoxerDrs.variablesc                 C   s2   i }t d|  ¡ ƒD ]\}}|D ]}|||< qq	|S )N)Úzrk  rƒ   )rY   rt  )r   Úvartypesrm  ÚvarsÚvr   r   r    Úvariable_typesõ  s   
ÿzAbstractBoxerDrs.variable_typesc                 C   s   t ƒ t ƒ t ƒ fS rr  ©r6  r²   r   r   r    rs  ü  s   zAbstractBoxerDrs._variablesc                 C   ó   t ƒ S r>   r|  r²   r   r   r    Úatoms  ó   zAbstractBoxerDrs.atomsc                 C   ó   | S r>   r   r²   r   r   r    Úclean  r¾   zAbstractBoxerDrs.cleanc                 C   s   |  dd¡  dd¡S )Nú-r  rV   )r#  )r   rt   r   r   r    Ú_clean_name  ó   zAbstractBoxerDrs._clean_namec                 C   r€  r>   r   ©r   rk   r   r   r    Úrenumber_sentences  r¾   z#AbstractBoxerDrs.renumber_sentencesc                 C   s
   t | › ƒS r>   )Úhashr²   r   r   r    Ú__hash__  r¹   zAbstractBoxerDrs.__hash__N)r¥   r¦   r§   rt  r{  rs  r~  r  rƒ  r†  rˆ  r   r   r   r    rq  í  s    rq  c                   @   sT   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
ejZdS )r9  Nc                 C   ó    t  | ¡ || _|| _|| _d S r>   )rq  r!   r:  rÞ   Ú
consequent)r   r:  rÞ   rŠ  r   r   r    r!     ó   

zBoxerDrs.__init__c                 C   sp   t ƒ t ƒ t ƒ f}| jD ]}t|| ¡ ƒD ]	\}}| |¡ qq| jd ur6t|| j ¡ ƒD ]	\}}| |¡ q,|S r>   )r6  rÞ   rY   rs  ÚupdaterŠ  )r   rt  rØ   Úsrz  r   r   r    rs    s   
ÿ
zBoxerDrs._variablesc                 C   s:   t tjdd„ | jD ƒtƒ ƒ}| jd ur| | j ¡ ¡ |S )Nc                 s   s    | ]}|  ¡ V  qd S r>   )r~  r×   r   r   r    rA   $  rB   z!BoxerDrs.atoms.<locals>.<genexpr>)r   rH   Úor_rÞ   r6  rŠ  rŒ  r~  )r   r~  r   r   r    r~  #  s   
zBoxerDrs.atomsc                 C   s.   | j r| j  ¡ nd }t| jdd„ | jD ƒ|ƒS )Nc                 S   s   g | ]}|  ¡ ‘qS r   )r  ©r:   r   r   r   r    r;   +  r  z"BoxerDrs.clean.<locals>.<listcomp>)rŠ  r  r9  r:  rÞ   )r   rŠ  r   r   r    r  )  s   zBoxerDrs.cleanc                    s4   | j r	| j  ˆ ¡nd }t| j‡ fdd„| jD ƒ|ƒS )Nc                    s   g | ]}|  ˆ ¡‘qS r   )r†  r  ©rk   r   r    r;   0  rÜ   z/BoxerDrs.renumber_sentences.<locals>.<listcomp>)rŠ  r†  r9  r:  rÞ   )r   rk   rŠ  r   r  r    r†  -  s   ÿzBoxerDrs.renumber_sentencesc                 C   sR   d  d dd„ | jD ƒ¡d dd„ | jD ƒ¡¡}| jd ur'd|› d| j› d}|S )Nzdrs([{}], [{}])ú, c                 s   ó    | ]}d | V  qdS ©ú%sNr   ©r:   Úrr   r   r    rA   5  rB   z$BoxerDrs.__repr__.<locals>.<genexpr>c                 s   r’  r“  r   r  r   r   r    rA   6  rB   zimp(rˆ   )r   r*   r:  rÞ   rŠ  )r   r  r   r   r    Ú__repr__3  s   þ
zBoxerDrs.__repr__c                 C   sX   | j |j ko+| j|jko+t| jƒt|jƒko+ttjdd„ t| j|jƒD ƒƒo+| j|jkS )Nc                 s   ó    | ]	\}}||kV  qd S r>   r   )r:   Úc1Úc2r   r   r    rA   B  ó   € z"BoxerDrs.__eq__.<locals>.<genexpr>)	Ú	__class__r:  rG   rÞ   r   rH   rI   rY   rŠ  ©r   Úotherr   r   r    Ú__eq__<  s   
ÿþÿý
ùzBoxerDrs.__eq__c                 C   ó
   | |k S r>   r   r  r   r   r    Ú__ne__G  r¹   zBoxerDrs.__ne__r>   ©r¥   r¦   r§   r!   rs  r~  r  r†  r—  rŸ  r¡  rq  rˆ  r   r   r   r    r9    s    

	
r9  c                   @   sR   e 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
ejZdS )rî   c                 C   r\  r>   )rq  r!   ra   rï   r   r   r    r!   N  r]  zBoxerNot.__init__c                 C   ó
   | j  ¡ S r>   )ra   rs  r²   r   r   r    rs  R  r¹   zBoxerNot._variablesc                 C   r£  r>   ©ra   r~  r²   r   r   r    r~  U  r¹   zBoxerNot.atomsc                 C   s   t | j ¡ ƒS r>   )rî   ra   r  r²   r   r   r    r  X  r¯   zBoxerNot.cleanc                 C   s   t | j |¡ƒS r>   )rî   ra   r†  r…  r   r   r    r†  [  rO  zBoxerNot.renumber_sentencesc                 C   s
   d| j  S )Nznot(%s)©ra   r²   r   r   r    r—  ^  r¹   zBoxerNot.__repr__c                 C   s   | j |j ko| j|jkS r>   )rœ  ra   r  r   r   r    rŸ  a  ó   zBoxerNot.__eq__c                 C   r   r>   r   r  r   r   r    r¡  d  r¹   zBoxerNot.__ne__Nr¢  r   r   r   r    rî   M  s    
rî   c                   @   s:   e Zd Zdd„ Zdd„ Zdd„ Zdd„ ZejZd	d
„ Z	dS )ÚBoxerIndexedc                 C   r‰  r>   )rq  r!   r4   rÚ   rÛ   )r   r4   rÚ   rÛ   r   r   r    r!   k  r‹  zBoxerIndexed.__init__c                 C   s   | hS r>   r   r²   r   r   r    r~  q  r  zBoxerIndexed.atomsc                 C   sL   | j |j ko%| j|jko%| j|jko%| j|jko%ttjdd„ t| |ƒD ƒƒS )Nc                 s   r˜  r>   r   )r:   r  Úor   r   r    rA   z  r›  z&BoxerIndexed.__eq__.<locals>.<genexpr>)rœ  r4   rÚ   rÛ   r   rH   rI   rY   r  r   r   r    rŸ  t  s   
ÿ
þ
ýûzBoxerIndexed.__eq__c                 C   r   r>   r   r  r   r   r    r¡  }  r¹   zBoxerIndexed.__ne__c              	   C   sH   d  |  ¡ | j| jd dd„ | jD ƒ¡¡}| D ]}|d| 7 }q|d S )Nz{}({}, {}, [{}]r‘  c                 s   r’  r“  r   )r:   Úwir   r   r    rA   ‡  rB   z(BoxerIndexed.__repr__.<locals>.<genexpr>z, %srˆ   )r   Ú_predr4   rÚ   r*   rÛ   )r   r  rz  r   r   r    r—  ‚  s   üzBoxerIndexed.__repr__N)
r¥   r¦   r§   r!   r~  rŸ  r¡  rq  rˆ  r—  r   r   r   r    r§  j  s    	r§  c                   @   óD   e 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S )rñ   c                 C   ó,   t  | |||¡ || _|| _|| _|| _d S r>   )r§  r!   rS  rt   ró   rô   )r   r4   rÚ   rÛ   rS  rt   ró   rô   r   r   r    r!     ó
   
zBoxerPred.__init__c                 C   ó   | j htƒ tƒ fS r>   ©rS  r6  r²   r   r   r    rs  –  rN  zBoxerPred._variablesc                 C   ó    t | j| j| j|| j| j| jƒS r>   )rñ   r4   rÚ   rÛ   rt   ró   rô   rR  r   r   r    Ú
change_var™  ó   ùzBoxerPred.change_varc                 C   ó(   t | j| j| j| j|  | j¡| j| jƒS r>   )	rñ   r4   rÚ   rÛ   rS  rƒ  rt   ró   rô   r²   r   r   r    r  ¤  ó   
ùzBoxerPred.cleanc                 C   s*   || j ƒ}t| j|| j| j| j| j| jƒS r>   )rÚ   rñ   r4   rÛ   rS  rt   ró   rô   )r   rk   Únew_sent_indexr   r   r    r†  ¯  s   
ùzBoxerPred.renumber_sentencesc                 C   ó   t | j| j| j| jfƒS r>   )ÚiterrS  rt   ró   rô   r²   r   r   r    Ú__iter__»  r¦  zBoxerPred.__iter__c                 C   ó   dS )NrÐ   r   r²   r   r   r    rª  ¾  r¾   zBoxerPred._predN©
r¥   r¦   r§   r!   rs  r±  r  r†  r¸  rª  r   r   r   r    rñ   Ž  s    rñ   c                   @   r«  )r  c                 C   r¬  r>   )r§  r!   rS  rt   r  rô   )r   r4   rÚ   rÛ   rS  rt   r  rô   r   r   r    r!   Ã  r­  zBoxerNamed.__init__c                 C   r®  r>   r¯  r²   r   r   r    rs  Ê  rN  zBoxerNamed._variablesc                 C   r°  r>   )r  r4   rÚ   rÛ   rt   r  rô   rR  r   r   r    r±  Í  r²  zBoxerNamed.change_varc                 C   r³  r>   )	r  r4   rÚ   rÛ   rS  rƒ  rt   r  rô   r²   r   r   r    r  Ø  r´  zBoxerNamed.cleanc                 C   ó&   t | j|| jƒ| j| j| j| j| jƒS r>   )r  r4   rÚ   rÛ   rS  rt   r  rô   r…  r   r   r    r†  ã  ó   ùzBoxerNamed.renumber_sentencesc                 C   r¶  r>   )r·  rS  rt   r  rô   r²   r   r   r    r¸  î  r¦  zBoxerNamed.__iter__c                 C   r¹  )NrÑ   r   r²   r   r   r    rª  ñ  r¾   zBoxerNamed._predNrº  r   r   r   r    r  Â  s    r  c                   @   ó<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )r  c                 C   r¬  r>   )r§  r!   r
  r  rÒ   rô   )r   r4   rÚ   rÛ   r
  r  rÒ   rô   r   r   r    r!   ö  r­  zBoxerRel.__init__c                 C   ó   | j | jhtƒ tƒ fS r>   ©r
  r  r6  r²   r   r   r    rs  ý  r£   zBoxerRel._variablesc              	   C   s(   t | j| j| j| j| j|  | j¡| jƒS r>   )	r  r4   rÚ   rÛ   r
  r  rƒ  rÒ   rô   r²   r   r   r    r     s   
ùzBoxerRel.cleanc                 C   r»  r>   )r  r4   rÚ   rÛ   r
  r  rÒ   rô   r…  r   r   r    r†    r¼  zBoxerRel.renumber_sentencesc                 C   r¶  r>   )r·  r
  r  rÒ   rô   r²   r   r   r    r¸    r¦  zBoxerRel.__iter__c                 C   r¹  )NrÒ   r   r²   r   r   r    rª    r¾   zBoxerRel._predN)	r¥   r¦   r§   r!   rs  r  r†  r¸  rª  r   r   r   r    r  õ  s    r  c                   @   rp  )r2  c                 C   ó    t  | |||¡ || _|| _d S r>   )r§  r!   rS  ra   )r   r4   rÚ   rÛ   rS  ra   r   r   r    r!     ó   
zBoxerProp.__init__c                 C   s&   t ttjtƒ tƒ | jhf| j ¡ ƒƒS r>   )ÚtuplerK   rH   rŽ  r6  rS  ra   rs  r²   r   r   r    rs  #  ó    ÿzBoxerProp._variablesc                 C   s   | j hS r>   r¥  r²   r   r   r    Úreferenced_labels(  r´   zBoxerProp.referenced_labelsc                 C   r£  r>   r¤  r²   r   r   r    r~  +  r¹   zBoxerProp.atomsc                 C   s   t | j| j| j| j| j ¡ ƒS r>   )r2  r4   rÚ   rÛ   rS  ra   r  r²   r   r   r    r  .  s   ûzBoxerProp.cleanc                 C   s$   t | j|| jƒ| j| j| j |¡ƒS r>   )r2  r4   rÚ   rÛ   rS  ra   r†  r…  r   r   r    r†  7  s   
ûzBoxerProp.renumber_sentencesc                 C   ó   t | j| jfƒS r>   )r·  rS  ra   r²   r   r   r    r¸  @  rO  zBoxerProp.__iter__c                 C   r¹  )NrÏ   r   r²   r   r   r    rª  C  r¾   zBoxerProp._predN)r¥   r¦   r§   r!   rs  rÄ  r~  r  r†  r¸  rª  r   r   r   r    r2    s    		r2  c                   @   r½  )rB  c                 C   rÀ  r>   )r§  r!   r
  r  )r   r4   rÚ   rÛ   r
  r  r   r   r    r!   H  rÁ  zBoxerEq.__init__c                 C   r¾  r>   r¿  r²   r   r   r    rs  M  r£   zBoxerEq._variablesc                 C   r}  r>   r|  r²   r   r   r    r~  P  r  zBoxerEq.atomsc                 C   ó   t | j|| jƒ| j| j| jƒS r>   )rB  r4   rÚ   rÛ   r
  r  r…  r   r   r    r†  S  ó   ûzBoxerEq.renumber_sentencesc                 C   rÅ  r>   )r·  r
  r  r²   r   r   r    r¸  \  rO  zBoxerEq.__iter__c                 C   r¹  )NrÎ   r   r²   r   r   r    rª  _  r¾   zBoxerEq._predN)	r¥   r¦   r§   r!   rs  r~  r†  r¸  rª  r   r   r   r    rB  G  s    	rB  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r/  c                 C   s&   t  | |||¡ || _|| _|| _d S r>   )r§  r!   rS  r1  r  )r   r4   rÚ   rÛ   rS  r1  r  r   r   r    r!   d  s   
zBoxerCard.__init__c                 C   r®  r>   r¯  r²   r   r   r    rs  j  rN  zBoxerCard._variablesc                 C   s"   t | j|| jƒ| j| j| j| jƒS r>   )r/  r4   rÚ   rÛ   rS  r1  r  r…  r   r   r    r†  m  s   úzBoxerCard.renumber_sentencesc                 C   s   t | j| j| jfƒS r>   )r·  rS  r1  r  r²   r   r   r    r¸  w  r„  zBoxerCard.__iter__c                 C   r¹  )NrÔ   r   r²   r   r   r    rª  z  r¾   zBoxerCard._predN)r¥   r¦   r§   r!   rs  r†  r¸  rª  r   r   r   r    r/  c  s    
r/  c                   @   r«  )rM  c                 C   rÀ  r>   )r§  r!   r=  r>  )r   r4   rÚ   rÛ   r=  r>  r   r   r    r!     rÁ  zBoxerOr.__init__c                 C   s   t ttj| j ¡ | j ¡ ƒƒS r>   )rÂ  rK   rH   rŽ  r=  rs  r>  r²   r   r   r    rs  „  s   zBoxerOr._variablesc                 C   ó   | j  ¡ | j ¡ B S r>   ©r=  r~  r>  r²   r   r   r    r~  ‡  r„  zBoxerOr.atomsc                 C   s"   t | j| j| j| j ¡ | j ¡ ƒS r>   )rM  r4   rÚ   rÛ   r=  r  r>  r²   r   r   r    r  Š  s   ûzBoxerOr.cleanc                 C   rÆ  r>   )rM  r4   rÚ   rÛ   r=  r>  r…  r   r   r    r†  “  rÇ  zBoxerOr.renumber_sentencesc                 C   rÅ  r>   )r·  r=  r>  r²   r   r   r    r¸  œ  rO  zBoxerOr.__iter__c                 C   r¹  )NrÌ   r   r²   r   r   r    rª  Ÿ  r¾   zBoxerOr._predN©
r¥   r¦   r§   r!   rs  r~  r  r†  r¸  rª  r   r   r   r    rM  ~  s    		rM  c                   @   r«  )rü   c                 C   r¬  r>   )r§  r!   rþ   r=  rõ   r>  )r   r4   rÚ   rÛ   rþ   r=  rõ   r>  r   r   r    r!   ¤  s
   
zBoxerWhq.__init__c                 C   s.   t ttj| jhtƒ tƒ f| j ¡ | j ¡ ƒƒS r>   )	rÂ  rK   rH   rŽ  rõ   r6  r=  rs  r>  r²   r   r   r    rs  ­  s   üÿzBoxerWhq._variablesc                 C   rÈ  r>   rÉ  r²   r   r   r    r~  ·  r„  zBoxerWhq.atomsc              	   C   s*   t | j| j| j| j| j ¡ | j| j ¡ ƒS r>   )	rü   r4   rÚ   rÛ   rþ   r=  r  rõ   r>  r²   r   r   r    r  º  s   ùzBoxerWhq.cleanc                 C   r»  r>   )rü   r4   rÚ   rÛ   rþ   r=  rõ   r>  r…  r   r   r    r†  Å  r¼  zBoxerWhq.renumber_sentencesc                 C   s&   t dd | j¡ d | j| j| jfƒS )NrŠ   r„   r‹   )r·  r*   rþ   r=  rõ   r>  r²   r   r   r    r¸  Ð  rÃ  zBoxerWhq.__iter__c                 C   r¹  )NrÕ   r   r²   r   r   r    rª  Õ  r¾   zBoxerWhq._predNrÊ  r   r   r   r    rü   £  s    	
rü   c                   @   s   e Zd Zdd„ ZdS )ÚPassthroughBoxerDrsInterpreterc                 C   rº   r>   r   )r   Úexr   r   r    r8   Ú  r¾   z(PassthroughBoxerDrsInterpreter.interpretN)r¥   r¦   r§   r8   r   r   r   r    rË  Ù  s    rË  c                   @   s.   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
S )r   Fc                 C   s
   || _ d S r>   )Ú_occur_index)r   Úoccur_indexr   r   r    r!   ß  r¹   z#NltkDrtBoxerDrsInterpreter.__init__c                 C   sì  t |tƒr%tdd„ |jD ƒtt| j|jƒƒƒ}|jdur#|  |j¡|_|S t |t	ƒr2t
|  |j¡ƒS t |tƒrK|  |j› d|j› |¡}|  ||j¡S t |tƒre|  d|j› d|j› |¡}|  ||j¡S t |tƒr||  d|j |¡}|  ||j|j¡S t |tƒrtt|jƒ|  |j¡ƒS t |tƒr¡ttt|jƒƒtt|jƒƒƒS t |tƒr»|  d|j› d|j› |¡}|  ||j¡S t |t ƒrÍt!|  |j"¡|  |j#¡ƒS t |t$ƒrë|  |j"¡}|  |j#¡}t|j|j |j|j ƒS J |j%j&› d	|› ƒ‚)
zT
        :param ex: ``AbstractBoxerDrs``
        :return: ``DrtExpression``
        c                 S   s   g | ]}t |ƒ‘qS r   )r   r•  r   r   r    r;   é  r  z8NltkDrtBoxerDrsInterpreter.interpret.<locals>.<listcomp>Nr  Úne_r”  Úcard_Fz: )'Ú
isinstancer9  r   r:  rJ   rK   r8   rÞ   rŠ  rî   r	   ra   rñ   Ú_add_occur_indexingró   rt   r+  rS  r  r  r  rÒ   r
  r  r2  r   r   rB  r   r   r/  r1  rM  r
   r=  r>  rü   rœ  r¥   )r   rÌ  ra   rÐ   r=  r>  r   r   r    r8   â  sF   
ÿ






þ


z$NltkDrtBoxerDrsInterpreter.interpretc                 G   s,   t t|ƒƒ}|D ]}t|t t|ƒƒƒ}q|S r>   )r   r   r   )r   rÐ   rZ   rÂ   r  r   r   r    r+    s   ÿz%NltkDrtBoxerDrsInterpreter._make_atomc                 C   sL   | j r$|jd ur$|jr|d|j 7 }|d|j 7 }|dt|jƒd  7 }|S )Nz_%sz_s%sz_w%sr   )rÍ  rÚ   r4   ÚsortedrÛ   )r   ÚbaserÌ  r   r   r    rÒ    s   z.NltkDrtBoxerDrsInterpreter._add_occur_indexingNr¤   )r¥   r¦   r§   r!   r8   r+  rÒ  r   r   r   r    r   Þ  s
    
)r   c                   @   s   e Zd ZdS )ÚUnparseableInputExceptionN)r¥   r¦   r§   r   r   r   r    rÕ    s    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 questionr5   z--occurz-ozoccurrence indexrÎ  r‡   zincorrect number of arguments)rÎ  z\n)r5   r   )Cr¨   rH   r'   rP  ry   rd   Ú	functoolsr   Úoptparser   Únltk.internalsr   Únltk.sem.drtr   r   r   r	   r
   r   r   r   r   Únltk.sem.logicr   r   r   r   r   r    r[  rq  r9  rî   r§  rñ   r  r  r2  rB  r/  rM  rü   rË  r   r1   rÕ  r¥   ÚoptsÚ
add_optionÚ
parse_argsÚoptionsrZ   rG   ÚerrorrÎ  Úinterpreterr9   r   r5   r   ra   rx   ÚsimplifyÚeliminate_equalityrÜ  Ú	normalizeÚpretty_printr   r   r   r    Ú<module>   sœ   	,     U H%;$43(*%6>
úÿúú
ÿ
Ó