U
    /eNh                     @   s  d dl Z e d d dlZd dlmZ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 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&e j'(d#dd$d%d&d'd gd(d) Z)d*d+ Z*d,d- Z+d.d/ Z,d0d1 Z-d2d3 Z.d4d5 Z/e j'(d6d7d8d9 Z0d:d; Z1d<d= Z2d>d? Z3e j'(d@d d dAdBd dAdCdCdAdDdEdAgdFdG Z4dHdI Z5dJdK Z6e j'(dLdMdNgdOdP Z7dQdR Z8dSdT Z9dUdV Z:dWdX Z;dYdZ Z<d[d\ Z=e j'(d#d$d%d&d'gd]d^ Z>d_d` Z?dadb Z@e j'(dcddddgdedegdfdggdhdigdjdkgdldmgdndogdpdqggdrds ZAdtdu ZBe j'(dvdwdxdydzd{d|d}d~dddddgd dgfg
dd ZCe j'(dddddddgdd ZDdS )    Nnumpy)assert_array_almost_equalassert_array_equalsliding_window_view)	
boundariesconstantensure_minimum_chunksizenearestoverlapoverlap_internalperiodicreflecttrim_internal)	assert_eq	same_keysc                  C   s  t dd} tj| dd}t|ddd}|jdd	}|jd
ksHtt 	ddddddddddg
ddddddddddg
dddddddddd g
d!d"d#d$d%d$d%d&d'd(g
d)d*d+d,d-d,d-d.d/d0g
d1d2d3d4d5d4d5d6d7d8g
dddddddddd g
d!d"d#d$d%d$d%d&d'd(g
d)d*d+d,d-d,d-d.d/d0g
d1d2d3d4d5d4d5d6d7d8g
d9d:d;d<d=d<d=d>d?d@g
dAdBdCdDdEdDdEdFdGdHg
g}t
|| tt|ddd|std S )IN@      r      r   chunks      r   r   sync)	scheduler)   r      r!   r      r   r!   r      r   	   
                                                                      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   )nparangereshapeda
