B
    18\*                 @   s  d dl Z d dlZd dlZddlmZ ddlmZ g ZG dd deZG dd deZ	G d	d
 d
eZ
G dd deZG dd deZG dd dejZG dd deZdd eeD e_ejdkrLG dd dejZG dd dejZG dd dejZG dd deZG dd deZG d d! d!eZe e e d"Zeed# Zn8G d$d dejZG d%d deZd&e iZeed& Zd'd( Ze Zd)d* Zd+d, Zd-d. Z dS )/    N   )process)	reductionc               @   s   e Zd ZdS )ProcessErrorN)__name__
__module____qualname__ r	   r	   [/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/multiprocessing/context.pyr      s   r   c               @   s   e Zd ZdS )BufferTooShortN)r   r   r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd ZdS )TimeoutErrorN)r   r   r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd ZdS )AuthenticationErrorN)r   r   r   r	   r	   r	   r
   r      s   r   c               @   sN  e Zd ZeZeZeZeZeej	Z	eej
Z
dd Zdd ZdCddZdd	 Zd
d ZdDddZdEddZdFddZdd ZdGddZdHddZdIddZdd ZdJd d!Zd"d# Zd$d% Zdd&d'd(Zdd&d)d*Zd+d, Zd-d. ZdKd/d0Zd1d2 Z d3d4 Z!d5d6 Z"dLd7d8Z#dMd:d;Z$dNd<d=Z%e&d>d? Z'e'j(d@d? Z'dAdB Z)dS )OBaseContextc             C   s"   t  }|d krtdn|S d S )Nzcannot determine number of cpus)os	cpu_countNotImplementedError)selfnumr	   r	   r
   r   (   s    
zBaseContext.cpu_countc             C   s&   ddl m} ||  d}|  |S )Nr   )SyncManager)ctx)Zmanagersr   get_contextstart)r   r   mr	   r	   r
   Manager0   s    zBaseContext.ManagerTc             C   s   ddl m} ||S )Nr   )Pipe)
connectionr   )r   Zduplexr   r	   r	   r
   r   ;   s    zBaseContext.Pipec             C   s   ddl m} ||  dS )Nr   )Lock)r   )synchronizer   r   )r   r   r	   r	   r
   r   @   s    zBaseContext.Lockc             C   s   ddl m} ||  dS )Nr   )RLock)r   )r   r   r   )r   r   r	   r	   r
   r   E   s    zBaseContext.RLockNc             C   s   ddl m} |||  dS )Nr   )	Condition)r   )r   r   r   )r   lockr   r	   r	   r
   r   J   s    zBaseContext.Conditionr   c             C   s   ddl m} |||  dS )Nr   )	Semaphore)r   )r   r!   r   )r   valuer!   r	   r	   r
   r!   O   s    zBaseContext.Semaphorec             C   s   ddl m} |||  dS )Nr   )BoundedSemaphore)r   )r   r#   r   )r   r"   r#   r	   r	   r
   r#   T   s    zBaseContext.BoundedSemaphorec             C   s   ddl m} ||  dS )Nr   )Event)r   )r   r$   r   )r   r$   r	   r	   r
   r$   Y   s    zBaseContext.Eventc             C   s    ddl m} |||||  dS )Nr   )Barrier)r   )r   r%   r   )r   partiesactiontimeoutr%   r	   r	   r
   r%   ^   s    zBaseContext.Barrierr   c             C   s   ddl m} |||  dS )Nr   )Queue)r   )queuesr)   r   )r   maxsizer)   r	   r	   r
   r)   c   s    zBaseContext.Queuec             C   s   ddl m} |||  dS )Nr   )JoinableQueue)r   )r*   r,   r   )r   r+   r,   r	   r	   r
   r,   h   s    zBaseContext.JoinableQueuec             C   s   ddl m} ||  dS )Nr   )SimpleQueue)r   )r*   r-   r   )r   r-   r	   r	   r
   r-   m   s    zBaseContext.SimpleQueuer	   c             C   s"   ddl m} ||||||  dS )Nr   )Pool)context)poolr.   r   )r   Z	processesZinitializerZinitargsZmaxtasksperchildr.   r	   r	   r
   r.   r   s    
