Ë
    [RðiCE  ã                   óþ  — d Z ddlmZ ddlZddlZddlZ	 ddlmZ g d¢Z ej                  d«      Z ej                  d«      Z ej                  d«      Zej                   Zd	„ Zd
„ Z ej&                  dd¬«      Zd„ Z ej,                  d«      Z ej,                  d«      Z G d„ de«      Z G d„ de«      Zdd„Zdd„Z G d„ d«      Zd„ ZddiZe dk(  rddlZ ejB                  «        yy# e	$ r	 ddl
mZ Y Œßw xY w)aÑ  
lxml-based doctest output comparison.

Note: normally, you should just import the `lxml.usedoctest` and
`lxml.html.usedoctest` modules from within a doctest, instead of this
one::

    >>> import lxml.usedoctest # for XML output

    >>> import lxml.html.usedoctest # for HTML output

To use this module directly, you must call ``lxmldoctest.install()``,
which will cause doctest to use this in all subsequent calls.

This changes the way output is checked and comparisons are made for
XML or HTML-like content.

XML or HTML content is noticed because the example starts with ``<``
(it's HTML if it starts with ``<html``).  You can also use the
``PARSE_HTML`` and ``PARSE_XML`` flags to force parsing.

Some rough wildcard-like things are allowed.  Whitespace is generally
ignored (except in attributes).  In text (attributes and text in the
body) you can use ``...`` as a wildcard.  In an example it also
matches any trailing tags in the element, though it does not match
leading tags.  You may create a tag ``<any>`` or include an ``any``
attribute in the tag.  An ``any`` tag matches any tag, while the
attribute matches any and all attributes.

When a match fails, the reformatted example and gotten text is
displayed (indented), and a rough diff-like output is given.  Anything
marked with ``+`` is in the output but wasn't supposed to be, and
similarly ``-`` means its in the example but wasn't in the output.

You can disable parsing on one line with ``# doctest:+NOPARSE_MARKUP``
é    )ÚetreeN)Úescape)Ú
PARSE_HTMLÚ	PARSE_XMLÚNOPARSE_MARKUPÚLXMLOutputCheckerÚLHTMLOutputCheckerÚinstallÚtemp_installr   r   r   c                 ó(   — | €y | j                  «       S ©N)Ústrip©Úvs    úN/var/www/html/Extract/venv/lib/python3.12/site-packages/lxml/doctestcompare.pyr   r   8   s   € Ø€yØà�w‰w‹yÐó    c                 ó.   — t         j                  d| «      S )Nú )Ú_norm_whitespace_reÚsubr   s    r   Únorm_whitespacer   >   s   € Ü×"Ñ" 3¨Ó*Ð*r   FT)ÚrecoverÚremove_blank_textc                 ó6   — t        j                  | t        «      S r   )r   Ú
fromstringÚ_html_parser©Úhtmls    r   Úhtml_fromstringr   C   s   € Ü×Ñ˜D¤,Ó/Ð/r   z^<[^>]+ (at|object) z[ \t\n][ \t\n]+c                   ó~   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd
„Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zy)r   )
ÚparamÚimgÚareaÚbrÚbasefontÚinputÚbaseÚmetaÚlinkÚcolc                 ó"   — t         j                  S r   )r   ÚXML©Úselfs    r   Úget_default_parserz$LXMLOutputChecker.get_default_parserP   s   € Ü�y‰yÐr   c                 óJ  — t        | dd «      }|�| j                  }|} nt        j                  }| j	                  |||«      }|s || |||«      S 	  ||«      }	  ||«      }| j                  ||«      S # t
        j                  $ r Y yw xY w# t
        j                  $ r Y yw xY w)NÚ_temp_override_selfF)ÚgetattrÚ_temp_call_super_check_outputÚOutputCheckerÚcheck_outputÚ
