
    bi)]                      d dl mZ d dlZd dlmZ d dlZd dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZ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  ej4                  ddg      d        Zd ZdYdZd Zej>                  jA                  ed      d        Z!d Z"d Z#ej>                  jI                  dddg      d        Z%d Z&d Z'd Z(d Z)d Z*d  Z+d! Z,d" Z-d# Z.d$ Z/d% Z0d& Z1d' Z2d( Z3ej>                  ji                  d)d*      d+        Z5d, Z6d- Z7d. Z8d/ Z9d0 Z:d1 Z;d2 Z<d3 Z=d4 Z>d5 Z?d6 Z@d7 ZAd8 ZBd9 ZCej>                  jI                  d:ddg      d;        ZDd< ZEd= ZFd> ZGd? ZHej>                  jI                  d:ddg      ej>                  jI                  d@ddg      ej>                  jI                  dAdBdCg      ej>                  jI                  dDdEdFg      dG                             ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOej>                  jI                  dNddg      dO        ZPdP ZQdQ ZRdR ZSdS ZTdT ZUdU ZVdV ZWdW ZXdX ZYy)Z    )annotationsNdefaultdict)Version)delayed)WINDOWS)collections_to_expr	key_splitvisualize_dsk)get_deps)_connecting_to_rootsdiagnosticsndependenciesorder)addincabcdeedcba)paramsc                    | j                   S N)param)requests    P/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/tests/test_order.pyr   r      s     ==    c                      y r    )argss    r   fr      s    r   c           
        t        j                         d   d   |z   }t        | d      r*t        | gd      j	                         j                         } ddi}t        | f| d|d	| t        | d
      }t        | f|| dd|ddd| t        | f|| dd|ddd| t        | f|| dd|ddd| t        | f|| dd|dd| y)zUtility to visualize the raw low level graphs in this tests suite. This
    automatically generates a set of visualizations with different metrics and
    writes them out to a file prefixed by the test name and suffixed by the
    measure used.      __dask_graph__Toptimize_graphpenwidth6z.pdf)filename	node_attrreturn_statsz
-order.pdfr   viridisF)or(   colorr)   cmapcollapse_outputsz-age.pdfageRedsz-pressure.pdfmemorypressurez
-cpath.pdfcpath)r-   r(   r.   r)   r0   N)inspectstackhasattrr	   optimizer#   r   r   )dsksuffixkwargsfuncname
node_attrsr-   s         r   	visualizer>       sN   
 }}q!!$v-Hs$%d;DDFUUW 	 c"J#R8*D 1ZR6Rc%A	
:Z(	 	 	
:X&	 	 	
:]+	 	 
:Z( r   c                    i dt         dfdt         dfdt         dfdt         dfd	t         d
fdt         dfdt         dfdt         dfdt         dfdt         dfdt         dfdt         dfdt         ddfdt         ddfdt         d d!fd"t         d#d$fdt         d%fi d&t         d'd(fd)t         d*d+fd,t         d-d.fd+t         d/fd$t         d0fd1t         d2d3fdt         d4fd t         d0fd*t         d4fd-t         d5fd#t         d5fd.t         d6fd't         d6fd3t         d%fd2t         d/fdt         d7d8fd(t         d9d:fi d4t         d;d<fd6t         d=d>fd/t         d?d@dAfd5t         dBdCdDfd%t         dEdFfd0t         dGdHfdt         dIdJfd!t         dKdLfdBt         dMfdDt         dNfd9t         dOfd<t         dPfdHt         dQfdEt         dRfd:t         dSfd;t         dTfd=t         dSfi d7t         dUfd?t         dTfdCt         dVfdFt         dWfdGt         dNfdJt         dWfd@t         dXfd>t         dMfd8t         dPfdIt         dYfdAt         dRfdKt         dQfdLt         dZfdPt         d[fdRt         d\fdMt         d]fdWt         d^fi dQt         d_fdTt         d`fdSt         dafdNt         dbfdt         d1fdt         dfdt         ddfdt         dfd
t         d)fdt         d	dfdt         dfdt         d,fdt         ddfdbt         fdt         d&fdt         d"fdt         ddft         ft         ft         t         ft         ft         ft         ft         ft         ft         ft         ft         t         dcS )dN	transposer   r   r   )concat-groupbyr   r   r   rA   r   r!   r   )rB   r   r!   r   )rA   r!   r   r   )rB   r!   r   r   )rA   r!   r!   r   )rB   r!   r!   r   )groupby-cohortr   r   r   groupby-chunkr   r   r   )rD   r   r   r!   rF   r   r   r!   )rD   r!   r   r   rF   r!   r   r   )rD   r!   r   r!   rF   r!   r   r!   )groupby-cohort-2r   r   r   )groupby-chunk-2r   r   r   )rJ   r   r   r!   )rK   r   r   r!   )rJ   r!   r   r   )rK   r!   r   r   )rJ   r!   r   r!   )rK   r!   r   r!   )rechunk-merger"   r   r   )concat-shuffle   r   r   )rechunk-split   )rL   r   r   r   )rO   r!   )rM   r   r   r   )rL   r"   r!   r   )rO      )rM   rN   r!   r   )rL      r!   r   )rO   
   )rO      )rM   r"   r   r   )rL   r   r!   r   )rO   r"   )rM   r   r!   r   )rL   r!   r   r   )rO   rN   )rO      )rL   r!   r!   r   )rO      )rO      )rM   rR   r   r   )rM   r"   r!   r   )rL   rR   r   r   )rO      )rO   	   )rM   r!   r   r   )rM   rR   r!   r   )rM   r!   r!   r   )shuffle-splitr   )rZ   r!   )rZ   j   )rZ   k   )rZ   i9  )rZ   i8  )rZ   i  )rZ   i  )rZ   ip$  )rZ   q$  )rZ   ir$  )rZ   i%  )rZ   %  )rZ   i%  )rZ   i?  )rZ   i?  )rZ   i.@  )rZ   i/@  )rZ   Q  )rZ   iQ  )rZ   ifR  )rZ   gR  )	getitem-2rR   r!   r   )ra   rQ   r!   r   getitem-openr[   )ra   r!   r   r   )ra      r!   r   )ra   rQ   r   r   )ra   r!   r!   r   )ra   rR   r   r   rc   r   rc   r^   )ra   rd   r   r   rc   r]   rc   r_   rc   r`   open_datasetr!   r   r   rk   rQ   r   r   rk   rR   r!   r   rk   rd   r   r   rk   rd   r!   r   rk   rR   r   r   rk   r!   r!   r   )rk   rQ   r!   r   )rg   rm   ro   rh   re   rj   rf   ri   rp   rb   rq   rl   rn   )r   r   r   r   _rechunk_merge_graphrr   W   s   i$? @i$? @i 	$? @i 	$? @	i
 	$a)C%Di 	$a)C%Di 	$a)C%Di 	$a)C%Di 	&+G'Hi 	&+G'Hi 	&+G'Hi 	&+G'Hi 	#'!%
