
    cC                        S SK r S SK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Qr
S rSrSrSrS	rS
rSrSrSqSqS rS rS rS rS rS rS3S jrS rS r\" 5       r\R>                  S:X  a  Sr O7\R>                  RC                  S5      (       a  Sr O\ RD                  S:X  a  SOSr S r#S r$S r%\RL                  " 5       r'\RP                  " 5       r)S  r*S! r+0 r,\RP                  " 5       r- " S" S#\.5      r/S3S$ jr0S% r1Sq2\\\0\	Rf                  \	Rh                  4S& jr5\Rl                  " \55         " S' S(\.5      r7 " S) S*\Rp                  5      r9 \ Rt                  " S+5      r;S- r=S. r>S/ r?S0 r@S1 rAS2 rBg! \< a    S,r; Nf = f)4    N)_args_from_interpreter_flags   )process)	sub_debugdebuginfosub_warning
get_loggerlog_to_stderrget_temp_dirregister_after_fork
is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG
SUBWARNING   
            multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFc                 Z    [         (       a   [         R                  " [        U /UQ7SS06  g g N
stacklevel   )_loggerlogr   msgargss     Aplatform/bundledpythonunix/lib/python3.13/multiprocessing/util.pyr   r   -   s$    wHc7D7Q7     c                 Z    [         (       a   [         R                  " [        U /UQ7SS06  g g r   )r   r    DEBUGr!   s     r$   r   r   1   s$    wE344!4 r%   c                 Z    [         (       a   [         R                  " [        U /UQ7SS06  g g r   )r   r    INFOr!   s     r$   r   r   5   s$    wD#333 r%   c                 Z    [         (       a   [         R                  " [        U /UQ7SS06  g g r   )r   r    WARNINGr!   s     r$   _warnr,   9   s$    wGS646A6 r%   c                 Z    [         (       a   [         R                  " [        U /UQ7SS06  g g r   )r   r    r   r!   s     r$   r	   r	   =   s$    wJ9d9q9 r%   c                     SSK n U R                     [        (       d  U R                  [        5      qS[        l        [        [        S5      (       a5  [        R                  " [        5        [        R                  " [        5        OL[        R                  R                  [        S0 45        [        R                  R                  [        S0 45        SSS5        [        $ ! , (       d  f       [        $ = f)z(
Returns logger used by multiprocessing
r   N
unregister )logging_lockr   	getLoggerLOGGER_NAME	propagatehasattratexitr/   _exit_functionregister_exithandlersremoveappend)r1   s    r$   r
   r
   A   s    
 	w''4G !G v|,,!!.1/$$++^R,DE$$++^R,DE 
 N 
 Ns   CC!!
C4c                     SSK n[        5       nUR                  [        5      nUR	                  5       nUR                  U5        UR                  U5        U (       a  UR                  U 5        Sq[        $ )z:
Turn on logging and add a handler which prints to stderr
r   NT)
r1   r
   	FormatterDEFAULT_LOGGING_FORMATStreamHandlersetFormatter
addHandlersetLevel_log_to_stderrr   )levelr1   logger	formatterhandlers        r$   r   r   X   sb    
 \F!!"89I##%G#
gNNr%   c                  (    [         R                  S;   $ )N)linuxandroid)sysplatformr0   r%   r$   #_platform_supports_abstract_socketsrN   m   s    <<///r%   c                     U (       d  g[        U [        5      (       a  U S   S:H  $ [        U [        5      (       a  U S   S:H  $ [        SU < S35      e)NFr    zaddress type of z unrecognized)
isinstancebytesstr	TypeError)addresss    r$   is_abstract_socket_namespacerV   q   sT    '5!!qzQ	GS	!	!qzT!!
&wk?
@@r%   rJ   l   )openbsdfreebsdh   nt\   c                 d    U " U5        [         R                  " 5       nUb  S UR                  S'   g g )Ntempdir)r   current_process_config)rmtreer^   r_   s      r$   _remove_temp_dirrb      s4    
7O--/O "-1	* #r%   c                 @   [         R                  S:X  a  gU R                  5       n[        U5      S-   S-   nU[        ::  a  U$ / SQn U R                  U5      n[        SU5        [        U5      S-   S-   [        ::  d   eU$ ! [         a    [        SX5        Us $ f = f)zGet a temporary directory where socket files will be created.

To prevent additional imports, pass a pre-imported 'tempfile' module.
r[   N   )z/tmpz/var/tmpz/usr/tmpzProcess-wide temporary directory %s will not be usable for creating socket files and no usable system-wide temporary directory was found in %sz-Ignoring user-defined temporary directory: %s)osname
gettempdirlen_SUN_PATH_MAX_get_default_tempdirFileNotFoundErrorr,   )tempfilebase_tempdirsun_path_lendirlistbase_system_tempdirs        r$   _get_base_temp_dirrq      s    
 