from_arrayr   computer   AssertionErrorarrayr   r   )xdgresultexpected rh   A/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/tests/test_overlap.pytest_overlap_internal   s,    
rj   c                  C   s8  t dd} tj| dd}t|ddd}|jdks<tt d	d
dddddddg	dddddddddg	ddddddddd g	d!d"d#d$d$d%d&d'd(g	ddddddddd g	d!d"d#d$d$d%d&d'd(g	d)d*d+d,d,d-d.d/d0g	d1d2d3d4d4d5d6d7d8g	d9d:d;d<d<d=d>d?d@g	dAdBdCdDdDdEdFdGdHg	g
}t	|| t
t|ddd|s4td S )INr   r   r   r   r   r   r   r   r   ))r   r   )r   r!   r   r   r   r"   r   r!   r   r#   r   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r   r   ra   rb   r   r   rc   rd   rf   rg   rh   rh   ri    test_overlap_internal_asymmetric5   s&    
ro   c                  C   s   t dd} tj| dd}t|ddd}|jdks<tt d	d
ddddddddddddddddddddgdddddddddd d!d d!d"d#d$d%d$d%d&d'd(gg}t	|| t
t|ddd|st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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   rm   rn   rh   rh   ri   &test_overlap_internal_asymmetric_smallN   sB    .
rr   c                  C   s4   t jddd} t| ddddd}|jd	ks0td S )
N)rC   rW   r%   r%   r   r   r   r   r   )Zaxesboundary))r   r   r   r   )r   r   r   r   r   r   )r^   onesr   r   ra   )rd   erh   rh   ri   test_trim_internalw   s    rw   c                  C   s   t dd} tj| dd}t|ddd}|jd |jd d ksHt|jd	 |jd	 ks`tt|d	d d f |d
d d f  t|dd d f |dd d f  d S )Nr   r   r   r   r   r   axisdepthr   r   )	r[   r\   r]   r^   r_   r   shapera   r   rc   rd   rv   rh   rh   ri   test_periodic~   s    "r   c                  C   s   t d} tj| dd}t|ddd}t ddddddd	d
ddddddg}t|| t|ddd}t dddddd	d
dddddg}t|| d S Nr%   r    r   r   r   rx   r   r"   r   r!   r   r#   r   r$   )r[   r\   r^   r_   r   rb   r   rc   rd   rv   rg   rh   rh   ri   test_reflect   s    
&
"r   c                  C   s   t d} tj| dd}t|ddd}t ddddddd	d
ddddddg}t|| t|ddd}t dddddd	d
dddddg}t|| d S r   )r[   r\   r^   r_   r
   rb   r   r   rh   rh   ri   test_nearest   s    
&
"r   c                  C   s   t dd} tj| dd}t|dddd}|jd |jd d	 ksJt|jd
 |jd
 ksbtt|d
d d f t j	d| j
dd  t|dd d f t j	d| j
dd  d S )Nr   r   r   r   r   r   r%   )ry   rz   valuer   r   r   dtyper{   )r[   r\   r]   r^   r_   r   r}   ra   r   ru   r   r~   rh   rh   ri   test_constant   s    &r   c                  C   sV  t dd} tj| dd}t|ddddd	d}t ddddddddddg
ddddddddddg
d
dddddddd
dg
ddddddddddg
ddddddddddg
dd d!d"d#d$d%d&dd g
d'd(d)d*d+d,d-d.d'd(g
d/d0d1d2d3d4d5d6d/d0g
d7d8d9d:d;d<d=d>d7d8g
d?d@dAdBdCdDdEdFd?d@g
ddddddddddg
ddddddddddg
g}t|| d S )GNr   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/   r0   r1   r:   r3   r4   r5   r6   r7   r8   r9   rB   r;   r<   r=   r>   r?   r@   rA   rJ   rC   rD   rE   rF   rG   rH   rI   rR   rK   rL   rM   rN   rO   rP   rQ   rZ   rS   rT   rU   rV   rW   rX   rY   )r[   r\   r]   r^   r_   r   rb   r   r   rh   rh   ri   test_boundaries   s&    r   c                  C   s  t dd} tj| dd}t|ddddd	dd
}|jdksFtt ddddddddddddgddddddddddddgddddddddddddgddddddddddddgdddddddddd d!d!gd"d"d#d$d%d&d%d&d'd(d)d)gd*d*d+d,d-d.d-d.d/d0d1d1gd2d2d3d4d5d6d5d6d7d8d9d9gdddddddddd d!d!gd"d"d#d$d%d&d%d&d'd(d)d)gd*d*d+d,d-d.d-d.d/d0d1d1gd2d2d3d4d5d6d5d6d7d8d9d9gd:d:d;d<d=d>d=d>d?d@dAdAgdBdBdCdDdEdFdEdFdGdHdIdIgddddddddddddgddddddddddddgg}t	|| t
|t|ddddd	dd
s tt ddg}dJdK t|D }t||dd	dd
}|jdksdtt	|| t
|t|ddddd	dd
stt|dddddLdd
}t ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddd d!g
d"d#d$d%d&d%d&d'd(d)g
d*d+d,d-d.d-d.d/d0d1g
d2d3d4d5d6d5d6d7d8d9g
ddddddddd d!g
d"d#d$d%d&d%d&d'd(d)g
d*d+d,d-d.d-d.d/d0d1g
d2d3d4d5d6d5d6d7d8d9g
d:d;d<d=d>d=d>d?d@dAg
dBdCdDdEdFdEdFdGdHdIg
ddddddddddg
ddddddddddg
g}t	|| |jdMks2tt ddg}dNdK t|D }t||ddLdd
}t	|| |jdMkstd S )ONr   r   r   r   r   r   r   d   r   rz   rt   )r   r   r   r"   r   r!   r   r#   r   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   c                 S   s   i | ]\}}||qS rh   rh   .0kvrh   rh   ri   
<dictcomp>   s      z test_overlap.<locals>.<dictcomp>none)r   r    c                 S   s   i | ]\}}||qS rh   rh   r   rh   rh   ri   r     s      )r[   r\   r]   r^   r_   r   r   ra   rb   r   r   Zuint16	enumerate)rc   rd   re   rg   Zu_depthrh   rh   ri   test_overlap   st    
&
&

r   c               	   C   s   t jddd} t jj| dddd | jdd	 dddd tt t jj| ddd
d W 5 Q R X tt | jdd	 ddd
d W 5 Q R X t jddd} t jj| ddd
d d S )Nr   r!   r   r   r   T)Zallow_rechunkc                 S   s   | S Nrh   rc   rh   rh   ri   <lambda>      z2test_overlap_allow_rechunk_kwarg.<locals>.<lambda>Fc                 S   s   | S r   rh   r   rh   rh   ri   r     r   r   )r^   r\   r   map_overlappytestraises
ValueErrorarrrh   rh   ri    test_overlap_allow_rechunk_kwarg  s     r   c               	   C   sD   t jddd} tt" | jdd ddid| jd	 W 5 Q R X d S )
Nr%   r!   r   c                 S   s   | t |  S r   lenr   rh   rh   ri   r     r   z<test_asymmetric_overlap_boundary_exception.<locals>.<lambda>r   )r   r   r   rz   rt   r   )r^   r\   r   r   NotImplementedErrorr   r   r   rh   rh   ri   *test_asymmetric_overlap_boundary_exception  s       r   c               
   C   s  t jddd} | jdd d| jdd}t|tdd d d  t jddd} | jd	d td| jdd}td
d |jD st	t|tdd d d  t j
ddd} | jdd ddidd}|jd | jd kst	tdd} t j| dd}|jdd d|jdd}|jdd dddddd|jd}|jdd ddiddi|jd}|jdd ddiddd|jd}t|| d  t|| d  t|| d  t|t| ddddf d | ddddf d  g| ddddf d | ddddf d  gg d S )!Nr%   r!   r   c                 S   s   | t |  S r   r   r   rh   rh   ri   r   #  r   z"test_map_overlap.<locals>.<lambda>r   r   )rz   r   rt   c                 S   s   | t |  S r   r   r   rh   rh   ri   r   (  r   c                 S   s   g | ]}t |tkqS rh   )typeint)r   srh   rh   ri   
<listcomp>*  s     z$test_map_overlap.<locals>.<listcomp>rs   )r"   r   c                 S   s   | S r   rh   r   rh   rh   ri   r   .  r   r   r   r   r+   r   r   r   c                 S   s
   | | j  S r   sizer   rh   rh   ri   r   4  r   c                 S   s
   | | j  S r   r   r   rh   rh   ri   r   7  r   r   r   r   c                 S   s
   | | j  S r   r   r   rh   rh   ri   r   =  r   c                 S   s
   | | j  S r   r   r   rh   rh   ri   r   @  r   rl   r'   r   r   r   )r^   r\   r   r   r   r[   Zint64allr}   ra   ru   r   r]   r_   block)rc   yzrd   Zexp1Zexp2Zexp3Zexp4rh   rh   ri   test_map_overlap!  sd             ^r   c                  C   sV   t jddd} | jdd ddd}t|jd	| jd  ks>tt|tdd
  d S )Nr%   r!   r   c                 S   s   | d S Nr   rh   r   rh   rh   ri   r   R  r   zKtest_map_overlap_escapes_to_map_blocks_when_depth_is_zero.<locals>.<lambda>r   r   r   r   r   )	r^   r\   r   r   daskZ	numblocksra   r   r[   rc   r   rh   rh   ri   9test_map_overlap_escapes_to_map_blocks_when_depth_is_zeroP  s    r   rt   r   r   r
   r   c                 C   s4   t jddd}|jdd d| |jd}t|| d S )Nr%   r!   r   c                 S   s   | S r   rh   irh   rh   ri   r   \  r   z+test_map_overlap_no_depth.<locals>.<lambda>r   r   )r^   r\   r   r   r   )rt   rc   r   rh   rh   ri   test_map_overlap_no_depthW  s    r   c                  C   sp  t jddd} t jddd}t jdd | |ddd}t|d	td  t jdd
d} t jddd}t jdd | |ddd}|jdkstt|d	td  t jddd} t jddd}t jdd | |ddd}|jdkstt|d	td  t jddd} t dddd}t jdd | |ddd}|jdksBt|j	dksRtt|d	tdtj
   d S )Nr%   r!   r   c                 S   s   | | S r   rh   r   rh   rh   ri   r   d  r   z-test_map_overlap_multiarray.<locals>.<lambda>r   r   r   r   )r   r"   r!   )r!   r"   r   c                 S   s   | | S r   rh   r   rh   rh   ri   r   j  r   ))r   r"   r"   r   r%   r   r   r   c                 S   s   | | S r   rh   r   rh   rh   ri   r   q  r   )r   )r   r   c                 S   s   | | S r   rh   r   rh   rh   ri   r   x  r   )r   r   r   r%   )r^   r\   r   r   r[   r   ra   r]   rechunkr}   Znewaxisrc   r   r   rh   rh   ri   test_map_overlap_multiarray`  s(    r   c                  C   sP   t jddd} t jddd}t jdd | |dd	}t|jd t| d
 d S )Nr   r%   r   r   r!   c                 S   s   | | S r   rh   r   rh   rh   ri   r     r   z6test_map_overlap_multiarray_defaults.<locals>.<lambda>r   rt   g      4@)r^   ru   r   r   r}   sumr   rh   rh   ri   $test_map_overlap_multiarray_defaults  s
    r   c               	      s   t jddd t jddd fdd} | ddgdks>t| ddgd	ksRt| ddgd
