ó
    ´OÂfãÉ  ã                   óþ  • S SK r S SKJr  S SKJr  S SKJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr   S SKJ r J!r!  S SK"J#r#  S SK$J%r%   " S S	\5      r' " S
 S\5      r( " S S5      r) " S S\)\5      r*S r+ " S S\)\5      r, " S S\,\5      r- " S S\,\5      r. " S S\-\5      r/ " S S\,\5      r0 " S S\)\5      r1 " S S\)\5      r2 " S S \)\5      r3 " S! S"\)\5      r4 " S# S$\4\5      r5 " S% S&\5\5      r6 " S' S(\4\5      r7 " S) S*\55      r8 " S+ S,\)\
5      r9S- r: " S. S/\;\)\5      r< " S0 S1\=5      r>/ 4S2 jr? " S3 S45      r@S5 rAS6 rB\CS7:X  a  \A" 5         gg! \& a     GNf = f)8é    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)ÚCanvasÚTk)ÚFont)Úin_idlec                   ó|   • \ rS rSrSrSrSrSrSrSr	\\\\	/r
\R                  \
-   r\R                  \/-   \
-   rSrg	)
Ú	DrtTokensé5   ÚDRSÚ+ÚPROÚ[Ú]Ú:© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r%   ÚDRS_CONCÚPRONOUNÚOPEN_BRACKETÚCLOSE_BRACKETÚCOLONÚPUNCTr   ÚSYMBOLSÚTOKENSÚ__static_attributes__r+   ó    Ú./usr/lib/python3/dist-packages/nltk/sem/drt.pyr#   r#   5   sQ   † Ø
€CØ€HØ€GØ€LØ€MØ€Eà�| ]°EÐ:€Eà�n‰n˜uÑ$€Gà�]‰]˜c˜UÑ" UÑ*ƒFr9   r#   c                   ór   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)Ú	DrtParseréD   z$A lambda calculus expression parser.c                 óh  • [         R                  " U 5        [        [        R                   Vs/ s H  oS4PM     sn[        R
                   Vs/ s H  oS4PM     sn-   [        S4/-   [        R                  [        R                  -    Vs/ s H  oS4PM     sn-   [        R                  S4/-   [        R                  S4/-   [        R                   Vs/ s H  oS4PM     sn-   [        R                   Vs/ s H  oS4PM     sn-   S	/-   5      U l        g s  snf s  snf s  snf s  snf s  snf )
Né   é   é   é   é   é   é   é   )Né	   )r   Ú__init__Údictr#   ÚLAMBDA_LISTÚNOT_LISTr   ÚEQ_LISTr   ÚNEQ_LISTr4   r0   ÚOR_LISTÚIMP_LISTÚoperator_precedence)ÚselfÚxs     r:   rH   ÚDrtParser.__init__G   s&  € Ü×Ò˜TÔ"ä#'Ü&×2Ò2Ó3Ò2˜�‹VÑ2Ñ3Ü(×1Ò1Ó2Ò1˜!�1‹vÑ1Ñ2ñ3ä�Qˆxˆjñô  )×0Ñ0´6·?±?ÒBÓCÒB˜!�1‹vÑBÑCñDô —‘ Ð#Ð$ñ	%ô
 ×"Ñ" AÐ&Ð'ñ(ô  )×0Ò0Ó1Ò0˜!�1‹vÑ0Ñ1ñ2ô  )×1Ò1Ó2Ò1˜!�1‹vÑ1Ñ2ñ3ð ˆkñó
$
ˆÕ ùÚ3ùÚ2ùâCùò 2ùÚ2s   ®DÁD 
ÂD%
ÃD*
Ã;D/
c                 ó"   • [         R                  $ )z#This method exists to be overridden)r#   r6   ©rQ   s    r:   Úget_all_symbolsÚDrtParser.get_all_symbolsV   s   € ä× Ñ Ð r9   c                 ó(   • U[         R                  ;  $ ©N)r#   r7   )rQ   Útoks     r:   Ú
isvariableÚDrtParser.isvariableZ   s   € Øœ)×*Ñ*Ñ*Ð*r9   c                 óü  • U[         R                  ;   a  U R                  X5      $ U[         R                  ;   a  U R	                  X5      $ U[         R
                  :X  a[  U R                  S5      (       a4  U R                  S5      [         R                  :X  a  U R                  X5      $ U R                  X5      $ UR                  5       [         R                  :X  a0  U R                  [         R
                  5        U R                  X5      $ U R                  U5      (       a[  U R                  S5      (       a4  U R                  S5      [         R                  :X  a  U R!                  X5      $ U R#                  X5      $ g)z_This method is intended to be overridden for logics that
use different operators or expressionsr   N)r#   rK   Úhandle_negationrJ   Úhandle_lambdaÚOPENÚinRangeÚtokenr2   Ú
handle_DRSÚhandle_openÚupperr%   ÚassertNextTokenr[   r4   Úhandle_propÚhandle_variable)rQ   rZ   Úcontexts      r:   ÚhandleÚDrtParser.handle]   s  € ð ”)×$Ñ$Ó$Ø×'Ñ'¨Ó5Ð5à”I×)Ñ)Ó)Ø×%Ñ% cÓ3Ð3à”I—N‘NÓ"Ø�|‰|˜A�‰ 4§:¡:¨a£=´I×4JÑ4JÓ#JØ—‘ sÓ4Ð4à×'Ñ'¨Ó5Ð5à�Y‰Y‹[œIŸM™MÓ)Ø× Ñ ¤§¡Ô0Ø—?‘? 3Ó0Ð0à�_‰_˜S×!Ñ!Ø�|‰|˜A�‰ 4§:¡:¨a£=´I·O±OÓ#CØ×'Ñ'¨Ó5Ð5à×+Ñ+¨CÓ9Ð9ð	 "r9   c                 ó   • [        U5      $ rY   ©ÚDrtNegatedExpression)rQ   Ú
expressions     r:   Úmake_NegatedExpressionÚ DrtParser.make_NegatedExpressionv   s   € Ü# JÓ/Ð/r9   c                 ó,  • U R                  5       nU R                  S5      (       a3  U R                  S5      [        R                  :X  a  U R                  5         U R                  U5      nU R                  [        R                  5        [        X4S 5      $ ©Nr   )	Úhandle_refsra   rb   r#   ÚCOMMAÚhandle_condsrf   ÚCLOSEr%   )rQ   rZ   ri   ÚrefsÚcondss        r:   rc   ÚDrtParser.handle_DRSy   sh   € à×ÑÓ!ˆà�L‰L˜�O‰O §
¡
¨1£´·±Ó @à�J‰JŒLØ×!Ñ! 'Ó*ˆØ×ÑœYŸ_™_Ô-Ü�4 Ó%Ð%r9   c                 ó"  • U R                  [        R                  5        / nU R                  S5      (       a¸  U R	                  S5      [        R
                  :w  a•  U(       a3  U R	                  S5      [        R                  :X  a  U R	                  5         UR                  U R                  S5      5        U R                  S5      (       a%  U R	                  S5      [        R
                  :w  a  M•  U R                  [        R
                  5        U$ )Nr   Ú
quantified)	rf   r#   r2   ra   rb   r3   ru   ÚappendÚget_next_token_variable)rQ   rx   s     r:   rt   ÚDrtParser.handle_refs„   s²   € Ø×ÑœY×3Ñ3Ô4ØˆØ�l‰l˜1�o‰o $§*¡*¨Q£-´9×3JÑ3JÓ"Jæ˜Ÿ
™
 1›¬¯©Ó8Ø—
‘
”Ø�K‰K˜×4Ñ4°\ÓBÔCð	 �l‰l˜1�o‰o $§*¡*¨Q£-´9×3JÑ3JÕ"Jð
 	×ÑœY×4Ñ4Ô5Øˆr9   c                 ó"  • U R                  [        R                  5        / nU R                  S5      (       a¸  U R	                  S5      [        R
                  :w  a•  U(       a3  U R	                  S5      [        R                  :X  a  U R	                  5         UR                  U R                  U5      5        U R                  S5      (       a%  U R	                  S5      [        R
                  :w  a  M•  U R                  [        R
                  5        U$ rs   )	rf   r#   r2   ra   rb   r3   ru   r}   Úprocess_next_expression)rQ   ri   ry   s      r:   rv   ÚDrtParser.handle_conds�   s²   € Ø×ÑœY×3Ñ3Ô4ØˆØ�l‰l˜1�o‰o $§*¡*¨Q£-´9×3JÑ3JÓ"Jæ˜Ÿ™ A›¬)¯/©/Ó9Ø—
‘
”Ø�L‰L˜×5Ñ5°gÓ>Ô?ð	 �l‰l˜1�o‰o $§*¡*¨Q£-´9×3JÑ3JÕ"Jð
 	×ÑœY×4Ñ4Ô5Øˆr9   c                 óš   • U R                  U5      nU R                  S5        U R                  [        R                  5      n[        X45      $ )Nr*   )Úmake_VariableExpressionrf   r�   r#   r4   ÚDrtProposition)rQ   rZ   ri   ÚvariableÚdrss        r:   rg   ÚDrtParser.handle_propš   s?   € Ø×/Ñ/°Ó4ˆØ×Ñ˜SÔ!Ø×*Ñ*¬9¯?©?Ó;ˆÜ˜hÓ,Ð,r9   c                 ó   • [        X5      $ )zdThis method serves as a hook for other logic parsers that
have different equality expression classes©ÚDrtEqualityExpression©rQ   ÚfirstÚseconds      r:   Úmake_EqualityExpressionÚ!DrtParser.make_EqualityExpression    s   € ô % UÓ3Ð3r9   c                 ó˜   • U[         R                  :X  a  S $ U[         R                  ;   a  [        $ U[         R                  ;   a  S nU$ g)zZThis method serves as a hook for other logic parsers that
have different boolean operatorsc                 ó   • [        XS 5      $ rY   ©ÚDrtConcatenation©r�   rŽ   s     r:   Ú<lambda>Ú9DrtParser.get_BooleanExpression_factory.<locals>.<lambda>©   s   € Ô)9¸%ÈÔ)Nr9   c                 óð   • [        U [        5      (       a!  [        U R                  U R                  U5      $ [        U [        5      (       a!  [	        U R
                  U R                  U5      $ [        S5      e©Nz'Antecedent of implication must be a DRS)Ú
isinstancer%   rx   ry   r”   r�   rŽ   Ú	Exceptionr•   s     r:   Úmake_imp_expressionÚDDrtParser.get_BooleanExpression_factory.<locals>.make_imp_expression®   sW   € Ü˜e¤S×)Ñ)Ü˜uŸz™z¨5¯;©;¸Ó?Ð?Ü˜eÔ%5×6Ñ6Ü+¨E¯K©K¸¿¹ÀvÓNÐNÜÐ IÓJÐJr9   N)r#   r0   rN   ÚDrtOrExpressionrO   )rQ   rZ   rœ   s      r:   Úget_BooleanExpression_factoryÚ'DrtParser.get_BooleanExpression_factory¥   sK   € ð ”)×$Ñ$Ó$ÙNÐNØ”I×%Ñ%Ó%Ü"Ð"Ø”I×&Ñ&Ó&òKð 'Ð&àr9   c                 ó   • U" X#5      $ rY   r+   )rQ   Úfactoryr�   rŽ   s       r:   Úmake_BooleanExpressionÚ DrtParser.make_BooleanExpression¹   s   € Ù�uÓ%Ð%r9   c                 ó   • [        X5      $ rY   ©ÚDrtApplicationExpression)rQ   ÚfunctionÚarguments      r:   Úmake_ApplicationExpressionÚ$DrtParser.make_ApplicationExpression¼   s   € Ü'¨Ó;Ð;r9   c                 ó*   • [        [        U5      5      $ rY   )ÚDrtVariableExpressionr   )rQ   Únames     r:   r„   Ú!DrtParser.make_VariableExpression¿   s   € Ü$¤X¨d£^Ó4Ð4r9   c                 ó   • [        X5      $ rY   )ÚDrtLambdaExpression)rQ   Ú	variablesÚterms      r:   Úmake_LambdaExpressionÚDrtParser.make_LambdaExpressionÂ   s   € Ü" 9Ó3Ð3r9   )rP   N)r,   r-   r.   r/   Ú__doc__rH   rV   r[   rj   rp   rc   rt   rv   rg   r�   rŸ   r£   rª   r„   r´   r8   r+   r9   r:   r<   r<   D   sP   † Ù.ò
ò!ò+ò:ò20ò	&ò	ò	ò-ò4ò
ò(&ò<ò5õ4r9   r<   c                   ó¸   • \ rS rSrSr\" 5       r\S 5       rS r	S r
S rS rS rSS
 jr\S 5       rSS jrS rSS jrS rS rS rS rS rS rS rS rSrg	)ÚDrtExpressionéÆ   zS
This is the base abstract DRT Expression from which every DRT
Expression extends.
c                 ó8   • U R                   R                  U5      $ rY   )Ú_drt_parserÚparse)ÚclsÚss     r:   Ú
fromstringÚDrtExpression.fromstringÎ   s   € à�‰×$Ñ$ QÓ'Ð'r9   c                 ó   • [        X5      $ rY   r¦   ©rQ   Úothers     r:   ÚapplytoÚDrtExpression.applytoÒ   s   € Ü'¨Ó4Ð4r9   c                 ó   • [        U 5      $ rY   rm   rU   s    r:   Ú__neg__ÚDrtExpression.__neg__Õ   s   € Ü# DÓ)Ð)r9   c                 ó   • [         $ rY   )ÚNotImplementedrÂ   s     r:   Ú__and__ÚDrtExpression.__and__Ø   s   € ÜÐr9   c                 óF   • [        U[        5      (       d   e[        X5      $ rY   )rš   r¸   rž   rÂ   s     r:   Ú__or__ÚDrtExpression.__or__Û   s    € Ü˜%¤×/Ñ/Ð/Ð/Ü˜tÓ+Ð+r9   c                 ó  • [        U[        5      (       d   e[        U [        5      (       a!  [        U R                  U R                  U5      $ [        U [
        5      (       a!  [        U R                  U R                  U5      $ [        S5      er™   )	rš   r¸   r%   rx   ry   r”   r�   rŽ   r›   rÂ   s     r:   Ú__gt__ÚDrtExpression.__gt__ß   sj   € Ü˜%¤×/Ñ/Ð/Ð/Ü�dœC× Ñ Ü�t—y‘y $§*¡*¨eÓ4Ð4Ü�dÔ,×-Ñ-Ü# D§J¡J°·±¸UÓCÐCÜÐAÓBÐBr9   Nc                 óÊ   • [        U[        5      (       d   eU R                  5       R                  5       nUR                  5       R                  5       nUR	                  XB5      $ )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)rQ   rÃ   ÚproverÚf1Úf2s        r:   rÖ   ÚDrtExpression.equivç   sO   € ô ˜%¤×/Ñ/Ð/Ð/à�]‰]‹_× Ñ Ó"ˆØ�^‰^Ó×!Ñ!Ó#ˆØ�x‰x˜Ó#Ð#r9   c                 óF   • [        SU R                  R                  -  5      e)Nz#'%s' object has no attribute 'type')ÚAttributeErrorÚ	__class__r,   rU   s    r:   ÚtypeÚDrtExpression.typeö   s!   € äØ1°D·N±N×4KÑ4KÑKó
ð 	
r9   c                 ó   • [        5       erY   ©ÚNotImplementedError)rQ   Ú	signatures     r:   Ú	typecheckÚDrtExpression.typecheckü   s   € Ü!Ó#Ð#r9   c                 ó   • [        XS 5      $ rY   r“   rÂ   s     r:   Ú__add__ÚDrtExpression.__add__ÿ   s   € Ü ¨TÓ2Ð2r9   c                 ó   • [        5       e)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á   ©rQ   Ú	recursives     r:   Úget_refsÚDrtExpression.get_refs  s   € ô "Ó#Ð#r9   c                 ó  • [        U [        5      =(       as    [        U R                  [        5      =(       aR    U R                  R                  R
                  [        R                  :H  =(       a    [        U R                  [        5      $ )zIs self of the form "PRO(x)"?)
rš   r§   r¨   ÚDrtAbstractVariableExpressionr†   r®   r#   r1   r©   ÚDrtIndividualVariableExpressionrU   s    r:   Úis_pronoun_functionÚ!DrtExpression.is_pronoun_function
  sd   € ô �tÔ5Ó6÷ KÜ˜4Ÿ=™=Ô*GÓH÷Kà—‘×&Ñ&×+Ñ+¬y×/@Ñ/@Ñ@÷Kô ˜4Ÿ=™=Ô*IÓJð		
r9   c                 ó   • [        X5      $ rY   rŠ   rŒ   s      r:   r�   Ú%DrtExpression.make_EqualityExpression  s   € Ü$ UÓ3Ð3r9   c                 ó   • [        U5      $ rY   )r­   )rQ   r†   s     r:   r„   Ú%DrtExpression.make_VariableExpression  s   € Ü$ XÓ.Ð.r9   c                 ó   • [        U 5      $ rY   )Úresolve_anaphorarU   s    r:   rø   ÚDrtExpression.resolve_anaphora  s   € Ü Ó%Ð%r9   c                 ó<   • U R                  S U R                  5      $ )Nc                 ó"   • U R                  5       $ rY   )Úeliminate_equality)Úes    r:   r–   Ú2DrtExpression.eliminate_equality.<locals>.<lambda>  s   € ¨q×/CÑ/CÔ/Er9   )Úvisit_structuredrÝ   rU   s    r:   rü   Ú DrtExpression.eliminate_equality  s   € Ø×$Ñ$Ñ%EÀtÇ~Á~ÓVÐVr9   c                 ó@   • SR                  U R                  5       5      $ )z/
Draw the DRS
:return: the pretty print string
Ú
)ÚjoinÚ_prettyrU   s    r:   Úpretty_formatÚDrtExpression.pretty_format  s   € ð
 �y‰y˜Ÿ™›Ó(Ð(r9   c                 ó6   • [        U R                  5       5        g rY   )Úprintr  rU   s    r:   Úpretty_printÚDrtExpression.pretty_print&  s   € Üˆd× Ñ Ó"Õ#r9   c                 ó6   • [        U 5      R                  5         g rY   )Ú	DrsDrawerÚdrawrU   s    r:   r  ÚDrtExpression.draw)  s   € Ü�$‹×ÑÕr9   r+   rY   ©F)r,   r-   r.   r/   r¶   r<   r»   Úclassmethodr¿   rÄ   rÇ   rË   rÎ   rÑ   rÖ   ÚpropertyrÞ   rä   rç   rì   rñ   r�   r„   rø   rü   r  r	  r  r8   r+   r9   r:   r¸   r¸   Æ   s�   † ññ
 “+€Kàñ(ó ð(ò5ò*òò,òCô$ð ñ
ó ð
ô
$ò3ô$ò
ò4ò/ò&òWò)ò$õr9   r¸   c                   óŠ   • \ rS rSrSrSS jrSS jrS rSS jrS r	S	 r
S
 rS rS rS rS rS r\R$                  rS rSrg)r%   i-  z%A Discourse Representation Structure.Nc                 ó(   • Xl         X l        X0l        g)z’
:param refs: list of ``DrtIndividualVariableExpression`` for the
    discourse referents
:param conds: list of ``Expression`` for the conditions
N)rx   ry   Ú
consequent)rQ   rx   ry   r  s       r:   rH   ÚDRS.__init__0  s   € ð Œ	ØŒ
Ø$�r9   c                 ó€  • XR                   ;   a¼  U(       d  U $ U R                   R                  U5      nU R                  (       a  U R                  R                  XSU5      nOSn[	        U R                   SU UR
                  /-   U R                   US-   S -   U R                   Vs/ s H  nUR                  XSU5      PM     snU5      $ U(       aì  [        U R                   5      UR                  5       -   HÂ  n[        U5      n	[        U	5      n
U R                   R                  U5      nU R                  (       a  U R                  R                  XŠSU5      nOSn[	        U R                   SU U	/-   U R                   US-   S -   U R                   Vs/ s H  nUR                  XŠSU5      PM     snU5      n MÄ     U R                  (       a  U R                  R                  XX45      nOSn[	        U R                   U R                   Vs/ s H  nUR                  XX45      PM     snU5      $ s  snf s  snf s  snf )úWReplace all instances of variable v with expression E in self,
where v is free in self.TNr?   )rx   Úindexr  Úreplacer%   r†   ry   ÚsetÚfreer   r­   )rQ   r†   ro   Úreplace_boundÚalpha_convertÚir  ÚcondÚrefÚnewvarÚnewvarexs              r:   r  ÚDRS.replace:  s  € ð —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óâ$.˜Dð Ÿ™ X¸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ð )-¯
ª
óâ(2 ð !ŸL™L¨¸¸mÖLÙ(2ñð #ó’Dñ >ð( ��Ø!Ÿ_™_×4Ñ4Ø¨-ó‘
ð "�
ÜØ—	‘	ð !%§
¢
óâ *˜ð —L‘L °}ÖTÙ *ñð óð ùòIùò,ùò s   Â'H1
ÆH6ÈH;
c                 óF  • [        [        R                  U R                   Vs/ s H  oR	                  5       PM     sn[        5       5      nU R                  (       a)  UR                  U R                  R	                  5       5        U[        U R                  5      -
  $ s  snf )z:see: Expression.free())	r   ÚoperatorÚor_ry   r  r  r  Úupdaterx   )rQ   ÚcÚ
conds_frees      r:   r  ÚDRS.freex  sh   € äœHŸL™L¸T¿ZºZÓ*HºZ¸¯6©6®8¹ZÑ*HÌ#Ë%ÓPˆ
Ø�?�?Ø×Ñ˜dŸo™o×2Ñ2Ó4Ô5ØœC §	¡	›NÑ*Ð*ùò +Is   £B
c                 ó  • U(       az  U R                   [        [        R                  " S U R                   5       5      5      -   nU R
                  (       a*  UR                  U R
                  R                  S5      5        U$ U R                   $ )ú#:see: AbstractExpression.get_refs()c              3   óB   #   • U  H  oR                  S 5      v •  M     g7f©TN)rì   )Ú.0r(  s     r:   Ú	<genexpr>ÚDRS.get_refs.<locals>.<genexpr>ƒ  s   é € Ð#Iºj¸§J¡J¨t×$4Ð$4ºjùs   ‚T)rx   Úlistr   Úfrom_iterablery   r  Úextendrì   )rQ   rë   Ú
conds_refss      r:   rì   ÚDRS.get_refs  sh   € æØŸ™¤TÜ×#Ò#Ñ#I¸d¿jºjÓ#IÓIó&ñ ˆJð ��Ø×!Ñ! $§/¡/×":Ñ":¸4Ó"@ÔAØÐà—9‘9Ðr9   c                 ó²   • [        [        XR                  5      5      nU R                  (       a!  UR	                  U" U R                  5      5        U" U5      $ ©z:see: Expression.visit())r2  Úmapry   r  r}   )rQ   r¨   Ú
combinatorÚpartss       r:   ÚvisitÚ	DRS.visit‹  s<   € ä”S˜§:¡:Ó.Ó/ˆØ�?�?Ø�L‰L™ $§/¡/Ó2Ô3Ù˜%Ó Ð r9   c           	      ó¬   • U R                   (       a  U" U R                   5      OSnU" U R                  [        [        XR                  5      5      U5      $ )ú#:see: Expression.visit_structured()N)r  rx   r2  r9  ry   )rQ   r¨   r:  r  s       r:   rÿ   ÚDRS.visit_structured’  s9   € à26·/·/‘X˜dŸo™oÔ.Àtˆ
Ù˜$Ÿ)™)¤T¬#¨h¿
¹
Ó*CÓ%DÀjÓQÐQr9   c                 ó�  • U nSnU[        UR                  5      :  GaV  UR                  U   n[        U[        5      (       Ga  [        UR                  [
        5      (       añ  [        UR                  [
        5      (       aÒ  [        [        [        UR                  5      UR                  R                  1-
  5      UR                  S U UR                  US-   S  -   UR                  5      nUR                  R                  UR                  R                  :w  a4  UR                  UR                  R                  UR                  SS5      nSnUS-  nUS-  nU[        UR                  5      :  a  GMV  / nUR                   H~  nUR                  5       nUR                  5       n[        U[        5      (       a5  UR                  (       d$  UR                  (       d  UR                  (       d  Mm  UR!                  U5        M€     UR                  (       a  UR                  R                  5       OS n[        UR                  XG5      $ )Nr   r?   F)Úlenry   rš   r   r�   r   rŽ   r%   r2  r  rx   r†   r  r  rü   rÔ   r}   )rQ   r‡   r  r  ry   Únew_condÚnew_cond_simpr  s           r:   rü   ÚDRS.eliminate_equality—  s¯  € ØˆØˆØ”#�c—i‘i“.Ô Ø—9‘9˜Q‘<ˆDä˜4Ô!3×4Ò4Ü˜tŸz™zÔ+E×FÑFÜ˜tŸ{™{Ô,F×GÑ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Ñ2Ø ×%×%Ø ×&×&Ø ×+×+Ñ+à—‘˜XÖ&ñ ð =@¿N¿N�S—^‘^×6Ñ6Ô8ÐPTˆ
Ü�3—8‘8˜UÓ/Ð/r9   c                 óÒ  • U R                   (       a¶  S nU R                  (       a8  [        [        U R                   Vs/ s H  o"R	                  5       PM     sn5      nU(       a$  [        XR                   R	                  5       5      nOU R                   R	                  5       nU R                  S S S2    H  n[        X15      nM     U$ U R                  (       d  [        S5      e[        [        U R                   Vs/ s H  o"R	                  5       PM     sn5      n[        [        U R                  U R                  5      S S S2   5       H  n[        X15      nM     U$ s  snf s  snf )Néÿÿÿÿz-Cannot convert DRS with no conditions to FOL.)r  ry   r   r   rÕ   r   rx   r   r›   r9  r   Ú_order_ref_stringsr   )rQ   Úaccumr(  r   s       r:   rÕ   ÚDRS.fol»  s  € Ø�?�?ØˆEØ�z�zÜœ}ÀÇ
Â
Ó.KÂ
¸1¯u©u®wÁ
Ñ.KÓL�æÜ% e¯_©_×-@Ñ-@Ó-BÓC‘àŸ™×+Ñ+Ó-�à—y‘y¡ 2 ”�Ü% cÓ1’ñ 'ð ˆLð —:—:ÜÐ OÓPÐPÜœ=¸D¿JºJÓ*GºJ°q¯5©5®7¹JÑ*GÓHˆEÜœ8 T×%<Ñ%<¸T¿Y¹YÓ%GÉÈ"ÈÑ%MÖN�Ü(¨Ó4’ñ OàˆLùò% /Lùò +Hs   ½E
Ã<E$
c           	      óÜ  • SR                  U R                  U R                  5      5      nU R                   Vs/ s H  n[	        S UR                  5       5      PM      sn VVs/ s H  nU  H  nUPM     M     nnn[        [        U5      /[        [        [        U5      5      -   5      nSSU-  -   S-   SUR                  U5      -   S-   SS	U-  -   S
-   /U Vs/ s H  nSUR                  U5      -   S-   PM     sn-   SSU-  -   S-   /-   nU R                  (       a=  [        R                  U[        R                  U R                  R                  5       5      $ U$ s  snf s  snnf s  snf )NÚ c                 ó"   • U R                  5       $ rY   )Ústrip)r¾   s    r:   r–   ÚDRS._pretty.<locals>.<lambda>Ù  s
   €  §¡¤r9   z _Ú_z_ z| z |z|-Ú-z-|z|_z_|)r  rH  rx   ry   Úfilterr  ÚmaxrB  r2  r9  Úljustr  ÚDrtBinaryExpressionÚ_assemble_prettyr#   ÚIMP)rQ   Ú	refs_liner  Ú	cond_lineÚ
cond_linesÚlengthÚliner‡   s           r:   r  ÚDRS._prettyÓ  sz  € Ø—H‘H˜T×4Ñ4°T·Y±YÓ?Ó@ˆ	ð
 IMÏ
Ê
óÚHRÀ”Ñ*¨D¯L©L«NÖ;É
òô
ò�	ô "�ó	 ñ "ñ	 ñð 	ñ 
ô ”c˜)“nÐ%¬¬S´°jÓ-AÓ(BÑBÓCˆð �s˜V‘|Ñ# dÑ*Ø�y—‘ vÓ.Ñ.°Ñ5Ø�s˜V‘|Ñ# dÑ*ðñ
 =GÓGºJ°Dˆt�d—j‘j Ó(Ñ(¨4Ô/¹JÑGñHð �c˜F‘lÑ" TÑ)Ð*ñ+ð 	ð �?�?Ü&×7Ñ7Ø”Y—]‘] D§O¡O×$;Ñ$;Ó$=óð ð ˆ
ùò'ùó
ùò Hs   ¹%EÁ$E#Ã!E)c                 óª  • U Vs/ s H  nSU-  PM
     nn/ n/ n/ n/ nU H}  n[        U5      (       a  UR                  U5        M&  [        U5      (       a  UR                  U5        MI  [        U5      (       a  UR                  U5        Ml  UR                  U5        M     [	        U5      [	        US S9-   [	        US S9-   [	        US S9-   $ s  snf )Nú%sc                 óF   • [        U SS  S/[        U SS  5      S:H     5      $ )Nr@   rG  r   ©ÚintrB  ©Úvs    r:   r–   Ú(DRS._order_ref_strings.<locals>.<lambda>þ  s&   € ¬s°A°a°b°E¸2°;¼sÀ1ÀQÀRÀ5»zÈQ¹Ñ3OÔ/Pr9   )Úkeyc           	      óP   • U S   [        U SS  S/[        U SS  5      S:H     5      4$ ©Nr   r?   rG  ra  rc  s    r:   r–   re  ÿ  s0   € ¨q°©t´S¸!¸A¸B¸%À¸ÄSÈÈ1È2ÈÃZÐSTÁ_Ñ9UÓ5VÑ.Wr9   c           	      óP   • U S   [        U SS  S/[        U SS  5      S:H     5      4$ rh  ra  rc  s    r:   r–   re     s0   € ¨a°©d´C¸¸1¸2¸À¸ÄCÈÈ!È"ÈÃJÐRSÁOÑ8TÓ4UÑ-Vr9   )r   r}   r   r   Úsorted)	rQ   rx   r   ÚstringsÚind_varsÚ	func_varsÚ
event_varsÚ
other_varsr¾   s	            r:   rH  ÚDRS._order_ref_stringsí  sÒ   € Ù)-Ó.ª #�4˜#”:©ˆÐ.ØˆØˆ	Øˆ
Øˆ
ÛˆAÜ˜�|‰|Ø—‘ Ö"Ü˜A—‘Ø× Ñ  Ö#Ü˜Q—‘Ø×!Ñ! !Ö$à×!Ñ! !Ö$ñ ô �:ÓÜ�ZÑ%PÑQñRä�YÑ$WÑXñYô �XÑ#VÑWñXð	
ùò /s   …Cc                 ó  • [        U[        5      (       añ  [        U R                  5      [        UR                  5      :X  aÅ  Un[	        U R                  UR                  5       H(  u  p4U R                  U5      nUR                  XES5      nM*     U R                  UR                  :X  a]  [        U R                  5      [        UR                  5      :X  a1  [	        U R                  UR                  5       H  u  pgXg:X  a  M    g   gg©zuDefines 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%   rB  rx   Úzipr„   r  r  ry   )rQ   rÃ   Úconverted_otherÚr1Úr2ÚvarexÚc1Úc2s           r:   Ú__eq__Ú
DRS.__eq__  sÕ   € ô �eœS×!Ñ!Ü�4—9‘9‹~¤ U§Z¡Z£Ó0Ø"'�Ü! $§)¡)¨_×-AÑ-AÖB‘F�BØ ×8Ñ8¸Ó<�EØ&5×&=Ñ&=¸bÈÓ&N’Oñ Cð —?‘? o×&@Ñ&@Ó@ÄSØ—J‘JóFä˜×.Ñ.Ó/óF0ô #& d§j¡j°/×2GÑ2GÖ"H™˜Ø "¥Ù#(ñ #Ið  Ør9   c                 ó   • X:X  + $ rY   r+   rÂ   s     r:   Ú__ne__Ú
DRS.__ne__  ó   € ØÒ Ð r9   c                 ór  • SR                  SR                  U R                  U R                  5      5      SR                  S U R                   5       5      5      nU R
                  (       aK  [        R                  U-   S-   [        R                  -   S-   SU R
                  -  -   [        R                  -   $ U$ )Nz([{}],[{}])Ú,ú, c              3   ó,   #   • U  H
  nS U-  v •  M     g7f©r_  Nr+   )r/  r  s     r:   r0  ÚDRS.__str__.<locals>.<genexpr>  s   é € Ð9ªj d�d˜T–kªjùó   ‚rL  r_  )
Úformatr  rH  rx   ry   r  r#   r`   rW  rw   ©rQ   r‡   s     r:   Ú__str__ÚDRS.__str__  s¨   € Ø×"Ñ"Ø�H‰H�T×,Ñ,¨T¯Y©YÓ7Ó8Ø�I‰IÑ9¨d¯jªjÓ9Ó9ó
ˆð �?�?ä—‘Øñàñô —-‘-ñ ð ñ	ð
 ˜Ÿ™Ñ(ñ)ô —/‘/ñ"ðð ˆ
r9   )ry   r  rx   rY   ©FTr  )r,   r-   r.   r/   r¶   rH   r  r  rì   r<  rÿ   rü   rÕ   r  rH  rz  r}  r   Ú__hash__r‰  r8   r+   r9   r:   r%   r%   -  sV   † Ù/ô%ô<ò|+ô
ò!òRò
"0òHò0ò4
ò,ò$!ð ×"Ñ"€Hõr9   r%   c                 óö   • [        U R                  5      (       a  [        U 5      $ [        U R                  5      (       a  [	        U 5      $ [        U R                  5      (       a  [        U 5      $ [        U 5      $ )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    r:   r­   r­   ,  s]   € ô
 �—‘×ÑÜ.¨xÓ8Ð8Ü	�H—M‘M×	"Ñ	"Ü,¨XÓ6Ð6Ü	�X—]‘]×	#Ñ	#Ü)¨(Ó3Ð3ä$ XÓ.Ð.r9   c                   ó0   • \ rS rSrS rSS jrS rS rSrg)	rï   i;  c                 ó   • U $ rY   r+   rU   s    r:   rÕ   Ú!DrtAbstractVariableExpression.fol<  ó   € Øˆr9   c                 ó   • / $ ©r,  r+   rê   s     r:   rì   Ú&DrtAbstractVariableExpression.get_refs?  s   € àˆ	r9   c                 ó0   • SU -  nS[        U5      -  nX"X/$ ©Nr_  rL  ©rB  ©rQ   r¾   Úblanks      r:   r  Ú%DrtAbstractVariableExpression._prettyC  s#   € Ø�4‰KˆØ”c˜!“f‘ˆØ˜aÐ'Ð'r9   c                 ó   • U $ rY   r+   rU   s    r:   rü   Ú0DrtAbstractVariableExpression.eliminate_equalityH  r”  r9   r+   Nr  )	r,   r-   r.   r/   rÕ   rì   r  rü   r8   r+   r9   r:   rï   rï   ;  s   † òôò(õ
r9   rï   c                   ó   • \ rS rSrSrg)rð   iL  r+   N©r,   r-   r.   r/   r8   r+   r9   r:   rð   rð   L  ó   † ò 	r9   rð   c                   ó   • \ rS rSrSrg)rŽ  iR  r+   Nr¡  r+   r9   r:   rŽ  rŽ  R  r¢  r9   rŽ  c                   ó   • \ rS rSrSrg)r�  iX  r+   Nr¡  r+   r9   r:   r�  r�  X  r¢  r9   r�  c                   ó   • \ rS rSrSrg)r�  i^  r+   Nr¡  r+   r9   r:   r�  r�  ^  ó   † Úr9   r�  c                   óv   • \ rS rSrS rSS jrS rSS jrS rS r	\
R                  rS rS	 rS
 rS rS rSrg)r…   ib  c                 ó   • Xl         X l        g rY   ©r†   r‡   )rQ   r†   r‡   s      r:   rH   ÚDrtProposition.__init__c  s   € Ø ŒØ�r9   c           	      ó  • U R                   U:X  aL  [        U[        5      (       d   S5       e[        UR                   U R                  R                  XX45      5      $ [        U R                   U R                  R                  XX45      5      $ )Nz4Can only replace a proposition label with a variable)r†   rš   rï   r…   r‡   r  )rQ   r†   ro   r  r  s        r:   r  ÚDrtProposition.replaceg  s‹   € Ø�=‰=˜HÓ$ÜØÔ9÷ñ ð FàEóFð ô "Ø×#Ñ#Ø—‘× Ñ  °}ÓTóð ô
 "Ø—‘Ø—‘× Ñ  °}ÓTóð r9   c                 ó^   • [        U R                  U R                  R                  5       5      $ rY   )r…   r†   r‡   rü   rU   s    r:   rü   Ú!DrtProposition.eliminate_equalityv  s    € Ü˜dŸm™m¨T¯X©X×-HÑ-HÓ-JÓKÐKr9   c                 óJ   • U(       a  U R                   R                  S5      $ / $ ©NT)r‡   rì   rê   s     r:   rì   ÚDrtProposition.get_refsy  s   € Þ*3ˆt�x‰x× Ñ  Ó&Ð;¸Ð;r9   c                 ó´   • U R                   UR                   :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rY   )rÝ   r†   r‡   rÂ   s     r:   rz  ÚDrtProposition.__eq__|  sA   € à�N‰N˜eŸo™oÑ-÷ &Ø—‘ §¡Ñ/÷&à—‘˜EŸI™IÑ%ð	
r9   c                 ó   • X:X  + $ rY   r+   rÂ   s     r:   r}  ÚDrtProposition.__ne__ƒ  r  r9   c                 ó6   • U R                   R                  5       $ rY   )r‡   rÕ   rU   s    r:   rÕ   ÚDrtProposition.folˆ  s   € Ø�x‰x�|‰|‹~Ðr9   c                 óL  • U R                   R                  5       nS[        SU R                  -  5      -  nUS S  Vs/ s H
  o2S-   U-   PM     snUSS  Vs/ s H  nSU R                  -  S-   U-   PM     sn-   USS   Vs/ s H
  o2S-   U-   PM     sn-   $ s  snf s  snf s  snf )NrL  r_  r?   r@   r*   )r‡   r  rB  r†   )rQ   Údrs_srœ  r\  s       r:   r  ÚDrtProposition._pretty‹  s®   € Ø—‘× Ñ Ó"ˆØ”c˜$ §¡Ñ.Ó/Ñ/ˆà,1°"°1©IÓ6ªI D�S‰[˜4Ô©IÑ6Ø=BÀ1ÀQ¹ZÓHºZ°Tˆt�d—m‘mÑ# cÑ)¨DÔ0¹ZÑHñIà.3°A°B©iÓ8ªi d�s‰{˜TÔ!©iÑ8ñ9ð	
ùÚ6ùÚHùÚ8s   ½BÁBÂB!c                 ó4   • U" U" U R                   5      /5      $ r8  )r‡   ©rQ   r¨   r:  s      r:   r<  ÚDrtProposition.visit”  s   € á™8 D§H¡HÓ-Ð.Ó/Ð/r9   c                 óH   • U" U R                   U" U R                  5      5      $ )r?  r©  r¼  s      r:   rÿ   ÚDrtProposition.visit_structured˜  s   € á˜$Ÿ-™-©°$·(±(Ó);Ó<Ð<r9   c                 ó<   • SU R                    SU R                   S3$ )Nzprop(r‚  Ú)r©  rU   s    r:   r‰  ÚDrtProposition.__str__œ  s   € Ø�t—}‘}�o R¨¯© z°Ð3Ð3r9   )r‡   r†   Nr‹  r  )r,   r-   r.   r/   rH   r  rü   rì   rz  r}  r   rŒ  rÕ   r  r<  rÿ   r‰  r8   r+   r9   r:   r…   r…   b  sG   † òôòLô<ò
ò!ð ×"Ñ"€Hòò
ò0ò=õ4r9   r…   c                   ó*   • \ rS rSrS rSS jrS rSrg)rn   i   c                 óH   • [        U R                  R                  5       5      $ rY   )r   r³   rÕ   rU   s    r:   rÕ   ÚDrtNegatedExpression.fol¡  s   € Ü  §¡§¡£Ó1Ð1r9   c                 ó8   • U R                   R                  U5      $ r–  )r³   rì   rê   s     r:   rì   ÚDrtNegatedExpression.get_refs¤  s   € à�y‰y×!Ñ! )Ó,Ð,r9   c                 ó,  • U R                   R                  5       nUS S  Vs/ s H  nSU-   PM
     snUSS  Vs/ s H  nSU-   PM
     sn-   USS  Vs/ s H  nSU-   PM
     sn-   USS   Vs/ s H  nSU-   PM
     sn-   $ s  snf s  snf s  snf s  snf )Nr@   ú    rA   z__  rB   z  | )r³   r  )rQ   Ú
term_linesr\  s      r:   r  Ú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   ¢BºBÁBÁ.Br+   Nr  ©r,   r-   r.   r/   rÕ   rì   r  r8   r+   r9   r:   rn   rn      s   † ò2ô-õ
r9   rn   c                   ó0   • \ rS rSrS rS rS rSS jrSrg)	r±   i²  c           	      ó‚   • U R                  UU R                  R                  U R                  [	        U5      S5      5      $ )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­   )rQ   r!  s     r:   r  Ú!DrtLambdaExpression.alpha_convert³  s8   € ð
 �~‰~ØØ�I‰I×Ñ˜dŸm™mÔ-BÀ6Ó-JÈDÓQó
ð 	
r9   c                 ó^   • [        U R                  U R                  R                  5       5      $ rY   )r   r†   r³   rÕ   rU   s    r:   rÕ   ÚDrtLambdaExpression.fol½  s   € Ü §¡¨t¯y©y¯}©}«Ó?Ð?r9   c                 óŠ  • U R                   /nU R                  nUR                  U R                  :X  aC  UR                  UR                   5        UR                  nUR                  U R                  :X  a  MC  SR	                  S U 5       5      [
        R                  -   nUR                  5       nS[        U5      -  nUS S  Vs/ s H  nSU-   U-   PM     snUSS  Vs/ s H  nSU-   U-   PM     sn-   USS  Vs/ s H  nSU-   U-   PM     sn-   USS   Vs/ s H  nSU-   U-   PM     sn-   $ s  snf s  snf s  snf s  snf )	NrL  c              3   ó,   #   • U  H
  nS U-  v •  M     g7fr„  r+   )r/  rd  s     r:   r0  Ú.DrtLambdaExpression._pretty.<locals>.<genexpr>Æ  s   é € Ð:²	¨1˜d Qžh²	ùr†  r?   rÉ  r@   z \  rA   z /\ )	r†   r³   rÝ   r}   r  r#   ÚDOTr  rB  )rQ   r²   r³   Ú
var_stringrÊ  rœ  r\  s          r:   r  ÚDrtLambdaExpression._prettyÀ  s5  € Ø—]‘]�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   ÃD1Ã D6Ã=D;ÄE c                 ó|   • U(       a)  U R                   /U R                  R                  S5      -   $ U R                   /$ ©r,  T)r†   r³   rì   rê   s     r:   rì   ÚDrtLambdaExpression.get_refsÐ  s7   € ö ;DˆT�]‰]ˆO˜dŸi™i×0Ñ0°Ó6Ñ6ð	
ØJNÏ-É-Èð	
r9   r+   Nr  )	r,   r-   r.   r/   r  rÕ   r  rì   r8   r+   r9   r:   r±   r±   ²  s   † ò
ò@ò
÷ 
r9   r±   c                   ó:   • \ rS rSrSS jrS r\S 5       rS rSr	g)	rU  i×  c                 ó‚   • U(       a7  U R                   R                  S5      U R                  R                  S5      -   $ / $ rÙ  )r�   rì   rŽ   rê   s     r:   rì   ÚDrtBinaryExpression.get_refsØ  s;   € ö GPˆD�J‰J×Ñ Ó%¨¯©×(<Ñ(<¸TÓ(BÑBð	
ØUWð	
r9   c                 ó°   • [         R                  U R                  U R                  5      U R	                  5       U R                  U R
                  5      5      $ rY   )rU  rV  Ú_pretty_subexr�   ÚgetOprŽ   rU   s    r:   r  ÚDrtBinaryExpression._prettyÞ  sB   € Ü"×3Ñ3Ø×Ñ˜tŸz™zÓ*Ø�J‰J‹LØ×Ñ˜tŸ{™{Ó+ó
ð 	
r9   c                 óÞ  • [        [        U 5      [        U5      5      n[        X5      n [        X#5      nS[        U5      -  n[        [	        X5      5      nUS S  VVs/ s H  u  pgSU-   S-   U-   S-   U-   S-   PM     snnUSS  VVs/ s H  u  pgSU-   S-   U-   S-   U-   S-   PM     snn-   USS   VVs/ s H  u  pgSU-   S-   U-   S-   U-   S-   PM     snn-   $ s  snnf s  snnf s  snnf )NrL  r@   rA   Ú(rÁ  )rS  rB  Ú_pad_verticallyr2  rs  )Úfirst_linesÚopÚsecond_linesÚ	max_linesrœ  Úfirst_second_linesÚ
first_lineÚsecond_lines           r:   rV  Ú$DrtBinaryExpression._assemble_prettyå  s9  € äœ˜KÓ(¬#¨lÓ*;Ó<ˆ	Ü% kÓ=ˆÜ& |Ó?ˆØ”c˜"“g‘ˆÜ!¤# kÓ"@ÓAÐð 0BÀ"À1Ñ/Eôâ/EÑ+�Jð �jÑ  3Ñ&¨Ñ.°Ñ4°{ÑBÀSÔHÙ/Eòð 0BÀ!ÀAÑ/Fôâ/FÑ+�Jð �jÑ  3Ñ&¨Ñ+¨cÑ1°KÑ?À#ÔEÙ/Fòñ	ð 0BÀ!À"Ñ/Eôâ/EÑ+�Jð �jÑ  3Ñ&¨Ñ.°Ñ4°{ÑBÀSÔHÙ/Eòñð	
ùóùóùós   Á CÂ
 C#Â7 C)c                 ó"   • UR                  5       $ rY   )r  )rQ   Úsubexs     r:   rß  Ú!DrtBinaryExpression._pretty_subexû  s   € Ø�}‰}‹Ðr9   r+   Nr  )
r,   r-   r.   r/   rì   r  ÚstaticmethodrV  rß  r8   r+   r9   r:   rU  rU  ×  s%   † ô
ò
ð ñ
ó ð
õ*r9   rU  c                   ó   • \ rS rSrSrg)ÚDrtBooleanExpressioniÿ  r+   Nr¡  r+   r9   r:   rò  rò  ÿ  r¦  r9   rò  c                   ó    • \ rS rSrS rS rSrg)rž   i  c                 óz   • [        U R                  R                  5       U R                  R                  5       5      $ rY   )r   r�   rÕ   rŽ   rU   s    r:   rÕ   ÚDrtOrExpression.fol  s%   € Ü˜DŸJ™JŸN™NÓ,¨d¯k©k¯o©oÓ.?Ó@Ð@r9   c                 ó¦   • [        U[        5      (       a#  UR                  5        Vs/ s H  o"SS PM	     sn$ [        R	                  X5      $ s  snf ©Nr?   rG  )rš   rž   r  rò  rß  ©rQ   rî  r\  s      r:   rß  ÚDrtOrExpression._pretty_subex  sD   € Ü�eœ_×-Ñ-Ø+0¯=©=¬?Ó;ª? 4˜˜2“J©?Ñ;Ð;Ü#×1Ñ1°$Ó>Ð>ùò <ó   ¨Ar+   N)r,   r-   r.   r/   rÕ   rß  r8   r+   r9   r:   rž   rž     s   † òAõ?r9   rž   c                   ó   • \ rS rSrS rSrg)r‹   i  c                 óz   • [        U R                  R                  5       U R                  R                  5       5      $ rY   )r   r�   rÕ   rŽ   rU   s    r:   rÕ   ÚDrtEqualityExpression.fol  s%   € Ü! $§*¡*§.¡.Ó"2°D·K±K·O±OÓ4EÓFÐFr9   r+   N)r,   r-   r.   r/   rÕ   r8   r+   r9   r:   r‹   r‹     s   † õGr9   r‹   c                   ó�   • \ rS rSrSrSS jrSS jrS rS rSS jr	S	 r
S
 rS r\R                  rS rS rS rS rS rS rSrg)r”   i  zDRS of the form '(DRS + DRS)'Nc                 ó<   • [         R                  XU5        X0l        g rY   )rò  rH   r  )rQ   r�   rŽ   r  s       r:   rH   ÚDrtConcatenation.__init__  s   € Ü×%Ñ% d°6Ô:Ø$�r9   c                 ó¶  • U R                   nU R                  nU R                  nXR                  5       ;   aE  U(       a=  UR	                  XX45      nUR	                  XX45      nU(       a  UR	                  XX45      nOÌU(       aˆ  [        U R                  S5      5      UR                  5       -   HY  n[        [        U5      5      n	UR	                  X‰SU5      nUR	                  X‰SU5      nU(       d  MF  UR	                  X‰SU5      nM[     UR	                  XX45      nUR	                  XX45      nU(       a  UR	                  XX45      nU R                  XVU5      $ )r  T)
r�   rŽ   r  rì   r  r  r  r­   r   rÝ   )
rQ   r†   ro   r  r  r�   rŽ   r  r   rd  s
             r:   r  ÚDrtConcatenation.replace  s6  € ð —
‘
ˆØ—‘ˆØ—_‘_ˆ
ð —}‘}“Ó&ÞØŸ™Ø¨-ó�ð  Ÿ™Ø¨-ó�ö Ø!+×!3Ñ!3Ø ¨mó"�Jøö ä˜tŸ}™}¨TÓ2Ó3°j·o±oÓ6GÔG�CÜ-¬o¸cÓ.BÓC�AØ!ŸM™M¨#°$¸ÓF�EØ#Ÿ^™^¨C°D¸-ÓH�Fß!�zØ%/×%7Ñ%7¸ÀÀmÓ%Tš
ñ Hð —M‘M (¸ÓUˆEØ—^‘^ H¸-ÓWˆFÞØ'×/Ñ/Ø¨-ó�
ð �~‰~˜e¨ZÓ8Ð8r9   c                 óp   • U R                  5       n[        U[        5      (       a   eUR                  5       $ rY   )rÔ   rš   r”   rü   rˆ  s     r:   rü   Ú#DrtConcatenation.eliminate_equality@  s0   € à�m‰m‹oˆÜ˜cÔ#3×4Ñ4Ð4Ð4Ø×%Ñ%Ó'Ð'r9   c                 óv  • U R                   R                  5       nU R                  R                  5       nU R                  (       a  U R                  R                  5       OS n[	        U[
        5      (       a²  [	        U[
        5      (       a�  [        UR                  S5      5      [        UR                  S5      5      -   H)  n[        [        U5      5      nUR                  XES5      nM+     [        UR                  UR                  -   UR                  UR                  -   U5      $ U R                  XU5      $ r°  )r�   rÔ   rŽ   r  rš   r%   r  rì   r­   r   r  rx   ry   rÝ   )rQ   r�   rŽ   r  r   r!  s         r:   rÔ   ÚDrtConcatenation.simplifyF  sà   € Ø—
‘
×#Ñ#Ó%ˆØ—‘×%Ñ%Ó'ˆØ37·?·?�T—_‘_×-Ñ-Ô/Èˆ
ä�eœS×!Ñ!¤j°¼×&=Ñ&=ä˜5Ÿ>™>¨$Ó/Ó0´3°v·±ÀtÓ7LÓ3MÔM�ä.¬¸sÓ/CÓD�ØŸ™¨°TÓ:’ñ Nô
 �u—z‘z F§K¡KÑ/°·±¸v¿|¹|Ñ1KÈZÓXÐXà—>‘> %°Ó<Ð<r9   c                 óø   • U R                   R                  U5      U R                  R                  U5      -   nU R                  (       a1  U(       a*  UR	                  U R                  R                  S5      5        U$ rÙ  )r�   rì   rŽ   r  r4  )rQ   rë   rx   s      r:   rì   ÚDrtConcatenation.get_refsV  sS   € à�z‰z×"Ñ" 9Ó-°·±×0DÑ0DÀYÓ0OÑOˆØ�?�?žyØ�K‰K˜Ÿ™×0Ñ0°Ó6Ô7Øˆr9   c                 ó"   • [         R                  $ rY   )r#   r0   rU   s    r:   rà  ÚDrtConcatenation.getOp]  s   € Ü×!Ñ!Ð!r9   c                 óÂ  • [        U[        5      (       aÊ  U R                  5       nUR                  5       n[        U5      [        U5      :X  a’  Un[	        X#5       H(  u  pVU R                  U5      nUR                  XgS5      nM*     U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ grr  )
rš   r”   rì   rB  rs  r„   r  r�   rŽ   r  )rQ   rÃ   Ú	self_refsÚ
other_refsrt  ru  rv  rw  s           r:   rz  ÚDrtConcatenation.__eq__`  s¿   € ô �eÔ-×.Ñ.ØŸ™›ˆIØŸ™Ó)ˆJÜ�9‹~¤ Z£Ó0Ø"'�Ü! )Ö8‘F�BØ ×8Ñ8¸Ó<�EØ&5×&=Ñ&=¸bÈÓ&N’Oñ 9ð —J‘J /×"7Ñ"7Ñ7÷ FØŸ™ ×'=Ñ'=Ñ=÷FàŸ™¨?×+EÑ+EÑEðð
 r9   c                 ó   • X:X  + $ rY   r+   rÂ   s     r:   r}  ÚDrtConcatenation.__ne__r  r  r9   c                 óæ   • [        U R                  R                  5       U R                  R                  5       5      nU R                  (       a#  [        XR                  R                  5       5      nU$ rY   )r   r�   rÕ   rŽ   r  r   )rQ   rý   s     r:   rÕ   ÚDrtConcatenation.folw  sG   € Ü˜$Ÿ*™*Ÿ.™.Ó*¨D¯K©K¯O©OÓ,=Ó>ˆØ�?�?Ü˜a§¡×!4Ñ!4Ó!6Ó7ˆAØˆr9   c                 óP  • [         R                  U R                  U R                  5      U R	                  5       U R                  U R
                  5      5      nU R                  (       a=  [         R                  U[        R                  U R                  R                  5       5      nU$ rY   )
rU  rV  rß  r�   rà  rŽ   r  r#   rW  r  rˆ  s     r:   r  ÚDrtConcatenation._pretty}  sw   € Ü!×2Ñ2Ø×Ñ˜tŸz™zÓ*Ø�J‰J‹LØ×Ñ˜tŸ{™{Ó+ó
ˆð
 �?�?Ü%×6Ñ6Ø”Y—]‘] D§O¡O×$;Ñ$;Ó$=óˆCð ˆ
r9   c                 ó¦   • [        U[        5      (       a#  UR                  5        Vs/ s H  o"SS PM	     sn$ [        R	                  X5      $ s  snf r÷  )rš   r”   r  rò  rß  rø  s      r:   rß  ÚDrtConcatenation._pretty_subex‰  sE   € Ü�eÔ-×.Ñ.Ø+0¯=©=¬?Ó;ª? 4˜˜2“J©?Ñ;Ð;Ü#×1Ñ1°$Ó>Ð>ùò <rú  c                 óî   • U R                   (       a;  U" U" U R                  5      U" U R                  5      U" U R                   5      /5      $ U" U" U R                  5      U" U R                  5      /5      $ r8  )r  r�   rŽ   r¼  s      r:   r<  ÚDrtConcatenation.visitŽ  s_   € à�?�?ÙÙ˜$Ÿ*™*Ó%¡x°·±Ó'<¹hÀtÇÁÓ>WÐXóð ñ ™x¨¯
©
Ó3±X¸d¿k¹kÓ5JÐKÓLÐLr9   c                 ó¦  • U R                  U R                  5      nU R                  U R                  5      n[        R                  U-   S-   U R                  5       -   S-   U-   [        R                  -   nU R                  (       aK  [        R                  U-   S-   [        R                  -   S-   SU R                  -  -   [        R                  -   $ U$ )NrL  r_  )
Ú
_str_subexr�   rŽ   r   r`   rà  rw   r  r#   rW  )rQ   r�   rŽ   r‡   s       r:   r‰  ÚDrtConcatenation.__str__—  sº   € Ø—‘ §
¡
Ó+ˆØ—‘ §¡Ó-ˆÜ�k‰k˜EÑ! CÑ'¨$¯*©*«,Ñ6¸Ñ<¸vÑEÌÏÉÑTˆØ�?�?ä—‘Øñàñô —-‘-ñ ð ñ	ð
 ˜Ÿ™Ñ(ñ)ô —/‘/ñ"ðð ˆ
r9   c                 ó^   • SU-  n[        U[        5      (       a  UR                  c  USS $ U$ )Nr_  r?   rG  )rš   r”   r  )rQ   rî  r¾   s      r:   r  ÚDrtConcatenation._str_subex§  s4   € Ø�5‰LˆÜ�eÔ-×.Ñ.°5×3CÑ3CÑ3KØ�Q�r�7ˆNØˆr9   )r  rY   r‹  r  )r,   r-   r.   r/   r¶   rH   r  rü   rÔ   rì   rà  rz  r}  rò  rŒ  rÕ   r  rß  r<  r‰  r  r8   r+   r9   r:   r”   r”     sZ   † Ù'ô%ô%9òN(ò=ô ò"òò$!ð $×,Ñ,€Hòò
ò?ò
Mòõ r9   r”   c                   ó*   • \ rS rSrS rSS jrS rSrg)r§   i®  c                 óz   • [        U R                  R                  5       U R                  R                  5       5      $ rY   )r	   r¨   rÕ   r©   rU   s    r:   rÕ   ÚDrtApplicationExpression.fol¯  s)   € Ü$ T§]¡]×%6Ñ%6Ó%8¸$¿-¹-×:KÑ:KÓ:MÓNÐNr9   c                 ó‚   • U(       a7  U R                   R                  S5      U R                  R                  S5      -   $ / $ rÙ  )r¨   rì   r©   rê   s     r:   rì   Ú!DrtApplicationExpression.get_refs²  s>   € ö ð �M‰M×"Ñ" 4Ó(¨4¯=©=×+AÑ+AÀ$Ó+GÑGð	
ð ð	
r9   c           
      óº  • U R                  5       u  pUR                  5       nU Vs/ s H  oDR                  5       PM     nn[        [        [        U/U-   5      5      n[        X65      nU Vs/ s H  n[        Xv5      PM     nn[        [        U[        [        U6 5      5      5      nUS S  V	V
s/ s H  u  pšU	S-   SR                  U
5      -   S-   PM!     sn
n	USS  V	V
s/ s H  u  pšU	S-   SR                  U
5      -   S-   PM!     sn
n	-   USS   V	V
s/ s H  u  pšU	S-   SR                  U
5      -   S-   PM!     sn
n	-   $ s  snf s  snf s  sn
n	f s  sn
n	f s  sn
n	f )Nr@   rL  rA   rã  r�  rÁ  )	Úuncurryr  rS  r9  rB  rä  r2  rs  r  )rQ   r¨   ÚargsÚfunction_linesÚargÚ
args_linesrè  Ú	arg_linesÚfunc_args_linesÚ	func_lineÚ	args_lines              r:   r  Ú DrtApplicationExpression._prettyº  so  € ØŸ™›‰ˆØ!×)Ñ)Ó+ˆÙ/3Ó4ªt¨—k‘k–m©tˆ
Ð4ÜœœC .Ð!1°JÑ!>Ó?Ó@ˆ	Ü(¨ÓCˆÙMWÓXÊZÀ	”o iÖ;ÉZˆ
ÐXÜœs >´4¼¸ZÐ8HÓ3IÓJÓKˆð -<¸B¸QÑ,?ôâ,?Ñ(�Ið ˜C‘ #§(¡(¨9Ó"5Ñ5¸Ô;Ù,?òð -<¸A¸aÑ,@ôâ,@Ñ(�Ið ˜C‘ #§(¡(¨9Ó"5Ñ5¸Ô;Ù,@òñ	ð -<¸A¸BÑ,?ôâ,?Ñ(�Ið ˜C‘ #§(¡(¨9Ó"5Ñ5¸Ô;Ù,?òñð	
ùò 5ùò Yùóùóùós   §EÁ.EÂ1&EÃ"&EÄ&Er+   Nr  rÌ  r+   r9   r:   r§   r§   ®  s   † òOô
õ
r9   r§   c                 óL   • S[        U S   5      -  /nXU[        U 5      -
  -  -   $ )NrL  r   rš  )Úlinesrè  Úpad_lines      r:   rä  rä  Ò  s.   € Ø”c˜% ™(“mÑ#Ð$€HØ˜y¬3¨u«:Ñ5Ñ6Ñ6Ð6r9   c                   ó0   • \ rS rSrS rSS jrS rS rSrg)	ÚPossibleAntecedentsi×  c                 ó   • [        U 5      $ )zSet of free variables.)r  rU   s    r:   r  ÚPossibleAntecedents.freeØ  s   € ä�4‹yÐr9   c                 ó~   • [        5       nU  H,  nXa:X  a  U R                  U5        M  U R                  U5        M.     U$ )r  )r2  r}   )rQ   r†   ro   r  r  ÚresultÚitems          r:   r  ÚPossibleAntecedents.replaceÜ  s;   € ô %Ó&ˆÛˆDØÓØ—‘˜JÖ'à—‘˜DÖ!ñ	 ð
 ˆr9   c                 ó0   • SU -  nS[        U5      -  nX"U/$ r™  rš  r›  s      r:   r  ÚPossibleAntecedents._prettyç  s#   € Ø�4‰KˆØ”c˜!“f‘ˆØ˜aÐ Ð r9   c                 ó>   • SSR                  S U  5       5      -   S-   $ )Nr(   r�  c              3   ó,   #   • U  H
  nS U-  v •  M     g7fr„  r+   )r/  Úits     r:   r0  Ú.PossibleAntecedents.__str__.<locals>.<genexpr>í  s   é € Ð7²$¨B˜d Rži²$ùr†  r)   )r  rU   s    r:   r‰  ÚPossibleAntecedents.__str__ì  s!   € Ø�S—X‘XÑ7±$Ó7Ó7Ñ7¸#Ñ=Ð=r9   r+   Nr‹  )	r,   r-   r.   r/   r  r  r  r‰  r8   r+   r9   r:   r2  r2  ×  s   † òô	ò!õ
>r9   r2  c                   ó   • \ rS rSrSrg)ÚAnaphoraResolutionExceptionið  r+   Nr¡  r+   r9   r:   rA  rA  ð  r¦  r9   rA  c                 óš  • [        U [        5      (       Ga  U R                  5       (       a¶  [        5       nU Hs  nUR	                  5        H\  nU R                  U5      nUR                  U R                  R                  :X  d  M:  XPR                  :X  a  MK  UR                  U5        M^     Mu     [        U5      S:X  a  US   nOUnU R                  U R                  U5      $ [        U R                  X/-   5      n[        U R                  X/-   5      nU R                  Xx5      $ [        U [        5      (       Ga  / n	U R                   HÂ  n
[        X¡U /-   5      n[        U[        5      (       aŠ  [        UR                   [        5      (       a#  UR                   nUR"                  Ul        XËl        [        UR"                  [        5      (       a)  UR"                  (       d  [%        SUR                   -  5      eU	R                  U5        MÄ     U R&                  (       a  [        U R&                  X/-   5      nOS nU R                  U R(                  X�5      $ [        U [*        5      (       a  U $ [        U [,        5      (       a(  U R                  [        U R.                  X/-   5      5      $ [        U [0        5      (       an  U R&                  (       a  [        U R&                  X/-   5      nOS nU R                  [        U R                   X/-   5      [        U R"                  X/-   5      U5      $ [        U [2        5      (       a@  U R                  [        U R                   X/-   5      [        U R"                  X/-   5      5      $ [        U [4        5      (       a3  U R                  U R6                  [        U R.                  X/-   5      5      $ g )Nr?   r   z+Variable '%s' does not resolve to anything.)rš   r	   rñ   r2  rì   r„   rÝ   r©   r}   rB  r�   rø   r¨   r%   ry   r   r�   rŽ   rA  r  rx   r   r   r³   r”   r
   r   r†   )ro   ÚtrailÚpossible_antecedentsÚancestorr   ÚrefexÚ
resolutionÚ
r_functionÚ
r_argumentÚr_condsr  Úr_condÚtempr  s                 r:   rø   rø   ô  s@  € Ü�*Ô3×4Ò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¤×	$Ò	$ØˆØ×$Ô$ˆDÜ% d°Z°LÑ,@ÓAˆFô ˜&Ô"4×5Ñ5Ü˜fŸl™lÔ,?×@Ñ@à!Ÿ<™<�DØ#)§=¡=�F”LØ$(”MÜ˜fŸm™mÔ-@×AÑAØ!Ÿ=Ÿ=Ü9ð3Ø5;·\±\ñBóð ð
 �N‰N˜6Ö"ñ# %ð$ × × Ü)¨*×*?Ñ*?ÀÈÑAUÓV‰JàˆJØ×#Ñ# J§O¡O°WÓIÐIä	�JÔ :×	;Ñ	;ØÐä	�JÔ 1×	2Ñ	2Ø×#Ñ#Ü˜ZŸ_™_¨e°lÑ.BÓCó
ð 	
ô 
�JÔ 0×	1Ñ	1Ø× × Ü)¨*×*?Ñ*?ÀÈÑAUÓV‰JàˆJØ×#Ñ#Ü˜Z×-Ñ-¨u°|Ñ/CÓDÜ˜Z×.Ñ.°¸Ñ0DÓEØó
ð 	
ô 
�JÔ 0×	1Ñ	1Ø×#Ñ#Ü˜Z×-Ñ-¨u°|Ñ/CÓDÜ˜Z×.Ñ.°¸Ñ0DÓEó
ð 	
ô
 
�JÔ 0×	1Ñ	1Ø×#Ñ#Ø×ÑÔ!1°*·/±/À5È<ÑCWÓ!Xó
ð 	
ð 
2r9   c                   óŠ   • \ rS rSrSrSrSrSS jrS r\\4S jr	S	 r
S
 rS rSS jrS rS rS rS rS rS rS rS rSrg)r  iG  rA   é
   rD   Nc                 ó´  • SnU(       d½  [        5       nUR                  S5        [        SSS9nU(       ap  [        USSS9nXSl        X0l        U R                  XR                  U R                  5      u  pg[        X`R                  -   S5      nXpR                  -   n	[        XHU	S9nO[        US	S	S9nUR                  5         XSl        X0l        Xl        X@l        g)
zñ
: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.
NÚDRTÚ	helveticaé   )ÚfamilyÚsizer   )ÚwidthÚheightéd   i,  )r   Útitler    r   ÚfontÚcanvasÚ_visitÚ
OUTERSPACEÚTOPSPACErS  Úpackr‡   Úmaster)
rQ   r‡   Úsize_canvasrZ  r_  rY  ÚrightÚbottomrU  rV  s
             r:   rH   ÚDrsDrawer.__init__L  s¶   € ð ˆÞÜ“TˆFØ�L‰L˜Ôä˜{°Ñ4ˆDæÜ ¨a¸Ñ:�Ø"”Ø$”Ø"&§+¡+¨c·?±?ÀDÇMÁMÓ"R‘�ä˜E§O¡OÑ3°SÓ9�Ø§/¡/Ñ1�Ü ¸FÑC‘ä ¨c¸#Ñ>�à�K‰KŒMØŒKàŒØŒØ�r9   c                 óL   • U R                   R                  R                  S5      $ )z Get the height of a line of textÚ	linespace)rZ  rY  ÚmetricsrU   s    r:   Ú_get_text_heightÚDrsDrawer._get_text_heightl  s   € à�{‰{×Ñ×'Ñ'¨Ó4Ð4r9   c                 óþ   • U R                  U R                  U R                  X5        U R                  (       a*  [	        5       (       d  U R                  R                  5         gU R                  U R                  X5      $ )zDraw the DRSN)Ú_handler‡   Ú_draw_commandr_  r!   Úmainloopr[  )rQ   rR   Úys      r:   r  ÚDrsDrawer.drawp  sN   € à�‰�T—X‘X˜t×1Ñ1°1Ô8à�;�;œwŸy™yØ�K‰K× Ñ Õ"à—;‘;˜tŸx™x¨Ó.Ð.r9   c                 ó:   • U R                  XR                  X#5      $ )zñ
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
)rj  Ú_visit_command)rQ   ro   rR   rm  s       r:   r[  ÚDrsDrawer._visity  s   € ð �|‰|˜J×(;Ñ(;¸QÓBÐBr9   c                 ó˜  • [        U[        5      (       a1  U R                  R                  X#SU R                  R                  US9  Os[        U[
        5      (       a^  Uu  pEU R                  R                  X#XE5        X0R                  5       -   U R                  S-  -   nU R                  R                  X&XF5        U R                  XU5      $ )zÐ
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)ÚanchorrY  Útextr@   )rš   ÚstrrZ  Úcreate_textrY  ÚtupleÚcreate_rectanglerg  ÚBUFFERÚcreate_linerp  )rQ   r7  rR   rm  ra  rb  Úhoriz_line_ys          r:   rk  ÚDrsDrawer._draw_command„  s©   € ô �dœC× Ñ Ø�K‰K×#Ñ# A°¸D¿K¹K×<LÑ<LÐSWÐ#ÒXÜ˜œe×$Ñ$à"‰OˆUØ�K‰K×(Ñ(¨¨uÔ=à×)Ñ)Ó+Ñ+¨t¯{©{¸Q©Ñ?ð ð �K‰K×#Ñ# A°UÔIà×"Ñ" 4¨AÓ.Ð.r9   c                 óÎ   • [        U[        5      (       a9  X R                  R                  R	                  U5      -   X0R                  5       -   4$ [        U[        5      (       a  U$ g)zë
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š   rv  rZ  rY  Úmeasurerg  rx  )rQ   r7  rR   rm  s       r:   rp  ÚDrsDrawer._visit_commandš  sW   € ô �dœC× Ñ ØŸ™×(Ñ(×0Ñ0°Ó6Ñ6¸×<QÑ<QÓ<SÑ8SÐTÐTÜ˜œe×$Ñ$ØˆKð %r9   c                 ó&  • X R                   :X  a"   UR                  U-   nUR                  U-   nXV4$ [	        U[
        5      (       a  U R                  nGO[	        U[        5      (       a  U R                  nOë[	        U[        5      (       a  U R                  nOÉ[	        U[        5      (       a  U R                  nO§[	        U[        5      (       a  U R                  nO…[	        U[        5      (       a  U R                   nOc[	        U["        5      (       a  U R                  nOA[	        U[$        5      (       a  U R&                  nO[)        UR*                  R,                  5      eU" XX45      u  pVXS-
  Ul        Xd-
  Ul        XV4$ ! [         a     GN]f = f)a  
: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
)rp  Ú_drawing_widthÚ_drawing_heightrÜ   rš   rï   Ú_handle_VariableExpressionr%   Ú_handle_DRSrn   Ú_handle_NegatedExpressionr±   Ú_handle_LambdaExpressionr
   Ú_handle_BinaryExpressionr§   Ú_handle_ApplicationExpressionr2  r…   Ú_handle_DrtPropositionr›   rÝ   r,   )rQ   ro   ÚcommandrR   rm  ra  rb  r¢   s           r:   rj  ÚDrsDrawer._handle¨  s\  € ð ×)Ñ)Ó)ðà"×1Ñ1°AÑ5�Ø#×3Ñ3°aÑ7�Ø�Ð&ô
 �jÔ"?×@Ñ@Ø×5Ñ5ŠGÜ˜
¤C×(Ñ(Ø×&Ñ&‰GÜ˜
Ô$8×9Ñ9Ø×4Ñ4‰GÜ˜
Ô$7×8Ñ8Ø×3Ñ3‰GÜ˜
Ô$4×5Ñ5Ø×3Ñ3‰GÜ˜
Ô$<×=Ñ=Ø×8Ñ8‰GÜ˜
Ô$7×8Ñ8Ø×5Ñ5‰GÜ˜
¤N×3Ñ3Ø×1Ñ1‰Gä˜J×0Ñ0×9Ñ9Ó:Ð:á! *°qÓ<‰ˆð %*¡Iˆ
Ô!Ø%+¡Zˆ
Ô"àˆÐøô; "ó âðús   ‘ F Æ
FÆFc                 ó   • U" SU-  X45      $ )Nr_  r+   )rQ   ro   r‹  rR   rm  s        r:   r„  Ú$DrsDrawer._handle_VariableExpressionÖ  s   € Ù�t˜jÑ(¨!Ó/Ð/r9   c           
      óþ   • U R                  [        R                  X45      S   nU R                  UR                  X%U5      u  pVU" [        R                  UU R                  XFU-
  U R                  5       5      5        XV4$ rs   )rp  r#   ÚNOTrj  r³   Ú_get_centered_toprg  ©rQ   ro   r‹  rR   rm  ra  rb  s          r:   r†  Ú#DrsDrawer._handle_NegatedExpressionÙ  sr   € à×#Ñ#¤I§M¡M°1Ó8¸Ñ;ˆð Ÿ,™, z§¡¸ÈÓJ‰ˆñ 	Ü�M‰MØØ×"Ñ" 1¨q¡j°$×2GÑ2GÓ2IÓJô	
ð ˆÐr9   c                 óð  • X0R                   -   nX@R                   -   nUR                  (       a#  SR                  S UR                   5       5      nOSnU" XuU5      u  p†X`R                   S-  -  nUR                  (       aA  UR                   H0  n	U R	                  X’XV5      u  p¦[        XŠ5      nX`R                   -  nM2     OX`R                  5       U R                   -   -  nX€R                   -  nU" X†4X45      $ )NrL  c              3   ó,   #   • U  H
  nS U-  v •  M     g7fr„  r+   )r/  Úrs     r:   r0  Ú(DrsDrawer._handle_DRS.<locals>.<genexpr>ï  s   é € Ð>ªo¨˜D 1žHªoùr†  z     r@   )rz  rx   r  ry   rj  rS  rg  )rQ   ro   r‹  rR   rm  Úleftrb  rx   Ú	max_rightr  ra  s              r:   r…  ÚDrsDrawer._handle_DRSé  sÚ   € Ø—;‘;‰ˆØ—[‘[‘ˆð �?�?Ø—8‘8Ñ>¨j¯oªoÓ>Ó>‰DàˆDÙ% d°&Ó9ÑˆØ—+‘+ ‘/Ñ!ˆð ××Ø"×(Ô(�Ø"&§,¡,¨t¸dÓ"K‘�Ü 	Ó1�	ØŸ+™+Ñ%’ò )ð
 ×+Ñ+Ó-°·±Ñ;Ñ;ˆFð 	—[‘[Ñ ˆ	Ù˜	Ð*¨AÓ1Ð1r9   c                 ó  • UR                  5       u  pV[        U[        5      (       d  UR                  nUR                  /nU R                  XSU5      S   n[        U/U Vs/ s H  o€R                  XƒU5      S   PM     sn-   5      n	X”-
  n
U R                  XJUR                  5      nU R                  XRX;5      S   nU R                  XJU R                  5       5      nU" [        R                  XÍ5      S   n[        U5       Hg  u  pèU R                  XJUR                  5      nU R                  X‚XÏ5      S   nUS-   [        U5      :  d  MJ  U" [        R                  S-   XÍ5      S   nMi     U" [        R                   XÍ5      S   nXÉ4$ s  snf )Nr?   r   rL  )r$  rš   rï   r¨   r©   r[  rS  r‘  rƒ  rj  rg  r#   r`   Ú	enumeraterB  ru   rw   )rQ   ro   r‹  rR   rm  r¨   r%  Úfunction_bottomr'  Ú
max_bottomÚline_heightÚfunction_drawing_topra  Úcentred_string_topr  Úarg_drawing_tops                   r:   r‰  Ú'DrsDrawer._handle_ApplicationExpression  s�  € Ø#×+Ñ+Ó-‰ˆÜ˜(Ô$A×BÑBà!×*Ñ*ˆHØ×'Ñ'Ð(ˆDð Ÿ+™+ h°1Ó5°aÑ8ˆÜØÐÁdÓ KÂd¸s§¡¨S°QÓ!7¸Ô!:ÁdÑ KÑKó
ˆ
ð !‘nˆð  $×5Ñ5Ø˜H×4Ñ4ó 
Ðð —‘˜X°ÓHÈÑKˆð "×3Ñ3Ø˜D×1Ñ1Ó3ó
Ðñ œ	Ÿ™¨ÓBÀ1ÑEˆô   –o‰FˆAØ"×4Ñ4Ø × 3Ñ 3óˆOð —L‘L ¨uÓFÀqÑIˆEà�1‰u”s˜4“yÕ á¤	§¡°#Ñ 5°uÓQÐRSÑT’ñ &ñ œ	Ÿ™¨ÓCÀAÑFˆàÐ"Ð"ùò? !Ls   Á!F

c           
      ó&  • [         R                  SUR                  -  -   [         R                  -   nU R	                  XSU5      S   nU R                  UR                  X&U5      u  pgU" XSU R                  XGU-
  U R                  5       5      5        Xg4$ )Nr_  r   )	r#   ÚLAMBDAr†   rÕ  rp  rj  r³   r‘  rg  )rQ   ro   r‹  rR   rm  r²   ra  rb  s           r:   r‡  Ú"DrsDrawer._handle_LambdaExpression-  sŠ   € ä×$Ñ$ t¨j×.AÑ.AÑ'AÑAÄIÇMÁMÑQˆ	Ø×#Ñ# I°!Ó4°QÑ7ˆð Ÿ,™, z§¡¸ÈÓJ‰ˆñ 	Ø˜$×0Ñ0°¸Q±JÀ×@UÑ@UÓ@WÓXô	
ð ˆÐr9   c           
      ó¬  • U R                  UR                  SS5      S   nU R                  UR                  SS5      S   n[        XV5      nU R	                  XGU R                  5       5      nU" [        R                  X85      S   n	UR                  R                  nU R                  UR                  UU	U R	                  XGU5      5      u  pšU" SUR                  5       -  X˜5      S   n	UR                  R                  nU R                  UR                  UU	U R	                  XGU5      5      u  p›U" [        R                  X˜5      S   n	U	[        X«5      4$ )Nr   r?   z %s )r[  r�   rŽ   rS  r‘  rg  r#   r`   rƒ  rj  rà  rw   )rQ   ro   r‹  rR   rm  Úfirst_heightÚsecond_heightrŸ  r¡  ra  Úfirst_bottomÚsecond_bottoms               r:   rˆ  Ú"DrsDrawer._handle_BinaryExpression<  sM  € à—{‘{ :×#3Ñ#3°Q¸Ó:¸1Ñ=ˆØŸ™ J×$5Ñ$5°q¸!Ó<¸QÑ?ˆÜ˜,Ó6ˆð "×3Ñ3Ø˜D×1Ñ1Ó3ó
Ðñ œ	Ÿ™¨Ó>¸qÑAˆð "×'Ñ'×7Ñ7ˆØ $§¡Ø×ÑØØØ×"Ñ" 1°<Ó@ó	!
Ñˆñ ˜ ×!1Ñ!1Ó!3Ñ3°UÓOÐPQÑRˆð #×)Ñ)×9Ñ9ˆØ!%§¡Ø×ÑØØØ×"Ñ" 1°=ÓAó	"
Ñˆñ œ	Ÿ™¨ÓCÀAÑFˆà”s˜<Ó7Ð8Ð8r9   c                 ór   • U" UR                   X45      S   nU R                  UR                  X%U5      u  pVXV4$ rs   )r†   rj  r³   r’  s          r:   rŠ  Ú DrsDrawer._handle_DrtPropositionb  s;   € á˜
×+Ñ+¨QÓ2°1Ñ5ˆð Ÿ,™, z§¡¸ÈÓJ‰ˆàˆÐr9   c                 ó   • XU-
  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@   r+   )rQ   ÚtopÚfull_heightÚitem_heights       r:   r‘  ÚDrsDrawer._get_centered_topk  s   € ð  KÑ/°1Ñ4Ñ4Ð4r9   )rZ  r‡   r_  r.  )r   r   )r,   r-   r.   r/   rz  r]  r\  rH   rg  r  r[  rk  rp  rj  r„  r†  r…  r‰  r‡  rˆ  rŠ  r‘  r8   r+   r9   r:   r  r  G  sh   † Ø€FØ€HØ€Jôò@5ð   8ô /ò	Cò/ò,ô,ò\0òò 2ò2)#òVò$9òLõ5r9   r  c                  ó  • [        S5        [        R                  n [        U " S5      5        [        U " S5      5        [        U " S5      5        [        U " S5      5        [        U " S5      5        [        U " S5      5        [        U " S5      5        [        U " S	5      5        [        U " S
5      5        [        S5        [        U " S5      R                  5       5        [        S5        U " S5      n[        U5        UR	                  [        S5      5      n[        U5        [        X:H  5        [        S5        [        [        U " S5      5      5        [        [        U " S5      5      5        [        [        U " S5      5      5        [        S5        U " S5      R                  5         U " S5      R                  5         U " S5      R                  5         U " S5      R                  5         U " S5      R                  5         g )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      r:   Údemor¾  r  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ÕMr9   c                  ó°   •  SSK Jn   / SQnU H(  n[        R                  U5      nUR                  5         M*     g ! [         a  n[        S5      eS nAff = f)Nr   )r   z,tkinter is required, but it's not available.)rR   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¸  )Útkinterr   ÚImportErrorÚ
ValueErrorr¸   r¿   r  )r   rý   ÚexpressionsÚds       r:   Ú	test_drawrÅ  š  sW   € ðIÝò€Kó ˆÜ×$Ñ$ QÓ'ˆØ	�‰Žò øô# ó IÜÐGÓHÐHûðIús   ‚; »
AÁAÁAÚ__main__)Dr%  Ú	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   rÀ  r   r   Útkinter.fontr    Ú	nltk.utilr!   rÁ  r#   r<   r¸   r%   r­   rï   rð   rŽ  r�  r�  r…   rn   r±   rU  rò  rž   r‹   r”   r§   rä  r2  r2  r›   rA  rø   r  r¾  rÅ  r,   r+   r9   r:   Ú<module>rÌ     sÌ  ðó Ý Ý ÷÷ ÷ ÷ ÷ ÷ õ ð:	ß"Ý!å!ô+�ô +ô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h5ñ h5òV	%NòPð2 ˆzÓÙ…Fð øðG, ó 	âð	ús   ÁE2 Å2E<Å;E<