§
    íóÉ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¦  «        Z8d0Z9 G d1„ d2¦  «        Z:g dfd3„Z; G d4„ d5¦  «        Z<d6„ Z=d7„ Z>e?d8k    r e=¦   «          dS dS )9é    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© ó    úo/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/nltk/sem/drt.pyr    r    +   sY   € € € € € Ø
€CØ€HØ€GØ€LØ€MØ€Eà�| ]°EÐ:€EàŒn˜uÑ$€GàŒ]˜c˜UÑ" UÑ*€F€F€Fr3   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˜!��1ˆvÐ2Ð2Ð2r3   é   c                 ó   — g | ]}|d f‘ŒS )é   r2   r;   s     r4   r>   z&DrtParser.__init__.<locals>.<listcomp>D   s   € ÐCÐCÐC˜!��1ˆvÐCÐCÐCr3   é   é   c                 ó   — g | ]}|d f‘ŒS )é   r2   r;   s     r4   r>   z&DrtParser.__init__.<locals>.<listcomp>G   s   € Ð1Ð1Ð1˜!��1ˆvÐ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Ð3�YÔ2Ð3Ñ3Ô3Ø2Ð2�yÔ1Ð2Ñ2Ô2ñ3å�Qˆxˆjñð DÐC�yÔ0µ6´?ÑBÐCÑCÔCñDõ ” Ð#Ð$ñ	%õ
 Ô" AÐ&Ð'ñ(ð 2Ð1�yÔ0Ð1Ñ1Ô1ñ2ð 3Ð2�yÔ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Ô)Ð)Ð)Ø×%Ò% c¨7Ñ3Ô3Ð3à•I”NÒ"Ð"Ø�|Š|˜A‰Œð 6 4§:¢:¨a¡=¤=µIÔ4JÒ#JÐ#JØ—’ s¨GÑ4Ô4Ð4à×'Ò'¨¨WÑ5Ô5Ð5à�YŠY‰[Œ[�IœMÒ)Ð)Ø× Ò ¥¤Ñ0Ô0Ð0Ø—?’? 3¨Ñ0Ô0Ð0à�_Š_˜SÑ!Ô!ð 	:Ø�|Š|˜A‰Œð : 4§:¢:¨a¡=¤=µI´OÒ#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„   € à×ÒÑ!Ô!ˆà�LŠL˜‰OŒOð	Ø $§
¢
¨1¡¤µ´Ò @Ð @à�JŠJ‰LŒLˆLØ×!Ò! 'Ñ*Ô*ˆØ×Ò�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ØˆØ�lŠl˜1‰oŒoð 	D $§*¢*¨Q¡-¤-µ9Ô3JÒ"JÐ"Jàð ˜Ÿ
š
 1™œ­¬Ò8Ð8Ø—
’
‘”�Ø�KŠK˜×4Ò4°\ÑBÔBÑCÔCÐCð	 �lŠl˜1‰oŒoð 	D $§*¢*¨Q¡-¤-µ9Ô3JÒ"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ØˆØ�lŠl˜1‰oŒoð 	@ $§*¢*¨Q¡-¤-µ9Ô3JÒ"JÐ"Jàð ˜Ÿš A™œ­)¬/Ò9Ð9Ø—
’
‘”�Ø�LŠL˜×5Ò5°gÑ>Ô>Ñ?Ô?Ð?ð	 �lŠl˜1‰oŒoð 	@ $§*¢*¨Q¡-¤-µ9Ô3JÒ"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   € õ % U¨FÑ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   € Ý˜e¥SÑ)Ô)ð @Ý˜uœz¨5¬;¸Ñ?Ô?Ð?Ý˜eÕ%5Ñ6Ô6ð OÝ+¨E¬K¸¼À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   € Øˆw�u˜fÑ%Ô%Ð%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   € Ý$¥X¨d¡^¤^Ñ4Ô4Ð4r3   c                 ó"   — t          ||¦  «        S rZ   )ÚDrtLambdaExpression)rV   Ú	variablesÚterms      r4   Úmake_LambdaExpressionzDrtParser.make_LambdaExpression¸   s   € Ý" 9¨dÑ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(   € Ý˜%¥Ñ/Ô/Ð/Ð/Ð/Ý˜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!   rv   rw   r�   r‡   rˆ   r“   r²   s     r4   Ú__gt__zDrtExpression.__gt__Õ   sy   € Ý˜%¥Ñ/Ô/Ð/Ð/Ð/Ý�d�CÑ Ô ð 	5Ý�t”y $¤*¨eÑ4Ô4Ð4Ý�dÕ,Ñ-Ô-ð 	DÝ# D¤J°´¸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   € õ ˜%¥Ñ/Ô/Ð/Ð/Ð/à�]Š]‰_Œ_× Ò Ñ"Ô"ˆØ�^Š^ÑÔ×!Ò!Ñ#Ô#ˆØ�xŠx˜˜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!   € åØ1°D´NÔ4KÑ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   € Ý  e¨TÑ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   € Ý$ U¨FÑ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Ð%EÀtÄ~Ñ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   € ð
 �yŠy˜Ÿš™œÑ(Ô(Ð(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 ‰rÓt          | 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;   ø€ ð ð ð à ð Ÿš X¨z¸4ÀÑOÔOðð ð r3   c                 ó@   •— g | ]}|                      ‰‰d ‰¦  «        ‘ŒS rõ   rö   )r<   rø   rù   ÚnewvarexÚrefs     €€€r4   r>   zDRS.replace.<locals>.<listcomp>W  s;   ø€ ð ð ð à $ð !ŸLšL¨¨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;   ø€ ð ð ð àð —L’L ¨:°}À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  øøøøøø€ ð �t”yÐ Ð à ð Ø�à”I—O’O HÑ-Ô-�Ø”?ð &Ø!%¤×!8Ò!8Ø  *¨d°Mñ"ô "�J�Jð "&�JÝØ”I˜b˜q˜b”M ZÔ%8Ð$9Ñ9¸D¼IÀaÈ!ÁeÀgÀgÔ<NÑNðð ð ð ð ð à$(¤Jðñ ô ð ñô ð ð ð õ ˜tœy™>œ>¨J¯OªOÑ,=Ô,=Ñ=ð ð �CÝ,¨SÑ1Ô1�FÝ4°VÑ<Ô<�HØœ	Ÿš¨Ñ,Ô,�AØ”ð *Ø%)¤_×%<Ò%<Ø ¨4°ñ&ô &˜
