U
    /e}                     @   s`  d dl Z d dlZd dlmZmZ d dlZe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jddd	gejd
ddgejdddgdd Zdd Zdd ZdddZejddd	gdd ZdddZdd Zejjejdd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 d! Z#ejddge
j!ej!fe
j"ej"fgd"d# Z$ejddge
j%ej%fe
j&ej&fgd$d% Z'ejdd&d'gd(d) Z(ejdd&d'gd*d+ Z)ejdd&d'gd,d- Z*d.d/ Z+d0d1 Z,d2d3 Z-d4d5 Z.ejdd6d7d8d9d:d;gd<d= Z/d>d? Z0d@dA Z1dBdC Z2ddDdEZ3dFdG Z4dHdI Z5dJdK Z6dLdM Z7ejdej8ej gdNdO Z9ejddPdQdRdSgejdTddgejdUdd dVdWgejdXdYdZgd[d\ Z:ejdej;ej<gd]d^ Z=ejd_ej>e
j?fej@e
jAfgejd`ddadbdcgddde ZBejd_ej>e
j?fej@e
jAfgejd`ddadfdbgejdgdVdadfdbdhdigdjdk ZCdldm ZDejde
j;e
j<e
je
j e
j%e
j&e
jEe
jFgejdXdYdZgdndo ZGdpdq ZHejddrdsgejdUd d dVgdVdWgejd
ddgdtdu ZIejddrdsgejdUd d dagdVgdvdw ZJejdXd7dxdygdzd{ ZKejdd8d:gd|d} ZLejdd8d:gd~d ZMdd ZNejdddgdd ZOejdePedejd`dadbgejdePeddaePed dd ZQdd ZRdS )    N)permutationszip_longestZnumpy)
_numpy_122)	assert_eq	same_keys)get_depsdtypeZf4i4keepdimsTFnanc           
   
   C   sP  t d}|r@t jjdddd}t j||dk < tjj}dd }ntjj}t j	}t
||d|| d	||d|| d	 t
||d|| d	||d|| d	 t|jD ]H}td
d t|jD |D ]&}t
||||| d	||||| d	 qqt|jD ]Z}tdd t|jD |D ]8}t jt|}	t
|||	|| d	|||	|| d	 qqd S )N)            )sizer   c                 [   s:   t jt jt | | f|}t|t jjr6|dS |S )Nr   )npsummaZmasked_whereisnan
isinstanceZMaskedArrayZfilled)arrkwargsn r   D/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/tests/test_reductions.py_sum   s    ztest_numel.<locals>._sumr   )axisr
   r   c                 S   s   g | ]}|qS r   r   .0dr   r   r   
<listcomp>.   s     ztest_numel.<locals>.<listcomp>c                 S   s   g | ]}|qS r   r   r   r   r   r   r!   5   s     )r   onesrandomuniformr   daZ
reductionsZnannumelnumelr   r   rangendim	itertoolscombinationsshufflelist)
r   r
   r   xyr&   r   lengthsubZssubr   r   r   
test_numel   s:    

  r1   c                 C   s:   ||}| |}t || t | || |jdks6td S Nr   )r   r   AssertionError)da_funcdarrnp_funcnarrexpectedactualr   r   r   reduction_0d_test=   s
    
r:   c                  C   s<  t d} tj| 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
|  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_r%   
from_arrayr:   r   prodmeanvarstdminmaxanyallnansumnanprodnanmeannanvarnanstdnanminnanmaxr-   ar   r   r   test_reductions_0DF   s$    
rP   c                 C   sP  t | ||| t | ||| t | |dd||dd t | |dd||dd t| || |sntt| |dd| |ddst|rt | |dd||dd t | |dd||dd t| |dd| |ddst|rL| |dd	}| |d
did	}t||stt ||| t ||| t | |ddd||dd d S )NTr
   r   r   f8r   i8r   split_everyr   r
   rW   r   r   r3   r4   r5   r6   r7   Z	use_dtyperW   a1a2r   r   r   reduction_1d_test]   s.      
