
    >ie                       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mZ d dlmZmZ d dlmZ e
j                            d	d
dg          e
j                            dddg          e
j                            dddg          d                                     Zd Zd Zd_dZe
j                            d	g d          d             Z d_dZ!d Z"e
j        j#        e
j                            d	g d          d                         Z$e
j                            ddgej%        ej%        fej&        ej&        fej'        ej'        fej(        ej(        fg          d             Z)e
j                            ddgej*        ej*        fej+        ej+        fg          d             Z,e
j                            ddgej'        ej'        fej(        ej(        fg          d             Z-e
j                            ddgej.        ej.        fej/        ej/        fg          d             Z0e
j                            ddd g          d!             Z1e
j                            ddd g          d"             Z2e
j                            ddd g          d#             Z3d$ Z4d% Z5d& Z6d' Z7e
j                            dg d(          d)             Z8d* Z9d+ Z:d, Z;d`d-Z<d. Z=d/ Z>d0 Z?d1 Z@e
j                            dejA        ej&        g          d2             ZBe
j                            dg d3          e
j                            d4ddg          e
j                            d5g d6          e
j                            d7d8d9g          d:                                                 ZCe
j                            dejD        ejE        g          d;             ZFe
j                            d<ejG        ejH        fejI        ejJ        fg          e
j                            d=g d>          d?                         ZKe
j                            d<ejG        ejH        fejI        ejJ        fg          e
j                            d=g d@          e
j                            dAg dB          dC                                     ZLdD ZMe
j                            dejD        ejE        ej%        ej&        ej.        ej/        ejN        ej+        g          e
j                            d7d8d9g          dE                         ZOdF ZPe
j                            ddGdHg          e
j                            d5d d dIgdIdJg          e
j                            dddg          dK                                     ZQe
j                            ddGdHg          e
j                            d5d d dLgdIg          dM                         ZRe
j                            d7g dN          dO             ZSe
j                            ddPdQg          dR             ZTe
j                            ddPdQg          dS             ZUdT ZVe
j                            ddUdVg          dW             ZWe
j                            dX eX edY                              e
j                            d=dLdZg          e
j                            d[ eX ed\dL                     eX ed\                    z             d]                                     ZYd^ ZZdS )a    )annotationsN)nullcontext)permutationszip_longestnumpy)ComplexWarning
_numpy_122)	assert_eq	same_keys)get_depsdtypef4i4keepdimsTFnanc                (   t                               d          }|r\t           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        d	 t          |j                  D             |          D ],}t           |||||            |||||                      -at          |j                  D ]}t          j        d
 t          |j                  D             |          D ]j}t           j                                                            t#          |                    }	t           |||	||            |||	||                      kd S )N)            )sizer   c                    t          j        t           j                            t                               |           |           fi |}t          |t           j        j                  r|                    d          n|S )Nr   )npsummamasked_whereisnan
isinstanceMaskedArrayfilled)arrkwargsns      @lib/python3.11/site-packages/dask/array/tests/test_reductions.py_sumztest_numel.<locals>._sum   s]    ru))"((3--==HHHHA",Q0A"B"BI188A;;;I     )axisr   r   c                    g | ]}|S r(   r(   .0ds     r%   
<listcomp>ztest_numel.<locals>.<listcomp>1       *D*D*D1*D*D*Dr'   c                    g | ]}|S r(   r(   r+   s     r%   r.   ztest_numel.<locals>.<listcomp>8   r/   r'   )r   onesrandomdefault_rnguniformr   da
reductionsnannumelnumelr   r
   rangendim	itertoolscombinationsshufflelist)
r   r   r   xyr8   r&   lengthsubssubs
             r%   
test_numelrD      s`    		A
 I!!##++B	+BB6!a%&	J 	J 	J 	J
 #vab85999QR(%888   aa(%888QQ777  
 --  )*D*DeAFmm*D*D*DfMM 	 	CacHEBBBQS85AAA   	 --  )*D*DeAFmm*D*D*DfMM 	 	C9((**22499==DadXUCCCQTHEBBB   	 r'   c                     ||          } | |          }t          ||           t           | |          |           |j        dk    sJ d S Nr   )r
   r   )da_funcdarrnp_funcnarrexpectedactuals         r%   reduction_0d_testrM   @   s]    wt}}HWT]]FfhggdmmX&&&;!r'   c                 &   t                               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        |            d S )Nr   )r   chunks)r   int_r5   
from_arrayrM   r   prodmeanvarstdminmaxanyallnansumnanprodnanmeannanvarnanstdnanminnanmaxr?   as     r%   test_reductions_0Drd   I   s   


