numcodecs 0.15.0__cp312-cp312-win_amd64.whl → 0.16.0__cp312-cp312-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.

numcodecs/__init__.py CHANGED
@@ -51,7 +51,7 @@ except OSError: # pragma: no cover
51
51
  ncores = 1
52
52
  blosc._init()
53
53
  blosc.set_nthreads(min(8, ncores))
54
- atexit.register(blosc.destroy)
54
+ atexit.register(blosc._destroy)
55
55
 
56
56
  from numcodecs import zstd as zstd
57
57
  from numcodecs.zstd import Zstd
Binary file
Binary file
numcodecs/checksum32.py CHANGED
@@ -1,11 +1,12 @@
1
+ import abc
1
2
  import struct
2
3
  import zlib
3
- from collections.abc import Callable
4
4
  from contextlib import suppress
5
5
  from types import ModuleType
6
- from typing import TYPE_CHECKING, Literal, Optional
6
+ from typing import Literal, Optional
7
7
 
8
8
  import numpy as np
9
+ from typing_extensions import Buffer
9
10
 
10
11
  from .abc import Codec
11
12
  from .compat import ensure_contiguous_ndarray, ndarray_copy
@@ -13,17 +14,13 @@ from .jenkins import jenkins_lookup3
13
14
 
14
15
  _crc32c: Optional[ModuleType] = None
15
16
  with suppress(ImportError):
16
- import crc32c as _crc32c # type: ignore[no-redef]
17
-
18
- if TYPE_CHECKING: # pragma: no cover
19
- from typing_extensions import Buffer
17
+ import crc32c as _crc32c # type: ignore[no-redef, unused-ignore]
20
18
 
21
19
  CHECKSUM_LOCATION = Literal['start', 'end']
22
20
 
23
21
 
24
- class Checksum32(Codec):
22
+ class Checksum32(Codec, abc.ABC):
25
23
  # override in sub-class
26
- checksum: Callable[["Buffer", int], int] | None = None
27
24
  location: CHECKSUM_LOCATION = 'start'
28
25
 
29
26
  def __init__(self, location: CHECKSUM_LOCATION | None = None):
@@ -67,6 +64,10 @@ class Checksum32(Codec):
67
64
  )
68
65
  return ndarray_copy(payload_view, out)
69
66
 
67
+ @staticmethod
68
+ @abc.abstractmethod
69
+ def checksum(data: Buffer, value: int) -> int: ...
70
+
70
71
 
71
72
  class CRC32(Checksum32):
72
73
  """Codec add a crc32 checksum to the buffer.
@@ -78,9 +79,15 @@ class CRC32(Checksum32):
78
79
  """
79
80
 
80
81
  codec_id = 'crc32'
81
- checksum = zlib.crc32
82
82
  location = 'start'
83
83
 
84
+ @staticmethod
85
+ def checksum(data: Buffer, value: int = 0) -> int:
86
+ """
87
+ Thin wrapper around ``zlib.crc32``.
88
+ """
89
+ return zlib.crc32(data, value)
90
+
84
91
 
85
92
  class Adler32(Checksum32):
86
93
  """Codec add a adler32 checksum to the buffer.
@@ -92,9 +99,15 @@ class Adler32(Checksum32):
92
99
  """
93
100
 
94
101
  codec_id = 'adler32'
95
- checksum = zlib.adler32
96
102
  location = 'start'
97
103
 
104
+ @staticmethod
105
+ def checksum(data: Buffer, value: int = 1) -> int:
106
+ """
107
+ Thin wrapper around ``zlib.adler32``.
108
+ """
109
+ return zlib.adler32(data, value)
110
+
98
111
 
99
112
  class JenkinsLookup3(Checksum32):