ksft| ddgdkszt| ddgdkst| ddgdksttt | ddg W 5 Q R X d S )Nr!   r   r   c              	      s    t jdd  | dddd S )Nc                 S   s   |   |   S r   )r   r   rh   rh   ri   r     r   zKtest_map_overlap_multiarray_different_depths.<locals>.run.<locals>.<lambda>r   Fr   )rz   r   trimrt   )r^   r   r`   rz   r   rh   ri   run  s    z9test_map_overlap_multiarray_different_depths.<locals>.runr   r%   r   r'   r)   r   r+   r/   r9   r   )r^   ru   ra   r   r   r   )r   rh   r   ri   ,test_map_overlap_multiarray_different_depths  s    r   c               	   C   sR   t jddd} t jddd}tt" t jdd | |ddd	  W 5 Q R X d S )
Nr%   r   r   r    c                 S   s   | | S r   rh   r   rh   rh   ri   r     r   zHtest_map_overlap_multiarray_uneven_numblocks_exception.<locals>.<lambda>Fr   )Zalign_arraysrt   )r^   r\   r   r   r   r   r`   r   rh   rh   ri   6test_map_overlap_multiarray_uneven_numblocks_exception  s        r   c               	   C   sf   dd } t jddd}t jddd}t j| ||dd	d
dd}t|| |jdksTtt| d d S )Nc                 S   s   | j |j  }td| S Nr"   r"   )r   r[   ru   r   rh   rh   ri   func  s    z9test_map_overlap_multiarray_block_broadcast.<locals>.funcr'   r'   r   )r+   r'   )r   r   r   r   Tr   )r   rz   r   rt   r   g      v@)r^   ru   r   r   r}   ra   r   )r   rc   r   r   rh   rh   ri   +test_map_overlap_multiarray_block_broadcast  s          
r   c                  C   s   t jdddt jdddt jdddg} dd	 }t j|f| d
ddddgdd}tdd | D }|jdksrtt| |kstd S )N)r'   r   r   )r   r   r   r   )r'   r   r   ))r   r   r   r   )r'   r   r   ))r   r   r   r   c                  W   s   t tdd | D gS )Nc                 s   s   | ]}|j V  qd S r   r   r   rc   rh   rh   ri   	<genexpr>  s     zEtest_map_overlap_multiarray_variadic.<locals>.func.<locals>.<genexpr>r[   rb   r   )argsrh   rh   ri   r     s    z2test_map_overlap_multiarray_variadic.<locals>.funcr   r   Fr   r   )r   rz   r   	drop_axisrt   c                 s   s(   | ] }t j|d d dddjV  qd S )Nr   r   r   )mode)r[   padr   r   rh   rh   ri   r     s     z7test_map_overlap_multiarray_variadic.<locals>.<genexpr>r"   )r^   ru   r   r   r}   ra   r   r`   )xsr   rc   Zsize_per_slicerh   rh   ri   $test_map_overlap_multiarray_variadic  s&    r   r   )r   r   rq   r   r   r   rk   r   ))r|   )r{   )r   r|   )r|   r{   )r{   r   r|   c                    s   t jjdddfdd}|}d}d}tr<fn fdd	 D  t fd
dt|D }t j|||td	 }t
|| d S )N)r!   r%   r   )r   r!   r   r   c                    s   | j  dS )N)ry   )Zmeanr   )r   rh   ri   _mean  s    zItest_map_overlap_trim_using_drop_axis_and_different_depths.<locals>._mean)r   r   r
   )r   r"   r   c                    s   g | ]}| j  qS rh   )ndim)r   rd   r   rh   ri   r     s     zNtest_map_overlap_trim_using_drop_axis_and_different_depths.<locals>.<listcomp>c                 3   s"   | ]\}}| krd n|V  qdS r   Nrh   )r   r   rd   )