i$ 	# '%
%i. 	#!'%
/i8 	#Q(=?T$U9i: 	#>?;i< 	# '%
=iF 	#Q(<>R$SGiH 	#Q(<>R$SIiJ 	q"=>KiL 	#>?MiN 	#Q(<>R$SOiP 	q"=>QiR 	#>?SiT 	q"=>UiV 	q"=>WiX 	#>?YiZ 	q"=>[i\ 	q"=>]i^ 	q"=>_i` 	q"=>aib 	$a)=?S%Tcid 	$""&
ein 	$##&
oix 	$##&
yiB 	$###	&
CiN 	$###	&
OiZ 	$$$&
[id 	$$$&
ein 	$$$&
oix 	$$$&
yiB 	 !%;!<CiD 	 !%<!=EiF 	$9 :GiH 	 !%;!<IiJ 	!1&=">KiL 	!1&=">MiN 	$: ;OiP 	 !%;!<QiR 	 !%;!<SiT 	q"56UiV 	 !%;!<WiX 	 !%;!<YiZ 	!1&=">[i\ 	!1&=">]i^ 	!1&=">_i` 	 !%;!<aib 	 !%;!<cid 	q"89eif 	!1&=">gih 	 !%<!=iij 	!1&=">kil 	!1&=">min 	$= >oip 	 !%?!@qir 	$= >sit 	 !%?!@uiv 	 !%?!@wix 	$= >yiz 	$= >{i| 	 !%?!@}i~ 	%q*D&Ei@ 	%q*D&EAiB 	$))&
CiL 	#Q(B$CMiN 	#Q(B$COiP 	$''&
QiZ 	#Q(B$C[i\ 	#Q(B$C]i^ 	$''&
_ih 	#QDiij 	%q*D&Ekil 	%q*D&Emin 	$))&
oix "#$%4%&"#T$%4!""#$%4 !t$%4%&%&Qi ir   zBroken pipe on Windows)reasonc                 ~    t        j                  d       t        j                  d       t        t                      y )Ngraphviz
matplotlib)pytestimportorskipr>   rr   r   r   r   test_visualize_int_overflowry     s*    

#
%"$%r   c           	        | \  }}}}}t        d      D ci c]  }||ft        f }}|j                  |dft        |df|dff|dft        |df|dffi       t        |      }t	        ||       t        ||df   ||df   z
        dk(  sJ t        ||df   ||df   z
        dk(  sJ t        d      D ci c]  }||ft        f }}|j                  |dft        |df|dff|dft        |df|dffi       t        |      }t	        ||       t        ||df   ||df   z
        dk(  sJ t        ||df   ||df   z
        dk(  sJ y c c}w c c}w )NrN   r   r!   rR   r"   )ranger   updater   assert_topological_sortabs)r   abcdeir-   s           r   #test_ordering_keeps_groups_togetherr     s   MAq!Q$Qx(!!Q!(A(HHq!fq1a&1a&)Aq6A1v1v3FGHaAAq!q!Qy1aV9$%***q!Qy1aV9$%***$Qx(!!Q!(A(HHq!fq1a&1a&)Aq6A1v1v3FGHaAAq!q!Qy1aV9$%***q!Qy1aV9$%*** 	) 	)s   E
6Ec                   | \  }}}}}|dft         f|dft         f|dft         |dff|dft         |dff|dft         |dffi}t        |      }t        ||       ||df   ||df   k  s!||df   ||df   k  r||df   ||df   k  sJ yy)z

    b0    b1  b2
    |      \  /
    a0      a1

    There are good arguments for both a0 or a1 to run first. Regardless of what
    we choose to run first, we should finish the computation branch before
    moving to the other one
    r   r!   rR   Nr   r   r}   r   r   r   r   r   r   r9   r-   s           r   test_avoid_broker_nodesr     s     MAq!Q	
A	
A	
AQF	
AQF	
AQFC 	c
AC#aV9q!Qy Q1vYAq6%:q!Qy1aQRV9?TUU?T r   	data_rootTFc           	     \   | \  }}}}}dD ci c]  }||ft         ||dz
  f||ff }}t         |dff||df<   |j                  dD ci c]  }||ft         |df c}       |rd||<   nt         df||<   t        |      }	t        ||	       |	|df   dk  sJ |	|df   dk  sJ yc c}w c c}w )z
               a3
              /|
            a2 |
           /|  |
         a1 |  |
        /|  |  |
      a0 |  |  |
      |  |  |  |
      b0 b1 b2 b3
        \ \ / /
           c

    We really want to run b0 quickly
    )r!   rR   r"   r!   r   )r   r!   rR   r"   r"   N)r   r|   r   r}   )
r   r   r   r   r   r   r   r   r9   r-   s
             r   test_base_of_reduce_preferredr   7  s    " MAq!Q4=
>qAq6A1q5zAq6**
>C
>q!f+CAKJJ<8aAAq	!89AQAc
AC#aV9>>aV9>> ?8s   B$B)c                &   | \  }}}}}|dft         |dff|dft         |dff|dft         |df|dff|dft         |dff|dft         |dff|dft         |dff|dft         |dff|dfd|dfdi	}t        |      }t        ||       ||df   ||df   k  sJ y)z
       a1
       |
       a2
       |
       a3    d1
      /  \  /
    b1    c1
    |     |
    b2    c2
          |
          c3
    r!   rR   r"   Nr   r   s           r   test_avoid_upwards_branchingr   X  s     MAq!Q	
AQF	
AQF	
AQFQF#	
AQF	
AQF	
AQF	
AQF	
A	
A
C 	c
AC#aV9q!Qy   r   c                   | \  }}}}}|dft         |dff|dft         |dff|dft         |df|dff|dft         |dff|dft         f|dft         |dff|dft         |dff|dft         f|dft         |dff|dft         |dff|dft         |dff|dft         |dff|dft         |dffi}t        |      }t        ||       ||df   ||df   k  sJ t        ||df   ||df   z
        dk(  sJ y)a  
         a1
         |
    e2   a2  d2  d3
    |    |    \  /
    e1   a3    d1
     \  /  \  /
      b1    c1
      |     |
      b2    c2
            |
            c3

    Prefer c1 over b1 because c1 will stay in memory less long while b1
    computes
    r!   rR   r"   N)r   r   r}   r~   r   s           r   $test_avoid_upwards_branching_complexr   y  sM   " MAq!Q	
AQF	
AQF	
AQFQF#	
AQF	
A	
AQF	
AQF	
A	
AQF	
AQF	
AQF	
AQF	
AQFC  	c
AC#aV9q!Qy   q!Qy1aV9$%***r   c                    | \  }}}}}|t         |||f|t         ||f|t         |f|t         df|t         dfi}t        |      }t        ||       ||   ||   k  sJ y)a{  
    It's not clear who should run first, e or d

    1.  d is nicer because it exposes parallelism
    2.  e is nicer (hypothetically) because it will be sooner released
        (though in this case we need d to run first regardless)

    Regardless of e or d first, we should run b before c.

            a
          / | \   .
         b  c |
        / \ | /
       e    d
    r!   rR   Nr   r   s           r   #test_deep_bases_win_over_dependentsr     sv      MAq!Q	Aq!Q<	Aq!9	Aq6	Aq6	Aq6C 	c
AC#Q4!A$;;r   c                    | \  }}}}}|d|t         |f|t         |f|d|t         |fi}t        |      }t        ||       ||   ||   k  sJ ||   ||   k  sJ y)zq
        c
        |
    e   b
    |   |
    d   a

    Prefer longer chains first so we should start with d
    r!   Nr   r   s           r   test_prefer_deepr     st     MAq!QaQFA1vq!QA
7Cc
AC#Q4!A$;;Q4!A$;;r   c                    t        d      D ci c]  }d|dz   z  t        d|z  f }}t        |      \  }}t        ||       y c c}w )N'  zx%sr!   )r{   r   r   r   )r   r   r9   dependencies
dependentss        r   test_stacklimitr     sM    6;El
C5AE?S%!),,
CC
C'}L*,
+ Ds   Ac                V   | \  }}}}}t        d      D ci c]  }d|ft        |f }}t        |      }t        t	        |      f|d<   t        |      }	t        ||	       ddi}
|
j                  t        |d d d         D ci c]  \  }}||
 c}}       |	|
k(  sJ y c c}w c c}}w )NrS   xy)	r{   r   sortedr   listr   r}   r|   	enumerate)r   r   r   r   r   r   r   r9   x_keysr-   expectedks               r   test_break_ties_by_strr     s    MAq!Q',Ry
1!C8c1X
1C
1C[F4< CHc
AC#RyHOOitt&=>daQT>?== 2 ?s   B B%
c                H    t        t        dft        dft        ddfd       y )Nr!   rR   r   r   r   )r   r   z)r   r   r   )r   s    r   )test_order_doesnt_fail_on_mixed_type_keysr     s     	aS!HCh3G
HIr   c                 l   t        j                  d       t        j                  d      } d\  }}| j                  j                  ||fd      x}}t	        d      D ]=  }|d d d d d f   |d d d d d f   z  j                  d      }|j                  d      }? |d d d f   z  j                  d	      }t        |j                               }t        |      t        |       t        t        |
      d         dk  sJ |j                         D 	cg c]  }	|	   	 }
}	t        fd|
D              t        |
      dz  kD  sJ |j                         D 	cg c]  }|D ]  }	|	   	  }
}}	t        fd|
D              t        |
      dz  kD  sJ t        |
      |
k(  sJ y c c}	w c c}	}w )Nnumpy
dask.array)   c   r!   N)sizechunksrR   r   axis)r!   rR   r-   r!   rX   c              3  @   K   | ]  }|t              d z  k    ywrR   Nlen.0r   r-   s     r   	<genexpr>ztest_gh_3055.<locals>.<genexpr>       )!q3q6A:~)   r"   c              3  @   K   | ]  }|t              d z  kD    ywr   r   r   s     r   r   ztest_gh_3055.<locals>.<genexpr>  r   r   )rw   rx   randomnormalr{   cumsumsumdictr#   r   r}   maxr   __dask_keys__r   r   )daABorigr   _r   wr9   r   Lkkr-   s               @r   test_gh_3055r     s   
 			\	*BDAqyyaVI>>D11X q$z]Qq!Tz]*222:HH!H 
Qq$wZ&)A
q!
"Cc
AC#{3!$Q'(A---()!1)A))q))CFQJ666**,9"b9199A9)q))CFQJ666!9>> 	* 	:s   F+F0c                D    | \  }}}}}|d|dfd||dfdi}t        |       y )Nr!   rR   r"   r   )r   r   r   r   r   r   r9   s          r   test_type_comparisions_okr     s4    MAq!Qa!QQ1Iq
)C	#Jr   c                    | \  }}}}}|t         f|t         |f|t         |f|t         |f|t         |fi}t        |      }t        ||       ||   ||   kD  sJ ||   ||   kD  sJ y)z9

       a
       |
    d  b  e
     \ | /
       c

    Nr   r   s           r    test_favor_longest_critical_pathr     sz     MAq!QqdA1vq1a&!aVQA
?Cc
AC#Q4!A$;;Q4!A$;;r   c                0   | \  }}}}}d ||||fD        \  }}}}	|t         f|t         f|t         f|t         f|t         ||f|t         ||f|t         |f|t         ||f|	t         |fi	}
t        |
      }t        |
|       t        t	        |
      d         dk(  sJ y)zX
            aa
           / |
      b   d  bb dd
     / \ /|  | /
    a   c e  cc

    c              3  &   K   | ]	  }|d z    ywr   r   )r   r   s     r   r   z,test_run_smaller_sections.<locals>.<genexpr>$  s     2a!e2   r!   r"   N)r   r   r}   r   r   )r   r   r   r   r   r   aabbccddr9   r-   s               r   test_run_smaller_sectionsr     s     MAq!Q2aAq\2NBB 	
A4	A4	A4
QD	Aq!9	Aq!9
QG
Q2J
QG
C 	c
AC# {3"#q(((r   c                   | \  }}fddD        \  }}}fddD        \  }}}fddD        \  }	}
}||||||||
|	g	}g fd}| ||      f| ||      |f| ||      |f| ||      f| ||      ||f| ||      |f| ||      f|
 ||
      ||f|	 ||	      |
fi	}t        |      }t        ||       t        j                  ||||	g       |k(  sJ y)z

            c1
            |
        b1  c2
        |  /|
    a1  b2  c3
    |  /|
    a2  b3
    |
    a3

    Prefer to finish a1 stack before proceeding to b2
    c              3  (   K   | ]	  }|z     y wr   r   r   r   r   s     r   r   z2test_local_parents_of_reduction.<locals>.<genexpr>I       'A!a%'   123c              3  (   K   | ]	  }|z     y wr   r   r   r   r   s     r   r   z2test_local_parents_of_reduction.<locals>.<genexpr>J  r   r   c              3  (   K   | ]	  }|z     y wr   r   )r   r   r   s     r   r   z2test_local_parents_of_reduction.<locals>.<genexpr>K  r   r   c                      fd}|S )Nc                 (    j                         y r   )append)r   logr   s    r   r   z5test_local_parents_of_reduction.<locals>.f.<locals>._R  s    JJqMr   r   )r   r   r   s   ` r   r   z*test_local_parents_of_reduction.<locals>.fQ  s    	 r   N)r   r}   daskget)r   r   r   a1a2a3b1b2b3c1c2c3r   r   r9   r-   r   r   r   r   s                   @@@@r   test_local_parents_of_reductionr   9  s    MAq!Q''JBB''JBB''JBBBBBB3H
