3
Yd\              	   @   s  d Z ddlmZ ddlmZ ddlZddlZddlmZ ddl	m
Z
 ejjd	d
didofd
edd dd didpfgdd Zejjd	i edd dddqfedd di ddrfedd dedd dddsfgdd Zejjdi edd di ddtdufed d di i ddvdwfed"d ded#d di ddxdyfgd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZddlZeej j!dAd dkrdBndCZ"dDe" dE dFdGdHdIgZ#dJdKdLdMdNdOgZ$dPdQdRdSdTdOgZ%dPdQdUdVdTdOgZ&e#e#e#e%e&dWZ'ejjdXdYdZgejjd[d\d]d^d_d`gdadb Z(dJdKdcdddedfdgdhdOg	Z)dPdQdidSdTdOgZ*dPdQdidVdTdOgZ+e#e#e#e*e+dWZ,e$e$e)djZ-ejjdXdYdZgejjd[d\d]d^d_d`gdkdl Z.dmdn Z/dS )zzTests for the engine module
    )deepcopy)globN   )engine   )EngineTestInterfaceziterables, expected1c               C   s   ddgS )Nr       r
   r
   r
   Z/var/www/html/virt/lib/python3.6/site-packages/nipype/pipeline/engine/tests/test_engine.py<lambda>   s    r   )input1input2   c             C   s   t jdd}t jt dd}t|d| d  |j|g |j |_t jt	|j|_
t|j
j |d ksntt|j
j |d kstd S )	Npipe)namemod1)	interfacer   	iterablesr   r   r   )peWorkflowNoder   setattr	add_nodes_create_flat_graph
_flatgraphgenerate_expanded_graphr   
_execgraphlennodesAssertionErroredges)r   expectedr   r   r
   r
   r   	test_1mod   s    
r#   c               C   s   ddgS )Nr   r	   r
   r
   r
   r
   r   r   (   s    )r   )r   2r	   c               C   s   ddgS )Nr   r	   r
   r
   r
   r
   r   r   )   s    c               C   s   ddgS )Nr   r	   r
   r
   r
   r
   r   r   +   s       c             C   s   t jdd}t jt dd}t jt dd}x$dD ]}ttd| d	| |  q2W |j||dgfg |j |_t j	t
|j|_t|jj |d kstt|jj |d kstd S )Nr   )r   r   )r   r   mod2r   r$   modr   output1r   r   r   )r   r$   )r(   r   )r   r   r   r   r   evalconnectr   r   r   r   r   r   r   r    r!   )r   r"   r   r   r&   nrr
   r
   r   
test_2mods%   s    

r,   ziterables, expected, connectc               C   s   ddgS )Nr   r	   r
   r
   r
   r
   r   r   A   s    )r   r$   3   1-22-3c               C   s   ddgS )Nr   r	   r
   r
   r
   r
   r   r   F   s    1-3c               C   s   ddgS )Nr   r	   r
   r
   r
   r
   r   r   L   s    c               C   s   ddgS )Nr   r	   r
   r
   r
   r
   r   r   M   s       c                s@  t jdd t jt dd}t jt dd}t jt dd}x$dD ]}ttd
| d| |  qBW |dkr j||dgf||dgfg n0|dkr j||dgf||dgfg ntd j  _	t j
t j	 _t jj |d k stt jj |d kstt fdd jj D }|d dks<td S )Nr   )r   r   )r   r   r&   mod3r   r$   r-   r'   r   1-22-3r(   r   1-3r   z?connect pattern is not implemented yet within the test functionr   r   c                s,   g | ]$}t  jj|t  jj| qS r
   )r   r   Zin_edgesZ	out_edges).0node)r   r
   r   
<listcomp>u   s   ztest_3mods.<locals>.<listcomp>)r   r$   r-   )r4   r5   )r(   r   )r(   r   )r6   r5   )r(   r   )r(   r   )r   r   r   r   r   r)   r*   	Exceptionr   r   r   r   r   r   r   r    r!   sorted)r   r"   r*   r   r&   r3   r+   Zedgenumr
   )r   r   