ww$ &&(L |$r)B.L}$ /G	&;;GD 

9<H"#b(2->>>   *+7	B s   B BBc                  B   [         R                  " 5       R                  R                  S5      n U cm  SS KnSS Kn[        U5      nUR                  SUS9n [        SU 5        [        S [        UR                  U 4SS9  U [         R                  " 5       R                  S'   U $ )Nr^   r   zpymp-)prefixdirzcreated temp directory %si)r#   exitpriority)r   r_   r`   getshutilrl   rq   mkdtempr   r   rb   ra   )r^   rw   rl   rm   s       r$   r   r      s    %%'//33I>G)(3""'|"D('2 	'v}}g.F"	$7>!)))4Nr%   c                      [        [        R                  5       5      n U R                  5         U  H  u  u  pp4 U" U5        M     g ! [         a  n[        SU5         S nAM2  S nAff = f)Nz after forker raised exception %s)list_afterfork_registryitemssort	Exceptionr   )r|   indexidentfuncobjes         r$   _run_after_forkersr      s]    $**,-E	JJL%*!t	8I &+  	83Q77	8s   A
A'A""A'c                 H    U [         [        [        5      [        U 5      U4'   g N)r{   next_afterfork_counterid)r   r   s     r$   r   r      s    EH012c7DABr%   c                   Z    \ rS rSrSrS
S jrS\\\R                  4S jr
S rS rS rS	rg)r      z9
Class which supports object finalization using weakrefs
Nc                    Ub9  [        U[        5      (       d$  [        SR                  U[	        U5      5      5      eUb  [
        R                  " X5      U l        OUc  [        S5      eX l	        X0l
        U=(       d    0 U l        U[        [        5      4U l        [        R                   " 5       U l        U [$        U R                  '   g )Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)rQ   intrT   formattypeweakrefref_weakref
ValueError	_callback_args_kwargsr   _finalizer_counter_keyre   getpid_pid_finalizer_registry)selfr   callbackr#   kwargsru   s         r$   __init__Finalize.__init__   s    $jc.J.JELL $|"467 7 ?#KK2DM!JKK!
|!4(:#;<	IIK	)-DII&r%   c                 t    X R                   	 U R                  U" 5       :w  a  U" S5        SnOOU" SU R                  U R                  U R                  5        U R                  " U R                  0 U R                  D6nS=U l        =U l        =U l        =U l        U l         U$ ! [         a    U" S5         gf = f)zA
Run the callback unless it has already been called or cancelled
z+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %szfinalizer no longer registered)r   r   r   r   r   r   KeyError)r   wrr   r   r   ress         r$   __call__Finalize.__call__  s    	#II. yyFH$GHK..$**dllDnndjjADLLA7;<DM <DN <TZ < L49J  	867	8s   B" "B76B7c                      [         U R                  	 S=U l        =U l        =U l        =U l        U l        g! [         a     gf = f)z#
Cancel finalization of the object
N)r   r   r   r   r   r   r   r   s    r$   cancelFinalize.cancel(  sU    	<#DII.
 8<<DM <DN <TZ < L49	  		s   7 
AAc                 (    U R                   [        ;   $ )zC
Return whether this finalizer is still waiting to invoke callback
)r   r   r   s    r$   still_activeFinalize.still_active4  s     yy///r%   c                     U R                  5       nUc  SU R                  R                  -  $ SU R                  R                  < S[        U R                  SU R                  5      < 3nU R                  (       a  US[        U R                  5      -   -  nU R                  (       a  US[        U R                  5      -   -  nU R                  S   b  US[        U R                  S   5      -   -  nUS	-   $ ! [        [        4 a    S n Nf = f)
Nz<%s object, dead><z object, callback=__name__z, args=z	, kwargs=r   z, exitpriority=>)r   AttributeErrorrT   	__class__r   getattrr   r   rS   r   r   )r   r   xs      r$   __repr__Finalize.__repr__:  s    	--/C ;&)@)@@@  ''
DNNCE ::S_,,A<<s4<<000A99Q<#"S1%666A3w 	* 	C	s   C6 6D
D)r   r   r   r   r   r   )r0   NN)r   
__module____qualname____firstlineno____doc__r   r   r   re   r   r   r   r   r   __static_attributes__r0   r%   r$   r   r      s3    .&  &9$RYY	0
<0r%   r   c                   ^  [         c  gT c  S nOU 4S jn[        [         5       Vs/ s H  o!" U5      (       d  M  UPM     nnUR                  SS9  U H1  n[         R                  U5      nUc  M  [	        SU5         U" 5         M3     T c  [         R                  5         ggs  snf ! [
         a    SSKnUR                  5          Mt  f = f)z
Run all finalizers whose exit priority is not None and at least minpriority

Finalizers with highest priority are called first; finalizers with
the same priority will be called in reverse order of creation.
Nc                     U S   S L$ Nr   r0   )ps    r$   <lambda>!_run_finalizers.<locals>.<lambda>]  s    qt4'r%   c                 0   > U S   S L=(       a    U S   T:  $ r   r0   )r   minprioritys    r$   r   r   _  s    qt4'?AaDK,??r%   T)reversez
calling %sr   )	r   rz   r}   rv   r   r~   	traceback	print_excclear)r   fkeykeys	finalizerr   s   `     r$   _run_finalizersr   O  s     " 	'?   34?4C#C4D?IIdI'++C0	 lI.&  !!#  @  & ##%&s   B#B#?B((C
	C
c                  ,    [         =(       d    [         SL $ )z.
Returns true if the process is shutting down
N)_exitingr0   r%   r$   r   r   {  s     'x4''r%   c                 |   [         (       d  Sq U " S5        U" S5        U" S5        U" 5       b  U" 5        HC  nUR                  (       d  M  U " SUR                  5        UR                  R	                  5         ME     U" 5        H&  nU " SUR                  5        UR                  5         M(     U" S5        U" 5         g g )NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0r   z!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)r   daemonrf   _popen	terminatejoin)r   r   r   active_childrenr_   r   s         r$   r8   r8     s     8$%BC( %&888<affEHH&&( '
 %&4aff= ' 	9:? r%   c                   ,    \ rS rSrS rS rS rS rSrg)r   i  c                     [         R                  " 5       U l        U R                  R                  U l        U R                  R                  U l        [        U [        R                  5        g r   )	threadingLockr2   acquirereleaser   r   _at_fork_reinitr   s    r$   r   ForkAwareThreadLock.__init__  sC    ^^%
zz))zz))D"5"E"EFr%   c                 8    U R                   R                  5         g r   )r2   r   r   s    r$   r   #ForkAwareThreadLock._at_fork_reinit  s    

""$r%   c                 6    U R                   R                  5       $ r   )r2   	__enter__r   s    r$   r   ForkAwareThreadLock.__enter__  s    zz##%%r%   c                 4    U R                   R                  " U6 $ r   )r2   __exit__)r   r#   s     r$   r   ForkAwareThreadLock.__exit__  s    zz""D))r%   )r2   r   r   N)	r   r   r   r   r   r   r   r   r   r0   r%   r$   r   r     s    G%&*r%   r   c                        \ rS rSrS rS rSrg)r   i  c                     [        U S 5        g )Nc                 6    U R                   R                  5       $ r   )__dict__r   )r   s    r$   r   )ForkAwareLocal.__init__.<locals>.<lambda>  s    s||/A/A/Cr%   )r   r   s    r$   r   ForkAwareLocal.__init__  s    D"CDr%   c                     [        U 5      S4$ )Nr0   )r   r   s    r$   
__reduce__ForkAwareLocal.__reduce__  s    Dz2~r%   r0   N)r   r   r   r   r   r   r   r0   r%   r$   r   r     s    Er%   r   SC_OPEN_MAX   c                     [        U 5      S[        /-   n U R                  5         U S   [        :X  d   S5       e[        [	        U 5      S-
  5       H$  n[
        R                  " X   S-   XS-      5        M&     g )Nzfd too larger   )rz   MAXFDr}   rangerh   re   
closerange)fdsis     r$   r   r     se    
s)r5k
!CHHJr7e+^+3s8a< 
cfQhaC) !r%   c                     [         R                  c  g  [         R                  R                  5          [
        R                  " [
        R                  [
        R                  5      n  [        U SSS9[         l        g ! [        [        4 a     N\f = f!   [
        R                  " U 5        e = f! [        [        4 a     g f = f)Nzutf-8F)encodingclosefd)	rL   stdincloseOSErrorr   re   opendevnullO_RDONLY)fds    r$   _close_stdinr    s    
yy		WWRZZ-	R'5ACI Z  	HHRLZ  s4   A< 3B. 'B <BBB++B. .C Cc                       [         R                  R                  5          [         R
                  R                  5         g ! [        [        4 a     N2f = f! [        [        4 a     g f = fr   )rL   stdoutflushr   r   stderrr0   r%   r$   _flush_std_streamsr    s]    



 J'  J' s"   A  A  AAA)(A)c                    SS K nSS Kn[        [        [	        [
        U5      5      5      n[        R                  " 5       u  pV UR                  X/SUS S SSSSSSXVSSSS S S SS UR                  5      [        R                  " U5        [        R                  " U5        $ ! [        R                  " U5        [        R                  " U5        f = f)Nr   Tr   F)_posixsubprocess
subprocesstuplesortedmapr   re   pipe	fork_exec
_USE_VFORKr   )pathr#   passfdsr	  r
  errpipe_readerrpipe_writes          r$   spawnv_passfdsr    s    F3sG,-.G"$'')L ))&$tBBL5"dD$D!!	# 	
 	
s   /B .Cc                  B    U  H  n[         R                  " U5        M     g)z/Close each file descriptor given as an argumentN)re   r   )r   r  s     r$   	close_fdsr    s    
 r%   c                     SSK Jn   [        R                  " 5         SSKJn  UR                  R                  5         SSKJn  UR                  R                  5         [        5         U R                  5         U R                  5         g)zGCleanup multiprocessing resources when multiprocessing tests
completed.r   )support)
forkserver)resource_trackerN)testr  r   _cleanupr   r  _forkserver_stopr  _resource_trackerr   
gc_collectreap_children)r  r  r  s      r$   _cleanup_testsr#    sc       +  " 1&&,,. r%   r   )Cre   	itertoolsrL   r   r7   r   r
  r    r   __all__NOTSETr   r'   r)   r   r+   r4   r?   r   rD   r   r   r   r,   r	   r
   r   rN   rV   abstract_sockets_supportedrM   ri   
startswithrf   rb   rq   r   WeakValueDictionaryr{   countr   r   r   r   r   objectr   r   r   r   r   r_   r8   r9   r   localr   sysconfr   r~   r   r  r  r  r  r#  r0   r%   r$   <module>r/     s   
  
    3  

	

F 
8547:.*0A AB  <<7M\\344M GGtODM24l& 113 __& 8I  __& Sv Sl&$X( E?#*#:#:#*#:#:(T  *& *"Y__ JJ}%E*.  Q  Es   E: :FF