U
    /e}                     @   s  d dl Z d dlZd dlZd dlm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mZmZmZmZmZmZmZmZ d dlmZmZ dd	 Zd
d Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'd d! Z(d"d# Z)d$d% Z*d&d' Z+G d(d) d)Z,ej-j.d*d+d,d- Z/d.d/ Z0d0d1 Z1d2d3 Z2d4d5 Z3d6d7 Z4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8d@dA Z9dBdC Z:dDdE Z;dFdG Z<dHdI Z=ej->dJddKdLdMgej->dNddOdPdQdRgdSdT Z?ej->dUdMdLdKgdVdW Z@ej->dUdMdLdKdXdYgdZd[ ZAej->dUdLdXgd\d] ZBej->dUdLdXgd^d_ ZCej->d`dadbdcdddedfdgdhgdidj ZDdkdl ZEdmdn ZFdodp ZGej-jHdqdr ZIej->dsdtdPdugej->dveJfdeJfeJdfdeJdfgdwdx ZKeJeLdLd dMdydzeLdyddgZMd{d| ZNej-jOd}d~ ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVej->ddeWdYdd dMeWdYfd eWdYfgfdeWddL d eWddL fdMeWddL fgfdddLdKdgdMdYgfd dLdKgfdMdYgfgfgdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]ej->dddgdd Z^dd Z_dd Z`ej-adej->ddddgdd Zbej->dddgej->dddgej->dddgdd Zcdd Zddd ZedS )    N)mergeZnumpy)config)getitem)
_sanitize_index_element	_slice_1dmake_block_sorted_slicesnew_blockdimnormalize_indexsanitize_indexshuffle_sliceslice_arrayslicing_plantake)	assert_eq	same_keysc                  C   s  t dddt d d d t dddd} tddgd t ddd }| |ksJtt d	d
dt dddt dddt d	ddt dddd} tddgd t ddd}| |kstt d	ddt dddt dddt d	ddt dddd} tddgd t dd d}| |kstt dddt dddt dddt dddt dddd} tddgd t d d d}| |kshtt dddt dddt dddt d	ddt dddd} tddgd t d d d}| |kstt dddt d	ddt dddt dddt dddd} tddgd t d d d}| |ks(tt dddt dddt d	ddt dddd} tddgd t dd d}| |ks~tdt dd
di} tddddddgt ddd}| |kstt dddt dddd} tddddddgt ddd}| |ks ti } tddddddgt d}|s(t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d dgt dd d}| |kst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%d&d'gt d d d}| |kstt dd(dt dd!dt dd"dt dd#dd)} td$ddd%d&d'gt d d%d}| |ksJtt dd(dt dd!dt dd"dt dd#dd)} td$ddd%d&d'gt dd%d}| |kstdt d*d+di} | d,d- tdd*D  td.d+gd* t d*d d }| |kstd S )/N
         r   )r   r      d      3   ii)r   r   r      r            f   iis      )r   r   r   r   O   \   i)r   r   c      iiih            i)r   r   r   r     i ʚ;c                 S   s   i | ]}|t d d d qS N)slice).0ii r2   A/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/tests/test_slicing.py
<dictcomp>   s      z!test_slice_1d.<locals>.<dictcomp>l    J))r/   r   AssertionErrorupdaterange)expectedresultr2   r2   r3   test_slice_1d   s    $















