A
a%%%Abfa+++bgq"'1---bgq"'1---bfa+++bfa+++bfa+++bfa+++bfa+++bfa+++biBIq111bj!RZ333bj!RWa000biBFA...biBFA...biBIq111biBIq11111r'   c                t   t           | |           ||                     t           | |           ||                     t           | |d           ||d                     t           | |d           ||d                     t           | |           | |                    sJ t           | |d           | |d                    sJ |rt                              |          rt	          j        t                    nt                      5  t           | |d           ||d                     t           | |d           ||d                     t           | |d           | |d                    sJ 	 d d d            n# 1 swxY w Y   |r | |d	          } | |d
di	          }t          ||          sJ t          | ||                     t          | ||                     t           | |dd           ||d                     d S d S )NTr   r(   r)   f8r   i8r   split_everyr   r   rl   r
   r   r   iscomplexobjpytestwarnsr   does_not_warnrG   rH   rI   rJ   	use_dtyperl   a1a2s           r%   reduction_1d_testrw   `   s   ggdmmWWT]]+++wwt}}   ggdT***GGD4,H,H,HIIIggd$$$ggd&<&<&<===WWT]]GGDMM22222WWTD111774$3O3O3OPPPPP S-/__T-B-BWV\.))) 	S 	Sggd$///T1J1J1JKKKggd$///T1J1J1JKKKWWT666D8Q8Q8QRRRRRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S  
WTq)))WT1v...R     "ggdmm$$$"ggdmm$$$GD4Q777PT9U9U9U	
 	
 	
 	
 	

 
s    A5F""F&)F&)r   r   c8c                   t          j                    5  t          j        dt                     t                              d          dt                              d          z  z                       |           }t          j        |d          }d d d            n# 1 swxY w Y   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          j        |t          j        |d           t          t          j        |t          j        |d           d S )Nignore                 ?r   rO   F)warningscatch_warningssimplefilterr   r   arangeastyper5   rR   rw   r   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   )r   r?   rc   s      r%   test_reductions_1Dr   y   sR   		 	"	" * *h777YYq\\B1--55e<<M!D)))* * * * * * * * * * * * * * *
 bfa+++bgq"'1---bgq"'1---bfa+++bfa+++bfaE222bfaE222bfaE222bfaE222biBIq111bj!RZ333bj!RWa000biBFA...biBFA...biBIq%888biBIq%88888s   A<BB #B c                6   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 |rt                              |          rt	          j        t                    nt                      5  t           | |d           ||d                     t           | |d           ||d                     d d d            n# 1 swxY w Y   |rz | |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	                     d S d S )NTrf   r(   rg   r   r   r   r)   r   r   r   rh   ri   rj   r   rk   r   r   r   rm   r)   rl   )r)   r   rl   rn   rs   s           r%   reduction_2d_testr      s   ggdmmWWT]]+++ggdT***GGD4,H,H,HIIIggd$$$ggd&<&<&<===ggd###WWT%:%:%:;;;ggd###WWT%:%:%:;;;ggd$$$ggd&<&<&<===ggd$$$ggd&<&<&<===1t,,,ggdT.R.R.R   2---wwt"t/T/T/T   ggd(((''$V*D*D*DEEEWWT+++WWT-C-C-CDDDDDWWT***GGDq,A,A,ABBBBBWWT///F1K1K1KLLLLL L-/__T-B-BWV\.))) 	L 	Lggd$///T1J1J1JKKKggd$///T1J1J1JKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L  
WTq)))WT1||444R     "ggdmm$$$"ggdmm$$$GD4Q777GD4(((	
 	
 	
 	''$RQ777B9O9O9OPPP''$QA66618M8M8MNNNGDrDa@@@GDrD111	
 	
 	
 	GDq4Q???GDq4000	
 	
 	
 	''$QA66618M8M8MNNNGDq4Q???GDq4000	
 	
 	
 	
 	
+
 
s   8AJJJc                 P   t          j        dd          } t          j        t                    5  |                     d           d d d            n# 1 swxY w Y   t          j        t                    5  |                     d           d d d            d S # 1 swxY w Y   d S )Nr{   r{   r   r   rO   r   rg   )r5   r1   rp   raises
ValueErrorr   r?   s    r%   test_reduction_errorsr      s   
v&&&A	z	"	"  	1              	z	"	"  	2                 s#   AAA7BB"Bc                P   t          j                    5  t          j        dt                     t                              dd          dt                              dd          z  z                       d                              |           }d d d            n# 1 swxY w Y   t          j	        |d          }|
                    d	          }|                                |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          j        |t          j        |d           t          t          j        |t          j        |d           t          t          j        |t          j        |d           t          j                    5  t          j        dt6                     t          t          j        |t          j        |           t          t          j        |t          j        |           d d d            d S # 1 swxY w Y   d S )Nrz   r   z   r|      r   r   r   rO   Trf   r   F)r~   r   r   r   r   r   reshaper   r5   rR   r   __dask_keys__namer   rT   rU   rV   rW   rX   rY   rZ   r[   r]   r^   r_   r`   ra   RuntimeWarningrS   r\   )r   r?   rc   bs       r%   test_reductions_2Dr      sB    
	 	"	" Y Yh777YYq#bii3&7&7!77@@JJQQRWXXY Y Y Y Y Y Y Y Y Y Y Y Y Y Y 	a'''A	tA??161a.!1 22222bfa+++bgq"'1---bfaE222bfaE222bfaE222bfaE222bfaE222bfaE222biBIq111bj!RWa000biBIq%888biBIq%888biBIq%888biBIq%888 
	 	"	" 8 8h777"'1bgq111"*aQ7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s%   A;BB"B'A'NN"Ndfuncfuncc                    t           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            n# 1 swxY w Y   t          r&t            d	           ||d	                     t          j
        t           fd
           t          j
        t           fd           t                               d          }t          j        |d          }t            |           ||                     t            |d           ||d                     t            |dd           ||d                     t                               d          }t          j        |          }t            |           ||                     d S )N
   r   r   r   r   r{   rO   r   r   r   rk   Trf   c                       d          S )Nr   r(   rc   r   s   r%   <lambda>z%test_arg_reductions.<locals>.<lambda>  s    eeAqkk r'   c                       d          S )Nr   r(   r   s   r%   r   z%test_arg_reductions.<locals>.<lambda>  s    UU1f%5%5 r'   r   r   )r   r2   r3   r5   rR   r
   configsetr	   rp   r   r   	TypeErrorr   array)r   r   r?   x2rv   x3a3rc   s   `      @r%   test_arg_reductionsr      s    		&&|44A
a	***AeeAhhQ   eeAqkk441::&&&eeAqkk441::&&&eeAqkk441::&&&		"	"	" + +%%((DDGG$$$%%1++ttAqzz***%%1++ttAqzz***%%1++ttAqzz***	+ + + + + + + + + + + + + + +
  C%%D)))44D+A+A+ABBB
M*11111222
M)55555666	2B	r!	$	$	$BeeBiib"""eeBllDDQKK(((eeBq)))44A;;777	!B	r		BeeBiib"""""s   -BFFFc                   t           j                                                            d          }t           j        |d<   t	          j        |d          }t          j                    5  t          j        dt                      ||d          }d d d            n# 1 swxY w Y   t           | |d          |           d S )Nr   r{   r   rO   rz   r   )r   r2   r3   r   r5   rR   r~   r   r   r   r
   )r   r   r?   rc   rK   s        r%   test_nan_reduction_warningsr     s     		&&|44A6AaD
a	***A		 	"	"  h77741::               eeAqkk8$$$$$s   *'BB!$B!c                   t           j                                                            d          }t           j        |d<   t	          j        |d          }t           | |           ||                     t           | |d           ||d                     t          j                    5  t          j	        dt                     t          j        t                    5   | |d                                           d d d            n# 1 swxY w Y   t          j        t                    5   | |d                                           d d d            n# 1 swxY w Y   t           j        |d d <   t	          j        |d          }t          j        t                    5   | |                                           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr   r{   r   rO   r   rz   r   r   )r   r2   r3   r   r5   rR   r
   r~   r   r   r   rp   r   r   compute)r   r   r?   rc   s       r%   test_nanarg_reductionsr   &  s    		&&|44A6AaD
a	***AeeAhhQ   eeAqkk441::&&&		 	"	"  h777]:&& 	" 	"E!QKK!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" ]:&& 	" 	"E!QKK!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" v!!!M!I...]:&& 	 	E!HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s   04G+$DG+D	G+D	G+3EG+E"	"G+%E"	&AG+)GG+G	G+G	G++G/2G/c                (   t                               d          }t          j        |d          }t	           | ||dk                         |||dk                                   t                               d          }t          j        |d          }t	           | |           ||                     t                               g dg dg          }t          j        |d          }t	           | ||dk                        |||dk                                  t          j        d          }t          j        t                    5   | ||dk                        	                                 d d d            d S # 1 swxY w Y   d S )	Nr   r   rO   r   ))r{   r   r{   )r   r   r   r   )r   r   r   r   r   )
r   r   r5   rR   r
   r   rp   r   r   r   )	r   r   x1ru   r   rv   r   r   a4s	            r%   test_min_max_empty_chunksr   =  s   	2B	r!	$	$	$BeeBrAvJbaj!1!1222	2B	r,	/	/	/BeeBiib"""	<<<.	/	/B	r!	$	$	$BeeBrQwK  $$r"'{"3"3444	2B	
 
 $ $ 	baj!!###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   (FFFargmax	nanargmaxc                   t          j        dd          }||dk             }t          j        t                    5 } t          t           |           |           d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )Nr   r{   rO   r   zunknown chunksize)r5   r   rp   r   r   getattrstrvalue)r   r?   infos      r%   %test_arg_reductions_unknown_chunksizer   R  s    
	"QA	!a%A	z	"	" dD!               #dj//111111s   A''A+.A+c                l   t          j        dd          }||dd d f         dk    d d f         }t          j        t                    5   t          t           |           |d           d d d            n# 1 swxY w Y    t          t           |           |d                                           d S )Nr   r   r   rO   r   rg   r   )r5   r1   rp   r   r   r   r   r   r?   s     r%   (test_arg_reductions_unknown_chunksize_2dr   ]  s    
(((A	!AqqqD'A+qqq.A	z	"	" % %D!!$$$$% % % % % % % % % % % % % % % GBaa   ((*****s   
!A77A;>A;c                .   t          j        dd          }||dd d f         dk    d d f         } t          t           |           |d                                            t          t           |           |d                                           d S )Nr   rO   r   rg   r   )r5   r1   r   r   r   s     r%   ,test_arg_reductions_unknown_single_chunksizer   h  s    
***A	!AqqqD'A+qqq.AGBaa   ((***GBaa   ((*****r'   c            	        t                               dt           j                  } t                               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          j        |t           j        | dd           t          t          j        |t           j        | dd           t          t          j        |t           j        | dd           t7          t	          j        |          t                               |                      t7          t	          j        |          t                               |                      t7          t	          j        |          t                               |                      t7          t	          j        |          t                               |                      t7          t	          j        |d          t                               | d                     t7          t	          j        |d          t                               | d                     t7          t	          j        |d          t                               | d                     t7          t	          j        |d          t                               | d                     t7          t	          j        |d          t                               | d                     t7          t	          j        |d          t                               | d                     t7          t	          j        |d          t                               | d                     t7          t	          j        |d          t                               | d                     d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   r{   r   r      r   rO   Frz   r   rg   ) r   fullr   r   r5   rR   r   r   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r~   r   r   r   r]   r^   r_   r`   ra   r
   r   argminr   	nanargminrb   s     r%   test_reductions_2D_nansr   q  s   
