@@ -30,7 +30,7 @@ def glaciers():
3030 return glaciers , sentinel_2
3131
3232
33- @pytest .mark .parametrize ("method" , ["rasterize" , "iterate" , "exactextract" ])
33+ @pytest .mark .parametrize ("method" , [None , "rasterize" , "iterate" , "exactextract" ])
3434def test_structure (method ):
3535 da = xr .DataArray (
3636 np .ones ((10 , 10 , 5 )),
@@ -45,7 +45,7 @@ def test_structure(method):
4545 polygon2 = shapely .geometry .Polygon ([(6 , 22 ), (9 , 22 ), (9 , 29 ), (6 , 26 )])
4646 polygons = gpd .GeoSeries ([polygon1 , polygon2 ], crs = "EPSG:4326" )
4747
48- if method == "exactextract" :
48+ if method in [ "exactextract" , None ] :
4949 expected = xr .DataArray (
5050 np .array ([[12.0 ] * 5 , [16.5 ] * 5 ]),
5151 coords = {
@@ -117,13 +117,13 @@ def test_match():
117117 xr .testing .assert_allclose (rasterize , iterate )
118118
119119
120- @pytest .mark .parametrize ("method" , ["rasterize" , "iterate" , "exactextract" ])
120+ @pytest .mark .parametrize ("method" , [None , "rasterize" , "iterate" , "exactextract" ])
121121def test_dataset (method ):
122122 ds = xr .tutorial .open_dataset ("eraint_uvz" )
123123 world = gpd .read_file (geodatasets .get_path ("naturalearth land" ))
124124 result = ds .xvec .zonal_stats (world .geometry , "longitude" , "latitude" , method = method )
125125
126- if method == "exactextract" :
126+ if method in [ "exactextract" , None ] :
127127 xr .testing .assert_allclose (
128128 xr .Dataset (
129129 {
@@ -147,7 +147,7 @@ def test_dataset(method):
147147 )
148148
149149
150- @pytest .mark .parametrize ("method" , ["rasterize" , "iterate" , "exactextract" ])
150+ @pytest .mark .parametrize ("method" , [None , "rasterize" , "iterate" , "exactextract" ])
151151def test_dataarray (method ):
152152 ds = xr .tutorial .open_dataset ("eraint_uvz" )
153153 world = gpd .read_file (geodatasets .get_path ("naturalearth land" ))
@@ -157,13 +157,13 @@ def test_dataarray(method):
157157
158158 assert result .shape == (127 , 2 , 3 )
159159 assert result .dims == ("geometry" , "month" , "level" )
160- if method == "exactextract" :
160+ if method in [ "exactextract" , None ] :
161161 assert result .mean () == pytest .approx (61625.53438858 )
162162 else :
163163 assert result .mean () == pytest .approx (61367.76185577 )
164164
165165
166- @pytest .mark .parametrize ("method" , ["rasterize" , "iterate" , "exactextract" ])
166+ @pytest .mark .parametrize ("method" , [None , "rasterize" , "iterate" , "exactextract" ])
167167def test_stat (method ):
168168 ds = xr .tutorial .open_dataset ("eraint_uvz" )
169169 world = gpd .read_file (geodatasets .get_path ("naturalearth land" ))
@@ -174,7 +174,7 @@ def test_stat(method):
174174 median_ = ds .z .xvec .zonal_stats (
175175 world .geometry , "longitude" , "latitude" , method = method , stats = "median"
176176 )
177- if method == "exactextract" :
177+ if method in [ "exactextract" , None ] :
178178 quantile_ = ds .z .xvec .zonal_stats (
179179 world .geometry ,
180180 "longitude" ,
@@ -192,7 +192,7 @@ def test_stat(method):
192192 q = 0.2 ,
193193 )
194194
195- if method == "exactextract" :
195+ if method in [ "exactextract" , None ] :
196196 assert mean_ .mean () == pytest .approx (61625.53438858 )
197197 assert median_ .mean () == pytest .approx (61628.67168691 )
198198 assert quantile_ .mean () == pytest .approx (61540.75632235 )
@@ -308,11 +308,11 @@ def test_callable(method):
308308 xr .testing .assert_identical (da_agg , da_std )
309309
310310
311- @pytest .mark .parametrize ("method" , ["rasterize" , "iterate" , "exactextract" ])
311+ @pytest .mark .parametrize ("method" , [None , "rasterize" , "iterate" , "exactextract" ])
312312def test_multiple (method ):
313313 ds = xr .tutorial .open_dataset ("eraint_uvz" )
314314 world = gpd .read_file (geodatasets .get_path ("naturalearth land" ))
315- if method == "exactextract" :
315+ if method in [ "exactextract" , None ] :
316316 result = ds .xvec .zonal_stats (
317317 world .geometry [:10 ].boundary ,
318318 "longitude" ,
@@ -366,7 +366,7 @@ def test_multiple(method):
366366 ).all ()
367367
368368
369- @pytest .mark .parametrize ("method" , ["rasterize" , "iterate" , "exactextract" ])
369+ @pytest .mark .parametrize ("method" , [None , "rasterize" , "iterate" , "exactextract" ])
370370def test_invalid (method ):
371371 ds = xr .tutorial .open_dataset ("eraint_uvz" )
372372 world = gpd .read_file (geodatasets .get_path ("naturalearth land" ))
@@ -394,7 +394,25 @@ def test_invalid(method):
394394 )
395395
396396
397- def test_variable_geometry_multiple (glaciers ):
397+ @pytest .mark .parametrize ("method" , [None , "iterate" , "exactextract" ])
398+ def test_variable_geometry_multiple (glaciers , method ):
399+ da , sentinel_2 = glaciers
400+
401+ result = sentinel_2 .xvec .zonal_stats (
402+ da .geometry ,
403+ x_coords = "x" ,
404+ y_coords = "y" ,
405+ stats = [
406+ "mean" ,
407+ "sum" ,
408+ ],
409+ method = method ,
410+ )
411+
412+ assert result .sizes == {"year" : 3 , "name" : 5 , "zonal_statistics" : 2 , "band" : 11 }
413+
414+
415+ def test_variable_geometry_iterate_custom (glaciers ):
398416 da , sentinel_2 = glaciers
399417
400418 result = sentinel_2 .xvec .zonal_stats (
@@ -407,24 +425,31 @@ def test_variable_geometry_multiple(glaciers):
407425 ("numpymean" , np .nanmean ),
408426 np .nanmean ,
409427 ],
428+ method = "iterate" ,
410429 )
411430
412431 assert result .sizes == {"year" : 3 , "name" : 5 , "zonal_statistics" : 4 , "band" : 11 }
413- assert result .statistics . mean () == 17067828
432+ assert result .mean () == 17067828
414433
415434
416- def test_variable_geometry_single (glaciers ):
435+ @pytest .mark .parametrize ("method" , [None , "iterate" , "exactextract" ])
436+ def test_variable_geometry_single (glaciers , method ):
417437 da , sentinel_2 = glaciers
418438
419439 result = sentinel_2 .xvec .zonal_stats (
420440 da .geometry ,
421441 x_coords = "x" ,
422442 y_coords = "y" ,
423443 stats = "mean" ,
444+ method = method ,
424445 )
425446
426447 assert result .sizes == {"year" : 3 , "name" : 5 , "band" : 11 }
427- assert result .statistics .mean () == 13168.585
448+
449+ if method in ("exactextract" , None ):
450+ assert result .mean () == pytest .approx (13168.076 )
451+ else :
452+ assert result .mean () == 13168.585
428453
429454
430455def test_exactextract_strategy ():
@@ -458,7 +483,7 @@ def test_exactextract_strategy():
458483 )
459484
460485
461- @pytest .mark .parametrize ("method" , ["rasterize" , "iterate" , "exactextract" ])
486+ @pytest .mark .parametrize ("method" , [None , "rasterize" , "iterate" , "exactextract" ])
462487def test_nodata (method ):
463488 ds = xr .tutorial .open_dataset ("eraint_uvz" )
464489 world = gpd .read_file (geodatasets .get_path ("naturalearth land" ))
0 commit comments