r:   c                   C   s:   t ddddgdddikstt dddddiks6td S )N   r   r   r   r      )r   r   r   r   r   r   )r   r5   r2   r2   r2   r3   &test_slice_singleton_value_on_boundary   s    r=   c               	   C   s  t dtdddfft dtdddfft dtdddfft d	tdddffd
} tdddgd gtdd dgd\}}| |kstt dtdddfft dtdddfft d	tdddffd} tdddgd gtdd dgd\}}| |kstt dtdddfft dtdddfft dtdddfft d	tdddffd
} tdddgtdd dfd\}}| |ksjtt dtdddfft dtdddfft d	tdddffd} tdddgtdd dfd\}}| |kstd S )Nxr      r   r   )r?   r   r   r?   r   r   )r?   r   )yr   rC   r   rC   r   )rC   r   rC   r?   r      rB   rD   rE      )r   r   r   r   r   r/   r   r5   r8   r9   chunksr2   r2   r3   test_slice_array_1d   s4    &&  rL   c               	   C   s  t dtdddtdddfft dtdddtd d d fft dtdddtd d d ffd	} td
ddgdddggtdd dtdd dgdd\}}| |kstt ddtdddfft ddtd d d fft ddtd d d ffd} td
ddgdddgfdtdd dgd\}}| |kstd S )Nr?   r   r   r+   r   r   r   r   r?   r   r   )r?   r   r   )rC   r   r   rC   r   r   )rC   r   r   rC   r?   r   rF   itemsizerG   rI   rJ   r2   r2   r3   test_slice_array_2d   s<    
    rS   c               
   C   s   ddi} t dddggtd d d fd\}}| |ks6tdddd	} t ddd
gtd d d td d d td d d fdd\}}| |kstd S )Nfoor   )barr   rU   rV   r   rF   )rV   r   )rV   r   )rT   )rU   r   )rU   r   )r   r-   i'  rQ   )r   r/   r5   rJ   r2   r2   r3   test_slice_optimizations  s    " 
rW   c                  C   sV   t ddddgddgftdddfdd\} }dtdtd d d d	ffi}|| ksRtd S )
NrC   r?   r   r   rF   rQ   rB   rN   r   r   r/   r   r5   r9   rK   r8   r2   r2   r3   #test_slicing_with_singleton_indices  s        
rZ   c               
   C   s   t ddddgddgftddd td d d fdd\} }tdtddd	d td d d fftd
tddd	d td d d ffd}|| kst|dkstd S )NrC   r?   r   r   r   rF   rQ   rM   r   rN   ))rC   r   r   r   )rC   r   r   r   )r   )r   r   r   rX   rY   r2   r2   r3   test_slicing_with_newaxis!  s$    

r]   c                  C   s  t dddgddddgdd	d
\} }tdtddgfftdtdgfftdtdgffd}tjt| t|  | dkstt ddddgddddgdd	d
\} }tdtddgt	d d d fftdtddgt	d d d fftdtdgt	d d d fftdtdgt	d d d fftdtdgt	d d d fftdtdgt	d d d ffd}tjt| t|  | dkstd S )NrC   r?   r   r   r   r   r   r   /   r   rF   r   rR   axisr>   rA      rG   )r   r   r   r   r   rM   rN   )r?   r   r   )r?   r   r   )rO   rP   )rC   r   r   )rC   r   r   )rC   r   r   )rC   r   r   )rc   rd   )
r   r   nparraytestingassert_equalsorteditemsr5   r/   rK   dskr8   r2   r2   r3   	test_take;  s<    "   
  
