U
    /e/                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	Z	e	
dZd dlmZmZ ejjdkre	
d d dlmZmZmZmZ ne	jjd	d
dZd dlmZ d dlmZ zd dlmZmZ W n  ek
r   d	Z dZdZY nX dZ e	jje ddZ!e"dZ#dd Z$dd Z%ddedfedfeddfe&ddgfdZ'dd Z(dd  Z)d!d" Z*d#d$ Z+d%d& Z,d'd( Z-d)d* Z.d+d, Z/d-d. Z0d/d0 Z1d1d2 Z2d3d4 Z3d5d6 Z4d7d8 Z5d9d: Z6e	j7d;e	j8d<ee!d=e	j8d>ee	jj9d?dd@d=dAe:dfdBe:dfe	j8dCee!d=ge	jj9ej;dDkdEdd@dFdG Z<e	j7d;e	j8d<ee!d=e	j8d>ee	jj9d?dd@d=dAe:dfdBe:dfe	j8dCee!d=ge	jj9ej;dDkdEdd@dHdI Z=e!e	jj9ej;dDkdEdd@dJdK Z>dLdM Z?e	j7dNe	j8dOdCdPee!d=dQddQe:dfe	j8dQdCdRee!d=e	j8dOddSee!d=e	j8dRddRee!d=ge	jj9ej;dDkdEdd@dTdU Z@dVdW ZAe	j7dXeegdYdZ ZBdS )[    N)partial)addnegipycytoscape)_to_cytoscape_jsoncytoscape_graph   Zgraphviz)	dot_graphlabel
task_labelto_graphvizTz'graphviz exception with Python -OO flag)reason)delayed)ensure_not_exists)SVGImageFzIPython not installedz.*\[label=(.*?) shape=(.*?)\]c                 C   s   t | }|r|dS d S N   label_rematchgrouplinem r   7/tmp/pip-unpacked-wheel-dbjnr7gq/dask/tests/test_dot.py	get_label)   s    
r   c                 C   s   t | }|r|dS d S )Nr   r   r   r   r   r   	get_shape/   s    
r   r   abcde)r   r    r!   r"   r#   fc                   C   sL   t ttddfdkstt tdfdks.tt ttddffdksHtd S )Nr   r   r   zadd(...))r   r   r   AssertionErrorr   r   r   r   test_task_label?   s    r&   c                  C   s   t ddkstt ddks ti } t d| d}|dks<tt d| d}|dksTtt| dksdtt d| d}|dks|tt| d	kstt d| d}|dkstt| d	kstt d| ddkstt| d	kstd S )
Nxz)elemwise-ffcd9aa2231d466b5aa91e8bfa9e9487z
elemwise-#)cachezelemwise-#0r   z)elemwise-e890b510984f344edea9a5e5fe05c0dbzelemwise-#1r   )r
   r%   len)r(   resultr   r   r   
test_labelE   s     r+   c                  C   sv   t t} ttd tt| j}t|dks.tt	|dddddhksHtttd tt
| j}t	|ddhksrtd S )	N
   r!   r"   r#   r$   ""boxcircler   dsklistfiltermapr   bodyr)   r%   setr   glabelsshapesr   r   r   test_to_graphviz]   s    r;   c                  C   s~   t tdddiiddddid} ttd tt| j}|dd	d
ddhksLtttd tt	| j}t|ddddhksztd S )Nr   shapeZsquarer!   Zneg_cellipse)r
   r<   )data_attributesfunction_attributesr"   r#   r$   r-   r.   r/   )
