Skip to content

Track upstream neuroconv zarr 3 support; drop the zarr<3 pin when it shipsΒ #129

Open

Description

@tabedzki

πŸ€– AI text below πŸ€–

Duplicate record of tabedzki/tank-lab-to-nwb#2 β€” kept in both repos; update both when status changes.

Summary

A fresh install of neuroconv currently fails at import, which breaks the NWB export's converter (tank-lab-to-nwb). We pin zarr<3 as a stopgap. This issue tracks upstream neuroconv's zarr 3 support so we know when to drop the pin.

Cause

  • neuroconv (through the latest release, 0.10.2) uses the zarr 2 API at import time: zarr.codec_registry in neuroconv/tools/nwb_helpers/_configuration_models/_zarr_dataset_io.py:15.
  • neuroconv does not bound zarr itself; it only requires hdmf_zarr>=0.11.
  • hdmf-zarr 0.14.0 migrated to zarr 3 (Migrate hdmf-zarr from zarr-python v2 to v3Β hdmf-dev/hdmf-zarr#325) and requires zarr>=3.4. The resolver now picks hdmf-zarr 0.14 + zarr 3.4, and the import fails:
AttributeError: module 'zarr' has no attribute 'codec_registry'

Verified 2026-09-25 in a clean Python 3.12 venv:

  • neuroconv[scanimage,suite2p] alone β†’ zarr 3.4.0 / hdmf-zarr 0.14.0 β†’ import fails.
  • Adding zarr<3 β†’ zarr 2.18.7 / hdmf-zarr 0.13.0 / numcodecs 0.15.1 β†’ import works. No hdmf-zarr cap needed.

Our stopgap

zarr<3 added to tank-lab-to-nwb dependencies, with a regression test (tests/test_dependency_pins.py) that fails under zarr 3 and passes under zarr 2:
branch tabedzki/build/pin-zarr-lt3 (off building-nwb-converter), commit tabedzki/tank-lab-to-nwb@877892e.

uv.lock was not regenerated because [tool.uv.sources] points at sibling paths that don't resolve. The locked zarr (2.18.4) already satisfies the pin.

Upstream items to track

Item Status (2026-09-25)
catalystneuro/neuroconv#2062 β€” bug report for this failure Closed
catalystneuro/neuroconv#2063 β€” stopgap zarr<3 pin in neuroconv Merged 2026-09-24, not yet released (0.10.2 lacks it; main is 0.10.3.dev0)
catalystneuro/neuroconv#2002 β€” zarr 3 forward-compat (option renames) Merged
catalystneuro/neuroconv#1749 β€” "Zarr v3 backend configuration" (the real port) Draft, review required
SpikeInterface/probeinterface#387 β€” zarr v3 (blocks #1749) Open
SpikeInterface/spikeinterface#4260 β€” zarr v3 (blocks #1749) Open
hdmf-dev/hdmf-zarr#325 β€” hdmf-zarr zarr 3 migration Merged, released as hdmf-zarr 0.14.0

When to act

  • neuroconv release containing #2063 (β‰₯ 0.10.3): our pin becomes redundant but harmless; keep it until the next item.
  • neuroconv release containing #1749 (zarr 3 support): remove zarr<3 from tank-lab-to-nwb, update tests/test_dependency_pins.py (drop the < 3 assertion, keep the import check), relock.

We write HDF5 NWB files, so zarr only matters because neuroconv imports it. We don't need zarr 3 features.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    dependenciesPull requests that update a dependency file

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions