+
    Brhl                     $   R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
Ht . R+Ot ! R R]P                  4      t ! R R]P                  4      t ! R R
]4      t ! R R]4      t ! R R4      t ! R R]]]4      t ! R R]]]4      tR tR t ! R R]4      t ! R R]4      t ! R  R!]4      t ! R" R]4      t ! R# R]4      t ! R$ R]4      t ! R% R&4      t ! R' R]]4      t ! R( R	]]4      t  ! R) R]]4      t! ! R* R]4      t"R# ),z4Utilities for with-statement contexts.  See PEP 343.N)dequewraps)
MethodTypeGenericAliasclosingnullcontextAbstractContextManagerAbstractAsyncContextManagerAsyncExitStackContextDecorator	ExitStackredirect_stdoutredirect_stderrsuppressaclosingchdirc                   r   a  ] tR t^t o Rt]! ]4      tRtR t	]
P                  R 4       t]R 4       tRtV tR# )r	   z,An abstract base class for context managers.c                    V # z0Return `self` upon entering the runtime context. selfs   &'/usr/local/lib/python3.14/contextlib.py	__enter__ AbstractContextManager.__enter__   s        c                    R# z9Raise any exception triggered within the runtime context.Nr   r   exc_type	exc_value	tracebacks   &&&&r   __exit__AbstractContextManager.__exit__   s     r   c                R    V \         J d   \        P                  ! VR R4      # \        # )r   r#   )r	   _collections_abc_check_methodsNotImplementedclsCs   &&r   __subclasshook__'AbstractContextManager.__subclasshook__"   s&    ((#221k:NNr   r   N)__name__
__module____qualname____firstlineno____doc__classmethodr   __class_getitem__	__slots__r   abcabstractmethodr#   r,   __static_attributes____classdictcell____classdict__s   @r   r	   r	      sK     6#L1I 	   r   c                   r   a  ] tR t^)t o Rt]! ]4      tRtR t	]
P                  R 4       t]R 4       tRtV tR# )r
   z9An abstract base class for asynchronous context managers.c                   "   V # 5ir   r   r   s   &r   
__aenter__&AbstractAsyncContextManager.__aenter__1   s
        c                   "   R# 5ir   r   r   s   &&&&r   	__aexit__%AbstractAsyncContextManager.__aexit__5   s
      r@   c                R    V \         J d   \        P                  ! VR R4      # \        # )r>   rB   )r
   r&   r'   r(   r)   s   &&r   r,   ,AbstractAsyncContextManager.__subclasshook__:   s-    --#221l3>@ @r   r   N)r.   r/   r0   r1   r2   r3   r   r4   r5   r>   r6   r7   rB   r,   r8   r9   r:   s   @r   r
   r
   )   sK     C#L1I 	   r   c                   0   a  ] tR t^Bt o RtR tR tRtV tR# )r   zJA base class or mixin that enables context managers to work as decorators.c                    V # )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   a a \        S4      VV 3R  l4       pV# )c                     < SP                  4       ;_uu_ 4        S! V / VB uuR R R 4       #   + '       g   i     R # ; iNrH   argskwdsfuncr   s   *,r   inner(ContextDecorator.__call__.<locals>.innerR   s.    ""$$T*T* %$$$s   ->	r   r   rQ   rR   s   ff r   __call__ContextDecorator.__call__Q   s     	t	+ 
	+ r   r   N	r.   r/   r0   r1   r2   rH   rU   r8   r9   r:   s   @r   r   r   B   s     P
 r   c                   0   a  ] tR t^Yt o RtR tR tRtV tR# )AsyncContextDecoratorzPA base class or mixin that enables async context managers to work as decorators.c                    V # )z-Return a recreated instance of self.
        r   r   s   &r   rH   "AsyncContextDecorator._recreate_cm\   s	     r   c                4   a a \        S4      VV 3R  l4       pV# )c                     <"   SP                  4       ;_uu_4       GR j  xL
  S! V / VB G R j  xL
 uuR R R 4      GR j  xL
  #  L& L L	  + GR j  xL 
 '       g   i     R # ; i5irL   rM   rN   s   *,r   rR   -AsyncContextDecorator.__call__.<locals>.innerb   sD     ((***!40400 +**0 +***sY   A*AA*AA	AA*AA*	AA*A'	A
