
    h$                        S SK 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  / SQr\R                  S    S:H  r
\R                  S:H  =(       d3    \" \S5      =(       a#    \" \S5      =(       a    \" \R                  S	5      r\
(       a  S SKr " S
 S\R                  5      rO " S S\R                  5      r\R"                  rS'S jr\R                  S:X  a&  \/ SQ-  rSSKJr  S(S jrS rS rS r " S S5      rO)\/ SQ-  rS SKr\R                  S:H  rS rS rS rS rS rS r " S S5      r \" \!" \ " 5       RD                  5      \5        S  r#\" \!" \$RJ                  5      \#5        \" \!" \&RN                  5      \#5        S! r(S" r)\" \ RT                  \(5        \R                  S:X  a  S# r+S$ r,\" \R                  \+5        gS% r+S& r,\" \R                  \+5        g))    N   )context)send_handlerecv_handleForkingPicklerregisterdump   win32CMSG_LEN
SCM_RIGHTSsendmsgc                      ^  \ rS rSrSr0 r\R                  rU 4S jr	\
S 5       r\
SS j5       r\
SS j5       r\R                  rSrU =r$ )	r   %   )Pickler subclass used by multiprocessing.c                    > [         [        U ]
  " U6   U R                  R	                  5       U l        U R
                  R                  U R                  5        g N)superr   __init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs	__class__s     :D:\TimeStamps\venv\Lib\site-packages\billiard/reduction.pyr   ForkingPickler.__init__*   sC    .$0$7"&">">"C"C"ED&&t';';<    c                      X R                   U'   g)&Register a reduce function for a type.N)r   )clstypereduces      r   r   ForkingPickler.register/   s     )/%r    c                 z    [         R                  " 5       nU " X25      R                  U5        UR                  5       $ r   )ioBytesIOr	   	getbufferr#   objprotocolbufs       r   dumpsForkingPickler.dumps4   s,    **,C##C(==?"r    c                 @    U R                  UR                  5       5      $ r   )loadsr*   r#   r.   r-   s      r   loadbufForkingPickler.loadbuf:   s    99S]]_--r    )r   r   )__name__
__module____qualname____firstlineno____doc__r   copyregr   r   r   classmethodr   r/   r4   pickler2   __static_attributes____classcell__)r   s   @r   r   r   %   sc    7")"8"8	=
 
	/ 
	/ 
	# 
	#
 
	. 
	. r    r   c                       \ rS rSrSr\R                  R                  R                  5       r\	S 5       r
\	S	S j5       r\	S	S j5       r\	\R                  4S j5       rSrg)
r   B   r   c                 .   ^ U4S jnX0R                   U'   g)r"   c                 :   > T" U5      nU R                   " USU06  g )Nr,   )save_reduce)r   r,   rvr%   s      r   
dispatcher+ForkingPickler.register.<locals>.dispatcherI   s    C[  2.S.r    N)dispatch)r#   r$   r%   rF   s     ` r   r   r&   F   s    / ",LLr    Nc                 z    [         R                  " 5       nU " X25      R                  U5        UR                  5       $ r   )r(   r)   r	   getvaluer+   s       r   r/   r0   N   s,    **,C##C(<<>!r    c                 @    U R                  UR                  5       5      $ r   )r2   rJ   r3   s      r   r4   r5   T   s    99S\\^,,r    c                 p    [        U[        R                  5      (       a  UR                  5       nU" U5      $ r   )
isinstancer(   r)   rJ   )r#   r.   r2   s      r   r2   ForkingPickler.loadsX   s(    #rzz**lln:r     r   )r6   r7   r8   r9   r:   r=   PicklerrH   r   r<   r   r/   r4   r2   r>   rO   r    r   r   r   B   sr    7>>**//1		, 
	, 
	" 
	"
 
	- 
	- 
