ó
    F\h™l  ã                   ó"  • S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
Jr  / SQr " S S\R                  5      r " S	 S
\R                  5      r " S S\5      r " S S\5      r " S S5      r " S S\\\5      r " S S\\\5      rS rS r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S \5      r " S! S"\5      r " S# S$5      r " S% S&\\5      r " S' S(\\5      r  " S) S*\\5      r! " S+ S,\5      r"g)-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                   óf   • \ rS rSrSr\" \5      rSrS r	\
R                  S 5       r\S 5       rSrg)r   é   z,An abstract base class for context managers.© c                 ó   • U $ ©z0Return `self` upon entering the runtime context.r   ©Úselfs    Ú!/usr/lib/python3.13/contextlib.pyÚ	__enter__Ú AbstractContextManager.__enter__   s   € àˆó    c                 ó   • g©z9Raise any exception triggered within the runtime context.Nr   ©r   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__ÚAbstractContextManager.__exit__   s   € ð r    c                 óP   • U [         L a  [        R                  " USS5      $ [        $ )Nr   r'   )r   Ú_collections_abcÚ_check_methodsÚNotImplemented©ÚclsÚCs     r   Ú__subclasshook__Ú'AbstractContextManager.__subclasshook__"   s&   € àÔ(Ò(Ü#×2Ò2°1°kÀ:ÓNÐNÜÐr    N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úclassmethodr   Ú__class_getitem__Ú	__slots__r   ÚabcÚabstractmethodr'   r0   Ú__static_attributes__r   r    r   r   r      sH   † á6á# LÓ1Ðà€Iòð 	×Ññó ðð ñó ór    r   c                   óf   • \ rS rSrSr\" \5      rSrS r	\
R                  S 5       r\S 5       rSrg)r   é)   z9An abstract base class for asynchronous context managers.r   c              ƒ   ó   #   • U $ 7fr   r   r   s    r   Ú
__aenter__Ú&AbstractAsyncContextManager.__aenter__1   s
   é € àˆùó   ‚c              ƒ   ó   #   • g7fr"   r   r#   s       r   Ú	__aexit__Ú%AbstractAsyncContextManager.__aexit__5   s
   é € ð ùó   ‚c                 óP   • U [         L a  [        R                  " USS5      $ [        $ )Nr@   rD   )r   r*   r+   r,   r-   s     r   r0   Ú,AbstractAsyncContextManager.__subclasshook__:   s-   € àÔ-Ò-Ü#×2Ò2°1°lØ3>ó@ð @äÐr    N)r2   r3   r4   r5   r6   r7   r   r8   r9   r@   r:   r;   rD   r0   r<   r   r    r   r   r   )   sH   † áCá# LÓ1Ðà€Iòð 	×Ññó ðð ñó ór    r   c                   ó$   • \ rS rSrSrS rS rSrg)r   éB   zJA base class or mixin that enables context managers to work as decorators.c                 ó   • U $ )a  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_cmÚContextDecorator._recreate_cmE   s	   € ð ˆr    c                 ó4   ^ ^• [        T5      UU 4S j5       nU$ )Nc                  ój   >• TR                  5          T" U 0 UD6sS S S 5        $ ! , (       d  f       g = f©N©rL   ©ÚargsÚkwdsÚfuncr   s     €€r   ÚinnerÚ(ContextDecorator.__call__.<locals>.innerR   s(   ø€ à×"Ñ"Õ$Ù˜TÐ* TÑ*÷ %×$×$ús   ’$¤
2r   ©r   rU   rV   s   `` r   Ú__call__ÚContextDecorator.__call__Q   s    ù€ Ü	ˆt‹õ	+ó 
ð	+ð ˆr    r   N©r2   r3   r4   r5   r6   rL   rY   r<   r   r    r   r   r   B   s   † ÙPò
õr    r   c                   ó$   • \ rS rSrSrS rS rSrg)ÚAsyncContextDecoratoréY   zPA base class or mixin that enables async context managers to work as decorators.c                 ó   • U $ )z-Return a recreated instance of self.
        r   r   s    r   rL   Ú"AsyncContextDecorator._recreate_cm\   s	   € ð ˆr    c                 ó4   ^ ^• [        T5      UU 4S j5       nU$ )Nc               Ÿ   óÀ   >#   • TR                  5        IS h  v•N   T" U 0 UD6I S h  v•N sS S S 5      IS h  v•N   $  N% N N	! , IS h  v•N  (       d  f       g = f7frP   rQ   rR   s     €€r   rV   Ú-AsyncContextDecorator.__call__.<locals>.innerb   sA   øé € à×(Ñ(×*Õ*Ù! 4Ð0¨4Ñ0×0÷ +×*Ó*Ù0÷ +×*×*Ð*üsP   ƒA˜>™AœA¨A ©A¬A¸A¹AÁ AÁAÁAÁ
AÁAÁAr   rX   s   `` r   rY   ÚAsyncContextDecorator.__call__a   s    ù€ Ü	ˆt‹õ	1ó 
ð	1ð ˆr    r   Nr[   r   r    r   r]   r]   Y   s   † ÙVòõ
r    r]   c                   ó$   • \ rS rSrSrS rS rSrg)Ú_GeneratorContextManagerBaseéi   zBShared functionality for @contextmanager and @asynccontextmanager.c                 óž   • U" U0 UD6U l         XUsU l        U l        U l        [	        USS 5      nUc  [        U 5      R                  nX@l        g )Nr6   )ÚgenrU   rS   rT   ÚgetattrÚtyper6   )r   rU   rS   rT   Údocs        r   Ú__init__Ú%_GeneratorContextManagerBase.__init__l   sN   € Ù˜Ð& Ñ&ˆŒØ*.°dÐ'ˆŒ	�4”9˜dœiä�d˜I tÓ,ˆØ‰;Ü�t“*×$Ñ$ˆCØ�r    c                 ód   • U R                  U R                  U R                  U R                  5      $ rP   )Ú	__class__rU   rS   rT   r   s    r   rL   Ú)_GeneratorContextManagerBase._recreate_cmz   s#   € ð �~‰~˜dŸi™i¨¯©°D·I±IÓ>Ð>r    )r6   rS   rU   ri   rT   N)r2   r3   r4   r5   r6   rm   rL   r<   r   r    r   rf   rf   i   s   † ÙLòõ?r    rf   c                   ó$   • \ rS rSrSrS rS rSrg)Ú_GeneratorContextManageré�   z%Helper for @contextmanager decorator.c                 ón   • U ? U ?U ? [        U R                  5      $ ! [
         a    [        S5      S ef = f©Nzgenerator didn't yield)rS   rT   rU   Únextri   ÚStopIterationÚRuntimeErrorr   s    r   r   Ú"_GeneratorContextManager.__enter__ˆ   sD   € ð ˆI�t�y $ )ð	CÜ˜Ÿ™“>Ð!øÜó 	CÜÐ7Ó8¸dÐBð	Cús   ˆ �4c                 óR  • Uc"   [        U R                  5         [        S5      eUc  U" 5       n U R                  R                  U5         [        S5      e! U R                  R                  5         f = f! [         a     gf = f! [         a  nXBLs S nA$ S nAf[         aD  nXBL a  X4l         S nAg[        U[        5      (       a  UR                  UL a  X2l         S nAge S nAf[         a  nXBLa  e X4l         S nAgS nAff = f! U R                  R                  5         f = f)Núgenerator didn't stopFz#generator didn't stop after throw())
rw   ri   ry   Úcloserx   ÚthrowÚ__traceback__Ú
isinstanceÚ	__cause__ÚBaseException©r   ÚtypÚvaluer&   Úexcs        r   r'   Ú!_GeneratorContextManager.__exit__‘   s  € Ø‰;ð%Ü�T—X‘X”ð%Ü&Ð'>Ó?Ð?ð ‰}ñ ›�ð#Ø—‘—‘˜uÔ%ðF!Ü"Ð#HÓIÐIøðW —H‘H—N‘NÕ$ûô !ó Ùðûô !ó (ð Ð'Õ'ûÜó à’<Ø(1Ô%Ü ô ˜u¤m×4Ñ4ØŸ™¨Ò.à*3Ô'Ü ØûÜ ó 
ð Ò#ØØ$-Ô!Üûð
ûð —‘—‘Õ úsi   …A7 ›A ±B ÁD
 ÁA4Á7
BÂBÂ
DÂBÂDÂDÂ&
C%Â5*C%Ã$C%Ã%DÃ2DÄDÄ
D&r   N)r2   r3   r4   r5   r6   r   r'   r<   r   r    r   rs   rs   �   s   † ñ
 0òCõ7!r    rs   c                   ó$   • \ rS rSrSrS rS rSrg)Ú_AsyncGeneratorContextManageréÊ   z*Helper for @asynccontextmanager decorator.c              ƒ   óŠ   #   • U ? U ?U ? [        U R                  5      I S h  v•N $  N! [
         a    [        S5      S ef = f7frv   )rS   rT   rU   Úanextri   ÚStopAsyncIterationry   r   s    r   r@   Ú(_AsyncGeneratorContextManager.__aenter__Ñ   sL   é € ð ˆI�t�y $ )ð	CÜ˜tŸx™x›×(Ð(Ñ(øÜ!ó 	CÜÐ7Ó8¸dÐBð	Cüs%   ‚AŠ) ¢'£) ¦A§) ©A Á Ac              ƒ   ó²  #   • Uc*   [        U R                  5      I S h  v•N    [        S5      eUc  U" 5       n U R                  R                  U5      I S h  v•N    [        S5      e NJ! U R                  R                  5       I S h  v•N    f = f! [         a     gf = f NJ! [         a  nXBLs S nA$ S nAf[         aJ  nXBL a  X4l         S nAg[        U[        [        45      (       a  UR                  UL a  X2l         S nAge S nAf[         a  nXBLa  e X4l         S nAgS nAff = f! U R                  R                  5       I S h  v•N    f = f7f)Nr|   Fz$generator didn't stop after athrow())rŒ   ri   ry   Úacloser�   Úathrowr   r€   rx   r�   r‚   rƒ   s        r   rD   Ú'_AsyncGeneratorContextManager.__aexit__Ú   s6  é € Ø‰;ð,Ü˜DŸH™H“o×%Ð%ð,Ü&Ð'>Ó?Ð?ð ‰}ñ ›�ð#Ø—h‘h—o‘o eÓ,×,Ð,ðF(Ü"Ð#IÓJÐJñe &øð Ÿ(™(Ÿ/™/Ó+×+Ò+ûô &ó Ùðúñ -øÜ%ó (ð Ð'Õ'ûÜó à’<Ø(1Ô%Ü ô ˜u¤}Ô6HÐ&I×JÑJØŸ™¨Ò.à*3Ô'Ü ØûÜ ó 
ð Ò#ØØ$-Ô!Üûð
ûð —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,Â0B8Â2D,Â3EÂ8D,Ã
D
ÃEÃ0D
ÄEÄ	D
Ä
D,ÄD'Ä"EÄ'D,Ä,EÄ/EÅEÅEÅEr   N)r2   r3   r4   r5   r6   r@   rD   r<   r   r    r   r‰   r‰   Ê   s   † ñ
 5òCõ7(r    r‰   c                 ó0   ^ • [        T 5      U 4S j5       nU$ )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X5      $ rP   )rs   ©rS   rT   rU   s     €r   ÚhelperÚcontextmanager.<locals>.helper/  s   ø€ ä'¨¨dÓ9Ð9r    r   ©rU   r–   s   ` r   r	   r	     s    ø€ ô6 ˆ4ƒ[ô:ó ð:à€Mr    c                 ó0   ^ • [        T 5      U 4S j5       nU$ )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X5      $ rP   )r‰   r•   s     €r   r–   Ú#asynccontextmanager.<locals>.helperP  s   ø€ ä,¨T°4Ó>Ð>r    r   r˜   s   ` r   r   r   5  s    ø€ ô6 ˆ4ƒ[ô?ó ð?à€Mr    c                   ó*   • \ rS rSrSrS rS rS rSrg)r
   iV  a
  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                 ó   • Xl         g rP   ©Úthing©r   rŸ   s     r   rm   Úclosing.__init__g  ó   € Ø�
r    c                 ó   • U R                   $ rP   rž   r   s    r   r   Úclosing.__enter__i  s   € Ø�z‰zÐr    c                 ó8   • U R                   R                  5         g rP   )rŸ   r}   ©r   Úexc_infos     r   r'   Úclosing.__exit__k  s   € Ø�
‰
×ÑÕr    rž   N©	r2   r3   r4   r5   r6   rm   r   r'   r<   r   r    r   r
   r
   V  s   † ñò òõr    r
   c                   ó*   • \ rS rSrSrS rS rS rSrg)r   io  ar  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                 ó   • Xl         g rP   rž   r    s     r   rm   Úaclosing.__init__�  r¢   r    c              ƒ   ó"   #   • U R                   $ 7frP   rž   r   s    r   r@   Úaclosing.__aenter__ƒ  s   é € Ø�z‰zÐùó   ‚c              ‡   óT   #   • U R                   R                  5       I S h  v•N   g  N7frP   )rŸ   r�   r¦   s     r   rD   Úaclosing.__aexit__…  s   é € Ø�j‰j×ÑÓ!×!Ó!ùs   ‚( &¡(rž   N)	r2   r3   r4   r5   r6   rm   r@   rD   r<   r   r    r   r   r   o  s   † ñò"òõ"r    r   c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú_RedirectStreami‰  Nc                 ó   • Xl         / U l        g rP   ©Ú_new_targetÚ_old_targets)r   Ú
