
    j                     L   d dl 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mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z   G d de          Z! G d d	e          Z" G d
 d          Z# G d de#e          Z$d Z% G d de#e          Z& G d de&e          Z' G d de&e          Z( G d de'e          Z) G d de&e          Z* G d de#e          Z+ G d de#e          Z, G d de#e          Z- G d d e#e          Z. G d! d"e.e          Z/ G d# d$e/e          Z0 G d% d&e.e          Z1 G d' d(e/          Z2 G d) d*e#e
          Z3d+ Z4 G d, d-e5e#e          Z6 G d. d/e7          Z8g fd0Z9 G d1 d2          Z:d3 Z;d4 Z<e=d5k    r e;             dS dS )6    N)reduce)chain)APPAbstractVariableExpressionAllExpressionAndExpressionApplicationExpressionBinaryExpressionBooleanExpressionConstantExpressionEqualityExpressionEventVariableExpressionExistsExpression
ExpressionFunctionVariableExpressionImpExpressionIndividualVariableExpressionLambdaExpressionLogicParserNegatedExpressionOrExpressionTokensVariableis_eventvar
is_funcvar	is_indvarunique_variable)in_idlec                   b    e Zd ZdZdZdZdZdZdZeeeegZ	e
j        e	z   Ze
j        egz   e	z   ZdS )	DrtTokensDRS+PRO[]:N)__name__
__module____qualname__r!   DRS_CONCPRONOUNOPEN_BRACKETCLOSE_BRACKETCOLONPUNCTr   SYMBOLSTOKENS     V/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/nltk/sem/drt.pyr    r    +   sY        
CHGLME|]E:Enu$G]cU"U*FFFr3   r    c                   l    e 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 )	DrtParserz$A lambda calculus expression parser.c                    t          j        |            t          d t          j        D             d t          j        D             z   t          dfgz   d t          j        t          j	        z   D             z   t          j
        dfgz   t          j        dfgz   d t          j        D             z   d t          j        D             z   d	gz             | _        d S )
