
    bi6,                       d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
Z
d dlZd dlmZmZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZmZ d
 Zd Zd Zd Zd Zd Z d Z!d Z"d Z#e
jH                  jK                  dddide#ig      d        Z&d Z'd Z(d Z)d Z*e
jH                  jK                  dddg      d        Z+d  Z,d! Z-d" Z.d# Z/y)$    annotationsN)Set)ThreadPoolExecutor)collections_to_exprtokenize)	Blockwise)Delayed)HighLevelGraphLayerMaterializedLayerto_graphviz)decincc                T   t        j                  d       t        j                  d       t        j                  d      }t        |       }|j                  dd      }|dz   }|dz   }||z   }|j                  j                  |       t        j                  j                  |      sJ y )	Nnumpygraphviz
dask.array
      chunks      )	pytestimportorskipstronesdask	visualizeospathexists)tmpdirdafnabcds          T/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/tests/test_highgraph.pytest_visualizer-      s    
 

#			\	*B	VB
4 A	AA	AA	AAFFR77>>"    c                     ddi} dt         dfi}| |d}t               dhd}t        ||      }t        |      dt         dfdk(  sJ t	        d |j
                  j                         D              sJ y )Nxr   yr(   r)   r(   r0   r1   c              3  <   K   | ]  }t        |t                y w)N)
isinstancer   ).0layers     r,   	<genexpr>ztest_basic.<locals>.<genexpr>(   s     HEz%'Hs   )r   setr   dictalllayersvalues)r(   r)   r<   dependencieshgs        r,   
test_basicr@       sy    	aA	sCjA1FcU+L		-B8Qc3Z0000HRYY5E5E5GHHHHr.   c                 8   t        j                  d       t        j                  d      } | j                  dd      }|dz   }|dz   }||z   }|j                  }|j	                         |j                         |j                         }}}t        |t              sJ t        |      t        |      k(  sJ t        |      |D 	cg c]  }	||	   	 c}	k(  sJ t        |      t        t        ||            k(  sJ |j                         t        |      k(  sJ y c c}	w )Nr   r   r   r   r   r   r   )r   r   r   r    keysr=   itemsr5   r   listzipto_dictr:   )
r&   r(   r)   r*   r+   r?   rB   r=   rC   is
             r,   &test_keys_values_items_to_dict_methodsrH   +   s    
 			\	*B
4 A	AA	AA	AA	
B'')RYY["((*%&DdC   :b!!!<2.aBqE....;$s401111::<48### /s   Dc                    t        ddddddidt               t               d      } | d   dk(  sJ | d	   dk(  sJ | d
   dk(  sJ | d   dk(  sJ dD ])  }t        j                  t              5  | |    d d d        +  G d d      } |        |       ffD ])  }t        j                  t
              5  | |    d d d        + y # 1 sw Y   {xY w# 1 sw Y   BxY w)Nr   r      r(   r(   r   r)   r*      r2   r(   rL   r)   )r+    r    c                      e Zd ZdZy) test_getitem.<locals>.UnhashableN)__name__
__module____qualname____hash__rO   r.   r,   
UnhashablerQ   M   s    r.   rV   )r   r9   r   raisesKeyError	TypeError)r?   krV   s      r,   test_getitemr[   <   s    	+3(;35su=U
B c7a<<f:??c7a<<c7a<< ]]8$ 	qE	 	  lZ\O, ]]9% 	qE	 		 		 	s   /C4CC	C	c                     t        ddiddiddht               d      } | j                          | j                  sJ | j	                         }dD ]'  }t        | |      }t        ||      }||usJ ||k(  r'J  y )Nr(   r)   r   r2   )r<   r>   key_dependencies)r   r9   get_all_dependenciesr]   copygetattr)h1h2rZ   v1v2s        r,   	test_copyre   U   s    	CjQx(e#% 
B 	B; R^R^||Rxx	r.   c                     dt         dfd} t        d| idt               i      }|j                  dh      }t	        |      ddik(  sJ |j                  dggg      }t	        |      | k(  sJ y )Nr   r0   r3   r(   r1   )r   r   r9   cullr:   )r(   r?   culled_by_xculled_by_ys       r,   	test_cullrj   d   su    sCj!A	a3,	/B''3%.Ka((( ''SE7)$K!!!r.   c                    t        ddddddddidddddd	d
ddhdht               t               t               d
      } t        | j                  j                         D ci c]  \  }}|dk7  s|t	        |       c}}| j
                  j                         D ci c]  \  }}|dk7  s|t        |       c}}      }| j                  ddg      }|j                  |j                  k(  sJ |j
                  |j
                  k(  sJ |j                  D ]B  }|j                  |   | j                  |   u sJ |j
                  |   | j
                  |   u rBJ  y c c}}w c c}}w )Nd1e1)a1a2r+   r   )r)   
