3
Yd%              
   @   s   d dl Z d dlmZ d dlZddlmZ ddlmZ ddlm	Z
 dd	lmZ d
dlmZ d
dlmZ dd Zdd Zdd Zejjdddgfddgddgfd,ddgfedd ddgfddgfddgddgfgdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zejjd)d*d+ ZdS )-    N)deepcopy   )config)utility   )engine   )
merge_dict   )EngineTestInterface)UtilsTestInterfacec               C   sF   t jt tj  W d Q R X t jt tjtdd W d Q R X d S )Ntest)name)pytestraises	TypeErrorpeNodeIOErrorr    r   r   Y/var/www/html/virt/lib/python3.6/site-packages/nipype/pipeline/engine/tests/test_nodes.pytest_node_initW   s    r   c              C   sV   t jt dd} d| j_| j  | jdddgks6td | _| jdddgksRtd S )Nmod1)Z	interfacer   r
   Zoutput1)	r   r   r   inputsinput1run
get_outputAssertionError_result)r   r   r   r   test_node_get_output^   s    r   c              C   s~   t jt dgdd} tjt | j  W d Q R X t jt ddgdd} ddg| j_d| j_	tjt | j  W d Q R X d S )Nr   r   )	iterfieldr   input2r
   r   r   )
r   MapNoder   r   r   
ValueErrorZ_check_iterfieldr   r   r!   )r   r   r   r   test_mapnode_iterfield_checkg   s    r$   zx_inp, f_exp   StrZStrStrZStr1ZStr2ZStr1Str1ZStr2Str2c             C   s\   ddl m}m} dd }|dgdg|}||ddgd}| |j_|j }|jj|ksXtd S )	Nr   )r"   Functionc             S   s   d|  S )Nr   r   )xr   r   r   double_func   s    z0test_mapnode_iterfield_type.<locals>.double_funcr(   f_xdouble)r   r    )	nipyper"   r'   r   r(   r   outputsr*   r   )Zx_inpZf_expr"   r'   r)   r+   Zdouble_noderesr   r   r   test_mapnode_iterfield_typet   s    r/   c          
   C   s   | j   ddlm}m} dd }||dgdg|ddgdd	d
}ddggdddgg|j_|j  |jdddggdddggkst||dgdg|ddgdd	d
}ddggdddgg|j_t	j
t}|j  W d Q R X dt|jkstd S )Nr   )r"   r'   c             S   s   | d S )Nr
   r   )in1r   r   r   func1   s    z"test_mapnode_nested.<locals>.func1r0   out)input_namesoutput_namesfunctionTn1)r    nestedr   r
   r   r   r      r%   Fzcan only concatenate list)chdirr,   r"   r'   r   r0   r   r   r   r   r   	Exceptionstrvalue)tmpdirr"   r'   r1   r6   n2excinfor   r   r   test_mapnode_nested   s(    "r@   c             C   s   | j   ddlm}m} dd }|||dddddd	}d