A1a&1a&)**Abqb"1"fIAdGAdG
a'''AbfaE5999bgq"'1eU;;;bgq"'1eU;;;bfaE5999bfaE5999bfaE5999bfaE5999bfaE5999bfaE5999biBIq%???bj!RZE5AAA		 	"	" D Dh777"*aQuEEE")Q	1eUCCC")Q	1eUCCC")Q	1eUCCC")Q	1eUCCC")A,,		!---")A,,		!---",q//2<<??333",q//2<<??333")AA&&&		!!	(<(<===")AA&&&		!!	(<(<===",qq)))2<<<+B+BCCC",qq)))2<<<+B+BCCC")AA&&&		!!	(<(<===")AA&&&		!!	(<(<===",qq)))2<<<+B+BCCC",qq)))2<<<+B+BCCC+D D D D D D D D D D D D D D D D D Ds   :N;XX	Xc                 J   dd} t                               g ddz                                d          dz   }t          j        |d          }t          |                    d           | |d                     t          |                    d	           | |d	                     t          |                    d
           | |d
                     t                               dd                              d                              d          }t          j        |d          }t          |                    d
d           | |d
d                     t          |                    d
d           | |d
d                     t          |                    d
d
           | |d
                     t          |                    d
dd
           | |d
d                     t          |                    d
dd
           | |d
d                     d S )Nc                    | |                      |d          z
  |z                      |          t                              |                               |          z  S )NTr   rg   )rT   r   r   	ones_like)r?   r$   r)   s      r%   momentztest_moment.<locals>.moment  s`    QVVV555!;@@ A 
 
LLOOT**+ 	+r'   )      ?g       @g      @r   )r   r   g    חAr{   rO   r   r   r   r   r   r   rh   r   rg   r   )orderrl   r   )r   r)   rl   N)	r   r   r   r5   rR   r
   r   r   r   )r   r?   rc   s      r%   test_momentr     s   + + + + 	2%&&..w77#=A
a"""Aahhqkk66!Q<<(((ahhqkk66!Q<<(((ahhqkk66!Q<<(((
		!S!!(++22488A
a'''Aahhqqh!!66!QQ#7#7#7888ahhqvh&&q!&(A(A(ABBB ahhQAh..q!===ahhQQAh66q!!8L8L8LMMMahhQQAh66q!!8L8L8LMMMMMr'   c                 V   t           j                                                            d          } t          j        | d          }t          |                    d          |                     d                     t          |                    dd          |                     d                     t          |                    d          |                     d                     t          |                    d          |                     d                     d S )N)r   r   r   r   rO   r   rg   r   )r   r   )r   r2   r3   r5   rR   r
   r   r   rb   s     r%   "test_reductions_with_negative_axesr     s    
	&&y11A