new_targets     r   rm   Ú_RedirectStream.__init__�  s   € Ø%ÔàˆÕr    c                 óÊ   • U R                   R                  [        [        U R                  5      5        [        [        U R                  U R                  5        U R                  $ rP   )r·   Úappendrj   ÚsysÚ_streamÚsetattrr¶   r   s    r   r   Ú_RedirectStream.__enter__’  sC   € Ø×Ñ× Ñ ¤¬¨d¯l©lÓ!;Ô<Ü”�T—\‘\ 4×#3Ñ#3Ô4Ø×ÑÐr    c                 ój   • [        [        U R                  U R                  R	                  5       5        g rP   )r¾   r¼   r½   r·   Úpop)r   ÚexctypeÚexcinstÚexctbs       r   r'   Ú_RedirectStream.__exit__—  s!   € Ü”�T—\‘\ 4×#4Ñ#4×#8Ñ#8Ó#:Õ;r    rµ   )	r2   r3   r4   r5   r½   rm   r   r'   r<   r   r    r   r³   r³   ‰  s   † à€Gòò
 õ
<r    r³   c                   ó   • \ rS rSrSrSrSrg)r   i›  a  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)
Ústdoutr   N©r2   r3   r4   r5   r6   r½   r<   r   r    r   r   r   ›  s   † ñ
ð ƒGr    r   c                   ó   • \ rS rSrSrSrSrg)r   i«  zCContext manager for temporarily redirecting stderr to another file.Ústderrr   NrÈ   r   r    r   r   r   «  s
   † ÙMàƒGr    r   c                   ó*   • \ rS rSrSrS rS rS rSrg)r   i±  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                 ó   • Xl         g rP   ©Ú_exceptions)r   Ú