get_parserr   ÚXMLSyntaxErrorÚcompare_docs)	r.   ÚwantÚgotÚoptionflagsÚalt_selfÚsuper_methodÚparserÚwant_docÚgot_docs	            r   r5   zLXMLOutputChecker.check_outputS   sÁ   € Ü˜4Ð!6¸Ó=ˆØÐØ×=Ñ=ˆLØ‰Dä(×5Ñ5ˆLØ—‘  s¨KÓ8ˆÙÙØ�d˜C ó.ð .ð	Ù˜d“|ˆHð	Ù˜S“kˆGð × Ñ  ¨7Ó3Ð3øô ×#Ñ#ò 	Ùð	ûô ×#Ñ#ò 	Ùð	ús$   ÁA3 ÁB Á3B	ÂB	ÂB"Â!B"c                 ó‚  — d }t         |z  ry t        |z  rt        }|S t        |z  rt        j
                  }|S |j                  «       j                  «       j                  d«      r'|j                  «       j                  d«      rt        }|S | j                  |«      r!| j                  |«      r| j                  «       }|S )Nz<html)r   r   r   r   r   r,   r   ÚlowerÚ
startswithÚ_looks_like_markupr/   )r.   r9   r:   r;   r>   s        r   r6   zLXMLOutputChecker.get_parserh   s°   € ØˆÜ˜KÒ'ØÜ˜Ò#Ü$ˆFð ˆô ˜Ò$Ü—Y‘YˆFð ˆð �j‰j‹l× Ñ Ó"×-Ñ-¨gÔ6Ø—)‘)“+×(Ñ(¨Ô1Ü$ˆFð ˆð ×%Ñ% dÔ+Ø×)Ñ)¨#Ô.Ø×,Ñ,Ó.ˆFØˆr   c                 ót   — |j                  «       }|j                  d«      xr t        j                  |«       S )Nú<)r   rC   Ú_repr_reÚsearch)r.   Úss     r   rD   z$LXMLOutputChecker._looks_like_markupx   s2   € Ø�G‰G‹IˆØ—‘˜SÓ!ò +Ü Ÿ™¨Ó*Ð*ð	,r   c                 ó   — | j                  |j                  |j                  «      sy| j                  |j                  |j                  d«      sy| j                  |j                  |j                  d«      syd|j
                  vr‚t        |j
                  j                  «       «      }t        |j
                  j                  «       «      }||k7  ry|D ]1  }| j                  |j
                  |   |j
                  |   d«      rŒ1 y |j                  dk7  st        |«      rmt        |«      }t        |«      }|s|rS|r|sy|j                  d«      }|j                  d«      }	| j                  ||	«      sy|s|j                  dk(  r	 y|rŒP|rŒSy)NFTÚanyz...r   )Útag_compareÚtagÚtext_compareÚtextÚtailÚattribÚsortedÚkeysÚlenÚlistÚpopr8   )
r.   r9   r:   Ú	want_keysÚgot_keysÚkeyÚwant_childrenÚgot_childrenÚ
want_firstÚ	got_firsts
             r   r8   zLXMLOutputChecker.compare_docs}   sU  € Ø×Ñ §¡¨#¯'©'Ô2ØØ× Ñ  §¡¨C¯H©H°dÔ;ØØ× Ñ  §¡¨C¯H©H°dÔ;ØØ˜Ÿ™Ñ#Ü˜tŸ{™{×/Ñ/Ó1Ó2ˆIÜ˜cŸj™jŸo™oÓ/Ó0ˆHØ˜HÒ$ØØ ò !�Ø×(Ñ(¨¯©°SÑ)9¸3¿:¹:Àc¹?ÈEÕRÙ ð!ð �9‰9˜Ò¤ T¤Ü  ›JˆMÜ ›9ˆLÙ¡<Ù$©LØ Ø*×.Ñ.¨qÓ1�
Ø(×,Ñ,¨QÓ/�	Ø×(Ñ(¨°YÔ?Ø Ù#¨
¯©¸5Ò(@ØØò  ¢<ð r   c                 ó  — |xs d}|xs d}|r2t        |«      j                  «       }t        |«      j                  «       }dt        j                  |«      z  }|j	                  dd«      }t        j
                  ||«      ryy)NÚ z^%s$z\.\.\.z.*TF)r   r   Úrer   ÚreplacerH   )r.   r9   r:   r   s       r   rN   zLXMLOutputChecker.text_compareš   ss   € ØŠz�rˆØŠi�RˆÙÜ" 4Ó(×.Ñ.Ó0ˆDÜ! #Ó&×,Ñ,Ó.ˆCØœŸ	™	 $›Ñ'ˆØ�|‰|˜I tÓ,ˆÜ�9‰9�T˜3ÔØàr   c                 ó  — |dk(  ryt        |t        t        f«      rt        |t        t        f«      s||k(  S |xs d}|xs d}|j                  d«      r)|j	                  d«      d   |j	                  d«      d   k(  S ||k(  S )NrK   Tr_   z{...}ú}éÿÿÿÿ)Ú