a"""AahhBhr!2!2333ahhBAh..b0A0ABBBaeeennaeeenn---aeee!!155g5#6#677777r'   c                 h   t                               dt           j        ddgdddt           j        gg dg          } t          j        | d	          }t          t                               |           t          j        |                     t          t                               | d
          t          j        |d
                     t          t                               | d          t          j        |d                     t          t                               | d          t          j        |d                     t          t           	                    | d          t          j	        |d                     t          t           
                    |           t          j
        |                     t          t                               | d
          t          j        |d
                     t          t                               | d
          t          j        |d
                     t          t                               | d
          t          j        |d
                     t          t                               |           t          j        |                     d S )Nr   r   r   r{   r      	   r   r      r   rO   r   rg   r   )r   r   r   r5   rR   r
   r[   r]   r`   ra   r^   r_   r   r   r\   )r?   r-   s     r%   test_nanr     s   
1bfa#aArv%6HIIA
a'''AbiillBIaLL)))biii""BIaa$8$8$8999bjjj##RZ%:%:%:;;;biii""BIaa$8$8$8999biii''16)B)B)BCCCbiillBIaLL)))biii""BIaa$8$8$8999bll11l%%r|AA'>'>'>???bll11l%%r|AA'>'>'>???bjjmmRZ]]+++++r'   )r[   r   r`   rW   ra   rX   c           
     T   t          j                    5  t          j        dk    r| dv rt          j        dt
                     t                              dt          j        ddgddd	t          j        gg d
g          	                    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k    r| dv rt          j        dt
                     t           t          t          |           |d           t          t          |           |d                     t          t                               t          t          |           |                    	                    t                     t          t          |           |                     d d d            d S # 1 swxY w Y   d S )Nnt>   rX   rW   rz   r   r   r   r{   r   r   r   r   rO   >   ra   r`   r(   rg   defaultr   )r~   r   osr   r   r   r   r   r   r   objectr5   rR   r
   r   )r   r?   r-   s      r%   test_nan_objectr     s   		 	"	" W W7d??t~55 !(N;;;HHq"&!Q'!Q26):OOOLMMTT
 
 M!F+++'''!(N;;;#'"d##AB///1BT1B1B121N1N1NOOO'''!)^<<<>!!!(N;;;#'"d##AA...0AD0A0A!!0L0L0LMMM7d??t~55!)^<<<#'"d##AA...0AD0A0A!!0L0L0LMMM"((,72t,,Q//0077??ARTARARSTAUAUVVV7W W W W W W W W W W W W W W W W W Ws   I<JJ!$J!c                    t          j        t          j        dd          d                                          } t          j        t          j        dd          d                                          } t                              t                              d                    }t          |           t          |          k    sJ t          j        t          j        dd                                                    } t                              t                              d                    }t          |           t          |          k    sJ d S )Nr   rO   r(   rg   r   r   )r5   rT   r1   r   r   typer   zeros)r?   r@   s     r%   test_0d_arrayr     s    
!$$$2...6688A
!$$$1---5577A


A77d1gg
rx!$$$%%--//A
rxx{{A77d1ggr'   c                     t          j        t                              d          d          } | | k                                    sJ d S )Nr   r(   rO   )r5   rR   r   r   rZ   r   s    r%   test_reduction_on_scalarr     s>    
bhhsmmB///AF<<>>r'   c                    t          j        dd          } |                                 }t          j        dd          }|                                }| |f||ffD ]_\  }}t          j                    5  t          j        dt                     t          |                                |                                           t          |                    d          |                    d                     t          |                    d          |                    d                     t          |                    d	          |                    d	                     t          |                    d
          |                    d
                     d d d            n# 1 swxY w Y   ad S )N)r   r   r{   r   rO   )r   r   r   rz   r(   rg   r   r   r   )	r5   r1   r   r~   r   r   r   r
   rT   )dx1r   dx2r   dxr?   s         r%    test_reductions_with_empty_arrayr     s   
'*Q
'
'
'C	B
')A
&
&
&C	B)c2Y' 7 7A$&& 	7 	7!(N;;;bggii***bgg2g&&B888bgg1gooqvv1v~~666bgg1gooqvv1v~~666bgg1gooqvv1v~~666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	77 7s   6D/F11F5	8F5	c                $   t          | j                  \  }}|r<t          t          t          |                                                    |k    sJ d S t          t          t          |                                                    |k    sJ d S r   )r   daskrX   maplenvalues)r?   r$   eqdependencies
dependentss        r%   assert_max_depsr     s    '//L*	 93sL//112233q8888883sL//112233q888888r'   c                    t          j        t                              d                              d          d          } ddd}t          |                     |          d	           t          |                     d
|          d           t          |                     d|          d           t          |                     d|          d           t          |                     d          dd           t          |                     d
d          d           t          |                     dd          d           t          |                     dd          d	           t          j        t                              d                              d          d          } dddd}t          |                     |          d           t          |                     d
|          d           t          |                     d|          d           t          |                     d|          d           t          |                     d|          d           t          |                     d|          d	           t          |                     d|          d           t          |                     d|          d           t          |                     d          dd           t          |                     d
d          d           t          |                     dd          d           t          |                     dd          d	           t          |                     dd          d	           t          |                     dd          dd           t          |                     dd          dd           t          |                     dd          dd           t          |                     dd          d           t          |                     dd          d           t          |                     dd          d           d S )N   r      r   r   rO   r   r   r   rk   r   r(   r   r   r      Fr   ij  )r   r      r   r   r   r      )r   r      )r   r   r   (   $   )r5   rR   r   r   r   r   r   )r?   threshs     r%   test_tree_reduce_depthr    s   
biinn,,X66vFFFAq\\FAEEfE--u555AEErvE66:::AEEqfE55q999AEEqfE55q999AEEbE))2u555AEErrE22A666AEEqbE111555AEEqbE111555 	bii--55lCCIVVVAqQFAEEfE--y999AEErvE66:::AEEqfE55q999AEEqfE55q999AEEqfE55q999AEEv6E::EBBBAEEv6E::EBBBAEEv6E::EBBBAEEbE))2u555AEErrE22A666AEEqbE111555AEEqbE111555AEEqbE111555AEEv2E66EBBBAEEv2E66EBBBAEEv2E66EBBBAEEv2E66>>>AEEv2E66>>>AEEv2E66>>>>>r'   c                    t          j        t                              d                              d          d          } t          j        ddd          5  t          |                                 d	           t          |                     d
          d           t          |                     d          d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   rO   r   r   r   rk   r   r(   rg   r   r   )	r5   rR   r   r   r   r   r   r   r   r   s    r%   test_tree_reduce_set_optionsr  >  s    
biinn,,X66vFFFA	A!	-	-	- * *'''2***1q)))* * * * * * * * * * * * * * * * * *s   A+CCCc                 r   t          j        dd          } |                                 j                            d          sJ d|                                 j                            d          d         v sJ |                                 j                            d          sJ |                                 j                            d	          sJ t          d
 t          j
        |           j        D                       sJ |                                 j                            d          sJ d S )Nr{   r}   rO   r   rX   -r   rU   rZ   c              3  L   K   | ]}|d                               d          V   dS )r   r[   N)
startswith)r,   ks     r%   	<genexpr>z'test_reduction_names.<locals>.<genexpr>L  s2      DDQqtx((DDDDDDr'   rT   )r5   r1   r   r   r  rX   splitrU   rZ   rY   r[   r   rT   r   s    r%   test_reduction_namesr  F  s   
$A5577<""5)))))AEEGGL&&s++A.....5577<""5)))))5577<""5)))))DD")A,,2CDDDDDDDD6688=##F+++++++r'   c                 8   t           } t          j        t          j        d| d          t          j        t          j        | d          }t          t          d |j        D                        \  }}t          |          h dk    sJ t          |          sJ d S )Nr   r   rO   foo)r   r   c                F    g | ]}|d                               dd          S )r   r	  r   )rsplit)r,   keys     r%   r.   z0test_general_reduction_names.<locals>.<listcomp>U  s*    &O&O&Os1v}}S!'<'<&O&O&Or'   >   foo-partialfoo-aggregater  r   )intr5   	reductionr1   r   r   r>   r   r   r   rZ   )r   rc   namestokenss       r%   test_general_reduction_namesr  P  s    E

E!$$$bfbfE	 	 	A &O&O&O&O&OPQQME6u::MMMMMMMv;;r'   c                    t          j        dd          }t          j        dd          } | |d|           t          | | t                              d          d                     d S )	Nr   )r{   rO   r   r   r   r)   outrg   )r5   r   r1   r
   r   )r   r?   r@   s      r%   test_array_reduction_outr  Z  sr    
	"T"""A
