U
    Íø.eÈ  ã                   @   sr  d dl Z d dlZd dlZd dlZzd dlZW n ek
rH   d dlZY nX zd dlmZ W n ek
rv   dd„ ZY nX d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ dd	d
dddddddddddgZdZdZd ZdZdZdZdZ dZ!dZ"dZ#dZ$da%da&d d„ Z'd!d	„ Z(d"d
„ Z)d#d„ Z*d$d%„ Z+d&d'„ Z,d(d„ Z-d0d)d„Z.d*d+„ Z/d,d-„ Z0d.d/„ Z1dS )1é    N)Ú_args_from_interpreter_flagsc                  C   st   ddddddddd	d
dœ
} g }|   ¡ D ].\}}ttj|ƒ}|dkr&| d||  ¡ q&tjD ]}| d| ¡ q\|S )zrReturn a list of command-line arguments reproducing the current
        settings in sys.flags and sys.warnoptions.ÚdÚOÚBÚsÚSÚEÚvÚbÚRÚ3)
ÚdebugÚoptimizeÚdont_write_bytecodeÚno_user_siteÚno_siteÚignore_environmentÚverboseÚbytes_warningÚhash_randomizationZpy3k_warningr   ú-z-W)ÚitemsÚgetattrÚsysÚflagsÚappendÚwarnoptions)Úflag_opt_mapÚargsÚflagÚoptr	   © r!   ú1/tmp/pip-unpacked-wheel-39f38r4u/billiard/util.pyr      s&    ö
r   )Ú_afterfork_registryÚ_afterfork_counterÚ_exit_functionÚ_finalizer_registryÚ_finalizer_counterÚFinalizeÚForkAwareLocalÚForkAwareThreadLockÚget_temp_dirÚ
is_exitingÚregister_after_forkÚ_run_after_forkersÚ_run_finalizersé   )Ú	get_errnoÚ	sub_debugr   ÚinfoÚsub_warningÚ
get_loggerÚlog_to_stderrr+   r-   r,   r(   r*   r)   ÚSUBDEBUGÚ
SUBWARNINGé   é   é
   é   é   é   é(   Úmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFc                 O   s   t rt jt| f|ž|Ž d S ©N)Ú_loggerÚlogr7   ©Úmsgr   Úkwargsr!   r!   r"   r2   `   s    c                 O   s   t rt jt| f|ž|Ž d S rA   )rB   rC   ÚDEBUGrD   r!   r!   r"   r   e   s    c                 O   s   t rt jt| f|ž|Ž d S rA   )rB   rC   ÚINFOrD   r!   r!   r"   r3   j   s    c                 O   s   t rt jt| f|ž|Ž d S rA   )rB   rC   r8   rD   r!   r!   r"   r4   o   s    c                 O   s   t rt jt| f|ž|Ž d S rA   )rB   rC   ÚWARNINGrD   r!   r!   r"   Úwarnings   s    rJ   c                 O   s   t rt jt| f|ž|Ž d S rA   )rB   rC   ÚERRORrD   r!   r!   r"   Úerrorw   s    rL   c                  C   s”   ddl } |  ¡  ztts‚|  t¡adt_|  td¡ |  t	d¡ t
tdƒr^t t¡ t t¡ n$tj tdi f¡ tj tdi f¡ W 5 |  ¡  X tS )z0
    Returns logger used by multiprocessing
    r   Nr7   r8   Ú
unregisterr!   )ÚloggingÚ_acquireLockÚ_releaseLockrB   Ú	getLoggerÚLOGGER_NAMEÚ	propagateÚaddLevelNamer7   r8   ÚhasattrÚatexitrM   r%   ÚregisterZ_exithandlersÚremover   )rN   r!   r!   r"   r5   |   s    



c                 C   sJ   ddl }tƒ }| t¡}| ¡ }| |¡ | |¡ | rB| | ¡ dat	S )zB
    Turn on logging and add a handler which prints to stderr
    r   NT)
rN   r5   Ú	FormatterÚDEFAULT_LOGGING_FORMATÚStreamHandlerÚsetFormatterÚ
addHandlerÚsetLevelÚ_log_to_stderrrB   )ÚlevelrN   ÚloggerÚ	formatterÚhandlerr!   r!   r"   r6   ™   s    



c                  C   sª   t j d¡stƒ ‚zxdt jkrZt ¡ } |  d¡ |  d¡}|  	d¡}| 
t|¡ |d W S t ¡ }tj d¡}| 
tt |¡¡ |jW S W n tk
r¤   tƒ ‚Y nX dS )zE
    Return the current value of the parent process death signal
    ÚlinuxÚcffiúint prctl (int __option, ...);zint *Nr   ú	libc.so.6)r   ÚplatformÚ
startswithÚOSErrorÚmodulesre   ÚFFIÚcdefÚnewÚdlopenÚprctlÚPR_GET_PDEATHSIGÚctypesÚc_intÚcdllÚLoadLibraryÚbyrefÚvalueÚ	Exception)ÚffiÚargÚCÚsigÚlibcr!   r!   r"   Úget_pdeathsig¬   s     




r~   c              
   C   s¤   t j d¡stdƒ‚z^dt jkrRt ¡ }| d¡ | d¡}| 	t
| d| ¡¡ ntj d¡}| 	t
t | ¡¡ W n, tk
rž } ztdƒ|‚W 5 d}~X Y nX dS )	am  
    Set the parent process death signal of the calling process to sig
    (either a signal value in the range 1..maxsig, or 0 to clear).
    This is the signal that the calling process will get when its parent dies.
    This value is cleared for the child of a fork(2) and
    (since Linux 2.4.36 / 2.6.23) when executing a set-user-ID or set-group-ID binary.
    rd   z$pdeathsig is only supported on linuxre   rf   NÚintrg   z(An error occured while setting pdeathsig)r   rh   ri   rj   rk   re   rl   rm   ro   rp   ÚPR_SET_PDEATHSIGÚcastrr   rt   ru   rs   rx   )r|   ry   r{   r}   Úer!   r!   r"   Úset_pdeathsigÄ   s    


rƒ   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )z&
    Automatic retry after EINTR.
    c               
      sF   zˆ | |ŽW S  t k
r> } zt|ƒtjkr.‚ W 5 d }~X Y q X q d S rA   )rj   r1   ÚerrnoZEINTR)r   rF   Úexc©Úfuncr!   r"   Úwrappedà   s
    z_eintr_retry.<locals>.wrapped)Ú	functoolsÚwraps)r‡   rˆ   r!   r†   r"   Ú_eintr_retryÛ   s    r‹   )N)2r   r„   r‰   rV   re   ÚImportErrorrr   Ú
subprocessr   Zmultiprocessing.utilr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   Úcompatr1   Ú__all__rq   r€   ÚNOTSETr7   rG   rH   r8   rI   rK   rR   rZ   rB   r_   r2   r   r3   r4   rJ   rL   r5   r6   r~   rƒ   r‹   r!   r!   r!   r"   Ú<module>
   sh   <          ü	