isinstanceÚstrÚbytesrC   Úsplit)r.   r9   r:   s      r   rL   zLXMLOutputChecker.tag_compare§   s   € Ø�5Š=ØÜ˜4¤#¤u Ô.Ü! #¬¬U |Ô4Ø˜3‘;ÐØŠz�rˆØŠi�RˆØ�?‰?˜7Ô#à—:‘:˜c“? 2Ñ&¨#¯)©)°C«.¸Ñ*<Ñ<Ð<à˜3‘;Ðr   c                 ó¬  — |j                   }| j                  |||«      }g }|�	  ||«      }	  ||«      }	|�|r>t        j                  | |||«      }
|r"|j                  |
«       dj                  |«      S |
S |t        u }d| j                  |d«      d| j                  	|d«      d| j                  ||	|d«      g}dj                  |«      S # t        j                  $ r. t	        j
                  «       d   }|j                  d|z  «       Y Œàw xY w# t        j                  $ r/ t	        j
                  «       d   }|j                  d|z  «       Y �Œw xY w)	Né   zIn example: %szIn actual output: %sú
z	Expected:é   zGot:zDiff:)r9   r6   r   r7   ÚsysÚexc_infoÚappendr4   Úoutput_differenceÚjoinr   Ú
format_docÚcollect_diff)r.   Úexampler:   r;   r9   r>   Úerrorsr?   Úer@   Úvaluer   Ú
diff_partss                r   rp   z#LXMLOutputChecker.output_differenceµ   sZ  € Ø�|‰|ˆØ—‘  s¨KÓ8ˆØˆØÐð4Ù! $›<�ð:Ù  ›+�ð ˆ>™VÜ!×3Ñ3Ø�g˜s Kó1ˆEáØ—‘˜eÔ$Ø—y‘y Ó(Ð(à�ØœÐ(ˆØ!Ø—o‘o h°°aÓ8ØØ—o‘o g¨t°QÓ7ØØ×'Ñ'¨°'¸4ÀÓCðEˆ
ð �y‰y˜Ó$Ð$øô/ ×'Ñ'ò 4Ü—L‘L“N 1Ñ%�Ø—‘Ð.°Ñ2Ö3ð4ûô
 ×'Ñ'ò :Ü—L‘L“N 1Ñ%�Ø—‘Ð4°qÑ8×9ð:ús"   ¥C ®D Ã>DÄDÄ>EÅEc                 ól   — |sy|j                   | j                  vry|j                  st        |«      ryy)NFT)rM   Ú
empty_tagsrO   rT   )r.   Úelr   s      r   Úhtml_empty_tagz LXMLOutputChecker.html_empty_tagÕ   s.   € ÙØØ�6‰6˜Ÿ™Ñ(ØØ�7Š7”c˜"”gàØr   c           	      ó°  — g }t        |«      �s|j                  d|z  «       |j                  |«       |j                  | j                  |«      «       | j                  ||«      s_t	        |j
                  «      r*|j                  | j                  |j
                  «      «       |j                  | j                  |«      «       t	        |j                  «      r*|j                  | j                  |j                  «      «       |j                  d«       dj                  |«      S |j                  d|z  «       |j                  |«       |j                  | j                  |«      «       | j                  ||«      sæ|j                  d«       t	        |j
                  «      rO|j                  d|z  «       |j                  | j                  |j
                  «      «       |j                  d«       |D ]'  }|j                  | j                  |||dz   «      «       Œ) |j                  d|z  «       |j                  | j                  |«      «       |j                  d«       t	        |j                  «      rO|j                  d|z  «       |j                  | j                  |j                  «      «       |j                  d«       dj                  |«      S )Nr   rk   r_   rl   )rT   ro   Ú
