The CI workflow runs uv sync --group dev then uv run pytest tests/ (.github/workflows/Build.yml:29-33). The accelerated backends are declared in [project.optional-dependencies] (pyproject.toml:37-42), not in the dev dependency group (pyproject.toml:49-72), and there is no [tool.uv] default-extras.
Confirmed by reproducing the CI environment locally — after a clean uv sync:
TORCH_AVAILABLE=False MPS_AVAILABLE=False CUDA_AVAILABLE=False
NUMBA_AVAILABLE=False METAL_AVAILABLE=False CUPY_AVAILABLE=False
All 49 skipif-gated tests in tests/test_sync.py therefore skip (breakdown: TORCH 16, METAL 11, NUMBA 11, CUPY 9, MPS 2). CI validates the NumPy path plus the fallback-warning tests, and nothing else. No accelerated backend is ever exercised automatically.
This is why several defects in this batch went unnoticed — in particular the numpy↔numba NaN/0.0 divergence, which needs no GPU at all to reproduce.
Suggested fix: add at least one CI job with uv sync --group dev --extra numba. That is pure CPU, costs almost nothing, and would immediately cover the numba kernels for all 9 metrics — including the zero-denominator divergence. A --extra torch CPU job would additionally cover the torch code paths (on CPU/float64), leaving only Metal and CUDA genuinely untestable in hosted CI.
The CI workflow runs
uv sync --group devthenuv run pytest tests/(.github/workflows/Build.yml:29-33). The accelerated backends are declared in[project.optional-dependencies](pyproject.toml:37-42), not in thedevdependency group (pyproject.toml:49-72), and there is no[tool.uv] default-extras.Confirmed by reproducing the CI environment locally — after a clean
uv sync:All 49
skipif-gated tests intests/test_sync.pytherefore skip (breakdown: TORCH 16, METAL 11, NUMBA 11, CUPY 9, MPS 2). CI validates the NumPy path plus the fallback-warning tests, and nothing else. No accelerated backend is ever exercised automatically.This is why several defects in this batch went unnoticed — in particular the numpy↔numba NaN/0.0 divergence, which needs no GPU at all to reproduce.
Suggested fix: add at least one CI job with
uv sync --group dev --extra numba. That is pure CPU, costs almost nothing, and would immediately cover the numba kernels for all 9 metrics — including the zero-denominator divergence. A--extra torchCPU job would additionally cover the torch code paths (on CPU/float64), leaving only Metal and CUDA genuinely untestable in hosted CI.