r]   c                 C   sN  t d| }tj|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j|t j|d ttj|t j|d d S )N   r   r;   F)r   arangeastyper%   r>   r]   r   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   )r   r-   rO   r   r   r   test_reductions_1Du   s$    rb   c                 C   s  t | ||| t | |dd||dd t | |dd||dd t | |dd||dd t | |dd||dd t | |dd||dd t | |dd||dd t | |ddd	||ddd	 t | |ddd	||ddd	 t | |d
d||d
d t| |dd| |dds$tt| |dd| |ddsDtt| |d
d| |d
dsdt|rt | |dd||dd t | |dd||dd |r| |dd}| |dddd}t||stt ||| t ||| t | |ddd||dd t | |ddd||dd t | |ddd||dd t | |dddd||ddd	 t | |dddd||ddd	 t | |ddd||dd t | |dddd||ddd	 d S )NTrQ   r   rR   r   r   r   r   r
   r   r   rS   rT   rU   r   rV   r   r   r   rX   r   rW   )r   r
   rW   rY   rZ   r   r   r   reduction_2d_test   s^         
rh   c               	   C   sV   t jddd} tt | jdd W 5 Q R X tt | jdd W 5 Q R X d S )Nr^   r^   r   r   r;   r   rR   )r%   r"   pytestraises
ValueErrorr   r-   r   r   r   test_reduction_errors   s
    rp   c              	   C   s  t ddd| }tj|dd}|jdd}| |jddfggksNt	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 6 td
t t
tj|t j| t
tj|t j| W 5 Q R X d S )Nr   z      rs   r   r   r;   TrQ   r   Fignore)r   r`   reshapera   r%   r>   r   Z__dask_keys__namer3   rh   r@   rA   rB   rC   rD   rE   rF   rG   rI   rJ   rK   rL   rM   warningscatch_warningssimplefilterRuntimeWarningr?   rH   )r   r-   rO   br   r   r   test_reductions_2D   s,    
r}   dfuncfuncc              	      s  t jd}tj|dd t || t d||d t d||d t d||d tjddZ t || t d||d t d||d t d||d W 5 Q R X trt dd	||dd	 t	t
 fd
d t	t fdd t d}tj|dd}t||| t|d||d t|ddd||d t d}t|}t||| d S )N
   r   r   r   r   r^   r;   r   r   r   rV   TrQ   c                      s
    dS )Nr   r   r   rO   r~   r   r   <lambda>      z%test_arg_reductions.<locals>.<lambda>c                      s
    dS )Nrf   r   r   r   r   r   r     r   r   r   )r   r#   r%   r>   r   configsetr   rl   rm   rn   	TypeErrorr`   array)r~   r   r-   x2r\   x3a3r   r   r   test_arg_reductions   s.    
 


r   c              
   C   s   t jd}t j|d< tj|dd}t| ||| t| |d||d t  tdt	 t
t | |d  W 5 Q R X t
t | |d  W 5 Q R X t j|d d < tj|dd}t
t | |  W 5 Q R X W 5 Q R X d S )	Nr   r^   r   r;   r   ru   r   r   )r   r#   r   r%   r>   r   rx   ry   rz   r{   rl   rm   rn   compute)r~   r   r-   rO   r   r   r   test_nanarg_reductions  s    

