o
    ¹iìÑ  ã                   @   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   úI/var/www/edux/Edux_v2/venv/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 r1|g| }tj|tjtjd}nd ||d |¡¡}tj|tjtjd	d
}| ¡ \}}|rdt d|jƒ |r\t d|dƒ |rdt d|dƒ |jdkrwt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   Ústderrzecho "{}" | {} {}T)rn   rv   ÚshellzReturn code:zstdout:
rU   zstderr:
r   z&ERROR CALLING: {} {}
Returncode: {}
{})	Úprintr*   Ú
subprocessÚPopenÚPIPEÚformatÚcommunicateÚ
returncoder1   )	r   Ú	input_strÚbinaryrZ   r   ÚcmdÚprn   rv   r   r   r    rW   ù   s4   	



ÿ
ÿÿ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’   L  ó   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!   Q  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_symbols^  ó   z$BoxerOutputDrsParser.get_all_symbolsc                 C   s
   |   |¡S r>   )Ú
handle_drs)r   ÚtokÚcontextr   r   r    Úhandlea  ó   
zBoxerOutputDrsParser.handlec                 C   ó   |S r>   r   ©r   Ú
expressionr¶   r   r   r    Úattempt_adjunctsd  ó   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_conditiong  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´   s  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  m  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   r/  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   r2  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>r@  )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  Ü  r3  z1BoxerOutputDrsParser._handle_eq.<locals>.<lambda>r  r±   r   rB  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>   ©r8  r9  rÝ   ©r   rÙ   rÚ   r<  r=  r   r   r    rÈ   ÿ  s   z+BoxerOutputDrsParser._make_merge_expressionc                 C   s   t | j||||ƒS r>   )ÚBoxerOrr4   rK  r   r   r    rß     ó   z(BoxerOutputDrsParser._make_or_expressionc                 C   s   t |j|j|ƒS r>   rJ  rK  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    r4    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 ©rS  r†   r   rT  ©rÙ   r   r    r;     s    "z?BoxerOutputDrsParser._sent_and_word_indices.<locals>.<listcomp>c                 S   s   g | ]}|d  d ‘qS rV  r   rT  r   r   r    r;     rF   N)r!  )r   rÀ   Úsent_indicesÚpairsrÚ   r   rW  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÷   r4  rê   r   r   r   r    rŸ   P  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¼   4  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ì   r1  rí   r8  r9  rÝ   rL  rA  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=  rR  r0  rý   Úer   r   r    r·   7  s.  
ÿÿÿ
ÿ
ÿ







ÿ


ÿ
ÿ
ÿ

î€ÿzBoxerDrsParser.handlec                 C   s   |   ¡ }|dkrt|ƒS d S )NÚNone)r¾   rø   )r   Útr   r   r    rc  Þ  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   Údescriptionrj  r   r   r    Úget_next_token_variableâ  s   
€ÿz&BoxerDrsParser.get_next_token_variabler>   )
r¤   r¥   r¦   r§   r!   r²   r¼   r·   rc  rn  r   r   r   r    rZ  "  s    
	 (rZ  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    rs  ê  s   zAbstractBoxerDrs.variablesc                 C   s2   i }t d|  ¡ ƒD ]\}}|D ]}|||< qq	|S )N)Úzrj  r‚   )rY   rs  )r   Úvartypesrl  ÚvarsÚvr   r   r    Úvariable_typesñ  s   
ÿzAbstractBoxerDrs.variable_typesc                 C   s   t ƒ t ƒ t ƒ fS rq  ©r5  r±   r   r   r    rr  ø  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¦   rs  rz  rr  r}  r€  r‚  r…  r‡  r   r   r   r    rp  é  s    rp  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 )r8  Nc                 C   ó    t  | ¡ || _|| _|| _d S r>   )rp  r!   r9  rÝ   Ú
consequent)r   r9  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>   )r5  rÝ   rY   rr  Úupdater‰  )r   rs  r×   Úsry  r   r   r    rr    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Ý   r5  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€  r8  r9  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;   ,  rÛ   z/BoxerDrs.renumber_sentences.<locals>.<listcomp>)r‰  r…  r8  r9  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   1  rB   z$BoxerDrs.__repr__.<locals>.<genexpr>c                 s   r‘  r’  r   rŽ  r   r   r    rA   2  rB   zimp(r‡   )r|   r*   r9  rÝ   r‰  )r   rŒ  r   r   r    Ú__repr__/  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   >  ó   € z"BoxerDrs.__eq__.<locals>.<genexpr>)	Ú	__class__r9  rG   rÝ   r   rH   rI   rY   r‰  ©r   Úotherr   r   r    Ú__eq__8  s   
ÿþÿý
ùzBoxerDrs.__eq__c                 C   ó
   | |k S r>   r   rœ  r   r   r    Ú__ne__C  r¸   zBoxerDrs.__ne__r>   ©r¤   r¥   r¦   r!   rr  r}  r€  r…  r–  rž  r   rp  r‡  r   r   r   r    r8    s    

	
