
    |LeNQ              
         d dl mZ d dlZ	 d dlZn# e$ r dZY nw xY w	 d dlZn# e$ r dZY nw xY wd dlmZ d dlm	Z	 d dl
mZ d dlZd dlZd dlZd dlmZ d dlZd dlmZ d dlmZ d dlmZ  ej        d	           ej                             edu oedu d
          Z! e	j"        e#          d          Z$ e	j%         e	j&        e$d                    Z' e	j&        e'd          Z(d Z)ej*        d             Z+e!d             Z,e!d             Z-ej        .                    d          e!d                         Z/ej        .                    d          e!d                         Z0e!d             Z1e!d             Z2e!d             Z3e!d             Z4e!d             Z5e!d             Z6d Z7d Z8d Z9d Z:d Z;d  Z<d! Z=d" Z>d# Z?d$ Z@d% ZAd& ZBd' ZCd( ZDej        E                    d) e eFd*d+           eFd,d*          g d-                    d.             ZGej        E                    d/ e eFd,d*           eFd0d1                              d2             ZHd3 ZId4 ZJe!d5             ZKd6 ZLdS )7    )annotationsN)config)path)product)compute_chunksize)Versionsynchronous)	schedulerzrequires rioxarray or rasterio)reasondatazworld.rgb.tifc                    t          t          j                  t          d          k     rt          j        }nt          j        } || g|R i |S )Nz0.20)r   xr__version__open_rasterio	rioxarray)r   argskwargsfuncs       <lib/python3.11/site-packages/datashader/tests/test_raster.pyr   r   '   sQ     r~00&4&t&&&v&&&    c                 H   t          t                    5 } t          j                            |           }t          j                            | j        j        | j        j        |          \  }}}}t          j	        dd||f||f          cd d d            S # 1 swxY w Y   d S )N   
plot_widthplot_heightx_rangey_range)
r   TEST_RASTER_PATHdsutilscalc_res	calc_bboxxvaluesyCanvas)srcresleftbottomrighttops         r   cvsr-   1   s    	'	(	( 0Ch$$#%8#5#5celCELRU#V#V feSyA%&"&"(#0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   A5BBBc                    t          t                    5 }|                     |          }|J 	 d d d            d S # 1 swxY w Y   d S )Nr   r   rasterr-   r'   aggs      r   test_raster_aggregate_defaultr3   <   s    	'	(	( Cjjoo                 s   =AAc                    t          t                    5 }|                     |d          }|J 	 d d d            d S # 1 swxY w Y   d S )Nnearestupsample_methodr/   r1   s      r   test_raster_aggregate_nearestr8   B   s    	'	(	( Cjjij88                    ?AAzJuse_overviews opt no longer supported; may be re-implemented in the futurec                    t          t                    5 }|                     |d          }|J 	 d d d            d S # 1 swxY w Y   d S )NTuse_overviewsr/   r1   s      r   $test_raster_aggregate_with_overviewsr=   I   s     
'	(	( CjjDj11                 r9   c                    t          t                    5 }|                     |d          }|J 	 d d d            d S # 1 swxY w Y   d S )NFr;   r/   r1   s      r   'test_raster_aggregate_without_overviewsr?   Q   s     
'	(	( CjjEj22                 r9   c                    t          t                    5 }t          j        ddddgddg          } 	 |                     |           J # t
          $ r Y nw xY w	 d d d            d S # 1 swxY w Y   d S )Nr   g    _Bg@xDr   )r   r   r   r&   r0   
ValueErrorr-   r'   s     r   &test_out_of_bounds_return_correct_sizerC   Y   s    	'	(	( 
Ci1$%!%t!%t. . .	JJsOOO L  	 	 	D	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s4   A(A
A(

AA(AA((A,/A,c            	        t          t                    5 } t          j                            |           }t          j                            | j        j        | j        j        |          \  }}}}||z
  dz  }||z
  dz  }t          j	        dd||z
  ||z   g||z
  ||z   g          }|
                    |           }	|	j        dk    sJ |	J 	 d d d            d S # 1 swxY w Y   d S )Nr         r      rF   rE   r   r   r   r    r!   r"   r#   r$   r%   r&   r0   shape)
