Ë
    çÍ:jÓÉ  ã                   óÂ  — 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;«        yy)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                   ót   — 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y)Ú	DrtTokensÚDRSú+ÚPROú[ú]ú:N)Ú__name__Ú
__module__Ú__qualname__r!   ÚDRS_CONCÚPRONOUNÚOPEN_BRACKETÚCLOSE_BRACKETÚCOLONÚPUNCTr   ÚSYMBOLSÚTOKENS© ó    úa/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/sem/drt.pyr    r    +   sQ   „ Ø
€CØ€HØ€GØ€LØ€MØ€Eà�| ]°EÐ:€Eà�n‰n˜uÑ$€Gà�]‰]˜c˜UÑ" UÑ*�Fr3   r    c                   ój   — 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y)Ú	DrtParserz$A lambda calculus expression parser.c                 óR  — t        j                  | «       t        t        j                  D �cg c]  }|df‘Œ c}t        j
                  D �cg c]  }|df‘Œ c}z   t        dfgz   t        j                  t        j                  z   D �cg c]  }|df‘Œ c}z   t        j                  dfgz   t        j                  dfgz   t        j                  D �cg c]  }|df‘Œ c}z   t        j                  D �cg c]  }|df‘Œ c}z   d	gz   «      | _        y c c}w c c}w c c}w c c}w c c}w )
Né   é   é   é   é   é   é   é   )Né	   )r   Ú__init__Údictr    ÚLAMBDA_LISTÚNOT_LISTr   ÚEQ_LISTr   ÚNEQ_LISTr.   r*   ÚOR_LISTÚIMP_LISTÚoperator_precedence)ÚselfÚxs     r4   rA   zDrtParser.__init__=   s  € Ü×Ñ˜TÔ"ä#'Ü&×2Ñ2Ö3˜ˆa�ŠVÒ3Ü(×1Ñ1Ö2˜!��1ŠvÒ2ñ3ä�Qˆxˆjñô  )×0Ñ0´6·?±?ÑBÖC˜!��1ŠvÒCñDô —‘ Ð#Ð$ñ	%ô
 ×"Ñ" AÐ&Ð'ñ(ô  )×0Ñ0Ö1˜!��1ŠvÒ1ñ2ô  )×1Ñ1Ö2˜!��1ŠvÒ2ñ3ð ˆkñó
$
ˆÕ ùÚ3ùÚ2ùâCùò 2ùÚ2s   ­DÁD
ÂD
ÃD
Ã2D$
c                 ó"   — t         j                  S )z#This method exists to be overridden)r    r0   ©rJ   s    r4   Úget_all_symbolszDrtParser.get_all_symbolsL   s   € ä× Ñ Ð r3   c                 ó&   — |t         j                  vS ©N)r    r1   )rJ   Útoks     r4   Ú
isvariablezDrtParser.isvariableP   s   € Øœ)×*Ñ*Ð*Ð*r3   c                 óÜ  — |t         j                  v r| j                  ||«      S |t         j                  v r| j	                  ||«      S |t         j
                  k(  rW| j                  d«      r4| j                  d«      t         j                  k(  r| j                  ||«      S | j                  ||«      S |j                  «       t         j                  k(  r1| j                  t         j
                  «       | j                  ||«      S | j                  |«      rW| j                  d«      r4| j                  d«      t         j                  k(  r| j!                  ||«      S | j#                  ||«      S y)zgThis method is intended to be overridden for logics that
        use different operators or expressionsr   N)r    rD   Úhandle_negationrC   Úhandle_lambdaÚOPENÚinRangeÚtokenr,   Ú
handle_DRSÚhandle_openÚupperr!   ÚassertNextTokenrR   r.   Úhandle_propÚhandle_variable)rJ   rQ   Úcontexts      r4   ÚhandlezDrtParser.handleS   s   € ð ”)×$Ñ$Ñ$Ø×'Ñ'¨¨WÓ5Ð5à”I×)Ñ)Ñ)Ø×%Ñ% c¨7Ó3Ð3à”I—N‘NÒ"Ø�|‰|˜AŒ 4§:¡:¨a£=´I×4JÑ4JÒ#JØ—‘ s¨GÓ4Ð4à×'Ñ'¨¨WÓ5Ð5à�Y‰Y‹[œIŸM™MÒ)Ø× Ñ ¤§¡Ô0Ø—?‘? 3¨Ó0Ð0à�_‰_˜SÔ!Ø�|‰|˜AŒ 4§:¡:¨a£=´I·O±OÒ#CØ×'Ñ'¨¨WÓ5Ð5à×+Ñ+¨C°Ó9Ð9ð	 "r3   c                 ó   — t        |«      S rP   ©ÚDrtNegatedExpression)rJ   Ú
expressions     r4   Úmake_NegatedExpressionz DrtParser.make_NegatedExpressionl   s   € Ü# JÓ/Ð/r3   c                 ó"  — | j                  «       }| j                  d«      r2| j                  d«      t        j                  k(  r| j                  «        | j                  |«      }| j                  t        j                  «       t        ||d «      S ©Nr   )	Úhandle_refsrW   rX   r    ÚCOMMAÚhandle_condsr\   ÚCLOSEr!   )rJ   rQ   r_   ÚrefsÚcondss        r4   rY   zDrtParser.handle_DRSo   sh   € à×ÑÓ!ˆà�L‰L˜ŒO §
¡
¨1£´·±Ò @à�J‰JŒLØ×!Ñ! 'Ó*ˆØ×ÑœYŸ_™_Ô-Ü�4˜ Ó%Ð%r3   c                 óü  — | j                  t        j                  «       g }| j                  d«      rª| j	                  d«      t        j
                  k7  rˆ|r2| j	                  d«      t        j                  k(  r| j	                  «        |j                  | j                  d«      «       | j                  d«      r#| j	                  d«      t        j
                  k7  rŒˆ| j                  t        j
                  «       |S )Nr   Ú
quantified)	r\   r    r,   rW   rX   r-   ri   ÚappendÚget_next_token_variable)rJ   rl   s     r4   rh   zDrtParser.handle_refsz   s®   € Ø×ÑœY×3Ñ3Ô4ØˆØ�l‰l˜1Œo $§*¡*¨Q£-´9×3JÑ3JÒ"Já˜Ÿ
™
 1›¬¯©Ò8Ø—
‘
”Ø�K‰K˜×4Ñ4°\ÓBÔCð	 �l‰l˜1Œo $§*¡*¨Q£-´9×3JÑ3JÓ"Jð
 	×ÑœY×4Ñ4Ô5Øˆr3   c                 óü  — | j                  t        j                  «       g }| j                  d«      rª| j	                  d«      t        j
                  k7  rˆ|r2| j	                  d«      t        j                  k(  r| j	                  «        |j                  | j                  |«      «       | j                  d«      r#| j	                  d«      t        j
                  k7  rŒˆ| j                  t        j
                  «       |S rg   )	r\   r    r,   rW   rX   r-   ri   rp   Úprocess_next_expression)rJ   r_   rm   s      r4   rj   zDrtParser.handle_conds…   s®   € Ø×ÑœY×3Ñ3Ô4ØˆØ�l‰l˜1Œo $§*¡*¨Q£-´9×3JÑ3JÒ"Já˜Ÿ™ A›¬)¯/©/Ò9Ø—
