
    >ieZ              !         d dl mZ d dlZd dlmZ d dlZd dlZd dlZd dl	m
Z d dlmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d\  ZZZZZZ Z!d	  e"d
          D             \
  Z#Z$Z%Z&Z'Z(Z)Z*Z+Z,d\  Z-Z.Z/ej0        1                    dedeee#fiedfgfgedeee#fiedfgfgedeee#fiedfgfedeee#fiedfgfedeee#e$e%fiedfedfedfgfged eed          ee#f eed          ee#feee# eed           eed          fiedfgfgedeee#fiedfgfedeee#fiedfgfged eed          ee#fee eed          fiedfgfgedee2e#fiedfgfedeee#fiedfgfged eed          e2e#fee eed          fiedfgfgedeee#fiedfgfedeee#fiedfgfe!de!ee#e$fiedfedfgfge!de!e eed           eed          f eed          ee#f eed          ee$fiedfedfgfgedeej3        e#fiedfgfedeee#e$fiedfedfgfgedeee# eed          f eed          ej3        e$fiedfedfgfgedeee#e$fiedfedfgfedeee#fiedfgfgedee eed          f eed          ee#e$fiedfedfgfgedeej3        e#fiedfgfedeej4        e#e$fiedfedfgfgedeej4         eed          e#f eed          ej3        e$fiedfedfgfgedeee#e$fiedfedfgfe de ee#e$fiedfedfgfe!de!ee#e$fiedfe dfgfge!de!e eed           ee d          f ee d          ee%e&f eed          ee#e$fiee-fee-fee-fee-fgfgedeee#e$fiedfedfgfe de ee#e$fiedfedfgfe!de!ee#e$fiedfe dfgfge!de!e eed           ee d          f ee d          ee#e%f eed          ee#e$fiedfedfedfgfgedee2e#fiedfgfedeee#fiedfgfgedee eed          f eed          e2e#fiedfgfgedeee#fiedfgfedeee#e$e%fiedfedfedfgfgedeee#e$ eed          f eed          ee$fiedfedfgfgedeee#e$fiedfdgfgedeee#e$fiedfdgfgedeee#e$fiedfdgfedeee#e$fiedfdgfged eed          ee$e%fee eed          e#fidedfdgfgedeee#e$fiedfdgfedeee#e$fiedfdgfged eed          ee$e%fee eed          e#fidedfdgfgedeee#e$fiedfdgfedeee#e$fiedfdgfged eed          ee$e#fee eed          e#fidedfgfgedeee#e$fiedfdgfedeee#e$fiedfedfgfedeee#e$fiedfdgfgddde eed          e#f eed          e eed           eed          f eed          ee$e%f eed          ee&e%fidedfdedfgfgedeee#e$fiedfdgfedeee#e$fiedfedfgfedeee#e$e%fiedfedfedfgfgddde eed           eed           eed          f eed          e eed           eed          f eed          ee#e$f eed          ee%e$fiedfdedfgfgg          d             Z5d  Z6d! Z7d" Z8d# Z9d$ Z:d% Z;d& Z<d' Z=ej0        1                    d(g d)          d*             Z>ej0        1                    d(g d+          d,             Z?d- Z@d. ZAd/ ZBej0        1                    d0d1d2g          d3             ZCej0        1                    d0d1d2g          d4             ZDej0        1                    d0d1d2g          d5             ZEd6 ZFd7 ZGd8 ZHd9 ZId: ZJd; ZKd< ZLd= ZMd> ZNej0        1                    d?d@  ejO        dAdBdCg          dDdE          g          dF             ZPdG ZQdH ZRdI ZSdJ ZTdS )K    )annotationsN)add)	assert_eq)_BLOCKWISE_DEFAULT_PREFIX	Blockwise_unique_dep