dg|j_x`|j D ]T\}}x$dD ]}t||t||ks\tq\W x$dD ]}t||t||kstqW qNW d S )Nr   )r"   r'   c             S   s   | d S )Nr
   r   )r0   r   r   r   r1      s    z%test_mapnode_expansion.<locals>.func1)r5   r0   mapnoder   )r    r   Zn_procsZmem_gbr
   	overwriterun_without_submittingplugin_args_n_procs_mem_gb)rB   rC   rD   )rE   rF   )	r9   r,   r"   r'   r   r0   Z_make_nodesgetattrr   )r=   r"   r'   r1   rA   idxnodeattrr   r   r   test_mapnode_expansion   s    

rK   c                s  ddl m} | j  tj  tjddd tjddtj  dd }d	d
 }tj	|g dg|ddd}tj	|dgdg|ddd}tj
dd}dd }d|j_|j|d|f|d tj |_ddlm} G dd dt G  fddd|}	tj }
|j|	 d W d Q R X t|
jjds&t|jdd tjddd |jdd tjddd tj
dd}|j|d|f|d tj |_|j|	 d d S )Nr   )r'   	executionZstop_on_first_crashTZcrashdump_dirc               S   s   dS )Nr
   r   r   r   r   r   r1      s    ztest_node_hash.<locals>.func1c             S   s   | d S )Nr
   r   )ar   r   r   func2   s    ztest_node_hash.<locals>.func2rM   )r3   r4   r5   r6   )r   br>   r   c             S   s   | d S )Nr
   r   )r(   r   r   r   modify   s    ztest_node_hash.<locals>.modifyr
   )DistributedPluginBasec               @   s   e Zd ZdS )z+test_node_hash.<locals>.EngineTestExceptionN)__name__
__module____qualname__r   r   r   r   EngineTestException   s   rU   c                   s   e Zd Zd fdd	ZdS )z"test_node_hash.<locals>.RaiseErrorFc                s    d|j   d S )Nz%Submit called - cached=%s, updated=%s)Z	is_cached)selfrI   Z
updatehash)rU   r   r   _submit_job   s    z.test_node_hash.<locals>.RaiseError._submit_jobN)F)rR   rS   rT   rW   r   )rU   r   r   
RaiseError   s   rX   )pluginzSubmit calledZLinearZlocal_hash_checkF)Znipype.interfaces.utilityr'   r9   r   Zset_default_configsetosgetcwdr   r   Workflowr   rM   connectbase_dirZnipype.pipeline.plugins.baserQ   r:   r   r   r   r;   r<   
startswithr   )r=   r'   r1   rN   r6   r>   Zw1rP   rQ   rX   r?   r   )rU   r   test_node_hash   s<    

ra   c             C   s   dd }t jtjdgddg|d| jdd}d	|j_d
ddii|_tt	tj
|j|_|j  | j|jdj stt| j|jdj stdg|_|j  | j|jdj  st| j|jdj std S )Nc             S   s|   dd l }|jj|j d}|jj|j d}t|d}|jd|   W d Q R X t|d}|jd|   W d Q R X ||fS )Nr   z	file1.txtz	file2.txtwtz%d)r[   pathjoinr\   openwrite)arg1r[   file1file2fpr   r   r   test_function   s    z+test_outputs_removal.<locals>.test_functionrg   rh   ri   )r3   r4   r5   Ztestoutputs)r_   r   r
   rL   Zremove_unnecessary_outputsTz	file1.txtz	file2.txt)r   r   niur'   strpathr   rg   r   r	   r   	_sectionsr   rd   r   checkr   Zneeded_outputs)r=   rk   r6   r   r   r   test_outputs_removal   s$    rp   c             C   s   | j d}|jd tjt | jdd}|j|j_dddii|_t	t
tj|j|_|j  | j |jdj srt|j|j_dddii|_t	t
tj|j|_d|_|j  | j |jdj  std S )	Nz	file1.txtZ
dummy_fileZ
testinputs)r_   r   rL   Zkeep_inputsTF)rd   rf   r   r   r   rm   r   in_filer   r	   r   rn   r   r   ro   r   rB   )r=   rh   r6   r   r   r   test_inputs_removal   s    



rr   c             C   s   t jdddgdggdd}tjt jdddgdggdddd}|j }|j }|jjdgks`t|jjdgksrt|jjjdgkstdS )	zTest an OutputMultiPath whose initial value is ``[[x]]`` to ensure that
    it is returned as ``[x]``, regardless of how accessed.r
   r   r   r   )Zinlistindex	select_nd)r   N)	rl   ZSelectr   r   r   r-   r2   r   result)r=   Z	select_ifrt   ZifresZndresr   r   r   test_outputmultipath_collapse1  s    $rv      c          
   C   s   | j   ddd}tjtj|dddgd}dg|j_tjd	d
}|j|g t	j
jd|_tjt |jdd W d Q R X d S )Nr
      c             S   s   | |krt d|  | d S )NzGot the deadly num (%d).r
   )RuntimeError)numZ
deadly_numr   r   r   	_producerC  s    z&test_mapnode_single.<locals>._producer)r5   ZProducerNoderz   )r   r    ZPC_Workflow)r   z./test_outputZ	MultiProc)rY   )r
   rx   )r9   r   r"   rl   r'   r   rz   r]   Z	add_nodesr[   rc   abspathr_   r   r   ry   r   )r=   r{   ZpnodeZwfr   r   r   test_mapnode_single?  s    

r}   )r   r   ) r[   copyr   r    r   Z
interfacesr   rl   r   r   utilsr	   Z	test_baser   Z
test_utilsr   r   r   r$   markZparametrizeranger/   r@   rK   ra   rp   rr   rv   timeoutr}   r   r   r   r   <module>   s4   J	
@!