˜
ð &*˜
ÝØœ	 " 1 "œ¨¨Ñ0°4´9¸QÀ¹U¸W¸WÔ3EÑEðð ð ð ð ð à(,¬
ðñ ô ð #ñô �D�Dð Œð "Ø!œ_×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¸¨1¯6ª6©8¬8Ð*HÐ*HÐ*Hr3   )	r   ÚoperatorÚor_rw   r   rñ   Úupdater  rv   )rV   Ú
conds_frees     r4   r  zDRS.freen  si   € å�HœLÐ*HÐ*H¸T¼ZÐ*HÑ*HÔ*HÍ#É%Ì%ÑPÔPˆ
ØŒ?ð 	6Ø×Ò˜dœo×2Ò2Ñ4Ô4Ñ5Ô5Ð5Ø�C ¤	™NœNÑ*Ð*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¸ A§J¢J¨tÑ$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Ð#I¸d¼jÐ#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Ø�LŠL˜˜ $¤/Ñ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´/ÐK�X�X˜dœoÑ.Ô.Ð.Àtˆ
Øˆz˜$œ)¥T­#¨h¸¼
Ñ*CÔ*CÑ%DÔ%DÀjÑQÔQÐQr3   c                 óÐ  — | }d}|t          |j        ¦  «        k     �r|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        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Û  € ØˆØˆØ•#�c”i‘.”.Ò Ñ Ø”9˜Q”<ˆDå˜4Õ!3Ñ4Ô4ðå˜tœzÕ+EÑFÔFðõ ˜tœ{Õ,FÑGÔGðõ
 Ý�˜SœX™œ¨$¬+Ô*>Ð)?Ñ?Ñ@Ô@Ø”I˜b˜q˜b”M C¤I¨a°!©e¨g¨gÔ$6Ñ6Ø”Nñô �ð
 ”;Ô'¨4¬:Ô+>Ò>Ð>ØŸ+š+ d¤kÔ&:¸D¼JÈÈuÑUÔU�CØ�AØ�Q‘�Ø�‰FˆAð! •#�c”i‘.”.Ò Ñ ð$ ˆØ”Ið 		'ð 		'ˆDØ×.Ò.Ñ0Ô0ˆHØ$×-Ò-Ñ/Ô/ˆMå˜}­cÑ2Ô2ð'à Ô%ð'ð !Ô&ð'ð !Ô+ð	'ð —’˜XÑ&Ô&Ð&øà<?¼NÐT�S”^×6Ò6Ñ8Ô8Ð8ÐPTˆ