format_tagr|   r   rO   Úformat_textÚformat_end_tagrP   rq   rr   )r.   Údocr   ÚindentÚprefixÚpartsr{   s          r   rr   zLXMLOutputChecker.format_docß   s  € ØˆÜ�3�xà�L‰L˜˜V™Ô$Ø�L‰L˜Ô Ø�L‰L˜Ÿ™¨Ó-Ô.Ø×&Ñ& s¨DÔ1Ü˜Ÿ™”?Ø—L‘L ×!1Ñ!1°#·(±(Ó!;Ô<Ø—‘˜T×0Ñ0°Ó5Ô6Ü�S—X‘XŒØ—‘˜T×-Ñ-¨c¯h©hÓ7Ô8Ø�L‰L˜ÔØ—7‘7˜5“>Ð!Ø�‰�S˜‘ZÔ Ø�‰�VÔØ�‰�T—_‘_ SÓ)Ô*Ø×"Ñ" 3¨Ô-Ø�L‰L˜ÔÜ�S—X‘XŒØ—‘˜S ™ZÔ(Ø—‘˜T×-Ñ-¨c¯h©hÓ7Ô8Ø—‘˜TÔ"Øò B�Ø—‘˜TŸ_™_¨R°°v¸a±xÓ@ÕAðBà�L‰L˜˜V™Ô$Ø�L‰L˜×,Ñ,¨SÓ1Ô2Ø�L‰L˜ÔÜ�—‘Œ?Ø�L‰L˜˜V™Ô$Ø�L‰L˜×)Ñ)¨#¯(©(Ó3Ô4Ø�L‰L˜ÔØ�w‰w�u‹~Ðr   c                 óD   — |€y|r|j                  «       }t        |d«      S )Nr_   rj   )r   Úhtml_escape)r.   rO   r   s      r   r   zLXMLOutputChecker.format_text  s%   € Øˆ<ØÙØ—:‘:“<ˆDÜ˜4 Ó#Ð#r   c           	      óF  — g }t        |t        j                  «      ryt        |j                  j                  «       «      D ],  \  }}|j                  |›d| j                  |d«      ›d�«       Œ. |sd|j                  z  S d|j                  ›ddj                  |«      ›d�S )	Nz<!--ú="Fú"ú<%s>rF   r   ú>)
re   r   ÚCommentBaserR   rQ   Úitemsro   r   rM   rq   )r.   r{   ÚattrsÚnamerw   s        r   r~   zLXMLOutputChecker.format_tag	  sŠ   € ØˆÜ�bœ%×+Ñ+Ô,àÜ! "§)¡)§/¡/Ó"3Ó4ò 	M‰KˆD�%Ø�L‰L¢d¨D×,<Ñ,<¸UÀEÕ,JÐKÕLð	MáØ˜BŸF™F‘?Ð"ð àŸF›F C§H¡H¨U¥OÐ4Ð4r   c                 óV   — t        |t        j                  «      ryd|j                  z  S )Nz-->ú</%s>)re   r   rŒ   rM   )r.   r{   s     r   r€   z LXMLOutputChecker.format_end_tag  s$   € Ü�bœ%×+Ñ+Ô,àØ˜Ÿ™ÑÐr   c           	      ó  — g }t        |«      sÿt        |«      sô|j                  d|z  «       |j                  | j                  ||«      «       | j                  ||«      sV|j                  | j	                  |j
                  |j
                  «      «       |j                  | j                  ||«      «       |j                  | j	                  |j                  |j                  «      «       |j                  d«       dj                  |«      S |j                  d|z  «       |j                  | j                  ||«      «       |j                  d«       t        |j
                  «      st        |j
                  «      rZ|j                  d|z  «       |j                  | j	                  |j
                  |j
                  «      «       |j                  d«       t        |«      }t        |«      }|s|rº|s6|j                  | j                  |j                  d«      ||dz   d«      «       Œ<|s6|j                  | j                  |j                  d«      ||dz   d«      «       Œt|j                  | j                  |j                  d«      |j                  d«      ||dz   «      «       |rŒ·|rŒº|j                  d|z  «       |j                  | j                  ||«      «       |j                  d«       t        |j                  «      st        |j                  «      rZ|j                  d|z  «       |j                  | j	                  |j                  |j                  «      «       |j                  d«       dj                  |«      S )Nr   rk   r_   r   rl   ú+ú-)rT   ro   Úcollect_diff_tagr|   Úcollect_diff_textrO   Úcollect_diff_end_tagrP   rq   r   rU   rr   rV   rs   )r.   r9   r:   r   r‚   r„   rZ   r[   s           r   rs   zLXMLOutputChecker.collect_diff  s¡  € ØˆÜ�4Œy¤ S¤Ø�L‰L˜˜V™Ô$Ø�L‰L˜×.Ñ.¨t°SÓ9Ô:Ø×&Ñ& s¨DÔ1Ø—‘˜T×3Ñ3°D·I±I¸s¿x¹xÓHÔIØ—‘˜T×6Ñ6°t¸SÓAÔBØ�L‰L˜×/Ñ/°·	±	¸3¿8¹8ÓDÔEØ�L‰L˜ÔØ—7‘7˜5“>Ð!Ø�‰�S˜‘ZÔ Ø�‰�T×*Ñ*¨4°Ó5Ô6Ø�‰�TÔÜ�—‘Ôœu S§X¡XœØ�L‰L˜˜V™Ô$Ø�L‰L˜×/Ñ/°·	±	¸3¿8¹8ÓDÔEØ�L‰L˜ÔÜ˜T›
ˆÜ˜C“yˆÙ™|Ù Ø—‘˜TŸ_™_¨\×-=Ñ-=¸aÓ-@À$ÈÈqÉÐRUÓVÔWØÙØ—‘˜TŸ_™_¨]×->Ñ->¸qÓ-AÀ4ÈÐPQÉÐSVÓWÔXØØ�L‰L˜×*Ñ*Ø×!Ñ! !Ó$ l×&6Ñ&6°qÓ&9¸4ÀÈÁóKô Lò š|ð 	�‰�S˜‘ZÔ Ø�‰�T×.Ñ.¨t°SÓ9Ô:Ø�‰�TÔÜ�—‘Ôœu S§X¡XœØ�L‰L˜˜V™Ô$Ø�L‰L˜×/Ñ/°·	±	¸3¿8¹8ÓDÔEØ�L‰L˜ÔØ�w‰w�u‹~Ðr   c           
      óh  — | j                  |j                  |j                  «      s|j                  ›d|j                  ›d�}n|j                  }g }|j                  dk(  xs d|j                  v }t        |j                  j	                  «       «      D ]–  \  }}||j                  vr+|s)|j                  d|›d| j                  |d«      ›d�«       Œ?||j                  v r!| j                  |j                  |   |d«      }n| j                  |d«      }|j                  |›d|›d�«       Œ˜ |sbt        |j                  j	                  «       «      D ]<  \  }}||j                  v rŒ|j                  d|›d| j                  |d«      ›d�«       Œ> |rd	|›d
