Skip to content

Commit 775608c

Browse files
committed
refactor the BytesBytes Codecs to use __init_subclass__
1 parent eba4a8f commit 775608c

File tree

1 file changed

+31
-27
lines changed

1 file changed

+31
-27
lines changed

numcodecs/zarr3.py

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from functools import cached_property, partial
3232
from typing import Any, Self, TypeVar
3333
from warnings import warn
34+
import textwrap
3435

3536
import numpy as np
3637

@@ -84,12 +85,14 @@ class _NumcodecsCodec(Metadata):
8485
codec_name: str
8586
codec_config: dict[str, JSON]
8687

87-
def __init_subclass__(cls, *, codec_name: str | None = None, **kwargs):
88+
def __init_subclass__(cls, *, namespace: str | None = None, codec_name: str | None = None, **kwargs):
89+
"""To be used only when creating the actual public-facing codec class."""
8890
super().__init_subclass__(**kwargs)
89-
if codec_name is not None:
90-
cls.codec_name = CODEC_PREFIX + codec_name
91+
if namespace is not None and codec_name is not None:
92+
cls_name = f"{CODEC_PREFIX}{namespace}.{codec_name}"
93+
cls.codec_name = f"{CODEC_PREFIX}{codec_name}"
9194
cls.__doc__ = f"""
92-
See :class:`{snake_case(cls.codec_name)}.{codec_name}` for more details and parameters.
95+
See :class:`{cls_name}` for more details and parameters.
9396
"""
9497

9598
def __init__(self, **codec_config: JSON) -> None:
@@ -197,30 +200,18 @@ async def _encode_single(self, chunk_ndbuffer: NDBuffer, chunk_spec: ArraySpec)
197200

198201

199202
def _add_docstring(cls: type[T], ref_class_name: str) -> type[T]:
200-
cls.__doc__ = f"""
203+
cls.__doc__ = textwrap.dedent(
204+
f"""
201205
See :class:`{ref_class_name}` for more details and parameters.
202206
"""
207+
)
203208
return cls
204209

205210

206211
def _add_docstring_wrapper(ref_class_name: str) -> partial:
207212
return partial(_add_docstring, ref_class_name=ref_class_name)
208213

209214

210-
def _make_bytes_bytes_codec(codec_name: str, cls_name: str) -> type[_NumcodecsBytesBytesCodec]:
211-
# rename for class scope
212-
_codec_name = CODEC_PREFIX + codec_name
213-
214-
class _Codec(_NumcodecsBytesBytesCodec):
215-
codec_name = _codec_name
216-
217-
def __init__(self, **codec_config: JSON) -> None:
218-
super().__init__(**codec_config)
219-
220-
_Codec.__name__ = cls_name
221-
return _Codec
222-
223-
224215
def _make_array_array_codec(codec_name: str, cls_name: str) -> type[_NumcodecsArrayArrayCodec]:
225216
# rename for class scope
226217
_codec_name = CODEC_PREFIX + codec_name
@@ -267,19 +258,32 @@ def compute_encoded_size(self, input_byte_length: int, chunk_spec: ArraySpec) ->
267258

268259

269260
# bytes-to-bytes codecs
270-
Blosc = _add_docstring(_make_bytes_bytes_codec("blosc", "Blosc"), "numcodecs.blosc.Blosc")
271-
LZ4 = _add_docstring(_make_bytes_bytes_codec("lz4", "LZ4"), "numcodecs.lz4.LZ4")
272-
Zstd = _add_docstring(_make_bytes_bytes_codec("zstd", "Zstd"), "numcodecs.zstd.Zstd")
261+
class Blosc(_NumcodecsBytesBytesCodec, namespace="blosc", codec_name="Blosc"):
262+
pass
273263

274264

275-
#Zlib = _add_docstring(_make_bytes_bytes_codec("zlib", "Zlib"), "numcodecs.zlib.Zlib")
276-
class Zlib(_NumcodecsBytesBytesCodec, codec_name="Zlib"):
265+
class LZ4(_NumcodecsBytesBytesCodec, namespace="lz4", codec_name="LZ4"):
277266
pass
278267

279268

280-
GZip = _add_docstring(_make_bytes_bytes_codec("gzip", "GZip"), "numcodecs.gzip.GZip")
281-
BZ2 = _add_docstring(_make_bytes_bytes_codec("bz2", "BZ2"), "numcodecs.bz2.BZ2")
282-
LZMA = _add_docstring(_make_bytes_bytes_codec("lzma", "LZMA"), "numcodecs.lzma.LZMA")
269+
class Zstd(_NumcodecsBytesBytesCodec, namespace="zstd", codec_name="Zstd"):
270+
pass
271+
272+
273+
class Zlib(_NumcodecsBytesBytesCodec, namespace="zlib", codec_name="Zlib"):
274+
pass
275+
276+
277+
class GZip(_NumcodecsBytesBytesCodec, namespace="gzip", codec_name="GZip"):
278+
pass
279+
280+
281+
class BZ2(_NumcodecsBytesBytesCodec, namespace="bz2", codec_name="BZ2"):
282+
pass
283+
284+
285+
class LZMA(_NumcodecsBytesBytesCodec, namespace="lzma",codec_name="LZMA"):
286+
pass
283287

284288

285289
@_add_docstring_wrapper("numcodecs.shuffle.Shuffle")

0 commit comments

Comments
 (0)