(((ADabggh''a00011111r'   )cumsumcumprod	nancumsum
nancumproduse_nanr)   )Nr   r   r   method
sequentialblellochc                X   t          t          |           }t          t          |           }d}t                              t                              |          t
                                        |          }|rt          j        |d<   t          j        |d          }| dv r[|dk    rU|St          j
        t                    5   ||||                                           	 d d d            d S # 1 swxY w Y    |||	          }	 ||||          }
t          |	|
           d S )
N)r   r   r   ri   r   )r   r{   r   rO   )r!  r#  r'  )r)   r%  rg   )r   r   r5   r   rS   floatr   r   rR   rp   rq   r   r   r
   )r   r$  r)   r%  rI   rG   src   r-   a_rd_rs              r%   test_array_cumreduction_axisr-  b  sg   
 b$Gb$GA
		"''!**E	**22155A v!
a	***A(((Vz-A-Adl\.)) 	 	GAD00088:::	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 '!$


C
'!$v
.
.
.Cc3s   "C44C8;C8c                    t          j        dd          } | |d|           t          | | t                              d          d                     d S )Nr   r   rO   r   r  rg   )r5   r1   r
   r   r   s     r%   test_array_cumreduction_outr/  z  s^    
(((ADabggh''a00011111r'   znpfunc,daskfuncrl   )Nr   r   r  c           	        d}t           j                                        }|                    d          }|                    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            n# 1 swxY w Y   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            d S # 1 swxY w Y   d S )Nr{   i   r   r      ))x   P   d      i,  rO   r   r  r  r   rk   r   rg   r   r   r   )	r   r2   r3   r5   rR   r
   rp   r   r   )	npfuncdaskfuncrl   r  rngnpanpbrc   r   s	            r%   test_topk_argtopk1r=    s3    	
A )


!
!C
**S//C
**\
"
"C
c"=>>>A
c),,,A ffSkk1"##ttt$hhq!&M&M&MNNNffSkk"1"oxxA2;GGGHHH
 sQBCCAAAI&tttQQQz2AA;777   sAAArssAAAI&qqq$$B$z2AA;777   sQQQA233Y'111ddd
3ABK888   
z	"	" 8 8AA;77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 sBQB111H%xxA2A;'W'W'W   sAAArr111H%xxA2A;'W'W'W   sQQQ2A2X&QBR[999   
z	"	" 9 9QBQK88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s$   G))G-0G-5KKK)Nr   r   r   	chunksize)r   r   r   r   r{   r   c                b   t           j                                                            d          }t          j        ||          }d}t           | |          | d         ddd          ||||                     t           | |          d|          ||| |                     dS )z4Fine test use cases when k is larger than chunk sizer   rO   r{   Nr   rk   )r   r2   r3   r5   rR   r
   )r8  r9  rl   r>  r;  rc   r  s          r%   test_topk_argtopk2rA    s     )


