Ë
    òT•jj-  ã                   ó  — d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZddlm	Z	m
Z
 ddlmZ dgZej                  dk(  rd dlZ G d„ d	e«      Zn$ G d
„ d	e«      Zd„ Zd„ Z e	j(                  ee«        G d„ de«      Z G d„ de«      Zy)é    N)Údefaultdicté   )Ú	reductionÚassert_spawning)ÚutilÚBufferWrapperÚwin32c                   óD   — e Zd ZdZ ej
                  «       Zd„ Zd„ Zd„ Z	y)ÚArenazL
        A shared memory area backed by anonymous memory (Windows).
        c                 óx  — || _         t        d«      D ]o  }dt        j                  «       t	        | j
                  «      fz  }t        j                  d||¬«      }t        j                  «       dk(  r n|j                  «        Œq t        d«      ‚|| _        || _        | j                   | j                  f| _        y )Néd   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.12/multiprocessing/heap.pyÚ__init__zArena.__init__&   s›   € ØˆDŒIÜ˜3“Zò G�Ø"¤b§i¡i£k´4¸¿
¹
Ó3CÐ%DÑD�Ü—i‘i  D°$Ô7�Ü×'Ñ'Ó)¨QÒ.Ùà—	‘	•ðGô &Ð&EÓFÐFØˆDŒIØˆDŒKØŸ9™9 d§i¡iÐ0ˆD�Kó    c                 ó0   — t        | «       | j                  S ©N)r   r   )r   s    r"   Ú__getstate__zArena.__getstate__5   s   € Ü˜DÔ!Ø—;‘;Ðr$   c                 ó’   — |x\  | _         | _        | _        t        j                  d| j                   | j                  ¬«      | _        y )Nr   r   )r   r   r   r   r   )r   Ústates     r"   Ú__setstate__zArena.__setstate__9   s3   € Ø16Ð6Ñ ˆDŒI�t”y 4¤;äŸ)™) B¨¯	©	¸4¿9¹9ÔEˆD�Kr$   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtempfileÚ_RandomNameSequencer   r#   r'   r*   © r$   r"   r   r      s)   „ ñ	ð -�×,Ñ,Ó.ˆò	1ò	ó	Fr$   r   c                   óH   — e Zd ZdZej
                  dk(  rdgZng Zdd„Zd„ Zy)r   zJ
        A shared memory area backed by a temporary file (POSIX).
        Úlinuxz/dev/shmc                 óØ  — || _         || _        |dk(  r¨t        j                  dt	        j
                  «       z  | j                  |«      ¬«      \  | _        }t	        j                  |«       t        j                  | t        j                  | j                  f«       t	        j                  | j                  |«       t        j                  | j                  | j                   «      | _        y )Nr   zpym-%d-)ÚprefixÚdir)r   Úfdr/   Úmkstempr   r   Ú_choose_dirÚunlinkr   ÚFinalizer   Ú	ftruncater   r   )r   r   r7   r   s       r"   r#   zArena.__init__M   sž   € ØˆDŒIØˆDŒGØ�RŠxô !)× 0Ñ 0Ø%¤b§i¡i£kÑ1Ø×)Ñ)¨$Ó/ô!1‘�”˜ô —	‘	˜$”Ü—‘˜d¤B§H¡H¨t¯w©w¨jÔ9Ü—‘˜TŸW™W dÔ+ÜŸ)™) D§G¡G¨T¯Y©YÓ7ˆD�Kr$   c                 ó¶   — | j                   D ]7  }t        j                  |«      }|j                  |j                  z  |k\  sŒ5|c S  t        j                  «       S r&   )Ú_dir_candidatesr   ÚstatvfsÚf_bavailÚf_frsizer   Úget_temp_dir)r   r   ÚdÚsts       r"   r9   zArena._choose_dir[   sQ   € ð ×)Ñ)ò �Ü—Z‘Z “]�Ø—;‘; §¡Ñ,°Ó4Ø’Hðô ×$Ñ$Ó&Ð&r$   N)r   )	r+   r,   r-   r.   ÚsysÚplatformr>   r#   r9   r1   r$   r"   r   r   C   s+   „ ñ	ð �<‰<˜7Ò"Ø)˜l‰Oà ˆOó	8ó	'r$   c                 ó˜   — | j                   dk(  rt        d«      ‚t        | j                  t	        j
                  | j                   «      ffS )Nr   zDArena is unpicklable because forking was enabled when it was created)r7   Ú
