U
    /e@                     @   s  d dl Z d dlmZ d dlZedZd dl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 d dl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(ej)*d'e	g e	g g ge	g gg gggd(d) Z+d*d+ Z,d,d- Z-d.d/ Z.d0d1 Z/d2d3 Z0d4d5 Z1d6d7 Z2d8d9 Z3d:d; Z4dd?d@Z5dAdB Z6dCdD Z7dEdF Z8dGdH Z9dIdJ Z:dKdL Z;ej)*dMdNdOgdPdQgdPdRggdSdT Z<dUdV Z=dWdX Z>dYdZ Z?d[d\ Z@d]d^ ZAej)*d_e	jBd`dadbdcfe	jBd`dadbd<ddife	jBd`dadbdefe	jBdfdgdbdcfe	jBdfdgdbd<ddife	jBdfdgdbdefe	jBdhdhdbdcfe	jBdhdhdbd<ddife	jBdhdhdbdefe	jBdhdidbdcfe	jBdhdidbd<ddife	jBdhdidbdefgdjdk ZCdldm ZDdndo ZEdpdq ZFdrds ZGdtdu ZHdvdw ZIdxdy ZJdzd{ ZKd|d} ZLd~d ZMdd ZNej)*ddddddgdd ZOdd ZPdd ZQej)*dddgdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd ZbdS )    N)productZnumpy)
_breakpoints_intersect_1d_old_to_newcumdims_labeldivide_to_widthintersect_chunksmerge_to_numbernormalize_chunksplan_rechunkrechunk)	assert_eq)funcnamec            
   	   C   s  t dd} t dd}tdd t|| D }d}|d |ks@td	}|d
 |ksTtdd |D }dtdd
fgdtd
dfgdtddfgg}|d |kstdtdd
fgd
tdd
fdtdd
fdtdd
fdtdd
fdtdd
fgdtd
dfgg}|d
 |kstt dd} tdd t|| D }d}|d
 |ksHtdd |D }dtdd
fgd
tdd
fdtdd
fdtdd
fdtdd
fdtdd
fgdtd
dfgdtddfgg}	|d
 |	kstdS )zXTest the cumdims_label and _breakpoints and
    _intersect_1d internal funcs to rechunk.)   r      )r      r   n)   )r   r   r   r   r   oc                 s   s   | ]\}}t ||V  qd S Nr   .0r   r    r   A/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/tests/test_rechunk.py	<genexpr>   s     z+test_rechunk_internals_1.<locals>.<genexpr>)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   c                 S   s   g | ]}t |qS r   r   r   br   r   r   
<listcomp>/   s     z,test_rechunk_internals_1.<locals>.<listcomp>r   r   r%   r   )r   )r   r   r   r   c                 s   s   | ]\}}t ||V  qd S r   r   r   r   r   r   r   @   s     )r   r   r"   r    r#   r$   r!   r&   r'   r)   r)   c                 S   s   g | ]}t |qS r   r+   r,   r   r   r   r.   O   s     N)r   tuplezipAssertionErrorslice)
newoldZbreaksanswerZanswer2Zi1dZanswer3Zanswer4Zanswer5Zanswer6r   r   r   test_rechunk_internals_1   sH    

.
r6   c                  C   s   d} d}dt ddffdt ddffdt ddfffdt ddfffdt ddffd	t ddfffg}tt| |d
}||kstdS )Convert 1 D chunks)
   r9   r9   r9   r9   )   r      r   r9   r   r   r   r%   r   
