
    bi                       d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
Z
 e
j                  d      Zd dlZd dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ e
j2                  j5                  d	d
dg      e
j2                  j5                  dddg      e
j2                  j5                  dddg      d                      Zd Zd ZdldZe
j2                  j5                  d	g d      d        ZdldZ d Z!e
j2                  jD                  e
j2                  j5                  d	g d      d               Z#e
j2                  j5                  ddgejH                  ejH                  fejJ                  ejJ                  fejL                  ejL                  fejN                  ejN                  fg      d        Z(e
j2                  j5                  ddgejR                  ejR                  fejT                  ejT                  fg      d        Z+e
j2                  j5                  ddgejL                  ejL                  fejN                  ejN                  fg      d        Z,e
j2                  j5                  ddgejZ                  ejZ                  fej\                  ej\                  fg      d        Z/e
j2                  j5                  ddd g      d!        Z0e
j2                  j5                  ddd g      d"        Z1e
j2                  j5                  ddd g      d#        Z2d$ Z3d% Z4d& Z5d' Z6e
j2                  j5                  dg d(      d)        Z7d* Z8d+ Z9d, Z:dmd-Z;d. Z<d/ Z=d0 Z>d1 Z?e
j2                  j5                  dej                  ejJ                  g      d2        ZAe
j2                  j5                  dg d3      e
j2                  j5                  d4ddg      e
j2                  j5                  d5g d6      e
j2                  j5                  d7d8d9g      d:                             ZBe
j2                  j5                  dej                  ej                  g      d;        ZEe
j2                  j5                  d<ej                  ej                  fej                  ej                  fg      e
j2                  j5                  d=g d>      d?               ZJe
j2                  j5                  d<ej                  ej                  fej                  ej                  fg      e
j2                  j5                  d=g d@      e
j2                  j5                  dAg dB      dC                      ZKdD ZLe
j2                  j5                  dej                  ej                  ejH                  ejJ                  ejZ                  ej\                  ej                  ejT                  g      e
j2                  j5                  d7d8d9g      dE               ZNdF ZOe
j2                  j5                  ddGdHg      e
j2                  j5                  d5d d dIgdIdJg      e
j2                  j5                  dddg      dK                      ZPe
j2                  j5                  ddGdHg      e
j2                  j5                  d5d d dLgdIg      dM               ZQe
j2                  j5                  d7g dN      dO        ZRe
j2                  j5                  ddPdQg      dR        ZSe
j2                  j5                  ddPdQg      dS        ZTdT ZUe
j2                  j5                  ddUdVg      dW        ZVe
j2                  j5                  dX eW edY                  e
j2                  j5                  d=dLdZg      e
j2                  j5                  d[ eW ed\dL             eW ed\            z         d]                      ZXd^ ZYd_ ZZe
j2                  j5                  d5d`d dId`gg      e
j2                  j5                  dadbdbgdbdcgg      e
j2                  j5                  ddddg      de                      Z[e
j2                  j5                  d5d`dId`gg      e
j2                  j5                  dadbdbgg      e
j2                  j5                  ddddg      df                      Z\e
j2                  j5                  dej                  ej                  ej                  g      dg        Z`dh Zadi Zbdj Zcdk Zdy)n    )annotationsN)nullcontext)permutationszip_longestnumpy)ComplexWarning)	assert_eq	same_keys)get_depsdtypef4i4keepdimsTFnanc                &   t         j                  d      }|rdt         j                  j                         j	                  ddd      }t         j
                  ||dk  <   t        j                  j                  }d }n*t        j                  j                  }t         j                  }t         ||d||        ||d||              t         ||d||        ||d||              t        |j                        D ]^  }t        j                  t        |j                        D cg c]  }| c}|      D ]"  }	t         |||	||        |||	||              $ ` t        |j                        D ]  }t        j                  t        |j                        D cg c]  }| c}|      D ]X  }	t         j                  j                         j!                  t#        |	            }
t         |||
||        |||
||              Z  y c c}w c c}w )	N)            sizer   c                    t        j                  t         j                  j                  t         j	                  |       |       fi |}t        |t         j                  j                        r|j                  d      S |S )Nr   )npsummamasked_whereisnan
isinstanceMaskedArrayfilled)arrkwargsns      [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/array/tests/test_reductions.py_sumztest_numel.<locals>._sum   sT    ruu))"((3-=HHA",Q0A0A"B188A;II     )axisr   r   )r   onesrandomdefault_rnguniformr   da
reductionsnannumelnumelr   r	   rangendim	itertoolscombinationsshufflelist)r   r   r   xyr1   r&   lengthdsubssubs              r%   
test_numelr>      s    		A
II!!#++B	+B66!a%&&	J
 ##vvab859QR(%8 aa(%8QQ7
 - ))eAFFm*D1*DfM 	CacHEBQS85A	 - ))eAFFm*D1*DfM 	C99((*2249=DadXUCQTHEB	 +E +Es   $	H	
	H
c                     ||      } | |      }t        ||       t         | |      |       |j                  dk(  sJ y Nr   )r	   r   )da_funcdarrnp_funcnarrexpectedactuals         r%   reduction_0d_testrG   @   s>    t}HT]FfhgdmX&;;!r'   c                    t         j                  d      } t        j                  | d      }t	        t        j
                  |t         j
                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                  |t         j                  |        t	        t        j                   |t         j                  |        t	        t        j"                  |t         j                  |        t	        t        j$                  |t         j                  |        t	        t        j&                  |t         j&                  |        t	        t        j(                  |t         j(                  |        y )Nr   )r   chunks)r   int_r.   
from_arrayrG   r   prodmeanvarstdminmaxanyallnansumnanprodnanmeannanvarnanstdnanminnanmaxr8   as     r%   test_reductions_0Dr^   I   s   