test_3mods=   s0    




r<   c              C   s  t jdd} t jt dd}t jt dd}| j||dgfg t jdd}t jt d	d}t jt d
d}|j||dgfg t jdd}|j| |dgfg t jdd}t jt dd}|j|g t jdd}	|	j|g t jdd}
|
j|	|dgfg |
j |
_d S )Npipe1)r   r   )r   r   r&   r(   r   pipe2r3   mod4pipe3mod2.output1mod4.input1pipe4mod5pipe5pipe6pipe4.mod5.output1pipe2.mod3.input1)r(   r   )r(   r   )rA   rB   )rG   rH   )r   r   r   r   r*   r   r   r   )r=   r   r&   r>   r3   r?   r@   rC   rD   rE   rF   r
   r
   r   test_expansion|   s$    rI   c              C   s   t jdd} t jt dd}t jt dd}dddgf|_| j|d|d	 t jd
d}x$dD ]}|j| jd| dg q\W |j |_	t
t j|j	j dkstd S )Ntest)r   node1node2r   r   r	   r(   r   groupr   ztest%d   )r   r   r	   )r   r   r   r   r   r*   r   cloner   r   r   r   r   r    )wf1rK   rL   wf3ir
   r
   r   test_iterable_expansion   s    

rS   c              C   s   t jdd} t jt dd}dddgfddd	d
gfg|_d|_t jt dd}| j|d|d t jdd}x$dD ]}|j| jd| dg qpW |j	 |_
tt j|j
j dkstd S )NrJ   )r   rK   r   r   r	   r   r   r   r.   TrL   r(   rM   r   ztest%d   )r   r   r	   )r   r   r   r   r   synchronizer*   r   rO   r   r   r   r   r   r    )rP   rK   rL   rQ   rR   r
   r
   r   test_synchronize_expansion   s    

rV   c              C   s   t jdd} t jt dd}t jt dd}ddddgg|_d|_| j|d|d t jdd}x$dD ]}|j| jd| dg qdW |j	 |_
tt j|j
j dkstd S )NrJ   )r   rK   rL   r   r   r   r   r	   r   r.   Tr(   rM   r   ztest%drT   )r   r   )r   r   )r	   r   )Nr.   )r   r   r	   )r   r   r   r   r   rU   r*   r   rO   r   r   r   r   r   r    )rP   rK   rL   rQ   rR   r
   r
   r   !test_synchronize_tuples_expansion   s    

rW   c              C   s
  t jdd} t jt dd}dddgf|_t jt dd}| j|d|d t jt d	d}d|_dd
dgdddgdfg|_| j|d|d t jt dd}| j|d|d t jdd}x$dD ]}|j| jd| dg qW |j	 |_
tt j|j
j dkstd S )NrJ   )r   rK   r   r   r	   rL   r(   node3r   r   r.   r%      )r   r	   node4rM   r   ztest%d*   )rK   r   )r   r   r	   )r   r   r   r   r   r*   
itersourcer   rO   r   r   r   r   r   r    )rP   rK   rL   rX   rZ   rQ   rR   r
   r
   r   test_itersource_expansion   s     


r]   c              C   s0  t jdd} t jt dd}dddgfddd	gfg|_d
|_t jt dd}| j|d|d t jt dd}dddgf|_ddddgifddddgddgifg|_| j|d|d t jt dd}| j|d|d t jdd}x$dD ]}|j| j	d| dg qW |j
 |_tt j|jj dks,td S )NrJ   )r   rK   r   r   r	   r   r   r   TrL   r(   rX   r.   r%   rY   r2   	   rZ   rM   r   ztest%dr[   )r   r   )r   r   )r	   r   )r   r   r	   )r   r   r   r   r   rU   r*   r\   r   rO   r   r   r   r   r   r    )rP   rK   rL   rX   rZ   rQ   rR   r
   r
   r   &test_itersource_synchronize1_expansion   s$    


