
    F\hj-                        S SK r S SKJ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	J
r
  SSKJr  S/r\R                  S:X  a  S SKr " S S	\5      rO$ " S
 S	\5      rS rS r\	R(                  " \\5         " S S\5      r " S S\5      rg)    N)defaultdict   )	reductionassert_spawning)utilBufferWrapperwin32c                   L    \ rS rSrSr\R                  " 5       rS rS r	S r
Srg)Arena   z<
A shared memory area backed by anonymous memory (Windows).
c                 v   Xl         [        S5       Hp  nS[        R                  " 5       [	        U R
                  5      4-  n[        R                  " SXS9n[        R                  " 5       S:X  a    OUR                  5         Mr     [        S5      eX0l        X@l        U R                   U R                  4U l        g )Nd   z	pym-%d-%stagnamer   zCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiGetLastErrorcloseFileExistsErrornamebuffer_state)selfr   ir   bufs        +/usr/lib/python3.13/multiprocessing/heap.py__init__Arena.__init__&   s    I3Z"biik4

3C%DDiiD7'')Q.		   &&EFFIK99dii0DK    c                 0    [        U 5        U R                  $ N)r   r   )r    s    r#   __getstate__Arena.__getstate__5   s    D!;;r&   c                     U=u  U l         U l        U l        [        R                  " SU R                   U R                  S9U l        g )Nr   r   )r   r   r   r   r   )r    states     r#   __setstate__Arena.__setstate__9   s3    166 DIty4;))B		499EDKr&   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__tempfile_RandomNameSequencer   r$   r)   r-   __static_attributes__ r&   r#   r   r      s'    	 ,,.	1		Fr&   r   c                   T    \ rS rSrSr\R                  S:X  a  S/rO/ rS	S jrS r	Sr
g)
r   C   z:
A shared memory area backed by a temporary file (POSIX).
linuxz/dev/shmc                    Xl         X l        US:X  a  [        R                  " S[        R
                  " 5       -  U R                  U5      S9u  U l        n[        R                  " U5        [        R                  " U [        R                  U R                  45        [        R                  " U R                  U5        [        R                  " U R                  U R                   5      U l        g )Nr   zpym-%d-)prefixdir)r   fdr4   mkstempr   r   _choose_dirunlinkr   Finalizer   	ftruncater   r   )r    r   r>   r   s       r#   r$   r%   M   s    IGRx !) 0 0%biik1))$/!1 		$dBHHtwwj9TWWd+))DGGTYY7DKr&   c                     U R                    H:  n[        R                  " U5      nUR                  UR                  -  U:  d  M8  Us  $    [
        R                  " 5       $ r(   )_dir_candidatesr   statvfsf_bavailf_frsizer   get_temp_dir)r    r   dsts       r#   r@   Arena._choose_dir[   sL     ))ZZ];;,4H * $$&&r&   )r   r>   r   N)r   )r/   r0   r1   r2   r3   sysplatformrE   r$   r@   r6   r7   r&   r#   r   r   C   s+    	 <<7")lO O	8	'r&   c                     U R                   S:X  a  [        S5      e[        U R                  [        R
                  " U R                   5      44$ )Nr   zDArena is unpicklable because forking was enabled when it was created)r>   
ValueErrorrebuild_arenar   r   DupFd)as    r#   reduce_arenarT   d   sC    442: G H Hqvvyqtt'<===r&   c                 4    [        XR                  5       5      $ r(   )r   detach)r   dupfds     r#   rQ   rQ   j   s    T<<>**r&   c                       \ rS rSrSrSrSr\R                  4S jr	\
S 5       rS rS rS rS	 rS
 rS rS rS rS rSrg)Heaps      i  @ c                    [         R                  " 5       U l        [        R                  " 5       U l        Xl        / U l        0 U l        0 U l	        0 U l
        [        [        5      U l        / U l        / U l        SU l        SU l        g Nr   )r   r   _lastpid	threadingLock_lock_size_lengths_len_to_seq_start_to_block_stop_to_blockr   set_allocated_blocks_arenas_pending_free_blocks
_n_mallocs_n_frees)r    r   s     r#   r$   Heap.__init__{   sw    		^^%

   " ! "-S!1 %'! r&   c                     US-
  nX-   U) -  $ )Nr   r7   )n	alignmentmasks      r#   _roundupHeap._roundup   s     1}TE!!r&   c                 L   U R                  [        U R                  U5      [        R                  5      nU R                  U R
                  :  a  U =R                  S-  sl        [        R                  " SU5        [        U5      nU R                  R                  U5        USU4$ )N   z"allocating a new mmap of length %dr   )rr   maxrb   r   PAGESIZE_DOUBLE_ARENA_SIZE_UNTILr   infor   ri   append)r    r   lengtharenas       r#   
_new_arenaHeap._new_arena   sy    s4::t4dmmD ::555JJ!OJ		6?fE"q&!!r&   c                    UR                   nX R                  :  a  g U R                  R                  U5      nU(       a   eU R                  US4	 U R
                  X4	 U R                  R                  U5        U R                  U   nUR                  USU45        U(       d)  U R                  U	 U R                  R                  U5        g g r]   )