Nc                     g | ]}|d fS    r2   .0xs     r4   
<listcomp>z&DrtParser.__init__.<locals>.<listcomp>A   s    333aV333r3   c                     g | ]}|d fS )   r2   r;   s     r4   r>   z&DrtParser.__init__.<locals>.<listcomp>B       222!1v222r3      c                     g | ]}|d fS )   r2   r;   s     r4   r>   z&DrtParser.__init__.<locals>.<listcomp>D   s    CCC!1vCCCr3         c                     g | ]}|d fS )   r2   r;   s     r4   r>   z&DrtParser.__init__.<locals>.<listcomp>G   s    111!1v111r3   c                     g | ]}|d fS )   r2   r;   s     r4   r>   z&DrtParser.__init__.<locals>.<listcomp>H   rA   r3   )N	   )r   __init__dictr    LAMBDA_LISTNOT_LISTr   EQ_LISTr   NEQ_LISTr.   r*   OR_LISTIMP_LISToperator_precedenceselfs    r4   rL   zDrtParser.__init__=   s    T"""#'33Y233322y12223Qxj DCy06?BCCCD #$	%
 "A&'( 21y01112 32y12223 k
$
 
$
   r3   c                     t           j        S )z#This method exists to be overridden)r    r0   rU   s    r4   get_all_symbolszDrtParser.get_all_symbolsL   s      r3   c                     |t           j        vS N)r    r1   )rV   toks     r4   
isvariablezDrtParser.isvariableP   s    )***r3   c                    |t           j        v r|                     ||          S |t           j        v r|                     ||          S |t           j        k    rd|                     d          r9|                     d          t           j        k    r| 	                    ||          S | 
                    ||          S |                                t           j        k    r5|                     t           j                   | 	                    ||          S |                     |          rd|                     d          r9|                     d          t           j        k    r|                     ||          S |                     ||          S dS )zgThis method is intended to be overridden for logics that
        use different operators or expressionsr   N)r    rO   handle_negationrN   handle_lambdaOPENinRangetokenr,   
handle_DRShandle_openupperr!   assertNextTokenr\   r.   handle_prophandle_variable)rV   r[   contexts      r4   handlezDrtParser.handleS   s]    )$$$''W555I)))%%c7333IN""||A 64::a==I4J#J#JsG444''W555YY[[IM))  000??3000__S!! 	:||A :4::a==IO#C#C''W555++C999		: 	:r3   c                      t          |          S rZ   DrtNegatedExpression)rV   
expressions     r4   make_NegatedExpressionz DrtParser.make_NegatedExpressionl   s    #J///r3   c                 L   |                                  }|                     d          r7|                     d          t          j        k    r|                                  |                     |          }|                     t          j                   t          ||d           S Nr   )	handle_refsra   rb   r    COMMAhandle_condsrf   CLOSEr!   )rV   r[   ri   refscondss        r4   rc   zDrtParser.handle_DRSo   s    !!LLOO	 $

1 @ @JJLLL!!'**Y_---4%%%r3   c                 (   |                      t          j                   g }|                     d          r|                     d          t          j        k    r|r7|                     d          t          j        k    r|                                  |                    |                     d                     |                     d          r#|                     d          t          j        k    |                      t          j                   |S )Nr   
quantified)	rf   r    r,   ra   rb   r-   rs   appendget_next_token_variable)rV   rv   s     r4   rr   zDrtParser.handle_refsz   s    Y3444ll1oo 	D$**Q--93J"J"J 

188

KK44\BBCCC	 ll1oo 	D$**Q--93J"J"J
 	Y4555r3   c                 (   |                      t          j                   g }|                     d          r|                     d          t          j        k    r|r7|                     d          t          j        k    r|                                  |                    |                     |                     |                     d          r#|                     d          t          j        k    |                      t          j                   |S rq   )	rf   r    r,   ra   rb   r-   rs   rz   process_next_expression)rV   ri   rw   s      r4   rt   zDrtParser.handle_conds   s    Y3444ll1oo 	@$**Q--93J"J"J A)/99

LL55g>>???	 ll1oo 	@$**Q--93J"J"J
 	Y4555r3   c                     |                      |          }|                     d           |                     t          j                  }t          ||          S )Nr&   )make_VariableExpressionrf   r}   r    r.   DrtProposition)rV   r[   ri   variabledrss        r4   rg   zDrtParser.handle_prop   sN    //44S!!!**9?;;h,,,r3   c                 "    t          ||          S )zlThis method serves as a hook for other logic parsers that
        have different equality expression classesDrtEqualityExpressionrV   firstseconds      r4   make_EqualityExpressionz!DrtParser.make_EqualityExpression   s     %UF333r3   c                 |    |t           j        k    rd S |t           j        v rt          S |t           j        v rd }|S dS )zbThis method serves as a hook for other logic parsers that
        have different boolean operatorsc                 $    t          | |d           S rZ   DrtConcatenationr   r   s     r4   <lambda>z9DrtParser.get_BooleanExpression_factory.<locals>.<lambda>   s    )9%)N)N r3   c                     t          | t                    rt          | j        | j        |          S t          | t                    rt	          | j        | j        |          S t          d          Nz'Antecedent of implication must be a DRS)
isinstancer!   rv   rw   r   r   r   	Exceptionr   s     r4   make_imp_expressionzDDrtParser.get_BooleanExpression_factory.<locals>.make_imp_expression   sd    eS)) @uz5;???e%566 O+EKvNNN IJJJr3   N)r    r*   rR   DrtOrExpressionrS   )rV   r[   r   s      r4   get_BooleanExpression_factoryz'DrtParser.get_BooleanExpression_factory   s\     )$$$NNNI%%%""I&&&K K K '&4r3   c                      |||          S rZ   r2   )rV   factoryr   r   s       r4   make_BooleanExpressionz DrtParser.make_BooleanExpression   s    wuf%%%r3   c                 "    t          ||          S rZ   DrtApplicationExpression)rV   functionarguments      r4   make_ApplicationExpressionz$DrtParser.make_ApplicationExpression   s    '(;;;r3   c                 :    t          t          |                    S rZ   )DrtVariableExpressionr   )rV   names     r4   r   z!DrtParser.make_VariableExpression   s    $Xd^^444r3   c                 "    t          ||          S rZ   )DrtLambdaExpression)rV   	variablesterms      r4   make_LambdaExpressionzDrtParser.make_LambdaExpression   s    "9d333r3   N)r'   r(   r)   __doc__rL   rX   r\   rj   ro   rc   rr   rt   rg   r   r   r   r   r   r   r2   r3   r4   r6   r6   :   s        ..
 
 
! ! !+ + +: : :20 0 0	& 	& 	&	 	 		 	 	- - -4 4 4
  (& & &< < <5 5 54 4 4 4 4r3   r6   c                       e Zd ZdZ e            Zed             Zd Zd Z	d Z
d Zd Zdd	Zed
             ZddZd ZddZd Zd Zd Zd Zd Zd Zd Zd ZdS )DrtExpressionz_
    This is the base abstract DRT Expression from which every DRT
    Expression extends.
    c                 6    | j                             |          S rZ   )_drt_parserparse)clsss     r4   
fromstringzDrtExpression.fromstring   s    $$Q'''r3   c                 "    t          | |          S rZ   r   rV   others     r4   applytozDrtExpression.applyto   s    'e444r3   c                      t          |           S rZ   rl   rU   s    r4   __neg__zDrtExpression.__neg__   s    #D)))r3   c                     t           S rZ   )NotImplementedr   s     r4   __and__zDrtExpression.__and__   s    r3   c                 P    t          |t                    sJ t          | |          S rZ   )r   r   r   r   s     r4   __or__zDrtExpression.__or__   s(    %/////tU+++r3   c                    t          |t                    sJ t          | t                    rt          | j        | j        |          S t          | t
                    rt          | j        | j        |          S t          d          r   )	r   r   r!   rv   rw   r   r   r   r   r   s     r4   __gt__zDrtExpression.__gt__   sy    %/////dC   	5ty$*e444d,-- 	D#DJUCCCABBBr3   Nc                     t          |t                    sJ |                                                                 }|                                                                }|                    ||          S )a<  
        Check for logical equivalence.
        Pass the expression (self <-> other) to the theorem prover.
        If the prover says it is valid, then the self and other are equal.

        :param other: an ``DrtExpression`` to check equality against
        :param prover: a ``nltk.inference.api.Prover``
        )r   r   simplifyfolequiv)rV   r   proverf1f2s        r4   r   zDrtExpression.equiv   sb     %/////]]__  ""^^!!##xxF###r3   c                 :    t          d| j        j        z            )Nz#'%s' object has no attribute 'type')AttributeError	__class__r'   rU   s    r4   typezDrtExpression.type   s!    1DN4KK
 
 	
r3   c                     t                      rZ   NotImplementedError)rV   	signatures     r4   	typecheckzDrtExpression.typecheck   s    !###r3   c                 $    t          | |d           S rZ   r   r   s     r4   __add__zDrtExpression.__add__   s    eT222r3   Fc                     t                      )z
        Return the set of discourse referents in this DRS.
        :param recursive: bool Also find discourse referents in subterms?
        :return: list of ``Variable`` objects
        r   rV   	recursives     r4   get_refszDrtExpression.get_refs   s     "###r3   c                     t          | t                    oRt          | j        t                    o8| j        j        j        t          j        k    ot          | j        t                    S )zIs self of the form "PRO(x)"?)
r   r   r   DrtAbstractVariableExpressionr   r   r    r+   r   DrtIndividualVariableExpressionrU   s    r4   is_pronoun_functionz!DrtExpression.is_pronoun_function   s^     t566 K4=*GHHK&+y/@@K 4=*IJJ		
r3   c                 "    t          ||          S rZ   r   r   s      r4   r   z%DrtExpression.make_EqualityExpression	  s    $UF333r3   c                      t          |          S rZ   )r   )rV   r   s     r4   r   z%DrtExpression.make_VariableExpression  s    $X...r3   c                      t          |           S rZ   )resolve_anaphorarU   s    r4   r   zDrtExpression.resolve_anaphora  s    %%%r3   c                 :    |                      d | j                  S )Nc                 *    |                                  S rZ   )eliminate_equality)es    r4   r   z2DrtExpression.eliminate_equality.<locals>.<lambda>  s    q/C/C/E/E r3   )visit_structuredr   rU   s    r4   r   z DrtExpression.eliminate_equality  s    $$%E%Et~VVVr3   c                 P    d                     |                                           S )zG
        Draw the DRS
        :return: the pretty print string
        
)join_prettyrU   s    r4   pretty_formatzDrtExpression.pretty_format  s    
 yy(((r3   c                 H    t          |                                            d S rZ   )printr   rU   s    r4   pretty_printzDrtExpression.pretty_print  s"    d  ""#####r3   c                 H    t          |                                            d S rZ   )	DrsDrawerdrawrU   s    r4   r   zDrtExpression.draw  s     $r3   rZ   F)r'   r(   r)   r   r6   r   classmethodr   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r2   r3   r4   r   r      ss        
 )++K( ( [(5 5 5* * *  , , ,C C C$ $ $ $ 
 
 X

$ $ $ $3 3 3$ $ $ $
 
 
4 4 4/ / /& & &W W W) ) )$ $ $    r3   r   c                   t    e Zd ZdZddZddZd ZddZd	 Zd
 Z	d Z
d Zd Zd Zd Zd Zej        Zd ZdS )r!   z%A Discourse Representation Structure.Nc                 0    || _         || _        || _        dS )z
        :param refs: list of ``DrtIndividualVariableExpression`` for the
            discourse referents
        :param conds: list of ``Expression`` for the conditions
        N)rv   rw   
consequent)rV   rv   rw   r   s       r4   rL   zDRS.__init__&  s     	
$r3   FTc                   	 | j         v rs| S | j                                       }| j        r| j                            d          }nd}t	          | j         d|         j        gz   | j         |dz   d         z   fd| j        D             |          S rt          | j                                                   z  D ]	t          	          }t          |          | j                             	          }| j        r| j                            	d          }nd}t	          | j         d|         |gz   | j         |dz   d         z   	fd| j        D             |          } | j        r| j                                      }nd}t	          | j         fd| j        D             |          S )_Replace all instances of variable v with expression E in self,
        where v is free in self.TNr:   c                 @    g | ]}|                     d           S Treplace)r<   condalpha_convertrn   r   s     r4   r>   zDRS.replace.<locals>.<listcomp>A  s;         Xz4OO  r3   c                 @    g | ]}|                     d           S r   r   )r<   r   r   newvarexrefs     r4   r>   zDRS.replace.<locals>.<listcomp>W  s;        $ !LLhmLL  r3   c                 @    g | ]}|                               S r2   r   )r<   r   r   rn   replace_boundr   s     r4   r>   zDRS.replace.<locals>.<listcomp>g  s;        LL:}mTT  r3   )rv   indexr   r   r!   r   rw   setfreer   r   )
rV   r   rn   r   r   ir   newvarr   r   s
    ````   @@r4   r   zDRS.replace0  si    ty    IOOH--? &!%!8!8 *dM" "JJ "&JIbqbMZ%8$99DIa!egg<NN     $(J        ty>>JOO,=,==  C,S11F4V<<H	,,A *%)_%<%<4& &

 &*
	"1"049QUWW3EE     (,
   # DD  "!_44j- 

 "
	       $
     r3   c                    t          t          j        d | j        D             t	                                }| j        r,|                    | j                                                   |t	          | j                  z
  S )z:see: Expression.free()c                 6    g | ]}|                                 S r2   )r  r<   cs     r4   r>   zDRS.free.<locals>.<listcomp>p  s     *H*H*H16688*H*H*Hr3   )	r   operatoror_rw   r   r   updater  rv   )rV   
conds_frees     r4   r  zDRS.freen  si    HL*H*HTZ*H*H*H#%%PP
? 	6do2244555C	NN**r3   c                     |rn| j         t          t          j        d | j        D                                 z   }| j        r-|                    | j                            d                     |S | j         S )#:see: AbstractExpression.get_refs()c              3   @   K   | ]}|                     d           V  dS TN)r   r  s     r4   	<genexpr>zDRS.get_refs.<locals>.<genexpr>y  s.      #I#IAJJt$4$4#I#I#I#I#I#Ir3   T)rv   listr   from_iterablerw   r   extendr   )rV   r   
conds_refss      r4   r   zDRS.get_refsu  s     	T##I#Idj#I#I#III& & J  B!!$/":":4"@"@AAA9r3   c                     t          t          || j                            }| j        r#|                     || j                              ||          S z:see: Expression.visit())r  maprw   r   rz   )rV   r   
combinatorpartss       r4   visitz	DRS.visit  sS    S4:..//? 	4LL$/22333z%   r3   c           	          | j         r || j                   nd} || j        t          t          || j                            |          S )#:see: Expression.visit_structured()N)r   rv   r  r  rw   )rV   r   r  r   s       r4   r   zDRS.visit_structured  sI    26/KXXdo...t
z$)T#h
*C*C%D%DjQQQr3   c                    | }d}|t          |j                  k     r|j        |         }t          |t                    rt          |j        t
                    rt          |j        t
                    rt          t          t          |j
                  |j        j        hz
            |j        d |         |j        |dz   d          z   |j                  }|j        j        |j        j        k    r)|                    |j        j        |j        dd          }d}|dz  }|dz  }|t          |j                  k     g }|j        D ]i}|                                }|                                }t          |t                    r|j
        s|j        s|j        r|                    |           j|j        r|j                                        nd }t          |j
        ||          S )Nr   r:   F)lenrw   r   r   r   r   r   r!   r  r   rv   r   r   r   r   r   rz   )rV   r   r  r   rw   new_condnew_cond_simpr   s           r4   r   zDRS.eliminate_equality  s   #ci..  9Q<D4!344tz+EFF t{,FGG
 SX$+*>)??@@IbqbMCIa!egg$66N 
 ;'4:+>>>++dk&:DJuUUCAQFA! #ci..  $ I 		' 		'D..00H$--//M}c22' %' !&' !+	' X&&&<?NTS^66888PT
38UJ///r3   c                 D   | j         rd }| j        r$t          t          d | j        D                       }|r(t	          || j                                                   }n| j                                         }| j        d d d         D ]}t          ||          }|S | j        st          d          t          t          d | j        D                       }t          t          |                     | j                  d d d                   D ]}t          ||          }|S )Nc                 6    g | ]}|                                 S r2   r   r  s     r4   r>   zDRS.fol.<locals>.<listcomp>  s     .K.K.K1quuww.K.K.Kr3   z-Cannot convert DRS with no conditions to FOL.c                 6    g | ]}|                                 S r2   r#  r  s     r4   r>   zDRS.fol.<locals>.<listcomp>  s     *G*G*Gq15577*G*G*Gr3   )r   rw   r   r   r   r   rv   r   r   r  r   _order_ref_stringsr   )rV   accumr   s      r4   r   zDRS.fol  s-   ? 	Ez M}.K.K
.K.K.KLL .%eT_-@-@-B-BCC++--y2 2 2%c511L : Q OPPP=*G*GDJ*G*G*GHHE8T%<%<TY%G%G"%MNN 5 5(e44Lr3   c           	      8   d                     |                     | j                            }d d | j        D             D             }t	          t          |          gt          t          t
          |                    z             ddz  z   dz   d|                              z   dz   d	d
z  z   dz   gfd|D             z   ddz  z   dz   gz   }| j	        r=t                              |t          j        | j	                                                  S |S )N c                     g | ]	}|D ]}|
S r2   r2   )r<   	cond_liner   s      r4   r>   zDRS._pretty.<locals>.<listcomp>  sA     
 
 
 "
 

 	 
 
 
 
r3   c                 T    g | ]%}t          d  |                                          &S )c                 *    |                                  S rZ   )strip)r   s    r4   r   z(DRS._pretty.<locals>.<listcomp>.<lambda>  s     r3   )filterr   r<   r   s     r4   r>   zDRS._pretty.<locals>.<listcomp>  s;       @D**DLLNN;;  r3   z __z_ |  |z|--z-|c                 F    g | ]}d |                               z   dz   S )r2  r3  )ljust)r<   linelengths     r4   r>   zDRS._pretty.<locals>.<listcomp>  s/    GGGDtdjj(((4/GGGr3   z|_z_|)r   r&  rv   rw   maxr  r  r  r6  r   DrtBinaryExpression_assemble_prettyr    IMPr   )rV   	refs_line
cond_linesr   r8  s       @r4   r   zDRS._pretty  sP   HHT44TY??@@	
 
 HL
  
 
 

 c)nn%Sj-A-A(B(BBCC sV|#d*yv...5sV|#d*
 HGGGJGGGH cFl"T)*+ 	 ? 	&77Y]DO$;$;$=$=   
r3   c                    d |D             }g }g }g }g }|D ]}t          |          r|                    |           't          |          r|                    |           Lt          |          r|                    |           q|                    |           t	          |          t	          |d           z   t	          |d           z   t	          |d           z   S )Nc                     g | ]}d |z  S )%sr2   )r<   r   s     r4   r>   z*DRS._order_ref_strings.<locals>.<listcomp>  s    ...#4#:...r3   c                 r    t          | dd          dgt          | dd                    dk                       S )Nr@   r$  r   intr  vs    r4   r   z(DRS._order_ref_strings.<locals>.<lambda>  s1    sAabbE2;s1QRR5zzQ3O/P/P r3   )keyc           	          | d         t          | dd          dgt          | dd                    dk                       fS Nr   r:   r$  rC  rE  s    r4   r   z(DRS._order_ref_strings.<locals>.<lambda>  s;    qtS!ABB%S122ZZST_9U5V5V.W r3   c           	          | d         t          | dd          dgt          | dd                    dk                       fS rI  rC  rE  s    r4   r   z(DRS._order_ref_strings.<locals>.<lambda>  s;    adC122C!""JJRSO8T4U4U-V r3   )r   rz   r   r   sorted)rV   rv   stringsind_vars	func_vars
event_vars
other_varsr   s           r4   r&  zDRS._order_ref_strings  s   .....	

 	% 	%A|| %""""A %  ####Q %!!!$$$$!!!$$$$:Z%P%PQQQRY$W$WXXXY X#V#VWWWX	