A
a%Abffa+bggq"''1-bggq"''1-bffa+bffa+bffa+bffa+bffa+bffa+biiBIIq1bjj!RZZ3bjj!RWWa0biiBFFA.biiBFFA.biiBIIq1biiBIIq1r'   c                `   t         | |       ||             t         | |       ||             t         | |d       ||d             t         | |d       ||d             t         | |       | |            sJ t         | |d       | |d            sJ |rt        j                  |      rt	        j
                  t              n	t               5  t         | |d       ||d             t         | |d       ||d             t         | |d       | |d            sJ 	 d d d        |rf | |d	      } | |d
di	      }t        ||      sJ t        | ||             t        | ||             t         | |dd       ||d             y y # 1 sw Y   rxY w)NTr   r(   r)   f8r   i8r   split_everyr   r   rf   r	   r
   r   iscomplexobjpytestwarnsr   does_not_warnrA   rB   rC   rD   	use_dtyperf   a1a2s           r%   reduction_1d_testrq   `   s   gdmWT]+wt} gdT*GD4,HIgd$gd&<=WT]GDM222WTD174$3OPPP-/__T-BV\\.) 	Sgd$/T1JKgd$/T1JKWT6D8QRRR	S Tq)T1v.R   "gdm$"gdm$D4Q7PT9U	
 		S 	Ss   AF$$F-)r   r   c8c                   t        j                         5  t        j                  dt               t        j                  d      dt        j                  d      z  z   j                  |       }t        j                  |d      }d d d        t        t        j                  t        j                         t        t        j                  |t        j                  |       t        t        j                  |t        j                  |       t        t        j                  |t        j                  |       t        t        j                  |t        j                  |       t        t        j                  |t        j                  |d       t        t        j                   |t        j                   |d       t        t        j"                  |t        j"                  |d       t        t        j$                  |t        j$                  |d       t        t        j&                  |t        j&                  |       t        t        j(                  |t        j(                  |       t        t        j*                  |t        j                  |       t        t        j,                  |t        j                  |       t        t        j.                  |t        j                  |       t        t        j0                  |t        j0                  |d       t        t        j2                  |t        j2                  |d       y # 1 sw Y   xY w)Nignore                 ?r   rI   F)warningscatch_warningssimplefilterr   r   arangeastyper.   rL   rq   r   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   )r   r8   r]   s      r%   test_reductions_1Dr}   y   s   		 	 	" *h7YYq\B1--55e<MM!D)*
 bffa+bggq"''1-bggq"''1-bffa+bffa+bffaE2bffaE2bffaE2bffaE2biiBIIq1bjj!RZZ3bjj!RWWa0biiBFFA.biiBFFA.biiBIIq%8biiBIIq%8+* *s   A/L33L=c                4   t         | |       ||             t         | |d       ||d             t         | |d       ||d             t         | |d       ||d             t         | |d       ||d             t         | |d       ||d             t         | |d       ||d             t         | |dd	       ||dd	             t         | |dd	       ||dd	             t         | |d
       ||d
             t         | |d       | |d            sJ t         | |d       | |d            sJ t         | |d
       | |d
            sJ |ryt        j                  |      rt	        j
                  t              n	t               5  t         | |d       ||d             t         | |d       ||d             d d d        |r | |d      } | |ddd      }t        ||      sJ t        | ||             t        | ||             t         | |dd       ||d             t         | |dd       ||d             t         | |dd       ||d             t         | |ddd       ||dd	             t         | |ddd       ||dd	             t         | |dd       ||d             t         | |ddd       ||dd	             y y # 1 sw Y   )xY w)NTr`   r(   ra   r   r   r   r)   r   r   r   rb   rc   rd   r   re   r   r   r   rg   r)   rf   )r)   r   rf   rh   rm   s           r%   reduction_2d_testr      s   gdmWT]+gdT*GD4,HIgd$gd&<=gd#WT%:;gd#WT%:;gd$gd&<=gd$gd&<=1t,gdT.R 2-wt"t/T gd('$V*DEWT+WT-CDDDWT*GDq,ABBBWT/F1KLLL-/__T-BV\\.) 	Lgd$/T1JKgd$/T1JK	L Tq)T1|4R   "gdm$"gdm$D4Q7D4(	
 	'$RQ7B9OP'$QA618MNDrDa@DrD1	
 	Dq4Q?Dq40	
 	'$QA618MNDq4Q?Dq40	