100
113
  """Bob Jenkin's lookup3 checksum with 32-bit output
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):
numcodecs/tests/common.py CHANGED
@@ -115,74 +115,6 @@ def check_encode_decode(arr, codec, precision=None):
115
115
  compare_arrays(arr, out, precision=precision)
116
116
 
117
117
 
118
- def check_encode_decode_partial(arr, codec, precision=None):
119
- # N.B., watch out here with blosc compressor, if the itemsize of
120
- # the source buffer is different then the results of encoding
121
- # (i.e., compression) may be different. Hence we *do not* require that
122
- # the results of encoding be identical for all possible inputs, rather
123
- # we just require that the results of the encode/decode round-trip can
124
- # be compared to the original array.
125
-
126
- itemsize = arr.itemsize
127
- start, nitems = 5, 10
128
- compare_arr = arr[start : start + nitems]
129
- # test encoding of numpy array
130
- enc = codec.encode(arr)
131
- dec = codec.decode_partial(enc, start, nitems)
132
- compare_arrays(compare_arr, dec, precision=precision)
133
-
134
- # out = np.empty_like(compare_arr)
135
- out = np.empty_like(compare_arr)
136
- print(len(out))
137
-
138
- # test partial decode of encoded bytes
139
- buf = arr.tobytes(order='A')
140
- enc = codec.encode(buf)
141
- dec = codec.decode_partial(enc, start * itemsize, nitems * itemsize, out=out)
142
- compare_arrays(compare_arr, dec, precision=precision)
143
-
144
- # test partial decode of encoded bytearray
145
- buf = bytearray(arr.tobytes(order='A'))
146
- enc = codec.encode(buf)
147
- dec = codec.decode_partial(enc, start * itemsize, nitems * itemsize, out=out)
148
- compare_arrays(compare_arr, dec, precision=precision)
149
-
150
- # test partial decode of encoded array.array
151
- buf = array.array('b', arr.tobytes(order='A'))
152
- enc = codec.encode(buf)
153
- dec = codec.decode_partial(enc, start * itemsize, nitems * itemsize, out=out)
154
- compare_arrays(compare_arr, dec, precision=precision)
155
-
156
- # # decoding should support any object exporting the buffer protocol,
157
-
158
- # # setup
159
- enc_bytes = ensure_bytes(enc)
160
-
161
- # test decoding of raw bytes into numpy array
162
- dec = codec.decode_partial(enc_bytes, start * itemsize, nitems * itemsize, out=out)
163
- compare_arrays(compare_arr, dec, precision=precision)
164
-
165
- # test partial decoding of bytearray
166
- dec = codec.decode_partial(bytearray(enc_bytes), start * itemsize, nitems * itemsize, out=out)
167
- compare_arrays(compare_arr, dec, precision=precision)
168
-
169
- # test partial decoding of array.array
170
- buf = array.array('b', enc_bytes)
171
- dec = codec.decode_partial(buf, start * itemsize, nitems * itemsize, out=out)
172
- compare_arrays(compare_arr, dec, precision=precision)
173
-
174
- # test decoding of numpy array into numpy array
175
- buf = np.frombuffer(enc_bytes, dtype='u1')
176
- dec = codec.decode_partial(buf, start * itemsize, nitems * itemsize, out=out)
177
- compare_arrays(compare_arr, dec, precision=precision)
178
-
179
- # test decoding directly into bytearray
180
- out = bytearray(compare_arr.nbytes)
181
- codec.decode_partial(enc_bytes, start * itemsize, nitems * itemsize, out=out)
182
- # noinspection PyTypeChecker
183
- compare_arrays(compare_arr, out, precision=precision)
184
-
185
-
186
118
  def assert_array_items_equal(res, arr):
187
119
  assert isinstance(res, np.ndarray)
188
120
  res = res.reshape(-1, order='A')
@@ -15,7 +15,6 @@ from numcodecs.tests.common import (
15
15
  check_backwards_compatibility,
16
16
  check_config,
17
17
  check_encode_decode,
18
- check_encode_decode_partial,
19
18
  check_err_decode_object_buffer,
20
19
  check_err_encode_object_buffer,
21
20
  check_max_buffer_size,
@@ -75,19 +74,6 @@ def test_encode_decode(array, codec):
75
74
  check_encode_decode(array, codec)
76
75
 
77
76
 
78
- @pytest.mark.parametrize('codec', codecs)
79
- @pytest.mark.parametrize(
80
- 'array',
81
- [
82
- pytest.param(x) if len(x.shape) == 1 else pytest.param(x, marks=[pytest.mark.xfail])
83
- for x in arrays
84
- ],
85
- )
86
- def test_partial_decode(codec, array):
87
- _skip_null(codec)
88
- check_encode_decode_partial(array, codec)
89
-
90
-
91
77
  def test_config():
92
78
  codec = Blosc(cname='zstd', clevel=3, shuffle=1)
93
79
  check_config(codec)
@@ -273,3 +259,26 @@ def test_max_buffer_size():
273
259
  _skip_null(codec)
274
260
  assert codec.max_buffer_size == 2**31 - 1
275
261
  check_max_buffer_size(codec)
262
+
263
+
264
+ def test_typesize_explicit():
265
+ arr = np.arange(100).astype("int64")
266
+ itemsize = arr.itemsize
267
+ codec_no_type_size = Blosc(shuffle=Blosc.SHUFFLE)
268
+ codec_itemsize = Blosc(shuffle=Blosc.SHUFFLE, typesize=itemsize)
269
+ encoded_without_itemsize = codec_no_type_size.encode(arr.tobytes())
270
+ encoded_with_itemsize = codec_itemsize.encode(arr.tobytes())
271
+ # third byte encodes the `typesize`
272
+ assert encoded_without_itemsize[3] == 1 # inferred from bytes i.e., 1
273
+ assert encoded_with_itemsize[3] == itemsize # given as a constructor argument
274
+
275
+
276
+ def test_typesize_less_than_1():
277
+ with pytest.raises(ValueError, match=r"Cannot use typesize"):
278
+ Blosc(shuffle=Blosc.SHUFFLE, typesize=0)
279
+ compressor = Blosc(shuffle=Blosc.SHUFFLE)
280
+ # not really something that should be done in practice, but good for testing.
281
+ compressor.typesize = 0
282
+ arr = np.arange(100)
283
+ with pytest.raises(ValueError, match=r"Cannot use typesize"):
284
+ compressor.encode(arr.tobytes())
@@ -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
 
@@ -1,3 +1,4 @@
1
+ import sys
1
2
  import unittest
2
3
 
3
4
  import numpy as np
@@ -86,7 +87,7 @@ def test_decode_errors():
86
87
 
87
88
  # TODO: fix this test on GitHub actions somehow...
88
89
  # See https://github.com/zarr-developers/numcodecs/issues/683
89
- @pytest.mark.skip("Test is failing on GitHub actions.")
90
+ @pytest.mark.skipif(sys.platform == "darwin", reason="Test is failing on macOS on GitHub actions.")
90
91
  def test_encode_none():
91
92
  a = np.array([b'foo', None, b'bar'], dtype=object)
92
93
  codec = VLenBytes()
@@ -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
@@ -1,8 +1,13 @@
1
- # file generated by setuptools_scm
1
+ # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
+
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
+
3
6
  TYPE_CHECKING = False
4
7
  if TYPE_CHECKING:
5
- from typing import Tuple, Union
8
+ from typing import Tuple
9
+ from typing import Union
10
+
6
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
7
12
  else:
8
13
  VERSION_TUPLE = object
@@ -12,5 +17,5 @@ __version__: str
12
17
  __version_tuple__: VERSION_TUPLE
13
18
  version_tuple: VERSION_TUPLE
14
19
 
15
- __version__ = version = '0.15.0'
16
- __version_tuple__ = version_tuple = (0, 15, 0)
20
+ __version__ = version = '0.16.0'
21
+ __version_tuple__ = version_tuple = (0, 16, 0)
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
 
@@ -285,7 +286,7 @@ class Delta(_NumcodecsArrayArrayCodec):
285
286
 
286
287
  def resolve_metadata(self, chunk_spec: ArraySpec) -> ArraySpec:
287
288
  if astype := self.codec_config.get("astype"):
288
- return replace(chunk_spec, dtype=np.dtype(astype)) # type: ignore[arg-type]
289
+ return replace(chunk_spec, dtype=np.dtype(astype)) # type: ignore[call-overload]
289
290
  return chunk_spec
290
291
 
291
292
 
@@ -303,11 +304,11 @@ class FixedScaleOffset(_NumcodecsArrayArrayCodec):
303
304
 
304
305
  def resolve_metadata(self, chunk_spec: ArraySpec) -> ArraySpec:
305
306
  if astype := self.codec_config.get("astype"):
306
- return replace(chunk_spec, dtype=np.dtype(astype)) # type: ignore[arg-type]
307
+ return replace(chunk_spec, dtype=np.dtype(astype)) # type: ignore[call-overload]
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
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: numcodecs
3
- Version: 0.15.0
3
+ Version: 0.16.0
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
@@ -22,7 +22,7 @@ Requires-Python: >=3.11
22
22
  Description-Content-Type: text/x-rst
23
23
  License-File: LICENSE.txt
24
24
  Requires-Dist: numpy>=1.24
25
- Requires-Dist: deprecated
25
+ Requires-Dist: typing_extensions
26
26
  Provides-Extra: docs
27
27
  Requires-Dist: sphinx; extra == "docs"
28
28
  Requires-Dist: sphinx-issues; extra == "docs"
@@ -42,6 +42,7 @@ Provides-Extra: pcodec
42
42
  Requires-Dist: pcodec<0.4,>=0.3; extra == "pcodec"
43
43
  Provides-Extra: crc32c
44
44
  Requires-Dist: crc32c>=2.7; extra == "crc32c"
45
+ Dynamic: license-file
45
46
 
46
47
  Numcodecs
47
48
  =========
@@ -1,43 +1,44 @@
1
- numcodecs/__init__.py,sha256=IdxAMSfHMK0HLqtxa_vUKy2nUHXxCgojJJRsCzXc6SQ,3249
2
- numcodecs/_shuffle.cp312-win_amd64.pyd,sha256=9J_2buq70ZZ13E7zWY-rarGD3vN58Wms4Lh8WSNiu5k,136704
1
+ numcodecs/__init__.py,sha256=zcO3_tRbWzdbtZQniKvnleQ8U6wZcLtNLRXvzYjESAg,3250
2
+ numcodecs/_shuffle.cp312-win_amd64.pyd,sha256=k-M-z3Rh4iua9XPIUwuEE61TUrgnoDCIIsqC_awXD7I,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.cp312-win_amd64.pyd,sha256=ZvkCa9tjJsoXTE-7Ie04YxVjNoRqzbVMo4o-EF2ulNA,611328
7
+ numcodecs/blosc.cp312-win_amd64.pyd,sha256=LJXkdEjH8XDxECvnj3r_Pbs8bkq2uVhXGp7mE5pR8p4,578560
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=FAA1N6agDIxE8OMcyusjqGLFy5vyxzsxnARsfhOXeTQ,5909
11
11
  numcodecs/compat.py,sha256=ghz0-UpxV0q_mAaiZLZv6BBhJNNLeLTDGirO4Oda_ZM,6711
12
- numcodecs/compat_ext.cp312-win_amd64.pyd,sha256=qyxgZtsoK6WvaDZzQdHQ5k6BWMuZGf3PcVlpVCW1W_w,35328
12
+ numcodecs/compat_ext.cp312-win_amd64.pyd,sha256=gwSHlLAGRVISekp85-3xjaLZ9lr3-CPNAsatj87UmTk,24064
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.cp312-win_amd64.pyd,sha256=5Ubr0fAsRzGDrhSKLDiF1-RD5crWHsL38QIAukUM_KA,158720
16
+ numcodecs/fletcher32.cp312-win_amd64.pyd,sha256=mdXXAhD76ttUNZYearOikLTrfSjWi6PaYDUWz-RBtZg,159232
16
17
  numcodecs/gzip.py,sha256=w7TpS4sorX36J7L4Izs8BszU7ZH-Mks455Ai-QHWZrs,1486
17
- numcodecs/jenkins.cp312-win_amd64.pyd,sha256=HAeGB38mNTreU88sH09ZRmb4rmMgDX7iUqXmHMeKwuM,147968
18
- numcodecs/json.py,sha256=kJUuyQTZEdgWx2c_AbIyy0l_6_hxY3USlJBEwN_KJMQ,3480
19
- numcodecs/lz4.cp312-win_amd64.pyd,sha256=EtsWnms0ckoC3Lc1Y9oVrNADmS7_Tu0DymprrYlboVo,73216
18
+ numcodecs/jenkins.cp312-win_amd64.pyd,sha256=ZPI--xzVS6JwGrLf3vgrFQDIdtNk8W3S2nCzRZnrYXo,147968
19
+ numcodecs/json.py,sha256=dFoZcpBSY3fU-4p4x1DjI3mtr-reRlsMSJ7Aiwy_sgI,3500
20
+ numcodecs/lz4.cp312-win_amd64.pyd,sha256=ZLSy1sP2k1K3tBwYFPapGEbY3TfKc4ZWOLuXPiTPvts,72192
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.cp312-win_amd64.pyd,sha256=A-EGusrDRkuXZH0qK2BgULsIfc_jMqTLSg8BiWDzw4Q,202240
31
- numcodecs/zarr3.py,sha256=Z6lJ6UL7q5Xr-7TZmAPSL1mhQ5vWfezgBh7N2603GHw,15113
30
+ numcodecs/version.py,sha256=UI27vZYI4Odzb3grW5XGmxsuhe_RRgOAIP6TwGte-30,534
31
+ numcodecs/vlen.cp312-win_amd64.pyd,sha256=yBjQV9diPdYnPVkbgcv-k6s3eSAPZDI9ioRoCBybe0c,202752
32
+ numcodecs/zarr3.py,sha256=elEXBPv7uKWp-jSJadsEQtMGOy9Gk9Pu2JpQ-Qgo6eY,15076
32
33
  numcodecs/zfpy.py,sha256=SP6zPdXwSrZzu_iuudoSZGBuE6IvXWdvJri1fgz-4nY,4013
33
34
  numcodecs/zlib.py,sha256=C5TO2qRPyG6SY25lmB9qeFh6yr4IRAqHz0v4RaPvygE,1091
34
- numcodecs/zstd.cp312-win_amd64.pyd,sha256=jQSGiytppEq5IPtpTItYd3QjNLmWg05NZusm2D3m924,449536
35
+ numcodecs/zstd.cp312-win_amd64.pyd,sha256=N0UtB1VeG9c-JkSsmDv--8i5g_YuArwfLVcOHXZ-g7c,448512
35
36
  numcodecs/tests/__init__.py,sha256=W7MDbDAXcjl7fVmolo3U_30rFkOCb6mWQ8vcByUpu8g,75
36
- numcodecs/tests/common.py,sha256=jxox32_wMnqwiBi6Ibz32-5lDXtlOaMVq5B-CUgtAbc,12537
37
+ numcodecs/tests/common.py,sha256=GzKQpkEaK9jzgDzPR6pEv440BnI2y55e3QggLIOVZ_c,9621
37
38
  numcodecs/tests/test_astype.py,sha256=m-l8k4q8jSZrIqviASKxYsaPzzuBG_Y4tUNlIigYbco,2441
38
39
  numcodecs/tests/test_base64.py,sha256=znf-cMk2JBW3vjcZu7CpC2b9wIiIzBPwfmHX_WlkZ1o,2396
39
40
  numcodecs/tests/test_bitround.py,sha256=idosc7MlWLWoA93jFFPgfKk1WzazmaLqH3gzCsVV0F0,2430
40
- numcodecs/tests/test_blosc.py,sha256=PwvxL1d0bI8VY5KFUKuwyL5A2QqpwUbhJSma4V_w5KY,9129
41
+ numcodecs/tests/test_blosc.py,sha256=8erufKBh4_qHgxGubWimzSy8Yt-IalrH0a1yp-BuDDc,9780
41
42
  numcodecs/tests/test_bz2.py,sha256=iH9BPZ8wtXCEfq52RXOqQ9bmQsTMiy3uujIKNpi2Mqs,1955
42
43
  numcodecs/tests/test_categorize.py,sha256=wug4Im375r3nM1oTIrDVW5woZiZDCsp5uE1Fz6qwIkI,2843
43
44
  numcodecs/tests/test_checksum32.py,sha256=1ZbJrUXPFAPZdmKYso0u0lHBUBtdyA-mfiQdmXRqdqs,4755
@@ -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
- numcodecs/tests/test_vlen_bytes.py,sha256=--iq7kzkb-ynZQHRAbIInaezjBNW2H26v3kLmGnzyeM,2738
65
+ numcodecs/tests/test_vlen_bytes.py,sha256=ni0Qv0A_lx8-dAzEJXrnUJyfLNXp7B2G274nKjpIY44,2794
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=cRmSBGD-cl98KkuHMNqv9Ac9L9_VqTvcBYwpIvxN0cg,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.16.0.dist-info/licenses/LICENSE.txt,sha256=IxxTq7WTy9_G9AbShWjbBcg6x2G3pDlJEIBJN2o95ks,1145
74
+ numcodecs-0.16.0.dist-info/METADATA,sha256=EwKFqWblhMctILiyevUlFyBxyVVIl4pvnYIiSMKoT4c,3029
75
+ numcodecs-0.16.0.dist-info/WHEEL,sha256=ovhA9_Ei_7ok2fAych90j-feDV4goiAxbO7REePtvw0,101
76
+ numcodecs-0.16.0.dist-info/entry_points.txt,sha256=3W3FHKrwE52X3fLq8KdioOtf93lh5KaoGV5t2D10DBI,919
77
+ numcodecs-0.16.0.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.16.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp312-cp312-win_amd64
5
5