Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
- name: Set Up Hatch Env
run: |
hatch env create test.py${{ matrix.python-version }}
hatch env run -e test.py${{ matrix.python-version }} list-env
hatch env run --env test.py${{ matrix.python-version }} list-env
- name: Run Tests
run: |
hatch env run --env test.py${{ matrix.python-version }} run-coverage
Expand Down
31 changes: 16 additions & 15 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,6 @@ dynamic=["version"]
dask = ["dask-geopandas"]
rasterize = ["rasterio"]
exactextract = ["exactextract", "sparse"]
test = [
"geodatasets",
"pooch",
"dask-geopandas",
"rasterio",
"exactextract",
"sparse",
"netCDF4",
"hypothesis",
"xarray @ git+https://github.com/dcherian/xarray.git@fix-coord-transform-indexing",
]
docs = [
"geodatasets",
"pooch",
Expand Down Expand Up @@ -91,14 +80,26 @@ exclude = [
"doc",
]

[tool.hatch.envs.test]
dependencies = [
[dependency-groups]
test = [
"coverage",
"dask-geopandas",
"exactextract",
"geodatasets",
"hypothesis",
"netCDF4",
"pooch",
"pytest",
"pytest",
"pytest-cov",
"pytest-xdist"
"pytest-xdist",
"rasterio",
"sparse",
"xarray @ git+https://github.com/pydata/xarray.git@26ccc7f8f014f29c551fd566a04d6e9f878c0b0b", # https://github.com/pydata/xarray/pull/10980
]
features = ["test"]

[tool.hatch.envs.test]
dependency-groups = ["test"]

[[tool.hatch.envs.test.matrix]]
python = ["3.11", "3.13"]
Expand Down
32 changes: 16 additions & 16 deletions tests/test_indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,12 @@ def pandas_da(raster_da):
@given(data=st.data())
@settings(suppress_health_check=[HealthCheck.function_scoped_fixture])
def test_isel_basic_indexing_equivalence(data, raster_da, pandas_da):
"""Test that isel produces identical results for RasterIndex and PandasIndex."""
"""Test that isel produces equal results for RasterIndex and PandasIndex."""
sizes = dict(raster_da.sizes)
indexers = data.draw(basic_indexers(sizes=sizes))
result_raster = raster_da.isel(indexers)
result_pandas = pandas_da.isel(indexers)
xr.testing.assert_identical(result_raster, result_pandas)
xr.testing.assert_equal(result_raster, result_pandas)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wanted to also do some sort of comparison on the RasterIndex and PandasIndex values like:

xr.core.indexes.indexes_identical(result_raster.xindexes, result_pandas.xindexes)

But that would require a bit more work, and unsure whether to have that comparison check code live upstream in pydata/xarray or here in rasterix.



@given(data=st.data())
Expand All @@ -81,7 +81,7 @@ def test_isel_basic_indexing_equivalence(data, raster_da, pandas_da):
suppress_health_check=[HealthCheck.function_scoped_fixture],
)
def test_sel_basic_indexing_equivalence(data, raster_da, pandas_da):
"""Test that isel produces identical results for RasterIndex and PandasIndex."""
"""Test that isel produces equal results for RasterIndex and PandasIndex."""
indexers = data.draw(basic_label_indexers(indexes=pandas_da.xindexes))

result_raster = raster_da.sel(
Expand All @@ -93,40 +93,40 @@ def test_sel_basic_indexing_equivalence(data, raster_da, pandas_da):
if all(isinstance(idxr, slice) for idxr in indexers.values()):
assert all(isinstance(idx, RasterIndex) for idx in result_raster.xindexes.get_unique())

xr.testing.assert_identical(result_raster, result_pandas)
xr.testing.assert_equal(result_raster, result_pandas)


def test_simple_isel(raster_da, pandas_da):
"""Sanity check: simple indexing operations."""
# Scalar indexing
xr.testing.assert_identical(raster_da.isel(x=0), pandas_da.isel(x=0))
xr.testing.assert_identical(raster_da.isel(y=0), pandas_da.isel(y=0))
xr.testing.assert_identical(raster_da.isel(x=0, y=0), pandas_da.isel(x=0, y=0))
xr.testing.assert_equal(raster_da.isel(x=0), pandas_da.isel(x=0))
xr.testing.assert_equal(raster_da.isel(y=0), pandas_da.isel(y=0))
xr.testing.assert_equal(raster_da.isel(x=0, y=0), pandas_da.isel(x=0, y=0))

# Slice indexing
xr.testing.assert_identical(raster_da.isel(x=slice(2, 5)), pandas_da.isel(x=slice(2, 5)))
xr.testing.assert_identical(raster_da.isel(y=slice(1, 4)), pandas_da.isel(y=slice(1, 4)))
xr.testing.assert_identical(
xr.testing.assert_equal(raster_da.isel(x=slice(2, 5)), pandas_da.isel(x=slice(2, 5)))
xr.testing.assert_equal(raster_da.isel(y=slice(1, 4)), pandas_da.isel(y=slice(1, 4)))
xr.testing.assert_equal(
raster_da.isel(x=slice(2, 5), y=slice(1, 4)),
pandas_da.isel(x=slice(2, 5), y=slice(1, 4)),
)

# Array indexing
xr.testing.assert_identical(raster_da.isel(x=[0, 2, 4]), pandas_da.isel(x=[0, 2, 4]))
xr.testing.assert_identical(raster_da.isel(y=[1, 3]), pandas_da.isel(y=[1, 3]))
xr.testing.assert_equal(raster_da.isel(x=[0, 2, 4]), pandas_da.isel(x=[0, 2, 4]))
xr.testing.assert_equal(raster_da.isel(y=[1, 3]), pandas_da.isel(y=[1, 3]))


@given(data=st.data())
@settings(suppress_health_check=[HealthCheck.function_scoped_fixture])
def test_outer_array_indexing(data, raster_da, pandas_da):
"""Test that outer array indexing produces identical results for RasterIndex and PandasIndex."""
"""Test that outer array indexing produces equal results for RasterIndex and PandasIndex."""
sizes = dict(raster_da.sizes)
indexers = data.draw(outer_array_indexers(sizes=sizes))

result_raster = raster_da.isel(indexers)
result_pandas = pandas_da.isel(indexers)

xr.testing.assert_identical(result_raster, result_pandas)
xr.testing.assert_equal(result_raster, result_pandas)


@given(data=st.data())
Expand All @@ -135,11 +135,11 @@ def test_outer_array_indexing(data, raster_da, pandas_da):
suppress_health_check=[HealthCheck.function_scoped_fixture],
)
def test_outer_array_label_indexing(data, raster_da, pandas_da):
"""Test that outer array label indexing produces identical results for RasterIndex and PandasIndex."""
"""Test that outer array label indexing produces equal results for RasterIndex and PandasIndex."""
indexers = data.draw(outer_array_label_indexers(indexes=pandas_da.xindexes))
result_raster = raster_da.sel(indexers, method="nearest")
result_pandas = pandas_da.sel(indexers, method="nearest")
xr.testing.assert_identical(result_raster, result_pandas)
xr.testing.assert_equal(result_raster, result_pandas)


@given(data=st.data())
Expand Down
Loading