!
!
(
(
/
/C
c),,,A	A ffSkk1"##ttt$hhq!&M&M&MNNNffSkk"1"oxxA2;GGGHHHHHr'   c            	     \   t           j                                                            dd          } t          |                     ddd          t          j        | ddd                     t          |                     ddd          t          j        | ddd                     d S )Nr1  r7  rO   r{   r   r   r   )r5   r2   r3   r
   topkargtopk)rc   s    r%   test_topk_argtopk3rE    s    
	&&|I&FFA affQQAf..11RS0T0T0TUUU			!!	++RZ11RS-T-T-T    r'   c                F   | t           j        t           j        hv rd|i}ni }t          j        dd          } | |fi |j         | |dz   fi |j        k    sJ  | |fddi|j         | |fi |j        k    sJ  | |fddi|j         | |fddi|j        k    sJ | t           j        t           j        t           j        t           j        hvrN | |d	          j         | |          j        k    sJ  | |d	          j         | |d	          j        k    sJ d S d S )
Nr%  )r{   r   r   rO   r   r)   r   r(   rg   )r5   r   r!  r1   r   r   r   )r   r%  r#   rc   s       r%   test_regres_3940rG    s    	2:&&&F#
v&&&A4V!TT!a%%:%:6%:%:%?????4$$$V$$)TT!->->v->->-CCCCC4$$$V$$)TT!-F-F!-Fv-F-F-KKKKKBIrz29bi@@@tAB$Q4444tAB$QQ(<<<<< A@<<r'   c                    d } t                               d                              d          }t          j        |d          } | ||            | ||d            | ||d            | ||d           t                               d                              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          
           d S )Nc                N    t           | j        |i | |j        |i |          S r   )r
   trace)rc   r   argsr#   s       r%   _assertztest_trace.<locals>._assert  s4    $1&11717D3KF3K3KLLLr'   r   r   r   r   r   r  )r   r   r   r   )offsetaxis1axis2r   )r   r   r   r5   rR   r  r)  )rL  r   rc   s      r%   