r3   c                    t          |t                    rt          | j                  t          |j                  k    r|}t	          | j        |j                  D ]1\  }}|                     |          }|                    ||d          }2| j        |j        k    rUt          | j                  t          |j                  k    r+t	          | j        |j                  D ]\  }}||k    s dS dS dS z}Defines equality modulo alphabetic variance.
        If we are comparing \x.M  and \y.N, then check equality of M and N[x/y].TF)	r   r!   r  rv   zipr   r   r   rw   )rV   r   converted_otherr1r2varexc1c2s           r4   __eq__z
DRS.__eq__  s    eS!! 	 49~~UZ00"'!$)_-ABB O OFB 88<<E&5&=&=b%&N&NOO?o&@@@SJF F.//F0 F0 #&dj/2G"H"H ) )B "b#(55 !)4ur3   c                     | |k     S rZ   r2   r   s     r4   __ne__z
DRS.__ne__      5=  r3   c                 N   d                     d                    |                     | j                            d                    d | j        D                                 }| j        r:t          j        |z   dz   t          j        z   dz   d| j        z  z   t          j	        z   S |S )Nz([{}],[{}]),, c              3       K   | ]	}d |z  V  
dS rA  Nr2   r0  s     r4   r  zDRS.__str__.<locals>.<genexpr>  s&      99ddTk999999r3   r)  rA  )
formatr   r&  rv   rw   r   r    r`   r<  ru   rV   r   s     r4   __str__zDRS.__str__  s    ""HHT,,TY7788II99dj99999
 
 ? 		 -  	
 () /" 
r3   rZ   FTr   )r'   r(   r)   r   rL   r   r  r   r  r   r   r   r   r&  rZ  r\  r   __hash__re  r2   r3   r4   r!   r!   #  s        //% % % %< < < <|+ + +
 
 
 
! ! !R R R
"0 "0 "0H  0  4
 
 
,  $! ! ! "H    r3   r!   c                     t          | j                  rt          |           S t          | j                  rt	          |           S t          | j                  rt          |           S t          |           S )z
    This is a factory method that instantiates and returns a subtype of
    ``DrtAbstractVariableExpression`` appropriate for the given variable.
    )r   r   r   r   DrtFunctionVariableExpressionr   DrtEventVariableExpressionDrtConstantExpressionr   s    r4   r   r   "  sr    
  /.x888	HM	"	" /,X666	X]	#	# /)(333$X...r3   c                   (    e Zd Zd ZddZd Zd ZdS )r   c                     | S rZ   r2   rU   s    r4   r   z!DrtAbstractVariableExpression.fol2      r3   Fc                     g S r  r2   r   s     r4   r   z&DrtAbstractVariableExpression.get_refs5  s    	r3   c                 <    d| z  }dt          |          z  }||||gS NrA  r)  r  rV   r   blanks      r4   r   z%DrtAbstractVariableExpression._pretty9  s)    4Kc!ffua''r3   c                     | S rZ   r2   rU   s    r4   r   z0DrtAbstractVariableExpression.eliminate_equality>  ro  r3   Nr   )r'   r(   r)   r   r   r   r   r2   r3   r4   r   r   1  sU             ( ( (
    r3   r   c                       e Zd ZdS )r   Nr'   r(   r)   r2   r3   r4   r   r   B           	Dr3   r   c                       e Zd ZdS )ri  Nry  r2   r3   r4   ri  ri  H  rz  r3   ri  c                       e Zd ZdS )rj  Nry  r2   r3   r4   rj  rj  N  rz  r3   rj  c                       e Zd ZdS )rk  Nry  r2   r3   r4   rk  rk  T          Dr3   rk  c                   b    e Zd Zd ZddZd ZddZd Zd Ze	j
        Z
d	 Zd
 Zd Zd Zd ZdS )r   c                 "    || _         || _        d S rZ   r   r   )rV   r   r   s      r4   rL   zDrtProposition.__init__Y  s     r3   FTc           	         | j         |k    rOt          |t                    s
J d            t          |j         | j                            ||||                    S t          | j         | j                            ||||                    S )Nz4Can only replace a proposition label with a variable)r   r   r   r   r   r   )rV   r   rn   r   r   s        r4   r   zDrtProposition.replace]  s    =H$$9  F FEF F  "#  :}mTT  
 "  :}mTT  r3   c                 Z    t          | j        | j                                                  S rZ   )r   r   r   r   rU   s    r4   r   z!DrtProposition.eliminate_equalityl  s"    dmTX-H-H-J-JKKKr3   c                 >    |r| j                             d          ng S NT)r   r   r   s     r4   r   zDrtProposition.get_refso  s"    *3;tx  &&&;r3   c                 b    | j         |j         k    o| j        |j        k    o| j        |j        k    S rZ   )r   r   r   r   s     r4   rZ  zDrtProposition.__eq__r  s5    Neo- &/&EI%	
r3   c                     | |k     S rZ   r2   r   s     r4   r\  zDrtProposition.__ne__y  r]  r3   c                 4    | j                                         S rZ   )r   r   rU   s    r4   r   zDrtProposition.fol~  s    x||~~r3   c                       j                                         }dt          d j        z            z  fd|d d         D              fd|dd         D             z   fd|dd          D             z   S )Nr)  rA  c                      g | ]
}d z   |z   S r)  r2   r<   r7  rv  s     r4   r>   z*DrtProposition._pretty.<locals>.<listcomp>  s"    666DUS[4666r3   r:   c                 0    g | ]}d j         z  dz   |z   S )rA  r&   rl  )r<   r7  rV   s     r4   r>   z*DrtProposition._pretty.<locals>.<listcomp>  s*    HHHTtdm#c)D0HHHr3   r@   c                      g | ]
}d z   |z   S r  r2   r  s     r4   r>   z*DrtProposition._pretty.<locals>.<listcomp>  s"    888dus{T!888r3   )r   r   r  r   )rV   drs_srv  s   ` @r4   r   zDrtProposition._pretty  s      ""c$.///6666E"1"I666HHHHU1Q3ZHHHI8888eABBi8889	
r3   c                 6     | || j                   g          S r  )r   rV   r   r  s      r4   r  zDrtProposition.visit  s!    z88DH--.///r3   c                 @     || j          || j                            S )r  r  r  s      r4   r   zDrtProposition.visit_structured  s"    z$-$(););<<<r3   c                 (    d| j          d| j         dS )Nzprop(r`  )r  rU   s    r4   re  zDrtProposition.__str__  s    3t}333333r3   Nrf  r   )r'   r(   r)   rL   r   r   r   rZ  r\  r   rg  r   r   r  r   re  r2   r3   r4   r   r   X  s             L L L< < < <
 
 
! ! ! "H  
 
 
0 0 0= = =4 4 4 4 4r3   r   c                   "    e Zd Zd ZddZd ZdS )rm   c                 N    t          | j                                                  S rZ   )r   r   r   rU   s    r4   r   zDrtNegatedExpression.fol  s     111r3   Fc                 6    | j                             |          S rq  )r   r   r   s     r4   r   zDrtNegatedExpression.get_refs  s    y!!),,,r3   c                     | j                                         }d |d d         D             d |dd         D             z   d |dd         D             z   d |dd          D             z   S )Nc                     g | ]}d |z   S z    r2   r<   r7  s     r4   r>   z0DrtNegatedExpression._pretty.<locals>.<listcomp>  s    666tVd]666r3   r@   c                     g | ]}d |z   S )z__  r2   r  s     r4   r>   z0DrtNegatedExpression._pretty.<locals>.<listcomp>      999v}999r3   rB   c                     g | ]}d |z   S )z  | r2   r  s     r4   r>   z0DrtNegatedExpression._pretty.<locals>.<listcomp>  r  r3   rD   c                     g | ]}d |z   S r  r2   r  s     r4   r>   z0DrtNegatedExpression._pretty.<locals>.<listcomp>  s    888v}888r3   )r   r   )rV   
term_liness     r4   r   zDrtNegatedExpression._pretty  s    Y&&((
66z"1"~66699AaC999:99AaC999: 98ABB8889	
r3   Nr   r'   r(   r)   r   r   r   r2   r3   r4   rm   rm     sF        2 2 2- - - -
 
 
 
 
r3   rm   c                   (    e Zd Zd Zd Zd ZddZdS )r   c           	          |                      || j                            | j        t	          |          d                    S )zRename all occurrences of the variable introduced by this variable
        binder in the expression to ``newvar``.
        :param newvar: ``Variable``, for the new variable
        T)r   r   r   r   r   )rV   r  s     r4   r   z!DrtLambdaExpression.alpha_convert  s?    
 ~~Idm-B6-J-JDQQ
 
 	