r'   r(   r)   r*   r+   r,   
half_widthhalf_heightr-   r2   s
             r   (test_partial_extent_returns_correct_sizerM   h   s=   	'	(	( Ch$$#%8#5#5celCELRU#V#V feSdla'
V|q(i3$'!%j$z/ B!'!3VK5G HJ J J jjooyM))))                 s   B8CC"Cc           	        t          t                    5 }t          j                            |          }t          j                            |j        j        |j        j        |          \  }}}}||z
  dz  }||z
  dz  }t          j	        dd||z
  ||z   g||z
  ||z   g          } | 
                    |d          }	|	j        dk    sJ |	J 	 d d d            d S # 1 swxY w Y   d S )Nr   rE   rF   r      )layer)rF   rE   rI   )
r-   r'   r(   r)   r*   r+   r,   rK   rL   r2   s
             r   3test_partial_extent_with_layer_returns_correct_sizerQ   x   sC   	'	(	( Ch$$#%8#5#5celCELRU#V#V feSdla'
V|q(i3$'!%j$z/ B!'!3VK5G HJ J J jjAj&&yJ&&&&                 s   B:CC!$C!c                 |   t          t                    5 } t          j                            |           }t          j                            | j        j        | j        j        |          \  }}}}t          j	        dd||g||g          }|
                    |           }|j        dk    sJ |J | j        D ]2}t          j        ||         j        | |         j        k              sJ 3t          j        |j        d          sJ t          j        |j        d          sJ 	 d d d            d S # 1 swxY w Y   d S )NrE   rF   r   rG   )iL   )iZ   )r   r   r   r    r!   r"   r#   r$   r%   r&   r0   rJ   dimsnpallr   allcloser   r   )	r'   r(   r)   r*   r+   r,   r-   r2   dims	            r   'test_full_extent_returns_correct_coordsrZ      sz   	'	(	( 3Ch$$#%8#5#5celCELRU#V#V feSi3$'!%u!'/ / / jjooyM))))8 	: 	:C6#c(-3s8=8999999{3;44444{3;	2222223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s   DD11D58D5c                 :   ddl } t          t                    5 }t          j                            |          }ddd           n# 1 swxY w Y    | j        t                    5 }|j        }ddd           n# 1 swxY w Y   t          j	        ||          sJ dS )z_Assert that resolution is calculated correctly when using the xarray
    rasterio backend.
    r   N)
rasterior   r   r   r    r!   openr(   rV   rX   )r\   r'   xr_resrio_ress       r   test_calc_resr`      s   
 OOO	'	(	( (C""3''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	'	(	( C'              ;vw'''''''s#    AA	A	%A99A= A=c                    ddl } t          t                    5 }t          j                            |          }t          j                            |j        j        |j	        j        |          }ddd           n# 1 swxY w Y    | j
        t                    5 }|j        }ddd           n# 1 swxY w Y   t          j        ||d          sJ dS )zdAssert that bounding boxes are calculated correctly when using the xarray
    rasterio backend.
    r   N      ?)atol)r\   r   r   r   r    r!   r"   r#   r$   r%   r]   boundsrV   rX   )r\   r'   r^   	xr_bounds
rio_boundss        r   test_calc_bboxrg      sE   
 OOO	'	(	( KC""3''H&&su|SU\6JJ	K K K K K K K K K K K K K K K 
'	(	(  CZ
                             ;y*377777777s$   AA::A>A>B..B25B2c                 H   t          j        d          } t          j        d          }| |t           j                 j        z  }t	          j        || |dddg          }t          j        dddd	          }|                    |          }t          j	        |j
        |          sJ t          j	        |j        j        |           sJ t          j	        |j        j        |          sJ t          j	        |j        d          sJ t          j	        |j        d          sJ d
S )T
    Assert raster with ascending x- and y-coordinates is aggregated correctly.
    
      XYrn   rm   coordsrU         g      #@rr   g      @r   r   NrV   arangenewaxisTr   	DataArrayr   r&   r0   rX   r   rm   r$   rn   r   r   xsysarrxarrr-   r2   s         r   test_raster_both_ascendingr      s    