test_tracerP    s   M M M 			"f%%A
aAGAqMMMGAq!GAq!GAq"
		!Y''A
aAGAqMMMGAq!GAq!GAq"GAq!QGAq!QGAq!Q3GAq!Q5!!!GAq!1C8888GAq!1E::::::r'   median	nanmedianr   r   c                (   t                               d                              d          }t          j        |d          }t           t          t          |          || |           t          t           |          || |                     d S )Nr5  r   r{   r   r   rO   r   )r   r   r   r5   rR   r
   r   )r)   r   r   r?   r-   s        r%   test_medianrU    s     			#z**A
a"""AD!$:::D!$:::    r'   r   c                   t                               d                              d          }t          j        |d          } t          t          |          ||           } t          t           |          ||           }t          ||           dt          t          |	                                                    v }| dk    r|sJ d S |rJ d S )Nr5  rT  )r   r   r   rO   rg   rechunkr   )
r   r   r   r5   rR   r   r
   r   dict__dask_graph__)r)   r   r?   r-   rL   rK   does_rechunks          r%   7test_median_does_not_rechunk_if_whole_axis_in_one_chunkr[    s     			#z**A
a
+++AWRqt,,,F wr4  ...HfhD)>)>)@)@$A$A B BBLqyyr'   )r   rT   rS   c                    t          j        d                              t                    } t	          ||                                                       }|dk    sJ d S rF   )r5   r1   r   r   r   r   )r%  r"   results      r%   test_object_reductionr^    sQ    
'!**

F
#
#C!WS&!!##++--FQ;;;;;;r'   r`   ra   c                   t                               d                              dd          }t          j        |d          }||dk             }||dk             }t                               d |j        D                       }d|v sJ t          j        t                    5 } t          t          |           |           d d d            n# 1 swxY w Y   dt          |          v sJ |                                }t           t          t          |           |           t          t           |           |                     d S )	Nr   r   r{   rO   r   c                P    g | ]#}t          |                                          $S r(   )r   r   )r,   r?   s     r%   r.   z2test_empty_chunk_nanmin_nanmax.<locals>.<listcomp>)  s(    >>>3qyy{{++>>>r'   r   zArrays chunk sizes are unknown)r   r   r   r5   rR   r   blocksrp   r   r   r   r   compute_chunk_sizesr
   )r   r?   r-   
block_lenserrs        r%   test_empty_chunk_nanmin_nanmaxre  "  sd    			"a##A
a"""A	!a%A	!a%A>>QX>>>??J
????	z	"	" cD!              +s3xx7777	Agb$""$5GB$5$5a$8$899999s   %CCCc                   t                               d                              dd          }t          j        |d          }||dk             }||dk             }|                                }t          j        t                    5 } t          t           |           |           d d d            n# 1 swxY w Y   t          j        t                    5 } t          t          |           |          }|
                                 d d d            n# 1 swxY w Y   t          |j                  t          |j                  k    sJ d S )Nr   r   r{   rO   r   )r   r   r   r5   rR   rb  rp   r   r   r   r   r   r   )r   r?   r-   err_nperr_das        r%   $test_empty_chunk_nanmin_nanmax_raiseri  2  s    			"a##A
