
    Cd/                    R   d dl mZ 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j        d          Zd dlmZmZ ej        j        dk    r ej        d           d d	lmZmZmZmZ nej                            d
d          Zd dlmZ d dlmZ 	 d dlmZm Z  dZ!n# e"$ r	 d
Z!dZ dZY nw xY wej                            e!d          Z# ej$        d          Z%d Z&d Z'dde
dfe
dfe	ddfe(ddgfdZ)d Z*d Z+d Z,d Z-d  Z.d! Z/d" Z0d# Z1d$ Z2d% Z3d& Z4d' Z5d( Z6d) Z7d* Z8ej        9                    d+ ej:        d,e e#-           ej:        d.e ej        ;                    d/d0          -          d1 e<d          fd2 e<d          f ej:        d3ee#-          g          ej        ;                    ej=        d4k    d5d0          d6                         Z>ej        9                    d+ ej:        d,e e#-           ej:        d.e ej        ;                    d/d0          -          d1 e<d          fd2 e<d          f ej:        d3ee#-          g          ej        ;                    ej=        d4k    d5d0          d7                         Z?e#ej        ;                    ej=        d4k    d5d0          d8                         Z@d9 ZAej        9                    d: ej:        d;d3d<ee#-          d=dd= e<d          f ej:        d=d3d>ee#-           ej:        d;dd?e e#-           ej:        d>dd>ee#-          g          ej        ;                    ej=        d4k    d5d0          d@                         ZBdA ZCej        9                    dBeeg          dC             ZDdS )D    )annotationsN)partial)addnegipycytoscape)_to_cytoscape_jsoncytoscape_graph   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                h    t                               |           }|r|                    d          S d S N   label_rematchgrouplinems     3lib/python3.11/site-packages/dask/tests/test_dot.py	get_labelr    +   5    tA wwqzz     c                h    t                               |           }|r|                    d          S d S )Nr
   r   r   s     r   	get_shaper$   1   r!   r"   r   abcde)r%   r&   r'   r(   r)   fc                     t          t          t          d          df          dk    sJ t          t          df          dk    sJ t          t          t          ddff          dk    sJ d S )Nr   r   r
   zadd(...))r   r   r    r"   r   test_task_labelr-   A   so    wsA*++u4444sAh5((((sS!QK())Z777777r"   c                    t          d          dk    sJ t          d          dk    sJ i } t          d|           }|dk    sJ t          d|           }|dk    sJ t          |           dk    sJ t          d|           }|dk    sJ t          |           d	k    sJ t          d|           }|dk    sJ t          |           d	k    sJ t          d|           dk    sJ t          |           d	k    sJ d S )
Nxz)elemwise-ffcd9aa2231d466b5aa91e8bfa9e9487z
elemwise-#)cachezelemwise-#0r   z)elemwise-e890b510984f344edea9a5e5fe05c0dbzelemwise-#1r
   )r   len)r0   results     r   
test_labelr3   G   s6   ::<==MMMME>eLLLF]"""">eLLLF]""""u::????>eLLLF]""""u::????>eLLLF]""""u::????E"""c))))u::??????r"   c            	        t          t                    } t          t          d t	          t
          | j                                      }t          |          dk    sJ t          |          h dk    sJ t          t          d t	          t          | j                                      }t          |          ddhk    sJ d S )N
   >   r'   r(   r)   r*   ""boxcircle
r   dsklistfiltermapr    bodyr1   setr$   glabelsshapess      r   test_to_graphvizrD   _   s    CA&s9af556677Fv;;"v;;4444444&s9af556677Fv;;5(+++++++r"   c            	     \   t          t          dddiiddddi          } t          t          d t	          t
          | j                                      }|h d	k    sJ t          t          d t	          t          | j                                      }t          |          h d
k    sJ d S )Nr%   shapesquarer'   neg_cellipse)r   rF   )data_attributesfunction_attributes>   r(   r)   r*   rH   r6   >   r7   r8   rG   rI   )	r   r:   r?   r<   r=   r    r>   r;   r$   r@   s      r   test_to_graphviz_customrL   h   s    w12 Gi"H"HI	 	 	A
 c)QV445566F3333333&s9af556677Fv;;@@@@@@@@@r"   c                   t          t          t          j        | dz            ddddddidd	i
          }|j        }|j        }t          d |D                       d         }t          d |D                       d         }|d         dk    sJ |d         d	k    sJ |d         dk    sJ |d         dk    sJ |d         dk    sJ |d         dk    sJ d S )Nmydask.htmlLR      r
   z
