
    z%i(%                     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                   v     e 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   c                     t        |   |  | j                  j                         | _        | j                  j                  | j                         y N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs	__class__s     M/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/multiprocessing/reduction.pyr   zForkingPickler.__init__&   sA    $"::??A""4#7#78    c                 $    	 || j                   |<   y r   )r   )clstypereduces      r   r	   zForkingPickler.register+   s    4$*D!r   c                 z    t        j                         } | ||      j                  |       |j                         S r   )ioBytesIOr
   	getbuffer)r   objprotocolbufs       r   dumpszForkingPickler.dumps0   s.    jjlC$}}r   r   )__name__
__module____qualname__r   copyregr   r   r   classmethodr	   r)   pickleloads__classcell__)r   s   @r   r   r   !   sO    3O%449
 + +  
 LLEr   r   c                 <    	 t        ||      j                  |        y r   )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 )Nr   )_winapiGetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handletarget_processinheritabler7   current_processs        r   r5   r5   G   sP    J!335!,N!,N&&FN{G99; 	;r   c           	      D   	 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NFr   )r9   OpenProcessPROCESS_DUP_HANDLEr;   r:   r<   DUPLICATE_CLOSE_SOURCECloseHandle)
source_pidr=   source_process_handles      r   r6   r6   S   s    C ' 3 3&&z!;	7**%v))+Q--0N0NNP
  56G 56s   A
B Bc                 ^    	 t        |t        j                  |      }| j                  |       y r   )r4   r9   r<   send)connr=   destination_piddhs       r   r   r   _   s$    4vw<<oN		"r   c                 @    	 | j                         j                         S r   )recvdetach)rK   s    r   r   r   d   s    7yy{!!##r   c                       e Zd Z	 ddZd Zy)r4   Nc                 X   |t        j                         }t        j                  t        j                  d|      }	 t        j
                  t        j                         |||dd      | _        t        j                  |       || _	        || _
        y # t        j                  |       w xY wrB   )osgetpidr9   rC   rD   r;   r:   _handlerF   _access_pid)r   r=   accesspidprocs        r   r   zDupHandle.__init__j   s    { iik&&w'A'A5#ND*&66--/D&% 4 ##D)!DLDI ##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NF)rW   rS   rT   rU   r9   rC   rD   r;   r:   rV   rE   rF   )r   rZ   s     r   rP   zDupHandle.detachy   s    CyyBIIK'||#&&w'A'A5'+yy2D*..$,,(A(A(CLL%)G)GI ##D)##D)s   AC Cr   )r*   r+   r,   r   rP    r   r   r4   r4   h   s    -		*r   r4   )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 )Ni   r      Az%did not receive acknowledgement of fd)
arraybyteslenr   socket
SOL_SOCKETr   ACKNOWLEDGErO   RuntimeError)sockfdsmsgs      r   r_   r_      su    :kk#s#SX^$%cUf//1B1BCHIJ499Q<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)	Nrc   r   re   zreceived %d items of ancdatar   rd   z Len is {0:n} but msg[0] is {1!r}zInvalid data received)rf   itemsizerecvmsgri   
CMSG_SPACEEOFErrorrk   rJ   rh   rl   rj   r   
ValueError	frombytesAssertionErrorformatlist
IndexError)rm   sizea
bytes_sizero   ancdataflagsaddr
cmsg_level	cmsg_type	cmsg_datas              r   r`   r`      sW   =KKZZ$&
$(LLF4E4Ej4Q$R!WeT7N			$7|q "#A#&w<$0 1 1/6qz,J	9f///V...y>AJJ.!3$$I&q6C<3q6)(:AAFCF,- - Aw 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r   )ri   fromfdfilenoAF_UNIXSOCK_STREAMr_   )rK   r=   rL   ss       r   r   r      sI    4]]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)Nr   r   )ri   r   r   r   r   r`   )rK   r   s     r   r   r      sK    7]]4;;=&..&:L:LM 	$QR1a=#	$ 	$ 	$s   AA%c                     	 t        j                         }| |j                  |j                  |             S t        rddlm} |j                  |       S t        d      )Nr   )resource_sharerz&SCM_RIGHTS appears not to be available)r   get_spawning_popenr^   duplicate_for_childHAVE_SEND_HANDLE r   ru   )fd	popen_objr   s      r   r^   r^      sV    )..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    zzajj&9&9:::QZZ%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^^QZZ000r   c                 \    t         | j                  | j                  | j                  xs i ffS r   )_rebuild_partialfuncr   keywords)ps    r   _reduce_partialr      s%    affaffajj.>B???r   c                 4    t        j                  | g|i |S r   )	functoolspartial)r   r   r   s      r   r   r      s    T5D5H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   )rP   )dss    r   r   r      s    yy{r   c                     t        | j                               }t        || j                  | j                  | j
                  ffS r   )r^   r   r   familyr    proto)r   dfs     r   r   r      s2    188:QXXqvvqww ???r   c                 T    | j                         }t        j                  ||||      S )N)r   )rP   ri   )r   r   r    r   r   s        r   r   r      s"    YY[}}VT5<<r   c                   t    e 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)AbstractReducerr   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   ry   appendr   int__add__r   r   r   ri   r   )r   r   s     r   r   zAbstractReducer.__init__  s\    bdff~.dkk"$=>ckk"$=>""O4/r   N)r*   r+   r,   r   r	   r
   r   r   sysplatformr6   r5   r4   r_   r`   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   r\   ).abcr   r-   r   r#   rS   r/   ri   r   r   r   __all__r   hasattrr   Picklerr   r	   r
   r9   r5   r6   r   r   objectr4   rf   rk   r_   r`   r^   r   r   r    r   r   ry   r   r   r   r   r   r   r   r   r   r]   r   r   <module>r      s      	 	   
 
N LLG+ 8VZ0 7V\27V]]I6 V^^ . ""- <<799G
;$(
;
7
$*F *F ..G ,,(*KH48!
$
	G:
  	bdff~ &1 dkk	5 6 ckk	5 6@6 		O , <<70V]]N+@= V]]N+0 0r   