C 	QrUH
QrUBK
QrUBK
QrUH
QrUBO
QrUBK
QrUH
QrUBO
QrUBK
C 	c
AC#HHS2r2,(??r   c                   | \  }}}fddD        \	  }}}}}}}	}
}fddD        \  }}}}|t         f|t         f|t         f|t         f|t         |f|t         |f|t         ||f|t         |f|t         ||f|t         |f|	t         ||f|
t         |f|t         |fi}t        |      t        |       dt        fddD              cxk  rdk  sJ  J dt        fd	dD              cxk  rd
k  sJ  J y)z

    a1  a2  a3  a4  a5  a6  a7 a8  a9
     \  |  /  \ |  /  \ |  / \ |  /
        b1      b2      b3     b4

    Want to finish off a local group before moving on.
    This is difficult because all groups are connected.
    c              3  (   K   | ]	  }|z     y wr   r   r   s     r   r   z(test_nearest_neighbor.<locals>.<genexpr>u  s     )EA!a%)Er   	123456789c              3  (   K   | ]	  }|z     y wr   r   r   s     r   r   z(test_nearest_neighbor.<locals>.<genexpr>v  s     ,a!e,r   1234r"   c              3  L   K   | ]  }|z      t              d z  k    ywr   r   )r   r   r   r-   s     r   r   z(test_nearest_neighbor.<locals>.<genexpr>  s&     >Q1QU8c!fqj(>   !$rV   r!   c              3  L   K   | ]  }|z      t              d z  k    ywr   r   )r   r   r   r-   s     r   r   z(test_nearest_neighbor.<locals>.<genexpr>  s&     9Q1QU8c!fqj(9r   rN   N)r   r   r}   r   )r   r   r   r   r   r   a4a5a6a7a8a9r   r   r   b4r9   r   r   r-   s                    @@@r   test_nearest_neighborr  j  s    MAq!Q)E)E&BBBBB,V,NBB 	QD
QD
QD
QD
QG
QG
QBK
QG
QBK
QG
QBK
QG
QGC  	c
AC#s>+>>BBBBBBs9&99=A=====r   c                     t         ft         ft         fd} t        |       }t        | |       |ddddk(  s|ddddk(  sJ yy)z#Prefer ordering tasks by name first)r   r!   r   rR   r   r"   r   r!   rR   Nr   r9   r-   s     r   test_string_orderingr	    s^    TaTaT
:Cc
AC#1Q771A <   <7r   zsee comment)rs   strictc                     t         dft         dft         dft         fd} t        |       }t        | |       |dddddk(  s|dddddk(  sJ yy)	z=Prefer ordering tasks by name first even when in dependenciesr   )r  r  r  r   r   r!   rR   r"   )r   r  r  r  Nr   r  s     r   test_string_ordering_dependentsr    sq     X!SaXQD
QCc
AC#a1Q??1	I D   D?r   c                   | \  }}}}}|dfd|dfd|dfd|dft         |df|df|dff|dfd|dfd|dft         |df|df|dffi}t        |      }t        ||       ||df   ||df   k  sJ ||df   ||df   k  sJ ||df   ||df   k  sJ y )Nr   r!   rR   r   )r   r   r   r   r   r9   r-   s          r   test_prefer_short_narrowr    s    MAq!Q	
A	
A	
A	
AQFQFQF+	
A	
A	
AQFQFQF+C 	c
AC#aV9q!Qy   aV9q!Qy   aV9q!Qy   r   c                   | \  }}}}}||z   }|d|dft         |ddf|dft         |ddf|dfd|dft         |df|df|dff|dft         |ddf|dft         |ddf|dft         |df|df|dffi}t        |      }t        ||       ||df   ||df   k  sJ ||df   ||df   k  sJ ||df   ||df   k  sJ ||df   ||df   k  sJ ||df   ||df   k  sJ y)a  
    From https://github.com/dask/dask-ml/issues/206#issuecomment-395869929

    Two cases, one where chunks of an array are independent, and one where the
    chunks of an array have a shared source. We handled the independent one
    "well" earlier.

    Good:

                    c2
                   / \ \
                  /   \ \
                c1     \ \
              / | \     \ \
            c0  a0 b0   a1 b1

    Bad:

                    c2
                   / \ \
                  /   \ \
                c1     \ \
              / | \     \ \
            c0  a0 b0   a1 b1
                   \ \   / /
                    \ \ / /
                      a-b


    The difference is that all the `a` and `b` tasks now have a common
    ancestor.

    We would like to choose c1 *before* a1, and b1 because

    * we can release a0 and b0 once c1 is done
    * we don't need a1 and b1 to compute c1.
    r   r!   rR   Nr   )r   r   r   r   r   abr9   r-   s           r   test_prefer_short_ancestorr    s_   L MAq!Q	
QB 	A	
AB1	
AB1	
A	
AQFQFQF+	
AB1	
AB1	
AQFQFQF+	C 	c
AC#aV9q!Qy   aV9q!Qy   aV9q!Qy   aV9q!Qy   aV9q!Qy   r   c                :   | \  }}}}}i |dft         f|dft         |dff|dft         |dff|dft         |df|dff|dft         f|dft         |df|df|dff|dft         f|dft         |dff|dft         |dff|dft         |df|df|dff|dft         f|dft         |df|df|dff|dft         f|dft         |dff|dft         |dff|dft         |df|dff}t        |      }t        ||       ||df   ||df   k  s||df   ||df   k  sJ yy)z
      b1      b3      b5
       |\    / | \  / |
      c1  c2  c3  c4  c5
       |/  | \ | / | \|
      d1  d2  d3  d4  d5
       |       |      |
      e1      e3      e5

    Want to finish b1 before we start on e5
    r!   rR   r"   rN   rU   Nr   r   s           r   test_map_overlapr    s    MAq!Q	
A	
AQF 
AQF 
AQFQF#	
 
A 
AQFQFQF+ 
A 
AQF 
AQF 
AQFQFQF+ 
A 
AQFQFQF+ 
A 
AQF 
AQF  
AQFQF#!C& 	c
AC#aV9q!Qy Aq!fI1a&	$999$9 r   c                   | \  }}}i dft         fdft         fdft         fdft         fdft         fdft         fdft         fdft         fd	ft         fd
ft         fdft         dffdft         dfdffd
ft         dfdfdffdft         dfdfdffdft         d
fdfdffdft         dfd
fdffdft         dfdfd
ffd	ft         dfdfdffdft         d	fdfdffdft         dfd	fdffi}t        |      }t        ||       t        t	        ||      d         dk(  sJ t        fd|j                         D              }t        fd|j                         D              }|d   dv sJ |d   dk(  r|g dk(  sJ |g dk(  sJ y|g dk(  sJ |g dk(  sJ y)zSee https://github.com/dask/dask/issues/5584#issuecomment-554963958

    We were using key names to infer structure, which could result in funny behavior.
    r   r!   rR   r"   rN   rU   rW   rV   rX   rY   r   c              3  :   K   | ]  \  \  }}}|k(  s|  y wr   r   )r   letterr   valr   s       r   r   z.test_use_structure_not_keys.<locals>.<genexpr>D        E(S1E   c              3  :   K   | ]  \  \  }}}|k(  s|  y wr   r   )r   r  r   r  r   s       r   r   z.test_use_structure_not_keys.<locals>.<genexpr>E  r  r  >   r!   r"   )
r   r!   rR   rN   rW   rX   rS   rP   rQ      )
r"   rU   rV   rY   rT      rd            )
r   rR   rN   rW   rX   rS   rP   rQ   r  r  )
r!   r"   rU   rV   rY   rT   r  rd   r  r  N)r   r   r}   r   r   r   items)r   r   r9   r-   AsBsr   r   s         @@r   test_use_structure_not_keysr#  $  s   
 MAq!Q	
A	
A 
A 
A	
 
A 
A 
A 
A 
A 
A 
AQF 
AQFQF# 
AQFQFQF+ 
AQFQFQF+ 
AQFQFQF+  
AQFQFQF+!" 
AQFQFQF+#$ 
AQFQFQF+	
AQFQFQF+	
AQFQFQF+)C, 	c
AC#{3!$Q'(A---	EAGGIE	EB	EAGGIE	EBa5F??	!uz7777999988888888r   c                   | \  }}}}d}|dft         df|dft         df|dft         dfdft         |df|df|dffi}t        d|      D ]8  }t         |dff|||f<   t         |dff|||f<   t         |dz
  f||f||ff||f<   : t        |      }t        ||       g d}	t	        fd|j                         D              }
|	|
k(  sJ y)zFFrom https://github.com/dask/dask-ml/issues/206#issuecomment-395873372rS   r   r!   rR   )
r"   rW   rY   rP   rd   r              c              3  :   K   | ]  \  \  }}}|k(  s|  y wr   r   )r   r  numvr   s       r   r   z9test_dont_run_all_dependents_too_early.<locals>.<genexpr>a  s      G*-636Q;AGr  N)r   r{   r   r}   r   r   )r   r   r   r   r   depthr9   r   r-   r   actualr   s              @r   &test_dont_run_all_dependents_too_earlyr.  O  s   MAq!QE	
AA	
AA	
AA	
AQFQFQF+	C 1e_ 61a&kQF1a&kQF1a!e*q!fq!f5QF6 	c
AC#4HGaggiGGFvr   c           	       	
 | \  }}}
z   	

z   i |dfd|dft         |dff|dft         |dff|dft         |dff|dft         |dff|dft         |dffdft         |dffdft         dff	dft         |dff	dft         	dff	dft         df	dff
dft         |dff
dft         
dffdft         |dffdft         dffdft         
dfdff|dft         |df|df|df	dfdff}t        |      }t        ||       g d}t        	
fd|j	                         D              }||k(  sJ ||df   ||df   dz
  k(  sJ y)a<  From https://github.com/dask/dask/pull/5646#issuecomment-562700533

    Sometimes we need larger or wider DAGs to test behavior.  This test
    ensures we choose the branch with more work twice in succession.
    This is important, because ``order`` may search along dependencies
    and then along dependents.

    r   r!   rR   r"   )
r!   rR   r"   rN   rU   rW   rV   rX   rY   rS   c              3  @   K   | ]  \  \  }}}|hv s|  y wr   r   )r   r  r   r+  r   r   r   ees       r   r   z7test_many_branches_use_ndependencies.<locals>.<genexpr>  s(     R.+61qAr1b>9QARs   N)r   r   r}   r   r   )r   r   r   r   r9   r-   r   r-  r   r   r   r1  s           @@@@r   $test_many_branches_use_ndependenciesr2  e  s@    MAq!Q	
QB	
QB	
A	
AQF 
AQF 
AQF	
 
AQF 
AQF 
AQF 
AQF 
Q!aV 
Q!b!W 
Q!aVb!W% 
AQF 
AQF 
Q!aV 
Q!b!W  
Q!aVb!W%!" 
AQFQFQFRGb!W=#C& 	c
AC#.HRAGGIRRFXaV91a&	A%%%r   c                    t        j                  t        d      5  t        j                  dt
        dfid       d d d        t        j                  t        d      5  t        dt
        dfi       d d d        t        j                  t        d      5  t        dt
        dfi       d d d        t        j                  t        d      5  t        t
        dft
        dft
        dfd       d d d        t        j                  t        d      5  t        t
        dft
        dft
        ddfd	d
       d d d        t        j                  t        d      5  t        t
        dft
        dft
        ddft
        dfd
       d d d        y # 1 sw Y   Rx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   xY w# 1 sw Y   y xY w)NzCycle detected)matchr   r   r   r   r   r   r   r   r   r!   )r   r   r   r   )rw   raisesRuntimeErrorr   r   r   r   r   r   r   test_order_cycler9    s|   	|+;	< '#3x#&'	|+;	< sQHo	|+;	< )x!X'()	|+;	< =QHAs81c(;<=	|+;	< JQHAs81c3-aHIJ	|+;	< QQHAs81c3-q#hOPQ Q' ' ) )= =J JQ QsG   FFF%"F1$F=*G	FF"%F.1F:=G	Gc                 $    t        i       i k(  sJ y r   r   r   r   r   test_order_emptyr;    s    9??r   c                   d}| \  }}}}}i }||||g}|D ]  }	|j                  |	dft        df|	dft        |	dff|	ddft        |	dff|	ddft        |	dffi       t        |      D ]t  \  }
}|j                  |	d|
ft        |	ddf|ddff|	d|
ft        |	d|
ff|	d|
dft        |	d|
ff|	d|
dft        |	d|
ff|	d|
dft        |	d|
dff|	d|
dft        |	d|
dffi       v  t        |      }t	        ||       d}|D ]<  }	t        t        |            D ]#  }
t        ||	d|
df   ||	d|
df   z
        }||z  }% > |d	k  sJ t        ||
      d   }t        |      |k  sJ t        |      }|D ].  }	t        t        |            D ]  }
t        |	d|
dff||	d|
df<    0 t        |      }t	        ||       d}|D ]<  }	t        t        |            D ]#  }
t        ||	d|
df   ||	d|
df   z
        }||z  }% > |dk  sJ t        ||
      d   }t        |      |k  sJ t        |      }|D ]"  }	t        t        |            D ]	  }
