
    bi-              	         d dl mZ d dlZd dlZd dlmZ d dl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mZmZmZmZ d dlmZ d d	lmZ d d
lmZ  ed      Z ed      Z ed      Z ed      Z G d d      Z d,d-dZ!d Z"dZ#dZ$d Z%d.dZ&ejN                  jQ                  dddg      d        Z)ejN                  jU                  d      d        Z+ejN                  jQ                  dddg      d        Z,ejN                  jQ                  dddg      d        Z-ejN                  jQ                  dddg      d        Z.ejN                  jU                  d       ejN                  jQ                  d!d"d#d"gd"d"id"hg      d$               Z/ejN                  jU                  d%      d&        Z0ejN                  jQ                  dddg      d'        Z1ejN                  jQ                  d(g d)      d*        Z2d+ Z3y)/    )annotationsN)add)delayed)	clone_key)	Blockwise)bind
checkpointchunksclonewait_on)HighLevelGraph)Tuple)import_or_nonez
dask.arrayzdask.dataframepandaszarrc                      e Zd Zd Zd Zd Zy)NodeCounterc                    d| _         y )Nr   )nselfs    ]/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/tests/test_graph_manipulation.py__init__zNodeCounter.__init__   s	        c                0    t        |       | j                  fS N)typer   r   s    r   __dask_tokenize__zNodeCounter.__dask_tokenize__   s    Dz466!!r   c                    t        j                  t        j                         dz         | xj                  dz  c_        |S )Nd      )timesleeprandomr   )r   xs     r   fzNodeCounter.f    s+    

6==?S()!r   N)__name__
__module____qualname__r   r   r&    r   r   r   r      s    "r   r   layersc                  | j                         }|j                         }||j                         }|j                         |j                         z
  |j                         z  rJ |j                         |j                         z
  rJ |j                         |j                         z
  rJ |r|j                  j                         |j                  j                         z
  |j                  j                         z  rJ |j                  j                         |j                  j                         z
  |j                  j                         z  rJ |j                  j                         |j                  j                         z
  rJ |j                  j                         |j                  j                         z
  rJ |j                  j                         |j                  j                         z
  rJ |j                  j                         |j                  j                         z
  rJ y y |j                         |j                         z  rJ |ro|j                  j                         |j                  j                         z  rJ |j                  j                         |j                  j                         z  rJ y y r   )__dask_graph__keysr+   dependencies)abomitr+   dsk1dsk2dskos          r   assert_no_common_keysr6   &   s<   DD""$IIK$))+-<<<99;,,,99;,,,((*T[[-=-=-??4;;CSCSCUUUU&&++-0A0A0F0F0HH##((*++ {{'')DKK,<,<,>>>>{{'')DKK,<,<,>>>>((--/$2C2C2H2H2JJJJ((--/$2C2C2H2H2JJJJJ  99;,,,{{'')DKK,<,<,>>>>((--/$2C2C2H2H2JJJJJ r   c                N   |j                         j                  }| j                         j                  }|j                         D ]@  \  }}	 ||   }t        |t              s|j                         rJ |j                         s@J  y# t        $ r |t	        |d         }Y Rw xY w)zTest that all layers of the original collection exist in the cloned collection
    too and that Blockwise layers have not been materialized
    r   N)r-   r+   itemsKeyErrorr   
isinstancer   is_materialized)clonedorigolayersclayerskvcvs          r   assert_did_not_materializerC   A   s     !!#**G##%,,G ,1	*B a#((***))+++,  	*1a)B	*s   B		B$#B$)g333333?foor*   h2c                 &   t               } t        j                  dt        t	        d            i      } t        | j                        d      t        j                  dd      j                  | j                        t        j                  dd      j                  | j                        t        j                  d	d
gd
      j                  | j                        t        j                  d	gd	      j                  | j                        t        j                  j                   t        | j                        d            t        j!                  |d
      j#                  | j                        t        j!                  |d	      j#                  | j                        t        j!                  |d   d
      j#                  | j                        t        j!                  |d   d	      j#                  | j                        g
}d| _        || fS )Nr%   
   zHello 1)rG   rG      r
   r!   r!      )npartitionszHello 2r   )r   pd	DataFramelistranger   r&   daones
