o
    l¨ÊhX  ã                   @   s,  d dl Z d dlZd dlmZ d dlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ ejdkrFd dlZdd	lmZ dd
lmZ ddl	mZ neZejdd… dk rWd dl mZ dgZdZejdkofeeddƒZej ¡  d¡Zdd„ Z e!edƒoe ejej"ƒ Z#G dd„ deƒZdd„ Z$dd„ Z%dd„ Z&dS )é    N)Úload)ÚprocessÚutilé   )Úspawn)Ú	reduction)Úget_spawning_popenÚset_spawning_popenÚwin32)Ú_winapi)ÚPopen)Ú	duplicateé   )é   r   )Úfdopenr   i   ÚfrozenFzpythonservice.exec                 C   s    | |kpt j | ¡t j |¡kS ©N)ÚosÚpathÚnormcase)Úp1Úp2© r   ú`/var/www/html/env/lib/python3.10/site-packages/joblib/externals/loky/backend/popen_loky_win32.pyÚ_path_eq"   s    r   Ú_base_executablec                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )r   z@
    Start a subprocess to run the code of a process object
    Úlokyc                 C   s"  t  |jt|ddƒ¡}t ¡ \}}tt |¡dd�}t 	|¡ t
t ¡ |d�}d dd„ |D ƒ¡}t  ¡ }tj ¡ }| |j¡ trPt|tjƒrPtj}tj|d< z�t|d	ƒ��}	zd}
t ||d d |
d
|d d ¡	\}}}}t |¡ W n ty~   t |¡ ‚ w || _d | _|| _t|ƒ| _ t! "| tj| j f¡ t#| ƒ tj$d d… dk rªt|ƒt%j&_'zt( )||	¡ t( )||	¡ W t#d ƒ tj$d d… dk rÈt%j&`'nt#d ƒ tj$d d… dk rÙt%j&`'w W d   ƒ W d S 1 sæw   Y  W d S  t*�y } z|j+dkrü‚ t! ,d -|j¡¡ W Y d }~d S d }~ww )NÚinit_main_moduleT)Úinheritable)Ú
parent_pidÚpipe_handleú c                 s   s   � | ]}d | V  qdS )z"%s"Nr   )Ú.0Úxr   r   r   Ú	<genexpr>@   s   € z!Popen.__init__.<locals>.<genexpr>Ú__PYVENV_LAUNCHER__Úwbr   r   )r   é   é   z'While starting {}, ignored a IOError 22).r   Úget_preparation_dataÚ_nameÚgetattrr   Úpiper   ÚmsvcrtÚget_osfhandleÚcloseÚget_command_lineÚgetpidÚjoinÚget_executableÚenvironÚcopyÚupdateÚenvÚWINENVr   ÚsysÚ
executabler   Úopenr   ÚCreateProcessÚCloseHandleÚBaseExceptionÚpidÚ
returncodeÚ_handleÚintÚsentinelr   ÚFinalizer	   Úversion_infor   Ú_tlsÚprocess_handler   ÚdumpÚIOErrorÚerrnoÚdebugÚformat)ÚselfÚprocess_objÚ	prep_dataÚrfdÚwfdÚrhandleÚcmdÚ
python_exeÚ	child_envÚto_childÚinheritÚhpÚhtr?   ÚtidÚexcr   r   r   Ú__init__5   sp   ÿ


ý
þ
€þ€&Û&
ÿ€ûzPopen.__init__c                 C   s   | t ƒ u sJ ‚t|| jƒS r   )r   r   rC   )rM   Úhandler   r   r   Úduplicate_for_child}   s   zPopen.duplicate_for_childN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úmethodr\   r^   r   r   r   r   r   /   s
    Hc                 K   s>   t tddƒrtjd| gS d}t ¡ }t ¡ g| d|d| g S )zJ
    Returns prefix of command line used for spawning a child process
    r   Fú--multiprocessing-forkzGfrom joblib.externals.loky.backend.popen_loky_win32 import main; main()z-c)r+   r9   r:   r   Ú_args_from_interpreter_flagsr   r3   )r    ÚkwdsÚprogÚoptsr   r   r   r0   ‚   s   ÿr0   c                 C   s0   t | ƒdkr| d dkrt | ƒdksJ ‚dS dS )z=
    Return whether commandline indicates we are forking
    r   r   rd   r   TF)Úlen)Úargvr   r   r   Ú
is_forking�   s   rk   c                  C   s€   t tjƒsJ ‚ttjd ƒ} t | tj¡}t |d¡}dt	 
¡ _t|ƒ}t |¡ t|ƒ}dt	 
¡ _| ¡  | ¡ }t|ƒ dS )z7
    Run code specified by data received over pipe
    éÿÿÿÿÚrbTFN)rk   r9   rj   rB   r-   Úopen_osfhandler   ÚO_RDONLYr   r   Úcurrent_processÚ_inheritingr   r   Úpreparer/   Ú
_bootstrapÚexit)r]   ÚfdÚfrom_parentÚpreparation_datarM   Úexitcoder   r   r   Úmainš   s   


ry   )'r   r9   Úpickler   Úmultiprocessingr   r   Ú r   r   Úcontextr   r	   Úplatformr-   Úcompat_win32r   r   Ú_Popenr   ÚobjectrE   r   r;   Ú__all__Ú	TERMINATEr+   ÚWINEXEr:   ÚlowerÚendswithÚ
WINSERVICEr   Úhasattrr   r8   r0   rk   ry   r   r   r   r   Ú<module>   s6    

ÿ	S