r8  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>   )rp  r!   ra   rî   r   r   r    r!   J  r\  zBoxerNot.__init__c                 C   ó
   | j  ¡ S r>   )ra   rr  r±   r   r   r    rr  N  r¸   zBoxerNot._variablesc                 C   r¢  r>   ©ra   r}  r±   r   r   r    r}  Q  r¸   zBoxerNot.atomsc                 C   s   t | j ¡ ƒS r>   )rí   ra   r€  r±   r   r   r    r€  T  r®   zBoxerNot.cleanc                 C   s   t | j |¡ƒS r>   )rí   ra   r…  r„  r   r   r    r…  W  rN  zBoxerNot.renumber_sentencesc                 C   s
   d| j  S )Nznot(%s)©ra   r±   r   r   r    r–  Z  r¸   zBoxerNot.__repr__c                 C   s   | j |j ko| j|jkS r>   )r›  ra   rœ  r   r   r    rž  ]  ó   zBoxerNot.__eq__c                 C   rŸ  r>   r   rœ  r   r   r    r   `  r¸   zBoxerNot.__ne__Nr¡  r   r   r   r    rí   I  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>   )rp  r!   r4   rÙ   rÚ   )r   r4   rÙ   rÚ   r   r   r    r!   g  rŠ  zBoxerIndexed.__init__c                 C   s   | hS r>   r   r±   r   r   r    r}  m  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   v  rš  z&BoxerIndexed.__eq__.<locals>.<genexpr>)r›  r4   rÙ   rÚ   r   rH   rI   rY   rœ  r   r   r    rž  p  s   
ÿ
þ
ýûzBoxerIndexed.__eq__c                 C   rŸ  r>   r   rœ  r   r   r    r   y  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Œ  ry  r   r   r    r–  ~  s   üzBoxerIndexed.__repr__N)
r¤   r¥   r¦   r!   r}  rž  r   rp  r‡  r–  r   r   r   r    r¦  f  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!   rR  rt   rò   ró   )r   r4   rÙ   rÚ   rR  rt   rò   ró   r   r   r    r!   ‹  ó
   
zBoxerPred.__init__c                 C   ó   | j htƒ tƒ fS r>   ©rR  r5  r±   r   r   r    rr  ’  rM  zBoxerPred._variablesc                 C   ó    t | j| j| j|| j| j| jƒS r>   )rð   r4   rÙ   rÚ   rt   rò   ró   rQ  r   r   r    Ú
change_var•  ó   ùzBoxerPred.change_varc                 C   ó(   t | j| j| j| j|  | j¡| j| jƒS r>   )	rð   r4   rÙ   rÚ   rR  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Ú   rR  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>   )ÚiterrR  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!   rr  r°  r€  r…  r·  r©  r   r   r   r    rð   Š  s    rð   c                   @   rª  )r  c                 C   r«  r>   )r¦  r!   rR  rt   r  ró   )r   r4   rÙ   rÚ   rR  rt   r  ró   r   r   r    r!   ¿  r¬  zBoxerNamed.__init__c                 C   r­  r>   r®  r±   r   r   r    rr  Æ  rM  zBoxerNamed._variablesc                 C   r¯  r>   )r  r4   rÙ   rÚ   rt   r  ró   rQ  r   r   r    r°  É  r±  zBoxerNamed.change_varc                 C   r²  r>   )	r  r4   rÙ   rÚ   rR  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Ú   rR  rt   r  ró   r„  r   r   r    r…  ß  ó   ùzBoxerNamed.renumber_sentencesc                 C   rµ  r>   )r¶  rR  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
  r5  r±   r   r   r    rr  ù  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!   rr  r€  r…  r·  r©  r   r   r   r    r  ñ  s    r  c                   @   ro  )r1  c                 C   ó    t  | |||¡ || _|| _d S r>   )r¦  r!   rR  ra   )r   r4   rÙ   rÚ   rR  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  r5  rR  ra   rr  r±   r   r   r    rr    ó    ÿ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>   )r1  r4   rÙ   rÚ   rR  ra   r€  r±   r   r   r    r€  *  s   ûzBoxerProp.cleanc                 C   s$   t | j|| jƒ| j| j| j |¡ƒS r>   )r1  r4   rÙ   rÚ   rR  ra   r…  r„  r   r   r    r…  3  s   
ûzBoxerProp.renumber_sentencesc                 C   ó   t | j| jfƒS r>   )r¶  rR  ra   r±   r   r   r    r·  <  rN  zBoxerProp.__iter__c                 C   r¸  )NrÎ   r   r±   r   r   r    r©  ?  r½   zBoxerProp._predN)r¤   r¥   r¦   r!   rr  rÃ  r}  r€  r…  r·  r©  r   r   r   r    r1    s    		r1  c                   @   r¼  )rA  c                 C   r¿  r>   )r¦  r!   r	  r
  )r   r4   rÙ   rÚ   r	  r
  r   r   r    r!   D  rÀ  zBoxerEq.__init__c                 C   r½  r>   r¾  r±   r   r   r    rr  I  r¢   zBoxerEq._variablesc                 C   r|  r>   r{  r±   r   r   r    r}  L  r~  zBoxerEq.atomsc                 C   ó   t | j|| jƒ| j| j| jƒS r>   )rA  r4   rÙ   rÚ   r	  r
  r„  r   r   r    r…  O  ó   ûzBoxerEq.renumber_sentencesc                 C   rÄ  r>   )r¶  r	  r
  r±   r   r   r    r·  X  rN  zBoxerEq.__iter__c                 C   r¸  )NrÍ   r   r±   r   r   r    r©  [  r½   zBoxerEq._predN)	r¤   r¥   r¦   r!   rr  r}  r…  r·  r©  r   r   r   r    rA  C  s    	rA  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!   rR  r0  r  )r   r4   rÙ   rÚ   rR  r0  r  r   r   r    r!   `  s   