map_blocksdbfrom_sequencemapItemfrom_delayedddfrom_pandasmap_partitionsr   )cntdfcollss      r   collections_with_node_countersr`   V   sy   
-C	sDrO,	-B 	y!
#..suu5
R ++CEE2
!QQ/33CEE:
!!,007
^WSUU^I67
rq)88?
rq)88?
r#wA.==ceeD
r#wA.==ceeDE  CE#:r   c                   t               }t        dt        f|j                  dfdt        f|j                  dfid|j                  dfidt               t               d      }t        d|j                  dfid	|j                  d
fidt               t               d      }| s |j                         }|j                         }t        |t        |            t        |t        |            |fS )Nr0   r!   rL   r1      r0   r1   c   drH   rd   rf   )	r   r   h1r&   rE   setto_dictr   rP   )r+   r]   r3   r4   s       r   demo_tuplesrk   p   s    
-CRy355!*sBi#%%<C#%%QRCTUe#% D SUUAJsSUUAJ&78e#% D ||~||~tDz"E$T
$;S@@r   FTc                    t        |       \  }}}t        |d|gi      }|j                  d      J |j                  dk(  sJ y )Nr%   sync	schedulerrH   )rk   r	   computer   )r+   t1t2r]   cps        r   test_checkpointrt      sK    f%KBC	Brd	$B:::'///55A::r   znot da or not ddc                 t    t               \  } }t        |  }|j                  d       |j                  dk(  sJ y )Nrm   rn      )r`   r	   rp   r   )r_   r]   rs   s      r   test_checkpoint_collectionsrw      s6    /1JE3	U	BJJJ 55B;;r   c                    t        |       \  }}}t        |      }|j                  d      dk(  sJ |j                  dk(  sJ y )Nrm   rn   r!   rL   rb   rb   )rk   r   rp   r   )r+   rq   _r]   t1ws        r   test_wait_on_oner|      sD    V$JB3
"+C;;;(I55555A::r   c                    t        |       \  }}}t        |d|gi      }t        j                  |ddidddgifk(  sJ |j                  dk(  sJ y )Nr%   ro   rm   ry   )re   rH   rH   )rk   r   daskrp   r   )r+   rq   rr   r]   outs        r   test_wait_on_manyr      s[    f%KBC
"sRDk
"C<<//IfX3OOOO55A::r   c           
     $   dt         fddt        fdi}dt        dt         fdt        ffi}ddd}| rIt        j                  d|      }t        ||dt               dhd      }t        j                  d|      }n|j                  |       t        |dt         fdt        fg      }t        |dg      }t        |dg      }t        |d| 	      }t        |d| 	      }t        |d| 	      }	t        |d| 	      }
t        || 
      }t        || 
      }t        ||d|       }|j                         |j                         k(  sJ t        |||        t        ||	|        t        ||
|        t        |||        t        |||        t        ||||        t        j                  ||||	|
|||      dk(  sJ t        d|gid||gi|       }t        j                  |      ddgifk(  sJ |d   d   }t        ||||        t        |||        y )Nr0   r!   rL   r1   rg   rc   )r/   rd   seedassume_layers)r   r2   r   r   r+   )r2   r+   )rb   r   r   r   r   r   r   r   r%   y)r2   r   r   r   )rh   rE   r   r   from_collectionsri   updater   r   r-   r6   r~   rp   )r+   r3   r4   dsk3rq   rr   t3c1c2c3c4c5c6c7r   c8s                   r   
test_cloner      s   "Iq3)Q'D#Ry3),-DD..sD9T"suC51I
 ..sD9D	tsBi#r+	,B	tcU	B	tcU	B	r	0B	r	0B	r	0B	r	0B	r	(B	r	(B	r&	9B""3"3"5555"b0"b0"b0"b0"b0"br&9<<BBBB7;FFF rd3R/
HC<<#v 0000	S!B"br&9"b0r   znot daliteralr!   rJ   c                    t         j                  dd      }d }t         j                  |d|d| d      }t        |      }t	        ||d       t         j
                  j                  ||       y)	zhttps://github.com/dask/dask/issues/8978

    clone() on the result of a dask.array.blockwise operation with a (iterable) literal
    argument
    rG   r!   rI   c                    | S r   r*   )arrlits     r   noopz0test_blockwise_clone_with_literals.<locals>.noop   s    
r   r%   NTr   )rR   rS   	blockwiser   r6   utils	assert_eq)r   r   r   blkclns        r   "test_blockwise_clone_with_literalsr      s^    " ''"Q'
C ,,tS#sGT
:C
*C#s40HHsC r   znot da or not zarrc                 h   t         j                  t        j                  d            } t	        | j
                  j                  | j                     t              sJ t        d | j
                  D              sJ t        |       }t        | |d       t         j                  j                  | |       y)z|https://github.com/dask/dask/issues/9621

    clone() on a Blockwise layer on top of a dependency layer with no indices
    rG   c              3  <   K   | ]  }t        |t                y wr   )r:   str).0r@   s     r   	<genexpr>z7test_blockwise_clone_with_no_indices.<locals>.<genexpr>   s     4az!S!4s   Tr   N)rR   	from_zarrr   rS   r:   r~   r+   namer   anyr   r6   r   r   )r   r   s     r   $test_blockwise_clone_with_no_indicesr      s~     ,,tyy}
