
    siC                        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J	r	J
r
Jr  SSKJr  SSKJr  SSKJrJr  SSKJrJr  SS	KJrJr  SS
KJrJrJrJrJr  SSKJrJ r J!r!J"r"  SSK#J$r$  SSK%J%r%  SSK&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-  SSK.J/r/  SSK0J1r1J2r2  SSK3J4r4  SSK5J6r6  \" \75      r8\9" \Rt                  S5      =(       a    \Rt                  Rw                  5       r< " S S\5      r=\+" \R|                  R                  S5      5      (       a	  \=" S5      r@O\" S5      r@S>S jrA " S S 5      rB " S! S"\B5      rC\C" 5       rD " S# S$\5      rE\S?S% j5       rF\S@S& j5       rG\SAS' j5       rH\\ER                  \ER                  4S( j5       rJ\S) 5       rK\/" S*S+S,S-9\S. 5       5       rL\S/ 5       rM\SAS0 j5       rN\SS1SS4S2 jrOSS3.S4 jrP " S5 S6\5      rQ " S7 S8\
5      rR\rS9 rS " S: S;\B5      rTS< rU\7S=:X  a  \U" 5         gg)BzCommon I/O utilities.    N)defaultdict)ExecutorFutureThreadPoolExecutoras_completed)contextmanager)Enum)EPIPE	ESHUTDOWN)partialwraps)BytesIOStringIO)CRITICALWARN	FormatterStreamHandler	getLogger)dirnameisdirisfilejoin)Lock)time   )memoizemethod)NullHandler)boolify)json)
deprecated   )encode_environmenton_win)NULL)expandisattyc                   <   ^  \ rS rSrSrSU 4S jjrU 4S jrSrU =r$ )DeltaSecondsFormatter"   aW  
Logging formatter with additional attributes for run time logging.

Attributes:
  `delta_secs`:
    Elapsed seconds since last log/format call (or creation of logger).
  `relative_created_secs`:
    Like `relativeCreated`, time relative to the initialization of the
    `logging` module but conveniently scaled to seconds as a `float` value.
c                 >   > [        5       U l        [        TU ]  XS9  g )N)fmtdatefmt)r   	prev_timesuper__init__)selfr+   r,   	__class__s      /lib/python3.13/site-packages/conda/common/io.pyr/   DeltaSecondsFormatter.__init__.   s    S2    c                    > [        5       nU R                  n[        U R                  U5      U l        X#-
  Ul        UR                  S-  Ul        [        TU ]  U5      $ )Ni  )r   r-   max