exceptionss     r   rm   Úsuppress.__init__¼  s   € Ø%Õr    c                 ó   • g rP   r   r   s    r   r   Úsuppress.__enter__¿  ó   € Ør    c                 ó²   • Uc  g [        XR                  5      (       a  g[        U[        5      (       a#  UR                  U R                  5      u  pEUc  gUeg)NTF)Ú
issubclassrÎ   ÚBaseExceptionGroupÚsplit)r   rÂ   rÃ   rÄ   ÚmatchÚrests         r   r'   Úsuppress.__exit__Â  sT   € ð ‰?ØÜ�g×/Ñ/×0Ñ0ØÜ�gÔ1×2Ñ2Ø!Ÿ-™-¨×(8Ñ(8Ó9‰KˆEØ‰|ØØˆJØr    rÍ   Nr©   r   r    r   r   r   ±  s   † ñò&òõr    r   c                   óf   • \ rS rSrSr\S 5       r\S 5       rS rS r	S r
S rS	 rS
 rSS jrSrg)Ú_BaseExitStackiØ  z.A base class for ExitStack and AsyncExitStack.c                 ó   • [        X5      $ rP   ©r   ©ÚcmÚcm_exits     r   Ú_create_exit_wrapperÚ#_BaseExitStack._create_exit_wrapperÛ  ó   € ä˜'Ó&Ð&r    c                ó   ^ ^^• UU U4S jnU$ )Nc                 ó   >• T" T0 TD6  g rP   r   ©r$   r†   ÚtbrS   ÚcallbackrT   s      €€€r   Ú_exit_wrapperÚ8_BaseExitStack._create_cb_wrapper.<locals>._exit_wrapperá  s   ø€ Ù�dÐ#˜dÓ#r    r   ©ré   rS   rT   rê   s   ``` r   Ú_create_cb_wrapperÚ!_BaseExitStack._create_cb_wrapperß  s   ú€ ÷	$àÐr    c                 ó"   • [        5       U l        g rP   )r   Ú_exit_callbacksr   s    r   rm   Ú_BaseExitStack.__init__å  s   € Ü$›wˆÕr    c                 óf   • [        U 5      " 5       nU R                  Ul        [        5       U l        U$ )z@Preserve the context stack by transferring it to a new instance.)rk   rð   r   )r   Ú	new_stacks     r   Úpop_allÚ_BaseExitStack.pop_allè  s+   € ä˜”J“Lˆ	Ø$(×$8Ñ$8ˆ	Ô!Ü$›wˆÔØÐr    c                 óœ   • [        U5      n UR                  nU R                  X5        U$ ! [         a    U R	                  U5         U$ f = f)zî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).
)rk   r'   Ú_push_cm_exitÚAttributeErrorÚ_push_exit_callback©r   ÚexitÚ_cb_typeÚexit_methods       r   ÚpushÚ_BaseExitStack.pushï  sX   € ô ˜“:ˆð	2Ø"×+Ñ+ˆKð
 ×Ñ˜tÔ1Øˆøô ó 	+à×$Ñ$ TÕ*ð ˆð	+ús   �, ¬AÁ
Ac                 óê   • [        U5      n UR                  nUR                  nU" U5      nU R                  X5        U$ ! [         a(    [	        SUR
                   SUR                   S35      Sef = f)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)rk   r   r'   rø   Ú	TypeErrorr3   r4   r÷   ©r   rà   r.   Ú_enterÚ_exitÚresults         r   Úenter_contextÚ_BaseExitStack.enter_context  s�   € ô �2‹hˆð	SØ—]‘]ˆFØ—L‘LˆEñ ˜“ˆØ×Ñ˜2Ô%Øˆøô ó 	SÜ˜a §¡Ð/¨q°×1AÑ1AÐ0Bð CGð Hó IØNRðSð	Sús   �A  Á 2A2c                ó`   • U R                   " U/UQ70 UD6nXl        U R                  U5        U$ )zLRegisters an arbitrary callback and arguments.

Cannot suppress exceptions.
)rí   Ú__wrapped__rù   ©r   ré   rS   rT   rê   s        r   ré   Ú_BaseExitStack.callback  s9   € ð
 ×/Ò/°ÐH¸4ÒHÀ4ÑHˆð %-Ô!Ø× Ñ  Ô/Øˆr    c                 óJ   • U R                  X5      nU R                  US5        g)z;Helper to correctly register callbacks to __exit__ methods.TN)râ   rù   ©r   rà   rá   rê   s       r   r÷   Ú_BaseExitStack._push_cm_exit#  s"   € à×1Ñ1°"Ó>ˆØ× Ñ  °Õ5r    c                 ó<   • U R                   R                  X!45        g rP   )rð   r»   )r   ré   Úis_syncs      r   rù   Ú"_BaseExitStack._push_exit_callback(  s   € Ø×Ñ×#Ñ# WÐ$7Õ8r    )rð   N)T)r2   r3   r4   r5   r6   Ústaticmethodrâ   rí   rm   rô   rþ   r  ré   r÷   rù   r<   r   r    r   rÜ   rÜ   Ø  sN   † Ù8àñ'ó ð'ð ñó ðò