+ 		L 	Ls   -9LLc                 2   t        j                  dd      } t        j                  t              5  | j                  d       d d d        t        j                  t              5  | j                  d       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nru   ru   r   r   rI   r   ra   )r.   r*   rj   raises
ValueErrorr   r8   s    r%   test_reduction_errorsr      ss    
v&A	z	" 	1	z	" 	2   s   B%BB
Bc                   t        j                         5  t        j                  dt               t        j                  dd      dt        j                  dd      z  z   j                  d      j                  |       }d d d        t        j                  d      }|j                  d	      }|j                         |j                  d
d
fggk(  sJ t        t        j                  |t        j                  |       t        t        j                  |t        j                  |       t        t        j                  |t        j                  |d       t        t        j                   |t        j                   |d       t        t        j"                  |t        j"                  |d       t        t        j$                  |t        j$                  |d       t        t        j&                  |t        j&                  |d       t        t        j(                  |t        j(                  |d       t        t        j*                  |t        j*                  |       t        t        j,                  |t        j                  |       t        t        j.                  |t        j.                  |d       t        t        j0                  |t        j0                  |d       t        t        j2                  |t        j2                  |d       t        t        j4                  |t        j4                  |d       t        j                         5  t        j                  dt6               t        t        j8                  |t        j8                  |       t        t        j:                  |t        j:                  |       d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Nrt   r   z   rv      r   r   r   rI   Tr`   r   F)rx   ry   rz   r   r   r{   reshaper|   r.   rL   r   __dask_keys__namer   rN   rO   rP   rQ   rR   rS   rT   rU   rW   rX   rY   rZ   r[   RuntimeWarningrM   rV   )r   r8   r]   bs       r%   test_reductions_2Dr      sh    
	 	 	" Yh7YYq#bii3&7!77@@JQQRWXY 	a'A	tA??1661a.!1 2222bffa+bggq"''1-bffaE2bffaE2bffaE2bffaE2bffaE2bffaE2biiBIIq1bjj!RWWa0biiBIIq%8biiBIIq%8biiBIIq%8biiBIIq%8 
	 	 	" 8h7"''1bggq1"**aQ78 85Y Y48 8s   A)N5=A/O5N?Odfuncfuncc                    t         j                  j                         j                  d      }t        j                  |d      t                 ||             t          d       ||d             t          d       ||d             t          d       ||d             t        j                  d      5  t                 ||             t          d       ||d             t          d       ||d             t          d       ||d             d d d        t          d	       ||d	             t        j                  t         fd
       t        j                  t         fd       t         j                  d      }t        j                  |d      }t          |       ||             t          |d       ||d             t          |dd       ||d             t         j                  d      }t        j                  |      }t          |       ||             y # 1 sw Y   xY w)N
   r   r   r   r   ru   rI   r   r   r   re   Tr`   c                       d      S )Nr   r(   r]   r   s   r%   <lambda>z%test_arg_reductions.<locals>.<lambda>
  s    eAqk r'   c                       d      S )Nr   r(   r   s   r%   r   z%test_arg_reductions.<locals>.<lambda>  s    U1f%5 r'   r   r   )r   r+   r,   r.   rL   r	   configsetrj   r   r   	TypeErrorr{   array)r   r   r8   x2rp   x3a3r]   s   `      @r%   test_arg_reductionsr      s    			&&|4A
a	*AeAhQ eAqk41:&eAqk41:&eAqk41:&		" +%(DG$%1+tAqz*%1+tAqz*%1+tAqz*	+
 eA%tA'=>
MM*12
MM)56	2B	r!	$BeBib"eBlDQK(eBq)4A;7	!B	r	BeBib"%+ +s   A'IIc                p   t         j                  j                         j                  d      }t         j                  |d<   t	        j
                  |d      }t        j                         5  t        j                  dt                ||d      }d d d        t         | |d             y # 1 sw Y   xY w)Nr   ru   r   rI   rt   r   )r   r+   r,   r   r.   rL   rx   ry   rz   r   r	   )r   r   r8   r]   rE   s        r%   test_nan_reduction_warningsr     s     			&&|4A66AaD
a	*A		 	 	" h71: eAqk8$ s   ,$B,,B5c                   t         j                  j                         j                  d      }t         j                  |d<   t	        j
                  |d      }t         | |       ||             t         | |d       ||d             t        j                         5  t        j                  dt               t        j                  t              5   | |d      j                          d d d        t        j                  t              5   | |d      j                          d d d        t         j                  |d d  t	        j
                  |d      }t        j                  t              5   | |      j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)	Nr   ru   r   rI   r   rt   r   r   )r   r+   r,   r   r.   rL   r	   rx   ry   rz   r   rj   r   r   compute)r   r   r8   r]   s       r%   test_nanarg_reductionsr   %  sT    			&&|4A66AaD
a	*AeAhQ eAqk41:&		 	 	" h7]]:& 	"!QK!	" ]]:& 	"!QK!	" vv!MM!I.]]:& 	!H	 	" 	"	" 	"
	 	 sU   4F:F*!F:F"#AF:.F.F:F	F:"F+	'F:.F7	3F::Gc                   t         j                  d      }t        j                  |d      }t	         | ||dk            |||dk                  t         j                  d      }t        j                  |d      }t	         | |       ||             t         j                  g dg dg      }t        j                  |d      }t	         | ||dk\            |||dk\                  t        j                  d      }t        j                  t              5   | ||dk           j                          d d d        y # 1 sw Y   y xY w)	Nr   r   rI   r   ))ru   r   ru   )r   r   r   r   )r   r   r   r   r   )
r   r{   r.   rL   r	   r   rj   r   r   r   )	r   r   x1ro   r   rp   r   r   a4s	            r%   test_min_max_empty_chunksr   <  s   	2B	r!	$BeBrAvJbaj!12	2B	r,	/BeBib"	<.	/B	r!	$BeBrQwK $r"'{"34	2B	
 $ 	baj!!#$ $ $s   D??Eargmax	nanargmaxc                    t        j                  dd      }||dkD     }t        j                  t              5 } t        t         |       |       d d d        dt        j                        v sJ y # 1 sw Y   #xY w)Nr   ru   rI   r   zunknown chunksize)r.   r{   rj   r   r   getattrstrvalue)r   r8   infos      r%   %test_arg_reductions_unknown_chunksizer   Q  sk    
		"QA	!a%A	z	" dD! #djj/111 s   A22A;c                0   t        j                  dd      }||dd d f   dkD  d d f   }t        j                  t              5   t        t         |       |d       d d d         t        t         |       |d      j                          y # 1 sw Y   0xY w)Nr   r   r   rI   r   ra   r   )r.   r*   rj   r   r   r   r   r   r8   s     r%   (test_arg_reductions_unknown_chunksize_2dr   \  s~    
(A	!AqD'A+q.A	z	" %D!!$% GBaa ((*% %s   BBc                    t        j                  dd      }||dd d f   dkD  d d f   } t        t         |       |d      j                           t        t         |       |d      j                          y )Nr   rI   r   ra   r   )r.   r*   r   r   r   s     r%   ,test_arg_reductions_unknown_single_chunksizer   g  sd    
*A	!AqD'A+q.AGBaa ((*GBaa ((*r'   c            	        t         j                  dt         j                        } t         j                  ddgddgg      | d dd df<   d| d<   d| d	<   t	        j
                  | d
      }t        t        j                  |t         j                  | dd       t        t        j                  |t         j                  | dd       t        t        j                  |t         j                  | dd       t        t        j                  |t         j                  | dd       t        t        j                  |t         j                  | dd       t        t        j                  |t         j                  | dd       t        t        j                  |t         j                  | dd       t        t        j                  |t         j                  | dd       t        t        j                  |t         j                  | dd       t        t        j                   |t         j                   | dd       t        t        j"                  |t         j"                  | dd       t%        j&                         5  t%        j(                  dt*               t        t        j,                  |t         j,                  | dd       t        t        j.                  |t         j.                  | dd       t        t        j0                  |t         j0                  | dd       t        t        j2                  |t         j2                  | dd       t        t        j4                  |t         j4                  | dd       t7        t	        j8                  |      t         j9                  |              t7        t	        j:                  |      t         j;                  |              t7        t	        j<                  |      t         j=                  |              t7        t	        j>                  |      t         j?                  |              t7        t	        j8                  |d      t         j9                  | d             t7        t	        j:                  |d      t         j;                  | d             t7        t	        j<                  |d      t         j=                  | d             t7        t	        j>                  |d      t         j?                  | d             t7        t	        j8                  |d      t         j9                  | d             t7        t	        j:                  |d      t         j;                  | d             t7        t	        j<                  |d      t         j=                  | d             t7        t	        j>                  |d      t         j?                  | d             d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   ru   r   r      r   rI   Frt   r   ra   ) r   fullr   r   r.   rL   r   r   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rx   ry   rz   r   rW   rX   rY   rZ   r[   r	   r   argminr   	nanargminr\   s     r%   test_reductions_2D_nansr   p  s   
A1a&1a&)*Abqb"1"fIAdGAdG
a'AbffaE59bggq"''1eU;bggq"''1eU;bffaE59bffaE59bffaE59bffaE59bffaE59bffaE59biiBIIq%?bjj!RZZE5A		 	 	" Dh7"**aQuE"))Q		1eUC"))Q		1eUC"))Q		1eUC"))Q		1eUC"))A,		!-"))A,		!-",,q/2<<?3",,q/2<<?3"))AA&		!!	(<="))AA&		!!	(<=",,qq)2<<<+BC",,qq)2<<<+BC"))AA&		!!	(<="))AA&		!!	(<=",,qq)2<<<+BC",,qq)2<<<+BC+D D Ds   "M/WW#c                 p   dd} t         j                  g ddz        j                  d      dz   }t        j                  |d      }t        |j                  d       | |d             t        |j                  d	       | |d	             t        |j                  d
       | |d
             t         j                  dd      j                  d      j                  d      }t        j                  |d      }t        |j                  d
d       | |d
d             t        |j                  d
d       | |d
d             t        |j                  d
d
       | |d
             t        |j                  d
dd
       | |d
d             t        |j                  d
dd
       | |d
d             y )Nc                    | | j                  |d      z
  |z  j                  |      t        j                  |       j                  |      z  S )NTr   ra   )rN   r   r   	ones_like)r8   r$   r)   s      r%   momentztest_moment.<locals>.moment  sS    QVVV55!;@@ A 
LLOT*+ 	+r'   )      ?g       @g      @r   )r   r   g    חAru   rI   r   r   r   r   r   r   rb   r   ra   r   )orderrf   r   )r   r)   rf   N)	r   r   r   r.   rL   r	   r   r{   r|   )r   r8   r]   s      r%   test_momentr     s]   + 	2%&..w7#=A
a"Aahhqk6!Q<(ahhqk6!Q<(ahhqk6!Q<(
		!S!!(+2248A
a'Aahhqqh!6!QQ#78ahhqvh&q!&(AB ahhQAh.q!=ahhQQAh6q!!8LMahhQQAh6q!!8LMr'   c                    t         j                  j                         j                  d      } t        j                  | d      }t        |j                  d      | j                  d             t        |j                  dd      | j                  d             t        |j                  d      | j                  d             t        |j                  d      | j                  d             y )N)r   r   r   r   rI   r   ra   r   )r   r   )r   r+   r,   r.   rL   r	   r   r   r\   s     r%   "test_reductions_with_negative_axesr     s    
		&&y1A
a"AahhBhr!23ahhBAh.b0ABaeeenaeeen-aeee!155g5#67r'   c                    t         j                  dt         j                  ddgdddt         j                  gg dg      } t        j                  | d	      }t        t         j                  |       t        j                  |             t        t         j                  | d
      t        j                  |d
             t        t         j                  | d      t        j                  |d             t        t         j                  | d      t        j                  |d             t        t         j                  | d      t        j                  |d             t        t         j                  |       t        j                  |             t        t         j                  | d
      t        j                  |d
             t        t         j                  | d
      t        j                  |d
             t        t         j                  | d
      t        j                  |d
             t        t         j                  |       t        j                  |             y )Nr   r   r   ru   r      	   r   r      r   rI   r   ra   r   )r   r   r   r.   rL   r	   rU   rW   rZ   r[   rX   rY   r   r   rV   )r8   r;   s     r%   test_nanr     s}   
1bffa#aArvv%6HIA
a'AbiilBIIaL)biii"BIIaa$89bjjj#RZZ%:;biii"BIIaa$89biii'16)BCbiilBIIaL)biii"BIIaa$89bll11l%r||AA'>?bll11l%r||AA'>?bjjmRZZ]+r'   )rU   r   rZ   rQ   r[   rR   c           
        t        j                         5  t        j                  dk(  r| dv rt        j                  dt
               t        j                  dt        j                  ddgddd	t        j                  gg d
g      j                  t              }t        j                  |d      }| dv rt        j                  dt
               t         t        t        |       |d       t        t        |       |d             | dv rt        j                  dt
               | dv rt        j                  dt
               t         t        t        |       |d       t        t        |       |d             t        j                  dk7  r| dv rt        j                  dt
               t         t        t        |       |d       t        t        |       |d             t        t        j                   t        t        |       |            j                  t               t        t        |       |             d d d        y # 1 sw Y   y xY w)Nnt>   rR   rQ   rt   r   r   r   ru   r   r   r   r   rI   >   r[   rZ   r(   ra   defaultr   )rx   ry   osr   rz   r   r   r   r   r|   objectr.   rL   r	   r   )r   r8   r;   s      r%   test_nan_objectr     s   		 	 	" W77d?t~5 !!(N;HHq"&&!Q'!Q266):OLMTT
 MM!F+''!!(N;#'"d#AB/1BT1B121NO''!!)^<>!!!(N;#'"d#AA.0AD0A!!0LM77d?t~5!!)^<#'"d#AA.0AD0A!!0LM"((,72t,Q/077?ARTARSTAUV7W W Ws   H'IIc                 `   t        j                  t        j                  dd      d      j                         } t        j                  t        j                  dd      d      j                         } t        j                  t        j                  d            }t        |       t        |      k(  sJ t        j                  t        j                  dd            j                         } t        j                  t        j                  d            }t        |       t        |      k(  sJ y )Nr   rI   r(   ra   r   r   )r.   rN   r*   r   r   typer   zeros)r8   r9   s     r%   test_0d_arrayr     s    