r3   c                 Z    t          | j        | j                                                  S rZ   )r   r   r   r   rU   s    r4   r   zDrtLambdaExpression.fol  s    ty}}???r3   c                     | j         g}| j        }|j        | j        k    r1|                    |j                    |j        }|j        | j        k    1d                    d |D                       t
          j        z   |                                }dt                    z  fd|d d         D             fd|dd         D             z   fd|dd         D             z   fd	|dd          D             z   S )
Nr)  c              3       K   | ]	}d |z  V  
dS rb  r2   )r<   rF  s     r4   r  z.DrtLambdaExpression._pretty.<locals>.<genexpr>  s&      ::1dQh::::::r3   c                      g | ]
}d z   |z   S r  r2   r  s     r4   r>   z/DrtLambdaExpression._pretty.<locals>.<listcomp>  s"    >>>tVe^d">>>r3   r:   c                      g | ]
}d z   |z   S )z \  r2   r  s     r4   r>   z/DrtLambdaExpression._pretty.<locals>.<listcomp>  s"    BBB$w%BBBr3   r@   c                      g | ]
}d z   |z   S )z /\ r2   )r<   r7  
var_strings     r4   r>   z/DrtLambdaExpression._pretty.<locals>.<listcomp>  s#    GGGtw#d*GGGr3   rB   c                      g | ]
}d z   |z   S r  r2   r  s     r4   r>   z/DrtLambdaExpression._pretty.<locals>.<listcomp>  s"    @@@v~$@@@r3   )	r   r   r   rz   r   r    DOTr   r  )rV   r   r   r  rv  r  s       @@r4   r   zDrtLambdaExpression._pretty  s-   ]O	yn..T]+++9D n.. XX::	:::::Y]J
\\^^
c*oo%>>>>z"1"~>>>BBBB*QqS/BBBCGGGGz!A#GGGH A@@@ABB@@@A	
r3   Fc                 \    |r#| j         g| j                            d          z   n| j         gS r  T)r   r   r   r   s     r4   r   zDrtLambdaExpression.get_refs  s4     ;DXT]Odi006666$-	
r3   Nr   )r'   r(   r)   r   r   r   r   r2   r3   r4   r   r     sX        
 
 
@ @ @
 
 
 
 
 
 
 
 
r3   r   c                   8    e Zd ZddZd Zed             Zd ZdS )r:  Fc                 t    |r5| j                             d          | j                            d          z   ng S r  )r   r   r   r   s     r4   r   zDrtBinaryExpression.get_refs  s>     GPWDJ%%(<(<T(B(BBBUW	
r3   c                     t                               |                     | j                  |                                 |                     | j                            S rZ   )r:  r;  _pretty_subexr   getOpr   rU   s    r4   r   zDrtBinaryExpression._pretty  sK    "33tz**JJLLt{++
 
 	
r3   c                    t          t          |           t          |                    }t          | |          } t          ||          }dt                    z  t          t	          | |                    }fd|d d         D             fd|dd         D             z   fd|dd          D             z   S )Nr)  c                 >    g | ]\  }}d |z   d z   z   d z   |z   d z   S r  r2   r<   
first_linesecond_linerv  s      r4   r>   z8DrtBinaryExpression._assemble_pretty.<locals>.<listcomp>  sK       +J j 3&.4{BSH  r3   r@   c                 >    g | ]\  }}d |z   dz   z   dz   |z   dz   S )(r)  r  r2   )r<   r  r  ops      r4   r>   z8DrtBinaryExpression._assemble_pretty.<locals>.<listcomp>  sK       +J j 3&+c1K?#E  r3   rB   c                 >    g | ]\  }}d |z   d z   z   d z   |z   d z   S r  r2   r  s      r4   r>   z8DrtBinaryExpression._assemble_pretty.<locals>.<listcomp>  sK       +J j 3&.4{BSH  r3   )r9  r  _pad_verticallyr  rS  )first_linesr  second_lines	max_linesfirst_second_linesrv  s    `   @r4   r;  z$DrtBinaryExpression._assemble_pretty  s   K((#l*;*;<<	%k9==&|Y??c"gg!#k<"@"@AA   /A"1"/E     /A!A#/F  	   /A!""/E  	
r3   c                 *    |                                 S rZ   r   rV   subexs     r4   r  z!DrtBinaryExpression._pretty_subex  s    }}r3   Nr   )r'   r(   r)   r   r   staticmethodr;  r  r2   r3   r4   r:  r:    sa        
 
 
 

 
 
 
 
 \