2B	1B
R
^
C<"2$6$6c3ZHHHD
)B:z
B
B
BC
**T

C;sx%%%%%;su|R(((((;su|R(((((;s{K00000;s{K0000000r   c            
        t          j        d          } t          j        d          }| |t           j                 j        z  }t	          j        || |dddg          }t          j        ddd	d
          }|                    |          }t          j	        |j
        |                    t          dd          t          dd                              sJ t          j	        |j        j        | dd                   sJ t          j	        |j        j        |dd                   sJ t          j	        |j        d	          sJ t          j	        |j        d
          sJ dS )zs
    Assert raster with ascending x- and y-coordinates and a partial canvas
    range is aggregated correctly.
    rj   rk   rl   rn   rm   ro      rH         ?g      @r         @rt   rO         NrV   rv   rw   rx   r   ry   r   r&   r0   rX   r   selslicerm   r$   rn   r   r   rz   s         r   (test_raster_both_ascending_partial_ranger      s8   
 
2B	1B
R
^
C<"2$6$6c3ZHHHD
)Aq)Y
?
?
?C
**T

C;sxE!QKK5A;;!G!GHHHHH;su|R!W-----;su|R!W-----;s{J/////;s{J///////r   c                 l   t          j        d          ddd         } t          j        d          ddd         }| |t           j                 j        z  }t	          j        || |dddg          }t          j        ddd	d
          }|                    |          }t          j	        |j
        |          sJ t          j	        |j        j        |           sJ t          j	        |j        j        |          sJ t          j	        |j        d	          sJ t          j	        |j        d
          sJ dS )ri   rj   Nrk   rl   rn   rm   ro   rq   rs   rt   ru   rz   s         r   test_raster_both_descendingr      s    
2ttt	B	1ddd	B
R
^
C<"2$6$6c3ZHHHD
)B:z
B
B
BC
**T

C;sx%%%%%;su|R(((((;su|R(((((;s{K00000;s{K0000000r   c            
        t          j        d          ddd         } t          j        d          ddd         }| |t           j                 j        z  }t	          j        || |dddg          }t          j        d	d
dd          }|                    |          }t          j	        |j
        |                    t          d
d          t          d	d                    j
                  sJ t          j	        |j        j        | dd                   sJ t          j	        |j        j        |dd                   sJ t          j	        |j        d          sJ t          j	        |j        d          sJ dS )zs
    Assert raster with ascending x- and y-coordinates and a partial canvas range
    is aggregated correctly.
    rj   Nr   rk   rl   rn   rm   ro   r   rH   r   r   rt   rO   )rn   rm   r   	   r   r   rz   s         r   )test_raster_both_descending_partial_ranger      sQ   
 
2ttt	B	1ddd	B
R
^
C<"2$6$6c3ZHHHD
)Aq)Y
?
?
?C
**T

C;sxE!AJJ%1++!F!F!KLLLLL;su|R!W-----;su|R!W-----;s{J/////;s{J///////r   c                 Z   t          j        d          } t          j        d          ddd         }| |t           j                 j        z  }t	          j        || |dddg          }t          j        ddd	d
          }|                    |          }t          j	        |j
        |          sJ t          j	        |j        j        |           sJ t          j	        |j        j        |          sJ t          j	        |j        d	          sJ t          j	        |j        d
          sJ dS )_
    Assert raster with ascending x- and descending y-coordinates is aggregated correctly.
    rj   rk   Nr   rl   rn   rm   ro   rq   rs   rt   ru   rz   s         r   $test_raster_x_ascending_y_descendingr     s    
2B	1ddd	B
R
^
C<"2$6$6c3ZHHHD
)B:z
B
B
BC
**T