r   c           	   	   C   s   t d}tj|dd}t| ||dk  |||dk   t d}tj|dd}t| ||| t ddddgddddgg}tj|dd}t| ||dk |||dk  td}tt | ||dk  	  W 5 Q R X d S )	Nr   r   r;   r   ))r^   r   r^   r   r   r   )
r   r`   r%   r>   r   r   rl   rm   rn   r   )	r~   r   x1r[   r   r\   r   r   Za4r   r   r   test_min_max_empty_chunks(  s    
"
"
r   argmax	nanargmaxc              	   C   sT   t jddd}||dk }tt}tt | | W 5 Q R X dt|jksPtd S )Nr   r^   r;   r   zunknown chunksize)	r%   r`   rl   rm   rn   getattrstrvaluer3   )r   r-   infor   r   r   %test_arg_reductions_unknown_chunksize=  s
    r   c              	   C   sp   t jddd}||dd d f dkd d f }tt tt | |dd W 5 Q R X tt | |dd  d S )Nr   r   ri   r;   r   rR   r   )r%   r"   rl   rm   rn   r   r   r   r-   r   r   r   (test_arg_reductions_unknown_chunksize_2dH  s
     r   c                 C   s^   t jddd}||dd d f dkd d f }tt | |dd  tt | |dd  d S )Nr   r;   r   rR   r   )r%   r"   r   r   r   r   r   r   ,test_arg_reductions_unknown_single_chunksizeS  s     r   c               	   C   s   t dt j} t ddgddgg| d dd df< d| d< d| d	< 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tj|t j| dd t  t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 tt|t |  tt|t |  tt|t |  tt|t |  ttj|ddt j| dd ttj|ddt j| dd ttj|ddt j| dd ttj|ddt j| dd ttj|ddt j| dd ttj|ddt j| dd ttj|ddt j| dd ttj|ddt j| dd W 5 Q R X d S )Nrt   r   r   r   r   r^   r   r      rj   r;   Fru   r   rR   ) r   fullr   r   r%   r>   rh   r   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rx   ry   rz   r{   rI   rJ   rK   rL   rM   r   r   argminr   	nanargminrN   r   r   r   test_reductions_2D_nans\  sF    &r   c                  C   s8  ddd} t dddgd dd }tj|d	d
}t|d| |d t|d| |d t|d| |d t dddd}tj|dd
}t|jddd| |ddd t|jddd| |ddd t|jddd| |d t|jdddd| |ddd t|jdddd| |ddd d S )Nc                 S   s0   | | j |dd | j|dt| j|d S )NTrd   rR   )r@   r   r   	ones_like)r-   r   r   r   r   r   moment  s
    ztest_moment.<locals>.moment      ?g       @g      @r   )r   r   g    חAr^   r;   r   r   r   r   rq   rr   rS   rt   rR   re   )orderrW   r   )r   r   rW   )N)	r   r   rv   r%   r>   r   r   r`   ra   )r   r-   rO   r   r   r   test_moment  s    
 r   c                  C   s   t jd} tj| dd}t|jdd| jdd t|jddd| jdd t|jdd| jdd t|jdd| jdd d S )N)r   r   r   r   r;   r   rR   rg   )r   r   )r   r#   r%   r>   r   r   r   rN   r   r   r   "test_reductions_with_negative_axes  s    r   c                  C   sR  t dt jddgdddt jgddd	d
gg} tj| dd}tt | t| tt j| ddtj|dd tt j| ddtj|dd tt j| ddtj|dd tt j	| ddtj	|dd tt 
| t
| tt j| ddtj|dd tt j| ddtj|dd tt j| ddtj|dd tt | t| d S )Nr   r   r   r^   r      	   r   rs      r   r;   r   rR   rf   )r   r   r   r%   r>   r   rG   rI   rL   rM   rJ   rK   r   r   rH   )r-   r    r   r   r   test_nan  s    ,r   rG   r   rL   rC   rM   rD   c              	   C   sr  t  ^ tjdkr*| dkr*t dt tdtjddgddd	tjgd
dddgg	t
}tj|dd}| dkr~t dt ttt| |ddtt| |dd | dkrt dt | dkrt dt ttt| |ddtt| |dd tjdkr| dkrt dt ttt| |ddtt| |dd tttt| |	t
tt| | W 5 Q R X d S )Nnt>   rD   rC   ru   r   r   r   r^   r   r   r   r   rs   r   r   r;   >   rM   rL   r   rR   defaultr   )rx   ry   osrw   rz   r{   r   r   r   ra   objectr%   r>   r   r   )r   r-   r    r   r   r   test_nan_object  s&    ,&&&r   c                  C   s   t jt jddddd } t jt jddddd } ttd}t| t|ks\tt t jddd } ttd}t| t|kstd S )Nr   r;   r   rR   r   r   )	r%   r@   r"   r   r   typer3   r   zeros)r-   r.   r   r   r   test_0d_array  s    r   c                  C   s(   t jtddd} | | k s$td S )Nr   r   r;   )r%   r>   r   r   rF   r3   ro   r   r   r   test_reduction_on_scalar  s    r   c               
   C   s   t jddd} |  }t jddd}| }| |f||ffD ]\}}t  tdt t| |  t|jdd|jdd t|jdd|jdd t|jd	d|jd	d t|jd
d|jd
d W 5 Q R X q<d S )N)r   r   r^   r   r;   )r   r   r   ru   r   rR   r   r   r   )	r%   r"   r   rx   ry   rz   r{   r   r@   )Zdx1r   Zdx2r   dxr-   r   r   r    test_reductions_with_empty_array  s    
r   c                 C   sL   t | j\}}|r.ttt| |ksHtnttt| |ksHtd S N)r   daskrD   maplenvaluesr3   )r-   r   eqZdependenciesZ
dependentsr   r   r   assert_max_deps  s    r   c                  C   sl  t jtdddd} d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d t| jd
ddd t| jdddd t| jdddd	 t jtdddd} dd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 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d	 t| jdddd	 t| jddddd t| jddddd t| jddddd t| jdddd t| jdddd t| jdddd d S )N   rs      r   r   r;   r   r   rf   rV   r   r   rg   r   r      Fr   ij  )rs   r      r   r   r   r      )r   r      )r   r   r   (   $   )r%   r>   r   r`   rv   r   r   )r-   Zthreshr   r   r   test_tree_reduce_depth  s>    
r   c               	   C   sn   t jtdddd} tjdddd8 t|  d	 t| jd
dd t| jddd W 5 Q R X d S )Nr   r   r   r;   r   r   rf   rV   r   r   rR   r   r   )	r%   r>   r   r`   rv   r   r   r   r   ro   r   r   r   test_tree_reduce_set_options)  s
    r   c                  C   s   t jddd} |  jds"td|  jdd ks>t|  jdsRt| 	 jd	sftt
d
d t | jD st|  jdstd S )Nr^   r_   r;   r   rD   -r   rA   rF   c                 s   s   | ]}|d   dV  qdS )r   rG   N)
startswith)r   kr   r   r   	<genexpr>7  s     z'test_reduction_names.<locals>.<genexpr>r@   )r%   r"   r   rw   r   r3   rD   splitrA   rF   rE   rG   r   r@   ro   r   r   r   test_reduction_names1  s    r   c                  C   sl   t } tjtjd| ddtjtj| dd}ttdd |jD  \}}t	|ddd	d
hks\t
t|sht
d S )Nr   r   r;   Zfoo)r   rw   c                 S   s   g | ]}|d   ddqS )r   r   r   )rsplit)r   keyr   r   r   r!   @  s     z0test_general_reduction_names.<locals>.<listcomp>r   zfoo-partialzfoo-aggregate)intr%   	reductionr"   r   r   r,   r   r   r   r3   rF   )r   rO   namestokensr   r   r   test_general_reduction_names;  s        r   c                 C   sF   t jddd}t jddd}| |d|d t|| tddd d S )	Nr   )r^   r;   r   rt   r   r   outrR   )r%   r`   r"   r   r   )r   r-   r.   r   r   r   test_array_reduction_outE  s    r   cumsumcumprodZ	nancumsum
nancumproduse_nanr   r   r   method
sequentialblellochc              	   C   s   t t| }t t| }d}tjt|td|}|r@tj|d< tj|dd}| dkr|dkr|d krt	
t" ||||d  W 5 Q R  d S Q R X |||d	}	||||d}
t|	|
 d S )
