
    d(%                     H   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    p( eed          o eed          o 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             j"                  e           d  Z# e e!e$j%                  e#            e e!e&j'                  e#           d! Z(d" Z) eej*        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-dS ),    )ABCMetaN   )context)send_handlerecv_handleForkingPicklerregisterdumpwin32CMSG_LEN
SCM_RIGHTSsendmsgc                   p     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                   d S N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs	__class__s     +  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/multiprocessing/reduction.pyr   zForkingPickler.__init__&   sN    $":??AA""4#788888    c                     || j         |<   dS )z&Register a reduce function for a type.N)r   )clstypereduces      r   r	   zForkingPickler.register+   s     %+D!!!r   Nc                     t          j                    } | ||                              |           |                                S r   )ioBytesIOr
   	getbuffer)r   objprotocolbufs       r   dumpszForkingPickler.dumps0   s;    jllC$$$}}r   r   )__name__
__module____qualname____doc__r   copyregr   r   r   classmethodr	   r)   pickleloads__classcell__)r   s   @r   r   r   !   s        33O%49 9 9 9 9
 + + [+    [
 LEEEEEr   r   c                 L    t          ||                              |            dS )z3Replacement for pickle.dump() using ForkingPickler.N)r   r
   )r&   filer'   s      r   r
   r
   :   s&    4""'',,,,,r   )	DupHandle	duplicatesteal_handleF)source_processc                ~    t          j                    }||}||}t          j        || |d|t           j                  S )z<Duplicate a handle.  (target_process is a handle not a pid!)Nr   )_winapiGetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handletarget_processinheritabler8   current_processs        r   r6   r6   G   sN     "355!,N!,N&FN{G9; ; 	;r   c           	          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&z!; !;	7*%v)++Q-0NNP P
  56666G 56666s   A A7 7Bc                 f    t          |t          j        |          }|                     |           dS z&Send a handle over a local connection.N)r5   r:   r=   send)connr>   destination_piddhs       r   r   r   _   s)    vw<oNN		"r   c                 N    |                                                                  S ))Receive a handle over a local connection.)recvdetach)rL   s    r   r   r   d   s    yy{{!!###r   c                        e Zd ZdZddZd ZdS )r5   zPicklable wrapper for a handle.Nc                 H   |t          j                    }t          j        t          j        d|          }	 t          j        t          j                    |||dd          | _        t          j        |           n# t          j        |           w xY w|| _	        || _
        d S )NFr   )osgetpidr:   rC   rD   r<   r;   _handlerF   _access_pid)r   r>   accesspidprocs        r   r   zDupHandle.__init__j   s    { ikk&w'A5#NND*&6-//D&% 4  4 #D))))#D))))!DLDIIIs   /A; ;Bc                 j   | 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     yBIKK''|#&w'A5'+y2 2D*.$,(A(C(CL%)GI I #D))))#D))))s   
=B B2r   )r*   r+   r,   r-   r   rR    r   r   r5   r5   h   s=        --	 	 	 		* 	* 	* 	* 	*r   r5   )DupFdsendfdsrecvfdsdarwinc                 0   t          j         d|          }t          t          |          dz  g          }|                     |gt          j        t          j        |fg           t          r(|                     d          dk    rt          d          dS dS )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`      s    k#s##SXX^$%%cUf/1BCHIJJJ 	H499Q<<4//FGGG	H 	H//r   c                 "   t          j         d          }|j        |z  }|                     dt          j        |                    \  }}}}|s	|st
          	 t          r|                     d           t          |          dk    rt          dt          |          z            |d         \  }}	}
|t          j
        k    r|	t          j        k    rt          |
          |j        z  dk    rt          |                    |
           t          |          dz  |d         k    r6t          d                    t          |          |d                             t!          |          S n# t          t"          f$ r Y nw xY wt          d          )	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      s   KZ$&
$(LLF4Ej4Q4Q$R$R!WeT 	7 	N	  		$7||q  "#A#&w<<$0 1 1 1/6qz,J	9f///V...y>>AJ.!33$$I&&&q66C<3q6))(:AAFFCF, ,- - - AwwJ' 	 	 	D	2333s   DE+ +E?>E?c                     t          j        |                                 t           j        t           j                  5 }t          ||g           ddd           dS # 1 swxY w Y   dS rJ   )rj   fromfdfilenoAF_UNIXSOCK_STREAMr`   )rL   r>   rM   ss       r   r   r      s    ]4;;==&.&:LMM 	!QRAx   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   AA #A c                     t          j        |                                 t           j        t           j                  5 }t          |d          d         cddd           S # 1 swxY w Y   dS )rP   r   r   N)rj   r   r   r   r   ra   )rL   r   s     r   r   r      s    ]4;;==&.&:LMM 	$QR1a==#	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   A  A$'A$c                     t          j                    }|(|                    |                    |                     S t          rddlm} |                    |           S t          d          )zReturn a wrapper for an fd.Nr   )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_      st    .00	 ??9#@#@#D#DEEE 	G))))))"((,,,EFFFr   c                 x    | j         t          | j        | j        j        ffS t          | j         | j        j        ffS r   )__self__getattrr   __func__r*   ms    r   _reduce_methodr      s8    zaj&9:::QZ%8999r   c                       e Zd Zd ZdS )_Cc                     d S 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^QZ000r   c                 <    t           | j        | j        | j        pi ffS r   )_rebuild_partialfuncr   keywords)ps    r   _reduce_partialr      s    afafaj.>B???r   c                 ,    t          j        | g|R i |S r   )	functoolspartial)r   r   r   s      r   r   r      s#    T5D555H555r   c                 4    ddl m} t           ||           ffS )Nr   )	DupSocket)r   r   _rebuild_socket)r   r   s     r   _reduce_socketr      s)    ......1//r   c                 *    |                                  S r   )rR   )dss    r   r   r      s    yy{{r   c                 |    t          |                                           }t          || j        | j        | j        ffS r   )r_   r   r   familyr    proto)r   dfs     r   r   r      s1    188::QXqvqw ???r   c                 Z    |                                  }t          j        ||||          S )N)r   )rR   rj   )r   r   r    r   r   s        r   r   r      s(    YY[[}VT5<<<<r   c                   p    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dS )AbstractReducerzAbstract base class for use in implementing a Reduction class
    suitable for use in replacing the standard reduction mechanism
    used in multiprocessing.r   c                    t          t          t                      j                  t                     t          t          t
          j                  t                     t          t          t          j	                  t                     t          t          j        t                     t          t          j        t                     d S r   )r	   r    r   r   r   rz   appendr   int__add__r   r   r   rj   r   )r   r   s     r   r   zAbstractReducer.__init__  s    bddf~...dk""$=>>>ck""$=>>>"O44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      s            $NHDKK
|w#			#N 9'#N%O0 0 0 0 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
N
N LG+ 8WVZ00 7WV\227WV]I66     V^   . "- - - - <79999GNNN
;$(
; 
; 
; 
; 
;
7 
7 
7  
$ $ $* * * * *F * * * *F ....GLLL ,(*KH H H4 4 48! ! !
$ $ $
	G 	G 	G: : :
        	bbddf~ & & &1 1 1 dk		5 6 6 6 ck		5 6 6 6@ @ @6 6 6 	O , , , <70 0 0  HV]N++++@ @ @= = = HV]N+++0 0 0 0 0 0 0 0 0 0 0r   