_drop_axisrh   ri   r     s     zMtest_map_overlap_trim_using_drop_axis_and_different_depths.<locals>.<genexpr>)rz   rt   r   r   )r^   randomZstandard_normalr[   Zisscalartupler   r   floatr`   r   )r   r   rg   rt   rz   r   rh   )r   r   rc   ri   :test_map_overlap_trim_using_drop_axis_and_different_depths  s"         
r   c                  C   sh   t jddd} | d}dd }t j|| ddd	d
}|jdksBtt j||ddd	d
}|jdksdtd S )Nr   r    r   r%   c                 S   s   | dd S )Nr   r|   rh   r   rh   rh   ri   oversum  s    zTtest_map_overlap_assumes_shape_matches_first_array_if_trim_is_false.<locals>.oversumr   Fr   )rz   r   rt   )r^   ru   r   r   r}   ra   )x1Zx2r   Zz1Zz2rh   rh   ri   Ctest_map_overlap_assumes_shape_matches_first_array_if_trim_is_false  s    
r   c               	   C   s   dd } t d}tt6 t || ddd}| dks@t|jdksNtW 5 Q R X tt6 t || ddd}| d	kst|jdkstW 5 Q R X tt6 t || ddd
}| d	kst|jdkstW 5 Q R X d S )Nc                 S   s   t |  S r   r   r   rh   rh   ri   r     s    z3test_map_overlap_deprecated_signature.<locals>.funcr"   r   r   Tr   r   r!   F)	r^   ru   r   ZwarnsFutureWarningr   r`   ra   r}   )r   rc   r   rh   rh   ri   %test_map_overlap_deprecated_signature  s    
r   c                  C   sb   t dddt} tj| dd}t|ddddddd}t|ddddd	}t	||  d S )
N   r'   r   r   r!   r   r
   r   r   )