r_   c              C   s&  t jdd} t jt dd}dddgfddd	gfg|_d
|_t jt dd}| j|d|d t jt dd}dddgf|_d
|_ddddgddgig|_| j|d|d t jt dd}| j|d|d t jdd}x$dD ]}|j| j	d| dg qW |j
 |_tt j|jj dks"td S )NrJ   )r   rK   r   r   r	   r   r   r   TrL   r(   rX   r.   rY   r%   r2   r^   rZ   rM   r   ztest%d   )r   r   )r   r   )r.   rY   )r%   r2   )r	   r   )Nr^   )r   r   r	   )r   r   r   r   r   rU   r*   r\   r   rO   r   r   r   r   r   r    )rP   rK   rL   rX   rZ   rQ   rR   r
   r
   r   &test_itersource_synchronize2_expansion	  s&    


ra   c       	      C   s   | j   tj }ddlm} 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 ||_||jd d< |jdd d S )Nr   )Functionc               S   s   dS )Nr   r
   r
   r
   r
   r   func10  s    ztest_old_config.<locals>.func1c             S   s   | d S )Nr   r
   )ar
   r
   r   func23  s    ztest_old_config.<locals>.func2rd   )input_namesoutput_namesfunctionn1)r   bn2rJ   c             S   s   | d S )Nr   r
   )xr
   r
   r   r   =  s    z!test_old_config.<locals>.<lambda>r   	executioncrashdump_dirZLinear)plugin)chdirosgetcwdnipype.interfaces.utilityrb   r   r   r   inputsrd   r*   base_dirconfigrun)	tmpdirwdrb   rc   re   ri   rk   w1modifyr
   r
   r   test_old_config+  s     r|   c             C   s0  | j   tj }ddlm}m}m} dd }||dgdg|ddgdd	}d
g|j_|dd}||_	||j
d d< |j|g |j  dg|j_|j  d
g|j_|j }t|j d }	ttjj|	j d}
t|
d
kstttjj|	j dd}|jd W dQ R X |j
d jf ddi |j  dS )z/Tests that mapnodes don't generate excess jsonsr   )MapNoderb   r   c             S   s   | d S )Nr   r
   )in1r
   r
   r   rc   N  s    z test_mapnode_json.<locals>.func1r~   out)rf   rg   rh   ri   )	iterfieldr   r   rJ   )r   rm   rn   r	   z	_0x*.jsonz	test.jsonwtz
dummy fileNZstop_on_first_rerunT)rp   rq   rr   nipyper}   rb   r   rt   r~   ru   rv   r   rw   listr   r   pathjoin
output_dirr   r    openwriteupdate)rx   ry   r}   rb   r   rc   ri   rz   Zegr8   Zoutjsonfpr
   r
   r   test_mapnode_jsonH  s2    



r   c             C   s   ddl m} ddlm} |d}tjt dd}d||ff|_d|jj	_
tj|d	d
dd}tjdd}| j|_d|jd d< |j||dgfg |j  d S )Nr   )IdentityInterface)example_datazfsl_motion_outliers_fd.txtZNode1)r   
input_filer   r~   )fieldsZNode2ZTestFrm   Zparameterize_dirsr(   )r(   r~   )Zinterfaces.utilityr   Ztestingr   r   r   r   r   r   rt   r   r   Zstrpathru   rv   r*   rw   )rx   r   r   r   ri   rk   wfr
   r
   r   test_parameterize_dirs_falsen  s    
r   c             C   s   | j   tj }ddlm}m}m} dd }||dgdg|ddgdd	}d
ddg|j_|dd}||_	|j
|g dd|dd|jd< |j t|jjkst|jdd d|_|j d
kst|jdd d S )Nr   )r}   rb   r   c             S   s   | S )Nr
   )r~   r
   r
   r   rc     s    z test_serial_input.<locals>.func1r~   r   )rf   rg   rh   ri   )r   r   r   r	   r   rJ   )r   true)Zstop_on_first_crashZlocal_hash_checkrn   Zpoll_sleep_durationrm   Z	MultiProc)ro   T)rp   rq   rr   r   r}   rb   r   rt   r~   ru   r   rv   Znum_subnodesr   r    rw   Z_serial)rx   ry   r}   rb   r   rc   ri   rz   r
   r
   r   test_serial_input  s*    