!$2.668A
!$1-557A

A7d1g
rxx!$%--/A
rxx{A7d1gr'   c                     t        j                  t        j                  d      d      } | | k(  j	                         sJ y )Nr   r(   rI   )r.   rL   r   r   rT   r   s    r%   test_reduction_on_scalarr     s,    
bhhsmB/AF<<>>r'   c                    t        j                  dd      } | j                         }t        j                  dd      }|j                         }| |f||ffD ]  \  }}t        j                         5  t        j
                  dt               t        |j                         |j                                t        |j                  d      |j                  d             t        |j                  d      |j                  d             t        |j                  d	      |j                  d	             t        |j                  d
      |j                  d
             d d d         y # 1 sw Y   $xY w)N)r   r   ru   r   rI   )r   r   r   rt   r(   ra   r   r   r   )	r.   r*   r   rx   ry   rz   r   r	   rN   )dx1r   dx2r   dxr8   s         r%    test_reductions_with_empty_arrayr      s   
''*Q
'C	B
'')A
&C	B)c2Y' 7A$$& 	7!!(N;bggi*bgg2g&B8bgg1goqvv1v~6bgg1goqvv1v~6bgg1goqvv1v~6	7 	77	7 	7s   2C3E11E;	c                    t        | j                        \  }}|r-t        t        t        |j                                     |k(  sJ y t        t        t        |j                                     |k  sJ y r   )r   daskrR   maplenvalues)r8   r$   eqdependencies
dependentss        r%   assert_max_depsr     s^    '/L*	3sL//123q8883sL//123q888r'   c                    t        j                  t        j                  d      j	                  d      d      } ddd}t        | j                  |      d	       t        | j                  d
|      d       t        | j                  d|      d       t        | j                  d|      d       t        | j                  d      dd       t        | j                  d
d      d       t        | j                  dd      d       t        | j                  dd      d	       t        j                  t        j                  d      j	                  d      d      } dddd}t        | j                  |      d       t        | j                  d
|      d       t        | j                  d|      d       t        | j                  d|      d       t        | j                  d|      d       t        | j                  d|      d	       t        | j                  d|      d       t        | j                  d|      d       t        | j                  d      dd       t        | j                  d
d      d       t        | j                  dd      d       t        | j                  dd      d	       t        | j                  dd      d	       t        | j                  dd      dd       t        | j                  dd      dd       t        | j                  dd      dd       t        | j                  dd      d       t        | j                  dd      d       t        | j                  dd      d       y )N   r      r   r   rI   r   r   r   re   r   r(   r   r   r      Fr   ij  )r   r      r   r   r   r      )r   r      )r   r   r   (   $   )r.   rL   r   r{   r   r   r   )r8   threshs     r%   test_tree_reduce_depthr     s   
biin,,X6vFAq\FAEEfE-u5AEErvE6:AEEqfE5q9AEEqfE5q9AEEbE)2u5AEErrE2A6AEEqbE115AEEqbE115 	bii-55lCIVAqQFAEEfE-y9AEErvE6:AEEqfE5q9AEEqfE5q9AEEqfE5q9AEEv6E:EBAEEv6E:EBAEEv6E:EBAEEbE)2u5AEErrE2A6AEEqbE115AEEqbE115AEEqbE115AEEv2E6EBAEEv2E6EBAEEv2E6EBAEEv2E6>AEEv2E6>AEEv2E6>r'   c                 v   t        j                  t        j                  d      j	                  d      d      } t        j                  ddd      5  t        | j                         d	       t        | j                  d
      d       t        | j                  d      d       d d d        y # 1 sw Y   y xY w)Nr   r   r   rI   r   r   r   re   r   r(   ra   r   r   )	r.   rL   r   r{   r   r   r   r   r   r   s    r%   test_tree_reduce_set_optionsr  =  s    