r[   r\   r]   Zastyper   r^   r_   r   r   r   )adarrZgarrZtarrrh   rh   ri   test_nearest_overlap4  s
    r   rz   r   r   r!   r   r#   c                 C   s   t ddd}tj|dd}t|| dd}t|| dd}t|| dd}t|| d	d}t|| dd
}t|| t|| dd
}t|| t|| dd
}t|| t|| d	d
}t|| d S )Nr   r%   )r!   r   r   r   r   r
   r   rE   r   )r[   r\   r]   r^   r_   r   r   r   )rz   rg   r   Z	reflectedr
   r   r   rf   rh   rh   ri   /test_different_depths_and_boundary_combinations=  s    



r   c                  C   sB   t ddd} tj| dd}t|ddd}| j|jks>td S )Nr-   r   r$   )rq   r   r   r   r"   r   r   r   )r[   r\   r]   r^   r_   r   r}   ra   )r   r   re   rh   rh   ri   test_one_chunk_along_axis\  s    r   c                  C   sL   t ddd} tj| dd}t|dddddd}|j|jksHtd S )Nr$   r   )r   r   r   r   r   )r[   r\   r]   r^   r_   r   r   ra   )r   r   brh   rh   ri   test_constant_boundariesc  s    r   r   )r!   r!   r   r   ))r"   r"   r"   r"   )r&   r   c                    s|   t ddd}tj|| d}ddd t| dd}t fd	d
|jd D sXtt fdd
|jd D sxtd S )Nr   r'   r   r   r   r   r   r   c                 3   s   | ]}| d  d kV  qdS )r   r   Nrh   r   cr   rh   ri   r   x  s     zItest_depth_greater_than_smallest_chunk_combines_chunks.<locals>.<genexpr>r   c                 3   s   | ]}| d  d kV  qdS )r   r   Nrh   r   r   rh   ri   r   y  s     )	r[   r\   r]   r^   r_   r   r   r   ra   )r   r   r   outputrh   r   ri   6test_depth_greater_than_smallest_chunk_combines_chunksj  s    
 r   c               	   C   sV   t ddd} tj| dd}ddd}tjtdd	 t||d
