Skip to content

Commit 1eb5b3c

Browse files
committed
avoid circular imports by moving numcodec protocol to codec abc
1 parent d91b0e9 commit 1eb5b3c

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

src/zarr/abc/codec.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44
from collections.abc import Mapping
55
from typing import (
66
TYPE_CHECKING,
7+
ClassVar,
78
Generic,
89
Literal,
10+
Self,
911
TypedDict,
1012
TypeVar,
1113
overload,
1214
)
1315

14-
from typing_extensions import ReadOnly
16+
from typing_extensions import Protocol, ReadOnly
1517

1618
from zarr.abc.metadata import Metadata
1719
from zarr.core.buffer import Buffer, NDBuffer
@@ -504,3 +506,22 @@ async def wrap(chunk: CodecInput | None, chunk_spec: ArraySpec) -> CodecOutput |
504506

505507
# Raised when a codec JSON data is invalid
506508
class CodecValidationError(ValueError): ...
509+
510+
511+
class Numcodec(Protocol):
512+
"""
513+
A protocol that models the ``numcodecs.abc.Codec`` interface.
514+
"""
515+
516+
codec_id: ClassVar[str]
517+
518+
def encode(self, buf: Buffer | NDBuffer) -> Buffer | NDBuffer: ...
519+
520+
def decode(
521+
self, buf: Buffer | NDBuffer, out: Buffer | NDBuffer | None = None
522+
) -> Buffer | NDBuffer: ...
523+
524+
def get_config(self) -> CodecJSON_V2[str]: ...
525+
526+
@classmethod
527+
def from_config(cls, config: CodecJSON_V2[str]) -> Self: ...

src/zarr/codecs/_numcodecs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from zarr.abc.codec import CodecJSON_V2
2-
from zarr.codecs._v2 import Numcodec
2+
from zarr.abc.codec import Numcodec
33

44

55
def get_numcodec(data: CodecJSON_V2[str]) -> Numcodec:

0 commit comments

Comments
 (0)