‘
”Ø�L‰L˜×5Ñ5°gÓ>Ô?ð	 �l‰l˜1Œo $§*¡*¨Q£-´9×3JÑ3JÓ"Jð
 	×ÑœY×4Ñ4Ô5Øˆr3   c                 óœ   — | j                  |«      }| j                  d«       | j                  t        j                  «      }t        ||«      S )Nr&   )Úmake_VariableExpressionr\   rs   r    r.   ÚDrtProposition)rJ   rQ   r_   ÚvariableÚdrss        r4   r]   zDrtParser.handle_prop�   sA   € Ø×/Ñ/°Ó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©rJ   ÚfirstÚseconds      r4   Úmake_EqualityExpressionz!DrtParser.make_EqualityExpression–   s   € ô % U¨FÓ3Ð3r3   c                 óŽ   — |t         j                  k(  rd„ S |t         j                  v rt        S |t         j                  v rd„ }|S y)zbThis method serves as a hook for other logic parsers that
        have different boolean operatorsc                 ó   — t        | |d «      S rP   ©ÚDrtConcatenation©r}   r~   s     r4   ú<lambda>z9DrtParser.get_BooleanExpression_factory.<locals>.<lambda>Ÿ   s   € Ô)9¸%ÀÈÓ)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!   rl   rm   rƒ   r}   r~   Ú	Exceptionr„   s     r4   Úmake_imp_expressionzDDrtParser.get_BooleanExpression_factory.<locals>.make_imp_expression¤   sQ   € Ü˜e¤SÔ)Ü˜uŸz™z¨5¯;©;¸Ó?Ð?Ü˜eÔ%5Ô6Ü+¨E¯K©K¸¿¹ÀvÓNÐNÜÐ IÓJÐJr3   N)r    r*   rG   ÚDrtOrExpressionrH   )rJ   rQ   rŠ   s      r4   Úget_BooleanExpression_factoryz'DrtParser.get_BooleanExpression_factory›   sK   € ð ”)×$Ñ$Ò$ÙNÐNØ”I×%Ñ%Ñ%Ü"Ð"Ø”I×&Ñ&Ñ&òKð 'Ð&àr3   c                 ó   —  |||«      S rP   r2   )rJ   Úfactoryr}   r~   s       r4   Úmake_BooleanExpressionz DrtParser.make_BooleanExpression¯   s   € Ù�u˜fÓ%Ð%r3   c                 ó   — t        ||«      S rP   ©ÚDrtApplicationExpression)rJ   ÚfunctionÚarguments      r4   Úmake_ApplicationExpressionz$DrtParser.make_ApplicationExpression²   s   € Ü'¨°(Ó;Ð;r3   c                 ó*   — t        t        |«      «      S rP   )ÚDrtVariableExpressionr   )rJ   Únames     r4   ru   z!DrtParser.make_VariableExpressionµ   s   € Ü$¤X¨d£^Ó4Ð4r3   c                 ó   — t        ||«      S rP   )ÚDrtLambdaExpression)rJ   Ú	variablesÚterms      r4   Úmake_LambdaExpressionzDrtParser.make_LambdaExpression¸   s   € Ü" 9¨dÓ3Ð3r3   N)r'   r(   r)   Ú__doc__rA   rN   rR   r`   re   rY   rh   rj   r]   r   rŒ   r�   r•   ru   r�   r2   r3   r4   r6   r6   :   sP   „ Ù.ò
ò!ò+ò:ò20ò	&ò	ò	ò-ò4ò
ò(&ò<ò5ó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y)ÚDrtExpressionz_
    This is the base abstract DRT Expression from which every DRT
    Expression extends.
    c                 ó8   — | j                   j                  |«      S rP   )Ú_drt_parserÚparse)ÚclsÚss     r4   Ú
fromstringzDrtExpression.fromstringÄ   s   € à�‰×$Ñ$ QÓ'Ð'r3   c                 ó   — t        | |«      S rP   r‘   ©rJ   Úothers     r4   ÚapplytozDrtExpression.applytoÈ   s   € Ü'¨¨eÓ4Ð4r3   c                 ó   — t        | «      S rP   rb   rM   s    r4   Ú__neg__zDrtExpression.__neg__Ë   s   € Ü# DÓ)Ð)r3   c                 ó   — t         S rP   )ÚNotImplementedr¨   s     r4   Ú__and__zDrtExpression.__and__Î   s   € ÜÐr3   c                 ó>   — t        |t        «      sJ ‚t        | |«      S rP   )rˆ   r    r‹   r¨   s     r4   Ú__or__zDrtExpression.__or__Ñ   s   € Ü˜%¤Ô/Ð/Ð/Ü˜t UÓ+Ð+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!   rl   rm   rƒ   r}   r~   r‰   r¨   s     r4   Ú__gt__zDrtExpression.__gt__Õ   sa   € Ü˜%¤Ô/Ð/Ð/Ü�dœCÔ Ü�t—y‘y $§*¡*¨eÓ4Ð4Ü�dÔ,Ô-Ü# D§J¡J°·±¸UÓCÐCÜÐAÓBÐBr3   Nc                 óÂ   — t        |t        «      sJ ‚| j                  «       j                  «       }|j                  «       j                  «       }|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)rJ   r©   ÚproverÚf1Úf2s        r4   r·   zDrtExpression.equivÝ   sN   € ô ˜%¤Ô/Ð/Ð/à�]‰]‹_× Ñ Ó"ˆØ�^‰^Ó×!Ñ!Ó#ˆØ�x‰x˜˜FÓ#Ð#r3   c                 óF   — t        d| j                  j                  z  «      ‚)Nz#'%s' object has no attribute 'type')ÚAttributeErrorÚ	__class__r'   rM   s    r4   ÚtypezDrtExpression.typeì   s!   € äØ1°D·N±N×4KÑ4KÑKó
ð 	
r3   c                 ó   — t        «       ‚rP   ©ÚNotImplementedError)rJ   Ú	signatures     r4   Ú	typecheckzDrtExpression.typecheckò   s   € Ü!Ó#Ð#r3   c                 ó   — t        | |d «      S rP   r‚   r¨   s     r4   Ú__add__zDrtExpression.__add__õ   s   € Ü  e¨TÓ2Ð2r3   c                 ó   — 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À   ©rJ   Ú	recursives     r4   Úget_refszDrtExpression.get_refsø   s   € ô "Ó#Ð#r3   c                 óø   — t        | t        «      xri t        | j                  t        «      xrM | j                  j                  j
                  t        j                  k(  xr t        | j                  t        «      S )zIs self of the form "PRO(x)"?)
rˆ   r’   r“   ÚDrtAbstractVariableExpressionrw   r˜   r    r+   r”   ÚDrtIndividualVariableExpressionrM   s    r4   Úis_pronoun_functionz!DrtExpression.is_pronoun_function   sd   € ô �tÔ5Ó6ò KÜ˜4Ÿ=™=Ô*GÓHòKà—‘×&Ñ&×+Ñ+¬y×/@Ñ/@Ñ@òKô ˜4Ÿ=™=Ô*IÓJð		
r3   c                 ó   — t        ||«      S rP   rz   r|   s      r4   r   z%DrtExpression.make_EqualityExpression	  s   € Ü$ U¨FÓ3Ð3r3   c                 ó   — t        |«      S rP   )r—   )rJ   rw   s     r4   ru   z%DrtExpression.make_VariableExpression  s   € Ü$ XÓ.Ð.r3   c                 ó   — t        | «      S rP   )Úresolve_anaphorarM   s    r4   rÑ   zDrtExpression.resolve_anaphora  s   € Ü Ó%Ð%r3   c                 ó<   — | j                  d„ | j                  «      S )Nc                 ó"   — | j                  «       S rP   )Úeliminate_equality)Úes    r4   r…   z2DrtExpression.eliminate_equality.<locals>.<lambda>  s   € ¨q×/CÑ/CÓ/E€ r3   )Úvisit_structuredr½   rM   s    r4   rÔ   z DrtExpression.eliminate_equality  s   € Ø×$Ñ$Ñ%EÀtÇ~Á~ÓVÐVr3   c                 ó@   — dj                  | j                  «       «      S )zG
        Draw the DRS
        :return: the pretty print string
        ú
)ÚjoinÚ_prettyrM   s    r4   Úpretty_formatzDrtExpression.pretty_format  s   € ð
 �y‰y˜Ÿ™›Ó(Ð(r3   c                 ó6   — t        | j                  «       «       y rP   )ÚprintrÛ   rM   s    r4   Úpretty_printzDrtExpression.pretty_print  s   € Üˆd× Ñ Ó"Õ#r3   c                 ó6   — t        | «      j                  «        y rP   )Ú	DrsDrawerÚdrawrM   s    r4   rá   zDrtExpression.draw  s   € Ü�$‹×ÑÕr3   rP   ©F)r'   r(   r)   rž   r6   r¢   Úclassmethodr¦   rª   r¬   r¯   r±   r³   r·   Úpropertyr¾   rÃ   rÅ   rÉ   rÍ   r   ru   rÑ   rÔ   rÛ   rÞ   rá   r2   r3   r4   r    r    ¼   s�   „ ññ
 “+€Kàñ(ó ð(ò5ò*òò,òCó$ð ñ
ó ð
ó
$ò3ó$ò
ò4ò/ò&òWò)ò$ór3   r    c                   ó|   — 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y)r!   z%A Discourse Representation Structure.Nc                 ó.   — || _         || _        || _        y)z²
        :param refs: list of ``DrtIndividualVariableExpression`` for the
            discourse referents
        :param conds: list of ``Expression`` for the conditions
        N)rl   rm   Ú
consequent)rJ   rl   rm   rç   s       r4   rA   zDRS.__init__&  s   € ð ˆŒ	ØˆŒ
Ø$ˆ�r3   c                 óF  — || j                   v r±|s| S | j                   j                  |«      }| j                  r| j                  j                  ||d|«      }nd}t	        | j                   d| |j
                  gz   | j                   |dz   d z   | j                  D �cg c]  }|j                  ||d|«      ‘Œ c}|«      S |rät        | j                   «      |j                  «       z  D ]»  }t        |«      }	t        |	«      }
| j                   j                  |«      }| j                  r| j                  j                  ||
d|«      }nd}t	        | j                   d| |	gz   | j                   |dz   d z   | j                  D �cg c]  }|j                  ||
d|«      ‘Œ c}|«      } Œ½ | j                  r| j                  j                  ||||«      }nd}t	        | j                   | j                  D �cg c]  }|j                  ||||«      ‘Œ c}|«      S c c}w c c}w c c}w )ú_Replace all instances of variable v with expression E in self,
        where v is free in self.TNr8   )rl   Úindexrç   Úreplacer!   rw   rm   ÚsetÚfreer   r—   )rJ   rw   rd   Úreplace_boundÚalpha_convertÚirç   ÚcondÚrefÚnewvarÚnewvarexs              r4   rë   zDRS.replace0  s  € ð �t—y‘yÑ á Ø�à—I‘I—O‘O HÓ-�Ø—?’?Ø!%§¡×!8Ñ!8Ø  *¨d°Mó"‘Jð "&�JÜØ—I‘I˜b˜q�M Z×%8Ñ%8Ð$9Ñ9¸D¿I¹IÀaÈ!ÁeÀgÐ<NÑNð %)§J¡Jöà ð Ÿ™ X¨z¸4ÀÕOòð óð ñ ô ˜tŸy™y›>¨J¯O©OÓ,=Ñ=ò �CÜ,¨SÓ1�FÜ4°VÓ<�HØŸ	™	Ÿ™¨Ó,�AØ—’Ø%)§_¡_×%<Ñ%<Ø ¨4°ó&™
ð &*˜
ÜØŸ	™	 " 1˜¨¨Ñ0°4·9±9¸QÀ¹U¸WÐ3EÑEð )-¯
©
öà $ð !ŸL™L¨¨h¸¸mÕLòð #ó‘Dðð( �ŠØ!Ÿ_™_×4Ñ4Ø˜j¨-¸ó‘
ð "�
ÜØ—	‘	ð !%§
¡
öàð —L‘L ¨:°}ÀmÕTòð óð ùòIùò,ùò s   ÂH
ÆHÇ1H
c                 ó8  — t        t        j                  | j                  D �cg c]  }|j	                  «       ‘Œ c}t        «       «      }| j                  r)|j                  | j                  j	                  «       «       |t        | j                  «      z
  S c c}w )z:see: Expression.free())	r   ÚoperatorÚor_rm   rí   rì   rç   Úupdaterl   )rJ   ÚcÚ
conds_frees      r4   rí   zDRS.freen  sf   € äœHŸL™L¸T¿Z¹ZÖ*H¸¨1¯6©6­8Ò*HÌ#Ë%ÓPˆ
Ø�?Š?Ø×Ñ˜dŸo™o×2Ñ2Ó4Ô5ØœC §	¡	›NÑ*Ð*ùò +Is   £B
c                 ó  — |rt| j                   t        t        j                  d„ | j                  D «       «      «      z   }| j
                  r*|j                  | j
                  j                  d«      «       |S | j                   S )ú#:see: AbstractExpression.get_refs()c              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w©TN)rÉ   )Ú.0rù   s     r4   ú	<genexpr>zDRS.get_refs.<locals>.<genexpr>y  s   è ø€ Ò#I¸ A§J¡J¨t×$4Ñ#Iùs   ‚T)rl   Úlistr   Úfrom_iterablerm   rç   ÚextendrÉ   )rJ   rÈ   Ú
conds_refss      r4   rÉ   zDRS.get_refsu  sh   € áØŸ™¤TÜ×#Ñ#Ñ#I¸d¿j¹jÔ#IÓIó&ñ ˆJð �ŠØ×!Ñ! $§/¡/×":Ñ":¸4Ó"@ÔAØÐà—9‘9Ðr3   c                 óª   — t        t        || j                  «      «      }| j                  r!|j	                   || j                  «      «        ||«      S ©z:see: Expression.visit())r  Úmaprm   rç   rp   )rJ   r“   Ú
combinatorÚpartss       r4   Úvisitz	DRS.visit�  s>   € ä”S˜ 4§:¡:Ó.Ó/ˆØ�?Š?Ø�L‰L™ $§/¡/Ó2Ô3Ù˜%Ó Ð r3   c           	      ó¤   — | j                   r || j                   «      nd} || j                  t        t        || j                  «      «      |«      S )ú#:see: Expression.visit_structured()N)rç   rl   r  r  rm   )rJ   r“   r  rç   s       r4   rÖ   zDRS.visit_structuredˆ  s;   € à26·/²/‘X˜dŸo™oÔ.Àtˆ
Ù˜$Ÿ)™)¤T¬#¨h¸¿
¹
Ó*CÓ%DÀjÓQÐQr3   c                 ó4  — | }d}|t        |j                  «      k  �rD|j                  |   }t        |t        «      �rt        |j                  t
        «      rët        |j                  t
        «      rÑt        t        t        |j                  «      |j                  j                  hz
  «      |j                  d | |j                  |dz   d  z   |j                  «      }|j                  j                  |j                  j                  k7  r4|j                  |j                  j                  |j                  dd«      }d}|dz  }|dz  }|t        |j                  «      k  r�ŒDg }|j                  D ]h  }|j                  «       }|j                  «       }t        |t        «      r%|j                  s|j                  s|j                  sŒX|j!                  |«       Œj |j                  r|j                  j                  «       nd }t        |j                  ||«      S )Nr   r8   F)Úlenrm   rˆ   r   r}   r   r~   r!   r  rì   rl   rw   rç   rë   rÔ   rµ   rp   )rJ   rx   rð   rñ   rm   Únew_condÚnew_cond_simprç   s           r4   rÔ   zDRS.eliminate_equality�  s§  € ØˆØˆØ”#�c—i‘i“.Ó Ø—9‘9˜Q‘<ˆDä˜4Ô!3Õ4Ü˜tŸz™zÔ+EÔFÜ˜tŸ{™{Ô,FÔGäÜœ˜SŸX™X›¨$¯+©+×*>Ñ*>Ð)?Ñ?Ó@Ø—I‘I˜b˜q�M C§I¡I¨a°!©e¨gÐ$6Ñ6Ø—N‘Nó�ð
 —;‘;×'Ñ'¨4¯:©:×+>Ñ+>Ò>ØŸ+™+ d§k¡k×&:Ñ&:¸D¿J¹JÈÈuÓU�CØ�AØ�Q‘�Ø�‰FˆAð! ”#�c—i‘i“.Ô ð$ ˆØ—I‘Iò 		'ˆDØ×.Ñ.Ó0ˆHØ$×-Ñ-Ó/ˆMä˜}¬cÔ2Ø ×%Ò%Ø ×&Ò&Ø ×+Ó+à—‘˜XÕ&ð		'ð =@¿NºN�S—^‘^×6Ñ6Ô8ÐPTˆ
Ü�3—8‘8˜U JÓ/Ð/r3   c                 ó   — | j                   rªd }| j                  r6t        t        | j                  D �cg c]  }|j	                  «       ‘Œ c}«      }|r%t        || j                   j	                  «       «      }n| j                   j	                  «       }| j                  d d d…   D ]  }t        ||«      }Œ |S | j                  st        d«      ‚t        t        | j                  D �cg c]  }|j	                  «       ‘Œ c}«      }t        t        | j                  | j                  «      d d d…   «      D ]  }t        ||«      }Œ |S c c}w c c}w )Néÿÿÿÿz-Cannot convert DRS with no conditions to FOL.)rç   rm   r   r   r¶   r   rl   r   r‰   r  r   Ú_order_ref_stringsr   )rJ   Úaccumrù   rò   s       r4   r¶   zDRS.fol±  s  € Ø�?Š?ØˆEØ�zŠzÜœ}ÀÇ
Á
Ö.K¸1¨q¯u©u­wÒ.KÓL�áÜ% e¨T¯_©_×-@Ñ-@Ó-BÓC‘àŸ™×+Ñ+Ó-�à—y‘y¡ 2 ‘ò 2�Ü% c¨5Ó1‘ð2ð ˆLð —:’:ÜÐ OÓPÐPÜœ=¸D¿J¹JÖ*G°q¨1¯5©5­7Ò*GÓHˆEÜœ8 T×%<Ñ%<¸T¿Y¹YÓ%GÉÈ"ÈÑ%MÓNò 5�Ü(¨¨eÓ4‘ð5àˆLùò% /Lùò +Hs   ³E
Ã&E
c           	      óº  — dj                  | j                  | j                  «      «      }| j                  D �cg c]  }t	        d„ |j                  «       «      ‘Œ c}D ��cg c]  }|D ]  }|‘Œ Œ }}}t        t        |«      gt        t        t        |«      «      z   «      }dd|z  z   dz   d|j                  |«      z   dz   dd	|z  z   d
z   g|D �cg c]  }d|j                  |«      z   dz   ‘Œ c}z   dd|z  z   dz   gz   }| j                  r=t        j                  |t        j                  | j                  j                  «       «      S |S c c}w c c}}w c c}w )Nú c                 ó"   — | j                  «       S rP   )Ústrip)r¥   s    r4   r…   zDRS._pretty.<locals>.<lambda>Ï  s   €  §¡£€ r3   z _Ú_z_ z| z |z|-ú-z-|z|_z_|)rÙ   r  rl   rm   ÚfilterrÚ   Úmaxr  r  r  Úljustrç   ÚDrtBinaryExpressionÚ_assemble_prettyr    ÚIMP)rJ   Ú	refs_linerñ   Ú	cond_lineÚ
cond_linesÚlengthÚlinerx   s           r4   rÚ   zDRS._prettyÉ  sq  € Ø—H‘H˜T×4Ñ4°T·Y±YÓ?Ó@ˆ	ð
 IMÏ
É
öØ@D”Ñ*¨D¯L©L«NÕ;ò÷
àð "ò
ð
 ò	 ð
Øð
ˆ
ñ 
ô ”c˜)“nÐ%¬¬S´°jÓ-AÓ(BÑBÓCˆð �s˜V‘|Ñ# dÑ*Ø�y—‘ vÓ.Ñ.°Ñ5Ø�s˜V‘|Ñ# dÑ*ðð
 =GÖG°Dˆt�d—j‘j Ó(Ñ(¨4Ó/ÒGñHð �c˜F‘lÑ" TÑ)Ð*ñ+ð 	ð �?Š?Ü&×7Ñ7Ø”Y—]‘] D§O¡O×$;Ñ$;Ó$=óð ð ˆ
ùò'ùó
ùò Hs   ¹"EÁ!EÃEc                 óŽ  — |D �cg c]  }d|z  ‘Œ	 }}g }g }g }g }|D ]j  }t        |«      r|j                  |«       Œ t        |«      r|j                  |«       Œ=t        |«      r|j                  |«       ŒZ|j                  |«       Œl t	        |«      t	        |d„ ¬«      z   t	        |d„ ¬«      z   t	        |d„ ¬«      z   S c c}w )Nú%sc                 óF   — t        | dd  dgt        | dd  «      dk(     «      S )Nr9   r  r   ©Úintr  ©Úvs    r4   r…   z(DRS._order_ref_strings.<locals>.<lambda>ô  s(   € ¬s°A°a°b°E¸2°;¼sÀ1ÀQÀRÀ5»zÈQ¹Ñ3OÓ/P€ r3   )Úkeyc           	      óP   — | d   t        | dd  dgt        | dd  «      dk(     «      fS ©Nr   r8   r  r)  r+  s    r4   r…   z(DRS._order_ref_strings.<locals>.<lambda>õ  s2   € ¨q°©t´S¸!¸A¸B¸%À¸ÄSÈÈ1È2ÈÃZÐSTÁ_Ñ9UÓ5VÐ.W€ r3   c           	      óP   — | d   t        | dd  dgt        | dd  «      dk(     «      fS r/  r)  r+  s    r4   r…   z(DRS._order_ref_strings.<locals>.<lambda>ö  s2   € ¨a°©d´C¸¸1¸2¸À¸ÄCÈÈ!È"ÈÃJÐRSÁOÑ8TÓ4UÐ-V€ r3   )r   rp   r   r   Úsorted)	rJ   rl   rò   ÚstringsÚind_varsÚ	func_varsÚ
event_varsÚ
other_varsr¥   s	            r4   r  zDRS._order_ref_stringsã  sÐ   € Ø)-Ö. #�4˜#“:Ð.ˆÐ.ØˆØˆ	Øˆ
Øˆ
Øò 	%ˆAÜ˜Œ|Ø—‘ Õ"Ü˜A”Ø× Ñ  Õ#Ü˜Q”Ø×!Ñ! !Õ$à×!Ñ! !Õ$ð	%ô �:ÓÜ�ZÑ%PÔQñRä�YÑ$WÔXñYô �XÑ#VÔWñXð	
ùò /s   …Cc                 óþ  — t        |t        «      rít        | j                  «      t        |j                  «      k(  rÂ|}t	        | j                  |j                  «      D ])  \  }}| j                  |«      }|j                  ||d«      }Œ+ | j                  |j                  k(  r[t        | j                  «      t        |j                  «      k(  r0t	        | j                  |j                  «      D ]  \  }}||k(  rŒ y yy©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  rl   Úzipru   rë   rç   rm   )rJ   r©   Úconverted_otherÚr1Úr2ÚvarexÚc1Úc2s           r4   Ú__eq__z
DRS.__eq__ù  sä   € ô �eœSÔ!Ü�4—9‘9‹~¤ U§Z¡Z£Ò0Ø"'�Ü! $§)¡)¨_×-AÑ-AÓBò O‘F�B˜Ø ×8Ñ8¸Ó<�EØ&5×&=Ñ&=¸bÀ%ÈÓ&N‘OðOð —?‘? o×&@Ñ&@Ò@ÄSØ—J‘JóFä˜×.Ñ.Ó/òF0ô #& d§j¡j°/×2GÑ2GÓ"Hò )™˜˜BØ " b£Ù#(ð)ð  Ør3   c                 ó   — | |k(   S rP   r2   r¨   s     r4   Ú__ne__z
DRS.__ne__  ó   € Ø˜5‘=Ð Ð r3   c                 óh  — dj                  dj                  | j                  | j                  «      «      dj                  d„ | j                  D «       «      «      }| j
                  rKt        j                  |z   dz   t        j                  z   dz   d| j
                  z  z   t        j                  z   S |S )Nz([{}],[{}])ú,ú, c              3   ó&   K  — | ]	  }d |z  –— Œ y­w©r'  Nr2   )rÿ   rñ   s     r4   r   zDRS.__str__.<locals>.<genexpr>  s   è ø€ Ò9 d�d˜T•kÑ9ùó   ‚r  r'  )
ÚformatrÙ   r  rl   rm   rç   r    rV   r   rk   ©rJ   rx   s     r4   Ú__str__zDRS.__str__  s¨   € Ø×"Ñ"Ø�H‰H�T×,Ñ,¨T¯Y©YÓ7Ó8Ø�I‰IÑ9¨d¯j©jÔ9Ó9ó
ˆð �?Š?ä—‘Øñàñô —-‘-ñ ð ñ	ð
 ˜Ÿ™Ñ(ñ)ô —/‘/ñ"ðð ˆ
r3   rP   ©FTrâ   )r'   r(   r)   rž   rA   rë   rí   rÉ   r
  rÖ   rÔ   r¶   rÚ   r  r@  rB  r   Ú__hash__rL  r2   r3   r4   r!   r!   #  sV   „ Ù/ó%ó<ò|+ó
ò!òRò
"0òHò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)rw   s    r4   r—   r—   "  sT   € ô
 �—‘ÔÜ.¨xÓ8Ð8Ü	�H—M‘MÔ	"Ü,¨XÓ6Ð6Ü	�X—]‘]Ô	#Ü)¨(Ó3Ð3ä$ XÓ.Ð.r3   c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)rË   c                 ó   — | S rP   r2   rM   s    r4   r¶   z!DrtAbstractVariableExpression.fol2  ó   € Øˆr3   c                 ó   — g S ©rü   r2   rÇ   s     r4   rÉ   z&DrtAbstractVariableExpression.get_refs5  s   € àˆ	r3   c                 ó4   — d| z  }dt        |«      z  }||||gS ©Nr'  r  ©r  ©rJ   r¥   Úblanks      r4   rÚ   z%DrtAbstractVariableExpression._pretty9  s'   € Ø�4‰KˆØ”c˜!“f‘ˆØ�u˜a Ð'Ð'r3   c                 ó   — | S rP   r2   rM   s    r4   rÔ   z0DrtAbstractVariableExpression.eliminate_equality>  rU  r3   Nrâ   )r'   r(   r)   r¶   rÉ   rÚ   rÔ   r2   r3   r4   rË   rË   1  s   „ òóò(ó
r3   rË   c                   ó   — e Zd Zy)rÌ   N©r'   r(   r)   r2   r3   r4   rÌ   rÌ   B  ó   „ ð 	r3   rÌ   c                   ó   — e Zd Zy)rP  Nr_  r2   r3   r4   rP  rP  H  r`  r3   rP  c                   ó   — e Zd Zy)rQ  Nr_  r2   r3   r4   rQ  rQ  N  r`  r3   rQ  c                   ó   — e Zd Zy)rR  Nr_  r2   r3   r4   rR  rR  T  ó   „ Ør3   rR  c                   ój   — 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y)rv   c                 ó    — || _         || _        y rP   ©rw   rx   )rJ   rw   rx   s      r4   rA   zDrtProposition.__init__Y  s   € Ø ˆŒØˆ�r3   c           	      ó  — | j                   |k(  rIt        |t        «      sJ d«       ‚t        |j                   | j                  j                  ||||«      «      S t        | j                   | j                  j                  ||||«      «      S )Nz4Can only replace a proposition label with a variable)rw   rˆ   rË   rv   rx   rë   )rJ   rw   rd   rî   rï   s        r4   rë   zDrtProposition.replace]  sŽ   € Ø�=‰=˜HÒ$ÜØÔ9ôð FàEóFð ô "Ø×#Ñ#Ø—‘× Ñ  ¨:°}ÀmÓTóð ô
 "Ø—‘Ø—‘× Ñ  ¨:°}ÀmÓTóð r3   c                 ó^   — t        | j                  | j                  j                  «       «      S rP   )rv   rw   rx   rÔ   rM   s    r4   rÔ   z!DrtProposition.eliminate_equalityl  s    € Ü˜dŸm™m¨T¯X©X×-HÑ-HÓ-JÓKÐKr3   c                 ó@   — |r| j                   j                  d«      S g S ©NT)rx   rÉ   rÇ   s     r4   rÉ   zDrtProposition.get_refso  s   € Ù*3ˆt�x‰x× Ñ  Ó&Ð;¸Ð;r3   c                 ó    — | j                   |j                   k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rP   )r½   rw   rx   r¨   s     r4   r@  zDrtProposition.__eq__r  sA   € à�N‰N˜eŸo™oÑ-ò &Ø—‘ §¡Ñ/ò&à—‘˜EŸI™IÑ%ð	
r3   c                 ó   — | |k(   S rP   r2   r¨   s     r4   rB  zDrtProposition.__ne__y  rC  r3   c                 ó6   — | j                   j                  «       S rP   )rx   r¶   rM   s    r4   r¶   zDrtProposition.fol~  s   € Ø�x‰x�|‰|‹~Ðr3   c                 ó>  — | j                   j                  «       }dt        d| j                  z  «      z  }|d d D �cg c]
  }|dz   |z   ‘Œ c}|dd D �cg c]  }d| j                  z  dz   |z   ‘Œ c}z   |dd  D �cg c]
  }|dz   |z   ‘Œ c}z   S c c}w c c}w c c}w )Nr  r'  r8   r9   r&   )rx   rÚ   r  rw   )rJ   Údrs_sr\  r%  s       r4   rÚ   zDrtProposition._pretty�  s¦   € Ø—‘× Ñ Ó"ˆØ”c˜$ §¡Ñ.Ó/Ñ/ˆà,1°"°1¨IÖ6 DˆU�S‰[˜4ÓÒ6Ø=BÀ1ÀQ¸ZÖH°Tˆt�d—m‘mÑ# cÑ)¨DÓ0ÒHñIà.3°A°B¨iÖ8 dˆu�s‰{˜TÓ!Ò8ñ9ð	
ùÚ6ùÚHùÚ8s   ½BÁBÁ<Bc                 ó4   —  | || j                   «      g«      S r  )rx   ©rJ   r“   r  s      r4   r
  zDrtProposition.visitŠ  s   € á™8 D§H¡HÓ-Ð.Ó/Ð/r3   c                 óH   —  || j                    || j                  «      «      S )r  rg  rr  s      r4   rÖ   zDrtProposition.visit_structuredŽ  s   € á˜$Ÿ-™-©°$·(±(Ó);Ó<Ð<r3   c                 ó<   — d| j                   › d| j                  › d�S )Nzprop(rF  ú)rg  rM   s    r4   rL  zDrtProposition.__str__’  s   € Ø�t—}‘}�o R¨¯© z°Ð3Ð3r3   NrM  râ   )r'   r(   r)   rA   rë   rÔ   rÉ   r@  rB  r   rN  r¶   rÚ   r
  rÖ   rL  r2   r3   r4   rv   rv   X  sG   „ òóòLó<ò
ò!ð ×"Ñ"€Hòò
ò0ò=ó4r3   rv   c                   ó    — e Zd Zd„ Zdd„Zd„ Zy)rc   c                 óH   — t        | j                  j                  «       «      S rP   )r   rœ   r¶   rM   s    r4   r¶   zDrtNegatedExpression.fol—  s   € Ü  §¡§¡£Ó1Ð1r3   c                 ó8   — | j                   j                  |«      S rW  )rœ   rÉ   rÇ   s     r4   rÉ   zDrtNegatedExpression.get_refsš  s   € à�y‰y×!Ñ! )Ó,Ð,r3   c                 ó  — | j                   j                  «       }|d d D �cg c]  }d|z   ‘Œ	 c}|dd D �cg c]  }d|z   ‘Œ	 c}z   |dd D �cg c]  }d|z   ‘Œ	 c}z   |dd  D �cg c]  }d|z   ‘Œ	 c}z   S c c}w c c}w c c}w c c}w )Nr9   ú    r:   z__  r;   z  | )rœ   rÚ   )rJ   Ú
term_linesr%  s      r4   rÚ   zDrtNegatedExpression._prettyž  s–   € Ø—Y‘Y×&Ñ&Ó(ˆ
à'1°"°1 ~Ö6˜tˆV�d‹]Ò6Ø)3°A°a¨Ö9 ˆv˜‹}Ò9ñ:à)3°A°a¨Ö9 ˆv˜‹}Ò9ñ:ð *4°A°B¨Ö8 ˆv˜‹}Ò8ñ9ð	
ùÚ6ùÚ9ùÚ9ùÚ8s   ¢A6·A;ÁB Á%BNrâ   ©r'   r(   r)   r¶   rÉ   rÚ   r2   r3   r4   rc   rc   –  s   „ ò2ó-ó
r3   rc   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zdd„Zy)rš   c           	      ó‚   — | j                  || j                  j                  | j                  t	        |«      d«      «      S )zµRename 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ë   rw   r—   )rJ   ró   s     r4   rï   z!DrtLambdaExpression.alpha_convert©  s8   € ð
 �~‰~ØØ�I‰I×Ñ˜dŸm™mÔ-BÀ6Ó-JÈDÓQó
ð 	
r3   c                 ó^   — t        | j                  | j                  j                  «       «      S rP   )r   rw   rœ   r¶   rM   s    r4   r¶   zDrtLambdaExpression.fol³  s   € Ü §¡¨t¯y©y¯}©}«Ó?Ð?r3   c                 ól  — | j                   g}| j                  }|j                  | j                  k(  rA|j                  |j                   «       |j                  }|j                  | j                  k(  rŒAdj	                  d„ |D «       «      t
        j                  z   }|j                  «       }dt        |«      z  }|d d D �cg c]
  }d|z   |z   ‘Œ c}|dd D �cg c]
  }d|z   |z   ‘Œ c}z   |dd D �cg c]
  }d|z   |z   ‘Œ c}z   |dd  D �cg c]
  }d|z   |z   ‘Œ c}z   S c c}w c c}w c c}w c c}w )	Nr  c              3   ó&   K  — | ]	  }d |z  –— Œ y­wrH  r2   )rÿ   r,  s     r4   r   z.DrtLambdaExpression._pretty.<locals>.<genexpr>¼  s   è ø€ Ò:¨1˜d Q�hÑ:ùrI  r8   rz  r9   z \  r:   z /\ )	rw   rœ   r½   rp   rÙ   r    ÚDOTrÚ   r  )rJ   r›   rœ   Ú
var_stringr{  r\  r%  s          r4   rÚ   zDrtLambdaExpression._pretty¶  s%  € Ø—]‘]�Oˆ	Ø�y‰yˆØ�n‰n §¡Ò.Ø×Ñ˜TŸ]™]Ô+Ø—9‘9ˆDð �n‰n §¡Ó.ð —X‘XÑ:°	Ô:Ó:¼Y¿]¹]ÑJˆ
Ø—\‘\“^ˆ
Ø”c˜*“oÑ%ˆà/9¸"¸1¨~Ö> tˆV�e‰^˜dÓ"Ò>Ø2<¸Q¸q°/ÖB¨$ˆw˜‰ Ó%ÒBñCà7AÀ!ÀA°ÖG¨tˆw˜Ñ# dÓ*ÒGñHð 2<¸A¸B°Ö@¨ˆv˜‰~ Ó$Ò@ñAð	
ùÚ>ùÚBùÚGùÚ@s   ÃD"ÃD'Ã4D,ÄD1c                 ór   — |r)| j                   g| j                  j                  d«      z   S | j                   gS ©rü   T)rw   rœ   rÉ   rÇ   s     r4   rÉ   zDrtLambdaExpression.get_refsÆ  s7   € ñ ;DˆT�]‰]ˆO˜dŸi™i×0Ñ0°Ó6Ñ6ð	
ØJNÏ-É-Èð	
r3   Nrâ   )r'   r(   r)   rï   r¶   rÚ   rÉ   r2   r3   r4   rš   rš   ¨  s   „ ò
ò@ò
ô 
r3   rš   c                   ó0   — e Zd Zdd„Zd„ Zed„ «       Zd„ Zy)r  c                 óx   — |r7| j                   j                  d«      | j                  j                  d«      z   S g S r…  )r}   rÉ   r~   rÇ   s     r4   rÉ   zDrtBinaryExpression.get_refsÎ  s;   € ñ GPˆD�J‰J×Ñ Ó%¨¯©×(<Ñ(<¸TÓ(BÑBð	
ØUWð	
r3   c                 ó°   — t         j                  | j                  | j                  «      | j	                  «       | j                  | j
                  «      «      S rP   )r  r  Ú_pretty_subexr}   ÚgetOpr~   rM   s    r4   rÚ   zDrtBinaryExpression._prettyÔ  sB   € Ü"×3Ñ3Ø×Ñ˜tŸz™zÓ*Ø�J‰J‹LØ×Ñ˜tŸ{™{Ó+ó
ð 	
r3   c                 óØ  — t        t        | «      t        |«      «      }t        | |«      } t        ||«      }dt        |«      z  }t        t	        | |«      «      }|d d D ��cg c]  \  }}d|z   dz   |z   dz   |z   dz   ‘Œ c}}|dd D ��cg c]  \  }}d|z   dz   |z   dz   |z   dz   ‘Œ c}}z   |dd  D ��cg c]  \  }}d|z   dz   |z   dz   |z   dz   ‘Œ c}}z   S c c}}w c c}}w c c}}w )Nr  r9   r:   ú(ru  )r  r  Ú_pad_verticallyr  r9  )Úfirst_linesÚopÚsecond_linesÚ	max_linesr\  Úfirst_second_linesÚ
first_lineÚsecond_lines           r4   r  z$DrtBinaryExpression._assemble_prettyÛ  s3  € äœ˜KÓ(¬#¨lÓ*;Ó<ˆ	Ü% k°9Ó=ˆÜ& |°YÓ?ˆØ”c˜"“g‘ˆÜ!¤# k°<Ó"@ÓAÐð 0BÀ"À1Ð/E÷á+�J ð �jÑ  3Ñ&¨Ñ.°Ñ4°{ÑBÀSÓHóð 0BÀ!ÀAÐ/F÷á+�J ð �jÑ  3Ñ&¨Ñ+¨cÑ1°KÑ?À#ÓEóñ	ð 0BÀ!À"Ð/E÷á+�J ð �jÑ  3Ñ&¨Ñ.°Ñ4°{ÑBÀSÓHóñð	
ùóùóùós   Á"CÂC Â6C&c                 ó"   — |j                  «       S rP   )rÚ   )rJ   Úsubexs     r4   r‰  z!DrtBinaryExpression._pretty_subexñ  s   € Ø�}‰}‹Ðr3   Nrâ   )r'   r(   r)   rÉ   rÚ   Ústaticmethodr  r‰  r2   r3   r4   r  r  Í  s%   „ ó
ò
ð ñ
ó ð
ó*r3   r  c                   ó   — e Zd Zy)ÚDrtBooleanExpressionNr_  r2   r3   r4   r™  r™  õ  rd  r3   r™  c                   ó   — e Zd Zd„ Zd„ Zy)r‹   c                 óz   — t        | j                  j                  «       | j                  j                  «       «      S rP   )r   r}   r¶   r~   rM   s    r4   r¶   zDrtOrExpression.folú  s%   € Ü˜DŸJ™JŸN™NÓ,¨d¯k©k¯o©oÓ.?Ó@Ð@r3   c                 óš   — t        |t        «      r!|j                  «       D �cg c]  }|dd ‘Œ	 c}S t        j	                  | |«      S c c}w ©Nr8   r  )rˆ   r‹   rÚ   r™  r‰  ©rJ   r–  r%  s      r4   r‰  zDrtOrExpression._pretty_subexý  sA   € Ü�eœ_Ô-Ø+0¯=©=«?Ö; 4�D˜˜2’JÒ;Ð;Ü#×1Ñ1°$¸Ó>Ð>ùò <ó   £AN)r'   r(   r)   r¶   r‰  r2   r3   r4   r‹   r‹   ù  s   „ òAó?r3   r‹   c                   ó   — e Zd Zd„ Zy)r{   c                 óz   — t        | j                  j                  «       | j                  j                  «       «      S rP   )r   r}   r¶   r~   rM   s    r4   r¶   zDrtEqualityExpression.fol  s%   € Ü! $§*¡*§.¡.Ó"2°D·K±K·O±OÓ4EÓFÐFr3   N)r'   r(   r)   r¶   r2   r3   r4   r{   r{     s   „ óGr3   r{   c                   ó‚   — 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y)rƒ   zDRS of the form '(DRS + DRS)'Nc                 ó@   — t         j                  | ||«       || _        y rP   )r™  rA   rç   )rJ   r}   r~   rç   s       r4   rA   zDrtConcatenation.__init__  s   € Ü×%Ñ% d¨E°6Ô:Ø$ˆ�r3   c                 óž  — | j                   }| j                  }| j                  }|| j                  «       v rB|�r|j	                  ||||«      }|j	                  ||||«      }|rØ|j	                  ||||«      }nÃ|rƒt        | j                  d«      «      |j                  «       z  D ]U  }t        t        |«      «      }	|j	                  ||	d|«      }|j	                  ||	d|«      }|sŒB|j	                  ||	d|«      }ŒW |j	                  ||||«      }|j	                  ||||«      }|r|j	                  ||||«      }| j                  |||«      S )ré   T)
r}   r~   rç   rÉ   rë   rì   rí   r—   r   r½   )
rJ   rw   rd   rî   rï   r}   r~   rç   rò   r,  s
             r4   rë   zDrtConcatenation.replace  s[  € ð —
‘
ˆØ—‘ˆØ—_‘_ˆ
ð �t—}‘}“Ñ&ÚØŸ™Ø˜j¨-¸ó�ð  Ÿ™Ø˜j¨-¸ó�ñ Ø!+×!3Ñ!3Ø  *¨m¸]ó"‘Jñ ä˜tŸ}™}¨TÓ2Ó3°j·o±oÓ6GÑGò U�CÜ-¬o¸cÓ.BÓC�AØ!ŸM™M¨#¨q°$¸ÓF�EØ#Ÿ^™^¨C°°D¸-ÓH�FÚ!Ø%/×%7Ñ%7¸¸QÀÀmÓ%T™
ðUð —M‘M (¨J¸À}ÓUˆEØ—^‘^ H¨j¸-ÈÓWˆFÙØ'×/Ñ/Ø˜j¨-¸ó�
ð �~‰~˜e V¨ZÓ8Ð8r3   c                 óf   — | j                  «       }t        |t        «      rJ ‚|j                  «       S rP   )rµ   rˆ   rƒ   rÔ   rK  s     r4   rÔ   z#DrtConcatenation.eliminate_equality6  s-   € à�m‰m‹oˆÜ˜cÔ#3Ô4Ð4Ð4Ø×%Ñ%Ó'Ð'r3   c                 óX  — | j                   j                  «       }| j                  j                  «       }| j                  r| j                  j                  «       nd }t	        |t
        «      r¬t	        |t
        «      rœt        |j                  d«      «      t        |j                  d«      «      z  D ])  }t        t        |«      «      }|j                  ||d«      }Œ+ t        |j                  |j                  z   |j                  |j                  z   |«      S | j                  |||«      S rk  )r}   rµ   r~   rç   rˆ   r!   rì   rÉ   r—   r   rë   rl   rm   r½   )rJ   r}   r~   rç   rò   ró   s         r4   rµ   zDrtConcatenation.simplify<  sâ   € Ø—
‘
×#Ñ#Ó%ˆØ—‘×%Ñ%Ó'ˆØ37·?²?�T—_‘_×-Ñ-Ô/Èˆ
ä�eœSÔ!¤j°¼Ô&=ä˜5Ÿ>™>¨$Ó/Ó0´3°v·±ÀtÓ7LÓ3MÑMò ;�ä.¬¸sÓ/CÓD�ØŸ™¨¨V°TÓ:‘ð;ô
 �u—z‘z F§K¡KÑ/°·±¸v¿|¹|Ñ1KÈZÓXÐXà—>‘> %¨°Ó<Ð<r3   c                 óä   — | j                   j                  |«      | j                  j                  |«      z   }| j                  r,|r*|j	                  | j                  j                  d«      «       |S r…  )r}   rÉ   r~   rç   r  )rJ   rÈ   rl   s      r4   rÉ   zDrtConcatenation.get_refsL  sS   € à�z‰z×"Ñ" 9Ó-°·±×0DÑ0DÀYÓ0OÑOˆØ�?Š?™yØ�K‰K˜Ÿ™×0Ñ0°Ó6Ô7Øˆr3   c                 ó"   — t         j                  S rP   )r    r*   rM   s    r4   rŠ  zDrtConcatenation.getOpS  s   € Ü×!Ñ!Ð!r3   c                 ó¤  — t        |t        «      rÀ| j                  «       }|j                  «       }t        |«      t        |«      k(  r‰|}t	        ||«      D ])  \  }}| j                  |«      }|j                  ||d«      }Œ+ | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S yr8  )
rˆ   rƒ   rÉ   r  r9  ru   rë   r}   r~   rç   )rJ   r©   Ú	self_refsÚ
other_refsr:  r;  r<  r=  s           r4   r@  zDrtConcatenation.__eq__V  sÉ   € ô �eÔ-Ô.ØŸ™›ˆIØŸ™Ó)ˆJÜ�9‹~¤ Z£Ò0Ø"'�Ü! )¨ZÓ8ò O‘F�B˜Ø ×8Ñ8¸Ó<�EØ&5×&=Ñ&=¸bÀ%ÈÓ&N‘OðOð —J‘J /×"7Ñ"7Ñ7ò FØŸ™ ×'=Ñ'=Ñ=òFàŸ™¨?×+EÑ+EÑEðð
 r3   c                 ó   — | |k(   S rP   r2   r¨   s     r4   rB  zDrtConcatenation.__ne__h  rC  r3   c                 óÞ   — t        | j                  j                  «       | j                  j                  «       «      }| j                  r$t        || j                  j                  «       «      }|S rP   )r   r}   r¶   r~   rç   r   )rJ   rÕ   s     r4   r¶   zDrtConcatenation.folm  sI   € Ü˜$Ÿ*™*Ÿ.™.Ó*¨D¯K©K¯O©OÓ,=Ó>ˆØ�?Š?Ü˜a §¡×!4Ñ!4Ó!6Ó7ˆAØˆr3   c                 óF  — t         j                  | j                  | j                  «      | j	                  «       | j                  | j
                  «      «      }| j                  r=t         j                  |t        j                  | j                  j                  «       «      }|S rP   )
r  r  r‰  r}   rŠ  r~   rç   r    r   rÚ   rK  s     r4   rÚ   zDrtConcatenation._prettys  sw   € Ü!×2Ñ2Ø×Ñ˜tŸz™zÓ*Ø�J‰J‹LØ×Ñ˜tŸ{™{Ó+ó
ˆð
 �?Š?Ü%×6Ñ6Ø”Y—]‘] D§O¡O×$;Ñ$;Ó$=óˆCð ˆ
r3   c                 óš   — t        |t        «      r!|j                  «       D �cg c]  }|dd ‘Œ	 c}S t        j	                  | |«      S c c}w r�  )rˆ   rƒ   rÚ   r™  r‰  rž  s      r4   r‰  zDrtConcatenation._pretty_subex  sB   € Ü�eÔ-Ô.Ø+0¯=©=«?Ö; 4�D˜˜2’JÒ;Ð;Ü#×1Ñ1°$¸Ó>Ð>ùò <rŸ  c                 óä   — | j                   r; | || j                  «       || j                  «       || j                   «      g«      S  | || j                  «       || j                  «      g«      S r  )rç   r}   r~   rr  s      r4   r
  zDrtConcatenation.visit„  s_   € à�?Š?ÙÙ˜$Ÿ*™*Ó%¡x°·±Ó'<¹hÀtÇÁÓ>WÐXóð ñ ™x¨¯
©
Ó3±X¸d¿k¹kÓ5JÐKÓLÐLr3   c                 óœ  — | j                  | j                  «      }| j                  | j                  «      }t        j                  |z   dz   | j                  «       z   dz   |z   t        j                  z   }| j                  rKt        j                  |z   dz   t        j                  z   dz   d| j                  z  z   t        j                  z   S |S )Nr  r'  )
Ú
_str_subexr}   r~   r   rV   rŠ  rk   rç   r    r   )rJ   r}   r~   rx   s       r4   rL  zDrtConcatenation.__str__�  sº   € Ø—‘ §
¡
Ó+ˆØ—‘ §¡Ó-ˆÜ�k‰k˜EÑ! CÑ'¨$¯*©*«,Ñ6¸Ñ<¸vÑEÌÏÉÑTˆØ�?Š?ä—‘Øñàñô —-‘-ñ ð ñ	ð
 ˜Ÿ™Ñ(ñ)ô —/‘/ñ"ðð ˆ
r3   c                 óR   — d|z  }t        |t        «      r|j                  €|dd S |S )Nr'  r8   r  )rˆ   rƒ   rç   )rJ   r–  r¥   s      r4   r²  zDrtConcatenation._str_subex�  s1   € Ø�5‰LˆÜ�eÔ-Ô.°5×3CÑ3CÐ3KØ�Q�r�7ˆNØˆr3   rP   rM  râ   )r'   r(   r)   rž   rA   rë   rÔ   rµ   rÉ   rŠ  r@  rB  r™  rN  r¶   rÚ   r‰  r
  rL  r²  r2   r3   r4   rƒ   rƒ     sZ   „ Ù'ó%ó%9òN(ò=ó ò"òò$!ð $×,Ñ,€Hòò
ò?ò
Mòó r3   rƒ   c                   ó    — e Zd Zd„ Zdd„Zd„ Zy)r’   c                 óz   — t        | j                  j                  «       | j                  j                  «       «      S rP   )r	   r“   r¶   r”   rM   s    r4   r¶   zDrtApplicationExpression.fol¥  s)   € Ü$ T§]¡]×%6Ñ%6Ó%8¸$¿-¹-×:KÑ:KÓ:MÓNÐNr3   c                 óx   — |r7| j                   j                  d«      | j                  j                  d«      z   S g S r…  )r“   rÉ   r”   rÇ   s     r4   rÉ   z!DrtApplicationExpression.get_refs¨  s>   € ñ ð �M‰M×"Ñ" 4Ó(¨4¯=©=×+AÑ+AÀ$Ó+GÑGð	
ð ð	
r3   c           
      óª  — | j                  «       \  }}|j                  «       }|D �cg c]  }|j                  «       ‘Œ }}t        t        t        |g|z   «      «      }t        ||«      }|D �cg c]  }t        ||«      ‘Œ }}t        t        |t        t        |Ž «      «      «      }|d d D �	�
cg c]  \  }	}
|	dz   dj                  |
«      z   dz   ‘Œ! c}
}	|dd D �	�
cg c]  \  }	}
|	dz   dj                  |
«      z   dz   ‘Œ! c}
}	z   |dd  D �	�
cg c]  \  }	}
|	dz   dj                  |
«      z   dz   ‘Œ! c}
}	z   S c c}w c c}w c c}
}	w c c}
}	w c c}
}	w )Nr9   r  r:   rŒ  rE  ru  )	ÚuncurryrÚ   r  r  r  r�  r  r9  rÙ   )rJ   r“   ÚargsÚfunction_linesÚargÚ
args_linesr‘  Ú	arg_linesÚfunc_args_linesÚ	func_lineÚ	args_lines              r4   rÚ   z DrtApplicationExpression._pretty°  si  € ØŸ™›‰ˆ�$Ø!×)Ñ)Ó+ˆØ/3Ö4¨�c—k‘k•mÐ4ˆ
Ð4ÜœœC .Ð!1°JÑ!>Ó?Ó@ˆ	Ü(¨¸ÓCˆØMWÖXÀ	”o i°Õ;ÐXˆ
ÐXÜœs >´4¼¸ZÐ8HÓ3IÓJÓKˆð -<¸B¸QÐ,?÷á(�I˜yð ˜C‘ #§(¡(¨9Ó"5Ñ5¸Ó;óð -<¸A¸aÐ,@÷á(�I˜yð ˜C‘ #§(¡(¨9Ó"5Ñ5¸Ó;óñ	ð -<¸A¸BÐ,?÷á(�I˜yð ˜C‘ #§(¡(¨9Ó"5Ñ5¸Ó;óñð	
ùò 5ùò Yùóùóùós   ¨D9Á.D>Â/$EÃ$E	Ä$ENrâ   r|  r2   r3   r4   r’   r’   ¤  s   „ òOó
ó
r3   r’   c                 óN   — dt        | d   «      z  g}| ||t        | «      z
  z  z   S )Nr  r   rZ  )Úlinesr‘  Úpad_lines      r4   r�  r�  È  s0   € Ø”c˜% ™(“mÑ#Ð$€HØ�8˜y¬3¨u«:Ñ5Ñ6Ñ6Ð6r3   c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚPossibleAntecedentsc                 ó   — t        | «      S )zSet of free variables.)rì   rM   s    r4   rí   zPossibleAntecedents.freeÎ  s   € ä�4‹yÐr3   c                 óx   — t        «       }| D ]*  }||k(  r| j                  |«       Œ| j                  |«       Œ, |S )ré   )rÅ  rp   )rJ   rw   rd   rî   rï   ÚresultÚitems          r4   rë   zPossibleAntecedents.replaceÒ  sB   € ô %Ó&ˆØò 	"ˆDØ�xÒØ—‘˜JÕ'à—‘˜DÕ!ð		"ð
 ˆr3   c                 ó2   — d| z  }dt        |«      z  }|||gS rY  rZ  r[  s      r4   rÚ   zPossibleAntecedents._prettyÝ  s%   € Ø�4‰KˆØ”c˜!“f‘ˆØ�u˜aÐ Ð r3   c                 ó>   — ddj                  d„ | D «       «      z   dz   S )Nr$   rE  c              3   ó&   K  — | ]	  }d |z  –— Œ y­wrH  r2   )rÿ   Úits     r4   r   z.PossibleAntecedents.__str__.<locals>.<genexpr>ã  s   è ø€ Ò7¨B˜d R�iÑ7ùrI  r%   )rÙ   rM   s    r4   rL  zPossibleAntecedents.__str__â  s!   € Ø�S—X‘XÑ7°$Ô7Ó7Ñ7¸#Ñ=Ð=r3   NrM  )r'   r(   r)   rí   rë   rÚ   rL  r2   r3   r4   rÅ  rÅ  Í  s   „ òó	ò!ó
>r3   rÅ  c                   ó   — e Zd Zy)ÚAnaphoraResolutionExceptionNr_  r2   r3   r4   rÏ  rÏ  æ  rd  r3   rÏ  c                 ó  — t        | t        «      �r| j                  «       r®t        «       }|D ]m  }|j	                  «       D ]X  }| j                  |«      }|j                  | j                  j                  k(  sŒ8|| j                  k(  rŒH|j                  |«       ŒZ Œo t        |«      dk(  r|d   }n|}| j                  | j                  |«      S t        | j                  || gz   «      }t        | j                  || gz   «      }| j                  ||«      S t        | t        «      �rg }	| j                  D ]¯  }
t        |
|| gz   «      }t        |t        «      r|t        |j                   t        «      r$|j                   }|j"                  |_        ||_        t        |j"                  t        «      r$|j"                  st%        d|j                   z  «      ‚|	j                  |«       Œ± | j&                  rt        | j&                  || gz   «      }nd }| j                  | j(                  |	|«      S t        | t*        «      r| S t        | t,        «      r)| j                  t        | j.                  || gz   «      «      S t        | t0        «      rl| j&                  rt        | j&                  || gz   «      }nd }| j                  t        | j                   || gz   «      t        | j"                  || gz   «      |«      S t        | t2        «      rB| j                  t        | j                   || gz   «      t        | j"                  || gz   «      «      S t        | t4        «      r4| j                  | j6                  t        | j.                  || gz   «      «      S y )Nr8   r   z+Variable '%s' does not resolve to anything.)rˆ   r	   rÍ   rÅ  rÉ   ru   r½   r”   rp   r  r   rÑ   r“   r!   rm   r   r}   r~   rÏ  rç   rl   r   r   rœ   rƒ   r
   r   rw   )rd   ÚtrailÚpossible_antecedentsÚancestorrò   ÚrefexÚ
resolutionÚ
r_functionÚ
r_argumentÚr_condsrñ   Úr_condÚtemprç   s                 r4   rÑ   rÑ   ê  sL  € Ü�*Ô3Õ4Ø×)Ñ)Ô+Ü#6Ó#8Ð Ø!ò 
;�Ø#×,Ñ,Ó.ò 	;�CØ&×>Ñ>¸sÓC�Eð
 —‘¨*×*=Ñ*=×*GÑ*GÓGØ ×!4Ñ!4Ó4à,×3Ñ3°EÕ:ñ	;ð
;ô Ð'Ó(¨AÒ-Ø1°!Ñ4‘
à1�
Ø×5Ñ5°j×6IÑ6IÈ:ÓVÐVä)¨*×*=Ñ*=¸uÈ
À|Ñ?SÓTˆJÜ)¨*×*=Ñ*=¸uÈ
À|Ñ?SÓTˆJØ×'Ñ'¨
°JÓ?Ð?ä	�J¤Õ	$ØˆØ×$Ñ$ò 	#ˆDÜ% d¨E°Z°LÑ,@ÓAˆFô ˜&Ô"4Ô5Ü˜fŸl™lÔ,?Ô@à!Ÿ<™<�DØ#)§=¡=�F”LØ$(�F”MÜ˜fŸm™mÔ-@ÔAØ!Ÿ=š=Ü9ð3Ø5;·\±\ñBóð ð
 �N‰N˜6Õ"ð#	#ð$ × Ò Ü)¨*×*?Ñ*?ÀÈ*ÈÑAUÓV‰JàˆJØ×#Ñ# J§O¡O°W¸jÓIÐIä	�JÔ :Ô	;ØÐä	�JÔ 1Ô	2Ø×#Ñ#Ü˜ZŸ_™_¨e°z°lÑ.BÓCó
ð 	
ô 
�JÔ 0Ô	1Ø× Ò Ü)¨*×*?Ñ*?ÀÈ*ÈÑAUÓV‰JàˆJØ×#Ñ#Ü˜Z×-Ñ-¨u¸
°|Ñ/CÓDÜ˜Z×.Ñ.°¸¸Ñ0DÓEØó
ð 	
ô 
�JÔ 0Ô	1Ø×#Ñ#Ü˜Z×-Ñ-¨u¸
°|Ñ/CÓDÜ˜Z×.Ñ.°¸¸Ñ0DÓEó
ð 	
ô
 
�JÔ 0Ô	1Ø×#Ñ#Ø×ÑÔ!1°*·/±/À5ÈJÈ<ÑCWÓ!Xó
ð 	
ð 
2r3   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y)rà   r:   é
   r=   Nc                 óÌ  — d}|sËddl m}m} ddlm}  |«       }|j                  d«        |dd¬«      }|rw ||dd¬	«      }||_        || _        | j                  || j                  | j                  «      \  }	}
t        |	| j                  z   d
«      }|
| j                  z   } ||||¬	«      }n ||dd¬	«      }|j                  «        ||_        || _        || _        || _        y)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Úheightéd   i,  )ÚtkinterrÞ  rß  Útkinter.fontrà  ÚtitleÚfontÚcanvasÚ_visitÚ
OUTERSPACEÚTOPSPACEr  Úpackrx   Úmaster)rJ   rx   Úsize_canvasrí  rò  rÞ  rß  rà  rì  ÚrightÚbottomræ  rç  s                r4   rA   zDrsDrawer.__init__B  sÔ   € ð ˆÙ÷ +Ý)á“TˆFØ�L‰L˜Ôá˜{°Ô4ˆDáÙ ¨a¸Ô:�Ø"�”Ø$�”Ø"&§+¡+¨c°4·?±?ÀDÇMÁMÓ"R‘�˜ä˜E D§O¡OÑ3°SÓ9�Ø $§/¡/Ñ1�Ù ¨e¸FÔC‘á ¨c¸#Ô>�à�K‰KŒMØˆFŒKàˆŒØˆŒØˆ�r3   c                 óL   — | j                   j                  j                  d«      S )z Get the height of a line of textÚ	linespace)rí  rì  ÚmetricsrM   s    r4   Ú_get_text_heightzDrsDrawer._get_text_heighth  s   € à�{‰{×Ñ×'Ñ'¨Ó4Ð4r3   c                 óî   — | j                  | j                  | j                  ||«       | j                  r%t	        «       s| j                  j                  «        y| j                  | j                  ||«      S )zDraw the DRSN)Ú_handlerx   Ú_draw_commandrò  r   Úmainlooprî  )rJ   rK   Úys      r4   rá   zDrsDrawer.drawl  sP   € à�‰�T—X‘X˜t×1Ñ1°1°aÔ8à�;Š;œwœyØ�K‰K× Ñ Õ"à—;‘;˜tŸx™x¨¨AÓ.Ð.r3   c                 ó>   — | j                  || 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
        )rû  Ú_visit_command)rJ   rd   rK   rþ  s       r4   rî  zDrsDrawer._visitu  s   € ð �|‰|˜J¨×(;Ñ(;¸QÀÓBÐBr3   c                 óš  — t        |t        «      r5| j                  j                  ||d| j                  j                  |¬«       ntt        |t
        «      rd|\  }}| j                  j                  ||||«       || j                  «       z   | j                  dz  z   }| j                  j                  ||||«       | 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ì  Útextr9   )rˆ   Ústrrí  Úcreate_textrì  ÚtupleÚcreate_rectanglerù  ÚBUFFERÚcreate_liner   )rJ   rÉ  rK   rþ  rô  rõ  Úhoriz_line_ys          r4   rü  zDrsDrawer._draw_command€  s³   € ô �dœCÔ Ø�K‰K×#Ñ# A q°¸D¿K¹K×<LÑ<LÐSWÐ#ÕXÜ˜œeÔ$à"‰OˆU�FØ�K‰K×(Ñ(¨¨A¨u°fÔ=à�D×)Ñ)Ó+Ñ+¨t¯{©{¸Q©Ñ?ð ð �K‰K×#Ñ# A |°U¸LÔIà×"Ñ" 4¨¨AÓ.Ð.r3   c                 ó¾   — t        |t        «      r;|| j                  j                  j	                  |«      z   || j                  «       z   fS t        |t        «      r|S y)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ì  Úmeasurerù  r  )rJ   rÉ  rK   rþ  s       r4   r   zDrsDrawer._visit_command–  sU   € ô �dœCÔ Ø˜Ÿ™×(Ñ(×0Ñ0°Ó6Ñ6¸¸D×<QÑ<QÓ<SÑ8SÐTÐTÜ˜œeÔ$ØˆKð %r3   c                 óà  — || j                   k(  r#	 |j                  |z   }|j                  |z   }||fS t	        |t
        «      r| j                  }nêt	        |t        «      r| j                  }nÍt	        |t        «      r| j                  }n°t	        |t        «      r| j                  }n“t	        |t        «      r| j                  }nvt	        |t        «      r| j                   }nYt	        |t"        «      r| j                  }n<t	        |t$        «      r| j&                  }nt)        |j*                  j,                  «      ‚ |||||«      \  }}||z
  |_        ||z
  |_        ||fS # t        $ r Y �Œ9w xY w)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
        )r   Ú_drawing_widthÚ_drawing_heightr¼   rˆ   rË   Ú_handle_VariableExpressionr!   Ú_handle_DRSrc   Ú_handle_NegatedExpressionrš   Ú_handle_LambdaExpressionr
   Ú_handle_BinaryExpressionr’   Ú_handle_ApplicationExpressionrÅ  rv   Ú_handle_DrtPropositionr‰   r½   r'   )rJ   rd   ÚcommandrK   rþ  rô  rõ  rŽ   s           r4   rû  zDrsDrawer._handle¤  sT  € ð �d×)Ñ)Ò)ðà"×1Ñ1°AÑ5�Ø#×3Ñ3°aÑ7�Ø˜v�Ð&ô
 �jÔ"?Ô@Ø×5Ñ5‰GÜ˜
¤CÔ(Ø×&Ñ&‰GÜ˜
Ô$8Ô9Ø×4Ñ4‰GÜ˜
Ô$7Ô8Ø×3Ñ3‰GÜ˜
Ô$4Ô5Ø×3Ñ3‰GÜ˜
Ô$<Ô=Ø×8Ñ8‰GÜ˜
Ô$7Ô8Ø×5Ñ5‰GÜ˜
¤NÔ3Ø×1Ñ1‰Gä˜J×0Ñ0×9Ñ9Ó:Ð:á! *¨g°q¸!Ó<‰ˆ�ð %*¨A¡Iˆ
Ô!Ø%+¨a¡Zˆ
Ô"à�vˆÐøô; "ò âðús   ‘!E  Å 	E-Å,E-c                 ó   —  |d|z  ||«      S )Nr'  r2   )rJ   rd   r  rK   rþ  s        r4   r  z$DrsDrawer._handle_VariableExpressionÒ  s   € Ù�t˜jÑ(¨!¨QÓ/Ð/r3   c           
      ó  — | j                  t        j                  ||«      d   }| j                  |j                  |||«      \  }} |t        j                  || j                  |||z
  | j                  «       «      «       ||fS rg   )r   r    ÚNOTrû  rœ   Ú_get_centered_toprù  ©rJ   rd   r  rK   rþ  rô  rõ  s          r4   r  z#DrsDrawer._handle_NegatedExpressionÕ  s|   € à×#Ñ#¤I§M¡M°1°aÓ8¸Ñ;ˆð Ÿ,™, z§¡¸ÀÈÓJ‰ˆ�ñ 	Ü�M‰MØØ×"Ñ" 1 f¨q¡j°$×2GÑ2GÓ2IÓJô	
ð �vˆÐr3   c                 óô  — || j                   z   }|| j                   z   }|j                  r#dj                  d„ |j                  D «       «      }nd} ||||«      \  }}|| j                   dz  z  }|j                  rD|j                  D ]4  }	| j	                  |	|||«      \  }
}t        ||
«      }|| j                   z  }Œ6 n || j                  «       | j                   z   z  }|| j                   z  } |||f||«      S )Nr  c              3   ó&   K  — | ]	  }d |z  –— Œ y­wrH  r2   )rÿ   Úrs     r4   r   z(DrsDrawer._handle_DRS.<locals>.<genexpr>ë  s   è ø€ Ò>¨˜D 1�HÑ>ùrI  z     r9   )r	  rl   rÙ   rm   rû  r  rù  )rJ   rd   r  rK   rþ  Úleftrõ  rl   Ú	max_rightrñ   rô  s              r4   r  zDrsDrawer._handle_DRSå  sû   € Ø�4—;‘;‰ˆØ�T—[‘[‘ˆð �?Š?Ø—8‘8Ñ>¨j¯o©oÔ>Ó>‰DàˆDÙ% d¨D°&Ó9Ñˆ�FØ�$—+‘+ ‘/Ñ!ˆð ×ÒØ"×(Ñ(ò &�Ø"&§,¡,¨t°W¸dÀFÓ"K‘�˜Ü 	¨5Ó1�	Ø˜$Ÿ+™+Ñ%‘ñ&ð
 �d×+Ñ+Ó-°·±Ñ;Ñ;ˆFð 	�T—[‘[Ñ ˆ	Ù˜	 6Ð*¨A¨qÓ1Ð1r3   c                 ó(  — |j                  «       \  }}t        |t        «      s|j                  }|j                  g}| j                  |||«      d   }t        |g|D �cg c]  }| j                  |||«      d   ‘Œ c}z   «      }	|	|z
  }
| j                  ||
|j                  «      }| j                  ||||«      d   }| j                  ||
| j                  «       «      } |t        j                  ||«      d   }t        |«      D ]i  \  }}| j                  ||
|j                  «      }| j                  ||||«      d   }|dz   t        |«      k  sŒL |t        j                  dz   ||«      d   }Œk  |t        j                   ||«      d   }||	fS c c}w )Nr8   r   r  )r¸  rˆ   rË   r“   r”   rî  r  r  r  rû  rù  r    rV   Ú	enumerater  ri   rk   )rJ   rd   r  rK   rþ  r“   r¹  Úfunction_bottomr»  Ú
max_bottomÚline_heightÚfunction_drawing_toprô  Úcentred_string_toprð   Úarg_drawing_tops                   r4   r  z'DrsDrawer._handle_ApplicationExpressionþ  s³  € Ø#×+Ñ+Ó-‰ˆ�$Ü˜(Ô$AÔBà!×*Ñ*ˆHØ×'Ñ'Ð(ˆDð Ÿ+™+ h°°1Ó5°aÑ8ˆÜØÐÀdÖ K¸s §¡¨S°!°QÓ!7¸Ó!:Ò KÑKó
ˆ
ð ! 1‘nˆð  $×5Ñ5Øˆ{˜H×4Ñ4ó 
Ðð —‘˜X w°Ð3GÓHÈÑKˆð "×3Ñ3Øˆ{˜D×1Ñ1Ó3ó
Ðñ œ	Ÿ™¨Ð/AÓBÀ1ÑEˆô   “oò 	U‰FˆAˆsØ"×4Ñ4Ø�; × 3Ñ 3óˆOð —L‘L  g¨u°oÓFÀqÑIˆEà�1‰u”s˜4“yÓ á¤	§¡°#Ñ 5°uÐ>PÓQÐRSÑT‘ð	Uñ œ	Ÿ™¨Ð0BÓCÀAÑFˆà�zÐ"Ð"ùò? !Ls   ÁF
c           
      ó2  — t         j                  d|j                  z  z   t         j                  z   }| j	                  |||«      d   }| j                  |j                  |||«      \  }} |||| j                  |||z
  | j                  «       «      «       ||fS )Nr'  r   )	r    ÚLAMBDArw   r‚  r   rû  rœ   r  rù  )rJ   rd   r  rK   rþ  r›   rô  rõ  s           r4   r  z"DrsDrawer._handle_LambdaExpression)  s–   € ä×$Ñ$ t¨j×.AÑ.AÑ'AÑAÄIÇMÁMÑQˆ	Ø×#Ñ# I¨q°!Ó4°QÑ7ˆð Ÿ,™, z§¡¸ÀÈÓJ‰ˆ�ñ 	Ø�q˜$×0Ñ0°°F¸Q±JÀ×@UÑ@UÓ@WÓXô	
ð �vˆÐr3   c           
      óÀ  — | j                  |j                  dd«      d   }| j                  |j                  dd«      d   }t        ||«      }| j	                  ||| j                  «       «      } |t        j                  ||«      d   }	|j                  j                  }| j                  |j                  ||	| j	                  |||«      «      \  }	}
 |d|j                  «       z  |	|«      d   }	|j                  j                  }| j                  |j                  ||	| j	                  |||«      «      \  }	} |t        j                  |	|«      d   }	|	t        |
|«      fS )Nr   r8   z %s )rî  r}   r~   r  r  rù  r    rV   r  rû  rŠ  rk   )rJ   rd   r  rK   rþ  Úfirst_heightÚsecond_heightr'  r)  rô  Úfirst_bottomÚsecond_bottoms               r4   r  z"DrsDrawer._handle_BinaryExpression8  sd  € à—{‘{ :×#3Ñ#3°Q¸Ó:¸1Ñ=ˆØŸ™ J×$5Ñ$5°q¸!Ó<¸QÑ?ˆÜ˜,¨Ó6ˆð "×3Ñ3Øˆ{˜D×1Ñ1Ó3ó
Ðñ œ	Ÿ™¨Ð+=Ó>¸qÑAˆð "×'Ñ'×7Ñ7ˆØ $§¡Ø×ÑØØØ×"Ñ" 1 k°<Ó@ó	!
Ñˆ�ñ ˜ ×!1Ñ!1Ó!3Ñ3°UÐ<NÓOÐPQÑRˆð #×)Ñ)×9Ñ9ˆØ!%§¡Ø×ÑØØØ×"Ñ" 1 k°=ÓAó	"
Ñˆ�ñ œ	Ÿ™¨Ð0BÓCÀAÑFˆà”s˜<¨Ó7Ð8Ð8r3   c                 óz   —  ||j                   ||«      d   }| j                  |j                  |||«      \  }}||fS rg   )rw   rû  rœ   r  s          r4   r  z DrsDrawer._handle_DrtProposition^  sC   € á˜
×+Ñ+¨Q°Ó2°1Ñ5ˆð Ÿ,™, z§¡¸ÀÈÓJ‰ˆ�à�vˆÐr3   c                 ó   — |||z
  dz  z   S )zÅGet 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.r9   r2   )rJ   ÚtopÚfull_heightÚitem_heights       r4   r  zDrsDrawer._get_centered_topg  s   € ð �k KÑ/°1Ñ4Ñ4Ð4r3   rþ   )r   r   )r'   r(   r)   r	  rð  rï  rA   rù  rá   rî  rü  r   rû  r  r  r  r  r  r  r  r  r2   r3   r4   rà   rà   =  sh   „ Ø€FØ€HØ€Jó$òL5ð   8ó /ò	Cò/ò,ó,ò\0òò 2ò2)#òVò$9òLó5r3   rà   c                  ó  — 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«      j                  «       «       t        d«        | d«      }t        |«       |j	                  t        d«      «      }t        |«       t        ||k(  «       t        d«       t        t         | d«      «      «       t        t         | d«      «      «       t        t         | d«      «      «       t        d«        | d«      j                  «         | d«      j                  «         | d«      j                  «         | d«      j                  «         | d«      j                  «        y )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   ÚdemorA  n  s   € Ü	Ð
,Ô-Ü×$Ñ$€EÜ	‰%Ð&Ó
'Ô(Ü	‰%Ð+Ó
,Ô-Ü	‰%Ð)Ó
*Ô+Ü	‰%Ð+Ó
,Ô-Ü	‰%Ð7Ó
8Ô9Ü	‰%Ð6Ó
7Ô8Ü	‰%Ð/Ó
0Ô1Ü	‰%Ð3Ó
4Ô5Ü	‰%Ð=Ó
>Ô?ä	Ð
,Ô-Ü	‰%Ð&Ó
'×
+Ñ
+Ó
-Ô.ä	Ð
VÔWÙ	Ð Ó	!€BÜ	ˆ"„IØ	×	Ñ	œ( 3›-Ó	(€BÜ	ˆ"„IÜ	ˆ"�‰(„Oä	Ð
9Ô:Ü	Ô
™5Ð!PÓQÓ
RÔSÜ	Ü™ÐUÓVÓWôô 
Ô
™5Ð!@ÓAÓ
BÔCä	Ð
5Ô6Ù	ˆ*Ó×"Ñ"Ô$Ù	ØKóç�l„nÙ	Ð
4Ó5×BÑBÔDÙ	Ð
AÓB×OÑOÔQÙ	Ð
=Ó>×KÑKÕMr3   c                  óª   — 	 ddl m}  g d¢}|D ]'  }t        j                  |«      }|j                  «        Œ) y # t        $ r}t        d«      ‚d }~ww xY w)Nr   )rß  z,tkinter is required, but it's not available.)rK   r=  z([x],[])z([x],[man(x)])r8  r9  z\x.([],[man(x), walks(x)])z\x y.([],[sees(x,y)])z)([],[(([],[walks(x)]) + ([],[runs(x)]))])r:  r;  )ré  rß  ÚImportErrorÚ
ValueErrorr    r¦   rá   )rß  rÕ   ÚexpressionsÚds       r4   Ú	test_drawrG  –  s\   € ðIÝò€Kð ò ˆÜ×$Ñ$ QÓ'ˆØ	�‰�ñøô# ò IÜÐGÓHÐHûðIús   ‚9 ¹	AÁAÁAÚ__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Ì   rP  rQ  rR  rv   rc   rš   r  r™  r‹   r{   rƒ   r’   r�  r  rÅ  r‰   rÏ  rÑ   rà   rA  rG  r'   r2   r3   r4   ú<module>rM     s®  ðó Ý Ý ÷÷ ÷ ÷ ÷ ÷ õ õ6 ô+�ô +ô4�ô 4÷Ddñ dôN|ˆ-˜ô |ò~/ô MÐ3Mô ô"	Ø!Ð#?ô	ô	Ø!Ð#=ô	ô	Ø#Ð%<ô	ô	Ð9Ð;Mô 	ô;4�] Jô ;4ô|
˜=Ð*;ô 
ô$"
˜-Ð)9ô "
ôJ%˜-Ð)9ô %ôP	Ð.Ð0Aô 	ô?Ð*¨Lô ?ôGÐ/Ð1Cô Gô
YÐ+ô Yôx!
˜}Ð.Cô !
òH7ô
>˜$ ¨zô >ô2	 )ô 	ð (*ó P
÷fn5ñ n5òb	%NòPð2 ˆzÒÙ…Fð r3   