'òòò(ò&ò6÷
9r    rÜ   c                   ó*   • \ rS rSrSrS rS rS rSrg)r   i-  ao  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                 ó   • U $ rP   r   r   s    r   r   ÚExitStack.__enter__8  s   € Øˆr    c                 óö  ^• US   nUS Ln[         R                  " 5       mU4S jnSnSnU R                  (       af  U R                  R                  5       u  pxU(       d   e Uc  SnO[	        U5      X"R
                  4nU" U6 (       a  SnSnS nU R                  (       a  Mf  U(       a   UR                  n
UeU=(       a    U$ ! [         a  n	U" X’5        SnU	n S n	A	NOS n	A	ff = f! [         a	    W
Ul        e f = f)Né   c                 óP   >•  U R                   nUb  X!L a  g UTL a  OUn M  Xl         g rP   ©Ú__context__©Únew_excÚold_excÚexc_contextÚ	frame_excs      €r   Ú_fix_exception_contextÚ2ExitStack.__exit__.<locals>._fix_exception_contextB  ó<   ø€ àØ%×1Ñ1�ØÑ&¨+Ò*@àØ )Ò+ØØ%�ñ ð #*Õr    F©NNNT©r¼   Ú	exceptionrð   rÁ   rk   r   r‚   r  )r   Úexc_detailsr†   Úreceived_excr"  Úsuppressed_excÚpending_raiser  Úcbr  Ú	fixed_ctxr!  s              @r   r'   ÚExitStack.__exit__;  s  ø€ Ø˜!‰nˆØ $�ˆô —M’M“Oˆ	õ	*ð  ˆØˆØ×"×"Ø×.Ñ.×2Ñ2Ó4‰KˆGÞˆN�7ðØ‘;Ø"2‘Kä"& s£)¨S×2CÑ2CÐ"C�KÙ�{Ö#Ø%)�NØ$)�MØ�Cð ×"×"Ñ"ö$ ðð  ŸO™O�	Ø�	ð ×. Ð.øô !ó á& wÔ4Ø $�Ø•ûð	ûô !ó Ø"+�”Øðús$   Á!-C Â)C% Ã
C"ÃCÃC"Ã%C8c                 ó*   • U R                  SSS5        g©z%Immediately unwind the context stack.N)r'   r   s    r   r}   ÚExitStack.closeq  s   € à�‰�d˜D $Õ'r    r   N)	r2   r3   r4   r5   r6   r   r'   r}   r<   r   r    r   r   r   -  s   † ñòò4/õl(r    r   c                   ób   • \ rS rSrSr\S 5       r\S 5       rS rS r	S r
S rS	 rS
 rS rSrg)r   iw  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                 ó   • [        X5      $ rP   rÞ   rß   s     r   Ú_create_async_exit_wrapperÚ)AsyncExitStack._create_async_exit_wrapper„  rä   r    c                ó   ^ ^^• UU U4S jnU$ )Nc              “   ó2   >#   • T" T0 TD6I S h  v•N   g  N7frP   r   rç   s      €€€r   rê   Ú>AsyncExitStack._create_async_cb_wrapper.<locals>._exit_wrapperŠ  s   øé € Ù˜DÐ) DÑ)×)Ó)ùs   ƒ��r   rì   s   ``` r   Ú_create_async_cb_wrapperÚ'AsyncExitStack._create_async_cb_wrapperˆ  s   ú€ ÷	*àÐr    c              ƒ   ó  #   • [        U5      n UR                  nUR                  nU" U5      I Sh  v•N nU R                  X5        U$ ! [         a(    [	        SUR
                   SUR                   S35      Sef = f NL7f)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)rk   r@   rD   rø   r  r3   r4   Ú_push_async_cm_exitr  s         r   Úenter_async_contextÚ"AsyncExitStack.enter_async_contextŽ  s“   é € ô �2‹hˆð	'Ø—^‘^ˆFØ—M‘MˆEñ
 ˜b“z×!ˆØ× Ñ  Ô+Øˆøô ó 	'Ü˜a §¡Ð/¨q°×1AÑ1AÐ0Bð CTð Uó à"&ð'ð	'úñ "ùs%   ‚B�A
 §B²A?³BÁ
