Ë
    ì—0jõk  ã                   ó"  — d 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 ddl	m
Z
mZ g d¢Z G d„ dej                  «      Z G d	„ d
ej                  «      Z G d„ de«      Z G d„ de«      Z G d„ d«      Z G d„ deee«      Z G d„ deee«      Zd„ Zd„ Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d e«      Z G d!„ d"e«      Z G d#„ d$«      Z G d%„ d&ee«      Z G d'„ d(ee«      Z  G d)„ d*ee«      Z! G d+„ d,e«      Z"y)-z4Utilities for with-statement contexts.  See PEP 343.é    N)Údeque©Úwraps)Ú
MethodTypeÚGenericAlias)ÚasynccontextmanagerÚcontextmanagerÚclosingÚnullcontextÚAbstractContextManagerÚAbstractAsyncContextManagerÚAsyncExitStackÚContextDecoratorÚ	ExitStackÚredirect_stdoutÚredirect_stderrÚsuppressÚaclosingÚchdirc                   óZ   — e Zd ZdZ ee«      Zd„ Zej                  d„ «       Z
ed„ «       Zy)r   z,An abstract base class for context managers.c                 ó   — | S ©z0Return `self` upon entering the runtime context.© ©Úselfs    ú'/usr/local/lib/python3.12/contextlib.pyÚ	__enter__z AbstractContextManager.__enter__   s   € àˆó    c                  ó   — y©z9Raise any exception triggered within the runtime context.Nr   ©r   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__zAbstractContextManager.__exit__   s   € ð r   c                 óL   — | t         u rt        j                  |dd«      S t        S )Nr   r%   )r   Ú_collections_abcÚ_check_methodsÚNotImplemented©ÚclsÚCs     r   Ú__subclasshook__z'AbstractContextManager.__subclasshook__    s&   € àÔ(Ñ(Ü#×2Ñ2°1°kÀ:ÓNÐNÜÐr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   Ú__class_getitem__r   ÚabcÚabstractmethodr%   r-   r   r   r   r   r      sC   „ á6á# LÓ1Ðòð 	×Ññó ðð ñó ñr   r   c                   óZ   — e Zd ZdZ ee«      Zd„ Zej                  d„ «       Z
ed„ «       Zy)r   z9An abstract base class for asynchronous context managers.c              ƒ   ó   K  — | S ­wr   r   r   s    r   Ú
__aenter__z&AbstractAsyncContextManager.__aenter__-   s   è ø€ àˆùó   ‚c              ƒ   ó   K  — y­wr    r   r!   s       r   Ú	__aexit__z%AbstractAsyncContextManager.__aexit__1   s   è ø€ ð ùó   ‚c                 óL   — | t         u rt        j                  |dd«      S t        S )Nr8   r;   )r   r'   r(   r)   r*   s     r   r-   z,AbstractAsyncContextManager.__subclasshook__6   s-   € àÔ-Ñ-Ü#×2Ñ2°1°lØ3>ó@ð @äÐr   N)r.   r/   r0   r1   r2   r   r3   r8   r4   r5   r;   r-   r   r   r   r   r   '   sC   „ áCá# LÓ1Ðòð 	×Ññó ðð ñó ñr   r   c                   ó   — e Zd ZdZd„ Zd„ Zy)r   zJA base class or mixin that enables context managers to work as decorators.c                 ó   — | S )a6  Return a recreated instance of self.

        Allows an otherwise one-shot context manager like
        _GeneratorContextManager to support use as
        a decorator via implicit recreation.

        This is a private interface just for _GeneratorContextManager.
        See issue #11647 for details.
        r   r   s    r   Ú_recreate_cmzContextDecorator._recreate_cmA   s	   € ð ˆr   c                 ó2   ‡ ‡— t        ‰«      ˆˆ fd„«       }|S )Nc                  ó`   •— ‰j                  «       5   ‰| i |¤Žcd d d «       S # 1 sw Y   y xY w©N©r@   ©ÚargsÚkwdsÚfuncr   s     €€r   Úinnerz(ContextDecorator.__call__.<locals>.innerN   s(   ø€ à×"Ñ"Õ$Ù˜TÐ* TÑ*÷ %×$Ò$ús   ’$¤-r   ©r   rH   rI   s   `` r   Ú__call__zContextDecorator.__call__M   s    ù€ Ü	ˆt‹ô	+ó 
ð	+ð ˆr   N©r.   r/   r0   r1   r@   rK   r   r   r   r   r   >   s   „ ÙPò
ór   r   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚAsyncContextDecoratorzPA base class or mixin that enables async context managers to work as decorators.c                 ó   — | S )z-Return a recreated instance of self.
        r   r   s    r   r@   z"AsyncContextDecorator._recreate_cmX   s	   € ð ˆr   c                 ó2   ‡ ‡— t        ‰«      ˆˆ fd„«       }|S )Nc               Ÿ   ó¶   •K  — ‰j                  «       4 ƒd {  –—†   ‰| i |¤Žƒ d {  –—† cd d d «      ƒd {  –—†  S 7 Œ%7 Œ7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w­wrC   rD   rE   s     €€r   rI   z-AsyncContextDecorator.__call__.<locals>.inner^   sE   øè ø€ à×(Ñ(×*Õ*Ù! 4Ð0¨4Ñ0×0÷ +×*Ò*øØ0øð +ø×*×*Ñ*üsP   ƒA˜>™AœA¨A ©A¬A¸A¹AÁ AÁAÁAÁ
AÁAÁAr   rJ   s   `` r   rK   zAsyncContextDecorator.__call__]   s    ù€ Ü	ˆt‹ô	1ó 
ð	1ð ˆr   NrL   r   r   r   rN   rN   U   s   „ ÙVòó
r   rN   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú_GeneratorContextManagerBasezBShared functionality for @contextmanager and @asynccontextmanager.c                 ó    —  ||i |¤Ž| _         |||c| _        | _        | _        t	        |dd «      }|€t        | «      j                  }|| _        y )Nr1   )ÚgenrH   rF   rG   ÚgetattrÚtyper1   )r   rH   rF   rG   Údocs        r   Ú__init__z%_GeneratorContextManagerBase.__init__h   sR   € Ù˜Ð& Ñ&ˆŒØ*.°°dÐ'ˆŒ	�4”9˜dœiä�d˜I tÓ,ˆØˆ;Ü�t“*×$Ñ$ˆCØˆ�r   c                 ód   — | j                  | j                  | j                  | j                  «      S rC   )Ú	__class__rH   rF   rG   r   s    r   r@   z)_GeneratorContextManagerBase._recreate_cmv   s#   € ð �~‰~˜dŸi™i¨¯©°D·I±IÓ>Ð>r   N)r.   r/   r0   r1   rY   r@   r   r   r   rS   rS   e   s   „ ÙLòó?r   rS   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú_GeneratorContextManagerz%Helper for @contextmanager decorator.c                 ól   — | ` | `| `	 t        | j                  «      S # t
        $ r t        d«      d ‚w xY w©Nzgenerator didn't yield)rF   rG   rH   ÚnextrU   ÚStopIterationÚRuntimeErrorr   s    r   r   z"_GeneratorContextManager.__enter__„   sD   € ð ˆI�t�y $ )ð	CÜ˜Ÿ™“>Ð!øÜò 	CÜÐ7Ó8¸dÐBð	Cús   ˆ �3c                 óB  — |€"	 t        | j                  «       	 t        d«      ‚|€ |«       }	 | j                  j                  |«       	 t        d«      ‚# | j                  j                  «        w xY w# t        $ r Y yw xY w# t        $ r}||ucY d }~S d }~wt        $ r@}||u r||_        Y d }~yt        |t        «      r|j                  |u r||_        Y d }~y‚ d }~wt        $ r}||ur‚ ||_        Y d }~yd }~ww xY w# | j                  j                  «        w xY w)Núgenerator didn't stopFz#generator didn't stop after throw())