rm   c                  C   s   t dddgddddgdd	d
\} }tddddgfftddgffd}tj|| | dks^tt ddddgddddgddd
\} }tdd tdD dd tdD }tj|| | dkstd S )NrC   r?   r^   r   r   r   r_   rF   r   r`   r>   rA   rb   )rB   rD   )r   r   rd   %   c              	   S   s6   i | ].}d |dft d|dftddddddgffqS )rC   r   r?   Nr   r   r   r   r/   r0   ir2   r2   r3   r4   i  s    z$test_take_sorted.<locals>.<dictcomp>r   c              	   S   s2   i | ]*}d |dft d|dftddddgffqS )rC   r   r?   N   rp   rq   r2   r2   r3   r4   m  s    )r^   rn   )r   r   re   rg   rh   r5   r   r7   rk   r2   r2   r3   test_take_sorted\  s0    "   
  

rt   c               
   C   s   t ddddgddgfdtdddgfdd	\} }|d
ks>tt ddddgddgftddtdddgfdd	\} }|dkstt ddddgddgftdddfdd	\} }|dkstd S )NrC   r?   r   r   r   r   r   rF   rQ   )r[   rb   )r   r   r[   )ru   )r   re   rf   r5   r/   )r9   rK   r2   r2   r3   test_slicing_chunksv  s0        
    
    
rv   c               
   C   s   t dddtdddgtd d d fdd\} }t dddtdddgtd d d fdd\}}||kshttj| | d	d
d
d	d	d	d	d	d	d
g
}|td d d f}t|d}t ddd|dd\}}||ksttj| | d S )NrC   r?   )r   r   r   r   rw   r   r   	   rF   rQ   FTr   r   )r   re   rf   r/   r5   rg   rh   r	   )aZbd1bZbd2rr   indexcZbd3r2   r2   r3   test_slicing_with_numpy_arrays  s,    


r~   c                  C   s4   t jddd} | ddddf }|jdks0td S )	Nr@      )r   rF   rF   r   )r      r   r   rK   r   r    r   r   ))rF   rF   r   r   daonesrK   r5   )otr2   r2   r3   test_slicing_and_chunks  s    r   c               	   C   sN   t jddd} tjtjfdf| _tjtdd | ddg   W 5 Q R X d S )N)r   r   r   r   r   z$Array chunk size or shape is unknown)matchr   )	r   r   re   nan_chunkspytestraises
ValueErrorcomputerz   r2   r2   r3   test_slicing_and_unknown_chunks  s    r   c                  C   s   t jddd} | | td  ks"t| | d d  ks6t| | d d  ksJt| | d ksZt| | dd  ksnt| | dd  kst| | d d d kst| | dt|  kst| | dd d kst| | dt| d kstd S )Nr   r   r   .r   r   )r   r   r/   r5   lenr   r2   r2   r3   test_slicing_identities  s    r   c                  C   s:   t jdddd d  } tdd d }t| | d S )Nr   r   r   r   )r   r   r   re   r   )rz   r{   r2   r2   r3   test_slice_stop_0  s    r   c                  C   s2   t jddd} | ddg d  }t|td d S )Nr\   r   r   )shaperK   r   r   )r   r   r   )r   zerosr   re   r?   rC   r2   r2   r3   test_slice_list_then_None  s    r   c                   @   s   e Zd Zdd ZdS )
ReturnItemc                 C   s   |S r.   r2   )selfkeyr2   r2   r3   __getitem__  s    zReturnItem.__getitem__N)__name__
__module____qualname__r   r2   r2   r2   r3   r     s   r   zreally long test)reasonc            	      C   s  t jddd} tj| dd}t }dd|d d  |d d dd	gdd	d
gdd
g|d d d d |d d g g}|D ]}t| | || |f |D ]}t| | d d |f || d d |f ||ff t| d d |f | |d d |f | ||ff |D ]H}t| d|f d d |f | |d|f d d |f | |||ff qqqr|d d  |d d t ddd	dddgt ddk g}ddd|d d  |d d |d
d d
dgg |d d g	}|D ]4}|D ](}t| | | || | ||ff qȐqd S )Nr   rb   rF   r   r   r   r   r   r   r   r   r   r   r   .r   )re   randomrandr   
from_arrayr   r   arange)	r?   rz   Iindexersrr   jkZfirst_indexersZsecond_indexersr2   r2   r3   test_slicing_exhaustively  s     J22J8:r   c                  C   s   t jddd} | d dd }| jdf|j|jdf ks:t| jdf|j|jdf ksXtt|tdd dd  |jdkst|j|jdf t| jdft	dddffkst|j|jdf t| jdft	dd	dffkstd S )
Nr   r   r   r   r   r   ))r   r   r"   r    )
r   r   namedaskr5   r   re   rK   r   r/   r   r2   r2   r3   *test_slicing_with_negative_step_flops_keys  s    .r   c                  C   s<   t jdddd} | d d }t|tjdddd d  d S )Nr\   r   r   i4)rK   dtyper   r   )r   r   r   re   r   r2   r2   r3   test_empty_slice  s    r   c                  C   s`   t jddd} tj| dd}t| d d dddgf ddg |d d dddgf ddg  d S )	Nr   rb   rF   r   r   r   r   r   )re   r   r   r   r   r   r?   rz   r2   r2   r3   test_multiple_list_slicing  s    r   c               	   C   s   t t ttddg  W 5 Q R X t t ttddddg  W 5 Q R X td} dddddg}tt| | | |  dg}ttdg| td|  d S Nr   TFr   r   r   )	r   r   
IndexErrorr   asarrayr7   re   r   r   r?   indr2   r2   r3   test_boolean_list_slicing  s    "
r   c               	   C   s   t t  ttdtdg  W 5 Q R X t t$ ttdtdddg  W 5 Q R X td} tdddddg}t	t| | | |  tdg}t	tdg| td|  d S r   )
r   r   r   r   r   r7   re   rf   r   r   r   r2   r2   r3    test_boolean_numpy_array_slicing  s    $(
r   c                  C   s   t jddd} tj| dd}t|g d dd df | g d dd df  t|d dg d df | d dg d df  t|d dd dg f | d dd dg f  d S )Nr   r   r   r   r   r   r   r   )re   r   r   r   r   r?   Zdxr2   r2   r3   test_empty_list  s
    ..r   c                   C   s&   t jdddd d d jdks"td S )Nr   r   r   r   ))r   r   r   r   r   r2   r2   r2   r3   test_uneven_chunks'  s    r   c                   C   s0   t dddddgtdd dddddgks,td S )Nr   r   r   r   r   )r   r/   r5   r2   r2   r2   r3   test_new_blockdim+  s    r   c                  C   sf  t dd} tj| dd}t|d |d s4tt|d d dddgf |d d dddgf sftt|d d d	dd