||	d|
df=  $ t        |      }t	        ||       d}|D ]<  }	t        t        |            D ]#  }
t        ||	d|
df   ||	d|
df   z
        }||z  }% > |d	k  sJ t        ||
      d   }t        |      |k  sJ t        |      }|D ]"  }	t        t        |            D ]	  }
||	d|
df=  $ t        |      }t	        ||       t        ||
      d   }t        |      |k  sJ |D ]<  }	t        t        |            D ]#  }
t        ||	d|
df   ||	d|
df   z
        dk  r#J  > y)zFrom https://github.com/dask/dask/issues/5859#issuecomment-608422198

    See the visualization of `(maxima, argmax)` example from the above comment.

    This DAG has enough structure to exercise more parts of `order`

    rS   r   r!   rR   r"   rN   rU   rW       r   rV   0   N)r|   r   r   r   r}   r{   r   r~   r   r   r   )r   max_pressurer   r   r   r   r   r9   abcr   r   r   r-   totalr  pressuredsk2dsk3dsk4s                      r    test_order_with_equal_dependentsrF    s    LMAq!Q
CaA,C 

AAAQFAq	A1v;Aq	A1v;		
 cN 
	DAqJJ1IAq!9q!Qi81IAq!9~1aL1q!Qi.1aL1q!Qi.1aL1q!Ql"31aL1q!Ql"3	
	( 	c
AC#E s3x 	AaAq!o1aA,78CSLE	
 B;;3!$Q'Hx=L(((9D 3s3x 	3A"#aAq\!2D!Q1	33 	dAD!$E s3x 	AaAq!o1aA,78CSLE	 B;;41%a(Hx=L((( 9D #s3x 	#AaAq\"	## 	dAD!$E s3x 	AaAq!o1aA,78CSLE	 B;;41%a(Hx=L((( :D #s3x 	#AaAq\"	## 	dAD!$41%a(Hx=L((( ?s3x 	?Aq!Q1Aq!Q<89Q>>>	??r   c                     dddt         ddft         ddfddd	d
dt         ddft         ddfddt         ddddfd} t        |       }t        | |       |d   |d   k  sJ y)a  
    https://github.com/dask/dask/issues/6745

    We have

    1. A terminal node that depends on the entire graph ('s')
    2. Some shared dependencies near the roots ('a1', 'a4')
    3. But the left and right halves are disconnected, other
       than the terminal node.

                       s
               /   /       \   \
              /   /         \   \
            s00  s10       s01  s11
             |    |         |    |
            b00  b10       b01  b11
            / \  / \       / \ / \
           a0  a1  a2    a3  a4  a5

    Previously we started at 'a', and worked up to 's00'. We'd like to finish
    's00' completely, so we progress to 's' and work through its dependencies.

    Ideally, we would choose 's10', since we've already computed one of its
    (eventual) dependencies: 'a1'. However, all of 's00' through 's11' had
    equal metrics so we fell back to the name tie-breaker and started on
    's01' (via 'a3', a4', 'b01', ...).
    )r   )r!   rR   r5  r  r  r   r   r   r!   )r"   )rN   )rU   r  r   rN   r   rU   r   rR   r   r"   storer   r   rP  r!   r   rP  r   r!   rP  r!   r!   )r5  r  r  rI  rJ  rO  rQ  r  rK  rL  rM  rN  rR  rS  rP  Nr   r  s     r   test_terminal_node_backtrackrT    s    < h)h)!!h)h)!!
#C2 	c
AC#X;8$$$r   c                   t        j                  d       t        j                  d      }t        j                  d      }t        d      D cg c]  }|j                  dd       }}|j	                  |d	      j                  d      }t        |j                        t        d
      k  r|j                  j                  |       }n&|j                  j                  t        |       d      }|j                  |d      }|j                  d||j                  d      }|j                  |dd      }	t!        |	j"                        t%        t'        |	j"                               D 
cg c]*  }
t)        |
t*              s|
d   j-                  d      s)|
, }}
t/        |fd      }|D 
cg c]  }
|
d   |d   k(  s|
 c}
|D 
cg c]  }
|
d   |d   k7  s|
 c}
t1        fdj3                         D              }t/        fdj3                         D              }||k  sJ y c c}w c c}
w c c}
w c c}
w )Nr   r   zarrrN   )n   rN   )d   rR   r   r   r   z3.0.0.a0F)	read_onlyT)	overwritedest)namedatar   r[  )lockcomputez
store-map-c                    |    S r   r   )r   r-   s    r   <lambda>z.test_array_store_final_order.<locals>.<lambda>M  s    AaD r   keyr   c              3  2   K   | ]  \  }}|v s|  y wr   r   )r   r   r+  connected_storess      r   r   z/test_array_store_final_order.<locals>.<genexpr>Q  s     Ida18H3HI   c              3  2   K   | ]  \  }}|v s|  y wr   r   )r   r   r+  disconnected_storess      r   r   z/test_array_store_final_order.<locals>.<genexpr>R  s     OAa;N6N1Org  )rw   rx   r{   onesconcatenaterechunkr   __version__storageDirectoryStore
LocalStorestrgroup
empty_like	chunksizerP  r   r   r}   r   
isinstancetuple
startswithminr   r   )tmpdirr   rV  r   arraysr   rP  rootr\  r   r   storesfirst_storeconnected_maxdisconnected_minrf  ri  r-   s                  @@@r   test_array_store_final_orderr  6  s     			\	*Bv&D:?(CQbgghxg0CFC
vA&..x8At 7:#66++F3''Fu'E::et:,D??Qq{{d?SD	5%0AaffADL!,UAjE2qt|7TaUFUf.1K#)FaQrUk"o-EF&,I"R0H1IIaggiIIMOOO+++++ D VFIs0   H4/H9H9H94H>H>I!Ic                    i dt         ddfdt         ddfdt         dd	fd
t         ddfdt         ddfdt         ddfdt         ddfdt         ddfdt         dd
fdt         dfdt         dfdt         dfdt         dfdt         dfdt         dfd t         d!fd"t         d#fi d$t         d%fd&t         d'fd(t         d)fdt         d*fd	t         d+fdt         d,fdt         d-fdt         d.fdt         d/fdt         d0fdt         d1fdt         d2fdt         d3fd4t         d(fd5t         dfd6t         d4d5fdt         d3fi d7t         ddfd't         d,fdt         d1fd!t         d0fd8t         ddfd9t         d8d:fd:t         d&d$fd;t         d7d<fdt         d-fdt         d*fdt         d+fd=t         d"d fd)t         d>d=fdt         d.fd#t         d2fd%t         d/fd<t         ddfi d>t         d;d9fd1t         d?fd+t         d@fd-t         dAfd*t         dBfd/t         dCfd2t         dDfd3t         dEfd.t         dFfd,t         dGfd0t         dHfd?t         t         fdFt         t         fdDt         t         fdEt         t         fdHt         t         fdBt         t         ft         t         ft         t         ft         t         ft         t         fdI} t        |       t        |        t        | J      \  }}t	        |      dKk  sJ dDdHg}g dL}dd;g}g dM}d9dg}||fD ]-  }t	        fdN|D              t        fdO|D              k  r-J  ||fD ]%  }	|	D ]  }
|
   t        fdP|D              k  rJ  ' yQ)Ra  https://github.com/dask/dask/pull/7929

    This graph begins with many motifs like the following:

    |      |
    c1    c2
      \ /
       b
       |
       a

    We want to compute c2 and c3 pretty close together, because if we choose to
    compute c1, then we should also compute c2 so we can release b.  Being
    greedy here allows us to release memory sooner and be more globally optimal.
    a00a06a08a01a28a26a02a24a21a03a22a25a04a29a20a05a23a27a07a09a43a10a36a11a33a12a47a13a44a14a42a15a37a16a48a17a49a18a35a19a46a55a53a60a54a59a56a61a52a57a58a30a31a32a34a38a39a40a41a50a45a51a62a68a70a67a71a64a65a63a69a66)r  r  r  r  r   rX   )r  r  r  r  )r  r  r  r  c              3  (   K   | ]	  }|     y wr   r   r   rr-   s     r   r   zAtest_eager_to_compute_dependent_to_free_parent.<locals>.<genexpr>  s     ,A1Q4,r   c              3  (   K   | ]	  }|     y wr   r   r  s     r   r   zAtest_eager_to_compute_dependent_to_free_parent.<locals>.<genexpr>  s     2OA1Q42Or   c              3  (   K   | ]	  }|     y wr   r   r  s     r   r   zAtest_eager_to_compute_dependent_to_free_parent.<locals>.<genexpr>  s     <!<r   N)r   r   r}   r   r   rx  )r9   r   rB  shallow_rootsdeep_roots1
reducers_1deep_roots2
reducers_2
deep_rootsreducerredr-   s              @r   .test_eager_to_compute_dependent_to_free_parentr  V  s    I5% I5% I 	5% I 	5% 	I
 	5% I 	5% I 	5% I 	5% I 	5% I 	5zI 	5zI 	5zI 	5zI 	5zI 	5zI  	5z!I" 	5z#I$ 	5z%I& 	5z'I( 	5z)I* 	5z+I, 	5z-I. 	5z/I0 	5z1I2 	5z3I4 	5z5I6 	5z7I8 	5z9I: 	5z;I< 	5z=I> 	5z?I@ 	5zAIB 	5% CID 	5zEIF 	5% GIH 	5zIIJ 	5zKIL 	5zMIN 	5% OIP 	5% QIR 	5% SIT 	5% UIV 	5zWIX 	5zYIZ 	5z[I\ 	5% ]I^ 	5% _I` 	5zaIb 	5zcId 	5zeIf 	5% gIh 	5% iIj 	5zkIl 	5zmIn 	5zoIp 	5zqIr 	5zsIt 	5zuIv 	5zwIx 	5zyIz 	5z{I| 	5z}I~ 	1vI@ 	1vAIB 	1vCID 	1vEIF 	1vGIH 	1vIIJ 1v1v1v1vQICT 	c
AC#cQ'KAxx=A ENM.KJ.KJ"K0 P
,,,s2O2O/OOOOP 
+ = 	=CS6C<m<<<<<	==r   c                   | \  }}}}}|dft         f|dft         f|dft         f|dft         f|dft         f|dft         |df|df|dff|dft         |df|df|dff|dft         |df|df|dff|dft         |df|dff|dft         |dffi
}t        |      t        |       t        |      \  }}t	        fd|j                         D              sJ |df   dk(  r|df   dk(  sJ |df   dk(  sJ |df   dk(  sJ |g dk(  sJ |j                         D 	
ci c]  \  }	}
|	|
j                   c}
}	|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfdi
k(  sJ |j                         D 	
ci c]  \  }	}
|	|
j                   c}
}	|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfdi
k(  sJ |j                         D 	
ci c]  \  }	}
|	|
j                   c}
}	|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfdi
k(  sJ |j                         D 	
ci c]  \  }	}
|	|
j                   c}
}	|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfdi
k(  sJ y
|df   t        |      dz
  k(  sJ |df   t        |      dz
  k(  sJ |df   t        |      dz
  k(  sJ |g dk(  sJ |j                         D 	
ci c]  \  }	}
|	|
j                   c}
}	|dfd|dfd	|dfd|dfd	|dfd|dfd|dfd|dfd|dfd|dfdi
k(  sJ |j                         D 	
ci c]  \  }	}
|	|
j                   c}
}	|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfdi
k(  sJ |j                         D 	
ci c]  \  }	}
|	|
j                   c}
}	|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfdi
k(  sJ |j                         D 	
ci c]  \  }	}
|	|
j                   c}
}	|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfd|dfdi
k(  sJ y
c c}
}	w c c}
}	w c c}
}	w c c}
}	w c c}
}	w c c}
}	w c c}
}	w c c}
}	w )z
        a1  b1  c1  d1  e1
        /|\ /|\ /|\ /|  /
       / | X | X | X | /
      /  |/ \|/ \|/ \|/
    a0  b0  c0  d0  e0
    r   r!   c              3  H   K   | ]  \  }}|   |j                   k(    y wr   r   )r   rd  r  r-   s      r   r   z#test_diagnostics.<locals>.<genexpr>  s"     @xsCqv"@s   "r"   rU   )