r   r1   r6   r3   r4   r   r5   r%   r2   r   r7   r   r   r   test_to_graphviz_customf   s    
r@   c              
   C   s   t tt| d ddddddidd	id
}|j}|j}tdd |D d }tdd |D d }|d dksrt|d d	kst|d dkst|d dkst|d dkst|d dkstd S )Nmydask.htmlLR      r   z
line-colorZredzbackground-colorZgreen)filenamerankdirZnode_sepZedge_sepZspacing_factorZ
edge_styleZ
node_stylec                 s   s   | ]}|d  dkr|V  qdS )selectornodeNr   .0sr   r   r   	<genexpr>   s      z.test_cytoscape_graph_custom.<locals>.<genexpr>stylec                 s   s   | ]}|d  dkr|V  qdS )rG   ZedgeNr   rI   r   r   r   rL      s      ZrankDirZnodeSepZedgeSepZspacingFactor)r   r1   osfsdecodeZcytoscape_styleZcytoscape_layoutnextr%   )Ztmp_pathr8   ZstyZlayoutZnode_styZedge_styr   r   r   test_cytoscape_graph_customr   s(    
rQ   c                     sp   t d ddlm}  | dtjdd}|jjd jd  | dtjddd	}t	 fd
d|jjD slt
d S )Nzmatplotlib.pyplotr   )Delayedr$   Z	cytoscape)enginecolororder)rS   rT   c                 3   s   | ]}|j d   kV  qdS )rT   N)data)rJ   nZ
init_colorr   r   rL      s     z-test_cytoscape_graph_color.<locals>.<genexpr>)pytestimportorskipZdask.delayedrR   r1   Z	visualizegraphnodesrV   anyr%   )rR   r8   r   rX   r   test_cytoscape_graph_color   s    
r^   c                   C   sp   t tjd dkstt tddjd dks0tt tddidjd dksNtt tddidjd dksltd S )	NrF   ZBTrB   )rF   rT   Zwhite)	node_attr)	edge_attr)r   r1   Z
graph_attrr%   r_   r`   r   r   r   r   test_to_graphviz_attributes   s    ra   c                  C   sR   t ddd} ttd tt| j}t|dks4tt| jt| dksNtd S )Nr   r'   r'   yr   )r   r2   r3   r4   r   r5   r)   r%   )r8   r9   r   r   r   test_aliases   s    rd   c                  C   s|   t tdd} ttd tt| j}t|dks2tt	|dddddd	hksNtttd tt
| j}t	|d
dhksxtd S )NTverboser,   r   r    r!   r"   r#   r$   r.   r/   r0   r7   r   r   r   test_to_graphviz_verbose   s    rg   c                  C   s|   t tdd} ttdd | d }t|dks2tt|ddd	d
ddhksNtttdd | d }t|ddhksxtd S )NTre   c                 S   s   | d d S NrV   r
   r   r'   r   r   r   <lambda>       z1test__to_cytoscape_json_verbose.<locals>.<lambda>r\   r,   r   r    r!   r"   r#   r$   c                 S   s   | d d S NrV   r<   r   ri   r   r   r   rj      rk   r=   	rectangler   r1   r2   r4   r)   r%   r6   rV   r9   r:   r   r   r   test__to_cytoscape_json_verbose   s    rp   c                  C   sz   t tdd} ttd tt| j}t|dks2tt	|dddddhksLtttd tt
| j}t	|d	d
hksvtd S )NTcollapse_outputs   r!   r"   r#   r$   r-   r.   r/   r0   r7   r   r   r   !test_to_graphviz_collapse_outputs   s    rt   c                  C   sz   t tdd} ttdd | d }t|dks2tt|ddd	d
dhksLtttdd | d }t|ddhksvtd S )NTrq   c                 S   s   | d d S rh   r   ri   r   r   r   rj      rk   z:test__to_cytoscape_json_collapse_outputs.<locals>.<lambda>r\   rs   r!   r"   r#   r$    c                 S   s   | d d S rl   r   ri   r   r   r   rj      rk   r=   rm   rn   ro   r   r   r   (test__to_cytoscape_json_collapse_outputs   s    rv   c                  C   s~   t tddd} ttd tt| j}t|dks4tt	|dddddd	hksPtttd tt
| j}t	|d
dhksztd S )NTrr   rf   rs   r   r    r!   r"   r#   r$   r.   r/   r0   r7   r   r   r   -test_to_graphviz_collapse_outputs_and_verbose   s    rx   c                  C   s~   t tddd} ttdd | d }t|dks4tt|ddd	d
ddhksPtttdd | d }t|ddhksztd S )NTrw   c                 S   s   | d d S rh   r   ri   r   r   r   rj      rk   zFtest__to_cytoscape_json_collapse_outputs_and_verbose.<locals>.<lambda>r\   rs   r   r    r!   r"   r#   r$   c                 S   s   | d d S rl   r   ri   r   r   r   rj      rk   r=   rm   rn   ro   r   r   r   4test__to_cytoscape_json_collapse_outputs_and_verbose   s    ry   c                  C   s   t  } d| d< t| dd}ttd tt|j}t|dksBt	t
|dddd	d
ddhks`t	tt ddd}ttd tt|j}t|dkst	t
|dddd	d
dhkst	d S )N   r8   Tre      r   r    r!   r"   r#   r$   )rf   rr   rs   )r1   copyr   r2   r3   r4   r   r5   r)   r%   r6   )Zdsk2r8   r9   r   r   r   &test_to_graphviz_with_unconnected_node   s    r}   z
format,typpng)ZmarksZjpegz jpeg not always supported in dot)r   strictdotZpdfsvgwin32z:graphviz/pango on conda-forge currently broken for windowsc                 C   st   t | d}d||g}t| z@tt||d}tjdrDttj	|sTtt
||sbtW 5 t| X d S )Nz#$(touch should_not_get_created.txt).rE   formatzshould_not_get_created.txt)strjoinr   r	   r1   rN   pathexistsr%   isfile
isinstance)tmpdirr   typrE   targetr*   r   r   r   test_dot_graph   s    r   c                 C   s<   |   }ttd |d}|   }||ks*tt||s8td S Nr   )listdirr	   r1   r%   r   )r   r   r   beforer*   afterr   r   r   test_dot_graph_no_filename  s
    r   c                  C   sX   d} d}d | |g}t| z*tt}tj|s8tt|t	sFtW 5 t| X d S )NZmydaskr~   r   )