biin,,X6vFA	A!	- *'2*1q)* * *s   AB//B8c                 L   t        j                  dd      } | j                         j                  j	                  d      sJ d| j                         j                  j                  d      d   v sJ | j                         j                  j	                  d      sJ | j                         j                  j	                  d	      sJ t        d
 t        j                  |       j                  D              sJ | j                         j                  j	                  d      sJ y )Nru   rw   rI   r   rR   -r   rO   rT   c              3  D   K   | ]  }|d    j                  d        yw)r   rU   N)
startswith).0ks     r%   	<genexpr>z'test_reduction_names.<locals>.<genexpr>K  s     DQqtx(Ds    rN   )r.   r*   r   r   r  rR   splitrO   rT   rS   rU   r   rN   r   s    r%   test_reduction_namesr
  E  s    
$A557<<""5)))AEEGLL&&s+A....557<<""5)))557<<""5)))D"))A,2C2CDDDD668==##F+++r'   c                 n   t         } t        j                  t        j                  d| d      t        j
                  t        j
                  | d      }t        t        |j                  D cg c]  }|d   j                  dd       c}       \  }}t        |      h d	k(  sJ t        |      sJ y c c}w )
Nr   r   rI   foo)r   r   r   r  r   >   foo-partialfoo-aggregater  r   )intr.   	reductionr*   r   r   r7   r   r   rsplitr   rT   )r   r]   keynamestokenss        r%   test_general_reduction_namesr  O  s    E

E!$bffbffE	A &Os1v}}S!'<&OPQME6u:MMMMv;; 'Ps   +B2c                    t        j                  dd      }t        j                  dd      } | |d|       t        | | t        j                  d      d             y )	Nr   ru   rI   r   r   r   r)   outra   )r.   r{   r*   r	   r   )r   r8   r9   s      r%   test_array_reduction_outr  Y  sH    
		"T"A