"(,, 	 
	r    c                 8    [        X5      R                  U 5        g)z3Replacement for pickle.dump() using ForkingPickler.N)r   r	   )r,   filer-   s      r   r	   r	   `   s    4"'',r    )	DupHandle	duplicatesteal_handle)_winapic                     Uc  [         R                  " 5       n[         R                  " [         R                  " 5       XSU[         R                  5      $ )z<Duplicate a handle.  (target_process is a handle not a pid!)r   )rV   GetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handletarget_processinheritables      r   rT   rT   m   sD    !$668N&&%%'{G99; 	;r    c           	      J   [         R                  " [         R                  SU 5      n [         R                  " X![         R                  " 5       SS[         R
                  [         R                  -  5      [         R                  " U5        $ ! [         R                  " U5        f = f)z5Steal a handle from process identified by source_pid.Fr   )rV   OpenProcessPROCESS_DUP_HANDLErY   rX   rZ   DUPLICATE_CLOSE_SOURCECloseHandle)
source_pidr[   source_process_handles      r   rU   rU   u   s|     ' 3 3&&z!;	7**%))+Q--0N0NNP
  56G 56s   AB
 
B"c                 \    [        U[        R                  U5      nU R                  U5        gz&Send a handle over a local connection.N)rS   rV   rZ   send)connr[   destination_piddhs       r   r   r      s!    vw<<oN		"r    c                 >    U R                  5       R                  5       $ ))Receive a handle over a local connection.)recvdetach)rh   s    r   r   r      s    yy{!!##r    c                   (    \ rS rSrSrSS jrS rSrg)rS      zPicklable wrapper for a handle.Nc                 `   Uc  [         R                  " 5       n[        R                  " [        R                  SU5      n [        R
                  " [        R                  " 5       XUSS5      U l        [        R                  " U5        X l	        X0l
        g ! [        R                  " U5        f = f)NFr   )osgetpidrV   r_   r`   rY   rX   _handlerb   _access_pid)r   r[   accesspidprocs        r   r   DupHandle.__init__   s    { iik&&w'A'A5#ND*&66--/&% 4 ##D)!LI ##D)s    2B B-c                    U R                   [        R                  " 5       :X  a  U R                  $ [        R
                  " [        R                  SU R                   5      n [        R                  " XR                  [        R                  " 5       U R                  S[        R                  5      [        R                  " U5        $ ! [        R                  " U5        f = f)z1Get the handle.  This should only be called once.F)rv   rr   rs   rt   rV   r_   r`   rY   rX   ru   ra   rb   )r   ry   s     r   rn   DupHandle.detach   s     yyBIIK'||#&&w'A'A5'+yy2D*..,,(A(A(CLL%)G)GI ##D)##D)s   !AC C)ru   rt   rv   r   )r6   r7   r8   r9   r:   r   rn   r>   rO   r    r   rS   rS      s    -		*r    rS   )DupFdsendfdsrecvfdsdarwinc                     [         R                   " SU5      n[        [        U5      S-  /5      nU R                  U/[        R
                  [        R                  U4/5        [        (       a!  U R                  S5      S:w  a  [        S5      egg)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   ACKNOWLEDGErm   RuntimeError)sockfdsmsgs      r   r~   r~      st    kk#s#SX^$%cUf//1B1BCHIJ;499Q<4/FGG 0;r    c                    [         R                   " S5      nUR                  U-  nU R                  S[        R                  " U5      5      u  pEpgU(       d  U(       d  [
        e [        (       a  U R                  S5        [        U5      S:w  a  [        S[        U5      -  5      eUS   u  pn
U[        R                  :X  ai  U	[        R                  :X  aU  [        U
5      UR                  -  S:w  a  [        eUR                  U
5        [        U5      S-  US   :X  d   e[        U5      $ [        S5      e! [        [        4 a     Nf = f)z/Receive an array of fds over an AF_UNIX socket.r   r   r   zreceived %d items of ancdatar   r   zInvalid data received)r   itemsizerecvmsgr   r   EOFErrorr   rg   r   r   r   r   
ValueError	frombyteslist
IndexError)r   sizea
bytes_sizer   ancdataflagsaddr
cmsg_level	cmsg_type	cmsg_datas              r   r   r      s"   KKZZ$&
$(LLvz*%
!e 7N	{		$7|q "2S\A  07qz,J9f///!2!22y>AJJ.!3$$I&1v|s1v---Aw 233 J' 		s   $CD6 6E	E	c                     U R                  5       n[        R                  " U[        R                  [        R                  5       n[        XA/5        SSS5        g! , (       d  f       g= frf   )filenor   fromfdAF_UNIXSOCK_STREAMr~   )rh   r[   ri   fdss        r   r   r      s@    [[]]]2v~~v/A/ABaAx  CBBs   A
A)c                     U R                  5       n[        R                  " U[        R                  [        R                  5       n[        US5      S   sSSS5        $ ! , (       d  f       g= f)rl   r   r   N)r   r   r   r   r   r   )rh   r   r   s      r   r   r      sD    [[]]]2v~~v/A/ABa1a=# CBBs   A
A,c                     [         R                  " 5       nUb   UR                  UR                  U 5      5      $ [        (       a  SSKJn  UR                  U 5      $ [        S5      e)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   r   )r   	popen_objr   s      r   r}   r}      sV    ..0	 ??9#@#@#DEE)"((,,EFFr    c                     U R                   c(  [        U R                  U R                  R                  44$ [        U R                   U R                  R                  44$ r   )__self__getattrr   __func__r6   ms    r   _reduce_methodr      sH    zzajj&9&9:::QZZ%8%8999r    c                       \ rS rSrS rSrg)_C   c                     g r   rO   )r   s    r   f_C.f   s    r    rO   N)r6   r7   r8   r9   r   r>   rO   r    r   r   r      s    r    r   c                 >    [         U R                  U R                  44$ r   )r   __objclass__r6   r   s    r   _reduce_method_descriptorr      s    Q^^QZZ000r    c                 f    [         U R                  U R                  U R                  =(       d    0 44$ r   )_rebuild_partialfuncr   keywords)ps    r   _reduce_partialr     s%    affaffajj.>B???r    c                 6    [         R                  " U /UQ70 UD6$ r   )	functoolspartial)r   r   r   s      r   r   r   
  s    T5D5H55r    c                 ,    SSK Jn  [        U" U 5      44$ )Nr   )	DupSocket)r   r   _rebuild_socket)r   r   s     r   _reduce_socketr     s    .1//r    c                 "    U R                  5       $ r   )rn   )dss    r   r   r     s    yy{r    c                     [        U R                  5       5      n[        XR                  U R                  U R
                  44$ r   )r}   r   r   familyr$   proto)r   dfs     r   r   r     s0    188:XXqvvqww ???r    c                 L    U R                  5       n[        R                  " XX4S9$ )N)r   )rn   r   )r   r   r$   r   r   s        r   r   r   "  s    YY[}}V5<<r    r   )NF)-r   r(   rr   r=   r   sysr   r   __all__version_infoPY3platformhasattrr   r;   rP   r   r   r	   compatrV   rT   rU   r   r   rS   r   r   r~   r   r}   r   r   r$   r   r   r   appendint__add__r   r   r   r   r   rO   r    r   <module>r      s    	 	   
 
N	qQ LLG+ 8VZ0 7V\27V]]I6   : 6 ""- <<799G;
7
$* *F ..G ,,(*KH48!$	G :  	bdff~ &1 dkk	5 6 ckk	5 6@6 		O , <<70V]]N+@= V]]N+r    