Parent epic: #84
Implementation: #93, stacked on #94
Goal
Adopt the published copick 2.0 alpha runtime and replace metadata-blind tomogram reads with one explicitly read-only, metadata-based accessor.
Runtime metadata
- Python
>=3.11
- Zarr
>=3.1.6,<4
copick>=2.0.0a1
pydantic>=2, with no upper bound
Pydantic is direct because copick-utils imports BaseModel. The locked environment deliberately resolves Pydantic 2.13.4. Stable Python 3.14.7 passes; the earlier failure was an obsolete uv pin selecting Python 3.14.0b2, not a Pydantic incompatibility with stable Python.
Implemented scope
- Raise the Python runtime, update classifiers/package URLs, and regenerate the lock.
- Add
copick_utils.io.zarr.get_level_array(entity, level=0) using zarr.open_group(..., mode="r") and copick.util.ome.get_level_path().
- Replace all eight audited direct tomogram reads.
- Treat level 0 as the first metadata dataset rather than literal path
"0".
- Preserve lazy array access and fail clearly for invalid levels/metadata.
- Smoke-import all implementation modules.
- Load all 32 command entry points and render their help paths.
- Run the locked behavior suite on stable Python 3.11 through 3.14.
Tests do not assert dependency declaration strings or maintain a separate minimum-dependency job. The declared bounds are exercised by the locked clean installation and behavior matrix.
Acceptance criteria
Parent epic: #84
Implementation: #93, stacked on #94
Goal
Adopt the published copick 2.0 alpha runtime and replace metadata-blind tomogram reads with one explicitly read-only, metadata-based accessor.
Runtime metadata
>=3.11>=3.1.6,<4copick>=2.0.0a1pydantic>=2, with no upper boundPydantic is direct because copick-utils imports
BaseModel. The locked environment deliberately resolves Pydantic 2.13.4. Stable Python 3.14.7 passes; the earlier failure was an obsolete uv pin selecting Python 3.14.0b2, not a Pydantic incompatibility with stable Python.Implemented scope
copick_utils.io.zarr.get_level_array(entity, level=0)usingzarr.open_group(..., mode="r")andcopick.util.ome.get_level_path()."0".Tests do not assert dependency declaration strings or maintain a separate minimum-dependency job. The declared bounds are exercised by the locked clean installation and behavior matrix.
Acceptance criteria