Ý�3”8˜U JÑ/Ô/Ð/r3   c                 óD  — | j         r•d }| 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Ð.K¸1¨q¯uªu©w¬wÐ.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Ð*G°q¨1¯5ª5©7¬7Ð*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�àð .Ý% e¨T¬_×-@Ò-@Ñ-BÔ-BÑCÔC��àœ×+Ò+Ñ-Ô-�à”y   2 ”ð 2ð 2�Ý% c¨5Ñ1Ô1��àˆLð ”:ð QÝÐ OÑPÔPÐPÝ�=Ð*GÐ*G¸D¼JÐ*GÑ*GÔ*GÑHÔHˆEÝ�8 T×%<Ò%<¸T¼YÑ%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•Ð*Ð*¨D¯LªL©N¬NÑ;Ô;ðð ð 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ÐG°Dˆt�d—j’j Ñ(Ô(Ñ(¨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  ø€ Ø—H’H˜T×4Ò4°T´YÑ?Ô?Ñ@Ô@ˆ	ð
ð 
ðð ØHLÌ
ðñ ô ð
ñ 
ô 
ˆ
õ •c˜)‘n”nÐ%­­Sµ°jÑ-AÔ-AÑ(BÔ(BÑBÑCÔCˆð �s˜V‘|Ñ# dÑ*Ø�y—’ vÑ.Ô.Ñ.°Ñ5Ø�s˜V‘|Ñ# dÑ*ðð
 HÐGÐGÐG¸JÐGÑGÔGñHð �c˜F‘lÑ" TÑ)Ð*ñ+ð 	ð Œ?ð 	Ý&×7Ò7Ø•Y”] D¤O×$;Ò$;Ñ$=Ô$=ñô ð ð ˆ
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   € ­s°A°a°b°b´E¸2°;½sÀ1ÀQÀRÀRÄ5¹z¼zÈQºÔ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°¬tµS¸!¸A¸B¸B¼%À¸ÅSÈÈ1È2È2ÌÁZÄZÐSTÂ_Ô9UÑ5VÔ5VÐ.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°¬dµC¸¸1¸2¸2¼À¸ÅCÈÈ!È"È"ÌÁJÄJÐRSÂOÔ8TÑ4UÔ4UÐ-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          ¦  «        rÝt          | 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  € õ �e�SÑ!Ô!ð 	 Ý�4”9‰~Œ~¥ U¤Z¡¤Ò0Ð0Ø"'�Ý! $¤)¨_Ô-AÑBÔBð Oð O‘F�B˜Ø ×8Ò8¸Ñ<Ô<�EØ&5×&=Ò&=¸bÀ%ÈÑ&NÔ&N�O�OØ”? oÔ&@Ò@Ð@ÅSØ”JñFô Få˜Ô.Ñ/Ô/òF0ð F0õ #& d¤j°/Ô2GÑ"HÔ"Hð )ð )™˜˜BØ " b¢ Ø#( 5 5ð !)à˜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Ð9 d�d˜T‘kÐ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¶   € Ø×"Ò"Ø�HŠH�T×,Ò,¨T¬YÑ7Ô7Ñ8Ô8Ø�IŠIÐ9Ð9¨d¬jÐ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ð "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©r�   s    r4   r¡   r¡   "  sr   € õ
 �”ÑÔð /Ý.¨xÑ8Ô8Ð8Ý	�H”MÑ	"Ô	"ð /Ý,¨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)   € Ø�4‰KˆØ•c˜!‘f”f‘ˆØ�u˜a Ð'Ð'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ð 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"   € Ý˜dœm¨T¬X×-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Ð;ˆtŒx× Ò  Ñ&Ô&Ð&¸Ð;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   € àŒN˜eœoÒ-ð &Ø” ¤Ò/ð&à”˜EœIÒ%ð	
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Ð6 DˆU�S‰[˜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ÐH°Tˆt�d”mÑ# 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Ð8 dˆu�s‰{˜TÑ!Ð8Ð8Ð8r3   )r‚   rä   r  r�   )rV   Údrs_srv  s   ` @r4   rä   zDrtProposition._pretty�  s�   øø€ Ø”× Ò Ñ"Ô"ˆØ•c˜$ ¤Ñ.Ñ/Ô/Ñ/ˆà6Ð6Ð6Ð6¨E°"°1°"¬IÐ6Ñ6Ô6ØHÐHÐHÐH¸UÀ1ÀQÀ3¼ZÐHÑHÔHñIà8Ð8Ð8Ð8¨e°A°B°B¬iÐ8Ñ8Ô8ñ9ð	
r3   c                 ó6   —  | || j         ¦  «        g¦  «        S r  )r‚   ©rV   r�   r  s      r4   r  zDrtProposition.visitŠ  s!   € àˆz˜8˜8 D¤HÑ-Ô-Ð.Ñ/Ô/Ð/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   € Ø3�t”}Ð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Ð6˜tˆV�d‰]Ð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Ð6 z°"°1°"¤~Ð6Ñ6Ô6Ø9Ð9¨°A°a°C¬Ð9Ñ9Ô9ñ:à9Ð9¨°A°a°C¬Ð9Ñ9Ô9ñ:ð 9Ð8¨°A°B°B¬Ð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 )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÷   r�   r¡   )rV   r  s     r4   rù   z!DrtLambdaExpression.alpha_convert©  s?   € ð
 �~Š~ØØŒI×Ò˜dœmÕ-BÀ6Ñ-JÔ-JÈDÑQÔQñ