*    r3   r:  c                       e Zd ZdS )DrtBooleanExpressionNry  r2   r3   r4   r  r    r~  r3   r  c                       e Zd Zd Zd ZdS )r   c                 ~    t          | j                                        | j                                                  S rZ   )r   r   r   r   rU   s    r4   r   zDrtOrExpression.fol  s*    DJNN,,dkoo.?.?@@@r3   c                     t          |t                    rd |                                D             S t                              | |          S )Nc                 "    g | ]}|d d         S r:   r$  r2   r  s     r4   r>   z1DrtOrExpression._pretty_subex.<locals>.<listcomp>       ;;;4D2J;;;r3   )r   r   r   r  r  r  s     r4   r  zDrtOrExpression._pretty_subex  sF    e_-- 	<;;5==??;;;;#11$>>>r3   N)r'   r(   r)   r   r  r2   r3   r4   r   r     s5        A A A? ? ? ? ?r3   r   c                       e Zd Zd ZdS )r   c                 ~    t          | j                                        | j                                                  S rZ   )r   r   r   r   rU   s    r4   r   zDrtEqualityExpression.fol  s*    !$*.."2"2DKOO4E4EFFFr3   N)r'   r(   r)   r   r2   r3   r4   r   r     s(        G G G G Gr3   r   c                   z    e Zd ZdZddZddZd Zd Zdd	Zd
 Z	d Z
d Zej        Zd Zd Zd Zd Zd Zd ZdS )r   zDRS of the form '(DRS + DRS)'Nc                 L    t                               | ||           || _        d S rZ   )r  rL   r   )rV   r   r   r   s       r4   rL   zDrtConcatenation.__init__  s%    %%dE6:::$r3   FTc                    | j         }| j        }| j        }||                                 v rM|rJ|                    ||||          }|                    ||||          }|r|                    ||||          }n|rt          |                     d                    |                                z  D ]h}t          t          |                    }	|                    ||	d|          }|                    ||	d|          }|r|                    ||	d|          }i|                    ||||          }|                    ||||          }|r|                    ||||          }| 	                    |||          S )r   T)
r   r   r   r   r   r   r  r   r   r   )
rV   r   rn   r   r   r   r   r   r   rF  s
             r4   r   zDrtConcatenation.replace  s    
_
 t}}&& 
j-   j-   !+!3!3 *m]" "J  Ut}}T2233joo6G6GG U UC-oc.B.BCCA!MM#q$FFE#^^CD-HHF! U%/%7%7Qm%T%T
MM(J}UUE^^Hj-WWF '//j- 
 ~~eVZ888r3   c                     |                                  }t          |t                    rJ |                                S rZ   )r   r   r   r   rd  s     r4   r   z#DrtConcatenation.eliminate_equality6  s8    mmooc#344444%%'''r3   c                 x   | j                                         }| j                                        }| j        r| j                                        nd }t	          |t
                    rt	          |t
                    rt          |                    d                    t          |                    d                    z  D ]5}t          t          |                    }|
                    ||d          }6t          |j        |j        z   |j        |j        z   |          S |                     |||          S r  )r   r   r   r   r   r!   r   r   r   r   r   rv   rw   r   )rV   r   r   r   r   r  s         r4   r   zDrtConcatenation.simplify<  s   
