U
    |±Ëhð  ã                   @   s²   d dl Z d dlZd dlZd dlmZ d dlmZ ddlmZ e	edƒoZe	edƒoZe	ejdƒZ
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zeejeƒ eejeƒ eeeƒ dS )é    N)Ú
Connection)Úget_spawning_popené   )ÚregisterÚCMSG_LENÚ
SCM_RIGHTSÚsendmsgc                 C   s   t  | d¡ | S )NT)ÚosÚset_inheritable)Úfd© r   úR/tmp/pip-unpacked-wheel-9qhk7zno/joblib/externals/loky/backend/_posix_reduction.pyÚ_mk_inheritable   s    r   c                 C   sD   t ƒ }|dk	r| | | ¡¡S tr8ddlm} | | ¡S tdƒ‚dS )zReturn a wrapper for an fd.Nr   )Úresource_sharerz[Cannot pickle connection object. This object can only be passed when spawning a new process)r   ÚDupFdZduplicate_for_childÚHAVE_SEND_HANDLEÚmultiprocessingr   Ú	TypeError)r   Z	popen_objr   r   r   r   r      s    
ÿr   c                 C   s"   t |  ¡ ƒ}t|| j| j| jffS ©N)r   ÚfilenoÚ_rebuild_socketÚfamilyÚtypeÚproto)ÚsÚdfr   r   r   Ú_reduce_socket-   s    r   c                 C   s   |   ¡ }t ||||¡S r   )ÚdetachÚsocketÚfromfd)r   r   r   r   r   r   r   r   r   2   s    r   c                 C   s   |   ¡ }t|||ƒS r   )r   r   )r   ÚreadableÚwritabler   r   r   r   Úrebuild_connection7   s    r"   c                 C   s   t |  ¡ ƒ}t|| j| jffS r   )r   r   r"   r    r!   )Úconnr   r   r   r   Úreduce_connection<   s    r$   )r	   r   Ú_socketZmultiprocessing.connectionr   Zmultiprocessing.contextr   Z	reductionr   Úhasattrr   r   r   r   r   r"   r$   r   r   r   r   Ú<module>	   s&   
ÿ
ý