Ë
    òT•j(%  ã                   óf  — 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Zd dlZddl	m
Z
 g d¢Zej                  dk(  xs)  eed«      xr  eed«      xr  eej                  d	«      Z G d
„ dej                  «      Zej"                  Zd)d„Zej                  dk(  r'eg d¢z  Zd dlZd*ddœd„Zd„ Zd„ Zd„ Z G d„ de«      Zn)eg d¢z  Zd dlZej                  dk(  Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ d«      Z  e e! e «       jD                  «      e«       d„ Z# e e!e$jJ                  «      e#«        e e!e&jN                  «      e#«       d „ Z(d!„ Z) eejT                  e(«       ej                  dk(  rd"„ Z+d#„ Z, eej                  e+«       nd$„ Z+d%„ Z, eej                  e+«        G d&„ d'e¬(«      Z-y)+é    )ÚABCMetaNé   )Úcontext)Úsend_handleÚrecv_handleÚForkingPicklerÚregisterÚdumpÚwin32ÚCMSG_LENÚ
SCM_RIGHTSÚsendmsgc                   óx   ‡ — e Zd ZdZi Zej                  Zˆ fd„Ze	d„ «       Z
e	dd„«       Zej                  Zˆ xZS )r   z)Pickler subclass used by multiprocessing.c                 ó¦   •— t        ‰| �  |Ž  | j                  j                  «       | _        | j                  j                  | j                  «       y ©N)ÚsuperÚ__init__Ú_copyreg_dispatch_tableÚcopyÚdispatch_tableÚupdateÚ_extra_reducers)ÚselfÚargsÚ	__class__s     €ú0/usr/lib/python3.12/multiprocessing/reduction.pyr   zForkingPickler.__init__&   sA   ø€ Ü‰Ñ˜$ÑØ"×:Ñ:×?Ñ?ÓAˆÔØ×Ñ×"Ñ" 4×#7Ñ#7Õ8ó    c                 ó"   — || j                   |<   y)z&Register a reduce function for a type.N)r   )ÚclsÚtypeÚreduces      r   r	   zForkingPickler.register+   s   € ð %+ˆ×Ñ˜DÒ!r   c                 óz   — t        j                  «       } | ||«      j                  |«       |j                  «       S r   )ÚioÚBytesIOr
   Ú	getbuffer)r   ÚobjÚprotocolÚbufs       r   ÚdumpszForkingPickler.dumps0   s.   € ä�j‰j‹lˆÙˆC�Ó×Ñ Ô$Ø�}‰}‹Ðr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úcopyregr   r   r   Úclassmethodr	   r)   ÚpickleÚloadsÚ__classcell__)r   s   @r   r   r   !   sO   ø„ Ù3Ø€OØ%×4Ñ4Ðô9ð
 ñ+ó ð+ð òó ðð
 �L‰L„Er   r   c                 ó:   — t        ||«      j                  | «       y)z3Replacement for pickle.dump() using ForkingPickler.N)r   r
   )r&   Úfiler'   s      r   r
   r
   :   s   € ä�4˜Ó"×'Ñ'¨Õ,r   )Ú	DupHandleÚ	duplicateÚsteal_handle)Úsource_processc                óŠ   — t        j                  «       }|€|}|€|}t        j                  || |d|t         j                  «      S )z<Duplicate a handle.  (target_process is a handle not a pid!)r   )Ú_winapiÚGetCurrentProcessÚDuplicateHandleÚDUPLICATE_SAME_ACCESS)ÚhandleÚtarget_processÚinheritabler8   Úcurrent_processs        r   r6   r6   G   sO   € ô "×3Ñ3Ó5ˆØÐ!Ø,ˆNØÐ!Ø,ˆNÜ×&Ñ&Ø˜F NØˆ{œG×9Ñ9ó;ð 	;r   c           	      óB  — t        j                  t         j                  d| «      }	 t        j                  ||t        j                  «       ddt         j
                  t         j                  z  «      t        j                  |«       S # t        j                  |«       w xY w)z5Steal a handle from process identified by source_pid.Fr   )r:   ÚOpenProcessÚPROCESS_DUP_HANDLEr<   r;   r=   ÚDUPLICATE_CLOSE_SOURCEÚCloseHandle)Ú
source_pidr>   Úsource_process_handles      r   r7   r7   S   s~   € ä '× 3Ñ 3Ü×&Ñ&¨¨zó!;Ðð	7Ü×*Ñ*Ø% vÜ×)Ñ)Ó+¨Q°Ü×-Ñ-´×0NÑ0NÑNóPô
 ×ÑÐ 5Õ6øŒG×ÑÐ 5Õ6ús   §A