C;sx%%%%%;su|R(((((;su|R(((((;s{K00000;s{K0000000r   c            
        t          j        d          } t          j        d          ddd         }| |t           j                 j        z  }t	          j        || |dddg          }t          j        d	d
dd          }|                    |          }t          j	        |j
        |                    t          dd	          t          dd
                    j
                  sJ t          j	        |j        j        | dd                   sJ t          j	        |j        j        |dd                   sJ t          j	        |j        d          sJ t          j	        |j        d          sJ dS )r   rj   rk   Nr   rl   rn   rm   ro   r   r   r   g      ?r   rt   rO   rH   r   r   rz   s         r   2test_raster_x_ascending_y_descending_partial_ranger     sF    
2B	1ddd	B
R
^
C<"2$6$6c3ZHHHD
)Aq*j
A
A
AC
**T

C;sxE!QKK5A;;!G!G!LMMMMM;su|R!W-----;su|R!W-----;s{J/////;s{J///////r   c                 Z   t          j        d          ddd         } t          j        d          }| |t           j                 j        z  }t	          j        || |dddg          }t          j        ddd	d
          }|                    |          }t          j	        |j
        |          sJ t          j	        |j        j        |           sJ t          j	        |j        j        |          sJ t          j	        |j        d	          sJ t          j	        |j        d
          sJ dS )_
    Assert raster with descending x- and ascending y-coordinates is aggregated correctly.
    rj   Nr   rk   rl   rn   rm   ro   rq   rs   rt   ru   rz   s         r   $test_raster_x_descending_y_ascendingr   &  s    
2ttt	B	1B
R
^
C<"2$6$6c3ZHHHD
)B:z
B
B
BC
**T

C;sx%%%%%;su|R(((((;su|R(((((;s{K00000;s{K0000000r   c            
     v   t          j        d          ddd         } t          j        d          }| |t           j                 j        z  }t	          j        || |dddg          }t          j        d	d
dd          }|                    |          }t          j	        |j
        |                    t          d	d          t          d
d                    j
                  sJ t          j	        |j        j        | d
d                   sJ t          j	        |j        j        |d
d                   sJ dS )r   rj   Nr   rk   rl   rn   rm   ro   r   r   r   r   rt   rO   rH   r   r   )rV   rv   rw   rx   r   ry   r   r&   r0   rX   r   r   r   rm   r$   rn   rz   s         r   2test_raster_x_descending_y_ascending_partial_ranger   8  s    
2ttt	B	1B
R
^
C<"2$6$6c3ZHHHD
)Aq)Z
@
@
@C
**T

C;sxE!QKK5A;;!G!G!LMMMMM;su|R!W-----;su|R!W-------r   c                    t          j        dddd          } t          j        g dg dg dg          }t          j        ddd	          t          j        ddd
          d}t          j        ||ddg          }|                     |dd          }t          j        d	dgddgg          }t          j        |j	        |          sJ |j	        j
        j        dk    sJ t          j        |j        j        t          j        ddg                    sJ t          j        |j        j        t          j        ddg                    sJ dS )zJ
    Ensure custom nan_value is handled correctly for integer arrays.
    r   r   rO   r   r   r   r   '  rO   r   rH   r   r      r   r   r   r      r   rO   r   rH   r#   r%   r%   r#   ro   maxr   downsample_method	nan_valuer   r   r   i      ?      ?N)r   r&   rV   arraylinspacer   ry   r0   rX   r   dtypekindr#   r$   r%   r-   r   rp   xr_arrayr2   expecteds         r   test_raster_integer_nan_valuer   H  sC    )a
O
O
OCHooo8H8H8HIJJE;q!Q''bk!Q.B.BCCF|E&SzBBBH
**X$*
G
GCx!Q!R)**H;sx*****8>#%%%%;su|RXtTl%;%;<<<<<;su|RXtTl%;%;<<<<<<<r   c                    t          j        dddd          } t          j        t          j        dddgdt          j        dd	gd
dt          j        dgg          }t          j        ddd          t          j        ddd          d}t          j        ||ddg          }|                     |d          }t          j        ddgddgg          }t          j	        |j
        |          sJ |j
        j        j        dk    sJ t          j	        |j        j        t          j        ddg                    sJ t          j	        |j        j        t          j        ddg                    sJ dS )zH
    Ensure default nan_value is handled correctly for float arrays
    r   r   r   rb          @      @      @      @      @       @      "@      &@r   rO   r   rH   r   r%   r#   ro   r   r   r   r   r   fr   r   N)r   r&   rV   r   nanr   r   ry   r0   rX   r   r   r   r#   r$   r%   r   s         r   test_raster_float_nan_valuer   Z  sT    )a