r   c             C   s  | j   x
dD ] } xdD ]}tjdd	}tjt d
d}tjt dd}|j||dgfg y|j||dd W n0 tk
r   dstdj	|rdnd|Y nX t
jjdst
jjdstyt
jd W n tk
r   Y nX yt
jd W q tk
r   Y qX qW qW d S )NorigflatexechierarchicalcoloredTFr   )r   r   )r   r   r&   r(   r   dot)	graph2usesimple_formformatzFailed to plot {} {} graphsimpledetailedz	graph.dotzgraph_detailed.dot)r   r   r   r   r   )TF)r(   r   )rp   r   r   r   r   r*   write_graphr:   r    r   rq   r   existsremoveOSError)rx   graphr   r   r   r&   r
   r
   r   test_write_graph_runs  s*    
r   c       	   #   C   sP  | j   x@dD ]6}x.dD ]$}tjdd	}|}x2td
D ]&}tjdj|d	}|j|g |}q>W tjt dd}|j|g y|j||dd W n@ t	k
r } z$dst
dj|rdnd||W Y d d }~X nX tjjdptjjd st
ytjd W n tk
r   Y nX ytjd W q tk
rB   Y qX qW qW d S )Nr   r   r   r   r   TFr   )r   
   zpipe_nest_{}r   )r   r   r   )r   r   r   z%Failed to plot {} {} deep graph: {!s}r   r   z	graph.dotzgraph_detailed.dot)r   r   r   r   r   )TF)rp   r   r   ranger   r   r   r   r   r:   r    rq   r   r   r   r   )	rx   r   r   r   parentdepthsubr   er
   r
   r   !test_deep_nested_write_graph_runs  s2    
&r   .z"" zstrict digraph z {
z"mod1 (engine)";
z"mod2 (engine)";
z$"mod1 (engine)" -> "mod2 (engine)";
z}
zdigraph structs {
znode [shape=record];
zIpipemod1 [label="{IN}|{ mod1 | engine |  }|{OUT|<outoutput1> output1}"];
zFpipemod2 [label="{IN|<ininput1> input1}|{ mod2 | engine |  }|{OUT}"];
z.pipemod1:outoutput1:e -> pipemod2:ininput1:w;
}zdigraph pipe{
z  label="pipe";
z$  pipe_mod1[label="mod1 (engine)"];
z$  pipe_mod2[label="mod2 (engine)"];
z  pipe_mod1 -> pipe_mod2;
zG  pipe_mod1[label="mod1 (engine)", style=filled, fillcolor="#FFFFC8"];
zG  pipe_mod2[label="mod2 (engine)", style=filled, fillcolor="#FFFFC8"];
)r   r   r   r   r   r   TF
graph_typer   r   r   r   r   c       	      C   s4  | j   tjdd}tjt dd}tjt dd}|j||dgfg |j||dd	 td
}|j }W dQ R X |rxrt	| D ]}||kst
qW nTxRt	| D ]F}|dkr|jddjdd|kst
q|jddjdd|kst
qW |dkr0td}|j }W dQ R X xtD ]}||kst
qW dS )z3checking dot files for a workflow without iterablesr   )r   r   )r   r   r&   r(   r   r   )r   r   r   z	graph.dotNr   r   zmod1 (engine)zmod1.EngineTestInterface.enginezmod2 (engine)zmod2.EngineTestInterface.enginez$pipe.mod1.EngineTestInterface.enginez$pipe.mod2.EngineTestInterface.enginezgraph_detailed.dot)r(   r   )r   r   )r   r   )rp   r   r   r   r   r*   r   r   readdotfilesr    replacedotfile_detailed_orig)	rx   r   r   r   r   r&   f	graph_strliner
   r
   r   test_write_graph_dotfile  s4    