B ÂBc                 ó\   — t        |t        j                  |«      }| j                  |«       y©z&Send a handle over a local connection.N)r5   r:   r=   Úsend)Úconnr>   Údestination_pidÚdhs       r   r   r   _   s!   € ä�vœw×<Ñ<¸oÓNˆØ�	‰	�"�r   c                 ó>   — | j                  «       j                  «       S )ú)Receive a handle over a local connection.)ÚrecvÚdetach)rL   s    r   r   r   d   s   € à�y‰y‹{×!Ñ!Ó#Ð#r   c                   ó   — e Zd ZdZdd„Zd„ Zy)r5   zPicklable wrapper for a handle.Nc                 óX  — |€t        j                  «       }t        j                  t        j                  d|«      }	 t        j
                  t        j                  «       |||dd«      | _        t        j                  |«       || _	        || _
        y # t        j                  |«       w xY w)NFr   )ÚosÚgetpidr:   rC   rD   r<   r;   Ú_handlerF   Ú_accessÚ_pid)r   r>   ÚaccessÚpidÚprocs        r   r   zDupHandle.__init__j   sŒ   € Øˆ{ô —i‘i“k�Ü×&Ñ&¤w×'AÑ'AÀ5È#ÓNˆDð*Ü&×6Ñ6Ü×-Ñ-Ó/Ø˜D &¨%°ó 4�”ô ×#Ñ# DÔ)Ø!ˆDŒLØˆD�Iøô ×#Ñ# DÕ)ús   ½1B ÂB)c                 ó¶  — | j                   t        j                  «       k(  r| j                  S t	        j
                  t        j                  d| j                   «      }	 t	        j                  || j                  t	        j                  «       | j                  dt        j                  «      t	        j                  |«       S # t	        j                  |«       w xY w)z1Get the handle.  This should only be called once.F)rY   rU   rV   rW   r:   rC   rD   r<   r;   rX   rE   rF   )r   r\   s     r   rR   zDupHandle.detachy   s™   € ð �y‰yœBŸI™I›KÒ'à—|‘|Ð#ä×&Ñ&¤w×'AÑ'AÀ5Ø'+§y¡yó2ˆDð*Ü×.Ñ.Ø˜$Ÿ,™,¬×(AÑ(AÓ(CØ—L‘L %¬×)GÑ)GóIô ×#Ñ# DÕ)ø”×#Ñ# DÕ)ús   ÁAC ÃCr   )r*   r+   r,   r-   r   rR   © r   r   r5   r5   h   s   „ Ù-ó	ó	*r   r5   )ÚDupFdÚsendfdsÚrecvfdsÚdarwinc                 ó  — t        j                   d|«      }t        t        |«      dz  g«      }| j                  |gt        j
                  t        j                  |fg«       t        r | j                  d«      dk7  rt        d«      ‚yy)z,Send an array of fds over an AF_UNIX socket.Úié   r   ó   Az%did not receive acknowledgement of fdN)
ÚarrayÚbytesÚlenr   ÚsocketÚ
SOL_SOCKETr   ÚACKNOWLEDGErQ   ÚRuntimeError)ÚsockÚfdsÚmsgs      r   r`   r`   ‘   sr   € ä�k‰k˜#˜sÓ#ˆÜ”S˜“X ‘^Ð$Ó%ˆØ�‰�c�Uœf×/Ñ/´×1BÑ1BÀCÐHÐIÔJÝ˜4Ÿ9™9 Q›<¨4Ò/ÜÐFÓGÐGð 0ˆ;r   c                 óÎ  — t        j                   d«      }|j                  |z  }| j                  dt        j                  |«      «      \  }}}}|s|st
        ‚	 t        r| j                  d«       t        |«      dk7  rt        dt        |«      z  «      ‚|d   \  }}	}
