
    F\h6                     l   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qSqS rS rS rS rS rS*S jrS rS r\" 5       rS rS r\R>                  " 5       r \RB                  " 5       r"S r#S r$0 r%\RB                  " 5       r& " S S\'5      r(S*S jr)S r*Sq+\\\)\	RX                  \	RZ                  4S jr.\R^                  " \.5         " S S\'5      r0 " S  S!\Rb                  5      r2 \ Rf                  " S"5      r4S$ r6S% r7S& r8S' r9S( r:S) r;g! \5 a    S#r4 Nf = f)+    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     +/usr/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   0   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   4   s$    wD#333 r$   c                 Z    [         (       a   [         R                  " [        U /UQ7SS06  g g r   )r   r   r   r    s     r#   r	   r	   8   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)r-   s    r#   r
   r
   <   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)
r-   r
   	FormatterDEFAULT_LOGGING_FORMATStreamHandlersetFormatter
addHandlersetLevel_log_to_stderrr   )levelr-   logger	formatterhandlers        r#   r   r   S   sb    
 \F!!"89I##%G#
gNNr$   c                  (    [         R                  S;   $ )N)linuxandroid)sysplatformr,   r$   r#   #_platform_supports_abstract_socketsrJ   h   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_namespacerR   l   sT    '5!!qzQ	GS	!	!qzT!!
&wk?
@@r$   c                 d    U " U5        [         R                  " 5       nUb  S UR                  S'   g g )Ntempdir)r   current_process_config)rmtreerT   rU   s      r#   _remove_temp_dirrX   |   s4    
7O--/O "-1	* #r$   c                  *   [         R                  " 5       R                  R                  S5      n U ca  SS KnSS KnUR                  SS9n [        SU 5        [        S [        UR                  U 4SS9  U [         R                  " 5       R                  S'   U $ )NrT   r   zpymp-)prefixzcreated temp directory %si)r"   exitpriority)r   rU   rV   getshutiltempfilemkdtempr   r   rX   rW   )rT   r]   r^   s      r#   r   r      s    %%'//33I>G""'"2('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   )rc   indexidentfuncobjes         r#   _run_after_forkersrk      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)rb   next_afterfork_counterid)ri   rh   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)rM   intrP   formattypeweakrefref_weakref
ValueError	_callback_args_kwargsrn   _finalizer_counter_keyosgetpid_pid_finalizer_registry)selfri   callbackr"   kwargsr[   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}   ry   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   ry   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_active   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=>)ry   AttributeErrorrP   	__class__r   getattrr{   r|   rO   r}   r   )r   ri   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   ry   )r,   NN)r   
__module____qualname____firstlineno____doc__r   r   r   r   r   r   r   r   r   __static_attributes__r,   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   r,   )ps    r#   <lambda>!_run_finalizers.<locals>.<lambda>  s    qt4'r$   c                 0   > U S   S L=(       a    U S   T:  $ r   r,   )r   minprioritys    r#   r   r     s    qt4'?AaDK,??r$   T)reversez
calling %sr   )	r   ra   rd   r\   r   re   	traceback	print_excclear)r   fkeykeys	finalizerr   s   `     r#   _run_finalizersr     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)_exitingr,   r$   r#   r   r   0  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   daemonname_popen	terminatejoin)r   r   r   active_childrenrU   r   s         r#   r4   r4   8  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   ih  c                     [         R                  " 5       U l        U R                  R                  U l        U R                  R                  U l        [        U [        R                  5        g rm   )	threadingLockr.   acquirereleaser   r   _at_fork_reinitr   s    r#   r   ForkAwareThreadLock.__init__i  sC    ^^%
zz))zz))D"5"E"EFr$   c                 8    U R                   R                  5         g rm   )r.   r   r   s    r#   r   #ForkAwareThreadLock._at_fork_reinito  s    

""$r$   c                 6    U R                   R                  5       $ rm   )r.   	__enter__r   s    r#   r   ForkAwareThreadLock.__enter__r  s    zz##%%r$   c                 4    U R                   R                  " U6 $ rm   )r.   __exit__)r   r"   s     r#   r   ForkAwareThreadLock.__exit__u  s    zz""D))r$   )r.   r   r   N)	r   r   r   r   r   r   r   r   r   r,   r$   r#   r   r   h  s    G%&*r$   r   c                        \ rS rSrS rS rSrg)r   iy  c                     [        U S 5        g )Nc                 6    U R                   R                  5       $ rm   )__dict__r   )ri   s    r#   r   )ForkAwareLocal.__init__.<locals>.<lambda>{  s    s||/A/A/Cr$   )r   r   s    r#   r   ForkAwareLocal.__init__z  s    D"CDr$   c                     [        U 5      S4$ )Nr,   )rv   r   s    r#   
__reduce__ForkAwareLocal.__reduce__|  s    Dz2~r$   r,   N)r   r   r   r   r   r   r   r,   r$   r#   r   r   y  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   )ra   MAXFDrd   rangelenr   
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)	rH   stdincloseOSErrorrz   r   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rm   )rH   stdoutflushr   rz   stderrr,   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maprt   r   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)r   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$   rm   )<r   	itertoolsrH   rw   r3   r   r   r    r   __all__NOTSETr   r&   r(   r   r0   r;   r   r@   r   r   r   r	   r
   r   rJ   rR   abstract_sockets_supportedrX   r   WeakValueDictionaryrb   countro   rk   r   r   r~   objectr   r   r   r   r   rU   r4   r5   r   localr   sysconfr   re   r   r   r   r   r  r  r,   r$   r#   <module>r     s   
  
    3  

	
F 
854:.*0A AB 2$ 113 __& 8I  __& Sv Sl&$X( E?#*#:#:#*#:#:(T  *& *"Y__ JJ}%E*.  Q  Es   D( (D32D3