Summary
The GPU _fp_predictor_decode_kernel path in _gpu_decode.py decodes multi-sample float TIFFs (predictor=3, samples=3 or 4, float32 or float64) correctly. Manual round-trip testing confirms it works. But xrspatial/geotiff/tests/test_predictor_multisample.py only covers GPU predictor=2 multi-sample. The predictor=3 multi-sample GPU path is not exercised in CI.
This is a coverage gap, not a bug. The code is right; the suite just doesn't lock it in.
Proposal
Add parametrized regression tests over samples in (3, 4) and dtype in (float32, float64) that:
- Generate random multi-sample float data of shape
(64, 64, samples).
- Round-trip through
to_geotiff(compression='deflate', predictor=3, tiled=True, tile_size=32).
- Read back on CPU and GPU.
- Assert GPU is bit-exactly equal to CPU and both match the source.
Use the existing gpu_only skipif decorator.
Summary
The GPU
_fp_predictor_decode_kernelpath in_gpu_decode.pydecodes multi-sample float TIFFs (predictor=3, samples=3 or 4, float32 or float64) correctly. Manual round-trip testing confirms it works. Butxrspatial/geotiff/tests/test_predictor_multisample.pyonly covers GPU predictor=2 multi-sample. The predictor=3 multi-sample GPU path is not exercised in CI.This is a coverage gap, not a bug. The code is right; the suite just doesn't lock it in.
Proposal
Add parametrized regression tests over
samples in (3, 4)anddtype in (float32, float64)that:(64, 64, samples).to_geotiff(compression='deflate', predictor=3, tiled=True, tile_size=32).Use the existing
gpu_onlyskipif decorator.