ô 
ð 	
r3   c                 óZ   — t          | j        | j                             ¦   «         ¦  «        S rZ   )r   r�   r¦   rÀ   rU   s    r4   rÀ   zDrtLambdaExpression.fol³  s   € Ý ¤¨t¬y¯}ª}©¬Ñ?Ô?Ð?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&   è è € Ð:Ð:¨1˜d Q™hÐ:Ð:Ð:Ð:Ð:Ð:r3   c                 ó    •— g | ]
}d ‰z   |z   ‘ŒS rš  r2   rŒ  s     €r4   r>   z/DrtLambdaExpression._pretty.<locals>.<listcomp>À  s"   ø€ Ð>Ð>Ð> tˆV�e‰^˜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ÐG¨tˆw˜Ñ# 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œ]Ñ+Ô+Ð+Ø”9ˆDð Œn ¤Ò.Ð.ð —X’XÐ:Ð:°	Ð:Ñ:Ô:Ñ:Ô:½Y¼]ÑJˆ
Ø—\’\‘^”^ˆ
Ø•c˜*‘o”oÑ%ˆà>Ð>Ð>Ð>¨z¸"¸1¸"¬~Ð>Ñ>Ô>ØBÐBÐBÐB°*¸Q¸q¸S´/ÐBÑBÔBñCàGÐGÐGÐG°zÀ!ÀAÀ#´ÐGÑGÔGñHð AÐ@Ð@Ð@°¸A¸B¸B´Ð@Ñ@Ô@ñ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ÐXˆTŒ]ˆO˜dœi×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ÐWˆDŒJ×Ò Ñ%Ô%¨¬×(<Ò(<¸TÑ(BÔ(BÑBÐBÐUWð	
r3   c                 ó¾   — t                                |                      | j        ¦  «        |                      ¦   «         |                      | j        ¦  «        ¦  «        S rZ   )r:  r;  Ú_pretty_subexr‡   ÚgetOprˆ   rU   s    r4   rä   zDrtBinaryExpression._prettyÔ  sK   € Ý"×3Ò3Ø×Ò˜tœzÑ*Ô*Ø�JŠJ‰LŒLØ×Ò˜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°{ÑBÀSÑ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Ñ1°KÑ?À#Ñ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°{ÑBÀSÑ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Ñ*;Ô*;Ñ<Ô<ˆ	Ý% k°9Ñ=Ô=ˆÝ& |°YÑ?Ô?ˆØ•c˜"‘g”g‘ˆÝ!¥# 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*   € Ý˜DœJŸNšNÑ,Ô,¨d¬k¯oªoÑ.?Ô.?Ñ@Ô@Ð@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>ÿ  ó    € Ð;Ð;Ð; 4�D˜˜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Ô"2°D´K·O²OÑ4EÔ4EÑ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%   € Ý×%Ò% d¨E°6Ñ:Ô:Ð:Ø$ˆŒˆˆr3   FTc                 óø  — | j         }| j        }| j        }||                      ¦   «         v rM|rJ|                     ||||¦  «        }|                     ||||¦  «        }|r|                     ||||¦  «        }nì|r t          |                      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Ô3°j·o²oÑ6GÔ6GÑGð Uð U�CÝ-­o¸cÑ.BÔ.BÑCÔC�AØ!ŸMšM¨#¨q°$¸ÑFÔF�EØ#Ÿ^š^¨C°°D¸-ÑHÔH�FØ!ð UØ%/×%7Ò%7¸¸QÀÀmÑ%TÔ%T˜
øà—M’M (¨J¸À}ÑUÔUˆEØ—^’^ H¨j¸-ÈÑWÔWˆFØð Ø'×/Ò/Ø˜j¨-¸ñô �
ð �~Š~˜e V¨ZÑ8Ô8Ð8r3   c                 ó€   — |                       ¦   «         }t          |t          ¦  «        rJ ‚|                     ¦   «         S rZ   )r¿   r’   r�   rÞ   rd  s     r4   rÞ   z#DrtConcatenation.eliminate_equality6  s8   € à�mŠm‰oŒoˆÝ˜cÕ#3Ñ4Ô4Ð4Ð4Ð4Ø×%Ò%Ñ'Ô'Ð'r3   c                 óx  — | j                              ¦   «         }| j                             ¦   «         }| j        r| j                             ¦   «         nd }t	          |t
          ¦  «        r»t	          |t
          ¦  «        r¦t          |                     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´?ÐL�T”_×-Ò-Ñ/Ô/Ð/Èˆ
å�e�SÑ!Ô!ð 		=¥j°½Ñ&=Ô&=ð 		=å˜5Ÿ>š>¨$Ñ/Ô/Ñ0Ô0µ3°v·²ÀtÑ7LÔ7LÑ3MÔ3MÑMð ;ð ;�å.­¸sÑ/CÔ/CÑDÔD�ØŸš¨¨V°TÑ:Ô:��å�u”z F¤KÑ/°´¸v¼|Ñ1KÈZÑ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Ñ-Ô-°´×0DÒ0DÀYÑ0OÔ0OÑOˆØŒ?ð 	8˜yð 	8Ø�KŠK˜œ×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‘F�B˜Ø ×8Ò8¸Ñ<Ô<�EØ&5×&=Ò&=¸bÀ%ÈÑ&NÔ&N�O�Oà”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   € Ý˜$œ*Ÿ.š.Ñ*Ô*¨D¬K¯OªOÑ,=Ô,=Ñ>Ô>ˆØŒ?ð 	8Ý˜a ¤×!4Ò!4Ñ!6Ô!6Ñ7Ô7ˆAØˆ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Ø×Ò˜tœzÑ*Ô*Ø�JŠJ‰LŒLØ×Ò˜tœ{Ñ+Ô+ñ
ô 
ˆð
 Œ?ð 	Ý%×6Ò6Ø•Y”] D¤O×$;Ò$;Ñ$=Ô$=ñô ˆ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Ø�:Ø�˜$œ*Ñ%Ô% x x°´Ñ'<Ô'<¸h¸hÀtÄÑ>WÔ>WÐXñô ð ð �:˜x˜x¨¬