N)r   rs   r   rT   r   )r   r^   r   r;   )r   r   r   )r   r   rR   )r   r   r%   r`   r?   floatrv   r   r>   rl   Zwarnsr{   r   r   )r   r   r   r   r6   r4   srO   r    Za_rZd_rr   r   r   test_array_cumreduction_axisM  s    


r   c                 C   s8   t jddd}| |d|d t|| tddd d S )Nr   rt   r;   r   r   rR   )r%   r"   r   r   r   r   r   r   test_array_cumreduction_oute  s    r   znpfunc,daskfuncrW   r   r   r   c              	   C   sd  d}t jd}t jd}tj|dd}tj|dd}t| || d  d d d ||||d t| |d | ||| |d t| |d	d
| d d d d d f d d dd d d d f |||d	|d t| |dd
d d | d d d f d d d d dd d f |||d|d t| |dd
d d d d | d f d d d d d d df |||d|d tt |||d|d W 5 Q R X t| |d	d
d |d d d d f ||| d	|d t| |dd
d d d |d d f ||| d|d t| |dd
d d d d d |f ||| d|d tt ||| d|d W 5 Q R X d S )Nr^   i   r   r      ))x   P   d      i,  r;   r   r   r   r   rV   r   rR   rg   r   r   )r   r#   r%   r>   r   rl   rm   rn   )npfuncdaskfuncrW   r   npaZnpbrO   r|   r   r   r   test_topk_argtopk1l  sF    ,":::     r   r   	chunksizer^   r   c                 C   sp   t jd}tj||d}d}t| || d ddd ||||d t| |d| ||| |d dS )z4Fine test use cases when k is larger than chunk sizer   r;   r^   Nr   rV   )r   r#   r%   r>   r   )r   r   rW   r   r   rO   r   r   r   r   test_topk_argtopk2  s
    ,r   c                  C   s\   t j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d d S )Nr   r   r;   r^   r   r   rg   )r%   r#   r   topkargtopk)rO   r   r   r   test_topk_argtopk3  s    $ r   c                 C   s   | t jt jhkrd|i}ni }t jddd}| |f|j| |d f|jksPt| |fddi|j| |f|jksxt| |fddi|j| |fddi|jkst| t jt jt jt jhkr| |dd	j| |jkst| |dd	j| |dd	jkstd S )
Nr   )r^   r   r   r;   r   r   r   r   rR   )r%   r   r   r"   rw   r3   r   r   )r   r   r   rO   r   r   r   test_regres_3940  s    
$(0r   c                  C   s  dd } t dd}t|d}| || | ||d | ||d | ||d t dd	}t|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d
td d S )Nc                 _   s   t | j|||j||S r   )r   trace)rO   r|   argsr   r   r   r   _assert  s    ztest_trace.<locals>._assertr   r   r   r   r   r   )r   r   r   r   )offsetZaxis1Zaxis2r   )r   r`   rv   r%   r>   r   r   )r   r|   rO   r   r   r   
test_trace  s&    