zBoxerCard.__init__c                 C   r­  r>   r®  r±   r   r   r    rr  f  rM  zBoxerCard._variablesc                 C   s"   t | j|| jƒ| j| j| j| jƒS r>   )r.  r4   rÙ   rÚ   rR  r0  r  r„  r   r   r    r…  i  s   úzBoxerCard.renumber_sentencesc                 C   s   t | j| j| jfƒS r>   )r¶  rR  r0  r  r±   r   r   r    r·  s  rƒ  zBoxerCard.__iter__c                 C   r¸  )NrÓ   r   r±   r   r   r    r©  v  r½   zBoxerCard._predN)r¤   r¥   r¦   r!   rr  r…  r·  r©  r   r   r   r    r.  _  s    
r.  c                   @   rª  )rL  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<  rr  r=  r±   r   r   r    rr  €  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>   )rL  r4   rÙ   rÚ   r<  r€  r=  r±   r   r   r    r€  †  s   ûzBoxerOr.cleanc                 C   rÅ  r>   )rL  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·  ˜  rN  zBoxerOr.__iter__c                 C   r¸  )NrË   r   r±   r   r   r    r©  ›  r½   zBoxerOr._predN©
r¤   r¥   r¦   r!   rr  r}  r€  r…  r·  r©  r   r   r   r    rL  z  s    		rL  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ô   r5  r<  rr  r=  r±   r   r   r    rr  ©  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: )'Ú
isinstancer8  r   r9  rJ   rK   r8   rÝ   r‰  rí   r	   ra   rð   Ú_add_occur_indexingrò   rt   r*  rR  r  r  r  rÑ   r	  r
  r1  r   r   rA  r   r   r.  r0  rL  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'   rO  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Ÿ   rZ  rp  r8  rí   r¦  rð   r  r  r1  rA  r.  rL  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>
úÿúú
ÿ
Ó