Ë
    	š„jôM  ã                   ó”  — d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZmZmZ d dlmZmZmZ erd dlZd„ Zd„ Z G d„ d	e«      Z G d
„ de«      Z G d„ de«      Z G d„ dej8                  «      Z ej<                  ed«      Zd„ Z d„ Z!d„ Z"d„ Z# e$ej8                  d«      s%ej8                  jJ                  ej8                  _&        dd„Z' e$ej8                  d«      s eej8                  de'«        G d„ de(«      Z) G d„ de)«      Z*dd„Z+ e$ej8                  d«      s eej8                  de+«       yy)é    )Úprint_functionÚabsolute_importN)Údedent)Úbind_methodÚPY26ÚPY3ÚPY2ÚPY27)Úcheck_outputÚSTDOUTÚCalledProcessErrorc                 óD   — | j                  d«      r| dd } t        | «      S )z,
    Removes any leading 
 and dedents.
    ú
é   N)Ú
startswithr   )Úcodes    úH/var/www/html/GAP/venv/lib/python3.12/site-packages/future/tests/base.pyÚreformat_coder      s%   € ð ‡��tÔØ�A�BˆxˆÜ�$‹<Ðó    c                 óH  — | j                  d«      }t        |«      D ��cg c]  \  }}|j                  d«      r|‘Œ }}}t        |«      D ��cg c])  \  }}|j                  d«      s|j                  d«      r|‘Œ+ }}}t        |«      D ��cg c]  \  }}|j                  d«      r|‘Œ }}}| j                  «       | k(  sJ d«       ‚d„ }d„ } ||«       ||«      k  sJ d	«       ‚t	        |D �cg c]  }||   ‘Œ	 c}«      }	t        t        ||	«      «      }
t	        |D �cg c]  }||   ‘Œ	 c}«      }t        t        ||«      «      }t	        |D �cg c]  }||   ‘Œ	 c}«      }t        t        ||«      «      }g }t        t        |«      «      D ]a  }||v r|j                  |
|   «       Œ||v r|j                  ||   «       Œ5||v r|j                  ||   «       ŒN|j                  ||   «       Œc dj                  |«      S c c}}w c c}}w c c}}w c c}w c c}w c c}w )
a  
    Returns the code block with any ``__future__`` import lines sorted, and
    then any ``future`` import lines sorted, then any ``builtins`` import lines
    sorted.

    This only sorts the lines within the expected blocks.

    See test_order_future_lines() for an example.
    r   úfrom __future__ import zfrom futurez	from pastzfrom builtinszIinternal usage error: dedent the code before calling order_future_lines()c                 ó8   — t        | «      dkD  rt        | «      S dS )Nr   )ÚlenÚmax©Únumberss    r   Úmymaxz!order_future_lines.<locals>.mymax7   s   € Ü" 7›|¨aÒ/Œs�7‹|Ð6°QÐ6r   c                 óJ   — t        | «      dkD  rt        | «      S t        d«      S )Nr   Úinf)r   ÚminÚfloatr   s    r   Úmyminz!order_future_lines.<locals>.mymin:   s    € Ü" 7›|¨aÒ/Œs�7‹|ÐA´U¸5³\ÐAr   z2the __future__ and future imports are out of order)ÚsplitÚ	enumerater   ÚlstripÚsortedÚdictÚzipÚranger   ÚappendÚjoin)r   ÚlinesÚiÚlineÚuufuture_line_numbersÚfuture_line_numbersÚbuiltins_line_numbersr   r"   ÚuulÚsorted_uufuture_linesÚflÚsorted_future_linesÚblÚsorted_builtins_linesÚ	new_liness                   r   Úorder_future_linesr9      sZ  € ð �J‰J�tÓ€Eä.7¸Ó.>÷ N¡7 1 dØ"&§/¡/Ð2KÔ"Lò ð NÐñ Nô -6°eÓ,<÷ >¡  DØ $§¡°Ô >Ø $§¡°Ô <ò ð >Ðñ >ô /8¸Ó.>÷ B¡7 1 dØ $§¡°Ô @ò ð BÐñ Bð �;‰;‹=˜DÒ ð Cð $Bó CÐ ò7òBñ Ð&Ó'©5Ð1DÓ+EÒEð AØ@óAÐEô Ð$9Ö:˜q�%˜“(Ò:Ó