old_chunks
new_chunksNr2   listr   r1   r4   r3   r5   Zcrossr   r   r   test_intersect_1_   s    ,rC   c                  C   s   d} d}dt ddffdt ddffdt ddfffdt ddffdt ddfffdt ddffd	t ddfffd	t ddfffg}tt| |d
}||kstdS )r7   ))r<   r<   r<   r<   r<   )):   r   r<      r   r<   r   r   rE   r%   r   r=   Nr@   rB   r   r   r   test_intersect_2l   s    ,rF   c                  C   sV   t jddd} tj| dd}d}t||d}|j|ks<tt |	 | ksRtdS )z!Try rechunking a random 1d matrixr   r      ))r9   r9   r9   chunks)r   r   r   r   r   r   N)
nprandomuniformda
from_arrayr   rI   r1   allcomputeaxr3   x2r   r   r   test_rechunk_1dz   s    rV   c                  C   s\   t jdddd} tj| dd}d}t||d}|j|ksBtt 	|
 | ksXtdS )	z!Try rechunking a random 2d matrixr   r   i,  )r9   rG   ))r   r   r%   r   rJ   rH   )r   r   )   rX   NrK   rL   rM   reshaperN   rO   r   rI   r1   rP   rQ   rR   r   r   r   test_rechunk_2d   s    r[   c                  C   s`   d} t jdddd}tj|| d}d}t||d}|j|ksFtt 	|
 |ks\tdS )	z!Try rechunking a random 4d matrix)rW   rW   rW   rW   r   r   '  r9   r9   r9   r9   rH   )r9   r^   r^   r^   NrY   )r4   rS   rT   r3   rU   r   r   r   test_rechunk_4d   s    r_   c                  C   sJ   t jdddd} tj| dd}|jdd}t | | ksFt	d S )Nr   r   d   r9   r9   rW   rH   )r%   r%   r%   r   rb   )
rK   rL   rM   rZ   rN   rO   r   rP   rQ   r1   rS   rT   yr   r   r   test_rechunk_expand   s    re   c            	      C   s   d\} }t jdd| | | f| }ttd| d td| d D ]\}}| | |ff| }tj||d}| | |ff| }t |j	|d
 |kst| | | dkrF|| | | |ff| }|j	|d
 }t ||ksFtqFd S )Nr%   r   r   r   rH   )rK   rL   rM   rZ   r   rangerN   rO   rP   r   rQ   r1   )	rS   r-   origoffZoff2r4   rT   r3   rd   r   r   r   test_rechunk_expand2   s     &rj   c                  C   s`   d} d}t jdddd}tj|| d}|j|d}|j|ksFtt 	|
 |ks\tdS )	z6Test rechunking can be done as a method of dask array.)r   r   r%   rk   rk   rk   )rb   rb   rb   rb   r   r   r\   r]   rH   NrY   )r4   r3   rS   rT   rU   r   r   r   test_rechunk_method   s    rl   c                  C   sn   d\} }t || }d}tjdddd}tj||d}t||d}|j|ksTt	t
