Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
a367268
add numcodec protocol
d-v-b Jul 31, 2025
1d424c0
add tests for numcodecs compatibility
d-v-b Jul 31, 2025
41dd6ff
changelog
d-v-b Jul 31, 2025
c435a59
ignore unknown key
d-v-b Jul 31, 2025
8e50ef8
remove re-implementation of get_codec
d-v-b Aug 1, 2025
ef31c5b
Merge branch 'main' into feat/numcodecs-protocol
d-v-b Aug 1, 2025
4ba7914
Merge branch 'main' into feat/numcodecs-protocol
d-v-b Aug 4, 2025
ab52539
Merge branch 'main' into feat/numcodecs-protocol
d-v-b Aug 4, 2025
95c9c8b
Merge branch 'main' into feat/numcodecs-protocol
d-v-b Aug 4, 2025
156134f
add to_json methods to codecs
d-v-b Aug 4, 2025
486f837
add codecvalidationerror
d-v-b Aug 4, 2025
dd53981
fix v2 codec json models to avoid inheritance
d-v-b Aug 4, 2025
678889a
add blosc json test
d-v-b Aug 4, 2025
dfca3ec
distinguish namedconfig from namedrequiredconfig
d-v-b Aug 4, 2025
262e369
lint
d-v-b Aug 4, 2025
4c7fe8a
make codecvalidationerror effectively single-argument
d-v-b Aug 4, 2025
1e23a91
rename test_endian to test_bytes
d-v-b Aug 4, 2025
d7d4e02
bring in update codec abc
d-v-b Aug 4, 2025
9980823
add to_json_tests
d-v-b Aug 4, 2025
fcf84b3
Merge branch 'main' into feat/numcodecs-protocol
d-v-b Aug 4, 2025
cbb32d7
lint
d-v-b Aug 4, 2025
e2d4df8
fix broken tests that used invalid codec JSON
d-v-b Aug 4, 2025
d91b0e9
update test_info
d-v-b Aug 4, 2025
1eb5b3c
avoid circular imports by moving numcodec protocol to codec abc
d-v-b Aug 4, 2025
94ba77a
use Numcodec instead of numcodecs.abc.Codec
d-v-b Aug 4, 2025
f1ca290
Wip implementation of v2 / v3 codec behavior
d-v-b Aug 4, 2025
5b0c3ac
Merge branch 'main' into feat/numcodecs-protocol
d-v-b Aug 5, 2025
84c9780
avoid circular imports by importing lower-level routines exactly wher…
d-v-b Aug 5, 2025
9a2f35b
push numcodec prototol into abcs; remove all numcodecs.abc.Codec type…
d-v-b Aug 5, 2025
0d0712f
add tests for codecjson typeguard
d-v-b Aug 5, 2025
931bf2f
avoid using zarr's buffer / ndbuffer for numcodec encode / decode
d-v-b Aug 5, 2025
01bd4b7
use Any to model input / output types of numcodec protocol
d-v-b Aug 5, 2025
f06c6aa
add numcodec protocol
d-v-b Jul 31, 2025
b71e8ac
add tests for numcodecs compatibility
d-v-b Jul 31, 2025
bcaa9ee
changelog
d-v-b Jul 31, 2025
7e49f39
ignore unknown key
d-v-b Jul 31, 2025
4b53f5d
remove re-implementation of get_codec
d-v-b Aug 1, 2025
b35e6c9
avoid circular imports by importing lower-level routines exactly wher…
d-v-b Aug 5, 2025
deef94a
push numcodec prototol into abcs; remove all numcodecs.abc.Codec type…
d-v-b Aug 5, 2025
f057525
add tests for codecjson typeguard
d-v-b Aug 5, 2025
190e1b2
avoid using zarr's buffer / ndbuffer for numcodec encode / decode
d-v-b Aug 5, 2025
82992c5
use Any to model input / output types of numcodec protocol
d-v-b Aug 5, 2025
7ea7e91
Merge branch 'feat/numcodecs-protocol' of github.com:d-v-b/zarr-pytho…
d-v-b Aug 5, 2025
cee4389
Merge branch 'main' into feat/numcodecs-protocol
d-v-b Aug 6, 2025
51b9431
Merge branch 'feat/numcodecs-protocol' of github.com:d-v-b/zarr-pytho…
d-v-b Aug 6, 2025
0183eb5
bring in contents of numcodecs.zarr3
d-v-b Aug 13, 2025
5f06c9e
fix tests
d-v-b Aug 13, 2025
e64830f
fix docs
d-v-b Aug 13, 2025
b6b2260
fix config test
d-v-b Aug 13, 2025
a971e9c
Merge branch 'main' of https://github.com/zarr-developers/zarr-python…
d-v-b Aug 13, 2025
92e9442
Merge branch 'main' into chore/handle-numcodecs-codecs
d-v-b Aug 17, 2025
233fbbf
Merge branch 'main' into chore/handle-numcodecs-codecs
d-v-b Aug 18, 2025
223ae65
make zarr.codecs.numcodecs
d-v-b Aug 18, 2025
8645370
Merge branch 'main' into chore/handle-numcodecs-codecs
d-v-b Aug 19, 2025
1720a75
complete move to zarr.codecs.numcodecs
d-v-b Aug 19, 2025
fe39bfb
Merge branch 'chore/handle-numcodecs-codecs' of https://github.com/d-…
d-v-b Aug 19, 2025
0e10d8e
Merge branch 'main' into chore/handle-numcodecs-codecs
d-v-b Aug 19, 2025
9a0d163
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Aug 21, 2025
9ac07da
adjust sharding JSON model
d-v-b Aug 21, 2025
90a7aca
fix info tests
d-v-b Aug 21, 2025
d64a5d2
remove redundant declaration
d-v-b Aug 21, 2025
7895f8f
make test_info more robust
d-v-b Aug 21, 2025
41459eb
fix imports and type checking
d-v-b Aug 21, 2025
096cc1a
add temporary default implementations of json ser/de serialization
d-v-b Aug 21, 2025
de9e3dd
temporarily skip codec refinement in v2 metadata
d-v-b Aug 21, 2025
d5e0461
changelog
d-v-b Aug 21, 2025
e3e1216
Merge branch 'main' of github.com:zarr-developers/zarr-python into ch…
d-v-b Aug 21, 2025
666186f
Merge branch 'chore/handle-numcodecs-codecs' of github.com:d-v-b/zarr…
d-v-b Aug 21, 2025
0a724e6
register codecs in codecs/__init__.py
d-v-b Aug 21, 2025
f023487
remove old registration sites
d-v-b Aug 21, 2025
dedeaf6
Merge branch 'chore/handle-numcodecs-codecs' of github.com:d-v-b/zarr…
d-v-b Aug 21, 2025
6636c10
wip
d-v-b Aug 21, 2025
3d910a5
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Aug 21, 2025
53c6b46
wip
d-v-b Aug 21, 2025
d26eeae
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Sep 2, 2025
2939fe9
route requests for v2 codecs to use the v3-adapted codecs
d-v-b Sep 2, 2025
1fbe9e3
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Sep 2, 2025
49c5710
fix iteration bug
d-v-b Sep 2, 2025
122b19e
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Sep 13, 2025
a134233
improve method annotations for numcodecs codecs
d-v-b Sep 13, 2025
fe21d7c
fixup
d-v-b Sep 14, 2025
0252ac3
revert enum removal, fix doctests
d-v-b Sep 15, 2025
dd22a98
fix info test
d-v-b Sep 15, 2025
9cebaaf
Merge branch 'main' into feat/v2-v3-codecs
d-v-b Sep 15, 2025
ea7594c
bump minimum version of typing_extensions
d-v-b Sep 15, 2025
2e316ed
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Sep 15, 2025
68da9bf
use consistent typing_extensions version
d-v-b Sep 15, 2025
33d0bd9
fix type annotation in overload
d-v-b Sep 15, 2025
1c9f9fe
use parse_dtype
d-v-b Sep 15, 2025
d53d153
revert mangling of create overloads
d-v-b Sep 15, 2025
951560b
refactor codecjson types to avoid circular dependency
d-v-b Sep 15, 2025
9722e9b
move codecjson definition to common
d-v-b Sep 15, 2025
bb76132
update typeddicts, and handle location in crc32c codec json
d-v-b Sep 15, 2025
65c2415
adjust error message
d-v-b Sep 15, 2025
a63982f
fix json roundtrip tests
d-v-b Sep 15, 2025
50849fe
correct test invocations and weaken the requirements for crc32c json
d-v-b Sep 16, 2025
a93d015
lint
d-v-b Sep 16, 2025
4363092
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Sep 22, 2025
48e4d03
fix stale import
d-v-b Sep 22, 2025
8a68ed8
simplify type in _LikeArgs
d-v-b Sep 22, 2025
28c5b3b
fix stale imports
d-v-b Sep 22, 2025
193887a
simplify tests
d-v-b Sep 22, 2025
19762ce
add default compute_encoded_size implementations
d-v-b Sep 22, 2025
97002a9
remove cache poisoing bug, and deploy type checker throughout the cod…
d-v-b Sep 22, 2025
7fcbbd3
lint
d-v-b Sep 22, 2025
cbf71a6
lint
d-v-b Sep 22, 2025
8566a8f
make cli tests pass
d-v-b Sep 22, 2025
4609d23
add imagecodec example
d-v-b Sep 22, 2025
c82649f
fix blosc parsing from dict by ensuring that typesize is set on deser…
d-v-b Sep 22, 2025
bc43d5a
Merge branch 'main' into feat/v2-v3-codecs
d-v-b Sep 23, 2025
b770694
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Sep 23, 2025
5c577e1
add some new codecs to regression tests
d-v-b Sep 24, 2025
b3d5659
add changelog
d-v-b Sep 24, 2025
c7e4676
add changelog
d-v-b Sep 24, 2025
9c09932
per-codec tests for new codecs
d-v-b Sep 24, 2025
15eb997
add some docstrings and fix sharding JSON check
d-v-b Sep 24, 2025
3fb7126
lint
d-v-b Sep 24, 2025
56ad592
refactor codec parsing and add tests
d-v-b Sep 24, 2025
9510a5e
update codec tests
d-v-b Sep 24, 2025
feb2047
type-safety and more improvements using delta codec as a template
d-v-b Sep 25, 2025
e769f31
weaken codec JSON test, update crc32c test cases
d-v-b Sep 25, 2025
ce28794
pull array-array codecs out into their own modules, and design codec …
d-v-b Sep 25, 2025
8c9aa99
Merge branch 'main' of github.com:zarr-developers/zarr-python into fe…
d-v-b Sep 25, 2025
90666ea
lint
d-v-b Sep 25, 2025
af6eef9
fix json deserialization for fixed scale offset
d-v-b Sep 25, 2025
d0d5e92
make numcodecs codecs backwards compatible
d-v-b Sep 25, 2025
f4598c8
lint
d-v-b Sep 25, 2025
79f4e31
update test to use to_json output
d-v-b Sep 25, 2025
7a47ef7
lint
d-v-b Sep 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ repos:
- donfig
- numcodecs[crc32c]
- numpy==2.1 # until https://github.com/numpy/numpy/issues/28034 is resolved
- typing_extensions
- typing_extensions>=4.10.0
- universal-pathlib
- obstore>=0.5.1
# Tests
Expand Down
5 changes: 5 additions & 0 deletions changes/3332.feature.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Adds methods to the base `Codec` for creating Zarr V2 or Zarr V3 metadata for a given codec. This removes the distinction between Zarr V2 and Zarr V3 codecs, which will greatly simplify the conversion of Zarr V2 data to Zarr V3.

