o
    l¨ÊhŒ  ã                   @   s|  d dl Z d dlZd dlZddlmZ ejdkr1ejdd… dk r'd dlmZ n
d dl	Z	d dl
mZ ejdd… dkrUejdkrUG d	d
„ d
eƒZdd„ Zdd„ Zeeeƒ nejdkred dlmZ eeeƒ ejdd… dk r™ejdkr™d dlmZ d dlmZmZ ejZddd„Zdd„ Zdd„ Zeejeƒ dS ejdd… dk r°d dlmZ eejeƒ dS d dlmZ eejeƒ dS )é    Né   )ÚregisterÚwin32é   )é   r   ©ÚPipeConnection)r   é   c                   @   s   e Zd Zddd„Zdd„ ZdS )Ú	DupHandleNc              	   C   sf   |d u rt  ¡ }t tjd|¡}zt t ¡ |||dd¡| _W t |¡ nt |¡ w || _	|| _
d S )NFr   )ÚosÚgetpidÚ_winapiÚOpenProcessÚPROCESS_DUP_HANDLEÚDuplicateHandleÚGetCurrentProcessÚ_handleÚCloseHandleÚ_accessÚ_pid)ÚselfÚhandleÚaccessÚpidÚproc© r   ú^/var/www/html/env/lib/python3.10/site-packages/joblib/externals/loky/backend/_win_reduction.pyÚ__init__   s   
þ
zDupHandle.__init__c              	   C   s^   | j t ¡ kr
| jS t tjd| j ¡}zt || jt ¡ | j	dtj
¡W t |¡ S t |¡ w )NF)r   r   r   r   r   r   r   r   r   r   ÚDUPLICATE_CLOSE_SOURCEr   )r   r   r   r   r   Údetach'   s   
ÿ
þzDupHandle.detach©N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r
      s    
r
   c                 C   s@   | j rtjnd| jrtjndB }t|  ¡ |ƒ}t|| j | jffS )Nr   )Úreadabler   ÚFILE_GENERIC_READÚwritableÚFILE_GENERIC_WRITEr
   ÚfilenoÚrebuild_pipe_connection)Úconnr   Údhr   r   r   Úreduce_pipe_connection4   s
   ÿr,   c                 C   s    ddl m} |  ¡ }||||ƒS )Nr   r   )Úmultiprocessing.connectionr   r   )r+   r$   r&   r   r   r   r   r   r)   :   s   r)   )r,   )r   )Úreduce_handleÚrebuild_handlec                 C   s.   t j |||| d�}|jt j urt j |d�}|S )N)r(   )Ú_sock)ÚsocketÚ	__class__)r   ÚfamilyÚtype_ÚprotoÚsr   r   r   ÚfromfdK   s   r7   c                 C   s4   t tdƒs	tdƒ‚t|  ¡ ƒ}t|| j| j| jffS )Nr7   z)sockets cannot be pickled on this system.)	Úhasattrr1   Ú	TypeErrorr.   r(   Ú_rebuild_socketr3   Útyper5   )r6   Úreduced_handler   r   r   Úreduce_socketQ   s   
r=   c                 C   s"   t | ƒ}t||||ƒ}t|ƒ |S r    )r/   r7   Úclose)r<   r3   r4   r5   r   r6   r   r   r   r:   W   s   r:   )r=   )Ú_reduce_socket)r   )r   Úsysr1   Ú	reductionr   ÚplatformÚversion_infoÚ_multiprocessingr   r   r-   Úobjectr
   r,   r)   Úmultiprocessing.reductionr   r.   r/   r   r>   r7   r=   r:   r?   r   r   r   r   Ú<module>   s<   



