test_mcda.py has 175 tests, and every one of them exercises the numpy or dask+numpy path. Gaps found while auditing xrspatial/mcda for the test-coverage sweep:
No cupy or dask+cupy tests. standardize.py has explicit cupy branches (_get_xp, cupy chunk handling in _interp_block / _apply_mapping) and combine.py has a dedicated cupy branch in _sort_descending, but no test constructs a cupy-backed DataArray. Running the GPU paths by hand: most work (standardize linear/sigmoidal/gaussian/triangular/categorical, wlc, wpm, fuzzy_overlay, OAT sensitivity), several raise (#3146 covers those bugs).
owa has no dask test. The dask branch of _sort_descending calls da.sort, which doesn't exist in dask.array, so owa raises AttributeError on any dask-backed input. The bug shipped because nothing exercises the path (filed in #3146). Tests should land as xfail until that's fixed.
Other dask+numpy paths untested: wpm (its positivity check has a dask branch using da.nanmin), constrain, fuzzy_overlay's gamma operator, boolean_overlay.
No metadata preservation tests. Nothing asserts that attrs (res/crs), coords, or dim names survive standardize/combine/constrain. Current behavior is correct (checked by hand) but unguarded.
Edge cases: all-NaN criterion through wpm's positivity check and Inf propagation through wlc are untested.
Plan: a test-only PR adding cross-backend parity tests via the general_checks.py helpers, xfail tests for the paths broken by #3146, and metadata preservation tests. No source changes.
Found by the test-coverage sweep. Severity per the sweep rubric: HIGH (backend coverage), MEDIUM (metadata, edge cases).
test_mcda.py has 175 tests, and every one of them exercises the numpy or dask+numpy path. Gaps found while auditing
xrspatial/mcdafor the test-coverage sweep:No cupy or dask+cupy tests. standardize.py has explicit cupy branches (
_get_xp, cupy chunk handling in_interp_block/_apply_mapping) and combine.py has a dedicated cupy branch in_sort_descending, but no test constructs a cupy-backed DataArray. Running the GPU paths by hand: most work (standardize linear/sigmoidal/gaussian/triangular/categorical, wlc, wpm, fuzzy_overlay, OAT sensitivity), several raise (#3146 covers those bugs).owa has no dask test. The dask branch of
_sort_descendingcallsda.sort, which doesn't exist in dask.array, so owa raises AttributeError on any dask-backed input. The bug shipped because nothing exercises the path (filed in #3146). Tests should land as xfail until that's fixed.Other dask+numpy paths untested: wpm (its positivity check has a dask branch using
da.nanmin), constrain, fuzzy_overlay's gamma operator, boolean_overlay.No metadata preservation tests. Nothing asserts that attrs (res/crs), coords, or dim names survive standardize/combine/constrain. Current behavior is correct (checked by hand) but unguarded.
Edge cases: all-NaN criterion through wpm's positivity check and Inf propagation through wlc are untested.
Plan: a test-only PR adding cross-backend parity tests via the general_checks.py helpers, xfail tests for the paths broken by #3146, and metadata preservation tests. No source changes.
Found by the test-coverage sweep. Severity per the sweep rubric: HIGH (backend coverage), MEDIUM (metadata, edge cases).