2A<Á<Bc                 óž   • [        U5      n UR                  nU R                  X5        U$ ! [         a    U R	                  US5         U$ f = f)zû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)rk   rD   r<  rø   rù   rú   s       r   Úpush_async_exitÚAsyncExitStack.push_async_exit   sZ   € ô ˜“:ˆð	8Ø"×,Ñ,ˆKð
 ×$Ñ$ TÔ7Øˆøô ó 	2à×$Ñ$ T¨5Õ1ð ˆð	2ús   �, ¬AÁAc                ób   • U R                   " U/UQ70 UD6nXl        U R                  US5        U$ )zVRegisters an arbitrary coroutine function and arguments.

Cannot suppress exceptions.
F)r9  r  rù   r  s        r   Úpush_async_callbackÚ"AsyncExitStack.push_async_callback²  s;   € ð
 ×5Ò5°hÐNÀÒNÈÑNˆð %-Ô!Ø× Ñ  °Ô6Øˆr    c              ƒ   óF   #   • U R                  SSS5      I Sh  v•N   g N7fr0  )rD   r   s    r   r�   ÚAsyncExitStack.aclose¿  s   é € à�n‰n˜T 4¨Ó.×.Ó.ùs   ‚!™š!c                 óJ   • U R                  X5      nU R                  US5        g)zDHelper to correctly register coroutine function to __aexit__