%C chhoochh/;;;43884444
*C#s40HHsC r   c                Z   dt         fddt        fdi}dt        dt         fdt        ffi}ddi}t               }dt         f|j                  dfdt        f|j                  dfi}d|j                  dfi}| rtt        d|idt               i      }t        ||d	t               dhd	      }t        |||d
t               dhdhd
      }t        ||dt               t               d      }n3|j                  |       |j                  |       |j                  |       t        |dg      }t        |dg      }t        |dt         fdt        fdg      }	t        ||	d|       }
t        dd      }|
j                         |t         f   d   t        j                  u sJ |
j                         |t        f   d   t        j                  u sJ |
j                         dk(  sJ |j                  dk(  sJ t        ||	|d|       }t        dd      }|j                         |   d   t        j                  u sJ |j                         dk(  sJ |j                  dk(  sJ t        |	|d|       }t        dd      }t        dd      }|j                         |t         f   d   t        j                  u sJ |j                         |t        f   d   t        j                  u sJ |j                         |   d   t        j                  u sJ |j                         dk(  sJ |j                  dk(  sJ y )Na-1r!   rL   b-1c-1d-1erb   )r   r   )r   r   r   )r   r   r   )r   r   r   r      ry   	   )rh   rE   r   r   r&   r   ri   r   r   r   r   r-   r
   rp   r   )r+   r3   r4   r   r]   dsk4dsk4brr   r   t4bound1cloned_a_namebound2cloned_c_namebound3cloned_d_namecloned_e_names                    r   	test_bindr      s   BKUBK+DC%ubk23D5>D
-CBK#%%eR[355!*=D355!*EudmeSU^<&ug(F
 d3E5'5':
 d7SU9STDDE 
teW	B	teW	B	tubkE2;4	5B"bq7Fe!,M  "="#45a8FKKGGG  "="#45a8FKKGGG>>t###55A::"br@Fe!,M  "=1!4CCC>>t###55A::"bq7Fe!,Mc*M  "="#45a8FKKGGG  "="#45a8FKKGGG  "=1!4CCC>>y(((55A::r   zsplit_every,nkeys))rL   i+  )rb      )      )Nr   )g333333 @r   )g    eA   )Fr   c                \   t        d      D ci c]  }d|f|	 }}t        |t        |            }t        ||       }t	        |j                               |k(  sJ |j                  d      J t        ||       }t	        |j                               |dz   k(  sJ |j                  d      t        t        d            k(  sJ ddd}t        |t        |            }t        ||| d	
      }	t	        |	j                               |dz   k(  sJ |	j                  d      dk(  sJ y c c}w )Nr    r0   split_everyrm   rn   r!   rL   )r1   rd   F)r   r   )r!   rL   )
rQ   r   rP   r	   lenr-   rp   r   tupler   )
r   nkeysidskrq   rd   rr   r   r   r   s
             r   test_split_everyr   1  s(    !&c

+1C8Q;
+C
+	sDI	B2;/Aq!"e+++99v9&...		-Br  "#us{222:::'5s+<<<<D	tT$Z	 B	b"+U	CBr  "#uqy000:::'6111 ,s   D)c                 x   t        dddddg      } t        j                  t              5  t	        | d       d d d        t        j                  t              5  t	        | d       d d d        t        j                  t              5  t	        | d       d d d        t        j                  t              5  t	        | d	       d d d        t        j                  t
              5  t	        | ddi       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   y xY w)
Nr!   rL   rc   r0   r1   r   gffffff?r   )r   pytestraises
ValueErrorr	   	TypeError)ts    r   test_split_every_invalidr   O  s    AAc
+A	z	" %1!$%	z	" '1#&'	z	" %1!$%	z	" &1"%&	y	! *11a&)* *% %' '% %& &* *s;   D D	D8D$'D0 D	DD!$D-0D9r   )r+   boolreturnNone)r+   r   r   z tuple[Tuple, Tuple, NodeCounter])4
__future__r   r$   r"   operatorr   r   r~   dask.bagbagrU   r   	dask.baser   dask.blockwiser   dask.graph_manipulationr   r	   r
   r   r   dask.highlevelgraphr   dask.tests.test_baser   dask.utils_testr   rR   rZ   rN   r   r   r6   rC   rh   rE   r`   rk   markparametrizert   skipifrw   r|   r   r   r   r   r   r   r   r*   r   r   <module>r      s'   "         $ L L . & *L!$%Hf
 
K6," 	4A$ E4=1 2 &' ( E4=1 2 E4=1 2 E4=1'1 2'1T H		
	
A	
	!	 !& ()! *!" E4=10 20f 22$*r   