;€CÜ ¤Ð%:¸CÓ!@ÓAÐä	Ð#6Ö7˜a��q“Ò7Ó	8€BÜœsÐ#6¸Ó;Ó<Ðä	Ð#8Ö9˜a��q“Ò9Ó	:€BÜ ¤Ð%:¸BÓ!?Ó@Ðð €IÜ”3�u“:Óò 'ˆØÐ%Ñ%Ø×ÑÐ2°1Ñ5Õ6ØÐ%Ñ%Ø×ÑÐ0°Ñ3Õ4ØÐ'Ñ'Ø×ÑÐ2°1Ñ5Õ6à×Ñ˜U 1™XÕ&ð'ð �9‰9�YÓÐùó]Nùó>ùóBùò$ ;ùò 8ùò :s#    HÁ.H	ÂHÃ.HÄHÅHc                   ó   — e Zd ZdZdd„Zd„ Zy)ÚVerboseCalledProcessErrorz…
    Like CalledProcessError, but it displays more information (message and
    script output) for diagnosing test failures etc.
    Nc                 ó<   — || _         || _        || _        || _        y ©N)ÚmsgÚ
returncodeÚcmdÚoutput)Úselfr>   r?   r@   rA   s        r   Ú__init__z"VerboseCalledProcessError.__init__`   s   € ØˆŒØ$ˆŒØˆŒØˆ�r   c                 ód   — d| j                   | j                  | j                  | j                  fz  S )Nz>Command '%s' failed with exit status %d
Message: %s
Output: %s)r@   r?   r>   rA   )rB   s    r   Ú__str__z!VerboseCalledProcessError.__str__f   s-   € ØRØ—8‘8˜TŸ_™_¨d¯h©h¸¿¹ÐDñEð 	Fr   r=   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rC   rE   © r   r   r;   r;   [   s   „ ñóóFr   r;   c                   ó   — e Zd Zy)ÚFuturizeErrorN©rF   rG   rH   rJ   r   r   rL   rL   j   ó   „ Ør   rL   c                   ó   — e Zd Zy)ÚPasteurizeErrorNrM   rJ   r   r   rP   rP   m   rN   r   rP   c                   ó‚   — e Zd ZdZd„ Z	 	 dd„Zdd„Zd„ Z	 	 	 dd„Zd„ Z	dd	„Z
dd
„Z	 	 	 dd„Zdej                  fd„Zy)ÚCodeHandlerzt
    Handy mixin for test classes for writing / reading / futurizing /
    running .py files in the test suite.
    c                 óœ  — t        d«      | _        t        d«      | _        t        j                  g| _        t        j                  «       t        j                  j                  z   | _        t        j                  d«      }|r0dt        j                  «       t        j                  z   |z   i| _        ydt        j                  «       i| _        y)zi
        The outputs from the various futurize stages should have the
        following headers:
        zŽ
        from __future__ import absolute_import
        from __future__ import division
        from __future__ import print_function
        a4  
        from __future__ import absolute_import
        from __future__ import division
        from __future__ import print_function
        from __future__ import unicode_literals
        from future import standard_library
        standard_library.install_aliases()
        from builtins import *
        Ú