zBaseContext.Poolc             G   s   ddl m} ||f| S )Nr   )RawValue)sharedctypesr1   )r   typecode_or_typeargsr1   r	   r	   r
   r1   y   s    zBaseContext.RawValuec             C   s   ddl m} |||S )Nr   )RawArray)r2   r5   )r   r3   size_or_initializerr5   r	   r	   r
   r5   ~   s    zBaseContext.RawArray)r    c            G   s&   ddl m} ||f|||  dS )Nr   )Value)r    r   )r2   r7   r   )r   r3   r    r4   r7   r	   r	   r
   r7      s    zBaseContext.Valuec            C   s    ddl m} |||||  dS )Nr   )Array)r    r   )r2   r8   r   )r   r3   r6   r    r8   r	   r	   r
   r8      s    zBaseContext.Arrayc             C   s,   t jdkr(tt ddr(ddlm} |  d S )Nwin32frozenFr   )freeze_support)sysplatformgetattrspawnr;   )r   r;   r	   r	   r
   r;      s    zBaseContext.freeze_supportc             C   s   ddl m} | S )Nr   )
get_logger)utilr@   )r   r@   r	   r	   r
   r@      s    zBaseContext.get_loggerc             C   s   ddl m} ||S )Nr   )log_to_stderr)rA   rB   )r   levelrB   r	   r	   r
   rB      s    zBaseContext.log_to_stderrc             C   s   ddl m} d S )Nr   )r   ) r   )r   r   r	   r	   r
   allow_connection_pickling   s    z%BaseContext.allow_connection_picklingc             C   s   ddl m} || d S )Nr   )set_executable)r?   rF   )r   
executablerF   r	   r	   r
   rF      s    zBaseContext.set_executablec             C   s   ddl m} || d S )Nr   )set_forkserver_preload)
forkserverrH   )r   module_namesrH   r	   r	   r
   rH      s    z"BaseContext.set_forkserver_preloadc             C   sH   |d kr| S yt | }W n" tk
r:   td| d Y nX |  |S )Nzcannot find context for %r)_concrete_contextsKeyError
ValueError_check_available)r   methodr   r	   r	   r
   r      s    zBaseContext.get_contextFc             C   s   | j S )N)_name)r   
allow_noner	   r	   r
   get_start_method   s    zBaseContext.get_start_methodc             C   s   t dd S )Nz+cannot set start method of concrete context)rM   )r   rO   forcer	   r	   r
   set_start_method   s    zBaseContext.set_start_methodc             C   s   t  dS )Nr   )globalsget)r   r	   r	   r
   reducer   s    zBaseContext.reducerc             C   s   |t  d< d S )Nr   )rU   )r   r   r	   r	   r
   rW      s    c             C   s   d S )Nr	   )r   r	   r	   r
   rN      s    zBaseContext._check_available)T)N)r   )r   )NN)r   )r   )NNr	   N)N)N)F)F)*r   r   r   r   r   r   r   staticmethodr   current_processZactive_childrenr   r   r   r   r   r   r!   r#   r$   r%   r)   r,   r-   r.   r1   r5   r7   r8   r;   r@   rB   rE   rF   rH   r   rR   rT   propertyrW   setterrN   r	   r	   r	   r
   r      sJ   








 





r   c               @   s   e Zd ZdZedd ZdS )ProcessNc             C   s   t  j| S )N)_default_contextr   r\   _Popen)process_objr	   r	   r
   r^      s    zProcess._Popen)r   r   r   _start_methodrX   r^   r	   r	   r	   r
   r\      s   r\   c                   sF   e Zd ZeZdd Zd fdd	ZdddZdd	d
Zdd Z  Z	S )DefaultContextc             C   s   || _ d | _d S )N)r]   _actual_context)r   r/   r	   r	   r
   __init__   s    zDefaultContext.__init__Nc                s0   |d kr | j d kr| j| _ | j S t |S d S )N)rb   r]   superr   )r   rO   )	__class__r	   r
   r      s
    