r   r!   r!   rR   rR   r"   rR   r"   rR   r"   rR   )
r   r!   rR   r"   rR   r"   rR   r"   rR   r!   rN   N)r   r   r}   r   allr   r1   num_dependencies_freednum_data_when_runnum_data_when_releasedr   )r   r   r   r   r   r   r9   infomemory_over_timerd  r  r-   s              @r   test_diagnosticsr    s    MAq!Q	
A	
A	
A	
A	
A	
AQFQFQF+	
AQFQFQF+	
AQFQFQF+	
AQFQF#	
AQFC 	c
AC#(-D
@4::<@@@@!QyA~!QyA~~!QyA~~!QyA~~#AAAA-1ZZ\:cSWW:FAFAFAFAFAFAFAFAFAFA?
 
 	
 
 AE

MHCS///MFAFAFAFAFAFAFAFAFAFAR
 
 	
 
 <@::<HxsCS***HFAFAFAFAFAFAFAFAFAFAM
 
 	
 
 AE

MHCS///MFAFAFAFAFAFAFAFAFAFAR
 
 	
 
 !QyCHqL(((!QyCHqL(((!QyCHqL(((#AAAA-1ZZ\:cSWW:FAFAFAFAFAFAFAFAFAFA?
 
 	
 
 AE

MHCS///MFAFAFAFAFAFAFAFAFAFAR
 
 	
 
 <@::<HxsCS***HFAFAFAFAFAFAFAFAFAFAM
 
 	
 
 AE

MHCS///MFAFAFAFAFAFAFAFAFAFAR
 
 	
 
s ; N I N" ; N I Ns0   P69P<Q/QQ7QQ-Q c                 "   t        d      \  } }}}}i }t        d      D ]  }| d|ft        f| d|ft        f|d|ft        | d|ff|d|ft        | d|f| d|ff|d|ft        | d|ff|d|ft        |d|ff|d|ft        |d|ff|d|ft        |d|ffi}|j                  |        t        d      D ](  }|j                  ||ft        ||df||df||dffi       * t	        |      }t        ||       t        ||      \  }	}
t        |
      dk  sJ y )Nr   r"   r   r!   rR   r   rY   )r   r{   r   r|   r   r}   r   r   )r   r   r   r   r   r9   ixpartr-   r   rB  s              r   test_xarray_like_reductionr  O  sf   MMAq!Q
CAh  2J2J2JQ2J2JQ2JAr
32JQ2J2JQ2J2JQ2J2JQ2J

 	

4 Ah 


B!aQZ!RaQZ@	

 	c
AC#cQ'KAxx=Ar   r8   c                   t        j                  d      }t        j                  d       dd lm} d}|j	                  t        g d|j                  j                  |dddfd	
      fg d|j                  j                  |dddfd	
      f            }|dz  }|j                  |j                  z  |d<   |j                  d      }t        t        |g|       j                         j                               }t        t        |j                         g|       j                         j                               }t        |d         dk(  sJ t        |d         dk(  sJ t        |d         dk  sJ y )Nxarrayzdask.dataframer     )timefacejr   r!       )rS   r!   r   r   rY  )anom_uanom_vrR   uvr  r$   rd   &   2   )rw   rx   
dask.arrayarrayDatasetr   r   r  r  meanr   r	   r8   r#   to_dask_dataframer   )	r8   xrr   r   dsquadr  
diag_arraydiag_dfs	            r   test_array_vs_dataframer  l  sa    
		X	&B
()D	*		  $3!5o N
 +		  $3!5o N		

B q5DRYY&DJ99VDTF8<EEGVVXJ T3356xP			G
 wqz?b   z!}###z!}"""r   c            
        t        j                  d      } t        j                  d      }dd lm} |j                  j	                  dd      }d}|j                  |dd	gd
d| j                  |j                  d         |z  fi      }|j                  d
      j                  d      }|j                  d
      |z
  }|j                  d      }t        |g      j                         j                         }	t        |	      \  }
}t        |	      \  }}t        |      dk  sJ ddlm}  |t$              }t'        |	      j)                         D ]"  }|t+        ||            j-                  |       $ t/        |      d   }|dkD  sJ ||   }|D ci c]  }|||   
 }}t+        |      |k(  sJ |D ch c]  }t1        |       c}       |j3                         D ci c]  \  }}d|d   v s||j4                   }}}t7        |j9                               t+        |      z  }t        |j9                               }|j3                         D ci c]  \  }}||j4                   }}}|dkD  sJ |dkD  sJ t7        |j9                               t+        |      z  }t        |j9                               }|dk  sJ |dk  sJ t7        |      t+        |      z  dk  sJ y c c}w c c}w c c}}w c c}}w )Nr   r  r   )   r!   )r!   r   rY  rU   r  r   day)dimscoords)dim   r   r(  
mean_chunki  rX     e   )rw   rx   r  r  r   	DataArrayarangeshapegroupbyr  r	   r8   r#   r   r   r   collectionsr   setr   keysr   r   r   r
   r   r1   r   values)npr  r   r^  ngroupsarrclimanom	anom_meangraphr   r   diagsrB  r   count_dependentsr   n_splitstranspose_taskstranspose_metricsr+  ages_mean_chunksavg_age_mean_chunksmax_age_mean_chunksages_tranposeavg_age_transposemax_age_transposes                              r   test_anom_meanr"    s   			W	%B			X	&B99HW5DG
,,c]		$**Q- 87 BCD  C ;;u""v".D;;u$D		f	%I,557FFHEUOMAz!%(OE8 x=C'"3'%[ 4Z]+,0034 &'+H b==&x0O.=>E!H>> !W,KU.Ky|.KK, .3[[]STQlaPQd>R155SS.55783?O;PP.5578*;*A*A*CD$!QQXDMD$$$$$$M0023c-6HHM0023s"""s"""x=3x=(3...' ?.K T Es   K$4K) K.0K.K4c                   | \  }}}}}d\  }}i |ddft         |ddf|dddff|ddft         |ddf|dddff|ddft         |ddf|dddff|ddft         |ddf|dddff|ddft         |ddf|dddff|ddft         t         dd dg i f|ddft         t         dd dg i f|ddft         t         dd dg i f|ddft         t         dd dg i f|ddft         t         dd dg i f|ddft         |ddff|ddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |dddff|dddft         |dddffi |dddft         |dddff|ddft         |dddf|dddf|dddfgf|dddft         |ddff|dddft         |ddff|dddft         |dddff|dddft         |dddff|ddft         |dddf|dddfgf|dddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |ddff|dddft         |ddff|ddft         |dddf|dddf|dddf|dddfgf|ddft         |dddfgf|ddft         |ddf|ddfgfi}t        |      }	t        ||	       |ddf|ddf|ddf|ddfg}
|
D ]"  }|	|   |	|ddf   k  sJ |	|   |	|ddf   k  r"J  y )	Nghr   r!   rR   r"   rN   random_sample)r!   r!   r   )r   r   r   r   r   r   ghr9   r-   (nodes_to_finish_before_loading_more_datans               r   test_anom_mean_rawr*    s   MAq!QDAq&	
Aq	A1ay1aA,/&	
Aq	A1ay1aA,/& 
Aq	A1ay1aA,/& 
Aq	A1ay1aA,/	&
 
