3
Ydo                 @   s   d Z ddlZddlZddlZddlmZ ddlmZ	 G dd de	j
ZG dd de	j
ZG d	d
 d
e	jZejjejdkdddd ZG dd de	j
ZG dd de	j
ZG dd de	jZdd Zdd Zejjejdkdddd ZdS )z+
Test the resource management of MultiProc
    N)engine)basec               @   s(   e Zd ZejjddZejjddZdS )	InputSpecza random int)descN)__name__
__module____qualname__nibtraitsIntinput1input2 r   r   ^/var/www/html/virt/lib/python3.6/site-packages/nipype/pipeline/plugins/tests/test_multiproc.pyr      s   r   c               @   s    e Zd ZejjejjddZdS )
OutputSpecoutputs)r   N)r   r   r   r	   r
   Listr   output1r   r   r   r   r      s   r   c               @   s$   e Zd ZeZeZdd Zdd ZdS )MultiprocTestInterfacec             C   s
   d|_ |S )Nr   )
returncode)selfruntimer   r   r   _run_interface   s    z%MultiprocTestInterface._run_interfacec             C   s    | j  j }d| jjg|d< |S )N   r   )_outputsgetinputsr   )r   r   r   r   r   _list_outputs   s    z$MultiprocTestInterface._list_outputsN)	r   r   r   r   
input_specr   output_specr   r   r   r   r   r   r      s   r         z$multiprocessing issues in Python 3.8)reasonc             C   s   | j   tjdd}tjt dd}tjt dgdd}|j||dgfg tj |_	d|j
_d	|jd
 d< |jdd}dd |j D }t|j |jd }|jd}|ddgkstd S )Npipe)namemod1r   mod2)Z	iterfieldr$   r   r      Z	executionZpoll_sleep_duration	MultiProc)pluginc             S   s   g | ]
}|j qS r   )fullname).0noder   r   r   
<listcomp>3   s    z&test_run_multiproc.<locals>.<listcomp>z	pipe.mod1)r   r   )chdirpeWorkflowNoder   ZMapNodeconnectosgetcwdbase_dirr   r   configrunZnodeslistindexZ
get_outputAssertionError)tmpdirr#   r%   r&   Z	execgraphnamesr,   resultr   r   r   test_run_multiproc%   s    

r>   c               @   s(   e Zd ZejjddZejjddZdS )InputSpecSingleNodeza random int)r   N)r   r   r   r	   r
   r   r   r   r   r   r   r   r?   9   s   r?   c               @   s   e Zd ZejjddZdS )OutputSpecSingleNodeza random int)r   N)r   r   r   r	   r
   r   r   r   r   r   r   r@   >   s   r@   c               @   s$   e Zd ZeZeZdd Zdd ZdS )SingleNodeTestInterfacec             C   s
   d|_ |S )Nr   )r   )r   r   r   r   r   r   F   s    z&SingleNodeTestInterface._run_interfacec             C   s   | j  j }| jj|d< |S )Nr   )r   r   r   r   )r   r   r   r   r   r   J   s    z%SingleNodeTestInterface._list_outputsN)	r   r   r   r?   r   r@   r   r   r   r   r   r   r   rA   B   s   rA   c             C   s   | j   tjdd}tjt ddd}tjt ddd}tjt ddd}tjt ddd}|j|d	|d
 |j|d	|d
 |j|d	|d
 |j|d	|d d|j_d}tj	t
 |jd|ddd W d Q R X d S )Nr#   )r$   n1r   )r$   Zmem_gbn2n3n4r   r   r   g      ?r(   r'   )Z	memory_gbn_procs)r)   plugin_args)r.   r/   r0   r1   rA   r2   r   r   pytestraisesRuntimeErrorr7   )r;   r#   rB   rC   rD   rE   Z
max_memoryr   r   r   "test_no_more_memory_than_specifiedP   s    rK   c             C   s   | j   tjdd}tjt ddd}tjt ddd}tjt ddd}tjt d	dd}|j|d
|d |j|d
|d |j|d
|d |j|d
|d d|j_d}tj	t
 |jdd|id W d Q R X d S )Nr#   )r$   rB   r'   )r$   rF   rC   rD      rE   r   r   r   r(   rF   )r)   rG   )r.   r/   r0   r1   rA   r2   r   r   rH   rI   rJ   r7   )r;   r#   rB   rC   rD   rE   max_threadsr   r   r   #test_no_more_threads_than_specifiede   s    rN   c             C   s   | j   tjdd}tjt ddd}tjt ddd}tjt ddd}tjt ddd}|j|d	|d
 |j|d	|d
 |j|d	|d
 |j|d	|d d|j_d}|jdd|id d S )Nr#   )r$   rB   r'   )r$   rF   rC   rD   rE   r   r   r   rL   r(   rF   )r)   rG   )	r.   r/   r0   r1   rA   r2   r   r   r7   )r;   r#   rB   rC   rD   rE   rM   r   r   r   #test_hold_job_until_procs_availabley   s    rO   )r    r!   )r    r!   )__doc__sysr3   rH   Znipype.pipeliner   r/   Znipype.interfacesr   r	   ZTraitedSpecr   r   ZBaseInterfacer   markZskipifversion_infor>   r?   r@   rA   rK   rN   rO   r   r   r   r   <module>   s"   