
     h$                     x   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m	Z	 g dZ
ej        d          dk    Zej        dk    p( eed          o eed	          o eej        d
          Zerd dlZ G d dej                  Zn 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mZ 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.           dS d' Z.d( Z/ eej        e.           dS )+    )absolute_importN   )context)send_handlerecv_handleForkingPicklerregisterdump   win32CMSG_LEN
SCM_RIGHTSsendmsgc                        e Zd ZdZi Zej        Z fdZe	d             Z
e	dd            Ze	dd            Zej        Z xZS )r   )Pickler subclass used by multiprocessing.c                      t          t          |           j        |  | j                                        | _        | j                            | j                   d S N)superr   __init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs	__class__s     N/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/billiard/reduction.pyr   zForkingPickler.__init__+   sT    0E.$''0$77"&">"C"C"E"ED&&t';<<<<<    c                     || j         |<   dS )&Register a reduce function for a type.N)r   )clstypereduces      r   r	   zForkingPickler.register0   s     )/C%%%r   Nc                     t          j                    } | ||                              |           |                                S r   )ioBytesIOr
   	getbufferr"   objprotocolbufs       r   dumpszForkingPickler.dumps5   s;    *,,CCX##C(((==??"r   c                 P    |                      |                                          S r   )loadsr(   r"   r,   r+   s      r   loadbufzForkingPickler.loadbuf;   s    99S]]__---r   r   )__name__
__module____qualname____doc__r   copyregr   r   r   classmethodr	   r-   r1   pickler/   __classcell__)r   s   @r   r   r   &   s        77")"8	= 	= 	= 	= 	=
 
	/ 	/ 
	/ 
	# 	# 	# 
	#
 
	. 	. 	. 
	. r   r   c                       e Zd ZdZej        j                                        Zed             Z	edd            Z
edd            Zeej        fd            ZdS )r   r   c                 &    fd}|| j         |<   dS )r!   c                 8     |          } | j         |d|i d S )Nr*   )save_reduce)r   r*   rvr$   s      r   
dispatcherz+ForkingPickler.register.<locals>.dispatcherJ   s.    VC[[  2.S.....r   N)dispatch)r"   r#   r$   r?   s     ` r   r	   zForkingPickler.registerG   s0    / / / / / ",CLr   Nc                     t          j                    } | ||                              |           |                                S r   )r&   r'   r
   getvaluer)   s       r   r-   zForkingPickler.dumpsO   s;    *,,CCX##C(((<<>>!r   c                 P    |                      |                                          S r   )r/   rB   r0   s      r   r1   zForkingPickler.loadbufU   s    99S\\^^,,,r   c                 t    t          |t          j                  r|                                } ||          S r   )
isinstancer&   r'   rB   )r"   r,   r/   s      r   r/   zForkingPickler.loadsY   s1    #rz** %llnn5::r   r   )r2   r3   r4   r5   r8   Picklerr@   r   r7   r	   r-   r1   r/    r   r   r   r   C   s        77>*//11		, 	, 
	, 
	" 	" 	" 
	"
 
	- 	- 	- 
	- 
"(, 	 	 	 
	 	 	r   c                 L    t          ||                              |            dS )z3Replacement for pickle.dump() using ForkingPickler.N)r   r
   )r*   filer+   s      r   r
   r
   a   s&    4""'',,,,,r   )	DupHandle	duplicatesteal_handle)_winapiFc                     |t          j                    }t          j        t          j                    | |d|t           j                  S )z<Duplicate a handle.  (target_process is a handle not a pid!)Nr   )rM   GetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handletarget_processinheritables      r   rK   rK   n   sE    !$688N&%''{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   )rM   OpenProcessPROCESS_DUP_HANDLErP   rO   rQ   DUPLICATE_CLOSE_SOURCECloseHandle)
source_pidrR   source_process_handles      r   rL   rL   v   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)rJ   rM   rQ   send)connrR   destination_piddhs       r   r   r      s)    vw<oNN		"r   c                 N    |                                                                  S ))Receive a handle over a local connection.)recvdetach)r_   s    r   r   r      s    yy{{!!###r   c                        e Zd ZdZddZd ZdS )rJ   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getpidrM   rV   rW   rP   rO   _handlerY   _access_pid)r   rR   accesspidprocs        r   r   zDupHandle.__init__   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)rl   rh   ri   rj   rM   rV   rW   rP   rO   rk   rX   rY   )r   ro   s     r   re   zDupHandle.detach   s     yBIKK''|#&w'A5'+y2 2D*.$,(A(C(CL%)GI I #D))))#D))))s   
=B B2r   )r2   r3   r4   r5   r   re   rG   r   r   rJ   rJ      s=        --	 	 	 		* 	* 	* 	* 	*r   rJ   )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   ACKNOWLEDGErd   RuntimeError)sockfdsmsgs      r   rr   rr      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    rt|	t          j        k    rdt          |
          |j        z  dk    rt          |                    |
           t          |          dz  |d         k    sJ 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.rv   r   rx   zreceived %d items of ancdatar   rw   zInvalid data received)ry   itemsizerecvmsgr|   r   EOFErrorr~   r^   r{   r   r}   r   
ValueError	frombyteslist
IndexError)r   sizea
bytes_sizer   ancdataflagsaddr
cmsg_level	cmsg_type	cmsg_datas              r   rs   rs      sh   KZ$&
$(LLvz**%
 %
!WeT  	7 	N	  		$7||q  "2S\\A   07qz,J	9f///!222y>>AJ.!33$$I&&&1vv|s1v----AwwJ' 	 	 	D	2333s   CD7 7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 r]   )filenor|   fromfdAF_UNIXSOCK_STREAMrr   )r_   rR   r`   fdss        r   r   r      s    [[]]]2v~v/ABB 	!a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 )rc   r   r   N)r   r|   r   r   r   rs   )r_   r   r   s      r   r   r      s    [[]]]2v~v/ABB 	$a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_popenrq   duplicate_for_childHAVE_SEND_HANDLE r   r   )r   	popen_objr   s      r   rq   rq      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__r2   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   rG   )r   s    r   fz_C.f   s    r   N)r2   r3   r4   r   rG   r   r   r   r      s#            r   r   c                 ,    t           | j        | j        ffS r   )r   __objclass__r2   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   )re   )dss    r   r   r     s    yy{{r   c                 |    t          |                                           }t          || j        | j        | j        ffS r   )rq   r   r   familyr#   proto)r   dfs     r   r   r     s1    188::QXqvqw ???r   c                 Z    |                                  }t          j        ||||          S )N)r   )re   r|   )r   r   r#   r   r   s        r   r   r   #  s(    YY[[}VT5<<<<r   r   )NF)0
__future__r   r   r&   rh   r8   r|   sysr   r   __all__version_infoPY3platformhasattrr   r6   rF   r   r	   r
   compatrM   rK   rL   r   r   objectrJ   ry   r~   rr   rs   rq   r   r   r#   r   r   r   appendint__add__r   r   r   r   r   rG   r   r   <module>r      s   ' & & & & &     				 				   



      
N
N
N	qQ LG+ 8WVZ00 7WV\227WV]I66   :NNN        :       6 "- - - - <79999G; ; ; ;
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+++++r   