r`   rU   rb   Úclosera   ÚthrowÚ__traceback__Ú
isinstanceÚ	__cause__ÚBaseException©r   ÚtypÚvaluer$   Úexcs        r   r%   z!_GeneratorContextManager.__exit__�   s  € Øˆ;ð%Ü�T—X‘X”ð%Ü&Ð'>Ó?Ð?ð ˆ}ñ ›�ð#Ø—‘—‘˜uÔ%ðF!Ü"Ð#HÓIÐIøðW —H‘H—N‘NÕ$ûô !ò Ùðûô !ò (ð  %Ð'Õ'ûÜò à˜%‘<Ø(1�CÔ%Ü ô ˜u¤mÔ4ØŸ™¨Ñ.à*3�EÔ'Ü ØûÜ ò 
ð ˜eÑ#ØØ$-�Ô!Üûð
ûð —‘—‘Õ úsi   „A5 šA ¯B ÁD ÁA2Á5	BÂ BÂ	C?ÂBÂC?ÂC?Â"CÂ2%CÃCÃC?Ã)C:Ã:C?ÄDN)r.   r/   r0   r1   r   r%   r   r   r   r]   r]   }   s   „ ñ
 0òCó7!r   r]   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú_AsyncGeneratorContextManagerz*Helper for @asynccontextmanager decorator.c              ƒ   óˆ   K  — | ` | `| `	 t        | j                  «      ƒ d {  –—† S 7 Œ# t
        $ r t        d«      d ‚w xY w­wr_   )rF   rG   rH   ÚanextrU   ÚStopAsyncIterationrb   r   s    r   r8   z(_AsyncGeneratorContextManager.__aenter__Í   sM   è ø€ ð ˆI�t�y $ )ð	CÜ˜tŸx™x›×(Ð(Ð(ùÜ!ò 	CÜÐ7Ó8¸dÐBð	Cüs#   ‚AŠ) ¢'£) ¦A§) ©?¿Ac              ƒ   ó¢  K  — |€*	 t        | j                  «      ƒ d {  –—†  	 t        d«      ‚|€ |«       }	 | j                  j                  |«      ƒ d {  –—†  	 t        d«      ‚7 ŒI# | j                  j                  «       ƒ d {  –—†7   w xY w# t        $ r Y yw xY w7 ŒI# t        $ r}||ucY d }~S d }~wt        $ rF}||u r||_        Y d }~yt        |t        t        f«      r|j                  |u r||_        Y d }~y‚ d }~wt        $ r}||ur‚ ||_        Y d }~yd }~ww xY w# | j                  j                  «       ƒ d {  –—†7   w xY w­w)Nrd   Fz$generator didn't stop after athrow())rr   rU   rb   Úaclosers   Úathrowrg   rh   ra   ri   rj   rk   s        r   r;   z'_AsyncGeneratorContextManager.__aexit__Ö   s@  è ø€ Øˆ;ð,Ü˜DŸH™H“o×%Ð%ð,Ü&Ð'>Ó?Ð?ð ˆ}ñ ›�ð#Ø—h‘h—o‘o eÓ,×,Ð,ðF(Ü"Ð#IÓJÐJðe &ùð Ÿ(™(Ÿ/™/Ó+×+Ò+ûô &ò Ùðúð -ùÜ%ò (ð  %Ð'Õ'ûÜò à˜%‘<Ø(1�CÔ%Ü ô ˜u¤}Ô6HÐ&IÔJØŸ™¨Ñ.à*3�EÔ'Ü ØûÜ ò 
ð ˜eÑ#ØØ$-�Ô!Üûð
ûð —h‘h—o‘oÓ'×'Ò'üsã   ‚E†B žA(ŸB ¤A* ¯	E¹B# ÁB!ÁB# ÁD' Á(B Á*BÂBÂ	BÂEÂ	BÂEÂBÂEÂ!B# Â#	D$Â,B5Â/D$Â0EÂ5D$ÃDÃEÃ+DÃ<EÄDÄD$ÄDÄEÄD$Ä$EÄ'EÅEÅEÅEN)r.   r/   r0   r1   r8   r;   r   r   r   rp   rp   Æ   s   „ ñ
 5òCó7(r   rp   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )aÛ  @contextmanager decorator.

    Typical usage:

        @contextmanager
        def some_generator(<arguments>):
            <setup>
            try:
                yield <value>
            finally:
                <cleanup>

    This makes this:

        with some_generator(<arguments>) as <variable>:
            <body>

    equivalent to this:

        <setup>
        try:
            <variable> = <value>
            <body>
        finally:
            <cleanup>
    c                  ó   •— t        ‰| |«      S rC   )r]   ©rF   rG   rH   s     €r   Úhelperzcontextmanager.<locals>.helper+  s   ø€ ä'¨¨d°DÓ9Ð9r   r   ©rH   rz   s   ` r   r	   r	     s    ø€ ô6 ˆ4ƒ[ó:ó ð:à€Mr   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )aý  @asynccontextmanager decorator.

    Typical usage:

        @asynccontextmanager
        async def some_async_generator(<arguments>):
            <setup>
            try:
                yield <value>
            finally:
                <cleanup>

    This makes this:

        async with some_async_generator(<arguments>) as <variable>:
            <body>

    equivalent to this:

        <setup>
        try:
            <variable> = <value>
            <body>
        finally:
            <cleanup>
    c                  ó   •— t        ‰| |«      S rC   )rp   ry   s     €r   rz   z#asynccontextmanager.<locals>.helperL  s   ø€ ä,¨T°4¸Ó>Ð>r   r   r{   s   ` r   r   r   1  s    ø€ ô6 ˆ4ƒ[ó?ó ð?à€Mr   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r
   a2  Context to automatically close something at the end of a block.

    Code like this:

        with closing(<module>.open(<arguments>)) as f:
            <block>

    is equivalent to this:

        f = <module>.open(<arguments>)
        try:
            <block>
        finally:
            f.close()

    c                 ó   — || _         y rC   ©Úthing©r   r�   s     r   rY   zclosing.__init__c  ó	   € Øˆ�
r   c                 ó   — | j                   S rC   r€   r   s    r   r   zclosing.__enter__e  s   € Ø�z‰zÐr   c                 ó8   — | j                   j                  «        y rC   )r�   re   ©r   Úexc_infos     r   r%   zclosing.__exit__g  s   € Ø�
‰
×ÑÕr   N©r.   r/   r0   r1   rY   r   r%   r   r   r   r
   r
   R  s   „ ñò òór   r
   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r   až  Async context manager for safely finalizing an asynchronously cleaned-up
    resource such as an async generator, calling its ``aclose()`` method.

    Code like this:

        async with aclosing(<module>.fetch(<arguments>)) as agen:
            <block>

    is equivalent to this:

        agen = <module>.fetch(<arguments>)
        try:
            <block>
        finally:
            await agen.aclose()

    c                 ó   — || _         y rC   r€   r‚   s     r   rY   zaclosing.__init__}  rƒ   r   c              ƒ   ó"   K  — | j                   S ­wrC   r€   r   s    r   r8   zaclosing.__aenter__  s   è ø€ Ø�z‰zÐùó   ‚c              ‡   óT   K  — | j                   j                  «       ƒ d {  –—†  y 7 Œ­wrC   )r�   ru   r†   s     r   r;   zaclosing.__aexit__�  s   è ø€ Ø�j‰j×ÑÓ!×!Ò!ús   ‚( &¡(N)r.   r/   r0   r1   rY   r8   r;   r   r   r   r   r   k  s   „ ñò"òó"r   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú_RedirectStreamNc                 ó    — || _         g | _        y rC   )Ú_new_targetÚ_old_targets)r   Ú