| |ksjt	dS )	z!Test that blockshape can be used.)ra   r   r%   ))r   r   r   rb   r   r   r`   ra   rH   N)r
   rK   rL   rM   rZ   rN   rO   r   rI   r1   rP   rQ   )Z	new_shaper?   Znew_blockdimsr>   rS   rT   Zcheck1r   r   r   test_rechunk_blockshape   s    
rn   c                  C   s*   t jddd} | jddj| jks&td S )Nr   r   rH   r   )rN   onesr   dtyper1   rT   r   r   r   
test_dtype   s    rt   c                  C   s   t jddd} | jddid}|jdks,tt jddd} | jddid}|jdksXtt jddd} | jddid}|jd	kstt jddd} | jd d
dd}|jdkstd S )N   rv   r      rH   r      )ry   ry   rx   rx   rx   rz   rv   r{   autor   r   ))r   r   r   r   r   r   r~   rN   rq   r   rI   r1   rT   rd   r   r   r   test_rechunk_with_dict   s    r   c                      s>   t jddd  ji dj jks&ttt fdd d S )Nru   rw   rH   c                      s    j ddS )Nr   rH   )r   r   rs   r   r   <lambda>       z/test_rechunk_with_empty_input.<locals>.<lambda>)rN   rq   r   rI   r1   pytestraises
ValueErrorr   r   rs   r   test_rechunk_with_empty_input   s    r   c                  C   sb   t jtddd} | jddjt jdddjks6t| jd dddjt jdddjks^td S )Nru   rw   rH   Nr   r   r   r   r   )rN   rO   rK   rq   r   rI   r1   rs   r   r   r   !test_rechunk_with_null_dimensions   s    "r   c                  C   sH   t jtddd} | d}|jdks,t|  | k sDtd S )Nr   r   rH   r%   )rf   )	rN   rO   rK   aranger   rI   r1   rQ   rP   r   r   r   r   test_rechunk_with_integer   s    
r   c                  C   sD   t d} tj| dd}|d}|jdks0t| | ks@td S )N*   r   rH   )rK   arrayrN   rO   r   rI   r1   rQ   rc   r   r   r   test_rechunk_0d   s
    

r   arrc                 C   s   |    | jdkstd S )Nr   )r   sizer1   )r   r   r   r   test_rechunk_empty_array   s    r   c                  C   s4   t jddd} | d}|jdks&tt| | d S )N)r   r9   rW   rH   r   r   )r   )r   r   r   r   r   rN   rq   r   rI   r1   r   r   r   r   r   test_rechunk_empty  s    
r   c                  C   s8   t jddd} | ddi}|jdks*tt| | d S )Nr   r   r%   rH   r   r   )r   r   rN   zerosr   rI   r1   r   r   r   r   r   test_rechunk_zero_dim_array	  s    r   c                  C   s:   t jddd} | ddd}|jdks,tt| | d S )N)r   r   r(   r9   r%   rH   r   r   )r   r   )r   r   r   r   r   rb   r   r   r   r   r   test_rechunk_zero_dim_array_II  s    r   c                  C   s*   t jddd} | | j}| |ks&td S )Nru   rw   rH   r   r   r   r   r   test_rechunk_same  s    r   c                  C   s:   t jddd} t jddd}|d}| j|jks6td S )Nru   )rz   )rv   r   rH   )rz   rz   r   r   r   r   r   #test_rechunk_with_zero_placeholders  s    
r   c                  C   s4   t jddd} | d}|jdks&tt| | d S )Nru   rw   rH   )r|   rx   r}   r   r   r   r   r   test_rechunk_minus_one$  s    
r   c                  C   s4   t jjddddd} | d}t|jdks0td S )Nr9   g?ra   )r9   r   rH   )r   r9   rG   )rN   rL   normalr   lendaskr1   r   r   r   r   test_rechunk_intermediates+  s    
r   c                  C   s0   t dd} | dkstt dd} | dks,td S )N)rx   	   r9   r9   )rx   r   r   r9      ry   r   )r   r   r   r%   r%   r%   r%   r%   r   r%   r   r   r   r   r   )r   r1   rH   r   r   r   test_divide_to_width1  s    

r   c                  C   s  t dd} | dkstt dd} | dks,tt dd} | dksBtt dd} | dksXtt dd} | d	ksntt d
d} | dkstt d
d} | dkstt dd} | dkstt dd} | dkstt dd} | dkstt dd} | dkstt dd} | dks
tt dd} | dks"tt dd} | dks:tt dd} | dksRtt dd} | dksjtt dd} | dkstd S )Nr]   r   r   r%   )r<   r9   r9   r   r<   r<   r   )(   
r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   )2   r   )r   rG   rG   )r   r   r   rX   r9   )r   r   rX   r9   )r*   rX   r9   )   r9   )    )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	   r1   rH   r   r   r   test_merge_to_number9  sD    
















r   r       cAr   c                 C   s   t | ||||dS )N)itemsizeblock_size_limit	threshold)r   )r>   r?   r   r   r   r   r   r   _plana  s    r   c                 C   s$   t | t |kst| |ks td S r   )r   r1   )stepsexpectedr   r   r   _assert_stepsk  s    r   c            
      C   s2  d} d}t dfd }t dfd }tdd}t|dg t| df|df}t||dfg t| f|f}t||fg t|f| f}t|| fg t| | f||f}t|||fg t||f| | f}t|| | fg t|| f| | f}t|| | fg t| | | | f| || | f}t|| || | fg t|| f| |f}t|| | f| |fg t| |  | | f|| | |  f}t|| |  | |  f|| | |  fg t|| | |  | | f|| || | |  f}t|| t| | f||fdd}t|||fg t|| f| |fd	d
}t|| | f| |fg d}t|| f| |fdd
}t||| f| |fg t|| f| |fddd}t|| d} dd }t|| f| |fdd
}t|dkst|d | |fksttt|d D ]^}|| }||d  }	t|	d t|d d kstt|	d t|d d kstqd S )Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   nanr   r<   r   r   )r   i  r   r]   i  i  r9   )r   r   )  r   ro   r   i r%   r|   r   g       @)floatr   r   r   r1   rg   )
cfZncnfr   mZsteps2iprevsuccr   r   r   test_plan_rechunkp  sZ    
"&.

"r   c                  C   s   d} d}t | | | | | f|||||f}t||||||fg t ||||| f| | | ||f}t|| | | || f| | | ||fg t | | ||| f| | | ||fdd}t|| | | || f| | | ||fg d S )Nr^   
r   r   r   r   r   r   r   r   r   r   g     @r   r   r   )r   r   r   r   r   r   test_plan_rechunk_5d  s    ""r   c                  C   s   d} d}| | }| |  }|| }||  }t ||f||f}t|||fg t ||f||f}t|||fg t ||f||f}t|||f||fg t |||f|||f}t||||f|||fg t |||f|||fdd}t||||f|||fg d S )Nr^   r   r`   r   r   )r   r   cfccffZfcr   r   r   r   test_plan_rechunk_heterogeneous  s     r   c                  C   sr   dd df} ddd f}t | |dd}t|dks6ttjd	d
d}|d|jd d f}t|jdk sntd S )Nrp   r   ) r   )i8 rx   )r   r   )r   r   )r   r   rH   i )r   r   r1   rN   rq   r   shaper   )rS   r-   r   rT   rd   r   r   r   test_plan_rechunk_asymmetric  s    r   c               	   C   sT   d} t jj| | dfd| dfd}tjdd}|| ddf}W 5 Q R X |rPtd S )Nr<   r`   r   )r   rI   T)record)rN   rL   r   warningscatch_warningsr   r1   )NrT   wr   r   r   test_rechunk_warning  s
    r   zshape,chunksr   ro   r   r   )r   r   c                 C   s@   t j| | d}||}t|j}tdd | D r<td S )NrH   c                 s   s*   | ]"}t |rt|d  dV  qdS )r   concatN)r   Zistaskr   
startswith)r   Ztaskr   r   r   r     s   
z6test_dont_concatenate_single_chunks.<locals>.<genexpr>)rN   rq   r   dictr   anyvaluesr1   )r   rI   rT   rd   dskr   r   r   #test_dont_concatenate_single_chunks  s    

r   c               	   C   s   t dt dfdf} t dt dfdf}tt| |}dtdd d fdtddd fffdtdd d fdtddd fffdtdd d fdtddd fffdtdd d fdtddd fffg}||kstd S )Nr   rx   r   r   r   rx   r   r   rA   r   r2   r1   r>   r?   resultr   r   r   r   test_intersect_nan  s        r   c                  C   s~   t dfdf} t dfdf}tt| |}dtdd d fdtddd fffdtdd d fdtddd fffg}||ksztd S Nr   r^   rW   r   r   r9   r   r   r   r   r   test_intersect_nan_single  s      r   c                  C   sP  t tdgd df} t tdgd df}tt| |}dtdd d fdtddd fffdtdd d fdtddd fffdtdd d fdtddd fffdtdd d fdtddd fffd	tdd d fdtddd fffd	tdd d fdtddd fffd
tdd d fdtddd fffd
tdd d fdtddd fffg}||ksLtd S )Nr   r   r^   rW   r   r   r9   r   r   r%   )r/   r   rA   r   r2   r1   r   r   r   r   test_intersect_nan_long  s            
r   c                  C   s   t d} t d}tjdd}| ||dj}|d}t	|j
d  sXtt	|j
d  spt|j
d d	ksttj|d
dd}t|| d S )Ndask.dataframeZpandasr   r9   r   NrW   r   r   rW   ))r;   r;   r^   rH   )r   importorskiprK   rL   ZrandnZfrom_pandasZ	DataFramer   r   isnanrI   rP   r1   rN   rO   r   )ddpdr   rT   r   r   r   r   r    test_rechunk_unknown_from_pandas/  s    


r   c                  C   sz   t d} | tjdddj}|d}t|j	d 
 sBtt|j	d 
 sZt|j	d dksltt|| d S )	Nr   r   r   r   rI   r   r   r   r   )r   r   rO   rN   rq   r   r   rK   r   rI   rP   r1   r   )r   rT   r   r   r   r   test_rechunk_unknown_from_array=  s    

r   z	x, chunks)r   r9   )r;   r9   r   )Nr   r   r   )r   r9   )r   r9   ra   )r9   r   c                 C   sF   t d}|| j}||}| |}t|j|j t|| d S )Nr   )r   r   rO   r   r   assert_chunks_matchrI   r   )rT   rI   r   rd   r   r   r   r   r   test_rechunk_unknownI  s    


r   c                  C   sd   t d} tjddd}| |j}|tdtdfdf}|d}t|j	|j	 t
|| d S )Nr   ra   )r   r   r   r   rW   r   )r   r   rN   rq   rO   r   r   r   r   rI   r   )r   rT   rd   r   r   r   r   r   test_rechunk_unknown_explicitd  s    

r   c                 C   sF   t | |D ]6\}}t| r4t| s@tq
||ks
tq
d S r   )r0   rK   r   r   rP   r1   )leftrightrT   rd   r   r   r   r   n  s    r   c               	   C   sD   t d} | tjdddj}t t |d W 5 Q R X d S )Nr   ra   rW   r   )N)r   r   r   )	r   r   rO   rN   rq   r   r   r   r   )r   rT   r   r   r   test_rechunk_unknown_raisesv  s    
r   c                  C   s   t dt dfdf} t dt dfdf}t| |}dtdd d fgdtdd d fggdtddd fgdtddd fggg}||kstd S )Nr   r   r   r   r   r   rx   r   r   r2   r1   r4   r3   r   r   r   r   r   test_old_to_new_single~  s    
""r   c                  C   sn   t dfdf} t dfdf}t| |}dtdd d fggdtddd fgdtddd fggg}||ksjtd S r   r   r   r   r   r   test_old_to_new  s    
"r   c                  C   s   t tdgd df} t tdgd df}t| |}dtdd d fgdtdd d fgdtdd d fgdtdd d fggdtdd	d fgdtd	d
d fggg}||kstd S )Nr   r   r^   rW   r   r   r   r%   r   r9   )r/   r   r   r2   r1   r   r   r   r   test_old_to_new_large  s    
"	r   c               	   C   sP   t d} tt"}t| | fdf| | | fdf W 5 Q R X dt|jksLtd S )Nr   r   Z
unchanging)r   r   r   r   r   strvaluer1   )r   r   r   r   r   test_changing_raises  s    &r   c                  C   s   d} d}t | |}dtddd fdtddd fdtddd fgdtddd fgdtddd fd	tddd fggg}||ks~td S )
Nr8   r:   r   r9   r   r   r   r%   r   )r   r2   r1   r   r   r   r   test_old_to_new_known  s    
,r   c                  C   s6   t d} | jdddd}t| dks2td S )Nz
dask.array)r   r9   r`   )r   r9   r9   rH   )r   r9   r   r   )r   r   rq   r   r   rQ   r1   )rN   rT   r   r   r   test_rechunk_zero_dim  s    
r   c                  C   s&   t jddd} | d}t| | d S )N)r*   rv   ))r*   )r9   r   r   r   r   r   rH   )r   r%   )rN   r   r   r   r   r   r   r   test_rechunk_empty_chunks  s    
r   c                  C   s4   t jddd} | d}| }t|dks0td S )N   r   rH   rx   r9   )rN   rq   r   Z__dask_graph__r   r1   )rT   rd   r   r   r   r   $test_rechunk_avoid_needless_chunking  s    
r   zshape,chunks,bs,expected)r`   r   r9   r   )r`   r   r9   r   )r`   r`   r9   r   )r<   r*   r9   )r*   r*   r(   )r<   )r   r   r   r   r(   r   r   r*   r   )r   r   r   r   c                 C   s>   t j| |fd}|jddi||jj d}|j|fks:td S )NrH   r   r   r   rN   rq   r   rr   r   rI   r1   )r   rI   bsr   rT   rd   r   r   r   test_rechunk_auto_1d  s    r  c                  C   s  t jddd} | jdddd| jj d}|jd	ks8tt jddd} | jd
d| jj d}|jdksjtt jddd} | jddid| jj d}|jd | jd kst|jd dkstt jddd} | jddid| jj d}|jd | jd kst|jd dkstd S )Nr   r   rH   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   P   )r  r   r   r   r   r   r   r   ra   ))
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r  r   r   r   r   r   test_rechunk_auto_2d  s    r  c                  C   sj   t jddd} | jdddd| jj d}|jd | jd ksBt|jd	 d
ksTt|jd d
ksftd S )N)r<   r<   r<   r   rH   r   r      r   r   r   ra   r   r   r   r   r   r   test_rechunk_auto_3d  s
    r  r   r`   r   c              	   C   s  t jddiX tj| ddfddd}|d}|jd| d	  d
d
fksNt|dj|jksdtW 5 Q R X t jddi6 |d}| dkr|jdkstn|jdkstW 5 Q R X t jddi@ tj| ddfddd}|d}|jd|  ddfkstW 5 Q R X d S )Narray.chunk-size10MiBr   r   r   r   uint8rI   rr   r   r^   r9   r   Z7MiBr`   ))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*   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*   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*   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*   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*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r(   r   r   1MiBZfloat64rp   )j  r  i  r   configsetrN   rq   r   rI   r1   )r   rT   rd   zr   r   r   test_rechunk_auto_image_stack  s    
 