a"""A	!a%A	!a%A	A	z	"	" fD!              	z	"	" fGBa  			               v|FL 1 1111111s$   
B55B9<B93DDDc                 p   t          j        d          } |                     t          j        t
                              dt
          j                                      }t          j	        d          5 }|
                                                                 d d d            n# 1 swxY w Y   |rJ d S )Nxarrayr   Trecord)rp   importorskip	DataArrayr5   rR   r   r   r   r~   r   rT   r   )xrrc   recs      r%   test_mean_func_does_not_warnrr  B  s    		X	&	&B
R]2778RV#<#<==>>A		 	-	-	- 	              NNNNNs   4'B''B+.B+r^   r_   c                V   t                               d          t           j        z  }d|d<   d|d<   t          j        |d          }t          j        d          5 } t          t          |           |                                           d d d            n# 1 swxY w Y   |rJ d S )Nr@  r   r   r   rO   Trl  )	r   r1   r   r5   rR   r~   r   r   r   )r   r?   r-   rq  s       r%   test_nan_func_does_not_warnrt  L  s     	AAaDAaD
a"""A		 	-	-	- 'D!$$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' 'NNNNNs   1BB!BrP   ))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           
     L   t          d |D                       }t                              t                              |                    j        | }t          j        ||          }t          j        |d d d| ||j        |j	                  }t          ||dd           d S )	Nc              3  J   K   | ]}t                               |          V  d S r   r   r   )r,   r*  s     r%   r  z4test_chunk_structure_independence.<locals>.<genexpr>`  s,      ,,"&&)),,,,,,r'   rO   c                    | S r   r(   r?   r)   r   s      r%   r   z3test_chunk_structure_independence.<locals>.<lambda>e      ! r'   c                    | S r   r(   rz  s      r%   r   z3test_chunk_structure_independence.<locals>.<lambda>f  r{  r'   T)r   r)   rl   r   metaF)check_chunkscheck_shape)tupler   r   rS   r   r5   rR   r  r   _metar
   )ru  rl   rP   shapenp_arrayr?   	reduced_xs          r%   !test_chunk_structure_independencer  X  s     ,,V,,,,,Eyy((0%8H
hv...A	####gW	 	 	I i5IIIIIIr'   c                    dd} dt           j                            d                              dd          z   }t           j        j        |d<   t          j        |d	          }t                               dd
d                              dd          }t          j        || t           j	        |j
                  }t          |t           	                    |          d           t          j        || t           j	        d|          }t          |t           	                    ||z            d           t          j        t                    5  t          j        || t           j	        g d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        || t           j	        d
ggg           d d d            d S # 1 swxY w Y   d S )NFc                @    |r| S || |z  } t          j        | fd|i|S )z#`chunk` callable for (weighted) sumNr   rx  )r?   weightsr   computing_metar#   s        r%   w_sumz&test_weighted_reduction.<locals>.w_sumr  s;     	HGAva//u////r'   r   <   r   r   r   )r   r{   rO   r   ri   T)r  rh   )r   r  )r   r   r   )r  )NNF)r   r   r   r   maskedr5   rR   linspacer  r   r   r
   rp   r   r   )r  rc   r   wr?   s        r%   test_weighted_reductionr  p  s!   0 0 0 0 	
BELL$$Q+++AelAdG	q	(	(	(B
Aq!$$Q**A 	Rbh777Aa---- 	RdA>>>AaAD1111 
z	"	" ; ;
R			::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 
z	"	" 9 9
R1#88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s$   %F  FF$&GGG)TT)T)[
__future__r   r   r~   
contextlibr   rr   r;   r   r   rp   rn  r   
dask.arrayr   r5   dask.configr   dask.array.numpy_compatr   r	   dask.array.utilsr
   r   	dask.corer   markparametrizerD   rM   rd   rw   r   r   r   slowr   r   r   r   r   r   r`   ra   r   r   rW   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r  r-  r   r!  r/  sortrC  argsortrD  r=  rA  rE  r[   rG  rP  rU  r[  r^  re  ri  rr  rt  r>   r  r  r(   r'   r%   <module>r     sF
   " " " " " " 				  3 3 3 3 3 3 / / / / / / / / V!!                 > > > > > > > > 1 1 1 1 1 1 1 1       4,//dE]33u..% % /. 43 0/%P  2 2 2.
 
 
 
2 "4"4"4559 9 65921
 1
 1
 1
h   "4"4"4558 8 65 8B f	BI	BI	r|$	r|$	 # # #< fBI.BI0FG % % % fr|4r|R\6RS   ( '6*bfbf-=?O,PQQ$ $ RQ$( (K!8992 2 :92 (K!899+ + :9+ (K!899+ + :9+*D *D *DZN N N08 8 8, , ,  !T!T!TUUW W VUW>    
7 7 7 9 9 9 9"? "? "?J* * *, , ,   "&")!4552 2 652 !Q!Q!QRRUDM22!1!1!122L*#=>>  ?> 32 32 SR( ")RZ!8992 2 :92 "'*RZ,DE  8809 09 98 09f "'*RZ,DE  88&9&9&9::	I 	I ;: 98 
	I   
Y
BIry"&"&")RYW  L*#=>>= = ?>	 
=; ; ;2 (K!899!aVQ!344dE]33  43 54 :9 (K!899!aVQ00    10 :9  #:#:#:;;  <; (H!566: : 76: (H!5662 2 762   (H!566  76 445U(V(V#W#WXXA//
DDi++,,ttLL4K4K/L/LL J J  0/ YX
J&9 9 9 9 9r'   