line-colorredzbackground-colorgreen)filenamerankdirnode_sepedge_sepspacing_factor
edge_style
node_stylec              3  2   K   | ]}|d          dk    |V  dS )selectornodeNr,   .0ss     r   	<genexpr>z.test_cytoscape_graph_custom.<locals>.<genexpr>   0      >>!a
mv&=&=A&=&=&=&=>>r"   stylec              3  2   K   | ]}|d          dk    |V  dS )r\   edgeNr,   r^   s     r   ra   z.test_cytoscape_graph_custom.<locals>.<genexpr>   rb   r"   rankDirnodeSepedgeSepspacingFactor)r	   r:   osfsdecodecytoscape_stylecytoscape_layoutnext)tmp_pathrA   stylayoutnode_styedge_stys         r   test_cytoscape_graph_customrt   t   s&   X566 %(&0		 		 		A 
CF>>s>>>>>wGH>>s>>>>>wGHL!U****&'72222)$$$$)"""")""""/"a''''''r"   c                 Z   t          j        d           ddlm}   | dt                                        d          }|j        j        d         j        d          | dt                                        dd	          }t          fd
|j        j        D                       sJ d S )Nzmatplotlib.pyplotr   )Delayedr*   	cytoscape)enginecolororder)rx   ry   c              3  :   K   | ]}|j         d          k    V  dS )ry   N)data)r_   n
init_colors     r   ra   z-test_cytoscape_graph_color.<locals>.<genexpr>   s.      DDqvg*,DDDDDDr"   )
pytestimportorskipdask.delayedrv   r:   	visualizegraphnodesr|   any)rv   rA   r~   s     @r   test_cytoscape_graph_colorr      s    
+,,,$$$$$$S##;#77Aq!&w/JS##;g#FFADDDDagmDDDDDDDDDDr"   c                 B   t          t                    j        d         dk    sJ t          t          d          j        d         dk    sJ t          t          ddi          j        d         dk    sJ t          t          ddi          j        d         dk    sJ d S )	NrU   BTrO   )rU   ry   white)	node_attr)	edge_attr)r   r:   
graph_attrr   r   r,   r"   r   test_to_graphviz_attributesr      s    s&y1T9999sD)))4Y?4GGGGsw&8999CGLPWWWWWsw&8999CGLPWWWWWWWr"   c            	        t          ddd          } t          t          d t          t          | j                                      }t          |          dk    sJ t          | j                  t          |          z
  dk    sJ d S )Nr   r/   r/   yr
   )r   r;   r<   r=   r    r>   r1   )rA   rB   s     r   test_aliasesr      s{    !#&&''A&s9af556677Fv;;!qv;;V$))))))r"   c            	        t          t          d          } t          t          d t	          t
          | j                                      }t          |          dk    sJ t          |          h dk    sJ t          t          d t	          t          | j                                      }t          |          ddhk    sJ d S )NTverboser5   >   r%   r&   r'   r(   r)   r*   r7   r8   r9   r@   s      r   test_to_graphviz_verboser      s    C&&&A&s9af556677Fv;;"v;;8888888&s9af556677Fv;;5(+++++++r"   c                 H   t          t          d          } t          t          d | d                             }t	          |          dk    sJ t          |          h dk    sJ t          t          d | d                             }t          |          dd	hk    sJ d S )
NTr   c                    | d         d         S Nr|   r   r,   r/   s    r   <lambda>z1test__to_cytoscape_json_verbose.<locals>.<lambda>       &	' 2 r"   r   r5   >   r%   r&   r'   r(   r)   r*   c                    | d         d         S Nr|   rF   r,   r   s    r   r   z1test__to_cytoscape_json_verbose.<locals>.<lambda>   r   r"   rI   	rectangler   r:   r;   r=   r1   r?   r|   rB   rC   s      r   test__to_cytoscape_json_verboser      s    c4000D#22DMBBCCFv;;"v;;8888888#22DMBBCCFv;;9k2222222r"   c            	        t          t          d          } t          t          d t	          t
          | j                                      }t          |          dk    sJ t          |          h dk    sJ t          t          d t	          t          | j                                      }t          |          ddhk    sJ d S )NTcollapse_outputs   >   r'   r(   r)   r*   r6   r7   r8   r9   r@   s      r   !test_to_graphviz_collapse_outputsr      s    C$///A&s9af556677Fv;;!v;;4444444&s9af556677Fv;;5(+++++++r"   c                 H   t          t          d          } t          t          d | d                             }t	          |          dk    sJ t          |          h dk    sJ t          t          d | d                             }t          |          dd	hk    sJ d S )
NTr   c                    | d         d         S r   r,   r   s    r   r   z:test__to_cytoscape_json_collapse_outputs.<locals>.<lambda>   r   r"   r   r   >    r'   r(   r)   r*   c                    | d         d         S r   r,   r   s    r   r   z:test__to_cytoscape_json_collapse_outputs.<locals>.<lambda>   r   r"   rI   r   r   r   s      r   (test__to_cytoscape_json_collapse_outputsr      s    cD999D#22DMBBCCFv;;!v;;2222222#22DMBBCCFv;;9k2222222r"   c            	        t          t          dd          } t          t          d t	          t
          | j                                      }t          |          dk    sJ t          |          h dk    sJ t          t          d t	          t          | j                                      }t          |          ddhk    sJ d S )NTr   r   r   >   r%   r&   r'   r(   r)   r*   r7   r8   r9   r@   s      r   -test_to_graphviz_collapse_outputs_and_verboser      s    C$===A&s9af556677Fv;;!v;;8888888&s9af556677Fv;;5(+++++++r"   c                 J   t          t          dd          } t          t          d | d                             }t	          |          dk    sJ t          |          h dk    sJ t          t          d | d                             }t          |          dd	hk    sJ d S )
NTr   c                    | d         d         S r   r,   r   s    r   r   zFtest__to_cytoscape_json_collapse_outputs_and_verbose.<locals>.<lambda>   r   r"   r   r   >   r%   r&   r'   r(   r)   r*   c                    | d         d         S r   r,   r   s    r   r   zFtest__to_cytoscape_json_collapse_outputs_and_verbose.<locals>.<lambda>   r   r"   rI   r   r   r   s      r   4test__to_cytoscape_json_collapse_outputs_and_verboser      s    cD$GGGD#22DMBBCCFv;;!v;;8888888#22DMBBCCFv;;9k2222222r"   c            	        t                                           } d| d<   t          | d          }t          t	          d t          t          |j                                      }t          |          dk    sJ t          |          h dk    sJ t          t           dd          }t          t	          d t          t          |j                                      }t          |          dk    sJ t          |          h d	k    sJ d S )
N   rA   Tr      >   r%   r&   r'   r(   r)   r*   rA   )r   r   r   >   r%   r&   r'   r(   r)   r*   )
r:   copyr   r;   r<   r=   r    r>   r1   r?   )dsk2rA   rB   s      r   &test_to_graphviz_with_unconnected_noder      s    88::DDID$'''A&s9af556677Fv;;"v;;=======C===A&s9af556677Fv;;!v;;888888888r"   z
format,typpng)marksjpegz jpeg not always supported in dot)r   strictdotpdfsvgwin32z:graphviz/pango on conda-forge currently broken for windowsc                   t          |                     d                    }d                    ||g          }t          |           	 t          t          ||          }t
          j                            d          rJ t
          j                            |          sJ t          ||          sJ 	 t          |           d S # t          |           w xY w)Nz#$(touch should_not_get_created.txt).rT   formatzshould_not_get_created.txt)