d
j                  |«      ›d�}|S d|z  }|S )Nú (got: ú)rK   r“   rˆ   Fr‰   r”   rF   r   r‹   rŠ   )	rL   rM   rQ   rR   r�   ro   r   r–   rq   )	r.   r9   r:   rM   rŽ   rK   r�   rw   rO   s	            r   r•   z"LXMLOutputChecker.collect_diff_tag@  sz  € Ø×Ñ §¡¨#¯'©'Ô2Ø$(§H£H¨c¯g«gÐ6‰Cà—'‘'ˆCØˆØ�h‰h˜%ÑÒ7 5¨D¯K©KÐ#7ˆÜ! #§*¡*×"2Ñ"2Ó"4Ó5ò 	7‰KˆD�%Ø˜4Ÿ;™;Ñ&©sØ—’ª4°×1AÑ1AÀ%ÈÕ1OÐPÕQà˜4Ÿ;™;Ñ&Ø×1Ñ1°$·+±+¸dÑ2CÀUÈEÓR‘Dà×+Ñ+¨E°5Ó9�DØ—‘ª$²Ð5Õ6ð	7ñ Ü% d§k¡k×&7Ñ&7Ó&9Ó:ò R‘��eØ˜3Ÿ:™:Ñ%ØØ—’ª4°×1AÑ1AÀ%ÈÕ1OÐPÕQðRò Ú" C§H¡H¨U¥OÐ4ˆCð ˆ
ð ˜3‘,ˆCØˆ
r   c                 ó˜   — |j                   |j                   k7  r!|j                   ›d|j                   ›d�}d|z  S |j                   }d|z  S )Nr™   rš   r‘   )rM   )r.   r9   r:   rM   s       r   r—   z&LXMLOutputChecker.collect_diff_end_tag[  sE   € Ø�8‰8�s—w‘wÒØ$(§H£H¨c¯g«gÐ6ˆCð ˜‰}Ðð —'‘'ˆCØ˜‰}Ðr   c                 ó†   — | j                  |||«      r|sy| j                  ||«      S |›d|›d�}| j                  ||«      S )Nr_   r™   rš   )rN   r   )r.   r9   r:   r   rO   s        r   r–   z#LXMLOutputChecker.collect_diff_textb  sJ   € Ø×Ñ˜T 3¨Ô.ÙØØ×#Ñ# C¨Ó/Ð/Ú!%¢sÐ+ˆØ×Ñ  eÓ,Ð,r   N)T)r_   )Ú__name__Ú
__module__Ú__qualname__rz   r/   r5   r6   rD   r8   rN   rL   rp   r|   rr   r   r~   r€   rs   r•   r—   r–   © r   r   r   r   J   sa   „ ð'€Jòò4ò*ò ,ò
ò:òò%ó@ó!óF$ò	5ò ò$òLò6ô-r   r   c                   ó   — e Zd Zd„ Zy)r	   c                 ó   — t         S r   )r   r-   s    r   r/   z%LHTMLOutputChecker.get_default_parserk  s   € ÜÐr   N)r�   rž   rŸ   r/   r    r   r   r	   r	   j  s   „ ór   r	   c                 óF   — | rt         t        _        yt        t        _        y)z£
    Install doctestcompare for all future doctests.

    If html is true, then by default the HTML parser will be used;
    otherwise the XML parser is used.
    N)r	   Údoctestr4   r   r   s    r   r
   r
   n  s   € ñ Ü 2ŒÕä 1ŒÕr   c                 ó$  — | rt         }nt        }t        «       }|j                  d   } |«       }|j                  }||_        |j                  d   j
                  }|j                  j
                  }t        t        _        t        ||||||«       y)zÁ
    Use this *inside* a doctest to enable this checker for this
    doctest only.

    If html is true, then by default the HTML parser will be used;
    otherwise the XML parser is used.
    r.   ÚcheckN)