Ñ3Ô3°X°X¸d¼kÑ5JÔ5JÐ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µ   € Ø—’ ¤
Ñ+Ô+ˆØ—’ ¤Ñ-Ô-ˆÝŒk˜EÑ! 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   € Ø�5‰LˆÝ�eÕ-Ñ.Ô.ð 	°5Ô3CÐ3KØ�Q�r�T”7ˆNØˆ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ð %9ðN(ð (ð (ð=ð =ð =ð ð ð ð ð"ð "ð "ðð ð ð$!ð !ð !ð $Ô,€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>   € ð ðˆDŒM×"Ò" 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¨�c—k’k‘m”mÐ4Ð4Ð4r3   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r2   )r½  )r<   Ú	arg_linesrÀ  s     €r4   r>   z4DrtApplicationExpression._pretty.<locals>.<listcomp>¶  s#   ø€ ÐXÐXÐXÀ	•o i°Ñ;Ô;Ð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   € ð ð ð á(�I˜yð ˜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   € ð ð ð á(�I˜yð ˜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Ð4¨tÐ4Ñ4Ô4ˆ
Ý��C .Ð!1°JÑ!>Ñ?Ô?Ñ@Ô@ˆ	Ý(¨¸ÑCÔCˆØXÐXÐXÐXÈZÐXÑXÔXˆ
Ý�s >µ4½¸ZÐ8HÑ3IÔ3IÑJÔJÑKÔKˆðð à,;¸B¸Q¸BÔ,?ðñ ô ðð à,;¸A¸a¸CÔ,@ðñ ô ñ	ðð à,;¸A¸B¸BÔ,?ðñ ô ñð	
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˜% œ(‘m”mÑ#Ð$€HØ�8˜y­3¨u©:¬:Ñ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   € å�4‰yŒyÐ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'   € Ø�4‰KˆØ•c˜!‘f”f‘ˆØ�u˜aÐ Ð 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Ð7¨B˜d R™iÐ7Ð7Ð7Ð7Ð7Ð7r3   r%   rí  rU   s    r4   re  zPossibleAntecedents.__str__â  s-   € Ø�S—X’XÐ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  i@B c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )Ú_AnaphoraBudgetzÊCounts candidate-antecedent examinations and aborts runaway resolution.

    The whole resolution shares one budget, so it bounds the total O(N**2) work
    regardless of how the DRS is structured.
    )Ú	remainingÚlimitc                 ó|   — t          |t          ¦  «        r|dk     rt          d|›�¦  «        ‚|| _        || _        d S )Nr:   z4MAX_ANAPHORA_OPERATIONS must be a positive int, got )r’   rD  Ú
ValueErrorr
  r  )rV   r  s     r4   rL   z_AnaphoraBudget.__init__þ  sO   € õ ˜%¥Ñ%Ô%ð 	¨°ª¨ÝØPÀuÐPÐPñô ð ð ˆŒØˆŒ
ˆ
ˆ
r3   c                 ój   — | xj         dz  c_         | j         dk     rt          d| j        z  ¦  «        ‚d S )Nr:   r   a  Refusing to resolve anaphora: examining candidate antecedents exceeded the limit of %d (pronoun, referent) steps, which a DRS with many referents and pronouns reaches at O(n**2) time and memory (CWE-770). Resolve a smaller discourse, or raise nltk.sem.drt.MAX_ANAPHORA_OPERATIONS.)r
  r  r  rU   s    r4   Úspendz_AnaphoraBudget.spend	  sK   € ØˆŒ˜!ÑˆŒØŒ>˜AÒÐÝ-ð8ð ;?¼*ñ	Eñô ð ð Ðr3   N)r'   r(   r)   r¨   Ú	__slots__rL   r  r2   r3   r4   r	  r	  õ  sC   € € € € € ðð ð '€Ið	ð 	ð 	ð	ð 	ð 	ð 	ð 	r3   r	  c                 ó¬  — |€t          t          ¦  «        }t          | t          ¦  «        �r|                      ¦   «         rÁt          ¦   «         }|D ]w}|                     ¦   «         D ]`}|                     ¦   «          |                      |¦  «        }|j	        | j
        j	        k    r || j
        k    s|                     |¦  «         ŒaŒxt          |¦  «        dk    r	|d         }n|}|                      | j
        |¦  «        S t          | j        || gz   |¦  «        }t          | j
        || gz   |¦  «        }	|  	                    ||	¦  «        S t          | t           ¦  «        r÷g }
| 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          | t0          ¦  «        r| S t          | t2          ¦  «        r-|  	                    t          | j        || gz   |¦  «        ¦  «        S t          | t6          ¦  «        rk| j        rt          | j        || gz   |¦  «        }nd }|  	                    t          | j        || gz   |¦  «        t          | j        || gz   |¦  «        |¦  «        S t          | t8          ¦  «        rF|  	                    t          | j        || gz   |¦  «        t          | j        || gz   |¦  «        ¦  «        S t          | t:          ¦  «        r3|  	                    | j        t          | j        || gz   |¦  «        ¦  «        S d S )Nr:   r   z+Variable '%s' does not resolve to anything.)r	  ÚMAX_ANAPHORA_OPERATIONSr’   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ÚbudgetÚpossible_antecedentsÚancestorrü   ÚrefexÚ
resolutionÚ
r_functionÚ
r_argumentÚr_condsrø   Úr_condÚtemprñ   s                  r4   rÛ   rÛ     s;  € ð €~Ý Õ!8Ñ9Ô9ˆÝ�*Õ3Ñ4Ô4ñ Y
Ø×)Ò)Ñ+Ô+ð 	@Ý#6Ñ#8Ô#8Ð Ø!ð ;ð ;�Ø#×,Ò,Ñ.Ô.ð 
;ð 
;�CØ—L’L‘N”N�NØ&×>Ò>¸sÑCÔC�Eð
 ”¨*Ô*=Ô*GÒGÐGØ Ô!4Ò4Ð4à,×3Ò3°EÑ:Ô:Ð:øð
;õ Ð'Ñ(Ô(¨AÒ-Ð-Ø1°!Ô4�
�
à1�
Ø×5Ò5°jÔ6IÈ:ÑVÔVÐVå)ØÔ# U¨j¨\Ñ%9¸6ñô ˆJõ *ØÔ# U¨j¨\Ñ%9¸6ñô ˆJð ×'Ò'¨
°JÑ?Ô?Ð?å	�J¥Ñ	$Ô	$ð ;
ØˆØÔ$ð 	#ð 	#ˆDÝ% d¨E°Z°LÑ,@À&ÑIÔIˆFõ ˜&Õ"4Ñ5Ô5ð Ý˜fœlÕ,?Ñ@Ô@ð )à!œ<�DØ#)¤=�F”LØ$(�F”MÝ˜fœmÕ-@ÑAÔAð Ø!œ=ð Ý9ð3Ø5;´\ñBñô ð ð
 �NŠN˜6Ñ"Ô"Ð"Ð"ØÔ ð 	Ý)ØÔ% u°
¨|Ñ';¸Vñô ˆJˆJð ˆJØ×#Ò# J¤O°W¸jÑIÔIÐIå	�JÕ :Ñ	;Ô	;ð 
ØÐå	�JÕ 1Ñ	2Ô	2ð 
Ø×#Ò#Ý˜Zœ_¨e°z°lÑ.BÀFÑKÔKñ
ô 
ð 	
õ 
�JÕ 0Ñ	1Ô	1ð 
ØÔ ð 	Ý)ØÔ% u°
¨|Ñ';¸Vñô ˆJˆJð ˆJØ×#Ò#Ý˜ZÔ-¨u¸
°|Ñ/CÀVÑLÔLÝ˜ZÔ.°¸¸Ñ0DÀfÑMÔMØñ
ô 
ð 	
õ 
�JÕ 0Ñ	1Ô	1ð 

Ø×#Ò#Ý˜ZÔ-¨u¸
°|Ñ/CÀVÑLÔLÝ˜ZÔ.°¸¸Ñ0DÀfÑMÔMñ
ô 
ð 	
õ
 
�JÕ 0Ñ	1Ô	1ð 
Ø×#Ò#ØÔÝ˜Zœ_¨e°z°lÑ.BÀFÑKÔKñ
ô 
ð 	
ð
ð 
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}|sÖd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Úheightéd   i,  )Útkinterr!  r"  Útkinter.fontr#  ÚtitleÚfontÚcanvasÚ_visitÚ
OUTERSPACEÚTOPSPACEr9  Úpackr‚   Úmaster)rV   r‚   Úsize_canvasr0  r5  r!  r"  r#  r/  ÚrightÚbottomr)  r*  s                r4   rL   zDrsDrawer.__init__~  s4  € ð ˆØð 	ð +Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø)Ð)Ð)Ð)Ð)Ð)à�R‘T”TˆFØ�LŠL˜ÑÔÐà�4˜{°Ð4Ñ4Ô4ˆDàð 
?Ø˜ ¨a¸Ð:Ñ:Ô:�Ø"�”Ø$�”Ø"&§+¢+¨c°4´?ÀDÄMÑ"RÔ"R‘�˜å˜E D¤OÑ3°SÑ9Ô9�Ø $¤/Ñ1�Ø˜ ¨e¸FÐCÑCÔC��à˜ ¨c¸#Ð>Ñ>Ô>�à�KŠK‰MŒMˆMØˆFŒKàˆŒØˆŒØˆŒˆˆr3   c                 ó@   — | j         j                             d¦  «        S )z Get the height of a line of textÚ	linespace)r0  r/  ÚmetricsrU   s    r4   Ú_get_text_heightzDrsDrawer._get_text_height¤  s   € àŒ{Ô×'Ò'¨Ñ4Ô4Ð4r3   c                 óÞ   — |                       | j        | j        ||¦  «         | j        r)t	          ¦   «         s| j                             ¦   «          dS |                      | j        ||¦  «        S )zDraw the DRSN)Ú_handler‚   Ú_draw_commandr5  r   Úmainloopr1  )rV   r=   Úys      r4   rë   zDrsDrawer.draw¨  sf   € à�Š�T”X˜tÔ1°1°aÑ8Ô8Ð8àŒ;ð 	/�w™yœyð 	/ØŒK× Ò Ñ"Ô"Ð"Ð"Ð"à—;’;˜tœx¨¨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
        )r>  Ú_visit_command)rV   rn   r=   rA  s       r4   r1  zDrsDrawer._visit±  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’   Ústrr0  Úcreate_textr/  ÚtupleÚcreate_rectangler<  ÚBUFFERÚcreate_linerC  )rV   r  r=   rA  r7  r8  Úhoriz_line_ys          r4   r?  zDrsDrawer._draw_command¼  sÓ   € õ �d�CÑ Ô ð 		JØŒK×#Ò# A q°¸D¼KÔ<LÐSWÐ#ÑXÔXÐXÐXÝ˜�eÑ$Ô$ð 	Jà"‰OˆU�FØŒK×(Ò(¨¨A¨u°fÑ=Ô=Ð=à�D×)Ò)Ñ+Ô+Ñ+¨t¬{¸Q©Ñ?ð ð ŒK×#Ò# A |°U¸LÑ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’   rH  r0  r/  Úmeasurer<  rJ  )rV   r  r=   rA  s       r4   rC  zDrsDrawer._visit_commandÒ  sk   € õ �d�CÑ Ô ð 	Ø˜œÔ(×0Ò0°Ñ6Ô6Ñ6¸¸D×<QÒ<QÑ<SÔ<SÑ8SÐ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        }nät	          |t          ¦  «        r| j        }nÇt	          |t          ¦  «        r| j
        }nªt	          |t          ¦  «        r| j        }n�t	          |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
        )rC  Ú_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=   rA  r7  r8  r˜   s           r4   r>  zDrsDrawer._handleà  s”  € ð �dÔ)Ò)Ð)ðà"Ô1°AÑ5�Ø#Ô3°aÑ7�Ø˜v�Ð&øÝ!ð ð ð à�ðøøøõ �jÕ"?Ñ@Ô@ð 	;ØÔ5ˆGˆGÝ˜
¥CÑ(Ô(ð 	;ØÔ&ˆGˆGÝ˜
Õ$8Ñ9Ô9ð 	;ØÔ4ˆGˆGÝ˜
Õ$7Ñ8Ô8ð 	;ØÔ3ˆGˆGÝ˜
Õ$4Ñ5Ô5ð 		;ØÔ3ˆGˆGÝ˜
Õ$<Ñ=Ô=ð 	;ØÔ8ˆGˆGÝ˜
Õ$7Ñ8Ô8ð 	;ØÔ5ˆGˆGÝ˜
¥NÑ3Ô3ð 	;ØÔ1ˆGˆGå˜JÔ0Ô9Ñ:Ô:Ð:à!˜' *¨g°q¸!Ñ<Ô<‰ˆ�ð %*¨A¡Iˆ
Ô!Ø%+¨a¡Zˆ
Ô"à�vˆÐs   �% ¥
2±2c                 ó"   —  |d|z  ||¦  «        S )NrA  r2   )rV   rn   r[  r=   rA  s        r4   rT  z$DrsDrawer._handle_VariableExpression  s   € Øˆw�t˜jÑ(¨!¨QÑ/Ô/Ð/r3   c           
      ó  — |                       t          j        ||¦  «        d         }|                      |j        |||¦  «        \  }} |t          j        ||                      |||z
  |                      ¦   «         ¦  «        ¦  «         ||fS rq   )rC  r    ÚNOTr>  r¦   Ú_get_centered_topr<  ©rV   rn   r[  r=   rA  r7  r8  s          r4   rV  z#DrsDrawer._handle_NegatedExpression  sŽ   € à×#Ò#¥I¤M°1°aÑ8Ô8¸Ô;ˆð Ÿ,š, z¤¸ÀÈÑJÔJ‰ˆ�ð 	ˆÝŒMØØ×"Ò" 1 f¨q¡j°$×2GÒ2GÑ2IÔ2IÑ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&   è è € Ð>Ð>¨˜D 1™HÐ>Ð>Ð>Ð>Ð>Ð>r3   z     r@   )rL  rv   rã   rw   r>  r9  r<  )rV   rn   r[  r=   rA  Úleftr8  rv   Ú	max_rightrø   r7  s              r4   rU  zDrsDrawer._handle_DRS!  s  € Ø�4”;‰ˆØ�T”[‘ˆð Œ?ð 	Ø—8’8Ð>Ð>¨j¬oÐ>Ñ>Ô>Ñ>Ô>ˆDˆDàˆDØ%˜g d¨D°&Ñ9Ô9Ñˆ�FØ�$”+ ‘/Ñ!ˆð Ôð 	<Ø"Ô(ð &ð &�Ø"&§,¢,¨t°W¸dÀFÑ"KÔ"K‘�˜Ý 	¨5Ñ1Ô1�	Ø˜$œ+Ñ%��ð&ð
 �d×+Ò+Ñ-Ô-°´Ñ;Ñ;ˆFð 	�T”[Ñ ˆ	Øˆw˜	 6Ð*¨A¨qÑ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   )r1  )r<   ré  rV   r=   rA  s     €€€r4   r>   z;DrsDrawer._handle_ApplicationExpression.<locals>.<listcomp>D  s.   ø€ Ð KÐ KÐ K¸s §¢¨S°!°QÑ!7Ô!7¸Ô!:Ð KÐ KÐ Kr3   r   r)  )rô  r’   rÕ   r�   rž   r1  r9  r_  rS  r>  r<  r    r`   Ú	enumerater  rs   ru   )rV   rn   r[  r=   rA  r�   rõ  Úfunction_bottomÚ
max_bottomÚline_heightÚfunction_drawing_topr7  Úcentred_string_topr  ré  Úarg_drawing_tops   `  ``           r4   rY  z'DrsDrawer._handle_ApplicationExpression:  sÞ  øøø€ Ø#×+Ò+Ñ-Ô-‰ˆ�$Ý˜(Õ$AÑBÔBð 	)à!Ô*ˆHØÔ'Ð(ˆDð Ÿ+š+ h°°1Ñ5Ô5°aÔ8ˆÝØÐÐ KÐ KÐ KÐ KÐ KÐ KÀdÐ KÑ KÔ KÑKñ
ô 
ˆ
ð ! 1‘nˆð  $×5Ò5Øˆ{˜HÔ4ñ 
ô  
Ðð —’˜X w°Ð3GÑHÔHÈÔKˆð "×3Ò3Øˆ{˜D×1Ò1Ñ3Ô3ñ
ô 
Ðð ��	œ¨Ð/AÑBÔBÀ1ÔEˆõ   ‘o”oð 	Uð 	U‰FˆAˆsØ"×4Ò4Ø�; Ô 3ñô ˆOð —L’L  g¨u°oÑFÔFÀqÔIˆEà�1‰u•s˜4‘y”yÒ Ð à˜¥	¤°#Ñ 5°uÐ>PÑQÔQÐRSÔT�øð ��	œ¨Ð0BÑCÔCÀAÔFˆà�zÐ"Ð"r3   c           
      ó:  — t           j        d|j        z  z   t           j        z   }|                      |||¦  «        d         }|                      |j        |||¦  «        \  }} ||||                      |||z
  |                      ¦   «         ¦  «        ¦  «         ||fS )NrA  r   )	r    ÚLAMBDAr�   r¬  rC  r>  r¦   r_  r<  )rV   rn   r[  r=   rA  r¥   r7  r8  s           r4   rW  z"DrsDrawer._handle_LambdaExpressione  s¤   € åÔ$ t¨jÔ.AÑ'AÑAÅIÄMÑQˆ	Ø×#Ò# I¨q°!Ñ4Ô4°QÔ7ˆð Ÿ,š, z¤¸ÀÈÑJÔJ‰ˆ�ð 	ˆØ�q˜$×0Ò0°°F¸Q±JÀ×@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 )r1  r‡   rˆ   r9  r_  r<  r    r`   rS  r>  r³  ru   )rV   rn   r[  r=   rA  Úfirst_heightÚsecond_heightrk  rm  r7  Úfirst_bottomÚsecond_bottoms               r4   rX  z"DrsDrawer._handle_BinaryExpressiont  s~  € à—{’{ :Ô#3°Q¸Ñ:Ô:¸1Ô=ˆØŸš JÔ$5°q¸!Ñ<Ô<¸QÔ?ˆÝ˜,¨Ñ6Ô6ˆð "×3Ò3Øˆ{˜D×1Ò1Ñ3Ô3ñ
ô 
Ðð ��	œ¨Ð+=Ñ>Ô>¸qÔAˆð "Ô'Ô7ˆØ $§¢ØÔØØØ×"Ò" 1 k°<Ñ@Ô@ñ	!
ô !
Ñˆ�ð �˜ ×!1Ò!1Ñ!3Ô!3Ñ3°UÐ<NÑOÔOÐPQÔRˆð #Ô)Ô9ˆØ!%§¢ØÔØØØ×"Ò" 1 k°=ÑAÔAñ	"
ô "
Ñˆ�ð ��	œ¨Ð0BÑCÔCÀAÔFˆà•s˜<¨Ñ7Ô7Ð8Ð8r3   c                 óz   —  ||j         ||¦  «        d         }|                      |j        |||¦  «        \  }}||fS rq   )r�   r>  r¦   r`  s          r4   rZ  z DrsDrawer._handle_DrtPropositionš  sF   € à�˜
Ô+¨Q°Ñ2Ô2°1Ô5ˆð Ÿ,š, z¤¸ÀÈÑJÔ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.r@   r2   )rV   ÚtopÚfull_heightÚitem_heights       r4   r_  zDrsDrawer._get_centered_top£  s   € ð �k KÑ/°1Ñ4Ñ4Ð4r3   r  )r   r   )r'   r(   r)   rL  r3  r2  rL   r<  rë   r1  r?  rC  r>  rT  rV  rU  rY  rW  rX  rZ  r_  r2   r3   r4   rê   rê   y  s!  € € € € € Ø€FØ€HØ€Jð$ð $ð $ð $ðL5ð 5ð 5ð   8ð /ð /ð /ð /ð	Cð 	Cð 	Cð/ð /ð /ð,ð ð ð,ð ,ð ,ð ,ð\0ð 0ð 0ðð ð ð 2ð 2ð 2ð2)#ð )#ð )#ðVð ð ð$9ð $9ð $9ðLð ð ð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   Údemor…  ª  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Ý	ˆ"�I„I€IØ	×	Ò	�( 3™-œ-Ñ	(Ô	(€BÝ	ˆ"�I„I€IÝ	ˆ"�Š(�O„O€Oå	Ð
9Ñ:Ô:Ð:Ý	Õ
˜5˜5Ð!PÑQÔQÑ
RÔ
RÑSÔSÐSÝ	Ý˜˜ÐUÑVÔVÑWÔWñô ð õ 
Õ
˜5˜5Ð!@ÑAÔAÑ
BÔ
BÑCÔCÐCå	Ð
5Ñ6Ô6Ð6Ø	€Eˆ*ÑÔ×"Ò"Ñ$Ô$Ð$Ø	€EØKñô ç‚l�n„n€nØ	€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=   r�  z([x],[])z([x],[man(x)])r|  r}  z\x.([],[man(x), walks(x)])z\x y.([],[sees(x,y)])z)([],[(([],[walks(x)]) + ([],[runs(x)]))])r~  r  )r,  r"  ÚImportErrorr  rª   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	  rÛ   rê   r…  rŠ  r'   r2   r3   r4   ú<module>r�     så  ðð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð6 Ð Ð Ð Ð Ð ð+ð +ð +ð +ð +�ñ +ô +ð +ð4ð 4ð 4ð 4ð 4�ñ 4ô 4ð 4ðDdð dð dð dð dñ dô dð dðN|ð |ð |ð |ð |ˆ-˜ñ |ô |ð |ð~/ð /ð /ðð ð ð ð  MÐ3Mñ ô ð ð"	ð 	ð 	ð 	ð 	Ø!Ð#?ñ	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ø!Ð#=ñ	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ø#Ð%<ñ	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð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	ð 	ð 	ð 	ð 	 )ñ 	ô 	ð 	ð $Ð ðð ð ð ð ñ ô ð ð@ (*°$ð a
ð a
ð a
ð a
ðHn5ð n5ð n5ð n5ð n5ñ n5ô n5ð n5ðb	%Nð %Nð %NðPð ð ð2 ˆzÒÐØ€D�F„F€F€F€Fð Ðr3   