dontcull_b
dontcull_c)r+   
dontcull_d)e
dontcull_e)r(   r)   r*   r+   rs   rs   r*   r(   r)   )r   r9   r<   rC   r:   r>   cull_layers)r?   rZ   vexpectculleds        r,   test_cull_layersry   p   sY   	D)!,"**	
 Cju35su35I	
B  "		 1>1Q#XDG>!446Ctq!!s(CFCF
 ^^S#J'F==FMM)))&"5"5555]] <}}Q299Q<///""1%);;;;< 	?Cs   $E
2E
 E%.E%c                    t        j                  d       t        ddddddidt               t               d      } t        j
                  j                  j                  | j                               J | j                  j                         D ];  }t        j
                  j                  j                  |j                               ;J  y )	Njinja2r   r   rJ   rK   r*   rM   r2   )r   r   r   r9   xmletreeElementTree
fromstring_repr_html_r<   r=   )r?   r7   s     r,   test_repr_html_hlg_layersr      s    
!	+3(;e#% 
B 99  ++BNN,<=III!!# Qyy$$//0A0A0CDPPPQr.   c                    | dd  S )Nr   rO   )keys    r,   annot_map_fnr      s    qr7Nr.   
annotationworkeraliceblock_idc                n   t        j                  d       t        j                  d      }t        j                  di | 5  |j	                  dd      }d d d        j                         j                  |j                     }|j                  | k(  sJ t        j                         rJ y # 1 sw Y   XxY w)Nr   r   r   r   r   r   r   rO   )
r   r   r    annotater   __dask_graph__r<   namer   get_annotations)r   r&   Aalayers       r,   test_single_annotationr      s      			\	*B		$	$ -GGHVG,- &&qvv.F+++##%%%%- -s    B++B4c                    t        j                  d       t        j                  d      } t        j                  t              5  t        j                  ddi      5  | j                  dd	      }d d d        dz   }d d d        dz   }t        j                         rJ j                         j                  |j                     }|j                         j                  |j                     }|j                         j                  |j                     }|j                  ddit        d
k(  sJ |j                  dt        ik(  sJ |j                  J y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r   )r   GPUr   )	resourcesr   r   r   )r   r   r   )r   r   r    r   r   r   r   r   r<   r   r   )r&   r   BCr   blayerclayers          r,   test_multiple_annotationsr      s?   
 			\	*B		- ]]eQZ0 	10A	1 E	 	
AA##%%%&&qvv.F&&qvv.F&&qvv.Fqz|!TTTT*l!;;;;%%%	1 	1 s$   E#E2E#E 	E##E,c                    t        j                  d      5  t        j                  t              5  t        j                  d      5  t        j
                         ddik(  sJ ddz   d d d        d d d        t        j
                         ddik(  sJ 	 d d d        t        j
                         rJ y # 1 sw Y   LxY w# 1 sw Y   PxY w# 1 sw Y   8xY w)Nr   )r0   r   r0   r   )r    r   r   rW   ZeroDivisionErrorr   rO   r.   r,    test_annotation_cleared_on_errorr      s    		 2]],- 	# ++-#q999A	 ##%#q1112 ##%%%%	 	 	2 2s:   CC !B4)C 1#C4B=9C  C		CCc                     t        dddddi      } | j                  dhg       \  }}t        |      dk(  sJ |j                  ddik(  sJ y )	N*   gQ	@r2   foobarr   r(   r   )r   rg   lenr   )r7   culled_layer_s      r,   1test_materializedlayer_cull_preserves_annotationsr      s^    tENE
 jj#+OL!|!!!##u~555r.   c                 J   t        j                  d      t        j                  d      fd} t        d      5 }|j                  | d      }|j                  | d      }|j	                         |j	                         g}ddd       ddiddigk(  sJ y# 1 sw Y   xY w)z^Annotations shouldn't leak between threads.
    See https://github.com/dask/dask/issues/10340.r   c                    t        j                  |       5  j                          t        j                         }j                          |cd d d        S # 1 sw Y   y xY w)N)r   )r    r   waitr   )noutb1b2s     r,   fz test_annotations_leak.<locals>.f   sG    ]]q! 	GGI&&(CGGI		 	 	s   6AA!r   Nr   )	threadingBarrierr   submitresult)r   exf1f2r   r   r   s        @@r,   test_annotations_leakr      s     
		1	B			1	B 
A	 ,"YYq!_YYq!_))+ryy{+, uaj5!*----	, ,s   ABB"flatTFc                D   t        j                  d      }t        j                  d      }| r4|j                  |j                  d      j	                  d      d      dz   }n|j                  |j                  d      j	                  d      d	      }|j                  |j                  d      j	                  d      d	      }|j                  ||      j                         }|j                         }d
}|j                  g|h}|j                  |      }|j                  j                         D ]  \  }	}
|	j                  dd      d   }t        |
t        j                  j                         s4t        |j                  |   t        j                  j                         rJ st        |j                  |   t        j                  j                         sJ |
j#                         rJ |
j%                         }||
j&                  g|hk(  sJ |
j#                         sJ  y )Nr   r   (   )rM   r   )r   rM   d   r   )r   )rM   r   r   -r   r   )r   r   
from_arrayarangereshapeouter	transposer   _namerg   r<   rC   rsplitr5   r    	blockwiser	   is_materializedget_output_keysoutput)r   npr&   r0   r1   dskselectrB   dsk_cullr   r7   old_nameout_keyss                r,   test_blockwise_cullr      s   			W	%B			\	*B MM"))B-//8&ACG MM"))B-//6=MM"))B-//6=HHQN$$& 


