o
    i                     @   s   d dl Z d dlZ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
mZ d dlmZ d dlmZ ddlmZmZ d	gZd
d ZeedoMe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)get_spawning_popenset_spawning_popen)Popen)	duplicate   )	reductionspawnr   c                 C   s    | |kpt j| t j|kS N)ospathnormcase)p1p2 r   i/var/www/edux/Edux_v2/venv/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  }i tj|j}trMt|tjrMtj}tj|d< zvt|d	f}	zd}
t||d d |
d
|d d 	\}}}}t| W n ty{   t|  w || _d | _|| _t|| _t | tj| jf t!|  zt"#||	 t"#||	 W t!d  nt!d  w W d    W d S 1 sw   Y  W d S  t$y } z|j%dkrт t&d|j d W Y d }~d S d }~ww )Ninit_main_moduleT)inheritable)
parent_pidpipe_handle c                 s   s    | ]	}d | d V  qdS )"Nr   ).0xr   r   r   	<genexpr>3   s    z!Popen.__init__.<locals>.<genexpr>__PYVENV_LAUNCHER__wbr      zWhile starting z, ignored a IOError 22)'r   get_preparation_data_namegetattrr   piper   msvcrtget_osfhandlecloseget_command_linegetpidjoinget_executableenvironenvWINENVr   sys
executabler   open_winapiCreateProcessCloseHandleBaseExceptionpid
returncode_handleintsentinelr   Finalizer   r
   dumpIOErrorerrnodebug)selfprocess_obj	prep_datarfdwfdrhandlecmd
python_exe	child_envto_childinherithphtr8   _excr   r   r   __init__(   s\   



&"
zPopen.__init__c                 C   s   | t  u sJ t|| jS r   )r   r   r<   )rB   handler   r   r   duplicate_for_childl   s   zPopen.duplicate_for_childN)__name__
__module____qualname____doc__methodrQ   rS   r   r   r   r   r   "   s
    Dc                 K   sB   t tddrtjd| gS d}t }t g|d|d| S )zJ
    Returns prefix of command line used for spawning a child process
    frozenF--multiprocessing-forkzGfrom joblib.externals.loky.backend.popen_loky_win32 import main; main()z-c)r%   r1   r2   r   _args_from_interpreter_flagsr   r-   )r   kwdsprogoptsr   r   r   r*   q   s   r*   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	   rZ      TF)len)argvr   r   r   
is_forking~   s   rc   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)rc   r1   rb   r;   r'   open_osfhandler   O_RDONLYfdopenr   current_process_inheritingr   r   preparer)   
_bootstrapexit)rR   fdfrom_parentpreparation_datarB   exitcoder   r   r   main   s   


rr   )r   r1   r'   r4   pickler   multiprocessingr   r   multiprocessing.contextr   r   !multiprocessing.popen_spawn_win32r   _Popenmultiprocessing.reductionr    r
   r   __all__r   hasattrr2   r   r0   r*   rc   rr   r   r   r   r   <module>   s&    
	O