PYTHONPATHN)r   Úheaders1Úheaders2ÚsysÚ
executableÚinterpretersÚtempfileÚmkdtempÚosÚpathÚsepÚtempdirÚgetenvÚgetcwdÚpathsepÚenv)rB   Úpypaths     r   ÚsetUpzCodeHandler.setUpv   s™   € ô &ð 'ó ˆŒô &ð 'ó ˆŒô !Ÿ^™^Ð,ˆÔÜ×'Ñ'Ó)¬B¯G©G¯K©KÑ7ˆŒÜ—‘˜<Ó(ˆÙØ$¤b§i¡i£k´B·J±JÑ&>ÀÑ&GÐHˆD�Hà$¤b§i¡i£kÐ2ˆD�Hr   c                 óÖ   — |rt        |«      }| j                  |«       | j                  ||||¬«       | j                  «       }|r#| j                  D ]  }	| j                  |	¬«      }
Œ |S )a•  
        Converts the code block using ``futurize`` and returns the
        resulting code.

        Passing stages=[1] or stages=[2] passes the flag ``--stage1`` or
        ``stage2`` to ``futurize``. Passing both stages runs ``futurize``
        with both stages by default.

        If from3 is False, runs ``futurize``, converting from Python 2 to
        both 2 and 3. If from3 is True, runs ``pasteurize`` to convert
        from Python 3 to both 2 and 3.

        Optionally reformats the code block first using the reformat() function.

        If run is True, runs the resulting code under all Python
        interpreters in self.interpreters.
        )ÚstagesÚall_importsÚfrom3Úconservative)Úinterpreter)r   Ú_write_test_scriptÚ_futurize_test_scriptÚ_read_test_scriptrY   Ú_run_test_script)rB   r   rg   rh   ri   ÚreformatÚrunrj   rA   rk   Ú_s              r   ÚconvertzCodeHandler.convert¡   s|   € ñ& Ü  Ó&ˆDØ×Ñ Ô%Ø×"Ñ"¨&¸kØ).¸\ð 	#ô 	Kà×'Ñ'Ó)ˆÙØ#×0Ñ0ò C�Ø×)Ñ)°kÐ)ÓB‘ðCàˆr   c                 ó~  — |r"| j                  |«      }| j                  |«      }t        |t        «      r!t        |t        «      s|j                  d«      }t        |t        «      r!t        |t        «      s|j                  d«      }| j	                  t        |j                  «       «      |j                  «       «       y)a›  
        Compares whether the code blocks are equal. If not, raises an
        exception so the test fails. Ignores any trailing whitespace like
        blank lines.

        If ignore_imports is True, passes the code blocks into the
        strip_future_imports method.

        If one code block is a unicode string and the other a
        byte-string, it assumes the byte-string is encoded as utf-8.
        úutf-8N)Ústrip_future_importsÚ
isinstanceÚbytesÚdecodeÚassertEqualr9   Úrstrip)rB   rA   ÚexpectedÚignore_importss       r   ÚcomparezCodeHandler.compare¿   s�   € ñ Ø×.Ñ.¨vÓ6ˆFØ×0Ñ0°Ó:ˆHÜ�fœeÔ$¬Z¸Ä%Ô-HØ—]‘] 7Ó+ˆFÜ�h¤Ô&¬z¸&Ä%Ô/HØ—‘ wÓ/ˆHØ×ÑÔ+¨F¯M©M«OÓ<Ø!Ÿ™Ó*õ	,r   c                 ó  — g }|j                  d«      D ]e  }|j                  d«      rŒ|j                  d«      rŒ'|j                  d«      rŒ9d|v rŒ>d|v rŒC|j                  d«      rŒU|j                  |«       Œg dj                  |«      S )a  
        Strips any of these import lines:

            from __future__ import <anything>
            from future <anything>
            from future.<anything>
            from builtins <anything>

        or any line containing:
            install_hooks()
        or:
            install_aliases()

        Limitation: doesn't handle imports split across multiple lines like
        this:

            from __future__ import (absolute_import, division, print_function,
                                    unicode_literals)
        r   r   zfrom future zfrom builtins zinstall_hooks()zinstall_aliases()zfrom future.)r#   r   r*   r+   )rB   r   rA   r.   s       r   rv   z CodeHandler.strip_future_importsÕ   s‚   € ð( ˆð —J‘J˜tÓ$ò 	$ˆDØ—O‘OÐ$=Õ>Ø—‘ ~Õ6Ø—‘Ð'7Õ8Ø(¨DÒ0Ø*¨dÒ2à—‘ ~Õ6Ø—‘˜dÕ#ð	$ð �y‰y˜Ó Ð r   c	                 óÄ   — | j                  ||||||¬«      }	|rd|v r| j                  n| j                  }