new_targets     r   rY   z_RedirectStream.__init__‰  s   € Ø%ˆÔàˆÕr   c                 óÊ   — | j                   j                  t        t        | j                  «      «       t        t        | j                  | j                  «       | j                  S rC   )r’   ÚappendrV   ÚsysÚ_streamÚsetattrr‘   r   s    r   r   z_RedirectStream.__enter__Ž  sC   € Ø×Ñ× Ñ ¤¬¨d¯l©lÓ!;Ô<Ü”�T—\‘\ 4×#3Ñ#3Ô4Ø×ÑÐr   c                 ój   — t        t        | j                  | j                  j	                  «       «       y rC   )r˜   r–   r—   r’   Úpop)r   ÚexctypeÚexcinstÚexctbs       r   r%   z_RedirectStream.__exit__“  s!   € Ü”�T—\‘\ 4×#4Ñ#4×#8Ñ#8Ó#:Õ;r   )r.   r/   r0   r—   rY   r   r%   r   r   r   r�   r�   …  s   „ à€Gòò
 ó
<r   r�   c                   ó   — e Zd ZdZdZy)r   aA  Context manager for temporarily redirecting stdout to another file.

        # How to send help() to stderr
        with redirect_stdout(sys.stderr):
            help(dir)

        # How to write help() to a file
        with open('help.txt', 'w') as f:
            with redirect_stdout(f):
                help(pow)
    ÚstdoutN©r.   r/   r0   r1   r—   r   r   r   r   r   —  s   „ ñ