##%%%%''37?LT_--///
eS!! 		=j&=&= 		=5>>$//003vt7L7L3M3MM ; ;.s/C/CDDVT::uzFK/v|1KZXXX>>%<<<r3   c                     | j                             |          | j                            |          z   }| j        r/|r-|                    | j                            d                     |S r  )r   r   r   r   r  )rV   r   rv   s      r4   r   zDrtConcatenation.get_refsL  sd    z""9--0D0DY0O0OO? 	8y 	8KK0066777r3   c                     t           j        S rZ   )r    r*   rU   s    r4   r  zDrtConcatenation.getOpS  s    !!r3   c                    t          |t                    r|                                 }|                                }t          |          t          |          k    rt|}t	          ||          D ]1\  }}|                     |          }|                    ||d          }2| j        |j        k    o| j        |j        k    o| j	        |j	        k    S dS rR  )
r   r   r   r  rS  r   r   r   r   r   )rV   r   	self_refs
other_refsrT  rU  rV  rW  s           r4   rZ  zDrtConcatenation.__eq__V  s     e-.. 	I))J9~~Z00"'!)Z88 O OFB 88<<E&5&=&=b%&N&NOOJ/"77 F'==F?+EE
 ur3   c                     | |k     S rZ   r2   r   s     r4   r\  zDrtConcatenation.__ne__h  r]  r3   c                     t          | j                                        | j                                                  }| j        r't          || j                                                  }|S rZ   )r   r   r   r   r   r   )rV   r   s     r4   r   zDrtConcatenation.folm  sU    $*..**DKOO,=,=>>? 	8a!4!4!6!677Ar3   c                 J   t                               |                     | j                  |                                 |                     | j                            }| j        r=t                               |t          j        | j        	                                          }|S rZ   )
r:  r;  r  r   r  r   r   r    r<  r   rd  s     r4   r   zDrtConcatenation._prettys  s    !22tz**JJLLt{++
 

 ? 	%66Y]DO$;$;$=$= C 
r3   c                     t          |t                    rd |                                D             S t                              | |          S )Nc                 "    g | ]}|d d         S r  r2   r  s     r4   r>   z2DrtConcatenation._pretty_subex.<locals>.<listcomp>  r  r3   )r   r   r   r  r  r  s     r4   r  zDrtConcatenation._pretty_subex  sG    e-.. 	<;;5==??;;;;#11$>>>r3   c                     | j         r8 | || j                   || j                   || j                   g          S  | || j                   || j                  g          S r  )r   r   r   r  s      r4   r  zDrtConcatenation.visit  s~    ? 	M:$*%%xx'<'<hht>W>WX   :xx
33XXdk5J5JKLLLr3   c                 d   |                      | j                  }|                      | j                  }t          j        |z   dz   |                                 z   dz   |z   t          j        z   }| j        r:t          j        |z   dz   t          j	        z   dz   d| j        z  z   t          j        z   S |S )Nr)  rA  )