r   zRpipemod1aIa1 [label="{IN}|{ a1 | engine | mod1.aI }|{OUT|<outoutput1> output1}"];
zJpipemod2a1 [label="{IN|<ininput1> input1}|{ a1 | engine | mod2 }|{OUT}"];
zRpipemod1aIa0 [label="{IN}|{ a0 | engine | mod1.aI }|{OUT|<outoutput1> output1}"];
zJpipemod2a0 [label="{IN|<ininput1> input1}|{ a0 | engine | mod2 }|{OUT}"];
z4pipemod1aIa0:outoutput1:e -> pipemod2a0:ininput1:w;
z4pipemod1aIa1:outoutput1:e -> pipemod2a1:ininput1:w;
zk  pipe_mod1[label="mod1 (engine)", shape=box3d,style=filled, color=black, colorscheme=greys7 fillcolor=2];
)r   r   r   c       	      C   sF  | j   tjdd}tjt dd}dddgf|_tjt dd}|j||dgfg |j||d
d td}|j	 }W dQ R X |rxrt
| D ]}||kstqW nTxRt
| D ]F}|dkr|jddjdd|kstq|jddjdd|kstqW |dkrBtd}|j	 }W dQ R X x t| D ]}||ks*tq*W dS )z0checking dot files for a workflow with iterablesr   )r   r   )r   r   r   r   r	   r&   r(   r   )r   r   r   z	graph.dotNr   r   zmod1 (engine)zmod1.EngineTestInterface.enginezmod2 (engine)zmod2.EngineTestInterface.enginez$pipe.mod1.EngineTestInterface.enginez$pipe.mod2.EngineTestInterface.enginezgraph_detailed.dot)r(   r   )r   r   )r   r   )rp   r   r   r   r   r   r*   r   r   r   dotfiles_iterr    r   dotfiles_detailed_iter)	rx   r   r   r   r   r&   r   r   r   r
   r
   r   "test_write_graph_dotfile_iterablesu  s6    


r   c        	         s   ddl m}  ddlm  G  fddd| }tjd}dd }tj| dd	}dd
lm} tj|dgdg|ddd	}d}y|j	|d|d W n. t
k
r } zd|krd}W Y dd}~X nX |stdS )z,Ensure any io subclass allows dynamic traitsr   )IOBase)DynamicTraitedSpecc                   s   e Zd ZdZ Zdd ZdS )z test_io_subclass.<locals>.TestKVTc             S   s   i }d|d< d|d< |S )Nr   rJ   barZfoor
   )selfoutputsr
   r
   r   _list_outputs  s    z.test_io_subclass.<locals>.TestKV._list_outputsN)__name__
__module____qualname__Z_always_runZoutput_specr   r
   )r   r
   r   TestKV  s   r   Ztestkvc             S   s   | d S )Nr	   r
   )rJ   r
   r
   r   testx2  s    z test_io_subclass.<locals>.testx2)r   )rb   rJ   Ztest2)rf   rg   rh   funcTz'Module testkv has no output called testFN)Znipype.interfaces.ior   Znipype.interfaces.baser   r   r   r   rs   rb   r*   r:   r    )	r   r   r   r   Zkvnoderb   r   Zexception_not_raisedr   r
   )r   r   test_io_subclass  s"    

r   )r   r   )r   r   )r   r	   )r   r	   )r%   r   )r.   r   )r/   r0   )r.   r   )r1   r0   )r2   r2   )r1   r0   )0__doc__copyr   r   rq   Zpytestr   r   r   Z	test_baser   markZparametrizedictr#   r,   r<   rI   rS   rV   rW   r]   r_   ra   r|   r   r   r   r   r   Znetworkxint__version__splitr   Zdotfile_origr   Zdotfile_hierarchicalZdotfile_coloredr   r   Zdotfile_detailed_iter_execZdotfile_iter_hierarchicalZdotfile_iter_coloredr   r   r   r   r
   r
   r
   r   <module>   s   
(+# "&("
/-