zDefaultContext.get_contextFc             C   s<   | j d k	r|std|d kr,|r,d | _ d S | || _ d S )Nzcontext has already been set)rb   RuntimeErrorr   )r   rO   rS   r	   r	   r
   rT      s    zDefaultContext.set_start_methodc             C   s"   | j d kr|rd S | j| _ | j jS )N)rb   r]   rP   )r   rQ   r	   r	   r
   rR      s
    
zDefaultContext.get_start_methodc             C   s,   t jdkrdgS tjr dddgS ddgS d S )Nr9   r?   forkrI   )r<   r=   r   HAVE_SEND_HANDLE)r   r	   r	   r
   get_all_start_methods   s
    

z$DefaultContext.get_all_start_methods)N)F)F)
r   r   r   r\   rc   r   rT   rR   ri   __classcell__r	   r	   )re   r
   ra      s   

ra   c             C   s   g | ]}|d  dkr|qS )r   _r	   ).0xr	   r	   r
   
<listcomp>  s    rn   r9   c               @   s   e Zd ZdZedd ZdS )ForkProcessrg   c             C   s   ddl m} || S )Nr   )Popen)Z
popen_forkrp   )r_   rp   r	   r	   r
   r^     s    zForkProcess._PopenN)r   r   r   r`   rX   r^   r	   r	   r	   r
   ro     s   ro   c               @   s   e Zd ZdZedd ZdS )SpawnProcessr?   c             C   s   ddl m} || S )Nr   )rp   )Zpopen_spawn_posixrp   )r_   rp   r	   r	   r
   r^     s    zSpawnProcess._PopenN)r   r   r   r`   rX   r^   r	   r	   r	   r
   rq     s   rq   c               @   s   e Zd ZdZedd ZdS )ForkServerProcessrI   c             C   s   ddl m} || S )Nr   )rp   )Zpopen_forkserverrp   )r_   rp   r	   r	   r
   r^      s    zForkServerProcess._PopenN)r   r   r   r`   rX   r^   r	   r	   r	   r
   rr     s   rr   c               @   s   e Zd ZdZeZdS )ForkContextrg   N)r   r   r   rP   ro   r\   r	   r	   r	   r
   rs   %  s   rs   c               @   s   e Zd ZdZeZdS )SpawnContextr?   N)r   r   r   rP   rq   r\   r	   r	   r	   r
   rt   )  s   rt   c               @   s   e Zd ZdZeZdd ZdS )ForkServerContextrI   c             C   s   t jstdd S )Nz%forkserver start method not available)r   rh   rM   )r   r	   r	   r
   rN   0  s    z"ForkServerContext._check_availableN)r   r   r   rP   rr   r\   rN   r	   r	   r	   r
   ru   -  s   ru   )rg   r?   rI   rg   c               @   s   e Zd ZdZedd ZdS )rq   r?   c             C   s   ddl m} || S )Nr   )rp   )Zpopen_spawn_win32rp   )r_   rp   r	   r	   r
   r^   ?  s    zSpawnProcess._PopenN)r   r   r   r`   rX   r^   r	   r	   r	   r
   rq   =  s   c               @   s   e Zd ZdZeZdS )rt   r?   N)r   r   r   rP   rq   r\   r	   r	   r	   r
   rt   D  s   r?   c             C   s   t |  t_d S )N)rK   r]   rb   )rO   r	   r	   r
   _force_start_methodQ  s    rv   c               C   s   t tdd S )Nspawning_popen)r>   _tlsr	   r	   r	   r
   get_spawning_popenZ  s    ry   c             C   s
   | t _d S )N)rx   rw   )popenr	   r	   r
   set_spawning_popen]  s    r{   c             C   s    t  d krtdt| j d S )NzF%s objects should only be shared between processes through inheritance)ry   rf   typer   )objr	   r	   r
   assert_spawning`  s    
r~   )!r   r<   	threadingrD   r   r   __all__	Exceptionr   r   r   r   objectr   ZBaseProcessr\   ra   dirr=   ro   rq   rr   rs   rt   ru   rK   r]   rv   localrx   ry   r{   r~   r	   r	   r	   r
   <module>   sD    >'