A'	A'	!	A*r   rT   s   ff r   rU   AsyncContextDecorator.__call__a   s     	t	1 
	1 r   r   NrW   r:   s   @r   rY   rY   Y   s     V
 r   rY   c                   0   a  ] tR t^it o RtR tR tRtV tR# )_GeneratorContextManagerBasezBShared functionality for @contextmanager and @asynccontextmanager.c                    V! V/ VB V n         WVuV n        V n        V n        \	        VR R4      pVf   \        V 4      P                  pW@n        R# )r2   N)genrQ   rO   rP   getattrtyper2   )r   rQ   rO   rP   docs   &&&& r   __init__%_GeneratorContextManagerBase.__init__l   sN    &&*.d'	49didIt,;t*$$Cr   c                d    V P                  V P                  V P                  V P                  4      # rL   )	__class__rQ   rO   rP   r   s   &r   rH   )_GeneratorContextManagerBase._recreate_cmz   s#     ~~diiDII>>r   )r2   rO   rQ   rc   rP   N)	r.   r/   r0   r1   r2   rg   rH   r8   r9   r:   s   @r   ra   ra   i   s     L? ?r   ra   c                   0   a  ] tR t^t o RtR tR tRtV tR# )_GeneratorContextManagerz%Helper for @contextmanager decorator.c                p    V = V =V = \        V P                  4      #   \
         d    \        R 4      Rhi ; i)generator didn't yieldN)rO   rP   rQ   nextrc   StopIterationRuntimeErrorr   s   &r   r   "_GeneratorContextManager.__enter__   sD     Ity$)	C>! 	C78dB	Cs    5c                n   Vf#    \        V P                  4        \        R4      hVf   V! 4       p V P                  P                  V4        \        R4      h  T P                  P                  4        i ; i  \         d     R# i ; i  \         d   pYBJu R p?# R p?i\         dJ   pYBJ d   Y4n         R p?R# \        T\        4      '       d   TP                  TJ d   Y2n         R p?R# h R p?i\         d   pYBJd   h Y4n         R p?R# R p?ii ; i  T P                  P                  4        i ; i)Ngenerator didn't stopFz#generator didn't stop after throw())