delta_secsrelativeCreatedrelative_created_secsr.   format)r0   recordnowr-   r1   s       r2   r:   DeltaSecondsFormatter.format2   sQ    fNN	T^^S1O'-'='='D$w~f%%r4   )r-   NN)	__name__
__module____qualname____firstlineno____doc__r/   r:   __static_attributes____classcell__r1   s   @r2   r(   r(   "   s    	3& &r4   r(   CONDA_TIMED_LOGGINGzm%(relative_created_secs) 7.2f %(delta_secs) 7.2f %(levelname)s %(name)s:%(funcName)s(%(lineno)d): %(message)sz<%(levelname)s %(name)s:%(funcName)s(%(lineno)d): %(message)sc                 :   ^ SR                  U4S jU  5       5      $ )N c              3   R   >#    U  H  nS ST-  -   S-   [        U5      -   v   M     g7f)
 z- N)str).0xindents     r2   	<genexpr>dashlist.<locals>.<genexpr>G   s(     I14#,&-A6s   $')r   )iterablerP   s    `r2   dashlistrT   F   s    77IIIIr4   c                       \ rS rSrSrS rSrg)ContextDecoratorJ   zqBase class for a context manager class (implementing __enter__() and __exit__()) that also
makes it a decorator.
c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                  N   > T   T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fN )argskwdsfr0   s     r2   	decorated,ContextDecorator.__call__.<locals>.decoratedR   s    $'$' s   
$)r   )r0   r^   r_   s   `` r2   __call__ContextDecorator.__call__Q   s!    	q	( 
	( r4   r[   N)r?   r@   rA   rB   rC   ra   rD   r[   r4   r2   rV   rV   J   s    r4   rV   c                        \ rS rSrS rS rSrg)SwallowBrokenPipeZ   c                     g rZ   r[   r0   s    r2   	__enter__SwallowBrokenPipe.__enter__^   s    r4   c                     U(       aE  [        U[        5      (       a/  [        USS 5      (       a  UR                  [        [
        4;   a  gg g g g )NerrnoT)
isinstanceEnvironmentErrorgetattrrk   r
   r   )r0   exc_typeexc_valexc_tbs       r2   __exit__SwallowBrokenPipe.__exit__a   sJ    7$455$//%!33 4 0 6 r4   r[   N)r?   r@   rA   rB   rh   rr   rD   r[   r4   r2   rd   rd   Z   s    r4   rd   c                        \ rS rSrSrSrSrSrg)CaptureTargetn   z{Constants used for contextmanager captured.

Used similarly like the constants PIPE, STDOUT for stdlib's subprocess.Popen.
r[   N)r?   r@   rA   rB   rC   STRINGSTDOUTrD   r[   r4   r2   ru   ru   n   s    
 FFr4   ru   c              #     #    U c  0 n [        U 5      n0 nUR                  5        H>  u  pV[        R                  R	                  U[
        5      XE'   U[        R                  U'   M@      U(       a  U" 5         U(       a  U" S5        S v   UR                  5        H4  u  pVU[
        L a  [        R                  U	 M!  U[        R                  U'   M6     U(       a  U" 5         U(       a	  U" S5        g g ! UR                  5        H4  u  pVU[
        L a  [        R                  U	 M!  U[        R                  U'   M6     U(       a  U" 5         U(       a	  U" S5        f f = f7f)NTF)r"   itemsosenvirongetr$   )var_mapcallbackstack_callbacknew_var_map
saved_varsnamevalues          r2   env_varsr   x   s    $W-KJ"((*::>>$5
 

4 +"J4 %++-KD}JJt$#(

4 	 .
 J5!  &++-KD}JJt$#(

4 	 .
 J5! s    A%E(!C0 	A'E0A(EEc              #   b   #    X0n[        XBUS9 nUv   S S S 5        g ! , (       d  f       g = f7f)N)r   r   r   )r   r   r   r   dess         r2   env_varr      s)     	A	!~	F" 
G	F	Fs   /	/
,/c              #   Z   #    [        U S9 nUv   S S S 5        g ! , (       d  f       g = f7f)N)r   r   )r   r   s     r2   env_unmodifiedr      s     	8	$ 
%	$	$s   
+	+
(+c              #     #    S n " S S5      n[         R                  [         R                  pTU [        R                  :X  a7  [        5       nUR                  Ul        [        X&5      Ul        U[         l        OU nUb  U[         l        U[        R                  :X  a7  [        5       nUR                  Ul        [        X'5      Ul        U[         l        O2U[        R                  :X  a  U=[         l        nOUnUb  U[         l        U" 5       n[        R                  S5         Uv   U [        R                  :X  a  UR                  5       Ul        OXhl        U[        R                  :X  a  UR                  5       Ul        O"U[        R                  :X  a  SUl        OXxl        XEs[         l        [         l        [        R                  S5        g! U [        R                  :X  a  UR                  5       Ul        OXhl        U[        R                  :X  a  UR                  5       Ul        O"U[        R                  :X  a  SUl        OXxl        XEs[         l        [         l        [        R                  S5        f = f7f)a  Capture outputs of sys.stdout and sys.stderr.

If stdout is STRING, capture sys.stdout as a string,
if stdout is None, do not capture sys.stdout, leaving it untouched,
otherwise redirect sys.stdout to the file-like object given by stdout.

Behave correspondingly for stderr with the exception that if stderr is STDOUT,
redirect sys.stderr to stdout target and set stderr attribute of yielded object to None.

.. code-block:: pycon

   >>> from conda.common.io import captured
   >>> with captured() as c:
   ...     print("hello world!")
   ...
   >>> c.stdout
   'hello world!\n'

Args:
    stdout: capture target for sys.stdout, one of STRING, None, or file-like object
    stderr: capture target for sys.stderr, one of STRING, STDOUT, None, or file-like object

Yields:
    CapturedText: has attributes stdout, stderr which are either strings, None or the
        corresponding file-like function argument.
c                    [        U S5      (       a  SU R                  ;   a  [        nO"[        U [        5      (       a  [        nO[
        n[        X5      (       di  [        US5      (       a#  UR                  S5      nU R                  U5        g [        US5      (       a#  UR                  S5      nU R                  U5        g g U R                  U5        g )Nmodebdecodezutf-8encode)	hasattrr   bytesrl   r   rM   r   	old_writer   )r0   to_writewanteddecodedr   s        r2   write_wrappercaptured.<locals>.write_wrapper   s     4  SDII%5Fg&&FF(++x**"//'2w'8,,OOG,q! - NN8$r4   c                       \ rS rSrSrg)captured.<locals>.CapturedText   r[   Nr?   r@   rA   rB   rD   r[   r4   r2   CapturedTextr      s    r4   r   Nzovertaking stderr and stdoutzstderr and stdout yielding back)sysstdoutstderrru   ry   r   writer   r   rz   logdebuggetvalue)	r   r   r   r   saved_stdoutsaved_stderroutfileerrfilecs	            r2   capturedr      s    :%(  "%SZZ,%%%*#MM7
 CJ%%%*#MM7
	=''	'&&
W CJAII,-5])))'')AHH])))'')AH}+++AHH!-
CJ		34 ])))'')AHH])))'')AH}+++AHH!-
CJ		34s    D!I<$G (B(I<B)I99I<c              #      #    [         R                  nU [         l         S v   U[         l        g ! U[         l        f = f7frZ   )r   argv)	args_list
saved_argss     r2   r   r      s+     JCH:s   ?/ ?<?z25.9z26.3zUse `logging._lock` instead.)addendumc               #      #    [         R                  " 5          S v   [         R                  " 5         g ! [         R                  " 5         f = f7frZ   )logging_acquireLock_releaseLockr[   r4   r2   _logger_lockr   
  s3      s   A3 AA

Ac              #     #    [        U 5      nUR                  UR                  UR                  pCn[	        5       n[
        R                     UR                  U5        UR                  [        S-   5        Su  Ul        Ul        S S S 5         S v   [
        R                     UR                  U5        X#sUl        Ul        XAl        S S S 5        g ! , (       d  f       NR= f! , (       d  f       g = f! [
        R                     UR                  U5        X#sUl        Ul        XAl        S S S 5        f ! , (       d  f       f = f= f7f)Nr!   )TF)r   leveldisabled	propagater   r   _lock
addHandlersetLevelr   removeHandler)logger_namelogr_lvl_dsbld_prpgtnull_handlers         r2   disable_loggerr     s     [!D::t}}dnn&D=L	%hl#(3%t~ 
$]]|,(,%DJ#N ] 
 ]W]]|,(,%DJ#N ]]sf   A	E9CEC2 E!&C!	E
CE!
C/+E2E&D2)	E2
E <EEc              #     #    [        U5      nUR                  UR                  UR                  UR                  4u  p4pV[        [        R                  5      nSUl        UR                  U 5        UR                  [        5        [        R                     UR                  U 5        / SSsUl        Ul        Ul        UR                  U5        UR                  U 5        S S S 5         S v   [        R                     X4UsUl        Ul        Ul        Xbl        S S S 5        g ! , (       d  f       NH= f! , (       d  f       g = f! [        R                     X4UsUl        Ul        Ul        Xbl        S S S 5        f ! , (       d  f       f = f= f7f)Nr   F)r   handlersr   r   r   r   r   r   r   r   setFormatter
_FORMATTERr   r   r   )r   r   r   _hndlrsr   r   r   handlers           r2   stderr_log_levelr   &  s    [!D

	%!G6 CJJ'GGLU$	e795%4t}dn e	 

$]]7>f4DM4:t}#N ] 
 ]W]]7>f4DM4:t}#N ]]sg   BFA