_str_subexr   r   r   r`   r  ru   r   r    r<  )rV   r   r   r   s       r4   re  zDrtConcatenation.__str__  s    
++--kE!C'$**,,6<vET? 		 -  	
 () /" 
r3   c                 \    d|z  }t          |t                    r|j        
|dd         S |S )NrA  r:   r$  )r   r   r   )rV   r  r   s      r4   r  zDrtConcatenation._str_subex  s8    5Le-.. 	53C3KQrT7Nr3   rZ   rf  r   )r'   r(   r)   r   rL   r   r   r   r   r  rZ  r\  r  rg  r   r   r  r  re  r  r2   r3   r4   r   r     s	       ''% % % %%9 %9 %9 %9N( ( (= = =    " " "  $! ! ! $,H  
 
 
? ? ?
M M M       r3   r   c                   "    e Zd Zd ZddZd ZdS )r   c                 ~    t          | j                                        | j                                                  S rZ   )r	   r   r   r   rU   s    r4   r   zDrtApplicationExpression.fol  s.    $T]%6%6%8%8$-:K:K:M:MNNNr3   Fc                 t    |r5| j                             d          | j                            d          z   ng S r  )r   r   r   r   s     r4   r   z!DrtApplicationExpression.get_refs  s>     DM""4((4=+A+A$+G+GGG	
r3   c           
         |                                  \  }}|                                }d |D             }t          t          t          |g|z                       t          |          }fd|D             }t          t          |t          t          |                               }d |d d         D             d |dd         D             z   d |dd          D             z   S )Nc                 6    g | ]}|                                 S r2   r  )r<   args     r4   r>   z4DrtApplicationExpression._pretty.<locals>.<listcomp>  s     444ckkmm444r3   c                 0    g | ]}t          |          S r2   )r  )r<   	arg_linesr  s     r4   r>   z4DrtApplicationExpression._pretty.<locals>.<listcomp>  s#    XXX	oi;;XXXr3   c                 P    g | ]#\  }}|d z   d                      |          z   d z   $S r  r   r<   	func_line	args_lines      r4   r>   z4DrtApplicationExpression._pretty.<locals>.<listcomp>  sF       (Iy C#((9"5"55;  r3   r@   c                 P    g | ]#\  }}|d z   d                     |          z   dz   $S )r  r_  r  r  r  s      r4   r>   z4DrtApplicationExpression._pretty.<locals>.<listcomp>  F       (Iy C#((9"5"55;  r3   rB   c                 P    g | ]#\  }}|d z   d                      |          z   d z   $S r  r  r  s      r4   r>   z4DrtApplicationExpression._pretty.<locals>.<listcomp>  r  r3   )uncurryr   r9  r  r  r  r  rS  )rV   r   argsfunction_lines
args_linesfunc_args_linesr  s         @r4   r   z DrtApplicationExpression._pretty  s!   $!))++44t444
C.!1J!>??@@	(CCXXXXZXXX
s>4Z8H3I3IJJKK ,;BQB,?   ,;AaC,@  	 ,;ABB,?  	
r3   Nr   r  r2   r3   r4   r   r     sI        O O O
 
 
 

 
 
 
 
r3   r   c                 d    dt          | d                   z  g}| ||t          |           z
  z  z   S )Nr)  r   rt  )linesr  pad_lines      r4   r  r    s4    c%(mm#$H8y3u::5666r3   c                   (    e Zd Zd ZddZd Zd ZdS )	PossibleAntecedentsc                      t          |           S )zSet of free variables.)r   rU   s    r4   r  zPossibleAntecedents.free  s    4yyr3   FTc                     t                      }| D ]3}||k    r|                     |           |                     |           4|S )r   )r  rz   )rV   r   rn   r   r   resultitems          r4   r   zPossibleAntecedents.replace  sX     %&& 	" 	"DxJ''''D!!!!r3   c                 :    d| z  }dt          |          z  }|||gS rs  rt  ru  s      r4   r   zPossibleAntecedents._pretty  s'    4Kc!ffua  r3   c                 L    dd                     d | D                       z   dz   S )Nr$   r_  c              3       K   | ]	}d |z  V  
dS rb  r2   )r<   its     r4   r  z.PossibleAntecedents.__str__.<locals>.<genexpr>  s&      77BdRi777777r3   r%   r  rU   s    r4   re  zPossibleAntecedents.__str__  s-    SXX77$777777#==r3   Nrf  )r'   r(   r)   r  r   r   re  r2   r3   r4   r  r    sU          	 	 	 	! ! !
> > > > >r3   r  c                       e Zd ZdS )AnaphoraResolutionExceptionNry  r2   r3   r4   r  r    r~  r3   r  c                 B   t          | t                    r	|                                 rt                      }|D ]c}|                                D ]L}|                     |          }|j        | j        j        k    r || j        k    s|                    |           Mdt          |          dk    r	|d         }n|}| 
                    | j        |          S t          | j        || gz             }t          | j        || gz             }|                     ||          S t          | t                    rg }	| j        D ]}
t          |
|| gz             }t          |t                    rlt          |j        t                    r|j        }|j        |_        ||_        t          |j        t                    r|j        st%          d|j        z            |	                    |           | j        rt          | j        || gz             }nd }|                     | j        |	|          S t          | t*                    r| S t          | t,                    r,|                     t          | j        || gz                       S t          | t0                    rh| j        rt          | j        || gz             }nd }|                     t          | j        || gz             t          | j        || gz             |          S t          | t2                    rD|                     t          | j        || gz             t          | j        || gz                       S t          | t4                    r2|                     | j        t          | j        || gz                       S d S )Nr:   r   z+Variable '%s' does not resolve to anything.)r   r	   r   r  r   r   r   r   rz   r  r   r   r   r!   rw   r   r   r   r  r   rv   r   r   r   r   r
   r   r   )rn   trailpossible_antecedentsancestorr   refex
resolution
r_function
r_argumentr_condsr   r_condtempr   s                 r4   r   r     s   *344 O
))++ 	@#6#8#8 ! 
; 
;#,,.. 	; 	;C&>>sCCE
 **=*GGG!444,33E:::	; '((A--1!4

1
55j6I:VVV)**=u
|?STTJ)**=u
|?STTJ''
J???	J	$	$ 6
$ 	# 	#D%dEZL,@AAF &"455 fl,?@@ )!<D#)=FL$(FMfm-@AA != 935;\B  
 NN6""""  	)**?*AUVVJJJ##JOWjIII	J :	;	; 
	J 1	2	2 
##Z_ezl.BCC
 
 	
 
J 0	1	1 
  	)**?*AUVVJJJ##Z-u
|/CDDZ.0DEE
 
 	
 
J 0	1	1 	
##Z-u
|/CDDZ.0DEE
 
 	

 
J 0	1	1 
##!1*/5J<CW!X!X
 
 	

 
r3   c                   ~    e Zd ZdZdZdZddZd ZeefdZd	 Z	d
 Z
d ZddZd Zd Zd Zd Zd Zd Zd Zd ZdS )r   rB   
   rF   TNc                    d}|sddl m}m} ddlm}  |            }|                    d            |dd          }|rq ||dd	          }||_        || _        |                     || j	        | j
                  \  }	}
t          |	| j	        z   d
          }|
| j	        z   } ||||	          }n ||dd	          }|                                 ||_        || _        || _        || _        dS )a  
        :param drs: ``DrtExpression``, The DRS to be drawn
        :param size_canvas: bool, True if the canvas size should be the exact size of the DRS
        :param canvas: ``Canvas`` The canvas on which to draw the DRS.  If none is given, create a new canvas.
        Nr   )CanvasTk)FontDRT	helvetica   )familysize)widthheightd   i,  )tkinterr  r  tkinter.fontr  titlefontcanvas_visit
OUTERSPACETOPSPACEr9  packr   master)rV   r   size_canvasr%  r*  r  r  r  r$  rightbottomr  r  s                r4   rL   zDrsDrawer.__init__B  s4     	 +*******))))))RTTFLL4{444D 
?a:::"$"&++c4?DM"R"REDO3S99$/1eFCCCc#>>>KKMMMFKr3   c                 @    | j         j                            d          S )z Get the height of a line of text	linespace)r%  r$  metricsrU   s    r4   _get_text_heightzDrsDrawer._get_text_heighth  s    {''444r3   c                     |                      | j        | j        ||           | j        r)t	                      s| j                                         dS |                     | j        ||          S )zDraw the DRSN)_handler   _draw_commandr*  r   mainloopr&  )rV   r=   ys      r4   r   zDrsDrawer.drawl  sf    TXt11a888; 	/wyy 	/K  """"";;txA...r3   c                 <    |                      || j        ||          S )a!  
        Return the bottom-rightmost point without actually drawing the item

        :param expression: the item to visit
        :param x: the top of the current drawing area
        :param y: the left side of the current drawing area
        :return: the bottom-rightmost point
        )r3  _visit_command)rV   rn   r=   r6  s       r4   r&  zDrsDrawer._visitu  s     ||J(;QBBBr3   c                    t          |t                    r*| j                            ||d| j        j        |           nvt          |t
                    ra|\  }}| j                            ||||           ||                                 z   | j        dz  z   }| j        	                    ||||           | 
                    |||          S )a   
        Draw the given item at the given location

        :param item: the item to draw
        :param x: the top of the current drawing area
        :param y: the left side of the current drawing area
        :return: the bottom-rightmost point
        nw)anchorr$  textr@   )r   strr%  create_textr$  tuplecreate_rectangler1  BUFFERcreate_liner8  )rV   r  r=   r6  r,  r-  horiz_line_ys          r4   r4  zDrsDrawer._draw_command  s     dC   		JK##AqDK<LSW#XXXXe$$ 	J"OUFK((Auf===D))+++t{Q?  K##A|ULIII""4A...r3   c                     t          |t                    r9|| j        j                            |          z   ||                                 z   fS t          |t                    r|S dS )a  
        Return the bottom-rightmost point without actually drawing the item

        :param item: the item to visit
        :param x: the top of the current drawing area
        :param y: the left side of the current drawing area
        :return: the bottom-rightmost point
        N)r   r=  r%  r$  measurer1  r?  )rV   r  r=   r6  s       r4   r8  zDrsDrawer._visit_command  sk     dC   	(00666D<Q<Q<S<S8STTe$$ 	K	 	r3   r   c                    || j         k    r)	 |j        |z   }|j        |z   }||fS # t          $ r Y nw xY wt	          |t
                    r| j        }nt	          |t                    r| j        }nt	          |t                    r| j
        }nt	          |t                    r| j        }nt	          |t                    r| j        }npt	          |t                    r| j        }nSt	          |t"                    r| j        }n6t	          |t$                    r| j        }nt)          |j        j                   |||||          \  }}||z
  |_        ||z
  |_        ||fS )a1  
        :param expression: the expression to handle
        :param command: the function to apply, either _draw_command or _visit_command
        :param x: the top of the current drawing area
        :param y: the left side of the current drawing area
        :return: the bottom-rightmost point
        )r8  _drawing_width_drawing_heightr   r   r   _handle_VariableExpressionr!   _handle_DRSrm   _handle_NegatedExpressionr   _handle_LambdaExpressionr
   _handle_BinaryExpressionr   _handle_ApplicationExpressionr  r   _handle_DrtPropositionr   r   r'   )rV   rn   commandr=   r6  r,  r-  r   s           r4   r3  zDrsDrawer._handle  s    d)))"1A5#3a7v&!    j"?@@ 	;5GG
C(( 	;&GG
$899 	;4GG
$788 	;3GG
$455 		;3GG
$<== 	;8GG
$788 	;5GG
N33 	;1GGJ09:::!'*gq!<< %*AI
!%+aZ
"vs   % 
22c                 "     |d|z  ||          S )NrA  r2   )rV   rn   rP  r=   r6  s        r4   rI  z$DrsDrawer._handle_VariableExpression  s    wtj(!Q///r3   c           
         |                      t          j        ||          d         }|                     |j        |||          \  }} |t          j        ||                     |||z
  |                                                      ||fS rq   )r8  r    NOTr3  r   _get_centered_topr1  rV   rn   rP  r=   r6  r,  r-  s          r4   rK  z#DrsDrawer._handle_NegatedExpression  s    ##IM1a88; ,,zJJ 	M""1fqj$2G2G2I2IJJ	
 	
 	
 vr3   c                    || j         z   }|| j         z   }|j        r%d                    d |j        D                       }nd} ||||          \  }}|| j         dz  z  }|j        r@|j        D ]7}	|                     |	|||          \  }
}t          ||
          }|| j         z  }8n||                                 | j         z   z  }|| j         z  } |||f||          S )Nr)  c              3       K   | ]	}d |z  V  
dS rb  r2   )r<   rs     r4   r  z(DrsDrawer._handle_DRS.<locals>.<genexpr>  s&      >>D1H>>>>>>r3   z     r@   )rA  rv   r   rw   r3  r9  r1  )rV   rn   rP  r=   r6  leftr-  rv   	max_rightr   r,  s              r4   rJ  zDrsDrawer._handle_DRS  s   4;T[ ? 	88>>jo>>>>>DDD%gdD&99F$+/!  	<"( & &"&,,tWdF"K"K	511	$+%&
 d++--;;F 	T[ 	w	6*Aq111r3   c                 P    |                                 \  }}t          |t                    s|j        }|j        g}                     |          d         }t          |g fd|D             z             }|z
  }	                     |	|j                  }
 	                    |||
          d         }                     |	 
                                          } |t          j        ||          d         }t          |          D ]u\  }}                     |	|j                  } 	                    ||||          d         }|dz   t          |          k     r  |t          j        dz   ||          d         }v |t          j        ||          d         }||fS )Nr:   c                 J    g | ]}                     |          d           S r9   )r&  )r<   r  rV   r=   r6  s     r4   r>   z;DrsDrawer._handle_ApplicationExpression.<locals>.<listcomp>  s.     K K KsS!Q!7!7!: K K Kr3   r   r)  )r  r   r   r   r   r&  r9  rT  rH  r3  r1  r    r`   	enumerater  rs   ru   )rV   rn   rP  r=   r6  r   r  function_bottom
