@@ -21,16 +21,15 @@ def dataset():
2121 return ds
2222
2323
24+ @pytest .mark .parametrize ("all_touched" , [False , True ])
2425@pytest .mark .parametrize ("clip" , [False , True ])
25- def test_rasterize (clip , engine , dataset ):
26- # Use engine-specific snapshots due to pixel boundary differences:
27- # - rasterio: default (center-point) rasterization
28- # - rusterize: has its own boundary handling
29- # - exactextract: equivalent to all_touched=True (any coverage counts)
30- if engine == "rusterize" :
31- suffix = "_rusterize"
32- elif engine == "exactextract" :
33- suffix = "_all_touched" # exactextract matches rasterio all_touched=True
26+ def test_rasterize (clip , all_touched , engine , dataset ):
27+ if engine == "exactextract" and all_touched :
28+ pytest .skip ("exactextract always behaves as all_touched=True; does not accept the parameter" )
29+
30+ # exactextract inherently matches the all_touched snapshot
31+ if all_touched or engine == "exactextract" :
32+ suffix = "_all_touched"
3433 else :
3534 suffix = ""
3635 fname = f"rasterize_snapshot{ suffix } .nc"
@@ -43,7 +42,7 @@ def test_rasterize(clip, engine, dataset):
4342 snapshot = snapshot .sel (latitude = slice (83.25 , None ))
4443
4544 world = gpd .read_file (geodatasets .get_path ("naturalearth land" ))
46- kwargs = dict (xdim = "longitude" , ydim = "latitude" , clip = clip , engine = engine )
45+ kwargs = dict (xdim = "longitude" , ydim = "latitude" , clip = clip , all_touched = all_touched , engine = engine )
4746 rasterized = rasterize (dataset , world [["geometry" ]], ** kwargs )
4847 xr .testing .assert_identical (rasterized , snapshot )
4948 assert rasterized .dtype == "uint8"
@@ -68,17 +67,16 @@ def test_rasterize(clip, engine, dataset):
6867 xr .testing .assert_identical (drasterized , snapshot )
6968
7069
70+ @pytest .mark .parametrize ("all_touched" , [False , True ])
7171@pytest .mark .parametrize ("invert" , [False , True ])
7272@pytest .mark .parametrize ("clip" , [False , True ])
73- def test_geometry_mask (clip , invert , engine , dataset ):
74- # Use engine-specific snapshots due to pixel boundary differences:
75- # - rasterio: default (center-point) rasterization
76- # - rusterize: has its own boundary handling
77- # - exactextract: equivalent to all_touched=True (any coverage counts)
78- if engine == "rusterize" :
79- suffix = "_rusterize"
80- elif engine == "exactextract" :
81- suffix = "_all_touched" # exactextract matches rasterio all_touched=True
73+ def test_geometry_mask (clip , invert , all_touched , engine , dataset ):
74+ if engine == "exactextract" and all_touched :
75+ pytest .skip ("exactextract always behaves as all_touched=True; does not accept the parameter" )
76+
77+ # exactextract inherently matches the all_touched snapshot
78+ if all_touched or engine == "exactextract" :
79+ suffix = "_all_touched"
8280 else :
8381 suffix = ""
8482 fname = f"geometry_mask_snapshot{ suffix } .nc"
@@ -93,7 +91,9 @@ def test_geometry_mask(clip, invert, engine, dataset):
9391
9492 world = gpd .read_file (geodatasets .get_path ("naturalearth land" ))
9593
96- kwargs = dict (xdim = "longitude" , ydim = "latitude" , clip = clip , invert = invert , engine = engine )
94+ kwargs = dict (
95+ xdim = "longitude" , ydim = "latitude" , clip = clip , invert = invert , all_touched = all_touched , engine = engine
96+ )
9797 rasterized = geometry_mask (dataset , world [["geometry" ]], ** kwargs )
9898 xr .testing .assert_identical (rasterized , snapshot )
9999
0 commit comments