f |d d d	dd
f stt|d |d stt|d |d stt|ddd	g |ddd	g stt|dd |d d  stt|dd |d d s&tt|d
 |d s>tt|dd d
 |ddd
 sbtd S )Nr   ry   r\   r   r   r   r   r   r   r   )r   ..i   irx   )re   r   reshaper   r   r   r5   r   r2   r2   r3   test_slicing_consistent_names/  s    22"  r   c                  C   s   t jddd} t| dd  | d d s,tt| dd  | dd sJtt| dd  | ddd sjtt| d d  | ddd std S )Nr   r   r   r   r   )r   r   r   r5   r?   r2   r2   r3   1test_slicing_consistent_names_after_normalization>  s
     r   c                	   C   s"   t t td W 5 Q R X d S )NHello!)r   r   	TypeErrorr   r2   r2   r2   r3   test_sanitize_index_elementF  s    r   c               	   C   sh   t d} t t td W 5 Q R X tjt| dddgdddg tjtddddg d S )NZpandasr   r   r   r   )r   r   r   )	r   importorskipr   r   r
   re   rg   rh   ZSeries)pdr2   r2   r3   test_sanitize_indexK  s
    
$r   c                  C   sn  d} t ddt d f}tdd| |dd\}}tdt d	d
dt d fftdt dddt d ffd}||ksnt|dksztd} t ddt ddf}tdd| |dd\}}tdt d	d
dt dddfftdt d	d
dt d fftdt d	d
dt dddfftdt dddt dddfftdt dddt d fftdt dddt dddffd}||ks\t|dksjtd S )N)      r   r<   r   r<   r   r   r<   r   r<   r      i  inoutrF   rQ   )r   rb   r   r   r   r   )r   rF   r   r   r*   )r   r   r   r   r   r   )r   r*   r   )r   r         )r   rb   r      r<   )r   rb   r   )r   rb   rb      )r   rF   r   )r   rF   r   )r   rF   rb   )r   )r   r   r   )r   r   r   r   )r   r   r   )r   r   r   )r   )r   r   r   )r/   r   r   r5   )Z	blockdimsr|   Zdsk_outZbd_outZsolr2   r2   r3   test_uneven_blockdimsT  s(    r   c               	   C   s   t jddd} tt | d  W 5 Q R X tt | dg  W 5 Q R X tt | d  W 5 Q R X tt | dg  W 5 Q R X tt | d  W 5 Q R X d S )Nr   r   r   r   i)r   r   )r   r   r   r   r   r   r2   r2   r3   test_oob_checkn  s    r   
idx_chunksr   r   r   x_chunks)r   r   )r   r   )r   r   )r   r   c              	   C   s   t dddddgdddd	d
gdddddgg}t dddg}t dddgd	ddgdddgg}| d k	rvtj|| d}|d k	rtj||d}t|d d |f | t|j|d d f |j d S )Nr   r   r<   (   2   <   F   P   Z   r   n   x            r   r   r   r   )re   rf   r   r   r   T)r   r   r?   idxexpectr2   r2   r3   test_index_with_int_dask_array|  s    &"r   rK   c                 C   st   t jdddgdddgg| d}t jddd}t||d d f |dd d f  t|d d |f |d d df  d S )	Nr   r   r<   r   r   r   r   r   )r   r   r   )rK   r?   Zidx0r2   r2   r3   !test_index_with_int_dask_array_0d  s    "r   r   r   c                 C   sZ   t jdd| d}t||  tddddg t jd| d}t||  tg  d S )Nr   r   r   r   r   r   r   )r   r   r   Znonzerore   rf   r   )rK   rz   r2   r2   r3   (test_index_with_int_dask_array_nanchunks  s     r   c                 C   s<   t jd| d}t jddgdd}t|| tddg d S )Nr   r   r   r    r   r   r   )r   r   r   r   re   rf   rK   rz   r   r2   r2   r3   'test_index_with_int_dask_array_negindex  s    r   c              	   C   sv   t jd| d}t jdgdd}tt ||   W 5 Q R X t jdgdd}tt ||   W 5 Q R X d S )Nr   r   r   r!   )r   r   r   r   r   r   r   r   r2   r2   r3   )test_index_with_int_dask_array_indexerror  s    r   r   Zint8Zint16Zint32int64Zuint8Zuint16Zuint32Zuint64c                 C   sP   t jddddgdd}t jtddg| dd}t|| tddg d S )	Nr   r   r<   r   r   r   r   r   )r   r   re   rf   Zastyper   )r   rz   r   r2   r2   r3   %test_index_with_int_dask_array_dtypes  s    r   c               	   C   sZ   dd } t jddd}t jd| fiddtjd	}|| }tt |  W 5 Q R X d
S )zWTest that when the indices are a dask array
    they are not accidentally computed
    c                   S   s
   t  d S r.   )NotImplementedErrorr2   r2   r2   r3   crash  s    z7test_index_with_int_dask_array_nocompute.<locals>.crashr   r   r   r>   r?   )r   )r   rK   r   N)	r   r   Arrayre   r   r   r   r   r   )r   r?   r   r9   r2   r2   r3   (test_index_with_int_dask_array_nocompute  s    r   c                  C   s   t dd} tj| dd}t jddddddgtd}tj|dd}|td	d