index_subsoptimize_blockwiserewrite_blockwise)HighLevelGraph)dechlg_layer_topologicalinc)abcdefgc              #  ,   K   | ]}t            | V  d S N)r   ).0is     :lib/python3.11/site-packages/dask/array/tests/test_atop.py	<genexpr>r      s?       * **+ %!%%* * * * * *    
   )r   jkzinputs,expectedr   r   ijr    kAjiikkjkiiA){   N)i  N)r   N)FNjk)   Nijkr   c                    d | D             } t          |           }|j        d                    |j                  |j        d |j        D             f}||k    sJ d S )Nc           	     F    g | ]}t          |d d |d         D             iS )	numblocksc                >    i | ]\  }}||dt          |          z  S )N   )len)r   r    vs      r   
<dictcomp>z+test_rewrite.<locals>.<listcomp>.<dictcomp>&  s)    SSS$!QQ]Qs1vv]]]r   )r   )r   inps     r   
<listcomp>z test_rewrite.<locals>.<listcomp>$  sQ         		
SS#b'SSS	
 	
  r    c                J    g | ] \  }}||d                     |          n|f!S )Nr8   )join)r   nameinds      r   r7   z test_rewrite.<locals>.<listcomp>/  sC     	
 	
 	
c 3?2773<<<<	
 	
 	
r   )r   outputr:   output_indicesdskindices)inputsexpectedresultresult2s       r   test_rewriterE      s    L  	  F v&&F
%&&
	
 	
#^	
 	
 	
	G hr   c                 l    t          t          d          ddd          t          d          k    sJ d S )Nr!   r   r   )r   r   r#   )r	   tuple r   r   test_index_subsrI   7  s7    eDkk3#7#788E$KKGGGGGGr   c                 0   t          j        dd          } | dz   dz   dz   dz   }t           j                            |j                  }t          |t                    sJ t          d |j        	                                D                       dk    sJ d S )	Nr      chunksr1   r*         c                <    g | ]}t          |t                    |S rH   