ð �Gr   r   c                   ó   — e Zd ZdZdZy)r   zCContext manager for temporarily redirecting stderr to another file.ÚstderrNr    r   r   r   r   r   §  s
   „ ÙMà�Gr   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r   a?  Context manager to suppress specified exceptions

    After the exception is suppressed, execution proceeds with the next
    statement following the with statement.

         with suppress(FileNotFoundError):
             os.remove(somefile)
         # Execution still resumes here if the file was already removed
    c                 ó   — || _         y rC   )Ú_exceptions)r   Ú
exceptionss     r   rY   zsuppress.__init__¸  s
   € Ø%ˆÕr   c                  ó   — y rC   r   r   s    r   r   zsuppress.__enter__»  ó   € Ør   c                 óž   — |€y t        || j                  «      ryt        |t        «      r#|j                  | j                  «      \  }}|€y|‚y)NTF)Ú
issubclassr¥   ÚBaseExceptionGroupÚsplit)r   r›   rœ   r�   ÚmatchÚrests         r   r%   zsuppress.__exit__¾  sR   € ð ˆ?ØÜ�g˜t×/Ñ/Ô0ØÜ�gÔ1Ô2Ø!Ÿ-™-¨×(8Ñ(8Ó9‰KˆE�4Øˆ|ØØˆJØr   Nrˆ   r   r   r   r   r   ­  s   „ ñò&òór   r   c                   ó\   — e Zd ZdZed„ «       Zed„ «       Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zdd
„Zy)Ú_BaseExitStackz.A base class for ExitStack and AsyncExitStack.c                 ó   — t        || «      S rC   ©r   ©ÚcmÚcm_exits     r   Ú_create_exit_wrapperz#_BaseExitStack._create_exit_wrapper×  ó   € ä˜' 2Ó&Ð&r   c                ó   ‡ ‡‡— ˆˆ ˆfd„}|S )Nc                 ó   •—  ‰‰i ‰¤Ž y rC   r   ©r"   rn   ÚtbrF   ÚcallbackrG   s      €€€r   Ú_exit_wrapperz8_BaseExitStack._create_cb_wrapper.<locals>._exit_wrapperÝ  s   ø€ Ù�dÐ#˜dÓ#r   r   ©r¼   rF   rG   r½   s   ``` r   Ú_create_cb_wrapperz!_BaseExitStack._create_cb_wrapperÛ  s   ú€ ö	$àÐr   c                 ó"   — t        «       | _        y rC   )r   Ú_exit_callbacksr   s    r   rY   z_BaseExitStack.__init__á  s   € Ü$›wˆÕr   c                 óf   —  t        | «      «       }| j                  |_        t        «       | _        |S )z@Preserve the context stack by transferring it to a new instance.)rW   rÁ   r   )r   Ú	new_stacks     r   Úpop_allz_BaseExitStack.pop_allä  s-   € à”D˜“J“Lˆ	Ø$(×$8Ñ$8ˆ	Ô!Ü$›wˆÔØÐr   c                 óœ   — t        |«      }	 |j                  }| j                  ||«       |S # t        $ r | j	                  |«       Y |S w xY w)a  Registers a callback with the standard __exit__ method signature.

        Can suppress exceptions the same way __exit__ method can.
        Also accepts any object with an __exit__ method (registering a call
        to the method instead of the object itself).
        )rW   r%   Ú_push_cm_exitÚAttributeErrorÚ_push_exit_callback©r   ÚexitÚ_cb_typeÚexit_methods       r   Úpushz_BaseExitStack.pushë  sZ   € ô ˜“:ˆð	2Ø"×+Ñ+ˆKð
 ×Ñ˜t [Ô1Øˆøô ò 	+à×$Ñ$ TÕ*ð ˆð	+ús   �- ­AÁ
Ac                 óê   — t        |«      }	 |j                  }|j                  } ||«      }| j                  ||«       |S # t        $ r( t	        d|j
                  › d|j                  › d�«      d‚w xY w)z«Enters the supplied context manager.

        If successful, also pushes its __exit__ method as a callback and
        returns the result of the __enter__ method.
        Ú'Ú.z6' object does not support the context manager protocolN)rW   r   r%   rÇ   Ú	TypeErrorr/   r0   rÆ   ©r   r´   r+   Ú_enterÚ_exitÚresults         r   Úenter_contextz_BaseExitStack.enter_contextÿ  s�   € ô �2‹hˆð	SØ—]‘]ˆFØ—L‘LˆEñ ˜“ˆØ×Ñ˜2˜uÔ%Øˆøô ò 	SÜ˜a §¡Ð/¨q°×1AÑ1AÐ0Bð CGð Hó IØNRðSð	Sús   �A Á1A2c                ób   —  | j                   |g|¢­i |¤Ž}||_        | j                  |«       |S )z\Registers an arbitrary callback and arguments.

        Cannot suppress exceptions.
        )r¿   Ú__wrapped__rÈ   ©r   r¼   rF   rG   r½   s        r   r¼   z_BaseExitStack.callback  s=   € ð
 0˜×/Ñ/°ÐH¸4ÒHÀ4ÑHˆð %-ˆÔ!Ø× Ñ  Ô/Øˆr   c                 óL   — | j                  ||«      }| j                  |d«       y)z;Helper to correctly register callbacks to __exit__ methods.TN)r¶   rÈ   ©r   r´   rµ   r½   s       r   rÆ   z_BaseExitStack._push_cm_exit  s$   € à×1Ñ1°"°gÓ>ˆØ× Ñ  °Õ5r   c                 ó>   — | j                   j                  ||f«       y rC   )rÁ   r•   )r   r¼   Úis_syncs      r   rÈ   z"_BaseExitStack._push_exit_callback$  s   € Ø×Ñ×#Ñ# W¨hÐ$7Õ8r   N)T)r.   r/   r0   r1   Ústaticmethodr¶   r¿   rY   rÄ   rÍ   rÖ   r¼   rÆ   rÈ   r   r   r   r°   r°   Ô  sN   „ Ù8àñ'ó ð'ð ñó ðò