rp   rc   rr   closerq   throw__traceback__
isinstance	__cause__BaseExceptionr   typvaluer"   excs   &&&& r   r#   !_GeneratorContextManager.__exit__   s   ;%TXX%&'>?? } #u%F!"#HIIW HHNN$ !  ! ( '' <(1%  um44.*3'   
 #$-!
  su   A9 A B D A69BBDBDD+D,C0=,C0/C00D=D>DDD4r   N)	r.   r/   r0   r1   r2   r   r#   r8   r9   r:   s   @r   rm   rm      s     
 0C7! 7!r   rm   c                   0   a  ] tR t^t o RtR tR tRtV tR# )_AsyncGeneratorContextManagerz*Helper for @asynccontextmanager decorator.c                   "   V = V =V = \        V P                  4      G R j  xL
 #  L  \
         d    \        R4      R hi ; i5i)Nro   )rO   rP   rQ   anextrc   StopAsyncIterationrr   r   s   &r   r>   (_AsyncGeneratorContextManager.__aenter__   sL      Ity$)	Ctxx(((! 	C78dB	Cs%   A) ') A) AAc                  "   Vf+    \        V P                  4      G R j  xL
   \        R4      hVf   V! 4       p V P                  P                  V4      G R j  xL
   \        R4      h LK  T P                  P                  4       G R j  xL 
  i ; i  \         d     R# i ; i LL  \         d   pYBJu R p?# R p?i\         dP   pYBJ d   Y4n         R p?R# \        T\        \        34      '       d   TP                  TJ d   Y2n         R p?R# h R p?i\         d   pYBJd   h Y4n         R p?R# R p?ii ; i  T P                  P                  4       G R j  xL 
  i ; i5i)Nru   Fz$generator didn't stop after athrow())r   rc   rr   acloser   athrowrx   ry   rq   rz   r{   r|   s   &&&& r   rB   '_AsyncGeneratorContextManager.__aexit__   s6    ;,DHHo%%,&'>?? } #hhooe,,,F("#IJJe & ((//+++ &  -% ( '' <(1%  u}6H&IJJ.*3'   
 #$-!
 hhoo'''s   E%B A,B A. E%B* B(B* !D= ,B .BBBE%B%!E%$B%%E%(B* *D:5B=7D:8E%=D:
D:DE%2DE%DD:"D:#D5/E%5D::E%=E"EE""E%r   N)	r.   r/   r0   r1   r2   r>   rB   r8   r9   r:   s   @r   r   r      s     
 5C7( 7(r   r   c                0   a  \        S 4      V 3R l4       pV# )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                     < \        SW4      # rL   )rm   rO   rP   rQ   s   *,r   helpercontextmanager.<locals>.helper/  s    'd99r   r   rQ   r   s   f r   contextmanagerr     s     6 4[: :Mr   c                0   a  \        S 4      V 3R l4       pV# )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                     < \        SW4      # rL   )r   r   s   *,r   r   #asynccontextmanager.<locals>.helperP  s    ,T4>>r   r   r   s   f r   asynccontextmanagerr   5  s     6 4[? ?Mr   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )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                    Wn         R # rL   thingr   r   s   &&r   rg   closing.__init__g      
r   c                    V P                   # rL   r   r   s   &r   r   closing.__enter__i  s    zzr   c                :    V P                   P                  4        R # rL   )r   rv   r   exc_infos   &*r   r#   closing.__exit__k  s    

r   r   N
r.   r/   r0   r1   r2   rg   r   r#   r8   r9   r:   s   @r   r   r   V  s       r   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )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                    Wn         R # rL   r   r   s   &&r   rg   aclosing.__init__  r   r   c                "   "   V P                   # 5irL   r   r   s   &r   r>   aclosing.__aenter__  s     zz   c                V   "   V P                   P                  4       G R j  xL
  R #  L5irL   )r   r   r   s   &*r   rB   aclosing.__aexit__  s     jj!!!s   )')r   N)
r.   r/   r0   r1   r2   rg   r>   rB   r8   r9   r:   s   @r   r   r   o  s     "" "r   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )_RedirectStreami  Nc                     Wn         . V n        R # rL   _new_target_old_targets)r   
new_targets   &&r   rg   _RedirectStream.__init__  s    %r   c                    V P                   P                  \        \        V P                  4      4       \        \        V P                  V P                  4       V P                  # rL   )r   appendrd   sys_streamsetattrr   r   s   &r   r   _RedirectStream.__enter__  sC      dll!;<T\\4#3#34r   c                l    \        \        V P                  V P                  P	                  4       4       R # rL   )r   r   r   r   pop)r   exctypeexcinstexctbs   &&&&r   r#   _RedirectStream.__exit__  s!    T\\4#4#4#8#8#:;r   r   )
r.   r/   r0   r1   r   rg   r   r#   r8   r9   r:   s   @r   r   r     s     G
 
< <r   r   c                       ] tR tRtRtRtRtR# )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r.   r/   r0   r1   r2   r   r8   r   r   r   r   r     s    
 Gr   c                       ] tR tRtRtRtRtR# )r   i  zCContext manager for temporarily redirecting stderr to another file.stderrr   Nr   r   r   r   r   r     s
    MGr   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )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                    Wn         R # rL   _exceptions)r   
exceptionss   &*r   rg   suppress.__init__  s    %r   c                    R # rL   r   r   s   &r   r   suppress.__enter__      r   c                    Vf   R # \        WP                  4      '       d   R# \        V\        4      '       d&   VP                  V P                  4      w  rEVf   R# VhR# )NTF)
issubclassr   BaseExceptionGroupsplit)r   r   r   r   matchrests   &&&&  r   r#   suppress.__exit__  sT     ?g//00g122!--(8(89KE|Jr   r   Nr   r:   s   @r   r   r     s     & r   c                   r   a  ] tR tRt o Rt]R 4       t]R 4       tR tR t	R t
R tR	 tR
 tRR ltRtV tR# )_BaseExitStacki  z.A base class for ExitStack and AsyncExitStack.c                    \        W4      # rL   r   cmcm_exits   &&r   _create_exit_wrapper#_BaseExitStack._create_exit_wrapper      '&&r   c                  a aa VV V3R  lpV# )c                    < S! S/ SB  R # rL   r   r    r   tbrO   callbackrP   s   &&&r   _exit_wrapper8_BaseExitStack._create_cb_wrapper.<locals>._exit_wrapper  s    d#d#r   r   r   rO   rP   r   s   bjl r   _create_cb_wrapper!_BaseExitStack._create_cb_wrapper  s    	$r   c                $    \        4       V n        R # rL   )r   _exit_callbacksr   s   &r   rg   _BaseExitStack.__init__  s    $wr   c                f    \        V 4      ! 4       pV P                  Vn        \        4       V n        V# )z@Preserve the context stack by transferring it to a new instance.)re   r   r   )r   	new_stacks   & r   pop_all_BaseExitStack.pop_all  s+    JL	$($8$8	!$wr   c                    \        V4      p VP                  pV P                  W4       V#   \         d    T P	                  T4        T# i ; i)zRegisters 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).
)re   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                    \        V4      p VP                  pVP                  pT! T4      pT P                  Y4       T#   \         d)    \	        RTP
                   RTP                   R24      Rhi ; i)zEnters 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)re   r   r#   r   	TypeErrorr/   r0   r   r   r   r*   _enter_exitresults   &&    r   enter_context_BaseExitStack.enter_context  s     2h	S]]FLLE 2%  	Sa/q1A1A0B CG H INRS	Ss   A   3A3c               `    V P                   ! V.VO5/ VB pWn        V P                  V4       V# )zLRegisters an arbitrary callback and arguments.

Cannot suppress exceptions.
)r   __wrapped__r   r   r   rO   rP   r   s   ""*, r   r   _BaseExitStack.callback  s9    
 //H4H4H %-!  /r   c                L    V P                  W4      pV P                  VR4       R# )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                >    V P                   P                  W!34       R # rL   )r   r   )r   r   is_syncs   &&&r   r   "_BaseExitStack._push_exit_callback(  s    ##W$78r   )r   N)T)r.   r/   r0   r1   r2   staticmethodr   r   rg   r   r   r  r   r   r   r8   r9   r:   s   @r   r   r     sV     8' '  
'(&6
9 9r   r   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )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                    V # rL   r   r   s   &r   r   ExitStack.__enter__8  s    r   c                  a V^,          pVRJp\         P                  ! 4       oV3R lpRpRpV P                  '       d\   V P                  P                  4       w  rxV'       g   Q h Vf   RpM\	        V4      W"P
                  3pV! V!  '       d	   RpRpRpKk  Km  V'       d    VP                  p
VhT;'       d    T#   \         d   p	T! Y4       RpT	p Rp	?	K  Rp	?	ii ; i  \         d
    X
Tn        h i ; i)   Nc                 Z   <  V P                   pVe   W!J d   R# VSJ d   MTp K#  Wn         R# r  N__context__new_excold_excexc_context	frame_excs   && r   _fix_exception_context2ExitStack.__exit__.<locals>._fix_exception_contextB  7    %11&+*@)+% #*r   FTNNNr   	exceptionr   r   re   rx   r{   r  )r   exc_detailsr   received_excr  suppressed_excpending_raiser  cbr  	fixed_ctxr  s   &*         @r   r#   ExitStack.__exit__;  s   !n$ MMO		*  """..224KGN7;"2K"&s)S2C2C"CK{##%)N$)MC $   OO		 ... ! &w4 $	 ! "+s*   ')B> B> $C# >C 	CC #C7c                ,    V P                  RRR4       R# z%Immediately unwind the context stack.N)r#   r   s   &r   rv   ExitStack.closeq  s    dD$'r   r   N)
r.   r/   r0   r1   r2   r   r#   rv   r8   r9   r:   s   @r   r   r   -  s     4/l( (r   c                   n   a  ] tR tRt o Rt]R 4       t]R 4       tR tR t	R t
R tR	 tR
 tR tRtV tR# )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                    \        W4      # rL   r   r   s   &&r   _create_async_exit_wrapper)AsyncExitStack._create_async_exit_wrapper  r   r   c                  a aa VV V3R  lpV# )c                 4   <"   S! S/ SB G R j  xL
  R #  L5irL   r   r   s   &&&r   r   >AsyncExitStack._create_async_cb_wrapper.<locals>._exit_wrapper  s     D)D)))s   r   r   s   bjl r   _create_async_cb_wrapper'AsyncExitStack._create_async_cb_wrapper  s    	*r   c                  "   \        V4      p VP                  pVP                  pT! T4      G Rj  xL
 pT P                  Y4       T#   \         d)    \	        RTP
                   RTP                   R24      Rhi ; i LM5i)zEnters 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)re   r>   rB   r   r   r/   r0   _push_async_cm_exitr   s   &&    r   enter_async_context"AsyncExitStack.enter_async_context  s      2h	'^^FMME
 bz!  +  	'a/q1A1A0B CT U "&'	' "s%   BA
 BB B
3A==Bc                    \        V4      p VP                  pV P                  W4       V#   \         d    T P	                  TR4        T# i ; i)zRegisters 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)re   rB   r7  r   r   r   s   &&  r   push_async_exitAsyncExitStack.push_async_exit  sZ     :	8",,K
 $$T7  	2$$T51 	2s   , AAc               b    V P                   ! V.VO5/ VB pWn        V P                  VR4       V# )zVRegisters an arbitrary coroutine function and arguments.

Cannot suppress exceptions.
F)r4  r  r   r  s   ""*, r   push_async_callback"AsyncExitStack.push_async_callback  s;    
 55hNNN %-!  6r   c                H   "   V P                  RRR4      G Rj  xL
  R#  L5ir+  )rB   r   s   &r   r   AsyncExitStack.aclose  s     nnT4...s   " "c                L    V P                  W4      pV P                  VR4       R# )zDHelper to correctly register coroutine function to __aexit__
method.FN)r/  r   r	  s   &&& r   r7  "AsyncExitStack._push_async_cm_exit  s$     77D  6r   c                   "   V # 5irL   r   r   s   &r   r>   AsyncExitStack.__aenter__  s
     r@   c                  a"   V^,          pVRJp\         P                  ! 4       oV3R lpRpRpV P                  '       dk   V P                  P                  4       w  rx Vf   RpM\	        V4      W"P
                  3pV'       d   V! V!  p	MV! V!  G Rj  xL
 p	V	'       d	   RpRpRpKz  K|  V'       d    VP                  pVhT;'       d    T#  L9  \         d   p
T! Y4       RpT
p Rp
?
K  Rp
?
ii ; i  \         d
    XTn        h i ; i5i)r  Nc                 Z   <  V P                   pVe   W!J d   R# VSJ d   MTp K#  Wn         R# r  r  r  s   && r   r  8AsyncExitStack.__aexit__.<locals>._fix_exception_context  r  r   FTr   r!  )r   r#  r   r$  r  r%  r&  r  r'  cb_suppressr  r(  r  s   &*          @r   rB   AsyncExitStack.__aexit__  s    !n$ MMO		*  """..224KG;"2K"&s)S2C2C"CK"$k"2K(*K(8"8K%)N$)MC    OO		 ...+ #9 ! &w4 $	 ! "+sq   >DD%C C CC "C (D5C6 DDC C3C.(D.C33D6D

Dr   N)r.   r/   r0   r1   r2   r  r/  r4  r8  r;  r>  r   r7  r>   rB   r8   r9   r:   s   @r   r   r   w  sZ     
 ' '  
$$/78/ 8/r   c                   F   a  ] tR tRt o RtR
R ltR tR tR tR t	R	t
V tR# )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                    Wn         R # rL   enter_result)r   rN  s   &&r   rg   nullcontext.__init__  s    (r   c                    V P                   # rL   rM  r   s   &r   r   nullcontext.__enter__  s       r   c                    R # rL   r   r   excinfos   &*r   r#   nullcontext.__exit__  r   r   c                "   "   V P                   # 5irL   rM  r   s   &r   r>   nullcontext.__aenter__  s        r   c                   "   R # 5irL   r   rS  s   &*r   rB   nullcontext.__aexit__  s     r@   rM  rL   )r.   r/   r0   r1   r2   rg   r   r#   r>   rB   r8   r9   r:   s   @r   r   r     s(     )!! r   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )r   i"  zHNon thread-safe context manager to change the current working directory.c                     Wn         . V n        R # rL   )path_old_cwd)r   r\  s   &&r   rg   chdir.__init__%  s    	r   c                    V P                   P                  \        P                  ! 4       4       \        P                  ! V P
                  4       R # rL   )r]  r   osgetcwdr   r\  r   s   &r   r   chdir.__enter__)  s*    RYY[)
r   c                b    \         P                  ! V P                  P                  4       4       R # rL   )r`  r   r]  r   rS  s   &*r   r#   chdir.__exit__-  s    
""$%r   )r]  r\  Nr   r:   s   @r   r   r   "  s     R& &r   )r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   )#r2   r6   r`  r   r&   collectionsr   	functoolsr   typesr   r   __all__ABCr	   r
   objectr   rY   ra   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>rk     s9   : 
 	 
    *SWW 0#'' 2v .F  ? ?0G! G!RG( G(TBB$ 2"* "4<, <$o  o $% $NQ9 Q9jF( 6 F(TM/^%@ M/`(*E 6&" &r   