This PR also changes how codecs defined in Numcodecs are handled: When a user attempts to create an array with a numcodecs codec (say, `numcodecs.Blosc`), Zarr will internally replace this codec with the `blosc` codec defined in Zarr. This ensures that Zarr controls the JSON metadata of the codecs we use, and that codecs are uniformly handled internally.

Finally, this PR adds support for arbitrary codecs that implement the Numcodecs API. This codecs are wrapped in an adapter layer that imbues them with Zarr V3 codec properties. This adaptation is made on a best-effort basis, and in many cases may not be a substitute for writing a complete Zarr V3 codec.
51 changes: 51 additions & 0 deletions examples/image_codec.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# /// script
# requires-python = ">=3.11"
# dependencies = [
# "zarr @ git+https://github.com/zarr-developers/zarr-python.git@main",
# "imagecodecs==2025.3.30",
# "pytest==8.4.2"
# ]
# ///

from typing import Literal

import numcodecs
import numpy as np
import pytest
from imagecodecs.numcodecs import Jpeg

import zarr
from zarr.core.common import ZarrFormat

numcodecs.register_codec(Jpeg)
jpg_codec = Jpeg()


@pytest.mark.parametrize("zarr_format", ZarrFormat)
def test(zarr_format: Literal[2, 3]) -> None:
store = {}
if zarr_format == 2:
z_w = zarr.create_array(
store=store,
data=np.zeros((100, 100, 3), dtype=np.uint8),
compressors=jpg_codec,
zarr_format=zarr_format,
)
else:
z_w = zarr.create_array(
store=store,
data=np.zeros((100, 100, 3), dtype=np.uint8),
serializer=jpg_codec,
zarr_format=zarr_format,
)
z_w[:] = 2
z_r = zarr.open_array(store=store, zarr_format=zarr_format)
assert np.all(z_r[:] == 2)
if zarr_format == 2:
print(z_r.metadata.to_dict()["compressor"])
else:
print(z_r.metadata.to_dict()["codecs"])