d|f|tddd	ffD ]$}t	|d }t
| | ||  qhd S )N$   r   r   r   TFr   r   r   rx   rF   r   )re   r   r   r   r   r   boolr/   r   r   r   )r?   dr   r|   Zx_indexr2   r2   r3   test_index_with_bool_dask_array  s    &r  c                  C   s   t jd} t jddk}tj| dd}tj|dd}tdddtd g}t| jD ]N}|d d  }||| |d d  }||| t| t	| |t	|  qVd S )	N)r   r   r   r   g      ?)r   r   r   r   r   r   rx   )
re   r   r   r   r/   r7   ndiminsertr   tuple)r?   r   r   Zdindr|   rr   index2index3r2   r2   r3   !test_index_with_bool_dask_array_2  s    r  c                  C   sP   t jddd} dtddtdd dfD ]$}| | }t|jt| jk s&tq&d S )Nr-   r   r   r   r   r<   r   )r   r   r/   r   r   r5   )r?   ZslcrC   r2   r2   r3   	test_cull  s    r  r   r   )r   r   r   r|   c                 C   s0   t j| }tj|| d}t|| ||  d S )Nr   )re   r   r   r   r   )r   r|   r?   r   r2   r2   r3   test_slicing_with_Nones  s    r	  r   r   c               	   C   sP   t jdd} tddddg}tjdd}| |   W 5 Q R X |rLtd S )Nr   r   r   r   r   Trecord)r   r   re   rf   warningscatch_warningsr   r5   )Xr   r  r2   r2   r3    test_slicing_integer_no_warnings  s
    r  c                  C   sb   d} t t | | }tj|}tt	t	t	t	D ]&}|