'òòò(ò&ò6ô
9r   r°   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r   a‹  Context manager for dynamic management of a stack of exit callbacks.

    For example:
        with ExitStack() as stack:
            files = [stack.enter_context(open(fname)) for fname in filenames]
            # All opened files will automatically be closed at the end of
            # the with statement, even if attempts to open files later
            # in the list raise an exception.
    c                 ó   — | S rC   r   r   s    r   r   zExitStack.__enter__4  s   € Øˆr   c                 ó¤  ‡
— |d   d u}t        j                  «       d   Š
ˆ
fd„}d}d}| j                  r:| j                  j                  «       \  }}|sJ ‚	  ||Ž rd}d}d}| j                  rŒ:|r	 |d   j                  }	|d   ‚|xr |S #  t        j                  «       } ||d   |d   «       d}|}Y ŒUxY w# t
        $ r 	|d   _        ‚ w xY w)Nr   é   c                 óL   •— 	 | j                   }|�||u ry |‰u r		 || _         y |} Œ#rC   ©Ú__context__©Únew_excÚold_excÚexc_contextÚ	frame_excs      €r   Ú_fix_exception_contextz2ExitStack.__exit__.<locals>._fix_exception_context=  óB   ø€ àØ%×1Ñ1�ØÐ&¨+¸Ñ*@àØ )Ñ+Øð #*ˆGÕð &�ð r   FT©NNN©r–   r‡   rÁ   rš   rå   rj   )r   Úexc_detailsÚreceived_excrë   Úsuppressed_excÚpending_raiserÝ   ÚcbÚnew_exc_detailsÚ	fixed_ctxrê   s             @r   r%   zExitStack.__exit__7  s  ø€ Ø" 1‘~¨TÐ1ˆô —L‘L“N 1Ñ%ˆ	ô	*ð  ˆØˆØ×"Ò"Ø×.Ñ.×2Ñ2Ó4‰KˆG�RÙˆN�7ð