O
O
OCHrvr2r*RR,@2r26SVBWXYYE;q!Q''bk!Q.B.BCCF|E&SzBBBH
**X*
7
7Cx!Q!R)**H;sx*****8>#%%%%;su|RXtTl%;%;<<<<<;su|RXtTl%;%;<<<<<<<r   c            	        t          j        dddd          } t          j        g dg dg dg          }t	          j        |t          j        ddd	          t          j        ddd          d
ddg          }|                     |dd          }t          j        g dg dg dg          }t          j        |j	        |          sJ |j	        j
        j        dk    sJ t          j        |j        j        t          j        g d                    sJ t          j        |j        j        t          j        g d                    sJ dS )H
    Ensure that the padding values respect the supplied nan_value.
    rH   r   r   r   r   r   r   r   rO   r   r   r%   r#   ro   r   r   r   )r   r   r   )r   r   r   )r   r   r   r   gUUUUUU?rb   g?Nr   r&   rV   r   r   ry   r   r0   rX   r   r   r   r#   r$   r%   r-   r   r   r2   r   s        r   %test_raster_integer_nan_value_paddingr   l  sY   
 )a
P
P
PCHooo8H8H8HIJJE|EAq!0D0D2;WXZ[]^K_K_*`*`"%s- - -H **X$*
G
GCx}}}6H6H6HIJJH;sx*****8>#%%%%;su|RX.?.?.?%@%@AAAAA;su|RX.?.?.?%@%@AAAAAAAr   c            	     P   t          j        dddd          } t          j        t          j        dddgdt          j        dd	gd
dt          j        dgg          }t          j        |t          j        ddd          t          j        ddd          dddg          }|                     |d          }t          j        dd	t          j        gddt          j        gt          j        t          j        t          j        gg          }t          j	        |j
        |d          sJ |j
        j        j        dk    sJ t          j	        |j        j        t          j        g d                    sJ t          j	        |j        j        t          j        g d                    sJ dS )r   rH   r   r   rb   r   r   r   r   r   r   r   r   r   rO   r   r   r%   r#   ro   r   r   T	equal_nanr   r   N)r   r&   rV   r   r   r   ry   r   r0   rX   r   r   r   r#   r$   r%   r   s        r   #test_raster_float_nan_value_paddingr     s   
 )a
P
P
PCHrvr2r*RR,@2r26SVBWXYYE|EAq!0D0D2;WXZ[]^K_K_*`*`"%s- - -H **X*
7
7Cx"b"&)BRV+<rvrvrv>VWXXH;sxT::::::8>#%%%%;su|RX.?.?.?%@%@AAAAA;su|RX.?.?.?%@%@AAAAAAAr   c            
        t          j        dddd          } t          j        g dg dg dg          }t	          j        |ddgt          j        d	d
d          t          j        d	d
d          d          }|                     |dd          }t          j        g dg dg dg          }t          j        |j	        |          sJ |j	        j
        j        dk    sJ t          j        |j        j        t          j        g d                    sJ t          j        |j        j        t          j        g d                    sJ dS )zQ
    Ensure that canvas range covering a single pixel are handled correctly.
    rH   )r   g?r   r   rO   r   rH   r   rk   r   r   r   r   rj   r   r%   r#   r   rO   r   r   rU   rp   r   r   r   )r   r   r   r   )g?g?gUUUUUU?Nr   r   s        r   test_raster_single_pixel_ranger     sX   
 )a8
T
T
TCHlllLLL...ABBE|Ec
)+Q1)=)=)+Q1)=)=$? $?@ @ @H **X$*
G
GCxIIIyyy9::H;sx*****8>#%%%%;su|RX.C.C.C%D%DEEEEE;su|RX.C.C.C%D%DEEEEEEEr   c                 6   t          j        dddd          } t          j        dddd          }t          j        g dg dg d	gd
          }t	          j        |ddgt          j        ddd          t          j        ddd          d          }|                     |dt          j                  }|                    |dt          j                  }t          j        t          j        t          j        t          j        t          j        t          j        t          j        gt          j        t          j        t          j        t          j        t          j        t          j        gt          j        t          j        t          j        t          j        ddgt          j        t          j        t          j        t          j        ddgg          }t          j        t          j        t          j        t          j        t          j        t          j        t          j        gt          j        t          j        t          j        t          j        t          j        t          j        gt          j        t          j        t          j        t          j        t          j        t          j        gt          j        t          j        t          j        t          j        ddgg          }t          j	        |j
        |d          sJ t          j	        |j
        |d          sJ |j
        j        j        d