(Aabggh'a01r'   )cumsumcumprod	nancumsum
nancumproduse_nanr)   )Nr   r   r   method
sequentialblellochc                   t        t        |       }t        t        |       }d}t        j                  t        j	                  |      t
              j                  |      }|rt        j                  |d<   t        j                  |d      }| dv rD|dk(  r?|=t        j                  t              5   ||||      j                          	 d d d        y  |||	      }	 ||||      }
t        |	|
       y # 1 sw Y   +xY w)
N)r   r   r   rc   r   )r   ru   r   rI   )r  r  r"  r)   r   ra   )r   r   r.   r{   rM   floatr   r   rL   rj   rk   r   r   r	   )r   r  r)   r   rC   rA   sr]   r;   a_rd_rs              r%   test_array_cumreduction_axisr)  a  s    
 b$Gb$GA
		"''!*E	*2215Avv!
a	*A((Vz-Adl\\.) 	AD088:	 	 !$
C
!$v
.Cc3	 	s   0C66C?c                    t        j                  dd      } | |d|       t        | | t        j                  d      d             y )Nr   r   rI   r   r  ra   )r.   r*   r	   r   r   s     r%   test_array_cumreduction_outr+  y  s8    
(Aabggh'a01r'   znpfunc,daskfuncrf   )Nr   r   r   c           	        d}t         j                  j                         }|j                  d      }|j                  d      }t        j                  |d      }t        j                  |d      }t         | |      | d  d d d    ||||             t         | |      d |  ||| |             t         | |d	
      | d d d d d f   d d dd d d d f    |||d	|             t         | |d
      d d | d d d f   d d d d dd d f    |||d|             t         | |d
      d d d d | d f   d d d d d d df    |||d|             t        j                  t              5   |||d|       d d d        t         | |d	
      d |d d d d f    ||| d	|             t         | |d
      d d d |d d f    ||| d|             t         | |d
      d d d d d |f    ||| d|             t        j                  t              5   ||| d|       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nru   i   r   r      ))x   P   d      i,  rI   r   r   r   r   re   r   ra   r   r   r   )	r   r+   r,   r.   rL   r	   rj   r   r   )	npfuncdaskfuncrf   r  rngnpanpbr]   r   s	            r%   test_topk_argtopk1r9    sc    	
A ))


!C
**S/C
**\
"C
c"=>A
c),A fSk1"#tt$hq!&MNfSk"1oxA2;GH
 sQBCAI&ttQz2AA;7 sArsAI&q$B$z2AA;7 sQA23Y'1dd
3ABK8 
z	" 8AA;78 sBQB1H%xA2A;'W sArr1H%xA2A;'W sQ2A2X&QBR[9 
z	" 9QBQK89 98 89 9s   6H<%I<II)Nr   r   r   	chunksize)r   r   r   r   ru   r   c                   t         j                  j                         j                  d      }t        j                  ||      }d}t         | |      | d ddd    ||||             t         | |      d|  ||| |             y)z4Fine test use cases when k is larger than chunk sizer   rI   ru   Nr   re   )r   r+   r,   r.   rL   r	   )r4  r5  rf   r:  r7  r]   r  s          r%   test_topk_argtopk2r=    s     ))


!
(
(
/C
c),A	A fSk1"#tt$hq!&MNfSk"1oxA2;GHr'   c            	     6   t         j                  j                         j                  dd      } t        | j	                  ddd      t        j                  | ddd             t        | j                  ddd      t        j
                  | ddd             y )Nr-  r3  rI   ru   r   r   r   )r.   r+   r,   r	   topkargtopk)r]   s    r%   test_topk_argtopk3rA    s{    
		&&|I&FA affQQAf.11RS0TU			!!	+RZZ11RS-Tr'   c                   | t         j                  t         j                  hv rd|i}ni }t        j                  dd      } | |fi |j                   | |dz   fi |j                  k7  sJ  | |fddi|j                   | |fi |j                  k7  sJ  | |fddi|j                   | |fddi|j                  k7  sJ | t         j                  t         j                  t         j
                  t         j                  hvrU | |d	      j                   | |      j                  k7  sJ  | |d	      j                   | |d	      j                  k7  sJ y y )
Nr   )ru   r   r   rI   r   r)   r   r(   ra   )r.   r  r  r*   r   r   r   )r   r   r#   r]   s       r%   test_regres_3940rC    sF    		2::&&F#
v&AV!!T!a%%:6%:%?%????$$V$))T!->v->-C-CCCC$$V$))T!-F!-Fv-F-K-KKKKBIIrzz299bii@@AB$$Q444AB$$QQ(<(<<<< Ar'   c                 J   d } t         j                  d      j                  d      }t        j                  |d      } | ||        | ||d        | ||d        | ||d       t         j                  d      j                  d      }t        j                  |d	      } | ||        | ||d        | ||d        | ||d        | ||ddd        | ||ddd	        | ||ddd	t
                | ||ddd	t                | ||ddd	t
        
        | ||ddd	t        
       y )Nc                Z    t         | j                  |i | |j                  |i |      S r   )r	   trace)r]   r   argsr#   s       r%   _assertztest_trace.<locals>._assert  s/    $1&17177D3KF3KLLr'   r   r   r   r   r   r   )r   r   r   r   )offsetaxis1axis2r   )r   r{   r   r.   rL   r  r%  )rH  r   r]   s      r%   
test_tracerL    s   M 			"f%A
aAAqMAq!Aq!Aq"
		!Y'A
aAAqMAq!Aq!Aq"Aq!QAq!QAq!Q3Aq!Q5!Aq!1C8Aq!1E:r'   median	nanmedianr   r   c                    t         j                  d      j                  d      }t        j                  |d      }t         t        t        |      || |       t        t         |      || |             y )Nr1  r   ru   r   r   rI   r   )r   r{   r   r.   rL   r	   r   )r)   r   r   r8   r;   s        r%   test_medianrQ    s^     			#z*A
a"AD!$:D!$:r'   r   c                V   t         j                  d      j                  d      }t        j                  |d      } t        t        |      ||       } t        t         |      ||       }t        ||       dt        t        |j                                     v }| dk(  r|sJ y |rJ y )Nr1  rP  )r   r   r   rI   ra   rechunkr   )
r   r{   r   r.   rL   r   r	   r   dict__dask_graph__)r)   r   r8   r;   rF   rE   does_rechunks          r%   7test_median_does_not_rechunk_if_whole_axis_in_one_chunkrW  
  s     			#z*A