r	   r   Ú_find_doctest_frameÚf_localsÚ_checkerÚ__func__r5   r   r¤   Ú_RestoreChecker)	r   Ú
del_moduleÚCheckerÚframeÚdt_selfÚcheckerÚold_checkerÚ
check_funcÚchecker_check_funcs	            r   r   r   z  s‰   € ñ Ü$‰ä#ˆÜÓ!€EØ�n‰n˜VÑ$€GÙ‹i€GØ×"Ñ"€KØ€GÔð —‘ Ñ(×1Ñ1€JØ ×-Ñ-×6Ñ6Ðô „G„MÜ�G˜[¨'ØÐ 2Øõ r   c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
r«   c                 óâ   — || _         || _        | j                  | j                  _        || j                  _        || _        || _        || _        | j                  «        | j                  «        y r   )
r¯   r°   Ú
call_superr3   r1   r²   Ú
clone_funcr¬   Úinstall_cloneÚinstall_dt_self)r.   r¯   r±   Únew_checkerr²   r·   r¬   s          r   Ú__init__z_RestoreChecker.__init__ž  sY   € àˆŒØ"ˆŒØ59·_±_ˆ�‰Ô2Ø+6ˆ�‰Ô(Ø$ˆŒØ$ˆŒØ$ˆŒØ×ÑÔØ×ÑÕr   c                 óº   — | j                   j                  | _        | j                   j                  | _        | j
                  j                  | j                   _        y r   )r²   Ú__code__Ú	func_codeÚ__globals__Úfunc_globalsr·   r-   s    r   r¸   z_RestoreChecker.install_clone©  s;   € ØŸ™×1Ñ1ˆŒØ ŸO™O×7Ñ7ˆÔØ#'§?¡?×#;Ñ#;ˆ�‰Õ r   c                 ó:   — | j                   | j                  _        y r   )r¾   r²   r½   r-   s    r   Úuninstall_clonez_RestoreChecker.uninstall_clone­  s   € Ø#'§>¡>ˆ�‰Õ r   c                 ó\   — | j                   j                  | _        | | j                   _        y r   )r¯   Ú_DocTestRunner__record_outcomeÚ	prev_funcr-   s    r   r¹   z_RestoreChecker.install_dt_self¯  s   € ØŸ™×DÑDˆŒØ6:ˆ�‰Õ3r   c                 ó:   — | j                   | j                  _        y r   )rÅ   r¯   rÄ   r-   s    r   Úuninstall_dt_selfz!_RestoreChecker.uninstall_dt_self²  s   € Ø6:·n±nˆ�‰Õ3r   c                 óæ   — | j                   redd l}|j                  | j                   = d| j                   v r;| j                   j                  dd«      \  }}|j                  |   }t	        ||«       y y y )Nr   ú.rj   )r¬   rm   ÚmodulesÚrsplitÚdelattr)r.   rm   ÚpackageÚmoduleÚpackage_mods        r   Úuninstall_modulez _RestoreChecker.uninstall_module´  sd   € Ø�?Š?ÛØ—‘˜DŸO™OÐ,Ø�d—o‘oÑ%Ø"&§/¡/×"8Ñ"8¸¸aÓ"@‘�˜Ø!Ÿk™k¨'Ñ2�Ü˜ VÕ,ð &ð r   c                 óº   — | j                  «        | j                  «        | j                  `| j                  ` | j
                  |i |¤Ž}| j                  «        |S r   )rÂ   rÇ   r°   r1   r3   rÅ   rÐ   )r.   ÚargsÚkwÚresults       r   Ú__call__z_RestoreChecker.__call__¼  sT   € Ø×ÑÔØ×ÑÔ Ø�L‰LÐ,Ø�L‰LÐ6Ø�—‘ Ð,¨Ñ,ˆØ×ÑÔØˆr   c                 ó’   — | j                  «        	  | j                  |i |¤Ž| j                  «        S # | j                  «        w xY wr   )rÂ   r²   r¸   )r.   rÒ   rÓ   s      r   r¶   z_RestoreChecker.call_superÄ  s?   € Ø×ÑÔð	!Ø"�4—?‘? DÐ/¨BÑ/à×ÑÕ øˆD×ÑÕ ús	   ’4 ´AN)r�   rž   rŸ   r»   r¸   rÂ   r¹   rÇ   rÐ   rÕ   r¶   r    r   r   r«   r«   �  s+   „ ò