tdkrJq6t|| ||  q6d S )Nr   r   r   rb   r   r   )re   r   prodr   r   corer   	itertoolsproductr   countEllipsisr   )r   r?   rC   r   r2   r2   r3   test_slicing_none_int_ellipes  s    r  c            	      C   sp   dt d dd d tf\} }}}d}tt||}tj|}|| |||f }|| |||f }t	|| d S )Nr   r   r  )
r/   r  re   r   r  r   r   r  r   r   )	rz   r{   r}   r   r   r?   rC   Zxxyyr2   r2   r3   test_None_overlap_int+  s    r  c                   C   s&   t tjdddd tdd  d S )Nr   r   r   )r   r   r   re   r2   r2   r2   r3   test_negative_n_slicing6  s    r  c                  C   sP   t d} tj| dd}t|ddg | ddg  t|ddg | ddg  d S )Nr   r   r   r   r!   r   r   re   r   r   r   r   r   r2   r2   r3   test_negative_list_slicing:  s    
r  c                  C   s   t d} tj| dd}t| dd  |dd   t| dd  |dd   t| d d |d d  t| d d |d d  d S )Nr   r   r   ir   r  r   r2   r2   r3   test_permit_oob_slicesA  s    
r  c                  C   s   t td fdtd d fkstt dtjfdks4tt dtjfdksJtt dddgtjf\} |  dddgksvtt tddtjftddfkstd S )Nr   r   r   r!   )r!   r   r   )r	   r  r/   r5   re   r   tolist)r9   r2   r2   r3   test_normalize_indexK  s    r   c                  C   s6   t jddd} tdd }| | }|jdks2td S )Nr   r   r   r;   )r   )r   r   re   r   rK   r5   )r?   r|   rC   r2   r2   r3   test_take_semi_sortedT  s    r!  zchunks,index,expectedr   r;   r   )r   r   r   r   r   ry   c                 C   sp   t | |d}t|t|ks tt||D ]@\\}}\}}||ksFtt|t|ksZt||k s*tq*d S )N)r|   )r   r   r5   zipall)rK   r|   r8   Zplanrr   r?   r   rC   r2   r2   r3   test_slicing_plan\  s    r$  c                  C   sn  t jddiR tjdddddd} dgd	gd
  }tj| dd}|| }| | }t|| tj| dd}| | }t	
tj || }W 5 Q R X t|| |jdkstt jddi8 tjdd}|| }W 5 Q R X t|| |rtW 5 Q R X t jddiJ tjdd}|| }W 5 Q R X t|| |rFt|jdksVtW 5 Q R X W 5 Q R X d S )Narray.chunk-size0.1Mbi   r   r   r      r   r   r   )r   rF   rF   r   )r   r'  r'  ))r   r   r'  r(   array.slicing.split-large-chunksFTr  ))r   r   r   r   r   r   r   r   r   r   r   r   r(  r(  )r   r   setre   r   r   r   r   r   r   warnsPerformanceWarningrK   r5   r  r  )rz   indexerarrr9   r8   r  r2   r2   r3    test_getitem_avoids_large_chunksq  s4    




r/  c               	   C   s   t jddin tdddd} tj| dd}dtjftjff|_	d	d
gdgd  dg }| | }|| }t
|| W 5 Q R X d S )Nr%  r&  i@B r     )r   r0  r0  r   r   r   r   r   r   r   r   r   r   )r   r   r*  re   r   r   r   r   r   r   r   )rz   r.  r-  r8   r9   r2   r2   r3   (test_getitem_avoids_large_chunks_missing  s    r2  c               	   C   sb  t jddiF d} d}tddgdgd  d	g }td
d| ||\}}|dksZtt|dksjttdgd ddd	g }td
d| ||\}}|dkstt|dksttdddgd	gd  }td
d| ||\}}|dkstt|dkstd} tdddgd	gd  }td
d| ||dd\}}|dksBtt|dksTtW 5 Q R X d S )Nr)  Tr1  r0  r4  rF   r   r   r   e   r   rz   r{   ))r   r   r   r   r   r4  r4  r   ))r   r   r   r   r   r4  r4  )r   r   r   r   r   r4  r4  )r4  r1  r4  )ra   )r4  r6  r4  r   r   r*  re   rf   r   r5   r   )rK   rR   r|   chunks2rl   r2   r2   r3   test_take_avoids_large_chunks  s(    r9  c               
   C   s   t jddiv d} tddgdgd  dg }d	}td
