o
    l¨ÊhÍ  ã                   @   sÜ   d dl Z d dlZd dlZd dlZd dlmZmZ ejdkr"dZdZ	nd dl
Z
ddlmZ ejdko6eeddƒZej ¡  d¡Z	e	rJe j ejd	¡ZnejZd
d„ Zdd„ Zddd„Zg Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)ÚprocessÚutilÚwin32Fé   )Ú	duplicateÚfrozenzpythonservice.exez
python.exec                   C   s   t S )N)Ú_python_exe© r	   r	   úU/var/www/html/env/lib/python3.10/site-packages/joblib/externals/loky/backend/spawn.pyÚget_executable   s   r   c                   C   s   t t ¡ ddƒrtdƒ‚d S )NÚ_inheritingFa  
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.)Úgetattrr   Úcurrent_processÚRuntimeErrorr	   r	   r	   r
   Ú_check_not_importing_main#   s   ÿr   Tc                 C   sÆ  t ƒ  ttjtt ¡ jƒ| tj	tj
t ¡ d�}dd„ tjD ƒ}z| d¡}W n	 ty/   Y nw tj
||< ||d< tjdurYtj ¡ |d< ttjjƒdkrYtjjd }|jj|d	< d
dlm} | ¡  d|ji|d< tjdkr€tt |j¡dd�}||d d< n|j|d d< |rátjd }z	t |j!ddƒ}	W n t"y¢   d}	Y nw |	dur­|	|d< |S tjdks¶t#sát$sát |ddƒ}
|
durátj %|
¡sÓtj
durÓtj &tj
|
¡}
tj '|
¡|d< |d |d< |S )zM
    Return info about parent needed by child to unpickle process object
    )Úlog_to_stderrÚauthkeyÚnameÚsys_argvÚorig_dirÚdirc                 S   s   g | ]}|‘qS r	   r	   )Ú.0Úpr	   r	   r
   Ú
<listcomp>D   s    z(get_preparation_data.<locals>.<listcomp>Ú Úsys_pathNÚ	log_levelr   Úlog_fmtr   ©Ú_resource_trackerÚpidÚtracker_argsr   T)ÚinheritableÚfhÚfdÚ__main__r   Úinit_main_from_nameÚ__file__Úinit_main_from_pathÚ	main_path)(r   Údictr   Ú_log_to_stderrÚbytesr   r   r   ÚsysÚargvÚORIGINAL_DIRÚosÚgetcwdÚpathÚindexÚ
ValueErrorÚ_loggerÚgetEffectiveLevelÚlenÚhandlersÚ	formatterÚ_fmtÚresource_trackerr   Úensure_runningÚ_pidÚplatformr   ÚmsvcrtÚget_osfhandleÚ_fdÚmodulesr   Ú__spec__ÚBaseExceptionÚWINEXEÚ
WINSERVICEÚisabsÚjoinÚnormpath)r   Úinit_main_moduleÚdr   ÚiÚhr   Úchild_wÚmain_moduleÚmain_mod_namer)   r	   r	   r
   Úget_preparation_data5   sd   ú
ÿ


ÿ
ÿö
rQ   c                 C   sb  d| v r| d t  ¡ _d| v r| d t  ¡ _d| v r"| d r"t ¡  d| v r/t ¡  | d ¡ d| v rFddl}t ¡ j	d  
| | d ¡¡ d| v rO| d t_d	| v rX| d	 t_d
| v rct | d
 ¡ d| v rl| d t _d| v r—ddlm} | d d |_tjdkr�| d d }t |d¡|_n| d d |_d| v r£t| d ƒ dS d| v r¯t| d ƒ dS dS )zE
    Try to get current process ready to unpickle process object
    r   r   r   r   r   r   Nr   r   r   r   r!   r   r   r    r   r#   r$   r&   r(   )r   r   r   r   r   r   Ú
get_loggerÚsetLevelÚloggingr8   ÚsetFormatterÚ	Formatterr-   r2   r.   r0   Úchdirr/   r;   r   r=   r>   r?   Úopen_osfhandlerA   Ú_fixup_main_from_nameÚ_fixup_main_from_path)ÚdatarT   r   Úhandler	   r	   r
   Úprepare|   sB   ÿ



ÿr]   c                 C   s~   t jd }| dks|  d¡rd S t|jdd ƒ| krd S t |¡ t d¡}t	j
| ddd�}|j |¡ | t jd< t jd< d S )Nr%   z	.__main__r   Ú__mp_main__T)Úrun_nameÚ	alter_sys)r-   rB   Úendswithr   rC   Úold_main_modulesÚappendÚtypesÚ
ModuleTypeÚrunpyÚ
run_moduleÚ__dict__Úupdate)Úmod_nameÚcurrent_mainrO   Úmain_contentr	   r	   r
   rY   ¯   s   


þrY   c                 C   sˆ   t jd }tj tj | ¡¡d }|dkrd S t|dd ƒ| kr!d S t |¡ t	 
d¡}tj| dd�}|j |¡ | t jd< t jd< d S )Nr%   r   Úipythonr'   r^   )r_   )r-   rB   r0   r2   ÚsplitextÚbasenamer   rb   rc   rd   re   rf   Úrun_pathrh   ri   )r)   rk   Ú	main_namerO   rl   r	   r	   r
   rZ   È   s   


ÿrZ   c                 C   s   t | ƒ dS )z<
    Set sys.modules['__main__'] to module at main_path
    N)rZ   )r)   r	   r	   r
   Úimport_main_pathä   s   rr   )T)r0   r-   rf   rd   Úmultiprocessingr   r   r>   rE   rF   r?   Ú	reductionr   r   Ú
executableÚlowerra   r2   rH   Úexec_prefixr   r   r   rQ   rb   r]   rY   rZ   rr   r	   r	   r	   r
   Ú<module>   s.   

D3