d W 5 Q R X d S )Nr   r'   )r"   r!   r   r(   r   r   zThe overlapping depthmatchr   r   )	r[   r\   r]   r^   r_   r   r   r   r   )r   r   rz   rh   rh   ri   test_depth_greater_than_dim|  s
    
r   c                  C   s   t jtddddd} t| dddd}tddd	d
ddddgddddddddgddddddddgddddddddgg}t|| 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   rb   r   )rc   expresrh   rh   ri   test_none_boundaries  s    r   c                  C   s^   t jddd} | jdd ddd}t|jd	k s4t| jd
d ddd}t|jdk sZtd S )Nrs   r    r   c                 S   s   | S r   rh   r   rh   rh   ri   r     r   z$test_overlap_small.<locals>.<lambda>r   r   r      c                 S   s   | S r   rh   r   rh   rh   ri   r     r   r   r^   ru   r   r   r   ra   r   rh   rh   ri   test_overlap_small  s
    r   c                     s|   t jd t jjddd dd  fddt jD } t| d jt| d	 j@ t jkshtt j| d
di d S )Nr   )r$   r$   r   r   c                 S   s   | j dkst| S r   )r}   ra   r   rh   rh   ri   check  s    z8test_no_shared_keys_with_different_depths.<locals>.checkc                    sD   g | ]< j d d j fddtjD ddjjdqS )c                 S   s   | d S r   rh   )r   rh   rh   ri   r     r   zFtest_no_shared_keys_with_different_depths.<locals>.<listcomp>.<lambda>c                    s   i | ]}|t  |kqS rh   )r   )r   jr   rh   ri   r     s      zHtest_no_shared_keys_with_different_depths.<locals>.<listcomp>.<dictcomp>r   )r   rz   rt   r   )r   r   ranger   Z
map_blocks)r   r   r   r   ri   r     s    z=test_no_shared_keys_with_different_depths.<locals>.<listcomp>r   r   zsingle-threaded)	r^   r   seedr   r   setr   ra   r`   )rrh   r   ri   )test_no_shared_keys_with_different_depths  s    
*r  c                  C   s  t jddd} | jdd ddidd	}t| | td
d |jD sHttdd |jD s`t| jdd ddidd	}t| | tdd |jD sttdd |jD st| jdd ddddd	}t| | tdd |jD sttdd |jD std S )N)r/   r/   rs   r   c                 S   s   | S r   rh   r   rh   rh   ri   r     r   z3test_overlap_few_dimensions_small.<locals>.<lambda>r   r   r   r   c                 s   s   | ]}t |d  tV  qdS r   N
isinstancer   r   r   rh   rh   ri   r     s     z4test_overlap_few_dimensions_small.<locals>.<genexpr>c                 s   s   | ]}t |d  tV  qdS r   Nr  r   r  rh   rh   ri   r     s     c                 S   s   | S r   rh   r   rh   rh   ri   r     r   c                 s   s   | ]}t |d  tV  qdS r  r  r  rh   rh   ri   r     s     c                 s   s   | ]}t |d  tV  qdS r  r  r  rh   rh   ri   r     s     c                 S   s   | S r   rh   r   rh   rh   ri   r     r   r   c                 s   s   | ]}t |d  tV  qdS r  r  r  rh   rh   ri   r     s     c                 s   s   | ]}t |d  tV  qdS r  r  r  rh   rh   ri   r     s     )r^   ru   r   r   anyr   ra   r   rc   r   r   r   rh   rh   ri   !test_overlap_few_dimensions_small  s    


r  c                  C   s   t jddd} | jdd ddidd	}| jd
d ddidd	}| jdd ddddd	}t|jt|jksptt|jt|jk stt|jdt|j k std S )N)r   r   rs   r   c                 S   s   | S r   rh   r   rh   rh   ri   r     r   z-test_overlap_few_dimensions.<locals>.<lambda>r   r   r   r   c                 S   s   | S r   rh   r   rh   rh   ri   r     r   c                 S   s   | S r   rh   r   rh   rh   ri   r     r   r   r%   r   r
  rh   rh   ri   test_overlap_few_dimensions  s    r  c                 C   s   t jtddddd}t jj|dd| dd	}t jj|dd| dd	}t||ks^tt jj|dd