isinstancer   r   layers     r   r7   z+test_optimize_blockwise.<locals>.<listcomp>D  '    TTTuz%7S7STUTTTr   
daonesoptimizationr
   daskrS   r   r2   layersvalues)xyr?   s      r   test_optimize_blockwiser`   ;  s    
4   Aq5A+	aA
/
,
,QV
4
4Cc>***** 	TT
 1 1 3 3TTTUU	 	 	 	 	 	r   c                    t          j        dd          } | dz   }t          j        dg dd          5  |d	z   }d
d
d
           n# 1 swxY w Y   t          j        d	g dd          5  |dz   }d
d
d
           n# 1 swxY w Y   t          j        dd	dd          5  |dz   }d
d
d
           n# 1 swxY w Y   t          j        dddd          5  |dz   }d
d
d
           n# 1 swxY w Y   t          j        d          5  |dz   }d
d
d
           n# 1 swxY w Y   |dz   }t           j                            |j                  }t          |j                  dk    sJ t          |d          }	|	j	        }
t          |
          dk    sJ |
d         dk    sJ |
d         dk    sJ |
d         du sJ t          |
d                   ddhk    sJ |
d         dddk    sJ t          j        
                    ddi          5  t           j                            |j                  }t          |j                  dk    sJ 	 d
d
d
           d
S # 1 swxY w Y   d
S ) zq
    Can we fuse blockwise layers with different, but compatible
    annotations for retries, priority, etc.
    r   rK   rM   r1   rL   )r   r   r   F)retriesworkersallow_other_workersr*   N)r   r   r   T)priorityrc   rd   rO   )GPUMemory)rb   	resourcesrP   )re   rh   bar)foo   r   re   rb   rd   rc   r   r   rh   zoptimization.annotations.fuse   )rX   rY   r[   annotaterZ   r
   r2   r\   r   r   setconfig)r   r   r   r   r   r   r   hr?   rU   r   s              r   +test_optimize_blockwise_control_annotationsrq   I  s&    	4   A	AA	q///u	U	U	U  E               
???PT	U	U	U  E               
qA,D,D	E	E	E  E               
Q!-D-D	E	E	E  E               
5	!	!	!  E               	
AA
/
,
,QV
4
4C sz??a!#q))E#K{q    z"a''''y!Q&&&&,-6666{9%&&3*4444{#qB'?'????? 
95A	B	B $ $o00883:!#####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sk   AAA+A==BB!B33B7:B7C))C-0C-	DD"D?II Ic                 j   t          j        dd          } | dz   }t          j        d          5  |dz   }|dz   }d d d            n# 1 swxY w Y   t          j        d	          5  |d
z   }|dz   }d d d            n# 1 swxY w Y   |dz   }t           j                            |j                  }d |j                                        D             }t          j	        d |D                       }t          |          dk    sJ |d          dk    sJ |d         dk    sJ |d         dk    sJ d S )Nr   rK   rM   r1   rj   )quxr*   rO   bazrP   rL   rk   c              3  N   K   | ] }t          |t                    |j        V  !d S r   )rS   r   r   rT   s     r   r   z=test_optimize_blockwise_custom_annotations.<locals>.<genexpr>  sI        eY''     r   c              3     K   | ]=}t          |          t          u r!t          |                                          n|V  >d S r   )typedictrG   itemsr   r   s     r   r   z=test_optimize_blockwise_custom_annotations.<locals>.<genexpr>  sV       & &78DGGtOOaggii& & & & & &r   ))rs   rt   ))rs   rj   )rX   rY   r[   rm   rZ   r
   r\   r]   collectionsCounterr2   )	r   r   r   r   r   r   r   r?   r   s	            r   *test_optimize_blockwise_custom_annotationsr}   x  s   
4   A	AA	5	!	!	!  EE               
5	!	!	!  EE               	
AA
/
,
,QV
4
4C Z&&((  K
 % & &<G& & &  K {q    t!!!!()Q....()Q......s#   AAA(A??BBc                 ^   t          j        dd          } | dz   dz   dz   }|dz  }|dz  }||z   }|dz   dz   dz   }t           j                            |j                  }t          |t                    sJ t          d |j        	                                D                       dk    sJ d S )Nr   rK   rM   r1   r*   rO   c                <    g | ]}t          |t                    |S rH   rR   rT   s     r   r7   z1test_blockwise_diamond_fusion.<locals>.<listcomp>  rV   r   rW   )r^   r_   r   r   r   r   r?   s          r   test_blockwise_diamond_fusionr     s    
4   A
a%1A	AA	AA	AA
a%1A
/
,
,QV
4
4Cc>***** 	TT
 1 1 3 3TTTUU	 	 	 	 	 	r   c            
     T   t          j        dd          } | dz   dz   dz   }|                                }|dz  dz  dz  }t          |j        j        |j                 j                  }t	          j        |          \  }t          |j        j        |j                 j                  }||k    s
J d            t          |j        t          t          j                            |                                                    	          }t          |t                    sJ t!          d
 |j                                        D                       dk    sJ t          t          j        |j        |j                  t          t          j                            |                                |                                g                    	          }t          |t                    sJ t!          d |j        j                                        D                       dk    sJ d S )Nr   rK   rM   r1   r*   rO   rP   zz_top mutated)keysc                <    g | ]}t          |t                    |S rH   rR   rT   s     r   r7   z7test_blockwise_non_blockwise_output.<locals>.<listcomp>  rV   r   c                <    g | ]}t          |t                    |S rH   rR   rT   s     r   r7   z7test_blockwise_non_blockwise_output.<locals>.<listcomp>  s'    WWWu*UI:V:VWUWWWr   )rX   rY   sumrG   r[   r\   r;   r@   optimizer
   listcoreflatten__dask_keys__rS   r   r2   r]   merge)r^   r_   wzz_top_beforezzz_top_afterr?   s           r   #test_blockwise_non_blockwise_outputr     s   
4   A
a%1A	A
a%1Aqv.677LM!ERaf-566K;&&&&&&
QV$ty/@/@ARAR/S/S*T*T
U
U
UCc>*****TT
 1 1 3 3TTTUU	 	 	 	 QVQV,,$)##Q__%6%68I8I$JKKLL  C c>*****WW 4 4 6 6WWWXX	 	 	 	 	 	r   c                     t          j        dd          } | d d d f         | d d d f         z  }|j        j        |j                 }t          |          dk    sJ d S )Nr   rK   rM   rP   )rX   rY   r[   r\   r;   r2   )r^   r_   r   s      r   test_top_lenr     s_    
4   A	!!!T'
QtQQQwZA	afAq66Q;;;;;;r   c                     t          j        dd          dz   dz   dz   } |                                 }| dz  dz  dz  }|                                }| dz  dz  }t          j        | ||||           d S )Nr   rK   rM   r1   r*   rO   rP   )rX   rY   r   r[   compute)r^   r   r_   r   r   s        r   test_inner_computer     s{    
4   1$q(1,A	A	A	AA	A	A	ALAq!Qr   r;   )__0_1..0c           	         t          j        g dt                    }t          j        |d          }t          j        t          d|d| d t                    }|| z   }t          ||           d S )Nr   bbcccdtyper*   rM   r   )nparrayobjectrX   
from_array	blockwiser   r   r;   r^   r   rC   rB   s        r   test_common_token_names_argsr     sn    
###6222A
a"""A\#sAsD$fEEEF4xHfhr   )r   r   r   r   r   c                    t          j        g dt                    }t          j        |d          }t          j        d d|d| t                    }|| z   }t          ||           d S )Nr   r   r*   rM   c                    | |z   S r   rH   r^   r_   s     r   <lambda>z0test_common_token_names_kwargs.<locals>.<lambda>  s
    q1u r   r   r_   r   )r   r   r   rX   r   r   r   r   s        r   test_common_token_names_kwargsr     sp    
###6222A
a"""A\,,c1cTPPPF4xHfhr   c                     t          j        dd          } t          j        t          d| d| j                  }|j                            d          sJ d S )NrL   r*   rM   r   r   r   )rX   rY   r   r   r   r;   
startswithr   s     r   test_blockwise_namesr     sT    
$A
S#q#QW555A6U#######r   c            	        d } t          j        dd          }t          j        | d|dddid	|j        
          }|j        dk    sJ t          |t          j        d                     d } t          j        dd          }t          j        | d|dddid	|j        
          }|j        dk    sJ t          |t          j        d                     d } t          j        dd          }t          j        | d|dddid	|j        
          }|j        dk    sJ t          |t          j        d          dz             d S )Nc                D    | d d d f         t          j        d          z  S )Nr1   rl   r   rY   r^   s    r   r   z"test_blockwise_new_axes.<locals>.f  s!    DzBGFOO++r   rL   r*   rM   aqr   qrl   Tnew_axesconcatenater   r*   r*   r1   rl   rL   rl   c                D    | d d d f         t          j        d          z  S )N)rl   r1   r   r   s    r   r   z"test_blockwise_new_axes.<locals>.f  s!    qqqzBGFOO++r   qa)r   r   )rl   rL   c                p    |                      d          }|d d d f         t          j        d          z  S )Nr1   axis)r1   rL   )r   r   rY   r   s     r   r   z"test_blockwise_new_axes.<locals>.f  s2    EEqEMMDzBGFOO++r   )rP   rk   r*   r*   ab)r   rK   )rP   rL   rk   rX   rY   r   r   rN   r   r   r   r^   r_   s      r   test_blockwise_new_axesr     s   , , , 	!A
	4C3(AG	 	 	A 8(((((a!!!, , , 	!A
	4C3(AG	 	 	A 8(((((a!!!, , , 	v&&&A
	4DC8QW	 	 	A 8~%%%%a1$%%%%%r   c            
         t          j        dd          } d }t          j        |d| d| j        ddd	i
          }t	          ||           d S )Nr   r1   r1   rM   c                4    t          j        | |  gd          S )Nr5   r   )r   stackr   s    r   funcz'test_blockwise_new_axes_2.<locals>.func  s    xQBb))))r   )r^   r_   signr   Tr   r*   )r   r   r   )rX   rY   r   r   r   )r^   r   r_   s      r   test_blockwise_new_axes_2r     sk    
v&&&A* * * 		g!	 	 	A aOOOOOr   r   TFc           	        d }t          j        dd          }t          j        |d|dddi| |j        	          }t          j        |d
|dddi| |j        	          }|j        dk    sJ t          |t          j        d                     d S )Nc                <    | d         t          j        d          z  S N).Nr   r   r   s    r   r   z*test_blockwise_stacked_new_axes.<locals>.f)      |bgfoo--r   rL   r*   rM   r   r   r   rl   r   abqr   )r   r   r   )rL   rl   rl   r   )r   r   r^   r_   r   s        r   test_blockwise_stacked_new_axesr   '  s    . . . 	!A
	4C3(17	 	 	A 		5!TS!H+QW	 	 	A 8.....a##$$$$$r   c           	        d }t          j        dd          }t          j        |d|dddi| |j        	          }t          j        |d
|dddi| |j        	          }|j        dk    sJ t          |t          j        d                     t          j        d d|d|j        d          }|j        dk    sJ t          |t          j        d                     d S )Nc                    t          | t                    rt          j        |           } | d         t          j        d          t          d           fd| j        z  z            z  S )N)N.rl   r   )rS   r   r   r   rY   slicendimr   s    r   r   z0test_blockwise_stacked_new_axes_front.<locals>.f9  sS    a 	"q!!A|bgajj%++'AF:J)JKKKr   rL   r*   rM   r   r   r   rl   r   qabr   )r   r   r   )rl   rl   rL   c                    | d d ddf         S )Nr   rH   r   s    r   r   z7test_blockwise_stacked_new_axes_front.<locals>.<lambda>I  s    !AAAq!G* r   abcT)r   r   )r   r   r   )r   r   r^   r_   r   r   s         r   %test_blockwise_stacked_new_axes_frontr   7  s   L L L
 	!A
	4C3(17	 	 	A 		5!TS!H+QW	 	 	A 8.....a##$$$
c1e17	 	 	A 8war   c           	     T   d }t          j        dd          }t          j        dd          }t          j        |d|dddi| |j        	          }t          j        |d|dddi| |j        	          }||z   }|j        d
k    sJ t          |t          j        d                     d S )Nc                <    | d         t          j        d          z  S r   r   r   s    r   r   z3test_blockwise_stacked_new_axes_same_dim.<locals>.fQ  r   r   rL   r*   rM   r   r   r   rl   r   r   r   )rX   rY   zerosr   r   rN   r   r   )r   r   r^   r_   r   r   r   s          r   (test_blockwise_stacked_new_axes_same_dimr   O  s    . . . 	!A
1A
	4C3(17	 	 	A 		4C3(17	 	 	A 	
AA8(((((a!!!!!r   c                    d } t          j        ddddt          j                  }t          j        | d|dd	d
i|j                  }|j        dk    sJ t          |t          j        g dg dgt          j                             d S )Nc                     | d d d f         dz  S Nr*   rH   r   s    r   r   z*test_blockwise_new_axes_chunked.<locals>.fb  s    qqqzA~r   r   rk   r1   r*   )rN   r   r   r   r   r   r   r   )r   )r*   r*   r*   )r   r*   rP   rk      r   )	rX   aranger   int32r   r   rN   r   r   r   s      r   test_blockwise_new_axes_chunkedr   a  s       		!Q!28444A
QaV}AGLLLA8*****a...0C0C0CDbhOOPPPPPr   c                     d } t          j        | ddddt          j                  }|j        dk    sJ t          |t          j        dt          j                             d S )	Nc                 @    t          j        dt           j                  S N)r*   rO   )r   rY   float32rH   r   r   r   z!test_blockwise_no_args.<locals>.fl  s    wvrz***r   r   r*   rO   rO   r   r   r   r   r   r*   rk   rX   r   r   r   rN   r   rY   r   r^   s     r   test_blockwise_no_argsr   k  sl    + + + 	QQV'<'<BJOOOA8~%%%%a,,-----r   c            	         d } t          j        | dt          j        d dddt          j                  }|j        dk    sJ t          |t          j        dt          j                             d S )	Nc                ,    t          j        d|           S r   r   r   s    r   r   z'test_blockwise_no_array_args.<locals>.fu  s    wvu%%%r   r   r*   r   r   r   r   r   r   r   s     r   test_blockwise_no_array_argsr   t  s{    & & & 		4T!&,A,A	 	 	A 8~%%%%a,,-----r   c                     d	d} t          j        dd          }t          j        | d|dd|j                  }t	          |t          j        d          dz              d S )
Nr   c                    | |z   S r   rH   r   s     r   r   z test_blockwise_kwargs.<locals>.f  s    1ur   rL   r   rM   r   r   )r   r   r   )rX   rY   r   r   r   r   r   s      r   test_blockwise_kwargsr     sl        	$A
QQr999Aab!!!!!r   c            	        t          j        dd          } dd}t          j        |d| ddd id| j        	          }|j        d
k    sJ t          |t          j        d                     t          j        |d| ddd id| j        	          }|j        dk    sJ t          |t          j        d                     t          j        dd          } t          j        |d| ddddi| j                  }|j        dk    sJ t          |t          j        d                     t          j        |d| ddddi| j                  }|j        dk    sJ t          |t          j        d                     d S )NrL   rL   )r*   r1   r*   rO   r*   rM   r   c                2    t          j        | | g|          S )Nr   )r   r   )r   r   s     r   doublez%test_blockwise_chunks.<locals>.double  s    ~q!f40000r   r!   r   c                    d| z  S r   rH   ns    r   r   z'test_blockwise_chunks.<locals>.<lambda>  
    a!e r   )adjust_chunksr   r   ))rP   r*   rP   r  )r   rL   r   c                    d| z  S r   rH   r  s    r   r   z'test_blockwise_chunks.<locals>.<lambda>  r  r   r1   )r   )rk   rP   )rL   r   r   r   r   )r   r  r   )r
  r   )   r   r   r   )r^   r  r_   s      r   test_blockwise_chunksr    s   
2333A1 1 1 1 		OO,g	 	 	A 8*****a!!"""
	OO,g	 	 	A 8*****a!!"""
(((A
aAc2Yag	 	 	A 8)))))a""###
aAc8_AG	 	 	A 8)))))a""#####r   c                    t          j        dd          } t          j        d          }|                     d d          } |                     d d          } |                     d	 |          } |                     d
 d          } |                     d d          } |                     d dt          j        ddgt
                              } t          | t          j        d                     d S )Nr   rK   rM   i  c                    | S r   rH   r   s     r   r   z*test_blockwise_numpy_arg.<locals>.<lambda>      ! r   g      ?c                    | S r   rH   r   s     r   r   z*test_blockwise_numpy_arg.<locals>.<lambda>  r  r   r   c                    | S r   rH   r   s     r   r   z*test_blockwise_numpy_arg.<locals>.<lambda>  r  r   c                    | S r   rH   r   s     r   r   z*test_blockwise_numpy_arg.<locals>.<lambda>  r  r   c                    | S r   rH   r   s     r   r   z*test_blockwise_numpy_arg.<locals>.<lambda>  r  r   c                    | S r   rH   r^   r_   r   s      r   r   z*test_blockwise_numpy_arg.<locals>.<lambda>  s    Q r   r   r   r   )rX   r   r   
map_blocksr   r   r   r   s     r   test_blockwise_numpy_argr    s    
	"T"""A
	$A	^^S))A	^^U++A	^^Q''A	^^U++A	^^S))A	&&rxc
&/Q/Q/QRRAa2r   c                 6   dd l m}  |                     dd          }|                    t          j                                                  \  }d |fD             \  }t          j        |g          }t          |t	          j
        d          d           d S )Nr   r   r1   )npartitionsc              3  N   K   | ] }t          j        |d t                    V  !dS ))r   )shaper   N)rX   from_delayedintrz   s     r   r   z,test_bag_array_conversion.<locals>.<genexpr>  s3      DD1BOAU#666DDDDDDr   F)check_graph)dask.bagbagrangemap_partitionsr   asarray
to_delayedrX   r   r   r   )dbr   r^   r   s       r   test_bag_array_conversionr&    s    
##ABJ''2244DQDDDDDDQ
sAa2E222222r   c                     t          j        dd          } | dz  }t           j                            |          \  }}}||z   }t	          ||           d S )Nr   rM   r*   )rX   rY   linalgsvdr   )r^   r_   usr3   r   s         r   test_svdr,    sR    
v&&&A	AAimmAGAq!	AAaOOOOOr   c            	        t          j        dd          }  t          j        d                       }t          j        t
          d| d|d | j                  }t          |t          j        d          dz              t          j        d d| d|| j        	          }t          |t          j        d          dz              d S )
Nr   rK   rM   c                     dS )Nd   rH   rH   r   r   r   z#test_args_delayed.<locals>.<lambda>  s    S r   r   r   r/  c                    | |z   S r   rH   r   s     r   r   z#test_args_delayed.<locals>.<lambda>  s
    !a% r   r   )	rX   r   r[   delayedr   r   r   r   r   r  s      r   test_args_delayedr2    s    
	"T"""A![[!!##A
S#q#q$ag>>>Aa2$%%%
''aIIIAa2$%%%%%r   tup)r1   r*   rj   r   r   r1   r*   c                    t           j                                                            dd          }d }t          j        |d|d| |j                  }t          ||           d S )Nr  r  r
  rM   c                    | S r   rH   )datar^   s     r   r   ztest_namedtuple.<locals>.f  s    r   )d1d2)r^   r   )rX   randomdefault_rngr   r   r   )r3  Ar   Bs       r   test_namedtupler>    sj     		&&x&AAA   	QaAGLLLAaOOOOOr   c                    t           j                                                            dd          } t          j        t
                    5 }t          j        t          d| d| j                   d d d            n# 1 swxY w Y   dt          |j
                                                  v sJ dt          |j
                  v sJ d	t          |j
                  vsJ t          j        t
                    5 }t          j        t          d
| d| j                   d d d            n# 1 swxY w Y   dt          |j
                                                  v sJ dt          |j
                  v sJ d S )Nr5  r
  rM   r)   r!   r   zunknown dimensionr    r   iirepeatedr   )rX   r:  r;  pytestraises
ValueErrorr   r   r   strvaluelower)r<  infos     r   test_validate_top_inputsrI    s   
	&&x&AAA	z	"	" 8d
S$4qw77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 #dj//"7"7"9"99999#dj//!!!!c$*oo%%%%	z	"	" 8d
S$4qw77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 TZ..000000#dj//!!!!!!s$   $A==BB;$D++D/2D/c                    t          j        dd          } t          j        t          d| d| j                  }t          j        t
          d|d|j                  }t          j        t
          d|d|j                  }t          |j                  }t          d |j	        
                                D                       dk    sJ |                                 d S )	Nr   rK   rM   r   r   r8   c                <    g | ]}t          |t                    |S rH   rR   )r   r   s     r   r7   z5test_dont_merge_before_reductions.<locals>.<listcomp>  s'    KKKa*Q	2J2JKKKKr   r*   )rX   rY   r   r   r   r   r
   r[   r2   r\   r]   r   )r^   r_   r   r   r?   s        r   !test_dont_merge_before_reductionsrL    s    
4   A
S#q#QW555A
S"aAG444A
S"a17333A
QV
$
$CKK3:,,..KKKLLPQQQQQIIKKKKKr   c                 h   t          j        dd          } t          j        t          d          5  t          j        t          d| d| j                  }d d d            n# 1 swxY w Y   t          j        t          d| d| j                  }t          ||           |j
        |j
        k    sJ d S )Nr   rK   rM   z.The da.atop function has moved to da.blockwise)matchr   r   )rX   rY   rB  warnsUserWarningatopr   r   r   r   r;   r  s      r   test_atop_legacyrR  
  s    
4   A	K
 
 
 5 5 GCaAG4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 	S#q#QW555AaOOO6QVs   $A""A&)A&c                 .   t          j        t          j        dt          j                  d          } t          | j                  | _        t          j        t          j        dt          j                  d          }| |z   }t          ||            d S )Nr1   r0   rM   )	rX   r   r   rY   float64rx   r[   r   r   )r   r   r^   s      r   test_non_hlgrU    so    
bga,,T:::A!&\\AF
bhq"*--d;;;A	AAaOOOOOr   )U
__future__r   r{   operatorr   numpyr   rB  r[   
dask.arrayr   rX   dask.array.utilsr   dask.blockwiser   r   r   r	   r
   r   dask.highlevelgraphr   dask.utils_testr   r   r   r   r   r   r   r   r   r   r!  r   r   _2_3_4_5_6_7_8_9r   r   r    markparametrizer   	transposedotrE   rI   r`   rq   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r&  r,  r2  