nd}
t        |«      }|
|v rd}
| j	                  |	|
|z   |¬«       y)a<  
        Convenience method that calls convert() and compare().

        Reformats the code blocks automatically using the reformat_code()
        function.

        If all_imports is passed, we add the appropriate import headers
        for the stage(s) selected to the ``expected`` code-block, so they
        needn't appear repeatedly in the test code.

        If ignore_imports is True, ignores the presence of any lines
        beginning:

            from __future__ import ...
            from future import ...

        for the purpose of the comparison.
        )rg   rh   ri   rq   rj   é   Ú )r}   N)rs   rV   rU   r   r~   )rB   Úbeforer|   rg   rh   r}   ri   rq   rj   rA   ÚheadersÚreformatteds               r   Úconvert_checkzCodeHandler.convert_check÷   sv   € ð* —‘˜f¨VÀØ$)¨sÀð ó OˆáØ'(¨F¡{�d—m’m¸¿¹‰GàˆGä# HÓ-ˆØ�kÑ!ØˆGà�‰�V˜W {Ñ2Ø$2ð 	õ 	4r   c                 ó,   —  | j                   ||fi |¤Ž y)ze
        Convenience method to ensure the code is unchanged by the
        futurize process.
        N)r†   )rB   r   Úkwargss      r   Ú	unchangedzCodeHandler.unchanged  s   € ð
 	ˆ×Ñ˜4 Ñ0¨Ó0r   úmytestscript.pyc                 óî   — t        |t        «      r|j                  d«      }t        j                  | j
                  |z   dd¬«      5 }|j                  t        |«      «       ddd«       y# 1 sw Y   yxY w)zœ
        Dedents the given code (a multiline string) and writes it out to
        a file in a temporary folder like /tmp/tmpUDCn7x/mytestscript.py.
        ru   Úwt©ÚencodingN)rw   rx   ry   ÚioÚopenr_   Úwriter   )rB   r   ÚfilenameÚfs       r   rl   zCodeHandler._write_test_script!  s\   € ô
 �dœEÔ"Ø—;‘;˜wÓ'ˆDä�W‰W�T—\‘\ HÑ,¨d¸WÔEð 	"ÈØ�G‰G”F˜4“LÔ!÷	"÷ 	"ñ 	"ús   ÁA+Á+A4c                 óœ   — t        j                  | j                  |z   dd¬«      5 }|j                  «       }d d d «       |S # 1 sw Y   S xY w)NÚrtru   r�   )r�   r�   r_   Úread)rB   r’   r“   Ú	newsources       r   rn   zCodeHandler._read_test_script,  sD   € Ü�W‰W�T—\‘\ HÑ,¨d¸WÔEð 	!ÈØŸ™›ˆI÷	!àÐ÷	!àÐús   ¦AÁAc                 óì  — g }t        |«      }|r|j                  d«       |rd}nNd}|dgk(  r|j                  d«       n!|dgk(  r|j                  d«       n	|ddgk(  sJ ‚|r|j                  d«       | j                  |z   }t        j                  |g|z   d	|gz   }		 t        |	t        | j                  ¬
«      }
|
S # t        $ r®}t        |«      5 }ddj                  |	«      ›dd| j                  z  ›d|›dd|j                  «       z  ›�}d d d «       n# 1 sw Y   nxY wd|v rt        nt        }t        |d«      sd |_         ||j                   |j"                  |j                  ¬«      ‚d }~ww xY w)Nz--all-importszpasteurize.pyzfuturize.pyr   z--stage1r�   z--stage2z--conservativez-w)Ústderrrc   úError running the command ú r   úenv=%sú
Contents of file ú:

ú----
%s
----ÚfuturizerA   ©rA   )Úlistr*   r_   rW   rX   r   r   rc   r   r�   r+   r–   rL   rP   ÚhasattrrA   r?   r@   )rB   r’   rg   rh   ri   rj   ÚparamsÚscriptÚfnÚ	call_argsrA   Úer“   r>   Ú
ErrorClasss                  r   rm   z!CodeHandler._futurize_test_script1  sg  € ð ˆÜ�f“ˆÙØ�M‰M˜/Ô*ÙØ$‰Fà"ˆFØ˜!˜Š}Ø—‘˜jÕ)Ø˜A˜3’Ø—‘˜jÕ)à ! Q Ò'Ð'Ð'ÙØ—‘Ð.Ô/ð �\‰\˜HÑ$ˆÜ—^‘^ VÐ,¨vÑ5¸¸r¸
ÑBˆ	ð	HÜ! )´FÀÇÁÔIˆFð( ˆøô' "ò 	HÜ�b“ð ™Qð Ÿ™ Õ+Ø  4§8¡8Ó+ÚØ(¨1¯6©6«8Ò3ð
�÷÷ ñ úð ,6¸Ñ+?�-Ä_ˆJä˜1˜hÔ'à�”Ù˜S !§,¡,°·±¸a¿h¹hÔGÐGûð%	Hús1   ÂB< Â<	E3ÃE.Ã<DÄ	E.ÄD	ÄAE.Å.E3c                 óÀ  — | j                   |z   }	 t        ||g| j                  t        ¬«      }|S # t        $ r£}t        |«      5 }ddj                  ||g«      ›dd| j                  z  ›d|›dd|j                  «       z  ›�}d d d «       n# 1 sw Y   nxY wt        |d	«      sd |_	        t        |j                  |j                  |j                  ¬
«      ‚d }~ww xY w)N)rc   r™   rš   r›   r   rœ   r�   rž   rŸ   rA   r¡   )r_   r   rc   r   r   r�   r+   r–   r£   rA   r;   r?   r@   )rB   r’   rk   r¦   rA   r¨   r“   r>   s           r   ro   zCodeHandler._run_test_script`  sÒ   € ð �\‰\˜HÑ$ˆð	WÜ! ;°Ð"3Ø&*§h¡h´vô?ˆFð& ˆøô# "ò 	WÜ�b“ð ™Qð Ÿ™ +¨rÐ!2Õ3Ø  4§8¡8Ó+ÚØ(¨1¯6©6«8Ò3ð
�÷÷ ñ úô ˜1˜hÔ'à�”Ü+¨C°·±¸q¿u¹uÈQÏXÉXÔVÐVûð!	Wús-   ‘1 ±	CºCÁ>BÂ	CÂB	ÂACÃCN)©r   r�   FFTTF)T)r«   FTFTF)rŠ   )rŠ   r«   FFF)rF   rG   rH   rI   re   rs   r~   rv   r†   r‰   rl   rn   rm   rW   rX   ro   rJ   r   r   rR   rR   q   sm   „ ñò)3ðV EJØ6;óó<,ò, !ðD JOØ<@Ø#(ó!4òF1ó	"óð
 HNØ7<Ø+0ó-ð^ ):Ø%(§^¡^ôr   rR   z#this test is known to fail on Py2.6c                 ó<   — t         s| S t        j                  | «      S r=   )r   ÚunittestÚexpectedFailure©Úfuncs    r   ÚexpectedFailurePY3r±     ó   € ÝØˆÜ×#Ñ# DÓ)Ð)r   c                 ó<   — t         s| S t        j                  | «      S r=   )r   r­   r®   r¯   s    r   ÚexpectedFailurePY26r´   „  ó   € ÝØˆÜ×#Ñ# DÓ)Ð)r   c                 ó<   — t         s| S t        j                  | «      S r=   )r
   r­   r®   r¯   s    r   ÚexpectedFailurePY27r·   Š  rµ   r   c                 ó<   — t         s| S t        j                  | «      S r=   )r	   r­   r®   r¯   s    r   ÚexpectedFailurePY2r¹   �  r²   r   ÚassertRaisesRegexc                 óä   — t        |t        t        f«      r|sJ d«       ‚t        j                  |«      }|j                  |«      s+|xs d}|›d|j                  ›d|›�}| j                  |«      ‚y)z=Fail the test unless the text matches the regular expression.z!expected_regex must not be empty.zRegex didn't matchz: z not found in N)rw   ÚstrÚunicodeÚreÚcompileÚsearchÚpatternÚfailureException)rB   ÚtextÚexpected_regexr>   s       r   ÚassertRegexrÅ   ›  sm   € ä�.¤3¬ .Ô1ÙÐBÐBÓBˆ~ÜŸ™ NÓ3ˆØ× Ñ  Ô&ØÒ)Ð)ˆÚ*-¨~×/EÓ/EÁtÐLˆØ×#Ñ# CÓ(Ð(ð 'r   rÅ   c                   ó$   — e Zd Z	 	 dd„Zd„ Zd„ Zy)Ú_AssertRaisesBaseContextNc                 ó  — || _         || _        |�	 |j                  | _        nd | _        t        |t        t
        f«      rt        j                  |«      }|| _
        d | _        y # t        $ r t        |«      | _        Y ŒUw xY wr=   )r|   Ú	test_caserF   Úobj_nameÚAttributeErrorr¼   rw   rx   r¾   r¿   rÄ   r>   )rB   r|   rÉ   Úcallable_objrÄ   s        r   rC   z!_AssertRaisesBaseContext.__init__ª  sy   € à ˆŒØ"ˆŒØÐ#ð2Ø ,× 5Ñ 5�•ð !ˆDŒMÜ�n¤u¬c lÔ3ÜŸZ™Z¨Ó7ˆNØ,ˆÔØˆ�øô "ò 2Ü # LÓ 1�–ð2ús   ’A% Á%BÂ Bc                 ó„   — | j                   j                  | j                  |«      }| j                   j                  |«      ‚r=   )rÉ   Ú_formatMessager>   rÂ   )rB   ÚstandardMsgr>   s      r   Ú_raiseFailurez&_AssertRaisesBaseContext._raiseFailureº  s1   € Ø�n‰n×+Ñ+¨D¯H©H°kÓBˆØ�n‰n×-Ñ-¨cÓ2Ð2r   c                 óx   — |€|j                  dd«      | _        | S | 5   ||i |¤Ž ddd«       y# 1 sw Y   yxY w)zÛ
        If callable_obj is None, assertRaises/Warns is being used as a
        context manager, so check for a 'msg' kwarg and return self.
        If callable_obj is not None, call it passing args and kwargs.
        Nr>   )Úpopr>   )rB   ÚnamerÌ   Úargsrˆ   s        r   Úhandlez_AssertRaisesBaseContext.handle¾  sF   € ð ÐØ—z‘z %¨Ó.ˆDŒHØˆKØñ 	*Ù˜$Ð) &Ò)÷	*÷ 	*ñ 	*ús   ž	0°9)NN)rF   rG   rH   rC   rÐ   rÕ   rJ   r   r   rÇ   rÇ   ¨  s   „ à9=Ø $óò 3ó
*r   rÇ   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú_AssertWarnsContextzBA context manager used to implement TestCase.assertWarns* methods.c                 ó*  — t         j                  j                  «       D ]  }t        |dd «      sŒi |_        Œ t        j                  d¬«      | _        | j                  j                  «       | _        t        j                  d| j                  «       | S )NÚ__warningregistry__T)ÚrecordÚalways)rW   ÚmodulesÚvaluesÚgetattrrÙ   ÚwarningsÚcatch_warningsÚwarnings_managerÚ	__enter__Úsimplefilterr|   )rB   Úvs     r   râ   z_AssertWarnsContext.__enter__Í  sy   € ô —‘×#Ñ#Ó%ò 	+ˆAÜ�qÐ/°Õ6Ø(*�Õ%ð	+ô !)× 7Ñ 7¸tÔ DˆÔØ×-Ñ-×7Ñ7Ó9ˆŒÜ×Ñ˜h¨¯©Ô6Øˆr   c                 ó  — | j                   j                  |||«       |�y 	 | j                  j                  }d }| j                  D ]„  }|j                  }t        || j                  «      sŒ&|€|}| j                  �%| j                  j                  t        |«      «      sŒ[|| _        |j                  | _        |j                  | _         y  |�>| j                  dj                  | j                  j                   t        |«      «      «       | j"                  r,| j                  dj                  || j"                  «      «       y | j                  dj                  |«      «       y # t        $ r t        | j                  «      }Y �ŒOw xY w)Nz"{}" does not match "{}"z{} not triggered by {}z{} not triggered)rá   Ú__exit__r|   rF   rË   r¼   rß   Úmessagerw   rÄ   rÀ   Úwarningr’   ÚlinenorÐ   ÚformatrÁ   rÊ   )rB   Úexc_typeÚ	exc_valueÚtbÚexc_nameÚfirst_matchingÚmÚws           r   ræ   z_AssertWarnsContext.__exit__Ø  sb  € Ø×Ñ×&Ñ& x°¸BÔ?ØÐàð	*Ø—}‘}×-Ñ-ˆHð ˆØ—‘ò 	ˆAØ—	‘	ˆAÜ˜a §¡Ô/ØØÐ%Ø!"�Ø×#Ñ#Ð/Ø×'Ñ'×.Ñ.¬s°1«vÔ6ØàˆDŒLØŸJ™JˆDŒMØŸ(™(ˆDŒKÙð	ð Ð%Ø×ÑÐ9×@Ñ@Ø×(Ñ(×0Ñ0´#°nÓ2Eó Gô Hà�=Š=Ø×ÑÐ7×>Ñ>¸xØ?C¿}¹}ó Nõ Oð ×ÑÐ1×8Ñ8¸ÓBÕCøô3 ò 	*Ü˜4Ÿ=™=Ó)‹Hð	*ús   ¢E& Å&FÆFN)rF   rG   rH   rI   râ   ræ   rJ   r   r   r×   r×   Ê  s   „ ÙLò	ó Dr   r×   c                 óD   — t        || |«      }|j                  d|||«      S )a•  Fail unless a warning of class warnClass is triggered
       by callable_obj when invoked with arguments args and keyword
       arguments kwargs.  If a different type of warning is
       triggered, it will not be handled: depending on the other
       warning filtering rules in effect, it might be silenced, printed
       out, or raised as an exception.

       If called with callable_obj omitted or None, will return a
       context object used like this::

            with self.assertWarns(SomeWarning):
                do_something()

       An optional keyword argument 'msg' can be provided when assertWarns
       is used as a context object.

       The context manager keeps a reference to the first matching
       warning as the 'warning' attribute; similarly, the 'filename'
       and 'lineno' attributes give you information about the line
       of Python code from which the warning was triggered.
       This allows you to inspect the warning after the assertion::

           with self.assertWarns(SomeWarning) as cm:
               do_something()
           the_warning = cm.warning
           self.assertEqual(the_warning.some_attribute, 147)
    ÚassertWarns)r×   rÕ   )rB   Úexpected_warningrÌ   rÔ   rˆ   Úcontexts         r   ró   ró   û  s(   € ô8 "Ð"2°D¸,ÓG€GØ�>‰>˜-¨°t¸VÓDÐDr   ró   r=   ),Ú
__future__r   r   r\   rZ   r­   rW   r¾   rß   r�   Útextwrapr   Úfuture.utilsr   r   r   r	   r
   Úfuture.moves.subprocessr   r   r   Ú	unittest2r   r9   r;   rL   rP   ÚTestCaserR   ÚskipIfÚskip26r±   r´   r·   r¹   r£   ÚassertRaisesRegexprº   rÅ   ÚobjectrÇ   r×   ró   rJ   r   r   ú<module>r      sF  ðß 6Û 	Û Û Û 
Û 	Û Û 	Ý ç :Õ :ß LÑ LáÛ òò= ô@FÐ 2ô Fô	Ð-ô 	ô	Ð/ô 	ôG�(×#Ñ#ô GðV 
ˆ�‰˜ÐDÓ	E€ò*ò
*ò*ò*ñ ˆx× Ñ Ð"5Ô6Ø*2×*;Ñ*;×*NÑ*N€H×ÑÔ'ó)ñ ˆx× Ñ  -Ô0Ù�×!Ñ! =°+Ô>ô *˜vô  *ôD.DÐ2ô .DóbEñ> ˆx× Ñ  -Ô0Ù�×!Ñ! =°+Õ>ð 1r   