ValueErrorÚrebuild_arenar   r   ÚDupFd)Úas    r"   Úreduce_arenarL   d   sC   € Ø�4‰4�2Š:Üð Gó Hð Hä˜qŸv™v¤y§¡°q·t±tÓ'<Ð=Ð=Ð=r$   c                 ó6   — t        | |j                  «       «      S r&   )r   Údetach)r   Údupfds     r"   rI   rI   j   s   € Ü�T˜5Ÿ<™<›>Ó*Ð*r$   c                   ó|   — e Zd ZdZdZdZej                  fd„Ze	d„ «       Z
d„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zy)ÚHeapé   i  @ c                 ó  — t        j                  «       | _        t        j                  «       | _        || _        g | _        i | _        i | _	        i | _
        t        t        «      | _        g | _        g | _        d| _        d| _        y ©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#   zHeap.__init__{   sy   € ÜŸ	™	›ˆŒÜ—^‘^Ó%ˆŒ
àˆŒ
àˆŒð ˆÔð  "ˆÔð !ˆÔô "-¬SÓ!1ˆÔØˆŒð %'ˆÔ!ð ˆŒØˆ�r$   c                 ó   — |dz
  }| |z   | z  S )Nr   r1   )ÚnÚ	alignmentÚmasks      r"   Ú_roundupzHeap._roundup˜   s   € ð ˜1‰}ˆØ�D‘˜T˜EÑ!Ð!r$   c                 óH  — | j                  t        | j                  |«      t        j                  «      }| j                  | j
                  k  r| xj                  dz  c_        t        j                  d|«       t        |«      }| j                  j                  |«       |d|fS )Né   z"allocating a new mmap of length %dr   )rh   ÚmaxrY   r   ÚPAGESIZEÚ_DOUBLE_ARENA_SIZE_UNTILr   Úinfor   r`   Úappend)r   r   ÚlengthÚarenas       r"   Ú
_new_arenazHeap._new_arenaž   sy   € à—‘œs 4§:¡:¨tÓ4´d·m±mÓDˆð �:‰:˜×5Ñ5Ò5Ø�JŠJ˜!‰O�JÜ�	‰	Ð6¸Ô?Ü�f“ˆØ�‰×Ñ˜EÔ"Ø�q˜&Ð!Ð!r$   c                 óˆ  — |j                   }|| j                  k  ry | j                  j                  |«      }|rJ ‚| j                  |df= | j
                  ||f= | j                  j                  |«       | j                  |   }|j                  |d|f«       |s)| j                  |= | j                  j                  |«       y y rT   )