r   _DISCARD_FREE_SPACE_LARGER_THANrh   popre   rf   ri   removerd   rc   )r    r|   r{   blocksseqs        r#   _discard_arenaHeap._discard_arena   s     888''++E2z  %,0E"v&

E1f%&  (MM  ( r&   c                 |   [         R                  " U R                  U5      nU[        U R                  5      :X  a  U R	                  U5      $ U R                  U   nU R
                  U   nUR                  5       nU(       d  U R
                  U	 U R                  U	 Uu  pgnU R                  Xg4	 U R                  Xh4	 U$ r(   )	bisectbisect_leftrc   lenr}   rd   r   re   rf   )	r    r   r!   r{   r   blockr|   startstops	            r#   _mallocHeap._malloc   s    t}}d3DMM""??4((]]1%F""6*CGGIE$$V,dmmA.>$t  %0.r&   c                    Uu  p#n U R                   X#4   nU R                  U5      u  p6 U R                  X$4   nU R                  U5      u  pdX#U4nXC-
  n U R                  U   R                  U5        XR                  X#4'   XR                   X$4'   g ! [         a     Nvf = f! [         a     Nbf = f! [         a4    U/U R                  U'   [        R                  " U R                  U5         N|f = fr(   )	rf   _absorbKeyErrorre   rd   rz   r   insortrc   )	r    r   r|   r   r   
prev_block_
next_blockr{   s	            r#   _add_free_blockHeap._add_free_block   s
   $t	0,,e^<J ||J/HE	/--um<J ll:.GAt$	1V$++E2
 05e^,-2UM*-  		  		  	1(-wDV$MM$--0	1s4   B B$ B4 
B! B!$
B10B14;C21C2c                     Uu  p#nU R                   X#4	 U R                  X$4	 XC-
  nU R                  U   nUR                  U5        U(       d(  U R                  U	 U R                  R                  U5        X44$ r(   )re   rf   rd   r   rc   )r    r   r|   r   r   r{   r   s          r#   r   Heap._absorb   sz    $t  %0.v&

5  (MM  ({r&   c                     Uu  p#nU R                   U   nUR                  X445        U(       d  U R                  U5        g g r(   )rh   r   r   )r    r   r|   r   r   r   s         r#   _remove_allocated_blockHeap._remove_allocated_block   s@    "d''.um$& r&   c                       U R                   R                  5       nU R                  U5        U R	                  U5        M?  ! [         a     g f = fr(   )rj   r   
IndexErrorr   r   r    r   s     r#   _free_pending_blocksHeap._free_pending_blocks  sU    11557   '((/   s   A 
AAc                 4   [         R                  " 5       U R                  :w  a8  [        SR	                  [         R                  " 5       U R                  5      5      eU R
                  R                  S5      (       d  U R                  R                  U5        g  U =R                  S-  sl	        U R                  5         U R                  U5        U R                  U5        U R
                  R                  5         g ! U R
                  R                  5         f = f)Nz$My pid ({0:n}) is not last pid {1:n}Fr   )r   r   r^   rP   formatra   acquirerj   rz   rl   r   r   r   releaser   s     r#   free	Heap.free  s     99;$--'6==IIK/0 0 zz!!%(( %%,,U3%"))+$$U+,,U3

""$

""$s   AC; ;Dc                    US:  a  [        SR                  U5      5      e[        R                  U::  a  [	        SR                  U5      5      e[
        R                  " 5       U R                  :w  a  U R                  5         U R                     U =R                  S-  sl
        U R                  5         U R                  [        US5      U R                  5      nU R                  U5      u  p#nX1-   nXT:  a  U R!                  X%U45        U R"                  U   R%                  X545        X#U4sS S S 5        $ ! , (       d  f       g = f)Nr   Size {0:n} out of rangeSize {0:n} too larger   )rP   r   rM   maxsizeOverflowErrorr   r   r^   r$   ra   rk   r   rr   rv   
_alignmentr   r   rh   add)r    r   r|   r   r   	real_stops         r#   mallocHeap.malloc(  s    !86==dCDD;;$ 6 = =d CDD99;$--'MMOZZOOq O%%'==T1t?D#'<<#5 U4I $$e%=>""5)--u.@A), ZZs   BD66
E)rh   ri   r^   rd   rc   ra   rl   rk   rj   rb   re   rf   N)r/   r0   r1   r2   r   r   rx   r   rw   r$   staticmethodrr   r}   r   r   r   r   r   r   r   r   r6   r7   r&   r#   rY   rY   s   sb     J&3#, MM : " "

")$"3<'0%8-r&   rY   c                   .    \ rS rSr\" 5       rS rS rSrg)r   iB  c                 L   US:  a  [        SR                  U5      5      e[        R                  U::  a  [	        SR                  U5      5      e[
        R                  R                  U5      nX!4U l        [        R                  " U [
        R                  R                  U4S9  g )Nr   r   r   )args)rP   r   rM   r   r   r   _heapr   r   r   rB   r   )r    r   r   s      r#   r$   BufferWrapper.__init__F  s    !86==dCDD;;$ 6 = =d CDD##**40mdM//44E8Dr&   c                 X    U R                   u  u  pp4[        UR                  5      X"U-    $ r(   )r   
memoryviewr   )r    r|   r   r   r   s        r#   create_memoryviewBufferWrapper.create_memoryviewO  s+    %)[["t%,,'Dj99r&   )r   N)	r/   r0   r1   r2   rY   r   r$   r   r6   r7   r&   r#   r   r   B  s    FEE:r&   )r   collectionsr   r   r   rM   r4   r_   contextr   r    r   __all__rN   r   objectr   rT   rQ   registerrY   r   r7   r&   r#   <module>r      s     #  	 
   / 
 <<7F FH' 'B>+ ul+I-6 I-^:F :r&   