max_bottomline_heightfunction_drawing_topr,  centred_string_topr  r  arg_drawing_tops   `  ``           r4   rN  z'DrsDrawer._handle_ApplicationExpression  s   #++--$($ABB 	)!*H'(D ++h155a8 K K K K K Kd K K KK
 

 !1n  $55{H4 
  
 Xw3GHHK "33{D1133
 
 	/ABB1E  oo 	U 	UFAs"44; 3 O LLguoFFqIE1us4yy  	# 5u>PQQRST 	0BCCAFz""r3   c           
      :   t           j        d|j        z  z   t           j        z   }|                     |||          d         }|                     |j        |||          \  }} ||||                     |||z
  |                                                      ||fS )NrA  r   )	r    LAMBDAr   r  r8  r3  r   rT  r1  )rV   rn   rP  r=   r6  r   r,  r-  s           r4   rL  z"DrsDrawer._handle_LambdaExpression)  s    $tj.A'AAIMQ	##Iq!44Q7 ,,zJJ 	q$00FQJ@U@U@W@WXX	
 	
 	
 vr3   c           
         |                      |j        dd          d         }|                      |j        dd          d         }t          ||          }|                     |||                                           } |t          j        ||          d         }	|j        j        }| 	                    |j        ||	|                     |||                    \  }	}
 |d|
                                z  |	|          d         }	|j        j        }| 	                    |j        ||	|                     |||                    \  }	} |t          j        |	|          d         }	|	t          |
|          fS )Nr   r:   z %s )r&  r   r   r9  rT  r1  r    r`   rH  r3  r  ru   )rV   rn   rP  r=   r6  first_heightsecond_heightr`  rb  r,  first_bottomsecond_bottoms               r4   rM  z"DrsDrawer._handle_BinaryExpression8  s~   {{:#3Q::1=J$5q!<<Q?,66 "33{D1133
 
 	+=>>qA "'7 $""1k<@@	!
 !
 !1!1!3!33U<NOOPQR #)9!%""1k=AA	"
 "
 	0BCCAFs<7788r3   c                 z     ||j         ||          d         }|                     |j        |||          \  }}||fS rq   )r   r3  r   rU  s          r4   rO  z DrsDrawer._handle_DrtProposition^  sF    
+Q2215 ,,zJJvr3   c                     |||z
  dz  z   S )zGet the y-coordinate of the point that a figure should start at if
        its height is 'item_height' and it needs to be centered in an area that
        starts at 'top' and is 'full_height' tall.r@   r2   )rV   topfull_heightitem_heights       r4   rT  zDrsDrawer._get_centered_topg  s     kK/1444r3   r  )r   r   )r'   r(   r)   rA  r(  r'  rL   r1  r   r&  r4  r8  r3  rI  rK  rJ  rN  rL  rM  rO  rT  r2   r3   r4   r   r   =  s!       FHJ$ $ $ $L5 5 5  8 / / / /	C 	C 	C/ / /,  , , , ,\0 0 0   2 2 22)# )# )#V  $9 $9 $9L  5 5 5 5 5r3   r   c                  t   t          d           t          j        } t           | d                     t           | d                     t           | d                     t           | d                     t           | d                     t           | d                     t           | d                     t           | d	                     t           | d
                     t          d           t           | d                                                     t          d            | d          }t          |           |                    t          d                    }t          |           t          ||k               t          d           t          t           | d                               t          t           | d                               t          t           | d                               t          d            | d                                            | d                                            | d                                            | d                                            | d                                           d S )Nz2====================TEST PARSE====================([x,y],[sees(x,y)])([x],[man(x), walks(x)])z\x.\y.([],[sees(x,y)])z\x.([],[walks(x)])(john)z$(([x],[walks(x)]) + ([y],[runs(y)]))z#(([],[walks(x)]) -> ([],[runs(x)]))z([x],[PRO(x), sees(John,x)]) ([x],[man(x), -([],[walks(x)])])*([],[(([x],[man(x)]) -> ([],[walks(x)]))])z2====================Test fol()====================z\====================Test alpha conversion and lambda expression equality====================z\x.([],[P(x)])zz?====================Test resolve_anaphora()====================z,([x,y,z],[dog(x), cat(y), walks(z), PRO(z)])z3([],[(([x],[dog(x)]) -> ([y],[walks(y), PRO(y)]))])z(([x,y],[]) + ([],[PRO(x)]))z;====================Test pretty_print()====================([],[])z@([],[([x],[big(x), dog(x)]) -> ([],[bark(x)]) -([x],[walk(x)])])z'([x,y],[x=y]) + ([z],[dog(z), walk(z)])z4([],[([x],[]) | ([y],[]) | ([z],[dog(z), walk(z)])])z0\P.\Q.(([x],[]) + P(x) + Q(x))(\x.([],[dog(x)])))r   r   r   r   r   r   r   r   )dexpre1e2s      r4   demorz  n  s   	
,---$E	%%&
'
'(((	%%+
,
,---	%%)
*
*+++	%%+
,
,---	%%7
8
8999	%%6
7
7888	%%/
0
0111	%%3
4
4555	%%=
>
>???	
,---	%%&
'
'
+
+
-
-...	
VWWW	 	!	!B	"III			(3--	(	(B	"III	"(OOO	
9:::	
55!PQQ
R
RSSS	UVVWW   

55!@AA
B
BCCC	
5666	E*""$$$	EK lnnn	E
455BBDDD	E
ABBOOQQQ	E
=>>KKMMMMMr3   c                      	 ddl m}  n!# t          $ r}t          d          d }~ww xY wg d}|D ]0}t                              |          }|                                 1d S )Nr   )r  z,tkinter is required, but it's not available.)r=   rv  z([x],[])z([x],[man(x)])rq  rr  z\x.([],[man(x), walks(x)])z\x y.([],[sees(x,y)])z)([],[(([],[walks(x)]) + ([],[runs(x)]))])rs  rt  )r!  r  ImportError
ValueErrorr   r   r   )r  r   expressionsds       r4   	test_drawr    s    I I I IGHHHI  K   $$Q''	 s   	 
'"'__main__)>r  	functoolsr   	itertoolsr   nltk.sem.logicr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	nltk.utilr   r    r6   r   r!   r   r   r   ri  rj  rk  r   rm   r   r:  r  r   r   r   r   r  r  r  r   r  r   r   rz  r  r'   r2   r3   r4   <module>r     s                                                                    6      + + + + + + + +4 4 4 4 4 4 4 4Dd d d d d d d dN| | | | |- | | |~/ / /    M3M   "	 	 	 	 	!#?	 	 		 	 	 	 	!#=	 	 		 	 	 	 	#%<	 	 		 	 	 	 	9;M 	 	 	;4 ;4 ;4 ;4 ;4]J ;4 ;4 ;4|
 
 
 
 
=*; 
 
 
$"
 "
 "
 "
 "
-)9 "
 "
 "
J% % % % %-)9 % % %P	 	 	 	 	.0A 	 	 	? ? ? ? ?*L ? ? ?G G G G G/1C G G G
Y Y Y Y Y+ Y Y Yx!
 !
 !
 !
 !
}.C !
 !
 !
H7 7 7
> > > > >$z > > >2	 	 	 	 	) 	 	 	 (* P
 P
 P
 P
fn5 n5 n5 n5 n5 n5 n5 n5b	%N %N %NP  2 zDFFFFF r3   