k    sJ t          j	        |j        j        t          j        g d                    sJ t          j	        |j        j        t          j        g d                    sJ dS )z
    Ensure that canvas range covering a single pixel and small area
    beyond the defined data ranges is handled correctly.
    r   r   )rr   r   )rr   g$C?r   )rr   g333333?r   r   r   r   )r   r%   r#   g      ?g      ?g      ?rH   r   r   r   r   r   Tr   )g      ܿg      Կg      ȿg      g      ?g      ?)gd;OٿgZd;Oɿg{GzD?gʡE?N)r   r&   rV   r   r   ry   r   r0   r   rX   r   r   r   r#   r$   r%   )r-   cvs2r   r   r2   agg2r   	expected2s           r   +test_raster_single_pixel_range_with_paddingr     s    )a|
\
\
\C9q,PZ[[[DHlllLLL...AMMME|Ec
)+UD!)D)D)+UE1)E)E$G $GH H HH **X"&*
I
IC;;x5BF;KKDx	8	8	A.	A.	  H 	8	8	8	A.	  I ;sxT::::::;ty)t<<<<<<8>#%%%%;su|RX.b.b.b%c%cddddd;su|RX.Z.Z.Z%[%[\\\\\\\r   zin_size, out_size, aggrk   r   r   )meanminr   firstlastvarstdmodec                   t          j        ||          }t          j        dd|           }t          j        ||          \  }}t          j        ||z            }t          j        |d          }dt          |           fdt          |           fg}	t          j
        ||	d          }
t          j
        ||	d          }|                    ||	          }|                    |
|	          }t          j        |j        |j                                                  sJ t          j        |j        j        |j        j                  sJ t          j        |j        j        |j        j                  sJ d
S )I
    Ensure that distributed regrid is equivalent to regular regrid.
    r   r   r   rO   r   r   r%   r#   zrp   name)r2   Nr   r&   rV   r   meshgridsinda
from_arrayranger   ry   r0   rX   r   computer#   r$   r%   )in_sizeout_sizer2   r-   vsr{   r|   r}   darrrp   xr_darrxr_arragg_arragg_darrs                 r   "test_raster_distributed_downsampler     sJ    )X
>
>
>C	RG	$	$B[R  FB
&B--C=f%%DE'NN#c5>>%:;Fl4S999G\#f3777FjjSj))Gzz'sz++H;w|X]%:%:%<%<=====;wy'):;;;;;;wy'):;;;;;;;r   zin_size, out_sizer   r   c                   t          j        ||          }t          j        dd|           }t          j        ||          \  }}t          j        ||z            }t          j        |d          }dt          |           fdt          |           fg}t          j
        ||d          }	t          j
        ||d          }
|                    |
d	
          }|                    |	d	
          }t          j        |j        |j                                                  sJ t          j        |j        j        |j        j                  sJ t          j        |j        j        |j        j                  sJ dS )r   r   r   rO   r   r%   r#   r   r   r5   )interpolateNr   )r   r   r-   r   r{   r|   r}   r   rp   r   r   r   r   s                r    test_raster_distributed_upsampler     sJ   
 )X
>
>
>C	RG	$	$B[R  FB
&B--C=f%%DE'NN#c5>>%:;Fl4S999G\#f3777FjjYj77Gzz'yz99H;w|X]%:%:%<%<=====;wy'):;;;;;;wy'):;;;;;;;r   c                    t          j        dd          } d}t          j        dd|          }t          j        ||          \  }}t          j        ||z            }t          j        |d          }t          j	        |dt          |          fdt          |          fgd	
          }|                     |d          }|j        j        dk    sJ dS )zF
    Ensure that distributed regrid respects explicit chunk size.
    r   r   r   r   rO   r   r%   r#   r   r   )rO   rO   	chunksizeN)r   r&   rV   r   r   r   r   r   r   ry   r   r0   r   r   )	r-   sizer   r{   r|   r}   r   r   r   s	            r   (test_raster_distributed_regrid_chunksizer     s     )a