if __name__ == "__main__":
pytest.main([__file__, f"-c {__file__}", "-s"])
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ dependencies = [
'packaging>=22.0',
'numpy>=1.26',
'numcodecs[crc32c]>=0.14',
'typing_extensions>=4.9',
'typing_extensions>=4.10.0',
'donfig>=0.8',
]

Expand Down Expand Up @@ -239,7 +239,7 @@ dependencies = [
'fsspec==2023.10.0',
's3fs==2023.10.0',
'universal_pathlib==0.0.22',
'typing_extensions==4.9.*',
'typing_extensions>=4.10.0',
'donfig==0.8.*',
'obstore==0.5.*',
# test deps
Expand Down
66 changes: 40 additions & 26 deletions src/zarr/abc/codec.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
from __future__ import annotations

from abc import abstractmethod
from collections.abc import Mapping
from typing import TYPE_CHECKING, Generic, TypeGuard, TypeVar

from typing_extensions import ReadOnly, TypedDict
from typing import (
TYPE_CHECKING,
Generic,
Literal,
Self,
TypeVar,
overload,
)

from zarr.abc.metadata import Metadata
from zarr.core.buffer import Buffer, NDBuffer
from zarr.core.common import NamedConfig, concurrent_map
from zarr.core.common import (
CodecJSON,
CodecJSON_V2,
CodecJSON_V3,
ZarrFormat,
_check_codecjson_v2,
concurrent_map,
)
from zarr.core.config import config

if TYPE_CHECKING:
Expand Down Expand Up @@ -37,27 +48,6 @@
CodecInput = TypeVar("CodecInput", bound=NDBuffer | Buffer)
CodecOutput = TypeVar("CodecOutput", bound=NDBuffer | Buffer)

TName = TypeVar("TName", bound=str, covariant=True)


class CodecJSON_V2(TypedDict, Generic[TName]):
"""The JSON representation of a codec for Zarr V2"""

id: ReadOnly[TName]


def _check_codecjson_v2(data: object) -> TypeGuard[CodecJSON_V2[str]]:
return isinstance(data, Mapping) and "id" in data and isinstance(data["id"], str)


CodecJSON_V3 = str | NamedConfig[str, Mapping[str, object]]
"""The JSON representation of a codec for Zarr V3."""

# The widest type we will *accept* for a codec JSON
# This covers v2 and v3
CodecJSON = str | Mapping[str, object]
"""The widest type of JSON-like input that could specify a codec."""


class BaseCodec(Metadata, Generic[CodecInput, CodecOutput]):
"""Generic base class for codecs.
Expand Down Expand Up @@ -181,6 +171,30 @@ async def encode(
"""
return await _batching_helper(self._encode_single, chunks_and_specs)

@overload
def to_json(self, zarr_format: Literal[2]) -> CodecJSON_V2: ...
@overload
def to_json(self, zarr_format: Literal[3]) -> CodecJSON_V3: ...

def to_json(self, zarr_format: ZarrFormat) -> CodecJSON_V2 | CodecJSON_V3:
raise NotImplementedError

@classmethod
def _from_json_v2(cls, data: CodecJSON_V2) -> Self:
return cls(**{k: v for k, v in data.items() if k != "id"})

@classmethod
def _from_json_v3(cls, data: CodecJSON_V3) -> Self:
if isinstance(data, str):
return cls()
return cls(**data.get("configuration", {}))

@classmethod
def from_json(cls, data: CodecJSON) -> Self:
if _check_codecjson_v2(data):
return cls._from_json_v2(data)
return cls._from_json_v3(data)


class ArrayArrayCodec(BaseCodec[NDBuffer, NDBuffer]):
"""Base class for array-to-array codecs."""
Expand Down
14 changes: 2 additions & 12 deletions src/zarr/abc/numcodec.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from typing import Any, Self, TypeGuard

from typing_extensions import Protocol
from typing_extensions import Protocol, runtime_checkable


@runtime_checkable
class Numcodec(Protocol):
"""
A protocol that models the ``numcodecs.abc.Codec`` interface.
Expand Down Expand Up @@ -88,14 +89,3 @@ def _is_numcodec_cls(obj: object) -> TypeGuard[type[Numcodec]]:
and hasattr(obj, "from_config")
and callable(obj.from_config)
)


def _is_numcodec(obj: object) -> TypeGuard[Numcodec]:
"""
Check if the given object implements the Numcodec protocol.

The @runtime_checkable decorator does not allow issubclass checks for protocols with non-method
members (i.e., attributes), so we use this function to manually check for the presence of the
required attributes and methods on a given object.
"""
return _is_numcodec_cls(type(obj))
1 change: 1 addition & 0 deletions src/zarr/abc/store.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,7 @@ async def getsize(self, key: str) -> int:
FileNotFoundError
When the given key does not exist in the store.
"""

# Note to implementers: this default implementation is very inefficient since
# it requires reading the entire object. Many systems will have ways to get the
# size of an object without reading it.
Expand Down
5 changes: 2 additions & 3 deletions src/zarr/api/asynchronous.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@
from zarr.abc.numcodec import Numcodec
from zarr.core.buffer import NDArrayLikeOrScalar
from zarr.core.chunk_key_encodings import ChunkKeyEncoding
from zarr.core.metadata.v2 import CompressorLikev2
from zarr.storage import StoreLike

# TODO: this type could use some more thought
Expand Down Expand Up @@ -130,8 +129,8 @@ class _LikeArgs(TypedDict):
chunks: NotRequired[tuple[int, ...]]
dtype: NotRequired[np.dtype[np.generic]]
order: NotRequired[Literal["C", "F"]]
filters: NotRequired[tuple[Numcodec, ...] | None]
compressor: NotRequired[CompressorLikev2]
filters: NotRequired[tuple[Codec, ...] | None]
compressor: NotRequired[Codec | None]
codecs: NotRequired[tuple[Codec, ...]]


Expand Down
51 changes: 41 additions & 10 deletions src/zarr/codecs/__init__.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,28 @@
from __future__ import annotations

from zarr.codecs.blosc import BloscCname, BloscCodec, BloscShuffle
from zarr.codecs.blosc import BloscCname, BloscCname_Lit, BloscCodec, BloscShuffle, BloscShuffle_Lit
from zarr.codecs.bytes import BytesCodec, Endian
from zarr.codecs.crc32c_ import Crc32cCodec
from zarr.codecs.gzip import GzipCodec
from zarr.codecs.numcodecs import (
BZ2,
CRC32,
CRC32C,
LZ4,
LZMA,
ZFPY,
Adler32,
AsType,
BitRound,
Blosc,
Delta,
FixedScaleOffset,
Fletcher32,
GZip,
JenkinsLookup3,
PackBits,
PCodec,
Quantize,
Shuffle,
Zlib,
Zstd,
)
from zarr.codecs.numcodecs.delta import Delta
from zarr.codecs.sharding import ShardingCodec, ShardingCodecIndexLocation
from zarr.codecs.transpose import TransposeCodec
from zarr.codecs.vlen_utf8 import VLenBytesCodec, VLenUTF8Codec
Expand All @@ -35,8 +31,10 @@

__all__ = [
"BloscCname",
"BloscCname_Lit",
"BloscCodec",
"BloscShuffle",
"BloscShuffle_Lit",
"BytesCodec",
"Crc32cCodec",
"Endian",
Expand Down Expand Up @@ -65,29 +63,62 @@
# Register all the codecs formerly contained in numcodecs.zarr3

register_codec("numcodecs.bz2", BZ2, qualname="zarr.codecs.numcodecs.BZ2")
register_codec("bz2", BZ2, qualname="zarr.codecs.numcodecs.BZ2")

register_codec("numcodecs.crc32", CRC32, qualname="zarr.codecs.numcodecs.CRC32")
register_codec("numcodecs.crc32c", CRC32C, qualname="zarr.codecs.numcodecs.CRC32C")
register_codec("crc32", CRC32, qualname="zarr.codecs.numcodecs.CRC32")

register_codec("numcodecs.lz4", LZ4, qualname="zarr.codecs.numcodecs.LZ4")
register_codec("lz4", LZ4, qualname="zarr.codecs.numcodecs.LZ4")

register_codec("numcodecs.lzma", LZMA, qualname="zarr.codecs.numcodecs.LZMA")
register_codec("lzma", LZMA, qualname="zarr.codecs.numcodecs.LZMA")

register_codec("numcodecs.zfpy", ZFPY, qualname="zarr.codecs.numcodecs.ZFPY")
register_codec("zfpy", ZFPY, qualname="zarr.codecs.numcodecs.ZFPY")

register_codec("numcodecs.adler32", Adler32, qualname="zarr.codecs.numcodecs.Adler32")
register_codec("adler32", Adler32, qualname="zarr.codecs.numcodecs.Adler32")

register_codec("numcodecs.astype", AsType, qualname="zarr.codecs.numcodecs.AsType")
register_codec("astype", AsType, qualname="zarr.codecs.numcodecs.AsType")

register_codec("numcodecs.bitround", BitRound, qualname="zarr.codecs.numcodecs.BitRound")
register_codec("numcodecs.blosc", Blosc, qualname="zarr.codecs.numcodecs.Blosc")
register_codec("bitround", BitRound, qualname="zarr.codecs.numcodecs.BitRound")

register_codec("numcodecs.delta", Delta, qualname="zarr.codecs.numcodecs.Delta")
register_codec("delta", Delta, qualname="zarr.codecs.numcodecs.Delta")

register_codec(
"numcodecs.fixedscaleoffset",
FixedScaleOffset,
qualname="zarr.codecs.numcodecs.FixedScaleOffset",
)
register_codec(
"fixedscaleoffset",
FixedScaleOffset,
qualname="zarr.codecs.numcodecs.FixedScaleOffset",
)

register_codec("numcodecs.fletcher32", Fletcher32, qualname="zarr.codecs.numcodecs.Fletcher32")
register_codec("numcodecs.gzip", GZip, qualname="zarr.codecs.numcodecs.GZip")
register_codec("fletcher32", Fletcher32, qualname="zarr.codecs.numcodecs.Fletcher32")

register_codec(
"numcodecs.jenkins_lookup3", JenkinsLookup3, qualname="zarr.codecs.numcodecs.JenkinsLookup3"
)
register_codec("jenkins_lookup3", JenkinsLookup3, qualname="zarr.codecs.numcodecs.JenkinsLookup3")

register_codec("pcodec", PCodec, qualname="zarr.codecs.numcodecs.PCodec")
register_codec("numcodecs.pcodec", PCodec, qualname="zarr.codecs.numcodecs.PCodec")

register_codec("numcodecs.packbits", PackBits, qualname="zarr.codecs.numcodecs.PackBits")
register_codec("packbits", PackBits, qualname="zarr.codecs.numcodecs.PackBits")

register_codec("numcodecs.quantize", Quantize, qualname="zarr.codecs.numcodecs.Quantize")
register_codec("quantize", Quantize, qualname="zarr.codecs.numcodecs.Quantize")

register_codec("numcodecs.shuffle", Shuffle, qualname="zarr.codecs.numcodecs.Shuffle")
register_codec("shuffle", Shuffle, qualname="zarr.codecs.numcodecs.Shuffle")

register_codec("numcodecs.zlib", Zlib, qualname="zarr.codecs.numcodecs.Zlib")
register_codec("numcodecs.zstd", Zstd, qualname="zarr.codecs.numcodecs.Zstd")
register_codec("zlib", Zlib, qualname="zarr.codecs.numcodecs.Zlib")
Loading
Loading