r   Ú_DISCARD_FREE_SPACE_LARGER_THANr_   Úpopr\   r]   r`   Úremover[   rZ   )r   rq   rp   ÚblocksÚseqs        r"   Ú_discard_arenazHeap._discard_arenaª   s½   € à—‘ˆð �D×8Ñ8Ò8ØØ×'Ñ'×+Ñ+¨EÓ2ˆÙÐˆzØ× Ñ  %¨ Ð,Ø×Ñ ¨ Ð0Ø�‰×Ñ˜EÔ"Ø×Ñ˜vÑ&ˆØ�
‰
�E˜1˜fÐ%Ô&ÙØ× Ñ  Ð(Ø�M‰M× Ñ  Õ(ð r$   c                 ót  — t        j                  | j                  |«      }|t        | j                  «      k(  r| j	                  |«      S | j                  |   }| j
                  |   }|j                  «       }|s| j
                  |= | j                  |= |\  }}}| j                  ||f= | j                  ||f= |S r&   )	ÚbisectÚbisect_leftrZ   Úlenrr   r[   ru   r\   r]   )	r   r   r    rp   rx   Úblockrq   ÚstartÚstops	            r"   Ú_malloczHeap._malloc¼   s²   € ä×Ñ˜tŸ}™}¨dÓ3ˆØ”�D—M‘MÓ"Ò"Ø—?‘? 4Ó(Ð(à—]‘] 1Ñ%ˆFØ×"Ñ" 6Ñ*ˆCØ—G‘G“IˆEÙØ×$Ñ$ VÐ,¨d¯m©m¸AÐ.>à$Ñˆ��tØ× Ñ  %¨ Ð0Ø×Ñ ¨ Ð.Øˆr$   c                 óø  — |\  }}}	 | j                   ||f   }| j                  |«      \  }}	 | j                  ||f   }| j                  |«      \  }}|||f}||z
  }	 | j                  |   j                  |«       || j                  ||f<   || j                   ||f<   y # t        $ r Y Œ}w xY w# t        $ r Y Œfw xY w# t        $ r3 |g| j                  |<   t        j                  | j                  |«       Y Œ|w xY wr&   )	r]   Ú_absorbÚKeyErrorr\   r[   ro   r{   ÚinsortrZ   )	r   r~   rq   r   r€   Ú
prev_blockÚ_Ú
next_blockrp   s	            r"   Ú_add_free_blockzHeap._add_free_blockÍ   s   € à$Ñˆ��tð	0Ø×,Ñ,¨e°U¨^Ñ<ˆJð —|‘| JÓ/‰HˆE�1ð	/Ø×-Ñ-¨u°d¨mÑ<ˆJð —l‘l :Ó.‰GˆAˆtà˜˜tÐ$ˆØ˜‘ˆð	1Ø×Ñ˜VÑ$×+Ñ+¨EÔ2ð
 05ˆ×Ñ˜e U˜^Ñ,Ø-2ˆ×Ñ˜U D˜MÒ*øô- ò 	Ùð	ûô ò 	Ùð	ûô ò 	1Ø(- wˆD×Ñ˜VÑ$Ü�M‰M˜$Ÿ-™-¨Ö0ð	1ús4   ˆB ®B. ÁB= Â	B+Â*B+Â.	B:Â9B:Â=9C9Ã8C9c                 óð   — |\  }}}| j                   ||f= | j                  ||f= ||z
  }| j                  |   }|j                  |«       |s(| j                  |= | j                  j                  |«       ||fS r&   )r\   r]   r[   rv   rZ   )r   r~   rq   r   r€   rp   rx   s          r"   rƒ   zHeap._absorbë   s„   € à$Ñˆ��tØ× Ñ  %¨ Ð0Ø×Ñ ¨ Ð.à˜‘ˆØ×Ñ˜vÑ&ˆØ�
‰
�5ÔÙØ× Ñ  Ð(Ø�M‰M× Ñ  Ô(à�dˆ{Ðr$   c                 ó|   — |\  }}}| j                   |   }|j                  ||f«       |s| j                  |«       y y r&   )r_   rv   ry   )r   r~   rq   r   r€   rw   s         r"   Ú_remove_allocated_blockzHeap._remove_allocated_blockú   sD   € Ø"Ñˆˆu�dØ×'Ñ'¨Ñ.ˆØ�‰�u˜d�mÔ$Ùà×Ñ Õ&ð r$   c                 óž   — 	 	 | j                   j                  «       }| j                  |«       | j	                  |«       Œ># t        $ r Y y w xY wr&   )ra   ru   Ú
IndexErrorr‰   rŒ   ©r   r~   s     r"   Ú_free_pending_blockszHeap._free_pending_blocks  sU   € àðØ×1Ñ1×5Ñ5Ó7�ð × Ñ  Ô'Ø×(Ñ(¨Ô/ð øô ò Ùðús   ƒA  Á 	AÁAc                 ó$  — t        j                  «       | j                  k7  r7t        dj	                  t        j                  «       | j                  «      «      ‚| j
                  j                  d«      s| j                  j                  |«       y 	 | xj                  dz  c_	        | j                  «        | j                  |«       | j                  |«       | j
                  j                  «        y # | j
                  j                  «        w xY w)Nz$My pid ({0:n}) is not last pid {1:n}Fr   )r   r   rU   rH   ÚformatrX   Úacquirera   ro   rc   r�   r‰   rŒ   Úreleaser�   s     r"   Úfreez	Heap.free  sÆ   € ô �9‰9‹;˜$Ÿ-™-Ò'ÜØ6×=Ñ=Ü—I‘I“K §¡ó/ó0ð 0ð �z‰z×!Ñ! %Ô(ð ×%Ñ%×,Ñ,¨UÕ3ð%Ø—’ Ñ"•Ø×)Ñ)Ô+Ø×$Ñ$ UÔ+Ø×,Ñ,¨UÔ3à—
‘
×"Ñ"Õ$ø�—
‘
×"Ñ"Õ$ús   ÂAC3 Ã3Dc                 ó†  — |dk  rt        dj                  |«      «      ‚t        j                  |k  rt	        dj                  |«      «      ‚t        j                  «       | j                  k7  r| j                  «        | j                  5  | xj                  dz  c_
        | j                  «        | j                  t        |d«      | j                  «      }| j                  |«      \  }}}||z   }||k  r| j!                  |||f«       | j"                  |   j%                  ||f«       |||fcd d d «       S # 1 sw Y   y xY w)Nr   úSize {0:n} out of rangeúSize {0:n} too larger   )rH   r’   rE   ÚmaxsizeÚOverflowErrorr   r   rU   r#   rX   rb   r�   rh   rk   Ú
_alignmentr�   r‰   r_   Úadd)r   r   rq   r   r€   Ú	real_stops         r"   ÚmalloczHeap.malloc(  s  € à�!Š8ÜÐ6×=Ñ=¸dÓCÓDÐDÜ�;‰;˜$ÒÜÐ 6× =Ñ =¸dÓ CÓDÐDÜ�9‰9‹;˜$Ÿ-™-Ò'Ø�M‰MŒOØ�Z‰Zñ 	-Ø�OŠO˜qÑ �Oà×%Ñ%Ô'Ø—=‘=¤ T¨1£¨t¯©Ó?ˆDØ#'§<¡<°Ó#5Ñ ˆU�E˜4Ø ™ˆIØ˜4Òð ×$Ñ$ e¨Y¸Ð%=Ô>Ø×"Ñ" 5Ñ)×-Ñ-¨u°iÐ.@ÔAØ˜5 )Ð,÷	-÷ 	-ò 	-ús   Â
B#D7Ä7E N)r+   r,   r-   r›   rt   rm   r   rl   r#   Ústaticmethodrh   rr   ry   r�   r‰   rƒ   rŒ   r�   r•   rž   r1   r$   r"   rQ   rQ   s   sb   „ ð €Jà&3Ð#Ø,Ðà ŸM™Mó ð: ñ"ó ð"ò

"ò)ò$ò"3ò<ò'ò0ò%ó8-r$   rQ   c                   ó&   — e Zd Z e«       Zd„ Zd„ Zy)r   c                 óN  — |dk  rt        dj                  |«      «      ‚t        j                  |k  rt	        dj                  |«      «      ‚t
        j                  j                  |«      }||f| _        t        j                  | t
        j                  j                  |f¬«       y )Nr   r—   r˜   )Úargs)rH   r’   rE   r™   rš   r   Ú_heaprž   r   r   r;   r•   )r   r   r~   s      r"   r#   zBufferWrapper.__init__F  s‚   € Ø�!Š8ÜÐ6×=Ñ=¸dÓCÓDÐDÜ�;‰;˜$ÒÜÐ 6× =Ñ =¸dÓ CÓDÐDÜ×#Ñ#×*Ñ*¨4Ó0ˆØ˜d�mˆŒÜ�‰�dœM×/Ñ/×4Ñ4¸E¸8ÖDr$   c                 ó^   — | j                   \  \  }}}}t        |j                  «      |||z    S r&   )r   Ú
memoryviewr   )r   rq   r   r€   r   s        r"   Úcreate_memoryviewzBufferWrapper.create_memoryviewO  s1   € Ø%)§[¡[Ñ"Ñˆ��t˜dÜ˜%Ÿ,™,Ó'¨¨e°D©jÐ9Ð9r$   N)r+   r,   r-   rQ   r£   r#   r¦   r1   r$   r"   r   r   B  s   „ á‹F€EòEó:r$   )r{   Úcollectionsr   r   r   rE   r/   rV   Úcontextr   r   Ú r   Ú__all__rF   r   Úobjectr   rL   rI   ÚregisterrQ   r   r1   r$   r"   ú<module>r­      s�   ðó Ý #Û Û 	Û 
Û Û ç /Ý àÐ
€ð ‡<�<�7ÒãôF�õ FôH'�ô 'òB>ò+ð €I×Ñ�u˜lÔ+ôI-ˆ6ô I-ô^:�Fõ :r$   