method.FN)r4  rù   r  s       r   r<  Ú"AsyncExitStack._push_async_cm_exitÃ  s$   € ð ×7Ñ7¸ÓDˆØ× Ñ  °Õ6r    c              ƒ   ó   #   • U $ 7frP   r   r   s    r   r@   ÚAsyncExitStack.__aenter__É  s
   é € ØˆùrB   c              ‡   ó  ^#   • US   nUS Ln[         R                  " 5       mU4S jnSnSnU R                  (       at  U R                  R                  5       u  px Uc  SnO[	        U5      X"R
                  4nU(       a  U" U6 n	OU" U6 I S h  v•N n	U	(       a  SnSnS nU R                  (       a  Mt  U(       a   UR                  nUeU=(       a    U$  NE! [         a  n
U" X¢5        SnU
n S n
A
NQS n
A
ff = f! [         a	    WUl        e f = f7f)Nr  c                 óP   >•  U R                   nUb  X!L a  g UTL a  OUn M  Xl         g rP   r  r  s      €r   r"  Ú8AsyncExitStack.__aexit__.<locals>._fix_exception_contextÓ  r$  r    Fr%  Tr&  )r   r(  r†   r)  r"  r*  r+  r  r,  Úcb_suppressr  r-  r!  s               @r   rD   ÚAsyncExitStack.__aexit__Ì  s  øé € Ø˜!‰nˆØ $�ˆô —M’M“Oˆ	õ	*ð  ˆØˆØ×"×"Ø×.Ñ.×2Ñ2Ó4‰KˆGðØ‘;Ø"2‘Kä"& s£)¨S×2CÑ2CÐ"C�KÞÙ"$ kÐ"2‘Ká(*¨KÐ(8×"8�KæØ%)�NØ$)�MØ�Cð ×"×"Ñ"ö, ðð  ŸO™O�	Ø�	ð ×. Ð.ñ+ #9øô !ó á& wÔ4Ø $�Ø•ûð	ûô !ó Ø"+�”Øðüs`   ƒADÁ2C ÂCÂC ÂDÂ1DÂ9C7 ÃDÃC Ã
C4ÃC/Ã*DÃ/C4Ã4DÃ7D
Ä
Dr   N)r2   r3   r4   r5   r6   r  r4  r9  r=  r@  rC  r�   r<  r@   rD   r<   r   r    r   r   r   w  sR   † ñ
ð ñ'ó ð'ð ñó ðò
ò$ò$ò/ò7òõ8/r    r   c                   ó:   • \ rS rSrSrS
S jrS rS rS rS r	S	r
g)r   i  a7  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                 ó   • Xl         g rP   ©Úenter_result)r   rS  s     r   rm   Únullcontext.__init__  s   € Ø(Õr    c                 ó   • U R                   $ rP   rR  r   s    r   r   Únullcontext.__enter__  s   € Ø× Ñ Ð r    c                 ó   • g rP   r   ©r   Úexcinfos     r   r'   Únullcontext.__exit__  rÓ   r    c              ƒ   ó"   #   • U R                   $ 7frP   rR  r   s    r   r@   Únullcontext.__aenter__  s   é € Ø× Ñ Ð ùr¯   c              ‡   ó   #   • g 7frP   r   rX  s     r   rD   Únullcontext.__aexit__  s   é € ØùrF   rR  rP   )r2   r3   r4   r5   r6   rm   r   r'   r@   rD   r<   r   r    r   r   r     s    † ñô)ò!òò!õr    r   c                   ó*   • \ rS rSrSrS rS rS rSrg)r   i"  zHNon thread-safe context manager to change the current working directory.c                 ó   • Xl         / U l        g rP   )ÚpathÚ_old_cwd)r   ra  s     r   rm   Úchdir.__init__%  s   € ØŒ	Øˆ�r    c                 ó    • U R                   R                  [        R                  " 5       5        [        R                  " U R
                  5        g rP   )rb  r»   ÚosÚgetcwdr   ra  r   s    r   r   Úchdir.__enter__)  s*   € Ø�‰×ÑœRŸYšY›[Ô)Ü
�Š�—‘Õr    c                 ó`   • [         R                  " U R                  R                  5       5        g rP   )re  r   rb  rÁ   rX  s     r   r'   Úchdir.__exit__-  s   € Ü
�Š�—‘×"Ñ"Ó$Õ%r    )rb  ra  Nr©   r   r    r   r   r   "  s   † ÙRòòõ&r    r   )#r6   r:   re  r¼   r*   Úcollectionsr   Ú	functoolsr   Útypesr   r   Ú__all__ÚABCr   r   Úobjectr   r]   rf   rs   r‰   r	   r   r
   r   r³   r   r   r   rÜ   r   r   r   r   r   r    r   Ú<module>rp     s9  ðÙ :Û 
Û 	Û 
Û Ý Ý ß *ò€ô˜SŸW™Wô ô0 #§'¡'ô ô2�vô ô.˜Fô ÷ ?ñ ?ô0G!Ø ØØôG!ôRG(Ø ØØôG(òTòBôBÐ$ô ô2"Ð*ô "ô4<Ð,ô <ô$�oô ô �oô ô$Ð%ô $÷NQ9ñ Q9ôjF(�Ð 6ô F(ôTM/�^Ð%@ô M/ô`Ð(Ð*Eô ô6&Ð"õ &r    