Aq	A1ay1aA,/& 
Aq	Aq/4R@& 
Aq	Aq/4R@& 
Aq	Aq/4R@& 
Aq	Aq/4R@& 
Aq	Aq/4R@& 
Aq	A1ay>& 
Aq	A1ay>& 
Aq!q1a)n& 
Aq!q1a)n& 
Aq!q1a)n&  
Aq!q1aA,'!&" 
Aq!q1aA,'#&$ 
Aq!q1aA,'%&& 
Aq	AAq!q!QlQ1aLAB'&( 
Aq!q1a)n)&* 
Aq!q1a)n+&, 
Aq!q1aA,'-&. 
Aq!q1aA,'/&0 
Aq	AAq!q!Ql341&2 
Aq!q1a)n3&4 
Aq!q1a)n5&6 
Aq!q1a)n7&8 
Aq!q1a)n9&: 
Aq!q1a)n;&< 
Aq!q1a)n=&> 
Aq!q1a)n?&@ 
Aq!q1a)nA&B 
Aq!q1a)nC&D 
Aq!q1a)nE&F 
Aq	AAq!q!QlQ1aL1aA,OP	
Aq	AAq!~&	
Aq	AAq	Aq!9-.K&CP 	c
AC# 
Aq		
Aq		
Aq		
Aq		0, 6 #taAq	l"""taAq	l"""#r   c                    i dt         ddgfdt         g dfdddt         ddfd	t         d
dfdt         ddfdt         ddfdt         ddgfdt         g dfdddt         ddfdt         d
dfdt         ddfdt         ddfdt         dfd
t         dfdt         dfi dt         dfdt         dfdt         dd gfdt         g d!fd d"d#t         dfd$t         dfd%t         dfd&t         dfdt         dfdt         dfdt         dfdt         dfd't         dfdt         t         d'dfgfd"t         t         d'dfgfdt         t         ddfgf} i d(t         d)d*gfd)t         g d+fd*d,d-t         d.d/fd0t         d1d2fd3t         d4d5fd6t         d7d8fd9t         d:d;gfd:t         g d<fd;d=d>t         d/dfd?t         d2dfd@t         d5dfdAt         d8dfd/t         dBdCg fd2t         dBdCg fd5t         dBdCg fi d8t         dBdCg fdDt         dBdCg fdEt         dFdGgfdFt         g dHfdGdIdJt         d.dfdKt         d1dfdLt         d4dfdMt         d7dfd.t         dBdCg fd1t         dBdCg fd4t         dBdCg fd7t         dBdCg fdNt         dBdCg fdIt         t         dNdfgfd,t         t         dNdDfgfd=t         t         dDdfgf}t        t        |       d         }t        t        |      d         }||k(  sJ y )ON)z3mean_agg-aggregate-10d721567ef5a0d6a0e1afae8a87c066r   r   r   )5mean_combine-partial-17c7b5c6eed42e203858b3f6dde16003r   r   r   r   )r,  r!   r   r   r   )+mean_chunk-98a32cd9f4fadbed908fffb32e0c9679r   r   r   r   r.  r!   r   r   r   r.  rR   r   r   r   r.  r"   r   r   r   )z@mean_chunk-mean_combine-partial-17c7b5c6eed42e203858b3f6dde16003r!   r   r   r   r-  ).random_sample-e16bcfb15a013023c98a21e2f03d66a9r   r   r   r   ).random_sample-02eaa4a8dbb23fac4db22ad034c401b3r   r   r   r   r/  )r3  r!   r   r   r   )r2  r!   r   r   r   r0  )r2  rR   r   r   r   )r3  rR   r   r   r   r1  )r2  r"   r   r   r   )r3  r"   r   r   r   )z3mean_agg-aggregate-fdb340546b01334890192fcfa55fa0d9r   r   r   )5mean_combine-partial-23adb4747560e6e33afd63c5bb179709r   r   r   r   )r4  r!   r   r   r   )+mean_chunk-7edba1c5a284fcec88b9efdda6c2135fr   r   r   r   r6  r!   r   r   r   r6  rR   r   r   r   r6  r"   r   r   r   )z@mean_chunk-mean_combine-partial-23adb4747560e6e33afd63c5bb179709r!   r   r   r   r5  rR   r7  r8  r9  r!   )r3  rN   r   r   r   )z3mean_agg-aggregate-cc19342c8116d616fc6573f5d20b5762r   r   r   )5mean_combine-partial-0c98c5a4517f58f8268985e7464daacer   r   r   r   )r:  r!   r   r   r   )+mean_chunk-540e88b7d9289f6b5461b95a0787af3er   r   r   r   r<  r!   r   r   r   r<  rR   r   r   r   r<  r"   r   r   r   )z@mean_chunk-mean_combine-partial-0c98c5a4517f58f8268985e7464daacer!   r   r   r   r;  r=  r>  r?  )r2  rN   r   r   r   )z3mean_agg-aggregate-e79dd3b9757c9fb2ad7ade96f3f6c814r   r   r   )5mean_combine-partial-e7d9fd7c132e12007a4b4f62ce443a75r   r   r   r   )r@  r!   r   r   r   )+mean_chunk-0df65d9a6e168673f32082f59f19576ar   r   r   r   rB  r!   r   r   r   rB  rR   r   r   r   rB  r"   r   r   r   )z@mean_chunk-mean_combine-partial-e7d9fd7c132e12007a4b4f62ce443a75r!   r   r   r   rA  ).random_sample-a155d5a37ac5e09ede89c98a3bfcadffr   r   r   r   ).random_sample-241fdbadc062900adc59d1a79c4c41e1r   r   r   r   rC  )rF  r!   r   r   r   )rG  r!   r   r   r   rD  )rF  rR   r   r   r   )rG  rR   r   r   r   rE  )rF  r"   r   r   r   )rG  r"   r   r   r   )z3mean_agg-aggregate-c7647920facf0e557f947b7a6626b7ber   r   r   )5mean_combine-partial-57413f0bb18da78db0f689a096c7fbbfr   r   r   r   )rH  r!   r   r   r   )+mean_chunk-d6bd425ea61739f1eaa71762fe3bbbd7r   r   r   r   rJ  r!   r   r   r   rJ  rR   r   r   r   rJ  r"   r   r   r   )z@mean_chunk-mean_combine-partial-57413f0bb18da78db0f689a096c7fbbfr!   r   r   r   rI  rK  rL  rM  r%  )rS   r!   r  r  )rG  rN   r   r   r   )z3mean_agg-aggregate-05071ebaabb68a64c180f6f443c5c8f4r   r   r   )5mean_combine-partial-a7c475f79a46af4265b189ffdc000bb3r   r   r   r   )rN  r!   r   r   r   )+mean_chunk-fd17feaf0728ea7a89d119d3fd172c75r   r   r   r   rP  r!   r   r   r   rP  rR   r   r   r   rP  r"   r   r   r   )z@mean_chunk-mean_combine-partial-a7c475f79a46af4265b189ffdc000bb3r!   r   r   r   rO  rQ  rR  rS  )rF  rN   r   r   r   )r   r   r   )firstotherfirst_pressuresecond_pressures       r   test_flaky_array_reductionrX    s   lHUUK
l 	NP
l" 	N P
#l0 	DJJF
1l: 	DJJF
;lD 	DJJF
ElN 	DJJF
OlX 	IUUK
Ylf 	NP
glx 	N P
ylF 	DJF
GlP 	DJF
QlZ 	DJF
[ld 	DJF
eln 	GAolp 	GAqlr 	GAslt 	GAulv 	GAwlx 	IUUK
ylF 	NP
GlX 	N P
Ylf 	DJF
gln 	DJF
olv 	DJF
wl~ 	DJF
lF 	GAGlH 	GAIlJ 	GAKlL 	GAMlN 	GAOlP	
  RR	
]lp	
 OQRST
}lD	
 OQRST
QlE\bHUUK
b 	NP
b" 	N P
#b0 	DJJF
1b: 	DJJF
;bD 	DJJF
EbN 	DJJF
ObX 	IUUK
Ybf 	NP
gbx 	N P
ybF 	DJF
GbP 	DJF
QbZ 	DJF
[bd 	DJF
ebn 	G	I
obz 	G	I
{bF 	G	I
GbR 	G	I
Sb^ 	G	I
_bj 	IUUK
kbx 	NP
ybJ 	N P
KbX 	DJF
Ybb 	DJF
cbl 	DJF
mbv 	DJF
wb@ 	G	I
AbL 	G	I
MbX 	G	I
Ybd 	G	I
ebp 	G	I
qb|	
 OQRST
IbP	
  RR	
]bp	
 OQRST
}bEF U+A./N+e,Q/0O_,,,r   c                  	
 | \  }}}}}d	i |dft         df|ddft         df|ddft         df|ddft         df|ddft         df|ddft         t         |ddffgf|ddft         t         |ddffgf|ddft         t         |ddffgf|ddft         t         |ddffgf|dddf|ddf|dddf|ddf|dddf|ddf|dddf|ddf|ddft         |dddff|ddft         |dddff|ddft         |dddff|ddft         |dddff|dft         t         |ddf|ddf|ddf|ddffgf|dft         t         |ddf|ddf|ddf|ddffgf|df|df|df|df	ddft         |df|dddff	ddft         |df|dddff	ddft         |df|dff	ddft         |df|dddff	ddft         |df|dddff	ddft         |df|dffi
}t        |      
t        |
       t        	
fdt	        d      D              }t        	
fdt	        d      D              }t        |      t        |      k  st        |      t        |      k  sJ y y )Nr&  r   r!   rR   c              3  .   K   | ]  }d |f     ywr   r   r   r  r&  r-   s     r   r   z&test_flox_reduction.<locals>.<genexpr>       0q!Q}0   r"   c              3  .   K   | ]  }d |f     ywr   r   r[  s     r   r   z&test_flox_reduction.<locals>.<genexpr>  r\  r]  )r   r   r}   r   r{   r   rx  )r   r   r   r   r   r   r9   of1of2r&  r-   s            @@r   test_flox_reductionra    s   MAq!QA	
AA	
Aq	Aq6 
Aq	Aq6 
Aq	Aq6	
 
Aq	Aq6 
Aq	AQ1I'( 
Aq	AQ1I'( 
Aq	AQ1I'( 
Aq	AQ1I'( 
Aq!q!Qi 
Aq!q!Qi 
Aq!q!Qi 
Aq!q!Qi 
Aq	A1a|$ 
Aq	A1a|$  
Aq	A1a|$!" 
Aq	A1a|$#$ 
Aa!QQ1I1ay1a)DEF	
Aa!QQ1I1ay1a)DEF	
AA	
AA	
Aq	A1v1a|,	
Aq	A1v1a|,	
Aq	A1v1v&	
Aq	A1v1a|,	
Aq	A1v1a|,	
Aq	A1v1v&7C: 	c
AC#
0uQx0
0C
0uQx0
0Cs8c#h#c(SX"555"5r   	keep_selfndepsrR   rU   
n_reducersrN   rV   c           	        t        j                  d       t        j                  d      }dd lfd}t              D ci c]  }d| t	        t               d|         }} |j                  |dfd	|z  d	|z  d
t        d|}|j                  dd      }	ddl	m
}
 |r,t        ||	g|       j                         j                         }n*t        |	g|       j                         j                         }t        |      \  }}t        |      }|j!                         } |
|      }t#        ||       |t        |      cxk(  rt        |      k(  sJ  J ||k(  sJ h dj%                  |D ch c]  }t'        |       c}      sJ |D ch c]  }t'        |      dk(  s| }}t)        t+        |      d         x}|z   k  sJ |       | rZ|D ]T  }g }||   D ]  }|j-                  ||           t)        |      t/        |      z
  t        ||         dz
  |rdndz  k(  rTJ  y y c c}w c c}w c c}w )Nr   r   r   c                 Z    t        |       k(  sJ j                  j                  d      S )N)rS   rS   )r   r   )r;   rc  r  s    r   r   z7test_reduce_with_many_common_dependents.<locals>.random  s*    6{e###yy))r   r   zobject-)r]  yx)rS   )r   r   )new_axesdtyper!   r   )r   split_everyr   r$   >   r   objectsum-aggregaterl  rR   )rw   rx   r   r{   r   rk  	blockwisefloatr   
dask.orderr   r	   r8   r#   r   r   copyr}   issubsetr
   r   r   r   rx  )r8   rb  rc  rd  r   r   r   trivial_depsr   r  r   r9   r   r   before
