a
    ƹDfA	                     @   s<   d Z ddlZdddZdddZdd Zd	d
 Zdd ZdS )z%
utilities for distributed computing
    Nc                 C   s$   |du st | ds| S | |p dS )zBconvert bytes to string using the given codec (default is 'ascii')Fdecodeascii)hasattrr   )bytecodec r   X/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/pathos/util.py_str   s    r	   c                 C   s$   |du st | ds| S | |p dS )zBconvert string to bytes using the given codec (default is 'ascii')Fencoder   )r   r
   )stringr   r   r   r   _b   s    r   c                  C   s8   ddl } ddl}| }| j|d |dd | S )z6thread-safe return of string from print_exception callr   N)file)	tracebackioStringIO	print_excseekread)r   r   sior   r   r   print_exc_info   s    r   c                 C   sf   t  \}}t  }|dkr<t | t |d}| ||S t | t |dd}t  }|||S )za unidirectional fork wrapper

Calls onParent(pid, fromchild) in parent process,
      onChild(pid, toparent) in child process.
    r   rbwbospipeforkclosefdopengetpid)onParentonChildc2preadc2pwritepid	fromchildtoparentr   r   r   spawn'   s    


r&   c                 C   s   t  \}}t  \}}t  }|dkrbt | t | t |d}t |dd}| |||S t | t | t |d}	t |dd}
t  }|||	|
S )za bidirectional fork wrapper

Calls onParent(pid, fromchild, tochild) in parent process,
      onChild(pid, fromparent, toparent) in child process.
    r   r   r   r   )r   r    p2creadp2cwriter!   r"   r#   r$   ZtochildZ
fromparentr%   r   r   r   spawn2<   s    



r)   )N)N)__doc__r   r	   r   r   r&   r)   r   r   r   r   <module>
   s   