CFWWvDxx~H,,. 
+e;;sA&q)%!9!9:!#**X"68P8PQQQ#**X.0H0HIII((***((*U\\3F34444((***
+r.   c            
        ddl m}  ddi}t        dt        d       | dd       di d	d
d      }t	        |      t	        |j                               k(  sJ ||d}t               dhd}t        ||      }|j                  d   j                         sJ |j                  d   j                         rJ t	        |      t	        |      t	        |      z   cxk(  rdk(  sJ  J |j                  d   j                         rJ y )Nr   )Taskr0   r   r)   ijc                      y)N1rO   rO   r.   r,   <lambda>z/test_len_does_not_materialize.<locals>.<lambda>  s    r.   rO   )r   r   r   r   )rG   j)r   output_indicestaskindices	numblocksnew_axesr2   r(      )
dask._task_specr   r	   tupler   r   r9   r   r<   r   )r   r(   r)   r<   r>   r?   s         r,   test_len_does_not_materializer     s    $	aAT{#{# v.	A q6S**,----1FcU+L		-B99S>))+++yy~--///r7c!fs1vo******yy~--////r.   c                    t        j                  d       t        j                  d      } t        j                  d       | j                  dd      }||j                  z   }|j	                  d      }|j
                  }t        |      }|j                  D ]Q  }d	|v sd
|v sJ |j                  d      t        d      z   }|j                  d|      }||| }	t        |	      dkD  rQJ  y )Nr   r   r   )  r   )r   r   r   r   )axislabeltooltipz	tooltip=""r   )
r   r   r   Tsumr    r   bodyfindr   )
r&   r(   r)   r*   r?   gr7   startendr   s
             r,   test_node_tooltips_existr   &  s    
 			\	*B

#
Z0A	ACCA	1A	
BBA $e%%%JJ{+c+.>>E**S%(CE#&Gw<!###$r.   c                    dd l m}  | j                  t        t	        d            d      j                         }| j                  t        t	        d            d      j                         }| j                  t        t	        d            d      j                         }t        |j                        t        |j                        k(  sJ t        |j                        t        |j                        k7  sJ y )Nr   r   r   )npartitionsrJ   )dask.bagbagfrom_sequencerD   rangemaxr   r    )dbr(   r)   r*   s       r,   test_tokenize_hlgr   ;  s    
eBia8<<>A
eBia8<<>A
eBia8<<>AAFFx////AFFx////r.   c                    t        dt        dft        dfd      } t        d| idt	               i      }t        d|d      }t        d|d      }dd	lm}  ||j                  dg      }t        |t              sJ |j                  }t        |      dk(  sJ t        t        |            }t        d||      } ||j                  dg      }	t        |	t              sJ |	j                  }t        |      dk(  sJ t        t        |            }t        d|	|      }
t        ||
g      j                         }|j                         }t	        |      t	        d
      k(  sJ y)z7Test that culling changes the layer names in the graph.r   r0   )r0   r1   zr(   r1   )r7   r   r   )optimizexyzN)r   r   r   r   r9   r
   dask.delayedr   _daskr5   r<   r   nextiterr   r   )r   r?   r1   r   r   yopt_hlgr<   	layer_keyyoptzopt_hlgzoptexpr_optdsk_outs                r,    test_culling_changes_layer_namesr  E  sG   
!3*C:F
GC	c
S#%L	1B 	Rs#ARs#A% #'Hh///__F v;!T&\"I3	2D#'Hh///__F v;!T&\"I3	2D #D$<099;H%%'Gw<3u:%%%r.   )0
__future__r   r"   r   xml.etree.ElementTreer|   collections.abcr   concurrent.futuresr   r   r    	dask.baser   r   dask.blockwiser	   r   r
   dask.highlevelgraphr   r   r   r   dask.utils_testr   r   r-   r@   rH   r[   re   rj   ry   r   r   markparametrizer   r   r   r   r   r   r   r   r   r  rO   r.   r,   <module>r     s    " 	    1   3 $   U U $
I$"2	"<6Q 	7	\"&&&*&6.( $/+ 0+B04$*0'&r.   