before_dskr-   r   reducerspr  
prios_depsdepr  s     `                    @r   'test_reduce_with_many_common_dependentsry    sh   
  			\	*B*
 AFe;<!A3'!66L  		 z)
0BC		
 	A EEqbE)E   E
8DXZ^ 	  AXZ^ 	
  (}L*XFJc
AC#SV's3x'''''.88PQ9R1)A,9RSSS@a	! ?@H@[%a())Aj5.@@C!C@  	AJ#A *!!!C&)*z?S_4\!_9MPQ9QA9   		 SF :S@s   #H15H6H;(H;c                    t        |       \  }}| D ci c]  }|t        ||          }}t        | |j                        D ]#  }||   dk(  sJ ||   D ]  }||xx   dz  cc<    % y c c}w )Nrc  r   r!   )r   r   r   __getitem__)r9   r   r   r   r   
num_neededrx  s          r   r}   r}     s    '}L*367a!Sa))7J7CU../ !!}!!!a= 	!CsOq O	!! 8s   A)c                   | \  }}}}}i |dddft         df|dddft         df|dddft         df|dddft         df|dddft         df|dddft         df|dddft         df|dddft         df|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddfi |dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddf|dddf|dddf|dddf|dddft         |dddf|dddffi |dddft         |dddf|dddff|dddft         |dddf|dddff|dddft         |dddf|dddff|dddft         |dddf|dddff|dddft         |dddf|dddff|dddft         |dddf|dddff|dddft         |dddf|dddff|dddft         |dddf|dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddff|dddft         |dddffd|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddf|dddfg	i	}t        |      \  }}t        |      dk  sJ t        |             y )	Nr"   r   r!   rR   rN   rU   ENDrT   )r   r   r   )	r   r   r   r   r   r   r9   r   rB  s	            r   test_doublediffr    s1   MAq!QG	
Aq!q!fG	
Aq!q!fG 
Aq!q!fG 
Aq!q!f	G
 
Aq!q!fG 
Aq!q!fG 
Aq!q!fG 
Aq!q!fG 
Aq!q!QlG 
Aq!q!QlG 
Aq!q!QlG 
Aq!q!QlG 
Aq!q!QlG 
Aq!q!QlG 
Aq!q!QlG  
Aq!q!Ql!G" 
Aq!q!Ql#G$ 
Aq!q!Ql%G& 
Aq!q!Ql'G( 
Aq!q!Ql)G* 
Aq!q!Ql+G, 
Aq!q!Ql-G. 
Aq!q!Ql/G0 
Aq!q1aA,'1G2 
Aq!q1aA,'3G4 
Aq!q1aA,'5G6 
Aq!q1aA,'7G8 
Aq!q1aA,'9G: 
Aq!q1aA,';G< 
Aq!q1aA,'=G> 
Aq!q1aA,'?G@ 
Aq!q!QlAGB 
Aq!q!QlCGD 
Aq!q1aA,Aq!5EGF 
Aq!q1aA,Aq!5GGH 
Aq!q1aA,Aq!5IGJ 
Aq!q1aA,Aq!5KGL 
Aq!q1aA,Aq!5MGN 
Aq!q1aA,Aq!5OGP 
Aq!q1aA,Aq!5QGR 
Aq!q1aA,Aq!5SGT 
Aq!q1aA,Aq!5UGV 
Aq!q1aA,'WGX 
Aq!q1aA,'YGZ 
Aq!q1aA,'[G\ 
Aq!q1aA,']G^ 
Aq!q1aA,'_G` 
Aq!q1aA,'aGb 
Aq!q1aA,'cGd 
Aq!q1aA,'eGf 
Aq!q1aA,'gGh 
Aq!q1aA,'	
Aq!q1aA,'	
Aq!q1aA,'	
Aq!q1aA,'	
Aq!q1aA,'	
Aq!q1aA,'	
Aq!q1aA,'	
Aq!q1aA,'1aL1aL1aL1aL1aL1aL1aL1aL1aL

yGCP c"KAxx=B-H-r   c                     dt         dfi} t        d      D ]"  }t         t        |dz
        f| t        |      <   $ t        t	        |             t        |       k(  sJ y )Nz-1r!   r   )r   r{   rq  r   r   )r9   r  s     r   'test_recursion_depth_long_linear_chainsr  g  sV    !Q.CEl (3rAv;'CG(uSz?c#h&&&r   c                   | \  }}}}}d}i dt         df|dft         df|dft         df|dft         df|dft         df|dft         df|ddft         |dff|ddft         |dff|ddft         |dff|ddft         |dff|ddft         |dff|ddft         |df|df|dff|ddft         |ddf|ddff|ddft         |ddf|ddfft         ddft         |ddff|ddft         |ddf|ddff|ddft         |ddf|ddff|dft         |ddf|ddff|dft         |df|dff|dft         |df|df|ddffi}t        |      \  }}	t        ||	      \  }
}t        |
      t        |      k(  sJ |
|df   d|dfhk(  sJ t	        |      }t        ||       t        t        ||      d         d	k  sJ ||df   ||df   cxk  r||df   k  sJ  J ||df   ||df   cxk  r||df   k  sJ  J y )
Nr&  )r{  r   r!   r   rR   r"   rN   r   rU   )r   r   r   r   r   r}   r   r   )r   r   r   r   r   r   r&  r9   r   r   con_rr   r-   s                r   test_gh_3055_explicitr  n  s-   
 MAq!QAaV	
AK  
AA 
AA	
 
AA 
AA 
Aq	A1v; 
Aq	A1v; 
Aq	A1v; 
Aq	A1v; 
Aq	A1v; 
Aq	A1v1v1v. 
Aq	A1ay1a), 
Aq	A1ay1a), 
Aq	A1ay>  
Aq	A1ay1a),!" 
Aq	A1ay1a),#$ 
AQ1I1ay)	
AQFQF#	
AQFQFQ1I.)C,  (}L*#L*=HE1u:S!!!!Q=[1a&1111c
AC#{3!$Q'(A---aV9q!Qy,1aV9,,,,,aV9q!Qy,1aV9,,,,,r   c                   | \  }}}}}i |dfd|dfd|dfd|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|dddft         |dff|ddft         |dddf|dddf|dddfgf|ddft         |dddf|dddf|dddfgf|ddft         |dddf|dddf|dddfgf|ddft         |dddf|dddf|dddfgf|ddf|ddf|ddf|ddf|ddf|ddf|ddf|ddfi}t        |      }t        ||       t        t	        d      D 	cg c]  }t	        d      D ]  }	|||	f	  c}	}|j
                        }
t	        dt        |
            D ]  }||
|      ||
|dz
        z
  dk(  rJ  y c c}	}w )Nr   r!   rR   rc  rU   )r   r   r}   r   r{   r{  r   )r   r   r   r   r   r   r9   r-   r  jxfinal_nodess              r   test_order_flox_reduction_2r    sF   MAq!Q	
A	
A 
A 
Aq!q1a&k	
 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k 
Aq!q1a&k  
Aq	AAq!q!QlQ1aLAB!" 
Aq	AAq!q!QlQ1aLAB#$ 
Aq	AAq!q!QlQ1aLAB	
Aq	AAq!q!QlQ1aLAB	
Aq	Aq!9	
Aq	Aq!9	
Aq	Aq!9	
Aq	Aq!9/C2 	c
AC#$Qx;%(;B!R;;K As;'( @ R!Ak"q&&9$::a???	@ 	<s   G(
c                    i dt         dfdt         dfdt         dfdt         dfd	t         d
dfdt         ddfdt         d
dfdt         ddfdt         d
dfdt         ddfdt         d
dfdt         ddfdt         dfdt         dfdt         dfdt         dfdt         dfi dt         d fdt         d!fdt         d"fd#d$d
d%dd&dt         d#fdt         ddfdt         ddfdt         d#fdt         d#fd t         d#fd!t         d#fdt         ddfdt         d#fd"t         d#fdt         d	dfdt         d#fi} t        |       }t        | |       t        t	        d'      D cg c]  }t	        d'      D ]  }d(d)||f
  c}}|j
                  *      }g }t	        d+t        |            D ]%  }|j                  |||      |||d+z
        z
         ' t        |      d,hk(  sJ t        | |-      \  }}t        |      d.k  sJ y c c}}w )/Nr@   )groupby-aggr   r   r   )rA   r   r   r!   )r  r   r   r!   rC   )r  r   r!   r   )rA   r   r!   r!   )r  r   r!   r!   rE   )r  r   )getitemr   r   r   rG   )r  r!   )r  r!   r   r   )rF   r   r!   r   )r  r   r   r!   )rF   r   r!   r!   )r  r!   r   r!   rH   )r  r   r!   r   rI   )r  r!   r!   r   )rF   r!   r!   r   )r  r   r!   r!   )rF   r!   r!   r!   )r  r!   r!   r!   )	open_datar   r   r   )r  r   r   r!   )r  r   r!   r   )r  r   r!   r!   )r  r!   r   r   )r  r!   r   r!   )r  r!   r!   r   )r  r!   r!   r!   r^  r   r   r   rR   rA   r   rc  r!   rX   r   rU   )r   r   r}   r   r{   r{  r   r   r  r   r   )r9   r-   r  r  r  	all_diffsr   rB  s           r   #test_xarray_map_reduce_with_slicingr    st   4$< =4$< =4 	$< =4 	$< =	4
 	#Q6J$K4 	#Q6J$K4 	#Q6J$K4 	#Q6J$K4 	#Q6J$K4 	#Q6J$K4 	#Q6J$K4 	#Q(<l$K4 	q"894 	q"894 	q"894  	q"89!4" 	q"89#4$ 	q"89%4& 	q"89'4( 	q"89)4* 	+4, 	c-4. 	c/40 	F142 	!&&#
