Blosc / Blosc/python-blosc2

[WASM] SChunk.__getitem__/get_slice raises RuntimeError on Pyodide 0.29.4 (works on 0.29.3 and 314.0.0)

Ouverte
#664 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
211
Forks
58
Merge moyen
1 j 17 h
PR mergées (30 j)
6

Description

## Summary
On the WASM/Pyodide build, slicing an **in-memory** `SChunk` that was loaded from
a frame fails with `RuntimeError: Error while getting the slice` — but **only
under Pyodide 0.29.4**. The same code passes on Pyodide **0.29.3** (cp313) and
**314.0.0** (cp314).

The wheel tag is `pyemscripten_2025_0_wasm32` (ABI-level), so a wheel built/tested
against 0.29.3 still runs on a user's 0.29.4 runtime — meaning this is a genuine
runtime failure for 0.29.4 users, not just a CI artifact.

## Reproducer
`tests/test_open.py::test_load_schunk_returns_in_memory_copy`:

```python
urlpath = tmp_path / "schunk.b2frame"
data = np.arange(20, dtype=np.int32)
blosc2.SChunk(data=data, urlpath=urlpath, mode="w",
cparams={"typesize": data.dtype.itemsize})
loaded = blosc2.load(urlpath) # in-memory copy, urlpath is None
assert loaded[:] == data.tobytes() # <-- RuntimeError here
```

## Traceback

schunk.py:1114 __getitem__ -> get_slice(item.start, item.stop)
schunk.py:1058 get_slice -> super().get_slice(start, stop, out)
blosc2_ext.pyx:2058 -> RuntimeError: Error while getting the slice

## Environment matrix

```
│ Python / ABI │ Pyodide │ Result │
│ cp313 / pyemscripten_2025_0 │ 0.29.3 │ ✅ pass │
│ cp313 / pyemscripten_2025_0 │ 0.29.4 │ ❌ RuntimeError │
│ cp314 / pyemscripten_2026_0 │ 314.0.0 │ ✅ pass │
```

## Current workaround

.github/workflows/cibuildwheels.yml pins CIBW_PYODIDE_VERSION: 0.29.3 for the
cp313 wasm job (cibuildwheel 4.1's default is 0.29.4). This keeps CI green and
matches the wheels wasm.yml already ships, but does not fix the runtime for
0.29.4 users.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par tests/test_open.py::test_load_schunk_returns_in_memory_copy et reproduisez l’échec sous Pyodide 0.29.4, puis inspectez le chemin get_slice/__getitem__ de schunk.py et le point d’entrée blosc2_ext.pyx indiqué dans le traceback. Vérifiez la gestion de la version de Pyodide dans .github/workflows/cibuildwheels.yml et wasm.yml. Le travail est terminé lorsque le slicing de SChunk chargés en mémoire fonctionne sous 0.29.4 sans provoquer de régression dans les environnements 0.29.3 et 314.0.0, qui passent actuellement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python, wasm
Domaine
build-system, testing-qa
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.