r   ZmedianZ	nanmedianc                 C   sL   t dd}tj|dd}ttt||| |dtt ||| |d d S )Nr   r   r^   r   r   r;   rd   )r   r`   rv   r%   r>   r   r   )r   r
   r   r-   r    r   r   r   test_median  s    r   c                 C   s~   t dd}tj|dd}tt||| d}tt ||| d}t|| dtt|	 k}| dkrr|szt
n|rzt
d S )Nr   r   )r   r   r   r;   rR   Zrechunkr   )r   r`   rv   r%   r>   r   r   r   dictZ__dask_graph__r3   )r   r   r-   r    r9   r8   Zdoes_rechunkr   r   r   7test_median_does_not_rechunk_if_whole_axis_in_one_chunk  s    

r  r@   r?   c                 C   s0   t dt}t||   }|dks,td S r2   )r%   r"   ra   r   r   r   r3   )r   r   resultr   r   r   test_object_reduction  s    r  c              	   C   s   t ddd}tj|dd}||dk }||dk }t dd |jD }d|ksZtt	t
}tt| | W 5 Q R X d	t|kst| }ttt| |tt | | d S )
Nr   r   r^   r;   r   c                 S   s   g | ]}t | qS r   )r   r   )r   r-   r   r   r   r!     s     z2test_empty_chunk_nanmin_nanmax.<locals>.<listcomp>r   zArrays chunk sizes are unknown)r   r`   rv   r%   r>   r   blocksr3   rl   rm   rn   r   r   compute_chunk_sizesr   )r   r-   r    Z
block_lenserrr   r   r   test_empty_chunk_nanmin_nanmax  s    r  c              	   C   s   t ddd}tj|dd}||dk }||dk }| }tt}t	t | | W 5 Q R X tt}t	t| |}|
  W 5 Q R X t|jt|jkstd S )Nr   r   r^   r;   r   )r   r`   rv   r%   r>   r  rl   rm   rn   r   r   r   r   r3   )r   r-   r    Zerr_npZerr_dar   r   r   $test_empty_chunk_nanmin_nanmax_raise  s    r  c               	   C   sT   t d} | ttdtj}tj	dd}|
   W 5 Q R X |rPtd S )NZxarrayr   Trecord)rl   importorskipZ	DataArrayr%   r>   r   r   r   rx   ry   r@   r   r3   )ZxrrO   recr   r   r   test_mean_func_does_not_warn,  s
    