|t        j                  k(  r‹|	t        j                  k(  rxt        |
«      |j                  z  dk7  rt        ‚|j                  |
«       t        |«      dz  |d   k7  r't        dj                  t        |«      |d   «      «      ‚t!        |«      S t        d«      ‚# t        t"        f$ r Y t        d«      ‚w xY w)	z/Receive an array of fds over an AF_UNIX socket.rd   r   rf   zreceived %d items of ancdatar   re   z Len is {0:n} but msg[0] is {1!r}zInvalid data received)rg   ÚitemsizeÚrecvmsgrj   Ú
CMSG_SPACEÚEOFErrorrl   rK   ri   rm   rk   r   Ú
ValueErrorÚ	frombytesÚAssertionErrorÚformatÚlistÚ
IndexError)rn   ÚsizeÚaÚ
bytes_sizerp   ÚancdataÚflagsÚaddrÚ
cmsg_levelÚ	cmsg_typeÚ	cmsg_datas              r   ra   ra   ™   sT  € ä�K‰K˜ÓˆØ—Z‘Z $Ñ&ˆ
Ø$(§L¡L°´F×4EÑ4EÀjÓ4QÓ$RÑ!ˆˆW�e˜TÙ™7ÜˆNð	ÝØ—	‘	˜$”Ü�7‹|˜qÒ Ü"Ð#AÜ#& w£<ñ$0ó 1ð 1à/6°q©zÑ,ˆJ˜	 9Øœf×/Ñ/Ò/ØœV×.Ñ.Ò.Ü�y“> A§J¡JÑ.°!Ò3Ü$Ð$Ø—‘˜IÔ&Ü�q“6˜C‘< 3 q¡6Ò)Ü(Ø:×AÑAÜ ›F C¨¡Fó,ó-ð -ô ˜A“w�ô Ð2Ó3Ð3øô œJÐ'ò 	ØÜÐ2Ó3Ð3ð	ús   ÁC"E ÅE$Å#E$c                 óÊ   — t        j                  | j                  «       t         j                  t         j                  «      5 }t        ||g«       ddd«       y# 1 sw Y   yxY wrJ   )rj   ÚfromfdÚfilenoÚAF_UNIXÚSOCK_STREAMr`   )rL   r>   rM   Úss       r   r   r   µ   sF   € ä�]‰]˜4Ÿ;™;›=¬&¯.©.¼&×:LÑ:LÓMð 	!ÐQRÜ�A˜�xÔ ÷	!÷ 	!ñ 	!ús   ÁAÁA"c                 óÎ   — t        j                  | j                  «       t         j                  t         j                  «      5 }t        |d«      d   cddd«       S # 1 sw Y   yxY w)rP   r   r   N)rj   r†   r‡   rˆ   r‰   ra   )rL   rŠ   s     r   r   r   º   sH   € ä�]‰]˜4Ÿ;™;›=¬&¯.©.¼&×:LÑ:LÓMð 	$ÐQRÜ˜1˜a“= Ñ#÷	$÷ 	$ò 	$ús   ÁAÁA$c                 ó¾   — t        j                  «       }|� |j                  |j                  | «      «      S t        rddlm} |j                  | «      S t        d«      ‚)zReturn a wrapper for an fd.r   )Úresource_sharerz&SCM_RIGHTS appears not to be available)r   Úget_spawning_popenr_   Úduplicate_for_childÚHAVE_SEND_HANDLEÚ r�   rv   )ÚfdÚ	popen_objr�   s      r   r_   r_   ¿   sS   € ä×.Ñ.Ó0ˆ	ØÐ Ø—?‘? 9×#@Ñ#@ÀÓ#DÓEÐEÝÝ)Ø"×(Ñ(¨Ó,Ð,äÐEÓFÐFr   c                 óº   — | j                   €(t        | j                  | j                  j                  ffS t        | j                   | j                  j                  ffS r   )Ú__self__Úgetattrr   Ú__func__r*   ©Úms    r   Ú_reduce_methodrš   Î   sH   € Ø‡z�zÐÜ˜Ÿ™ a§j¡j×&9Ñ&9Ð:Ð:Ð:ä˜Ÿ™ Q§Z¡Z×%8Ñ%8Ð9Ð9Ð9r   c                   ó   — e Zd Zd„ Zy)Ú_Cc                  ó   — y r   r^   )r   s    r   Úfz_C.fÔ   s   € Ør   N)r*   r+   r,   rž   r^   r   r   rœ   rœ   Ó   s   „ ór   rœ   c                 ó>   — t         | j                  | j                  ffS r   )r–   Ú__objclass__r*   r˜   s    r   Ú_reduce_method_descriptorr¡   Ù   s   € Ü�Q—^‘^ Q§Z¡ZÐ0Ð0Ð0r   c                 ó\   — t         | j                  | j                  | j                  xs i ffS r   )Ú_rebuild_partialÚfuncr   Úkeywords)Úps    r   Ú_reduce_partialr§   ß   s%   € Ü˜aŸf™f a§f¡f¨a¯j©jÒ.>¸BÐ?Ð?Ð?r   c                 ó4   — t        j                  | g|¢­i |¤ŽS r   )Ú	functoolsÚpartial)r¤   r   r¥   s      r   r£   r£   á   s   € Ü×Ñ˜TÐ5 DÒ5¨HÑ5Ð5r   c                 ó,   — ddl m} t         || «      ffS )Nr   )Ú	DupSocket)r�   r¬   Ú_rebuild_socket)rŠ   r¬   s     r   Ú_reduce_socketr®   ê   s   € Ý.Ü¡¨1£ Ð/Ð/r   c                 ó"   — | j                  «       S r   )rR   )Údss    r   r­   r­   í   s   € Ø�y‰y‹{Ðr   c                 óˆ   — t        | j                  «       «      }t        || j                  | j                  | j
                  ffS r   )r_   r‡   r­   Úfamilyr    Úproto)rŠ   Údfs     r   r®   r®   ò   s2   € Ü�1—8‘8“:ÓˆÜ  Q§X¡X¨q¯v©v°q·w±wÐ ?Ð?Ð?r   c                 óT   — | j                  «       }t        j                  ||||¬«      S )N)r‡   )rR   rj   )r´   r²   r    r³   r’   s        r   r­   r­   õ   s"   € Ø�Y‰Y‹[ˆÜ�}‰}˜V T¨5¸Ô<Ð<r   c                   óv   — e Zd ZdZeZeZeZeZeZe	j                  dk(  reZeZeZneZeZeZeZeZeZeZeZd„ Zy)ÚAbstractReducerz�Abstract base class for use in implementing a Reduction class
    suitable for use in replacing the standard reduction mechanism
    used in multiprocessing.r   c                 ón  — t        t        t        «       j                  «      t        «       t        t        t
        j                  «      t        «       t        t        t        j                  «      t        «       t        t        j                  t        «       t        t        j                  t        «       y r   )r	   r    rœ   rž   rš   rz   Úappendr¡   ÚintÚ__add__r©   rª   r§   rj   r®   )r   r   s     r   r   zAbstractReducer.__init__  s\   € Ü””b“d—f‘f“œ~Ô.Ü””d—k‘kÓ"Ô$=Ô>Ü””c—k‘kÓ"Ô$=Ô>Ü”×"Ñ"¤OÔ4Ü”—‘¤Õ/r   N)r*   r+   r,   r-   r   r	   r
   r   r   ÚsysÚplatformr7   r6   r5   r`   ra   r_   rš   r¡   r£   r®   r­   r   r^   r   r   r·   r·   û   sl   „ ñ ð $€NØ€HØ€DØ€KØ€Kà
‡|�|�wÒØ#ˆØˆ	Ø‰	àˆØˆØˆà#€NØ 9ÐØ'ÐØ#€NØ%€Oó0r   r·   )Ú	metaclassr   )NF).Úabcr   r.   r©   r#   rU   r0   rj   r¼   r‘   r   Ú__all__r½   Úhasattrr�   ÚPicklerr   r	   r
   r:   r6   r7   r   r   Úobjectr5   rg   rl   r`   ra   r_   rš   rœ   r    rž   r¡   rz   r¹   rº   r»   r§   r£   rª   r®   r­   r·   r^   r   r   ú<module>rÄ      sÇ  ðõ Û Û Û 	Û 	Û Û Û 
å â
N€ð —L‘L GÑ+ò 8Ù˜V ZÓ0ò 7Ù˜V \Ó2ò7á˜VŸ]™]¨IÓ6ð ô�V—^‘^ô ð. ×"Ñ"€ó-ð ‡<�<�7ÒàÒ9Ñ9€GÛð
;Ø$(ô
;ò
7òò
$ô*�Fõ *ðF Ò.Ñ.€GÛð —,‘, (Ñ*€KòHò4ò8!ò
$ò
	Gò:÷
ñ ñ 	‰‰b‹d�f‰f‹�~Ô &ò1á ‰ˆd�k‰kÓ	Ð5Ô 6Ù ‰ˆc�k‰kÓ	Ð5Ô 6ò@ò6á ˆ×	Ñ	˜OÔ ,ð ‡<�<�7Òò0òáˆV�]‰]˜NÕ+ò@ò=ñ ˆV�]‰]˜NÔ+ô0 ö 0r   