strjoinr   r   r:   rj   pathexistsisfile
isinstance)tmpdirr   typrT   targetr2   s         r   test_dot_graphr      s    0 6;;DEEFFHXXx())Ff"3&AAA7>>">?????w~~f%%%%%&#&&&&&&&!!!!!&!!!!s   
A+C Cc                    |                                  }t          t          d |          }|                                  }||k    sJ t          ||          sJ d S Nr   )listdirr   r:   r   )r   r   r   beforer2   afters         r   test_dot_graph_no_filenamer     s_    , ^^FsT&999FNNEU????fc"""""""r"   c                 <   d} d}d                     | |g          }t          |           	 t          t                    }t          j                            |          sJ t          |t                    sJ 	 t          |           d S # t          |           w xY w)Nmydaskr   r   )	r   r   r   r:   rj   r   r   r   r   )default_namedefault_formatr   r2   s       r   test_dot_graph_defaultsr   .  s     LNXX|^455Ff"3w~~f%%%%%&%((((((&!!!!!&!!!!s   AB
 
Bc                V   t          |                     d                    }t          |           	 t          t          |          }t
          j                            |          sJ t          |t          j
                  sJ 	 t          |           d S # t          |           w xY w)NrN   )r   r   r   r	   r:   rj   r   r   r   r   CytoscapeWidget)r   r   r2   s      r   test_cytoscape_graphr   C  s    ]++,,Ff" f--w~~f%%%%%&,">??????&!!!!!&!!!!s   AB B(z+filename,format,target,expected_result_type	mydaskpdfzmydaskpdf.svgz
