numcodecs 0.15.0__cp313-cp313-win_amd64.whl → 0.15.1__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of numcodecs might be problematic. Click here for more details.

Binary file
Binary file
numcodecs/checksum32.py CHANGED
@@ -13,7 +13,7 @@ from .jenkins import jenkins_lookup3
13
13
 
14
14
  _crc32c: Optional[ModuleType] = None
15
15
  with suppress(ImportError):
16
- import crc32c as _crc32c # type: ignore[no-redef]
16
+ import crc32c as _crc32c # type: ignore[no-redef, unused-ignore]
17
17
 
18
18
  if TYPE_CHECKING: # pragma: no cover
19
19
  from typing_extensions import Buffer
Binary file
numcodecs/errors.py ADDED
@@ -0,0 +1,26 @@
1
+ """
2
+ This module defines custom exceptions that are raised in the `numcodecs` codebase.
3
+ """
4
+
5
+
6
+ class UnknownCodecError(ValueError):
7
+ """
8
+ An exception that is raised when trying to receive a codec that has not been registered.
9
+
10
+ Parameters
11
+ ----------
12
+ codec_id : str
13
+ Codec identifier.
14
+
15
+ Examples
16
+ ----------
17
+ >>> import numcodecs
18
+ >>> numcodecs.get_codec({"codec_id": "unknown"})
19
+ Traceback (most recent call last):
20
+ ...
21
+ UnknownCodecError: codec not available: 'unknown'
22
+ """
23
+
24
+ def __init__(self, codec_id: str):
25
+ self.codec_id = codec_id
26
+ super().__init__(f"codec not available: '{codec_id}'")
Binary file
Binary file
numcodecs/json.py CHANGED
@@ -68,7 +68,7 @@ class JSON(Codec):
68
68
  def encode(self, buf):
69
69
  try:
70
70
  buf = np.asarray(buf)
71
- except ValueError:
71
+ except ValueError: # pragma: no cover
72
72
  buf = np.asarray(buf, dtype=object)
73
73
  items = np.atleast_1d(buf).tolist()
74
74
  items.append(buf.dtype.str)
Binary file
numcodecs/quantize.py CHANGED
@@ -65,9 +65,9 @@ class Quantize(Codec):
65
65
  precision = 10.0**-self.digits
66
66
  exp = math.log10(precision)
67
67
  if exp < 0:
68
- exp = int(math.floor(exp))
68
+ exp = math.floor(exp)
69
69
  else:
70
- exp = int(math.ceil(exp))
70
+ exp = math.ceil(exp)
71
71
  bits = math.ceil(math.log2(10.0**-exp))
72
72
  scale = 2.0**bits
73
73
  enc = np.around(scale * arr) / scale
numcodecs/registry.py CHANGED
@@ -5,6 +5,7 @@ import logging
5
5
  from importlib.metadata import EntryPoints, entry_points
6
6
 
7
7
  from numcodecs.abc import Codec
8
+ from numcodecs.errors import UnknownCodecError
8
9
 
9
10
  logger = logging.getLogger("numcodecs")
10
11
  codec_registry: dict[str, Codec] = {}
@@ -50,7 +51,7 @@ def get_codec(config):
50
51
  register_codec(cls, codec_id=codec_id)
51
52
  if cls:
52
53
  return cls.from_config(config)
53
- raise ValueError(f'codec not available: {codec_id!r}')
54
+ raise UnknownCodecError(f"{codec_id!r}")
54
55
 
55
56
 
56
57
  def register_codec(cls, codec_id=None):
@@ -3,11 +3,12 @@ import inspect
3
3
  import pytest
4
4
 
5
5
  import numcodecs
6
+ from numcodecs.errors import UnknownCodecError
6
7
  from numcodecs.registry import get_codec
7
8
 
8
9
 
9
10
  def test_registry_errors():
10
- with pytest.raises(ValueError):
11
+ with pytest.raises(UnknownCodecError, match='foo'):
11
12
  get_codec({'id': 'foo'})