| id	}t jj|dd
| id	}t||kstt jj|d| d	}t jj|d| d	}t||kstd S )Nr3   r   r   )r   r"   r   r   r   r   r   r   )	r^   r_   r[   r\   r]   r   Ztrim_overlapr   ra   )rt   rc   Zx_overlapedZ	x_trimmedrh   rh   ri   test_trim_boundary  s      r  c                  C   sV   t d} tj| dd}|jdd ddd}td	d
 |jd D sHtt||  d S )Nr&   r!   r   c                 S   s   | S r   rh   r   rh   rh   ri   r     r   z;test_map_overlap_rechunks_array_if_needed.<locals>.<lambda>r   r   r   c                 s   s   | ]}|d kV  qdS r  rh   r   rh   rh   ri   r     s     z<test_map_overlap_rechunks_array_if_needed.<locals>.<genexpr>)	r[   r\   r^   r_   r   r   r   ra   r   )rg   rc   r   rh   rh   ri   )test_map_overlap_rechunks_array_if_needed  s
    
r  c                  C   s@   t jjddd} | jdd ddd}td	d
 |jD s<td S )N)i\     r  )r   r  r  r   c                 S   s   | S r   rh   r   rh   rh   ri   r     r   zOtest_map_overlap_rechunks_array_along_multiple_dims_if_needed.<locals>.<lambda>)r   r   r   r   r   c                 s   s    | ]}t d d |D V  qdS )c                 s   s   | ]}|d kV  qdS r  rh   r   rh   rh   ri   r     s     zZtest_map_overlap_rechunks_array_along_multiple_dims_if_needed.<locals>.<genexpr>.<genexpr>N)r   )r   r   rh   rh   ri   r     s     zPtest_map_overlap_rechunks_array_along_multiple_dims_if_needed.<locals>.<genexpr>)r^   r   r   r   r   ra   )Zrandfilteredrh   rh   ri   =test_map_overlap_rechunks_array_along_multiple_dims_if_needed  s    r  zchunks,expectedr   rs   )r%   r%   r   )r%   r&   )r/   r/   r/   r   )r/   r/   r&   r%   )r/   r/   r%   r   )r/   r/   r&   )r   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                 C   s   t d| }||kstd S )Nr%   )r	   ra   )r   rg   actualrh   rh   ri   test_ensure_minimum_chunksize  s    
r  c               	   C   s,   d} t jtdd td|  W 5 Q R X d S )N)r!   r   r   r   z#overlapping depth 10 is larger thanr   r%   )r   r   r   r	   r   rh   rh   ri   *test_ensure_minimum_chunksize_raises_error  s    r  z!shape, chunks, window_shape, axis))r   r#   r   )r   )r   r   r   r   r   )r"   r   r   ))rC   r9   r   r!   r   r   ))r0   r"   )r#   r   )r$   r"   r"   r   )r  r"   r"   r{   )r  r"   r"   N))r$   r   r"   rp   N)r  r"   )r"   r"   r"   )r   r   r   )r  r"   r   )r   r{   r  r"   r{   c                 C   sV   ddl m} tjtt| | |d}t|||}|| ||}t	|| d S )Nr   r   r   )
Zdask.array.numpy_compatr   r^   r_   r[   r\   prodr]   r`   r   )r}   r   window_shapery   Znp_sliding_window_viewr   r  rg   rh   rh   ri   test_sliding_window_view  s
     r  zwindow_shape, axis)r   r   )rq   r"   )r{   r   )r   r   r  r   c              	   C   s0   t d}tt t|| | W 5 Q R X d S )N)r   r"   )r^   zerosr   r   r   r   )r  ry   r   rh   rh   ri   test_sliding_window_errors,  s    
r  )Er   Zimportorskipr   r[   Znumpy.testingr   r   Z
dask.arrayrb   r^   Zdask.array.lib.stride_tricksr   Zdask.array.overlapr   r   r	   r
   r   r   r   r   r   Zdask.array.utilsr   r   rj   ro   rr   rw   r   r   r   r   r   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  r  r  r  r  r  rh   rh   rh   ri   <module>   s   
,)B/ 
"

		

	

	

	