r  rJ   rK   c              	   C   sd   t dt j }d|d< d|d< tj|dd}tjdd}tt| |  W 5 Q R X |r`t	d S )Nr   r   r   r   r;   Tr	  )
r   r"   r   r%   r>   rx   ry   r   r   r3   )r   r-   r    r  r   r   r   test_nan_func_does_not_warn6  s    r  r<   ))r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   axesr   c              
   C   sp   t dd |D }tt|j| }tj||d}tj|dd dd d| ||j|j	d}t
||d	d	d
 d S )Nc                 s   s   | ]}t |V  qd S r   r   r   )r   r   r   r   r   r   J  s     z4test_chunk_structure_independence.<locals>.<genexpr>r;   c                 S   s   | S r   r   r-   r   r
   r   r   r   r   O  r   z3test_chunk_structure_independence.<locals>.<lambda>c                 S   s   | S r   r   r  r   r   r   r   P  r   T)r
   r   rW   r   metaF)Zcheck_chunkscheck_shape)tupler   r`   r?   rv   r%   r>   r   r   Z_metar   )r  rW   r<   shapeZnp_arrayr-   Z	reduced_xr   r   r   !test_chunk_structure_independenceB  s    
r  c               	   C   s  ddd} dt jddd }t jj|d< tj|d	d
}t ddddd}tj|| t j	|j
d}t|t 	|dd tj|| t j	d|d}t|t 	|| dd tt  tj|| t j	dddgd W 5 Q R X tt  tj|| t j	dgggd W 5 Q R X d S )NFc                 [   s.   |r| S |dk	r| | } t j| fd|i|S )z#`chunk` callable for (weighted) sumNr   r  )r-   weightsr   Zcomputing_metar   r   r   r   w_sum\  s
    z&test_weighted_reduction.<locals>.w_sumr   <   r   r   r   )r   r^   r;   r   rT   T)r  rS   )r   r  r   )r  )NNF)r   r   r`   rv   Zmaskedr%   r>   Zlinspacer   r   r   r   rl   rm   rn   )r  rO   r   wr-   r   r   r   test_weighted_reductionZ  s    
	$r  )TT)TT)T)Sr   rx   r)   r   r   rl   r  r   Z
dask.arrayr   r%   Zdask.configr   Zdask.array.numpy_compatr   Zdask.array.utilsr   r   Z	dask.corer   markZparametrizer1   r:   rP   r]   rb   rh   rp   Zslowr}   r   r   r   r   r   r   rC   rD   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sortr   Zargsortr   r   r   r   rG   rM   r   r   r   r  r  r  r  r  r  r,   r  r  r   r   r   r   <module>   s   
(	


3



	
 
$





-

%



 2 
"	




 