12
13
 
13
14
 
@@ -91,7 +91,7 @@ def test_generic_compressor(
91
91
  (numcodecs.zarr3.Delta, {"dtype": "float32"}),
92
92
  (numcodecs.zarr3.FixedScaleOffset, {"offset": 0, "scale": 25.5}),
93
93
  (numcodecs.zarr3.FixedScaleOffset, {"offset": 0, "scale": 51, "astype": "uint16"}),
94
- (numcodecs.zarr3.AsType, {"encode_dtype": "float32", "decode_dtype": "float64"}),
94
+ (numcodecs.zarr3.AsType, {"encode_dtype": "float32", "decode_dtype": "float32"}),
95
95
  ],
96
96
  ids=[
97
97
  "delta",
@@ -225,11 +225,11 @@ def test_generic_bytes_codec(
225
225
  ):
226
226
  try:
227
227
  codec_class()._codec # noqa: B018
228
- except ValueError as e:
228
+ except ValueError as e: # pragma: no cover
229
229
  if "codec not available" in str(e):
230
230
  pytest.xfail(f"{codec_class.codec_name} is not available: {e}")
231
231
  else:
232
- raise # pragma: no cover
232
+ raise
233
233
  except ImportError as e: # pragma: no cover
234
234
  pytest.xfail(f"{codec_class.codec_name} is not available: {e}")
235
235
 
@@ -272,3 +272,8 @@ def test_delta_astype(store: StorePath):
272
272
  def test_repr():
273
273
  codec = numcodecs.zarr3.LZ4(level=5)
274
274
  assert repr(codec) == "LZ4(codec_name='numcodecs.lz4', codec_config={'level': 5})"
275
+
276
+
277
+ def test_to_dict():
278
+ codec = numcodecs.zarr3.LZ4(level=5)
279
+ assert codec.to_dict() == {"name": "numcodecs.lz4", "configuration": {"level": 5}}
numcodecs/version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.15.0'
16
- __version_tuple__ = version_tuple = (0, 15, 0)
15
+ __version__ = version = '0.15.1'
16
+ __version_tuple__ = version_tuple = (0, 15, 1)
Binary file
numcodecs/zarr3.py CHANGED
@@ -112,6 +112,7 @@ class _NumcodecsCodec(Metadata):
112
112
 
113
113
  def to_dict(self) -> dict[str, JSON]:
114
114
  codec_config = self.codec_config.copy()
115
+ codec_config.pop("id", None)
115
116
  return {
116
117
  "name": self.codec_name,
117
118
  "configuration": codec_config,
@@ -270,7 +271,7 @@ class Shuffle(_NumcodecsBytesBytesCodec):
270
271
  super().__init__(**codec_config)
271
272
 
272
273
  def evolve_from_array_spec(self, array_spec: ArraySpec) -> Shuffle:
273
- if array_spec.dtype.itemsize != self.codec_config.get("elementsize"):
274
+ if self.codec_config.get("elementsize", None) is None:
274
275
  return Shuffle(**{**self.codec_config, "elementsize": array_spec.dtype.itemsize})
275
276
  return self # pragma: no cover
276
277
 
@@ -307,7 +308,7 @@ class FixedScaleOffset(_NumcodecsArrayArrayCodec):
307
308
  return chunk_spec
308
309
 
309
310
  def evolve_from_array_spec(self, array_spec: ArraySpec) -> FixedScaleOffset:
310
- if str(array_spec.dtype) != self.codec_config.get("dtype"):
311
+ if self.codec_config.get("dtype", None) is None:
311
312
  return FixedScaleOffset(**{**self.codec_config, "dtype": str(array_spec.dtype)})
312
313
  return self
313
314
 
@@ -320,7 +321,7 @@ class Quantize(_NumcodecsArrayArrayCodec):
320
321
  super().__init__(**codec_config)
321
322
 
322
323
  def evolve_from_array_spec(self, array_spec: ArraySpec) -> Quantize:
323
- if str(array_spec.dtype) != self.codec_config.get("dtype"):
324
+ if self.codec_config.get("dtype", None) is None:
324
325
  return Quantize(**{**self.codec_config, "dtype": str(array_spec.dtype)})
325
326
  return self
326
327
 
@@ -355,8 +356,7 @@ class AsType(_NumcodecsArrayArrayCodec):
355
356
  return replace(chunk_spec, dtype=np.dtype(self.codec_config["encode_dtype"])) # type: ignore[arg-type]
356
357
 
357
358
  def evolve_from_array_spec(self, array_spec: ArraySpec) -> AsType:
358
- decode_dtype = self.codec_config.get("decode_dtype")
359
- if str(array_spec.dtype) != decode_dtype:
359
+ if self.codec_config.get("decode_dtype", None) is None:
360
360
  return AsType(**{**self.codec_config, "decode_dtype": str(array_spec.dtype)})
361
361
  return self
362
362
 
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: numcodecs
3
- Version: 0.15.0
3
+ Version: 0.15.1
4
4
  Summary: A Python package providing buffer compression and transformation codecs for use in data storage and communication applications.
5
5
  Maintainer-email: Alistair Miles <alimanfoo@googlemail.com>
6
6
  License: MIT
@@ -1,37 +1,38 @@
1
1
  numcodecs/__init__.py,sha256=IdxAMSfHMK0HLqtxa_vUKy2nUHXxCgojJJRsCzXc6SQ,3249
2
- numcodecs/_shuffle.cp313-win_amd64.pyd,sha256=2ZVt1xnalcXrplMbtHhyZiz77y47TD_5UIw16GvKbjk,136704
2
+ numcodecs/_shuffle.cp313-win_amd64.pyd,sha256=gwyMdCxES6UQoaDbbXXTjXelISLeB8l1ZXj3kkmBrBc,136704
3
3
  numcodecs/abc.py,sha256=WWOjzavsAAcAxu-POPfiojYFfl94u9xE4RWAcRdRCbw,4631
4
4
  numcodecs/astype.py,sha256=ZoI9ev-r2Q5Xw7NZN1xoZ9tYhq80XoeL-F15KfJhDIA,2171
5
5
  numcodecs/base64.py,sha256=Da-KRfgXZ5j5Dn5AjidclQp9BXcAdx_ZR_a60FzFPWQ,778
6
6
  numcodecs/bitround.py,sha256=m9gysWTzZH_MA0H7oI3dfBIZh66yxHM4gik8aq6xA_0,2925
7
- numcodecs/blosc.cp313-win_amd64.pyd,sha256=TeowJ6ejTsrDA9zdJ1rmuY5oVVTVSiyUdwYiu7Wt5U4,610816
7
+ numcodecs/blosc.cp313-win_amd64.pyd,sha256=bJrWcyQnwzB-YOrtfo-F58u6MSGvM4LV6uG61TSjmgI,610816
8
8
  numcodecs/bz2.py,sha256=bS0L4XqzJDw6pU4MUuEF8UgFOHw6mErnqCXZVg8TEiI,1219
9
9
  numcodecs/categorize.py,sha256=jwx8H_EXMEY3CSSWjYt5wzoduFwv-44v_Kjqxe-jo4Q,3046
10
- numcodecs/checksum32.py,sha256=GgYbg84gGAH9Jq-ZwATsL6G-bDXI20LQ1gHXg75oh-E,5605
10
+ numcodecs/checksum32.py,sha256=ZIYm_eAMLZEw2Nj87Y3dckuy8Vtm69ZoRMq_NgiVfTU,5620
11
11
  numcodecs/compat.py,sha256=ghz0-UpxV0q_mAaiZLZv6BBhJNNLeLTDGirO4Oda_ZM,6711
12
- numcodecs/compat_ext.cp313-win_amd64.pyd,sha256=xwmQx4iF-3VDvtRlumnXLFPgm_TM7-B1YDrlJJZQV6M,33280
12
+ numcodecs/compat_ext.cp313-win_amd64.pyd,sha256=WoqFXvedkizG_g1_-R_KlEGqddD47vuz4bjRnYP_3bU,33280
13
13
  numcodecs/delta.py,sha256=cSU6M1hT6q_ZNdyW3zkbcPsyviZsc9OJ5nZLBOpnwxc,2885
14
+ numcodecs/errors.py,sha256=Acfi3-rFKs93QM3-fcS7vo2qGvocLXwWnA0HhuOwGqk,689
14
15
  numcodecs/fixedscaleoffset.py,sha256=mjIakyHT5cY38o7gE-9f99SjPJRVAxYkyOJ0h9OnyKE,4318
15
- numcodecs/fletcher32.cp313-win_amd64.pyd,sha256=L-A5guPAjlY0sX4rWBIUg-80eEXssvnSTI8PFVTvQ38,157696
16
+ numcodecs/fletcher32.cp313-win_amd64.pyd,sha256=AQjSY75ZV04BXsfcVk_yHeUTbNDSITTVbzfTRLSOzqA,157696
16
17
  numcodecs/gzip.py,sha256=w7TpS4sorX36J7L4Izs8BszU7ZH-Mks455Ai-QHWZrs,1486
17
- numcodecs/jenkins.cp313-win_amd64.pyd,sha256=E27TbwE6KqeQNuS78fD9R_ktev172EEou_j0d0mYTfk,147456
18
- numcodecs/json.py,sha256=kJUuyQTZEdgWx2c_AbIyy0l_6_hxY3USlJBEwN_KJMQ,3480
19
- numcodecs/lz4.cp313-win_amd64.pyd,sha256=Z-f4lgtDAVEsYjwCaMiiqZgmd9YQUcDUufbyfjks8o4,70656
18
+ numcodecs/jenkins.cp313-win_amd64.pyd,sha256=1pr-u8uc_l50pTgMeaxyFl2EvHLpEsqDWe9ecYFavX4,147456
19
+ numcodecs/json.py,sha256=dFoZcpBSY3fU-4p4x1DjI3mtr-reRlsMSJ7Aiwy_sgI,3500
20
+ numcodecs/lz4.cp313-win_amd64.pyd,sha256=_2LnI9FgZoqDFV9NqPf5hQNRkKayu_uiWH12HQmTXnE,70656
20
21
  numcodecs/lzma.py,sha256=N01IBcCZKiMS0fPB75157inIhuZkVNFcW3Xf96mmWJ8,2329
21
22
  numcodecs/msgpacks.py,sha256=a6do5fvFqnSXOadxajtw-uq7UdcUsWUY-hTDv8HCx08,2705
22
23
  numcodecs/ndarray_like.py,sha256=M6n00SC1h_SgN0enXClkKMFeE4z-AewLAYVbq56Vl2A,1948
23
24
  numcodecs/packbits.py,sha256=hEaOSpjUxOTlNAXFvDp5Djo7wwqwuFGaRfEDrB07bDY,2075
24
25
  numcodecs/pcodec.py,sha256=aelmvP2ejs1F29GvANUpwlANRmRWhhO2BoJ2GuBOWcs,4832
25
26
  numcodecs/pickles.py,sha256=Yh8hCg-ETdLWM5MjCy5vPW8E8_3DCjyvOPoKtvbr1ZU,1345
26
- numcodecs/quantize.py,sha256=nCw95w0SvxTK7bQvQFP6miXEj4vd7W9Aq0EOETY-Ka8,3124
27
- numcodecs/registry.py,sha256=bZYMXgC088Gntg9BoWw2f_rhZZ0OsIfrVVSmYc3F42E,1904
27
+ numcodecs/quantize.py,sha256=hHzsMgFtJGDHrYRjdFqNBJ2wit9I45y59Uqc5pUjIWQ,3114
28
+ numcodecs/registry.py,sha256=IlPYY8RlVZgRid2j-S7SxnhCMq4y9cxQwQMGCy7lgbI,1938
28
29
  numcodecs/shuffle.py,sha256=ty-NJ1bIgsErwmTyJtspSgrrJ4PspQjp6Hb-U2M17hY,1636
29
- numcodecs/version.py,sha256=nkdvnJ28MNIzWCtqvltlp6BtJSc4ocdp8PNbZSy6BJg,429
30
- numcodecs/vlen.cp313-win_amd64.pyd,sha256=fSADW8Pr-ImQIN8s7GtMhbm3ajamvfotvPO1aHsBJG4,201216
31
- numcodecs/zarr3.py,sha256=Z6lJ6UL7q5Xr-7TZmAPSL1mhQ5vWfezgBh7N2603GHw,15113
30
+ numcodecs/version.py,sha256=N9lUWBZ0Ree-hUkAarPhWZOx0C9_k2y1HZaFAacE5Zg,429
31
+ numcodecs/vlen.cp313-win_amd64.pyd,sha256=JCryunig8ImkjmNITUT_3iZCm01r3awNZzWMOZL87FM,201216
32
+ numcodecs/zarr3.py,sha256=JX_LrNQFp26nlOEcS2nnxau5t8HYBV28ckVC8008ojA,15066
32
33
  numcodecs/zfpy.py,sha256=SP6zPdXwSrZzu_iuudoSZGBuE6IvXWdvJri1fgz-4nY,4013
33
34
  numcodecs/zlib.py,sha256=C5TO2qRPyG6SY25lmB9qeFh6yr4IRAqHz0v4RaPvygE,1091
34
- numcodecs/zstd.cp313-win_amd64.pyd,sha256=fi6DcMJCzjFo6oDrdjfkRgnEsb-T517I8cqnQc9X3Wk,447488
35
+ numcodecs/zstd.cp313-win_amd64.pyd,sha256=E9jwmQwt8Csut3ZEdClB1hESbPJhBpsWKnB1EIC0mbk,447488
35
36
  numcodecs/tests/__init__.py,sha256=W7MDbDAXcjl7fVmolo3U_30rFkOCb6mWQ8vcByUpu8g,75
36
37
  numcodecs/tests/common.py,sha256=jxox32_wMnqwiBi6Ibz32-5lDXtlOaMVq5B-CUgtAbc,12537
37
38
  numcodecs/tests/test_astype.py,sha256=m-l8k4q8jSZrIqviASKxYsaPzzuBG_Y4tUNlIigYbco,2441
@@ -58,21 +59,21 @@ numcodecs/tests/test_packbits.py,sha256=UWXpYyaHLybqOHgZgVTP_5VeibGO09CyJyKSO_mT
58
59
  numcodecs/tests/test_pcodec.py,sha256=_CO8siS_90LNlhmH9ln0o-lraoptpL_T7dFZ5yK7aJY,2590
59
60
  numcodecs/tests/test_pickles.py,sha256=zhmZPPiCgW3uFArYvixgiMPWXdmKjnCj0JThUDt8nn4,1740
60
61
  numcodecs/tests/test_quantize.py,sha256=muD4zwQSa4XM4jPO3qXu8rMdoU4eHCpVfQ8z0G7Zh-U,2227
61
- numcodecs/tests/test_registry.py,sha256=ZtECBmhlz_cxeDMalxAejImocdSjbz0dAxfb84ijlto,1091
62
+ numcodecs/tests/test_registry.py,sha256=Ar_Op6MIEm8MTxzBPgjtMrWXA5EhYm7JnM-Yab79zrY,1159
62
63
  numcodecs/tests/test_shuffle.py,sha256=25AOv67ip0EroQyufgWZXPYueA4p4HZcctwTTFeT5Q0,4825
63
64
  numcodecs/tests/test_vlen_array.py,sha256=sUwLaza31Yo0IMnmKCGykRPaB3ha7i0ImiCY9yvHS9o,2574
64
65
  numcodecs/tests/test_vlen_bytes.py,sha256=--iq7kzkb-ynZQHRAbIInaezjBNW2H26v3kLmGnzyeM,2738
65
66
  numcodecs/tests/test_vlen_utf8.py,sha256=X0nBvLv1hVDHGz3pIRMP4rVs75lAkXGUb0cRcfZM1Ss,2565
66
- numcodecs/tests/test_zarr3.py,sha256=jwhMOwIlQ-IGgdsg6OuhkbfXDQMgy38hr2FDTqvBVaQ,8607
67
+ numcodecs/tests/test_zarr3.py,sha256=awcNOFFUmTZ0wer2G8gOIXl9kETWwkByRonH54XodJo,8762
67
68
  numcodecs/tests/test_zarr3_import.py,sha256=enI8IqSnTynihEQ2mh95UdTZ5Gb8m9Wock6gbg3iLYs,345
68
69
  numcodecs/tests/test_zfpy.py,sha256=lSkKcpGg437poMRQ88EDYdbQVIqKmF0Il-ASdlYkkIY,2866
69
70
  numcodecs/tests/test_zlib.py,sha256=SxgYIyH2bH_eIX7k-9kgPUOXCHEllGPoLSUSn0Qk5rg,2633
70
71
  numcodecs/tests/test_zstd.py,sha256=P-wHnm0wOuclHOoX7danVEvufxKNM3GwYBgHBchzILE,2702
71
72
  numcodecs/tests/package_with_entrypoint/__init__.py,sha256=j0h1AHePXH8ONfd-TMGwKsMW4gBqbgiGOuGP25S9hLE,223
72
- numcodecs-0.15.0.dist-info/LICENSE.txt,sha256=IxxTq7WTy9_G9AbShWjbBcg6x2G3pDlJEIBJN2o95ks,1145
73
- numcodecs-0.15.0.dist-info/METADATA,sha256=7xOjjdiTT70nU8TtwA8rlKC-cIHw_XDMTtpTmJCEGcY,2999
74
- numcodecs-0.15.0.dist-info/WHEEL,sha256=6bXTkCllrWLYPW3gCPkeRA91N4604g9hqNhQqZWsUzQ,101
75
- numcodecs-0.15.0.dist-info/entry_points.txt,sha256=3W3FHKrwE52X3fLq8KdioOtf93lh5KaoGV5t2D10DBI,919
76
- numcodecs-0.15.0.dist-info/top_level.txt,sha256=JkHllzt6IuVudg4Tk--wF-yfPPsdVOiMTag1tjGIihw,10
73
+ numcodecs-0.15.1.dist-info/LICENSE.txt,sha256=IxxTq7WTy9_G9AbShWjbBcg6x2G3pDlJEIBJN2o95ks,1145
74
+ numcodecs-0.15.1.dist-info/METADATA,sha256=xoqk8sTreJch_h6C4tpGFq29FClsATveg19MweR8xDo,2999
75
+ numcodecs-0.15.1.dist-info/WHEEL,sha256=6bXTkCllrWLYPW3gCPkeRA91N4604g9hqNhQqZWsUzQ,101
76
+ numcodecs-0.15.1.dist-info/entry_points.txt,sha256=3W3FHKrwE52X3fLq8KdioOtf93lh5KaoGV5t2D10DBI,919
77
+ numcodecs-0.15.1.dist-info/top_level.txt,sha256=JkHllzt6IuVudg4Tk--wF-yfPPsdVOiMTag1tjGIihw,10
77
78
  numcodecs/tests/package_with_entrypoint-0.1.dist-info/entry_points.txt,sha256=COk3sfJsTt3T00bA2bcUMCuWEhwkQvf4lPHcBDk34qA,62
78
- numcodecs-0.15.0.dist-info/RECORD,,
79
+ numcodecs-0.15.1.dist-info/RECORD,,