di tdd| ||\}}W 5 Q R X |dksrtt|dkstW 5 Q R X d S )Nr)  Tr3  r   r   r   r5  r   rF   r%  Z10GBrz   r{   ))r   r   r5  r   r4  r4  r   r7  )rK   r|   rR   r8  rl   r2   r2   r3   test_take_uses_config  s    r:  c               	   C   sx   t jddd} tdddjdd}tt j}| |  W 5 Q R X dt	|j
d ks^tdt	|j
d ksttd S )	Nr   r   r   F)order10r   zout-of-order)r   r   re   r   r   Zravelr   r+  r,  strlistr5   )r?   r|   infor2   r2   r3   "test_pathological_unsorted_slicing  s    rA  params)r   r   r   )r   r   r   c                 C   sJ   | \}}}t j||d}t j||d}d||< | }|j|jksFtdS )a  Reproducer for https://github.com/dask/dask/issues/3730.

    Mutating based on an array with different chunks can cause new chunks to be
    used.  We need to ensure those new chunk sizes are applied to the mutated
    array, otherwise the array won't generate the correct keys.
    r   r   N)r   r   r   r   r5   )rB  Z
array_sizeZchunk_size1Zchunk_size2r?   maskr9   r2   r2   r3   2test_setitem_with_different_chunks_preserves_shape  s    
rD  c                   C   s`   t tddd d tjddddd d  t tdd d d tjdddd d d  d S )Nr   r   r   r   r   )r   re   r   r   r2   r2   r2   r3   test_gh3579  s    .rE  c               
   C   s   t jddd} tddddddd	d
g}t|| j\}}tdddddd
d	dg}td
ddddddd	g}tj|| tj|| d S )NrF   r   r   r   r   r   rb   r   r   r   )r   r   re   rf   r   rK   rg   Zassert_array_equal)r?   r|   rz   r{   r  r  r2   r2   r3    test_make_blockwise_sorted_slice  s    rF  z1ignore:Slicing:dask.array.core.PerformanceWarningzsize, chunks)r
  )r   r   )r
  )ro   r   )r   )7   c                 C   sN   t jjdd| |d}tt|}tj| || }t||}t|| d S )Nr   r-   )sizerK   )	r   r   randintre   r   r   shuffler   r   )rH  rK   r?   r|   rz   r{   r2   r2   r3   test_shuffle_slice  s    
rK  lockTFr   fancyc                 C   sP   t jtdd|| |d}t jtdd|| |d}t ||g}t|| d S )Nr   r   )rK   r   rL  rM  )r   r   re   r   r   stackr   )rL  r   rM  Za1Za2alr2   r2   r3   test_gh4043  s    rP  c                  C   sN   t ddd} tddddk}| |  }tdd}t|| d S )Nr   r@   )r   r   r   r   r+   )r   r   r   re   r   r   )rf   rC  actualr8   r2   r2   r3   )test_slice_array_3d_with_bool_numpy_array  s
    rR  c                  C   s4   t td} tddg }t| dg | d S )N)r   r   r   )r   r   re   r   r   )rf   r8   r2   r2   r3   test_slice_array_null_dimension  s    rS  )fr  r  r   Ztlzr   r   re   r   Z
dask.arrayrf   r   r   Zdask.array.chunkr   Zdask.array.slicingr   r   r   r   r	   r
   r   r   r   r   Zdask.array.utilsr   r   r:   r=   rL   rS   rW   rZ   r]   rm   rt   rv   r~   r   r   r   r   r   r   markskipr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zparametrizer   r   r   r   r   r   r   r  r  Zxfailr  r  r	  r/   r   r  Zslowr  r  r  r  r  r   r!  r   r$  r/  r2  r9  r:  rA  rD  rE  rF  filterwarningsrK  rP  rR  rS  r2   r2   r2   r3   <module>   s   
0 ,(
!
		

	


 


 	

	,"*
	&

 