.Ù�{Ñ#Ø%)�NØ$)�MØ"4�Kð ×"Ó"ñ ðð (¨™N×6Ñ6�	Ø! !‘nÐ$ð Ò. Ð.øð.Ü"%§,¡,£.�á& °qÑ'9¸;Àq¹>ÔJØ $�Ø-’ûô !ò Ø-6�˜A‘Ô*Øðús   ÁB Á2B: Â)B7Â:Cc                 ó*   — | j                  ddd«       y©z%Immediately unwind the context stack.N)r%   r   s    r   re   zExitStack.closeh  s   € à�‰�d˜D $Õ'r   N)r.   r/   r0   r1   r   r%   re   r   r   r   r   r   )  s   „ ñòò//ób(r   r   c                   óZ   — e Zd ZdZed„ «       Zed„ «       Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zy)r   a×  Async context manager for dynamic management of a stack of exit
    callbacks.

    For example:
        async with AsyncExitStack() as stack:
            connections = [await stack.enter_async_context(get_connection())
                for i in range(5)]
            # All opened connections will automatically be released at the
            # end of the async with statement, even if attempts to open a
            # connection later in the list raise an exception.
    c                 ó   — t        || «      S rC   r²   r³   s     r   Ú_create_async_exit_wrapperz)AsyncExitStack._create_async_exit_wrapper{  r·   r   c                ó   ‡ ‡‡— ˆˆ ˆfd„}|S )Nc              “   ó2   •K  —  ‰‰i ‰¤Žƒ d {  –—†  y 7 Œ­wrC   r   rº   s      €€€r   r½   z>AsyncExitStack._create_async_cb_wrapper.<locals>._exit_wrapper�  s   øè ø€ Ù˜DÐ) DÑ)×)Ò)ús   ƒ��r   r¾   s   ``` r   Ú_create_async_cb_wrapperz'AsyncExitStack._create_async_cb_wrapper  s   ú€ ö	*àÐr   c              ƒ   ó  K  — t        |«      }	 |j                  }|j                  } ||«      ƒ d{  –—† }| j                  ||«       |S # t        $ r( t	        d|j
                  › d|j                  › d�«      d‚w xY w7 ŒL­w)z³Enters the supplied async context manager.

        If successful, also pushes its __aexit__ method as a callback and
        returns the result of the __aenter__ method.
        rÏ   rÐ   zC' object does not support the asynchronous context manager protocolN)rW   r8   r;   rÇ   rÑ   r/   r0   Ú_push_async_cm_exitrÒ   s         r   Úenter_async_contextz"AsyncExitStack.enter_async_context…  s–   è ø€ ô �2‹hˆð	'Ø—^‘^ˆFØ—M‘MˆEñ
 ˜b“z×!ˆØ× Ñ   UÔ+Øˆøô ò 	'Ü˜a §¡Ð/¨q°×1AÑ1AÐ0Bð CTð Uó à"&ð'ð	'úð "ús%   ‚B�A §B²A?³BÁ1A<Á<Bc                 óž   — t        |«      }	 |j                  }| j                  ||«       |S # t        $ r | j	                  |d«       Y |S w xY w)a#  Registers a coroutine function with the standard __aexit__ method
        signature.

        Can suppress exceptions the same way __aexit__ method can.
        Also accepts any object with an __aexit__ method (registering a call
        to the method instead of the object itself).
        F)rW   r;   rÿ   rÇ   rÈ   rÉ   s       r   Úpush_async_exitzAsyncExitStack.push_async_exit—  s\   € ô ˜“:ˆð	8Ø"×,Ñ,ˆKð
 ×$Ñ$ T¨;Ô7Øˆøô ò 	2à×$Ñ$ T¨5Õ1ð ˆð	2ús   �- ­AÁAc                ód   —  | j                   |g|¢­i |¤Ž}||_        | j                  |d«       |S )zfRegisters an arbitrary coroutine function and arguments.

        Cannot suppress exceptions.
        F)rý   rØ   rÈ   rÙ   s        r   Úpush_async_callbackz"AsyncExitStack.push_async_callback©  s?   € ð
 6˜×5Ñ5°hÐNÀÒNÈÑNˆð %-ˆÔ!Ø× Ñ  °Ô6Øˆr   c              ƒ   óF   K  — | j                  ddd«      ƒ d{  –—†  y7 Œ­wr÷   )r;   r   s    r   ru   zAsyncExitStack.aclose¶  s   è ø€ à�n‰n˜T 4¨Ó.×.Ò.ús   ‚!™š!c                 óL   — | j                  ||«      }| j                  |d«       y)zLHelper to correctly register coroutine function to __aexit__
        method.FN)rú   rÈ   rÛ   s       r   rÿ   z"AsyncExitStack._push_async_cm_exitº  s&   € ð ×7Ñ7¸¸GÓDˆØ× Ñ  °Õ6r   c              ƒ   ó   K  — | S ­wrC   r   r   s    r   r8   zAsyncExitStack.__aenter__À  s   è ø€ Øˆùr9   c              ‡   óÌ  ‡K  — |d   d u}t        j                  «       d   Šˆfd„}d}d}| j                  rH| j                  j                  «       \  }}	 |r ||Ž }n ||Ž ƒ d {  –—† }|rd}d}d}| j                  rŒH|r	 |d   j                  }
|d   ‚|xr |S 7 Œ6#  t        j                  «       }	 ||	d   |d   «       d}|	}Y ŒWxY w# t
        $ r 
|d   _        ‚ w xY w­w)Nr   râ   c                 óL   •— 	 | j                   }|�||u ry |‰u r		 || _         y |} Œ#rC   rä   ræ   s      €r   rë   z8AsyncExitStack.__aexit__.<locals>._fix_exception_contextÉ  rì   r   FTrí   rî   )r   rï   rð   rë   rñ   rò   rÝ   ró   Úcb_suppressrô   rõ   rê   s              @r   r;   zAsyncExitStack.__aexit__Ã  s  øè ø€ Ø" 1‘~¨TÐ1ˆô —L‘L“N 1Ñ%ˆ	ô	*ð  ˆØˆØ×"Ò"Ø×.Ñ.×2Ñ2Ó4‰KˆG�Rð.ÙÙ"$ kÐ"2‘Ká(*¨KÐ(8×"8�KáØ%)�NØ$)�MØ"4�Kð ×"Ó"ñ$ ðð (¨™N×6Ñ6�	Ø! !‘nÐ$ð Ò. Ð.ð+ #9ùð.Ü"%§,¡,£.�á& °qÑ'9¸;Àq¹>ÔJØ $�Ø-’ûô !ò Ø-6�˜A‘Ô*ØðüsN   ƒAC$ÁB Á%BÁ&B Á2C$Á?C$ÂC ÂC$ÂB Â)C	ÃC$ÃC!Ã!C$N)r.   r/   r0   r1   rÞ   rú   rý   r   r  r  ru   rÿ   r8   r;   r   r   r   r   r   n  sR   „ ñ
ð ñ'ó ð'ð ñó ðò
ò$ò$ò/ò7òó3/r   r   c                   ó0   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zy)	r   aO  Context manager that does no additional processing.

    Used as a stand-in for a normal context manager, when a particular
    block of code is only sometimes used with a normal context manager:

    cm = optional_cm if condition else nullcontext()
    with cm:
        # Perform operation, using optional_cm if condition is True
    Nc                 ó   — || _         y rC   ©Úenter_result)r   r  s     r   rY   znullcontext.__init__  s
   € Ø(ˆÕr   c                 ó   — | j                   S rC   r  r   s    r   r   znullcontext.__enter__  s   € Ø× Ñ Ð r   c                  ó   — y rC   r   ©r   Úexcinfos     r   r%   znullcontext.__exit__
  r¨   r   c              ƒ   ó"   K  — | j                   S ­wrC   r  r   s    r   r8   znullcontext.__aenter__  s   è ø€ Ø× Ñ Ð ùrŒ   c              ‡   ó   K  — y ­wrC   r   r  s     r   r;   znullcontext.__aexit__  s	   è ø€ Øùr<   rC   )	r.   r/   r0   r1   rY   r   r%   r8   r;   r   r   r   r   r   ù  s    „ ñó)ò!òò!ór   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r   zHNon thread-safe context manager to change the current working directory.c                 ó    — || _         g | _        y rC   )ÚpathÚ_old_cwd)r   r  s     r   rY   zchdir.__init__  s   € ØˆŒ	Øˆ�r   c                 óœ   — | j                   j                  t        j                  «       «       t        j                  | j
                  «       y rC   )r  r•   ÚosÚgetcwdr   r  r   s    r   r   zchdir.__enter__  s*   € Ø�‰×ÑœRŸY™Y›[Ô)Ü
�‰�—‘Õr   c                 ó^   — t        j                  | j                  j                  «       «       y rC   )r  r   r  rš   r  s     r   r%   zchdir.__exit__  s   € Ü
�‰�—‘×"Ñ"Ó$Õ%r   Nrˆ   r   r   r   r   r     s   „ ÙRòòó&r   r   )#r1   r4   r  r–   r'   Úcollectionsr   Ú	functoolsr   Útypesr   r   Ú__all__ÚABCr   r   Úobjectr   rN   rS   r]   rp   r	   r   r
   r   r�   r   r   r   r°   r   r   r   r   r   r   r   Ú<module>r#     s9  ðÙ :Û 
Û 	Û 
Û Ý Ý ß *ò€ô˜SŸW™Wô ô, #§'¡'ô ô.�vô ô.˜Fô ÷ ?ñ ?ô0G!Ø ØØôG!ôRG(Ø ØØôG(òTòBôBÐ$ô ô2"Ð*ô "ô4<Ð,ô <ô$�oô ô �oô ô$Ð%ô $÷NQ9ñ Q9ôjA(�Ð 6ô A(ôJH/�^Ð%@ô H/ôVÐ(Ð*Eô ô6&Ð"õ &r   