ò<ò2ò;òEò-òó!r   r«   c                  óŠ   — dd l }  | j                  d«      }|r!|j                  }d|v r|S |j                  }|rŒ!t	        d«      ‚)Nr   rj   ÚBOOMzBCould not find doctest (only use this function *inside* a doctest))rm   Ú	_getframer¨   Úf_backÚLookupError)rm   r®   Úls      r   r§   r§   Ë  sO   € ÛØˆC�M‰M˜!Ó€EÙ
Ø�N‰NˆØ�Q‰;àˆLØ—‘ˆò ô ØLóNð Nr   Úbasicai  
    >>> temp_install()
    >>> print """<xml a="1" b="2">stuff</xml>"""
    <xml b="2" a="1">...</xml>
    >>> print """<xml xmlns="http://example.com"><tag   attr="bar"   /></xml>"""
    <xml xmlns="...">
      <tag attr="..." />
    </xml>
    >>> print """<xml>blahblahblah<foo /></xml>""" # doctest: +NOPARSE_MARKUP, +ELLIPSIS
    <xml>...foo /></xml>
    Ú__main__)F)FN)"Ú__doc__Úlxmlr   rm   r`   r¤   r   r   r†   ÚImportErrorÚcgiÚ__all__Úregister_optionflagr   r   r   r4   r   r   Ú
HTMLParserr   r   ÚcompilerG   r   r   r	   r
   r   r«   r§   Ú__test__r�   Útestmodr    r   r   ú<module>ré      s2  ðñ#õJ Û 
Û 	Û ð*Ý*ò<€ð )ˆW×(Ñ(¨Ó6€
Ø'ˆG×'Ñ'¨Ó4€	Ø,�×,Ñ,Ð-=Ó>€à×%Ñ%€òò+ð  ˆu×Ñ¨ÀÔF€ò0ð ˆ2�:‰:Ð-Ó.€Ø �b—j‘jÐ!3Ó4Ð ô^-˜ô ^-ô@	Ð*ô ó
2ó! ÷F,!ñ ,!ò\
Nð ð 
ð	€ð ˆzÒÛØ€G‡O�OÕð øðq ò *ß)ð*ús   –C. Ã.C<Ã;C<