r  c               	   C   s   t jddi. tjdddd} | d}|jdks:tW 5 Q R X t jdd	i |d}|jd
ksntW 5 Q R X t jdd	i> |ddi}|jdkst|ddi}|jdkstW 5 Q R X d S )Nr	  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   r   r   r   r   r   r   r   i  i  r  r   ))dr   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   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   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   r   r   r   r   r   r   r   r   r   r   r   r   )r   )
h   r  r  r  r  r  r  r  r  @   r   r  )rT   rd   r  r   r   r   test_rechunk_down  s    

r  c               	   C   sF   t jddi, tjddd} | d}|jdks8tW 5 Q R X d S )Nr	  Z1Br9   )r   rH   r   )r   r  r   r   r   r   test_rechunk_zero%  s    
r  c               	   C   s   t jddd} | ddijdks&t| | j dijdksBttt}| d	di W 5 Q R X d	t	|j
ksxttt}| d
di W 5 Q R X dt	|j
ksttt}| ddi W 5 Q R X dt	|j
kstd S )N)r   r%   r   r   rH   r|   r   )r   r   r   r   r   r   r   )ro   r  )r   r   r   r   Zblahr`   Z100iz-100)rN   r   r   rI   r1   ndimr   r   	TypeErrorr   r   r   )rT   infor   r   r   test_rechunk_bad_keys,  s    r  c                  C   s\   d} t jt| dd}|jddd}|jddd}|jd dksFt|jd d	ksXtd S )
N   r`   rH   TrI   ZbalanceFr   r`   r`   r<   n   r$  rN   rO   rK   r   r   rI   r1   arr_lenrT   balanced
unbalancedr   r   r   test_balance_basicsA  s    r*  c                  C   sX   d} t t| }|jddd}|jddd}|jd dksBt|jd dksTtd S )	Nr   r`   Tr!  Fr   r"  r#  r%  r&  r   r   r   test_balance_chunks_unchangedK  s    r+  c                  C   s   d} t t| }|jddd}|jddd}|jd dksBt|jd dksTtd	} t t| }|jd
dd}|jd
dd}|jd dkst|jd dkstd S )N   r   Tr!  Fr   )r   r   r%   )r   r   r   r   r*   r%   rm   )r%   r%   r   r%  r&  r   r   r   test_balance_smallU  s    r-  c                  C   sd   d} d}t t| }|j| | dd}|j| | dd}|jd dksNt|jd dks`td S )	Nr`   rx   Tr!  Fr   )r,  r,  r,  r,  r,  r,  r,  r   )	ry   ry   ry   ry   ry   ry   ry   ry   r   r%  r'  Zn_chunksrT   r(  r)  r   r   r   test_balance_n_chunks_sizeg  s    r/  c               	   C   s   d} d}t t| }tjtdd |j| | dd}W 5 Q R X |j| | dd}|j|jksft	d}|j| | dd d S )	Nr`   r   zTry increasing the chunk size)matchTr!  Fr9   )
rN   rO   rK   r   r   ZwarnsUserWarningr   rI   r1   r.  r   r   r   test_balance_raisesr  s    r2  c                  C   sX   d} t tjj| | fd}|jddd}|jddd}|jdksFt|jdksTtd S )	N   r   )r`   r`   Tr!  F)r`   r`   r9   r5  )i   r7  r6  rN   rO   rK   rL   rM   r   rI   r1   r   rT   r(  r)  r   r   r   test_balance_basics_2d  s    r:  c                  C   sd   d} t tjj| | fd}|jddd}|jddd}|jd| ffksLt|jd| ffks`td S )	Nr3  r4  )r`   r|   Tr!  Fr5  r6  r8  r9  r   r   r   "test_balance_2d_negative_dimension  s    r;  c                  C   s`   d} t tjj| | fd}|jddd}|jddd}|j|jksHt|jd | fks\td S )Nr3  r4  )Z10MBr|   Tr!  Fr   r8  r9  r   r   r   test_balance_different_inputs  s    r<  c                  C   s~   ddddddddd	d
ddddg} | D ]T}t ddD ]D}ttjj|d}|jt|| dd}t|jd |ks2t	q2q$d S )Ni  i  i  i  i  i  i  i	  i  i  i  i%  i'  i-  r   r<   r4  Tr!  r   )
rg   rN   rO   rK   rL   rM   r   r   rI   r1   )Z
array_lensr   ZnchunksrT   rd   r   r   r    test_balance_split_into_n_chunks  s(    r=  c                  C   sH   t jddd} | d}t jddd}||  } }| d}t|| d S )N)rx   rx   r   rH   )r   r   r   r   r   )rN   rq   r   r   )rS   r   r   r   r   r   test_rechunk_with_zero  s    