mydask.pdfzmydask.pdf.svgzmydaskpdf.pngc                    t          t          t          |                     |                    |          }|                     |                                          sJ t          ||          sJ d S r   )r   r:   r   r   r   r   )r   rT   r   r   expected_result_typer2   s         r   test_filenames_and_formatsr   N  sm    8 sSX)>)>%?%?OOOF;;v%%'''''f23333333r"   c                     dd}  t          |           dd          }t          |j        |j                           }d|v sJ d|vsJ d S )	NTc                    | |z   S )Nr,   r   s     r   r*   z$test_delayed_kwargs_apply.<locals>.fp      1ur"   r   r
   )r   r*   apply)T)r   r   daskkey)r*   r/   r   s      r   test_delayed_kwargs_applyr   o  sk        	

1Aqvae}%%E%<<<<%r"   viz_funcc                    d }|df|dft           ddfd}di i}di i}t          j        |          }t          j        |          } | |||           ||k    sJ ||k    sJ d S )Nc                    | dz   S r   r,   r   s    r   incz&test_immutable_attributes.<locals>.inc{  r   r"   r   r
   r%   r&   )r%   r&   r'   )rK   rJ   )r   r   deepcopy)r   r   r:   
attrs_func
attrs_dataattrs_func_testattrs_data_tests          r   test_immutable_attributesr   y  s       aQxsCo
>
>CrJrJmJ//OmJ//OH&"    j((((j((((((r"   )E
__future__r   r   rj   resys	functoolsr   operatorr   r   r   r   r   dask.dotr   r	   flagsoptimizer   r   r   r   markskipif
pytestmarkr   r   
dask.utilsr   IPython.displayr   r   ipython_not_installedImportErroripython_not_installed_markcompiler   r    r$   sumr:   r-   r3   rD   rL   rt   r   r   r   r   r   r   r   r   r   r   parametrizeparamxfailtypeplatformr   r   r   r   r   r   r   r,   r"   r   <module>r	     s   " " " " " "  				 				 



               "v">22 8 8 8 8 8 8 8 89F
###BBBBBBBBBBBBB##> $  J       ( ( ( ( ( ("******** "     E
CCC $[//"9 0    2:677     
	

s
s
sC
Sz	 8 8 8  0, , ,	A 	A 	A( ( (2E E EX X X* * *, , ,3 3 3, , ,3 3 3, , ,3 3 39 9 9 UE)CDDD+##9% $  	
 	
 	
 
T

	T

UC'ABBB   LGG   
" " ! *"" UE)CDDD+##9% $  	
 	
 	
 
T

	T

UC'ABBB   LGG   
# # ! *# LGG   
" "  "" " " 1<V	
 	
 	
 
t\44::6%!13>X	
 	
 	
 	=W	
 	
 	
 	,	
 	
 	
 , LGG   
4 4 - 64      k3E%FGG) ) HG) ) )s   B" "B0/B0