a
+AWRqt,F wr4 .HfhD)>)>)@$A BBLqy|<r'   )r   rN   rM   c                    t        j                  d      j                  t              } t	        ||              j                         }|dk(  sJ y r@   )r.   r*   r|   r   r   r   )r   r"   results      r%   test_object_reductionrZ    s@    
''!*

F
#C!WS&!#++-FQ;;r'   rZ   r[   c           	     h   t         j                  d      j                  dd      }t        j                  |d      }||dkD     }||dkD     }t         j                  |j                  D cg c]  }t        |j                                c}      }d|v sJ t        j                  t              5 } t        t        |       |       d d d        dt              v sJ |j                         }t         t        t        |       |       t        t         |                    y c c}w # 1 sw Y   bxY w)Nr   r   ru   rI   r   r   zArrays chunk sizes are unknown)r   r{   r   r.   rL   r   blocksr   r   rj   r   r   r   r   compute_chunk_sizesr	   )r   r8   r;   
block_lenserrs        r%   test_empty_chunk_nanmin_nanmaxr`  !  s     			"a#A
a"A	!a%A	!a%AQXX>3qyy{+>?J
??	z	" cD!+s3x777	Agb$"$5GB$5a$89 ? s   * D#0D((D1c                F   t         j                  d      j                  dd      }t        j                  |d      }||dkD     }||dkD     }|j                         }t        j                  t              5 } t        t         |       |       d d d        t        j                  t              5 } t        t        |       |      }|j                          d d d        t        j                        t        j                        k(  sJ y # 1 sw Y   xY w# 1 sw Y   CxY w)Nr   r   ru   rI   r   )r   r{   r   r.   rL   r]  rj   r   r   r   r   r   r   )r   r8   r;   err_nperr_das        r%   $test_empty_chunk_nanmin_nanmax_raiserd  1  s     			"a#A
a"A	!a%A	!a%A	A	z	" fD!	z	" fGBa 			 v||FLL 1111  s   6D.'DDD c                 T   t        j                  d      } | j                  t        j                  t
        j                  dt
        j                                    }t        j                  d      5 }|j                         j                          d d d        rJ y # 1 sw Y   xY w)Nxarrayr   Trecord)rj   importorskip	DataArrayr.   rL   r   r   r   rx   ry   rN   r   )xrr]   recs      r%   test_mean_func_does_not_warnrm  A  sx    			X	&B
R]]2778RVV#<=>A		 	 	- 	N7s s   2BB'rX   rY   c                8   t         j                  d      t         j                  z  }d|d<   d|d<   t        j                  |d      }t        j                  d      5 } t        t        |       |      j                          d d d        rJ y # 1 sw Y   xY w)Nr<  r   r   r   rI   Trg  )	r   r*   r   r.   rL   rx   ry   r   r   )r   r8   r;   rl  s       r%   test_nan_func_does_not_warnro  K  s     	AAaDAaD
a"A		 	 	- 'D!$$&'N7s' 's   %BBrJ   ))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   axesr   c           
     B   t        d |D              }t        j                  t        j                  |            j                  | }t        j                  ||      }t        j                  |d d d| ||j                  |j                        }t        ||dd       y )	Nc              3  F   K   | ]  }t         j                  |        y wr   r   r   )r  r&  s     r%   r  z4test_chunk_structure_independence.<locals>.<genexpr>_  s     ,"&&),s   !rI   c                    | S r   r(   r8   r)   r   s      r%   r   z3test_chunk_structure_independence.<locals>.<lambda>d      ! r'   c                    | S r   r(   ru  s      r%   r   z3test_chunk_structure_independence.<locals>.<lambda>e  rv  r'   T)r   r)   rf   r   metaF)check_chunkscheck_shape)tupler   r{   rM   r   r.   rL   r  r   _metar	   )rp  rf   rJ   shapenp_arrayr8   	reduced_xs          r%   !test_chunk_structure_independencer  W  s     ,V,,Eyy(00%8H
hv.A	##ggWW	I i5Ir'   c                    dd} dt         j                  j                  d      j                  dd      z   }t         j                  j                  |d<   t        j                  |d      }t         j                  dd	d      j                  dd      }t        j                  || t         j                  |j                  
      }t        |t         j                  |      d       t        j                  || t         j                  d|      }t        |t         j                  ||z        d       t        j                  t              5  t        j                  || t         j                  g d       d d d        t        j                  t              5  t        j                  || t         j                  d	ggg       d d d        y # 1 sw Y   VxY w# 1 sw Y   y xY w)Nc                H    |r| S || |z  } t        j                  | fd|i|S )z#`chunk` callable for (weighted) sumr   rs  )r8   weightsr   computing_metar#   s        r%   w_sumz&test_weighted_reduction.<locals>.w_sumq  s2    HGAvva/u///r'   r   <   r   r   r   )r   ru   rI   r   rc   T)rz  rb   )r   r  )r   r   r   )r  )NNF)r   r   r{   r   maskedr.   rL   linspacer  r   r   r	   rj   r   r   )r  r]   r   wr8   s        r%   test_weighted_reductionr  o  sP   0 	
BEELL$$Q++AeellAdG	q	(B
Aq!$$Q*A 	Rbhh7Aa- 	RdA>AaAD1 
z	" ;
R	:; 
z	" 9
R1#89 9	; ;9 9s   	*G+GGGc                     t        j                  d      } t        j                  |       }dt        t	        |j                                     v}|sJ y )Nr  rS  )r.   r*   r  r   rT  rU  )r8   r9   
no_rechunks      r%   (test_cumreduction_no_rechunk_on_1d_arrayr    sA    
A
		!A#d1+;+;+=&>"??J:r'   r   q      ?g?rS  c           	     
   d}t        j                  j                  | }t         j                  j                  dd|      }t         j                  ||dk\  <   d|d d d d d d df<   d|dd d d d d d f<   t        j                  |ddd	| rd
ndf      }t        t        j                  |||      t         j                  |||             t        t        j                  |||d      t         j                  |||d             t        t        j                  ||dz  |      t         j                  ||dz  |             t        t        j                  ||dz  |d      t         j                  ||dz  |d             y )N)r   r   r   r   r   r   r   r   r   r   r   r   ru   r   rI   ra   Tr   r1  
r   r+   randnrandintr   r.   rL   r	   nanquantilenanpercentilerS  r  r)   r}  r"   indexerrB   s          r%   test_nanquantiler    sQ    E
))//5
!Cii2E2GC1C1a
OC1a
O==aAW"%FGDbnnT140"..ad.2ST
tQTD9
sAD48 
q3wT2
a#gD1 
q3wTDA
a#gD4@r'   c           	        d}t        j                  j                  | }t         j                  j                  dd|      }t         j                  ||dk\  <   t        j                  |ddd| rd	nd
f      }t        t        j                  |||      t         j                  |||             t        t        j                  |||d      t         j                  |||d             t        t        j                  |||      t         j                  |||             t        t        j                  |||d      t         j                  |||d             y )Nr      r   r  r   r   r   r   r   r   r   ru   r   rI   ra   Tr   )
r   r+   r  r  r   r.   rL   r	   quantile
percentiler  s          r%   test_quantiler    s    E
))//5
!Cii2E2GC1==aAW"%FGDbkk$-r{{3{/MN
D!$6
C5 bmmD!$/sAD1QR
dAD48
c14$7r'   c                    t        j                  dd      }t        j                  t        d      5   | |dd        d d d        t        j
                  g d      }t         | |d	d       d
       y # 1 sw Y   6xY w)Nr   r   rI   z1The full algorithm is difficult to do in parallel)matchg      ?ra   )r   r   r   g        g      )r.   r*   rj   r   NotImplementedErrorrL   r	   )r   rB   s     r%   (test_quantile_func_family_with_axis_noner    sl     776&)D	#V
 # 	T3T"# ==$Dd44($/# #s   A44A=c            	        d} t        j                  j                  |  }t         j                  |d d  t	        j
                  |d      }t	        j                  |dd      j                          t        j                  t              5  t        t	        j                  |dd      t         j                  |dd             t        t	        j                  |dd      t         j                  |dd             d d d        y # 1 sw Y   y xY w)Nr  r   r   r   r   rI   r  r   ra   )r   r+   r  r   r.   rL   r  r   rj   r   r   r	   r  )r}  r"   rB   s      r%   test_nanquantile_all_nanr    s    E
))//5
!CVVCF==]3DNN4B'//1	~	& YNN4B/TPR1S	
 	"--d4bmmCTVm6WX	Y Y Ys   A1DDc            	        d} t        j                  j                  |  }t         j                  j                  dd|       }t         j                  ||dk\  <   t        j                  |d      }t        t        j                  |dd	d
      t         j                  |dd	d
             t        t        j                  |dd	d
      t         j                  |dd	d
             y )Nr  r   r   r   r   r  rI   r  r   weibullr$  r  )r}  r"   r  rB   s       r%   test_nanquantile_methodr    s    E
))//5
!Cii2E2GC1==]3D
tT9=
sDr)< 
t"Y?
dI>r'   c                     t         j                  j                  d      } t        j                  | d      }t        t        j                  |dd      t         j                  | dd             y )Nr   rw   rI   r  r   ra   )r   r+   r  r.   rL   r	   r  r"   rB   s     r%   test_nanquantile_one_dimr    sK    
))//"
C==T*DbnnT4b12>>#tRT>3UVr'   c                 R   t         j                  j                  dd      } t        j                  | d      }t        t        j                  |dd      t         j                  | dd             t        t        j                  |dd      t         j                  | dd             y )Nr   )r   r   rI   r  r   ra   )r   r+   r  r.   rL   r	   r  r  r  s     r%   test_nanquantile_two_dimsr    s|    
))//"b
!C==W-DbnnT4b12>>#tRT>3UV
t"-r/?/?TPR/?/Sr'   )TT)T)e
__future__r   r   rx   
contextlibr   rl   r4   r   r   rj   ri  r   
dask.arrayr   r.   dask.configr   dask.array.numpy_compatr   dask.array.utilsr	   r
   	dask.corer   markparametrizer>   rG   r^   rq   r}   r   r   slowr   r   r   r   r   r   rZ   r[   r   r   rQ   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r   r  r)  r  r  r+  sortr?  argsortr@  r9  r=  rA  rU   rC  rL  rQ  rW  rZ  r`  rd  rm  ro  r7   r  r  r  r  r  r  r  r  r  r  r  r  r  r(   r'   r%   <module>r     s   " 	  3 / V!    2 1  4,/dE]3u.% / 4 0%P2.
2 "459 6921
h "458 6 8B f	BII	BII	r||$	r||$	##: fBII.BII0FG%% fr||4r||R\\6RS( '6*bffbff-=?O,PQ$ R$( (K!892 :2 (K!89+ :+ (K!89+ :+*DZN08,  !TUW VW>
7 9"?J*, "&&"))!452 62 !QRUDM2!12L*#=> ? 3 3 S( "))RZZ!892 :2 "''*RZZ,DE 809 909f "''*RZZ,DE 8&9:	I ; 9
	I 
YY

BIIryy"&&"&&"))RYYW L*#=>= ?	
=;2 (K!89!aVQ!34dE]3 4 5 : (K!89!aVQ0  1 :  #:; < (H!56: 7: (H!562 72 (H!56 7 45U(V#WXA/
Di+,tL4K/LLJ 0 Y
J&9D !QA0tdVdC[9:T5M2 3 ; 10 !aV-tdVn-T5M2 3 . .& "++r~~r?O?O!PQ0 R0"
Y Wr'   