2626
2727import asyncio
2828import math
29+ from collections .abc import Callable
2930from dataclasses import dataclass , replace
30- from functools import cached_property
31+ from functools import cached_property , partial
3132from typing import Any , Self , TypeVar
3233from warnings import warn
3334
@@ -180,6 +181,10 @@ def _add_docstring(cls: type[T], ref_class_name: str) -> type[T]:
180181 return cls
181182
182183
184+ def _add_docstring_wrapper (ref_class_name : str ) -> Callable [[type [T ]], type [T ]]:
185+ return partial (_add_docstring , ref_class_name = ref_class_name )
186+
187+
183188def _make_bytes_bytes_codec (codec_name : str , cls_name : str ) -> type [_NumcodecsBytesBytesCodec ]:
184189 # rename for class scope
185190 _codec_name = CODEC_PREFIX + codec_name
@@ -249,6 +254,7 @@ def compute_encoded_size(self, input_byte_length: int, chunk_spec: ArraySpec) ->
249254LZMA = _add_docstring (_make_bytes_bytes_codec ("lzma" , "LZMA" ), "numcodecs.lzma.LZMA" )
250255
251256
257+ @_add_docstring_wrapper ("numcodecs.shuffle.Shuffle" )
252258class Shuffle (_NumcodecsBytesBytesCodec ):
253259 codec_name = f"{ CODEC_PREFIX } shuffle"
254260
@@ -261,15 +267,14 @@ def evolve_from_array_spec(self, array_spec: ArraySpec) -> Self:
261267 return self # pragma: no cover
262268
263269
264- Shuffle = _add_docstring (Shuffle , "numcodecs.shuffle.Shuffle" )
265-
266270# array-to-array codecs ("filters")
267271Delta = _add_docstring (_make_array_array_codec ("delta" , "Delta" ), "numcodecs.delta.Delta" )
268272BitRound = _add_docstring (
269273 _make_array_array_codec ("bitround" , "BitRound" ), "numcodecs.bitround.BitRound"
270274)
271275
272276
277+ @_add_docstring_wrapper ("numcodecs.fixedscaleoffset.FixedScaleOffset" )
273278class FixedScaleOffset (_NumcodecsArrayArrayCodec ):
274279 codec_name = f"{ CODEC_PREFIX } fixedscaleoffset"
275280
@@ -287,9 +292,7 @@ def evolve_from_array_spec(self, array_spec: ArraySpec) -> Self:
287292 return self
288293
289294
290- FixedScaleOffset = _add_docstring (FixedScaleOffset , "numcodecs.fixedscaleoffset.FixedScaleOffset" )
291-
292-
295+ @_add_docstring_wrapper ("numcodecs.quantize.Quantize" )
293296class Quantize (_NumcodecsArrayArrayCodec ):
294297 codec_name = f"{ CODEC_PREFIX } quantize"
295298
@@ -302,9 +305,7 @@ def evolve_from_array_spec(self, array_spec: ArraySpec) -> Self:
302305 return self
303306
304307
305- _add_docstring (Quantize , "numcodecs.quantize.Quantize" )
306-
307-
308+ @_add_docstring_wrapper ("numcodecs.packbits.PackBits" )
308309class PackBits (_NumcodecsArrayArrayCodec ):
309310 codec_name = f"{ CODEC_PREFIX } packbits"
310311
@@ -323,9 +324,7 @@ def validate(self, *, dtype: np.dtype[Any], **_kwargs) -> None:
323324 raise ValueError (f"Packbits filter requires bool dtype. Got { dtype } ." )
324325
325326
326- PackBits = _add_docstring (PackBits , "numcodecs.packbits.PackBits" )
327-
328-
327+ @_add_docstring_wrapper ("numcodecs.astype.AsType" )
329328class AsType (_NumcodecsArrayArrayCodec ):
330329 codec_name = f"{ CODEC_PREFIX } astype"
331330
@@ -342,8 +341,6 @@ def evolve_from_array_spec(self, array_spec: ArraySpec) -> Self:
342341 return self
343342
344343
345- AsType = _add_docstring (AsType , "numcodecs.astype.AsType" )
346-
347344# bytes-to-bytes checksum codecs
348345CRC32 = _add_docstring (_make_checksum_codec ("crc32" , "CRC32" ), "numcodecs.checksum32.CRC32" )
349346CRC32C = _add_docstring (_make_checksum_codec ("crc32c" , "CRC32C" ), "numcodecs.checksum32.CRC32C" )
@@ -358,3 +355,27 @@ def evolve_from_array_spec(self, array_spec: ArraySpec) -> Self:
358355# array-to-bytes codecs
359356PCodec = _add_docstring (_make_array_bytes_codec ("pcodec" , "PCodec" ), "numcodecs.pcodec.PCodec" )
360357ZFPY = _add_docstring (_make_array_bytes_codec ("zfpy" , "ZFPY" ), "numcodecs.zfpy.ZFPY" )
358+
359+ __all__ = [
360+ "Blosc" ,
361+ "LZ4" ,
362+ "Zstd" ,
363+ "Zlib" ,
364+ "GZip" ,
365+ "BZ2" ,
366+ "LZMA" ,
367+ "Shuffle" ,
368+ "Delta" ,
369+ "BitRound" ,
370+ "FixedScaleOffset" ,
371+ "Quantize" ,
372+ "PackBits" ,
373+ "AsType" ,
374+ "CRC32" ,
375+ "CRC32C" ,
376+ "Adler32" ,
377+ "Fletcher32" ,
378+ "JenkinsLookup3" ,
379+ "PCodec" ,
380+ "ZFPY" ,
381+ ]
0 commit comments