r   r   r	   r1   rN   r   r   r%   r   r   )default_namedefault_formatr   r*   r   r   r   test_dot_graph_defaults,  s    r   c                 C   sT   t | d}t| z.tt|}tj|s2tt	|t
jsBtW 5 t| X d S )NrA   )r   r   r   r   r1   rN   r   r   r%   r   r   ZCytoscapeWidget)r   r   r*   r   r   r   test_cytoscape_graphA  s    
r   z+filename,format,target,expected_result_typeZ	mydaskpdfzmydaskpdf.svgz
mydask.pdfzmydask.pdf.svgzmydaskpdf.pngc                 C   s<   t tt| ||d}| | s*tt||s8td S r   )r	   r1   r   r   r   r%   r   )r   rE   r   r   Zexpected_result_typer*   r   r   r   test_filenames_and_formatsL  s    r   c                  C   sF   d	dd} t | ddd}t|j|j }d|ks6td|ksBtd S )
NTc                 S   s   | | S )Nr   rb   r   r   r   r$   n  s    z$test_delayed_kwargs_apply.<locals>.fr   r   )rc   r$   apply)T)r   r   daskkeyr%   )r$   r'   r
   r   r   r   test_delayed_kwargs_applym  s
    
r   viz_funcc                 C   sp   dd }|df|dft ddfd}di i}di i}t|}t|}| |||d ||ks`t||ksltd S )	Nc                 S   s   | d S r   r   ri   r   r   r   incy  s    z&test_immutable_attributes.<locals>.incr   r   r   r    )r   r    r!   )r?   r>   )r   r|   deepcopyr%   )r   r   r1   Z
attrs_funcZ
attrs_dataZattrs_func_testZattrs_data_testr   r   r   test_immutable_attributesw  s    

r   )Cr|   rN   resys	functoolsr   operatorr   r   rY   rZ   r   Zdask.dotr   r   flagsoptimizer	   r
   r   r   markZskipifZ
pytestmarkr   r   Z
dask.utilsr   ZIPython.displayr   r   ImportErrorZipython_not_installedZipython_not_installed_markcompiler   r   r   sumr1   r&   r+   r;   r@   rQ   r^   ra   rd   rg   rp   rt   rv   rx   ry   r}   ZparametrizeparamZxfailtypeplatformr   r   r   r   r   r   r   r   r   r   r   <module>   s&  

 
 


							 

 

	            