0
0
0CD	RD	!	!B[R  FB
&B--C=f%%Dl4#uT{{);c5;;=O(PWZ[[[Gzz'Vz44H="f,,,,,,r   c                     t          j        t          j        d          d          } t	          | ddd          }|dk    sJ t	          | ddd          }|dk    sJ d	S )
z2
    Ensure chunksize computation is correct.
    )d   r   )rj   rj   rj   i  )max_mem)r   rO   )rk   r   r   N)r   r   rV   zerosr   )r   mem_limited_chunksizeexplicit_chunksizes      r   test_resample_compute_chunksizer    su     =*--x88D-dBDIII F*****4R6JJJ''''''r   c                `   t          t                    5 }	 |                     |dd           J # t          $ r Y nw xY w	 |                     |d           J # t          $ r Y nw xY w	 |                     |d           J # t          $ r Y nw xY w	 d	d	d	           d	S # 1 swxY w Y   d	S )
zwAssert that an error is raised when incorrect upsample and/or downsample
    methods are provided to cvs.raster().
    
santaclaus
toothfairy)r7   r   Fhonestlawyerr6   tenantfriendlyleaser   N)r   r   r0   rA   rB   s     r   test_resample_methodsr    sF   
 
'	(	( C	JJsLLJYYY L  	 	 	D	
	JJsNJ;;; L  	 	 	D	
	JJs.CJDDD L  	 	 	D	%                 st   B#1B#
>B#>B#AB#
A(%B#'A((B#,BB#
BB#BB##B'*B'c            	     h   t          j        t          g dg d                    } t          j        ddgddggd	t          d
dgd
dg                    }t          j        dddd          }|                    | dd          }|                    |          }t          j
        |          }t          j
        |          }t          j                            |j        d         |j        d                    t          j                            |j        d         |j        d                    d S )N)r   r   r   )r   r   rH   r   )r   g        rb   r   r   )r%   r#   r   r   r   )r   rU   rp         )r   rj   )r   rk   rt   r#   r%   )pd	DataFramedictr   ry   r   r&   pointsr0   tfshaderV   testingassert_array_equalrp   )r  r0   canvas
agg_points
agg_raster	im_points	im_rasters          r   test_raster_vs_points_coordsr  8  s    \tiii999===>>>F\c
S#J7j!%A1b'!:!:!:< < <F Yr2w???Fv44Jv&&J$$I$$I J!!)"23"79I#9NOOOJ!!)"23"79I#9NOOOOOr   )M
__future__r   pytestr\   ImportErrorr   dask.contextr   osr   	itertoolsr   
datashaderr   xarrayr   numpyrV   
dask.arrayr   r   pandasr  datashader.resamplingr   datashader.transfer_functionstransfer_functionsr  packaging.versionr   setmarkskipifopen_rasterio_availablesplit__file__	BASE_PATHabspathjoin	DATA_PATHr   r   fixturer-   r3   r8   skipr=   r?   rC   rM   rQ   rZ   r`   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   parametrizer   r   r   r   r  r  r   r   r   <module>r:     s=   " " " " " " OOOO   HHH   III                                          3 3 3 3 3 3 * * * * * * % % % % % % 

] # # # # +,,Y$->-S8tCS4T - V V  DJx  #	DL9f5566	49Y88 ' ' ' 0 0 0   
    ^__   `_ ^__   `_          3 3 3$ 
( 
( 
( 8 8 81 1 1$0 0 0&1 1 1$0 0 0&1 1 1$0 0 0$1 1 1$. . . = = =$= = =$B B B&B B B&F F F( ]  ]  ]F GEE!QKKq!IIIK KL L< <	L L<. ,ggeeAqkk55A;;.O.OPP< < QP<.- - -&
( 
( 
(   6P P P P Ps    $ ..