34< 	!&&#
=4F 	FG4H 	FI4J 	FK4L 	FM4N 	!&&#
O4X 	FY4Z 	F[4\ 	!&&#
]4f 	Fg4Cj 	c
AC#,1!HHbuQxH+q"b	!H	!HMMK IAs;'( F 	;r?+aBF0C.DDE	F y>aS   cQ'KAxx=A 	Is   %H
use_longest_pathc                ~   t               }| r`t        dd      D cg c]  }d|ddf
 }}|j                  dt        |fi       |j                  t        j                  |t        f             t        |      }t        ||       t        ||      \  }}t        |d d       dk  sJ t        t        d	      D cg c]  }t        d	      D ]  }d
||df
  c}}|j                        }	g }
t        dt        |	            D ]%  }|
j                  ||	|      ||	|dz
        z
         ' |
g dk(  sJ y c c}w c c}}w )Nr   #   zopen-datasetr   )dummyr   r   r   rV   rR   rA   rc  r!   )rS   '   rS   )rr   r{   r|   r   r   fromkeysr   r}   r   r   r   r{  r   r   )r  r9   r   r  r-   r   rB  r  r  r  r  s              r   &test_xarray_rechunk_map_reduce_cohortsr  		  s@   

 C38R=AaAq)AA

L1d),-

4==t,-c
AC#cQ'KAxx}""",1!HHbuQxH+r2q	!H	!HMMK IAs;'( F;r?+aBF0C.DDEF
 $$$+ B 	Is   D4:D9
c            	        t        j                  d      } t        j                  d      }|j                  t        d| j	                  d      j                  dd      fd| j	                  d      f      	      j                  d
      }d }|j                  |      j                         }t        t        |      d
         x}dk(  sJ |       t        |      }t        |      \  }}|j                         D 	
ch c]
  \  }	}
|
r	|	 }}	}
|D ch c]  }t        ||         d
kD  s| }}t        |      d
k(  sJ |j                         }t        |      }t!        ||       d }d}t        ||         dkD  sJ t#        ||   |j$                        D ]0  }|'|dk(  r||   ||   z
  d
z
  }|d
kD  sJ ||   ||z   k(  sJ ||   }2 y c c}
}	w c c}w )Nr   r  )r   r   P   rX   rS   r   )r   r   )	data_varsr!   )r   c                p    | j                   | j                  z  }|| j                  z  j                  d      S )Nr   )r   r   r   )r  r   s     r   r   ztest_xarray_8414.<locals>.f2	  s*    DD244KBDD~~c""r   r"   r   rR   rc  )rw   rx   r  r   r	  reshapechunk
map_blocksr#   r   r   r   r   r   popr   r}   r   r{  )r  r  r  r   r  rv  r9   r   r   r   r+  rootsr  shared_rootsshared_rootr-   previoussteprx  s                      r   test_xarray_8414r  &	  s   			W	%B			X	&B	299R=00B78biim$
 
 

 eaej # MM!++-E ['*++A14141 u+C'}L*'--/941aqQ9E9$?!JqM(:Q(>A?L?|!!!""$Kc
AC#HDz+&'!+++j-1==A qyv+.2axxvD000S6 :?s   ;
G
G
G(Gc                 t   t         dft         dft         dft         ddfd} t        |       \  }}t        ||      \  }}|| D ci c]  }||dk7  rdhn	t                c}k(  sJ t	        |j                         D ch c]  }t        |       c}      dk(  sJ |dddddk(  sJ |       t        ||      \  }}|| D ci c]  }||dk7  rdhn	t                c}k(  sJ t	        |j                         D ch c]  }t        |       c}      dk(  sJ |dddddk(  sJ |       y c c}w c c}w c c}w c c}w )Nr!   r   r   r   )r   r   r   r   rR   r   )r   r   r   r  r   r  id)r9   r   r   connected_rootsmax_dependentsr   r+  s          r   $test_connecting_to_roots_single_rootr  X	  sq   V#h#ht_	C  (}L*&:<&T#O^L1q183%>LLLL5578!189Q>>>	  
   ';:|&T#O^L1q183%>LLLL5578!189Q>>>	  
   M8 M8s   D&;D+>D06D5c                 N   t         dft         dft         dft         dft         dft         dft         dft         dft         ddft         dd	ft         d
dfd} t        |       \  }}t        ||      \  }}|t               t               t               t               dhdhdhdhddhddhh ddk(  sJ t	        |j                         D ch c]  }t	        |      dk(  st        |       c}      dk(  sJ t        d |j                         D              sJ t        ||      \  }}|j                  d      t               k(  sJ t        d |j                         D              sJ t        |j                                      t        d |j                         D              sJ y c c}w )Nr!   a0r   r   r   r   r   r   r  r   r   )r  r   r   r   r   r   r   r  r   r   r   >   r  r   r   r   r   c              3  &   K   | ]	  }|d k(    ywr   r   r   r+  s     r   r   z:test_connecting_to_roots_tree_reduction.<locals>.<genexpr>	       7!qAv7r   r   c              3  (   K   | ]
  }|d hk(    yw)r   Nr   r  s     r   r   z:test_connecting_to_roots_tree_reduction.<locals>.<genexpr>	  s     <aqSEz<s   c              3  &   K   | ]	  }|d k(    ywr   r   r  s     r   r   z:test_connecting_to_roots_tree_reduction.<locals>.<genexpr>	  r  r   )	r   r   r   r  r   r  r  r  r  )r9   r   r   r  r  r+  s         r   'test_connecting_to_roots_tree_reductionr  t	  s   !f!f!f!f$i$i$i$i$o$ot_C  (}L*&:<&T#O^eeeeffffTlTl%    557G!3q6Q;1GHAMMM7~4467777&::|&T#O^s#su,,,<?#9#9#;<< c ? < 7~4467777 Hs   F"F"c                    t         dft         dft         dft         dft         dft         dft         ddft         dft         dft         d	ft         d	ft         d
dddfd} t        |       \  }}t        ||      \  }}t        |d         }dD ]  }t        ||         |k(  rJ  t        |d         }dD ]  }t        ||         |k(  rJ  y )Nr!   r  b0c0d0d1r   r   r   e1d2d3)r  r   r  r  r  r  r  r   r   r  r  r   )r  r  r  r  )r   r  r  )r   r   r   r  )r9   r   r   r  r   id_a0r   s          r   +test_connecting_to_roots_long_linear_chainsr  	  s    !f!f$i$i$i$i$o$i$i$i$itT4(C  (}L*-lJGOQt$%E% //!$%.../ t$%E //!$%.../r   c                 `   t        j                  d      t        j                  d      dfd	} d}j                  j                  dd      }j                  j	                  ||d	      \  }}} | |      }t        |j                        }t        |      \  }}	t        ||	      \  }
}t        t              }|
j                         D ]1  }|t        t        |               j                  t        |             3 t        t!        t"        |j                                     d
hk(  sJ y )Nr   r   c                   d}| j                   \  }}j                  |      }t        |      D ]  }| |z  }||j                         z  }||z  }	j	                  j                  |d            }
||z  }| j                         j                  |	||z  |
z  z
  z  }j                  j                  ||d      \  }}}||z  } | |z  }|S )Nr!   r   r   Fr   r`  )	r
  eyer{   conjdiagr   Tlinalgsvd_compressed)Xn_itergamma	n_samplesn_modesRr   basisbasis2basis3WalphatransformedUsvalsVTXrotr   r  s                    r   rotatez<test_connected_roots_deduplication_mem_usage.<locals>.rotate	  s    WW	7FF7Ov 	AEEUZZ\)Fe^FvA./AI%E&&(**%%-!2C(DEK9933w 4 LAub BA	 1ur   rX  )r   rX  )r  r   rY  Fr  r!   rH  )rw   rx   r   r  r  r   r   r   r   r   r  r  rv  r   r   r  mapr   )r  r  r   usr+  u_rotr9   r   r   r  r  hashesr   r  s                @@r   ,test_connected_roots_deduplication_mem_usager  	  s   			W	%B			\	*B, G
		{;Aii&&qGU&CGAq!1IE
uzz
C'}L*&:<&T#O^F##% ,uVAY $$RU+, s3()aS000r   c                 :   t         dft         dft         dft         dft         dft         ddft         dft         dft         ddft         dft         dft         d	d
ft         d	ddfd} t        |       \  }t        |      \  }}|t               t               t               t               t               ddhddhddhddhdhdhddhh ddk(  sJ ||j	                         D ci c](  \  }}|t        fd|D        t        |               * c}}k(  sJ y c c}}w )Nr!   r  r   r   r   r   r   r   r   r   r   r   )r  r   r   r   r   r   r   r   r  r   r   r   r  >   r   r   r   c              3  :   K   | ]  }t        |           y wr   r   )r   r  r   s     r   r   z0test_connecting_to_roots_asym.<locals>.<genexpr>

  s     .qJqM".s   )default)r   r   r   r  r   r   r   )r9   r   r  r  r   r+  r   s         @r   test_connecting_to_roots_asymr  	  sH   !f!f!f!f!f$o$i$i$o$i$i$o$d#C"  (}L*&:<&T#O^eeeeeTlTlTlTlffTl    " #))+Aq 	
3.A.JqM8JKK    s   !-Dc                 .   t        j                  d      } dt        df| j                  ddgddgg      g dt        dfd	}t	        |      \  }}|j                         }|j                         }t        ||
      }t        ||       ||k(  sJ ||k(  sJ y )Nr   r^  r!   rR   r"   rN   r6  r   )r   r   r   r   r   )r   )rw   rx   r   r  r   rp  r   r}   )r  r9   r   __build_class__dependencies_copydsk_copyr-   s          r   test_do_not_mutate_inputr  
  s     
		W	%BVXX1v1v&'XC %-SM!L/$))+xxzHc-AC#(??,,,,r   c                    ddg} i dt         dfdt         dfdt         ddddfdt         d	fdt         d
dddfdt         dfdt         dfdt         ddfdt         dfd
t         dfdt         ddfd	t         dfdt         dfdt         dfdt         dfdt         ddfdt         dfi dt         dfdt         dfdt         dfdt         dfdt         d fdt         d!fdt         d"fdt         d#fd!t         d$fdt         d%fd#t         d$fd t         d&fdt         dfdt         d'fd$t         d(fdt         dfdt         d)d*ft         d+ft         d!ft         d,ft         d#ft         d+ft         ft         d-ft         d$ft         d ft         d.ft         d$ft         d-fd/}t        |d01      }t        |      \  }}t        |      d2k  sJ |       | D ]  }||   j                  d3v rJ  y )4N)*transpose-9c80c6b26d7ef5cfec7274ee9e6b091er   r   r   )r  r   r!   r   )vindex-merger   r   r   )r  r   r!   r   )vindex-slicer   r   r   )r  r!   r   r   )r  rR   r   r   )r  r"   r   r   )getitem-vindexrR   r   r   )r  r   r   r!   )r  r!   r   r!   )r  rR   r   r!   )r  r"   r   r!   )r  rR   r   r!   )r  r!   r   r   )rZ   A  )rZ   iB  )r  r"   r   r!   )r  r   r   r!   )rZ   +  )rZ   i,  )rk  r   r!   rY   r!   )r  r"   r   r   )r  r   r   r   rZ   U  )rZ   iV  )r  r!   r   r!   )concatenate-getitemr  )r  r  )rk  r   r!   rX   r!   )rk  r   r!   rS   r   )rk  r   r!   rY   r   )fetch-rasterr   r   rX   r!   getitem-subr   r!   rY   r!   )r  r   r   rY   r!   )asset_tabler   r   r  r   r!   rX   r!   r  r   r!   rY   r   r  r   r!   rS   r   zasset-table-datar   r   rZ   ?  rZ   i@  r  r   r   rS   r   r  r  r  r   r   rY   r   r  r  )r  r  r  r  r  r  r  r  r  r  r  r  Tr*   rY   >   r!   rR   )r   r   r   r   critical_path)
final_keysr9   r-   r   rB  r   s         r   test_stackstacr  #
  s    	@?JQ?%B
Q
 	@%B
Q 	"%%%%$
Q  	"A'B#C!Q" 	"%%%%$
#Q0 	"A'B#C1Q2 	"A'B#C3Q4 	$""&
5Q> 	"A'B#C?Q@ 	"A'B#CAQB 	$""&
CQL 	$a)D%EMQN 	"A'B#COQP 	$? @QQR 	"A'B#CSQT 	$""&
UQ^ 	"A'B#C_Q` 	$@ AaQb 	$@ AcQd 	$a)D%EeQf 	$a)E%FgQh 	$a)D%EiQj 	%q*F&GkQl 	$a)D%EmQn 	%q*F&GoQp 	%q*?&@qQr 	$a)D%EsQt 	%q*?&@uQv 	$a)D%EwQx 	$? @yQz 	%q*F&G{Q| 	#=>}Q~ 	$@ AQ@ 	$""&
AQJ ()*G&H&')E%F!"$@ A&')E%F'(*G&H%&D&')E%F()+@'A!"$? @!"$@ A'(*?&@'(*F&GaQCd 	c%Ac"KAxx=A'x' , t!!V+++,r   c                    ddl m}   | dt        d      } | dt        |j                         f      } | dt        |j                         f      }||fD ci c]  }|j                  | }}t        |      }t        |      dk(  sJ y c c}w )Nr   )Taskr   r   r   r   rR   )dask._task_specr  r   refrd  r   r   )r  tatbtctr9   r-   s          r   %test_handle_out_of_graph_dependenciesr  
  s|    $	c1b	B	c1rvvxk	"B	c1rvvxk	"B "X
&155!8
&C
&c
Aq6Q;; 's   B) )Z
__future__r   r5   r  r   rw   packaging.versionr   r   r   dask._compatibilityr   	dask.baser	   r
   r   	dask.corer   ro  r   r   r   r   dask.utils_testr   r   fixturer   r   r>   rr   markskipifry   r   r   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  xfailr  r  r  r  r#  r.  r2  r9  r;  rF  rT  r  r  r  r  r  r"  r*  rX  ra  ry  r}   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s   "  #  %   ' C C  N N $ 	4njZ G$<=& >&+&V0 tUm4 5@!B%+P<&,J.&)>.b">J	 -6 7$!&:!z#:L(9V,%&PQY?x7%t,@p=fC
L: !#!#H>/B7#tT-n$6N dE]3tUm41a&)1v.9 / * 5 49x!K.\'%-P%@PHV +dE];% <%8/d8%8P/6*1Z(V-(_,Dr   