r?  c                  C   s   ddl m}  d}d}t| ||}dtddd fdtddd ffdtddd fdtddd fffdtddd fdtddd ffdtddd fdtddd fffg}||kstd S )Nr   r   r   ro   )r   r  r   r   r   dask.array.rechunkr   rA   r2   r1   r   r4   r3   r   r   r   r   r   "test_intersect_chunks_with_nonzero  s    
rE  c                  C   sl  ddl m}  d}d}t| ||}dtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffg}||ks4td}d}t| ||}dtddd fdtddd ffdtddd fdtddd fffdtddd fdtddd ffdtddd fdtddd fffg}||kstd}d	}t| ||}dtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffg
}||ks@td}d
}t| ||}dtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffdtddd fdtddd fffg}||kshtd S )Nr   r@  rA  )r>  r  r   r   r   r%   ))r   r   r   r   r   r  ))r   r   r   r   r  rB  rD  r   r   r   test_intersect_chunks_with_zero  sj                              rF  c                  C   s   ddl m}  d}d}| ||}dtddfgdtddfgdtddfggg}||ksZtd}d}| ||}dtddfgdtddfggg}||kstd}d	}| ||}dtddfgd
tddfgd
tdd
fgd
td
dfggg}||kstd S )Nr   )r   )r   ))r   r   r   r   r   )r   )r   ))r   r   r   r   r   )rC  r   r2   r1   )r   r4   r3   r   r   r   r   r   test_old_to_new_with_zero  s"    
0
"
:rG  )r   r   r   )cr   	itertoolsr   r   r   rK   r   Z
dask.arrayr   rN   rC  r   r   r   r   r   r   r	   r
   r   r   Zdask.array.utilsr   Z
dask.utilsr   r6   rC   rF   rV   r[   r_   re   rj   rl   rn   rt   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r*  r+  r-  r/  r2  r:  r;  r<  r=  r?  rE  rF  rG  r   r   r   r   <module>   s   
0E

	 &
(

E	 











H