D!F(E ,F<D2	F!
D/+F2
E <FF
E90	F
9
FF

FFc                 2   [        U5      n[        S UR                   5       S5      n[        [        R
                  5      nSUl        UR                  U 5        UR                  U=(       d    [        5        U=(       d    S H  nUR                  U5        M     [        R                     U(       a  UR                  U5        UR                  U5        XR                  5       :  a  UR                  U 5        X%l        SSS5        g! , (       d  f       g= f)a/  Attach a new `stderr` handler to the given logger and configure both.

This function creates a new StreamHandler that writes to `stderr` and attaches it
to the logger given by `logger_name` (which maybe `None`, in which case the root
logger is used). If the logger already has a handler by the name of `stderr`, it is
removed first.

The given `level` is set **for the handler**, not for the logger; however, this
function also sets the level of the given logger to the minimum of its current
effective level and the new handler level, ensuring that the handler will receive the
required log records, while minimizing the number of unnecessary log events. It also
sets the loggers `propagate` property according to the `propagate` argument.
The `formatter` argument can be used to set the formatter of the handler.
c              3   H   #    U  H  oR                   S :X  d  M  Uv   M     g7f)r   N)r   )rN   r   s     r2   rQ   (attach_stderr_handler.<locals>.<genexpr>X  s     JW1Is   "	"Nr   r[   )r   nextr   r   r   r   r   r   r   r   	addFilterr   r   r   r   getEffectiveLevelr   )	r   r   r   	formatterfiltersr   old_stderr_handlernew_stderr_handlerfilter_s	            r2   attach_stderr_handlerr   @  s    , [!DJJD
 'szz2&&##I$;<=b=$$W- ! 
12*+))++MM% " 
s   +AD
D)default_returnc                Z  ^ [         (       a	   U" U0 UD6$  " S S[        5      mU4S jn[        R                  " [        R                  U5        [        R
                  " U 5         U" U0 UD6n[        R
                  " S5        U$ ! [         a    Us $ f = f! T[        4 a    Us $ f = f)zSEnforce a maximum time for a callable to complete.
Not yet implemented on Windows.
c                       \ rS rSrSrg)!timeout.<locals>.TimeoutExceptioniz  r[   Nr   r[   r4   r2   TimeoutExceptionr   z  s    r4   r   c                    > T" 5       erZ   r[   )signumframer   s     r2   	interrupttimeout.<locals>.interrupt}  s    "$$r4   r   )r#   KeyboardInterrupt	ExceptionsignalSIGALRMalarm)timeout_secsfuncr   r\   kwargsr   retr   s          @r2   timeoutr   m  s     v	"(((
	y 		% 	fnni0\"	"''CLLOJ! ! 	"!!	"" !"34 	"!!	"s#   B 'B BBB*)B*c                   0    \ rS rSrS rS rS rSS jrSrg)	DummyExecutori  c                 0    SU l         [        5       U l        g )NF)	_shutdownr   _shutdownLockrg   s    r2   r/   DummyExecutor.__init__  s    !Vr4   c                 $   U R                      U R                  (       a  [        S5      e[        5       n U" U0 UD6nUR	                  U5        UsS S S 5        $ ! [
         a  nUR                  U5         S nAN+S nAff = f! , (       d  f       g = f)Nz*cannot schedule new futures after shutdown)r   r   RuntimeErrorr   
set_resultBaseExceptionset_exception)r0   fnr\   r   r^   resultes          r2   submitDummyExecutor.submit  s|    ~~"#OPPA%T,V, V$   ! #""#  s3   'BAB
A>#A94B9A>>B
Bc              '   D   #    U H  nU H  nU" U5      v   M     M     g 7frZ   r[   )r0   r   	iterablesrS   things        r2   mapDummyExecutor.map  s#     !H!5k! " "s    c                 ^    U R                      SU l        S S S 5        g ! , (       d  f       g = f)NT)r   r   )r0   waits     r2   shutdownDummyExecutor.shutdown  s    !DN  s   
,)r   r   N)T)	r?   r@   rA   rB   r/   r   r  r  rD   r[   r4   r2   r   r     s    $"
"r4   r   c                   8   ^  \ rS rSrSU 4S jjrU 4S jrSrU =r$ )ThreadLimitedThreadPoolExecutori  c                 $   > [         TU ]  U5        g rZ   )r.   r/   )r0   max_workersr1   s     r2   r/   (ThreadLimitedThreadPoolExecutor.__init__  s    %r4   c                 v   >  [         TU ]  5       $ ! [         a    [        U R                  5      S:  a   g e f = f)Nr   )r.   _adjust_thread_countr   len_threads)r0   r1   s    r2   r  4ThreadLimitedThreadPoolExecutor._adjust_thread_count  s@    
	7/11 	 4==!A% 	s    #88r[   )
   )r?   r@   rA   rB   r/   r  rD   rE   rF   s   @r2   r	  r	    s    & r4   r	  c                  n    [        SSS5      n [        [        R                  R	                  SU 5      5      $ )N~z.condazinstrumentation-record.csv!CONDA_INSTRUMENTATION_RECORD_FILE)r   r%   r}   r~   r   )default_record_files    r2   get_instrumentation_record_filer    s3    sH.JK


:<OP r4   c                      ^  \ rS rSr\" 5       rSr\" \5      r	\" \
5      rSS jrS rU 4S jrS rS r\S 5       r\S	 5       rS
rU =r$ )time_recorderi  Nc                     Xl         X l        g rZ   )
entry_namemodule_name)r0   r  r  s      r2   r/   time_recorder.__init__  s    $&r4   c                     U R                   cb  [        US5      (       a  UR                  nOSUR                  -   nU R                  (       a  SR                  U R                  U45      nX l         g g )NrA   :.)r  r   rA   r?   r  r   )r0   r^   r  s      r2   _set_entry_nametime_recorder._set_entry_name  s\    ??"q.))^^
 1::-
 XXt'7'7&DE
(O #r4   c                 D   > U R                  U5        [        TU ]	  U5      $ rZ   )r!  r.   ra   )r0   r^   r1   s     r2   ra   time_recorder.__call__  s!    Qw""r4   c                     [         R                  R                  S5      nU(       a  [        U5      (       a  [	        5       U l        U $ )NCONDA_INSTRUMENTATION_ENABLED)r}   r~   r   r   r   
start_time)r0   enableds     r2   rh   time_recorder.__enter__  s0    **..!@Aww''"fDOr4   c                 |   U R                   (       a  U R                  n[        5       nXPR                   -
  nU R                  U==   S-  ss'   U R                  U==   U-  ss'   U R                  5         [        U R                  S5       nUR                  U SUS S35        S S S 5        g g ! , (       d  f       g = f)Nr!   a,r^   rK   )	r'  r  r   total_call_numtotal_run_time_ensure_diropenrecord_filer   )r0   ro   rp   rq   r  end_timerun_timefhs           r2   rr   time_recorder.__exit__  s    ??JvH//1H
+q0+
+x7+d&&,J<q!B78 -,  -,s   
B--
B;c                 T   [         R                  R                  S5      nU(       a  [        U5      (       d  g [        R                  S5        [        U R                  R                  5       5       H5  n[        R                  SU R                  U   U R                  U   U5        M7     g )Nr&  z*=== time_recorder total time and calls ===zTOTAL %9.3f % 9d %s)
r}   r~   r   r   r   infosortedr.  keysr-  )clsr(  r  s      r2   
log_totalstime_recorder.log_totals  s~    **..!@AGG,,=> !3!3!8!8!:;JHH%"":."":.	 <r4   c                     [        [        U R                  5      5      (       d*  [        R                  " [        U R                  5      5        g g rZ   )r   r   r1  r}   makedirsrg   s    r2   r/  time_recorder._ensure_dir   s4    WT--.//KK 0 012 0r4   )r  r  r'  r>   )r?   r@   rA   rB   r  r1  r'  r   intr-  floatr.  r/   r!  ra   rh   rr   classmethodr;  r   r/  rD   rE   rF   s   @r2   r  r    se    13KJ %N 'N')#	9   3 3r4   r  c            	         [        5       n [        [        5      n0 n[        U 5      (       d  g [	        U 5       nU H@  nUR                  5       R                  S5      u  pVX   R                  [        U5      5        MB     S S S 5        [        U5       H)  nX   n[        U5      n[        U5      nXh-  n	UUU	S.X%'   M+     [        [        R                  " USSSS95        g ! , (       d  f       Ng= f)Nr,  )counts
total_timeaverage_timeTr   )r,  z: )	sort_keysrP   
separators)r  r   listr   r0  stripsplitappendrA  r8  r  sumprintr   dumps)
r1  grouped_data
final_datar4  liner  rE  	all_timesrD  rF  s
             r2   print_instrumentation_datarT    s    13Kt$LJ+	k	bD%)ZZ\%7%7%<"J$++E*,=>  

 \*
 ,	Y^
!*$("

 + 
$**Z4k
RS! 
	s   AC  
C.__main__)r   )NNNr>   rZ   )VrC   r   r}   r   r   collectionsr   concurrent.futuresr   r   r   r   
contextlibr   enumr	   rk   r
   r   	functoolsr   r   ior   r   r   r   r   r   r   os.pathr   r   r   r   	threadingr   r   auxlib.decoratorsr   auxlib.logzr   auxlib.type_coercionr   common.serializer   deprecationsr    compatr"   r#   	constantsr$   pathr%   r?   r   r   r   r&   IS_INTERACTIVEr(   r~   r   r   rT   rV   rd   swallow_broken_piperu   r   r   r   ry   r   r   r   r   r   r   r   r   r	  r  r  rT  r[   r4   r2   <module>rh     s4     	  
 # Q Q %  " $   G G 0 0   - % * # % .  X.F3::3D3D3F&I &2 2::>>/011&	GJ
 FJ
J  ( " () D  " "6    
 !((1E1E [5 [5|   FF%CD  E $ $" $ $4 *#Z 7; ">"H "<&8 $ =3$ =3@T8 z  r4   