namedtupler>  rI  rL  rR  rU  rH   r   r   <module>rk     s   " " " " " "                       & & & & & &                / . . . . . ; ; ; ; ; ; ; ; ; ;7 1aAq!* */4uRyy* * * &BBBBB 1a  cARy>QH:
.	/!S1sBi.As8*1UV C!c2Y1c(4C!c2Y1c(4C!c2r2./1c(QHq#h1OP K3''#rK3''#rRQ!4!4kk!S6I6IJ
 S
		
& C!c2Y1c(4C!c2Y1c(4
 Q$$sBiS++a:M:M4NOS
		
 C!c2Y1d)5C!c2Y1c(4
 Q$$sBiS++a:M:M4NOT		
 C!c2Y1c(4C!c2Y1c(4D1sBm,3x!S.BC [[C00++a2E2EFK3''#rK3''#r
 SAs8$		
& D1r|R01QI;?D1sBm,4y1d).DE
 RQ!5!56K4((2<*< TQI&	
" C!c2r]+q#hC-ABC!c2Y1c(4
 S++a--.As0C0Cc2r]SSAs8$		
 D1r|R01QI;?D1rvr2./1d)aY1GH
 At 4 4b9K4((2<*< TQI&	
" C!c2r]+q#hC-ABC!c2r]+q#hC-ABC!c2r]+q#hC-AB [[C00++a2E2EFK3''#r2K3''#r2
 Q!Q!Q!Q0		
& C!c2r]+q#hC-ABC!c2r]+q#hC-ABC!c2r]+q#hC-AB [[C00++a2E2EFK3''#r2K3''#r2
 SAs8aX.		
& C!c2Y1d)5C!c2Y1c(4
 S++a--.As0C0Cc2YOT		
 C!c2Y1c(4C!c2r2./1c(QHq#h1OP
 S"b++a"5"56As8K8KcSUYWSAs8$		
 q3B-(As8[*ABCa#r2'1c(K)@A	
 C!c2r]+q#h-DEC!c2r]+q#h-DE
 Q$$sBmQkk!S>Q>QSU8VWq#h4		
 C!c2r]+q#h	-BCC!c2r]+q#h-FG
 Q$$sBmQkk!S>Q>QSU8VWC)4		
 C!c2r]+q#h-DEC!c2r]+q#h-DE
 Q$$sBmQkk!S>Q>QSU8VWq#h'		
$ D1sBm,4y).DEEAR}-D	At9/EFEAR}-E
K/HI #{{1e44b9K5))#At,,#At,,,
  K4((3B-K4((3B-	 q$iQI>	
0 D1sBm,4y).DEEAR}-D	At9/EFEARR01QI4y1d)3TU #At,,#At,,#At,,	  K4((#At,,#At,,+
  K4((3B-K4((3B- TI4y1%	
MAD DJ KD DJ(H H H  ,$ ,$ ,$^/ / />  "  :        !=!=!=>>    ?>  !=!=!=>>    ?> $ $ $& & &B  & u66% % 76% u66    76 . u66" " 76""Q Q Q. . .. . ." " ")$ )$ )$X
  
  
 3 3 3  & & & 	F=*K*53*==aCCD   " " ""
 
 
      r   