numcodecs 0.15.1__cp311-cp311-win_amd64.whl → 0.16.1__cp311-cp311-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.

Files changed (30) hide show
  1. numcodecs/__init__.py +1 -1
  2. numcodecs/_shuffle.cp311-win_amd64.pyd +0 -0
  3. numcodecs/blosc.cp311-win_amd64.pyd +0 -0
  4. numcodecs/checksum32.py +22 -9
  5. numcodecs/compat_ext.cp311-win_amd64.pyd +0 -0
  6. numcodecs/fletcher32.cp311-win_amd64.pyd +0 -0
  7. numcodecs/jenkins.cp311-win_amd64.pyd +0 -0
  8. numcodecs/lz4.cp311-win_amd64.pyd +0 -0
  9. numcodecs/tests/common.py +1 -69
  10. numcodecs/tests/test_blosc.py +41 -26
  11. numcodecs/tests/test_vlen_bytes.py +0 -3
  12. numcodecs/tests/test_zarr3.py +40 -1
  13. numcodecs/version.py +9 -4
  14. numcodecs/vlen.cp311-win_amd64.pyd +0 -0
  15. numcodecs/zarr3.py +74 -130
  16. numcodecs/zstd.cp311-win_amd64.pyd +0 -0
  17. {numcodecs-0.15.1.dist-info → numcodecs-0.16.1.dist-info}/METADATA +13 -5
  18. {numcodecs-0.15.1.dist-info → numcodecs-0.16.1.dist-info}/RECORD +30 -22
  19. {numcodecs-0.15.1.dist-info → numcodecs-0.16.1.dist-info}/WHEEL +1 -1
  20. numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSE.txt +31 -0
  21. numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/BITSHUFFLE.txt +21 -0
  22. numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/FASTLZ.txt +20 -0
  23. numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/LZ4.txt +25 -0
  24. numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/SNAPPY.txt +28 -0
  25. numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/STDINT.txt +29 -0
  26. numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/ZLIB-NG.txt +17 -0
  27. numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/ZLIB.txt +22 -0
  28. {numcodecs-0.15.1.dist-info → numcodecs-0.16.1.dist-info}/entry_points.txt +0 -0
  29. {numcodecs-0.15.1.dist-info → numcodecs-0.16.1.dist-info/licenses}/LICENSE.txt +0 -0
  30. {numcodecs-0.15.1.dist-info → numcodecs-0.16.1.dist-info}/top_level.txt +0 -0
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
@@ -15,15 +16,11 @@ _crc32c: Optional[ModuleType] = None
15
16
  with suppress(ImportError):
16
17
  import crc32c as _crc32c # type: ignore[no-redef, unused-ignore]
17
18
 
18
- if TYPE_CHECKING: # pragma: no cover
19
- from typing_extensions import Buffer
20
-
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
Binary file
Binary file
Binary file
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')
@@ -270,7 +202,7 @@ def check_backwards_compatibility(codec_id, arrays, codecs, precision=None, pref
270
202
 
271
203
  for j, codec in enumerate(codecs):
272
204
  if codec is None:
273
- pytest.skip("codec has been removed")
205
+ continue
274
206
 
275
207
  # setup a directory to hold encoded data
276
208
  codec_dir = os.path.join(fixture_dir, f'codec.{j:02d}')
@@ -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)
@@ -259,17 +245,46 @@ def test_err_encode_object_buffer():
259
245
  check_err_encode_object_buffer(Blosc())
260
246
 
261
247
 
262
- def test_decompression_error_handling():
263
- for codec in codecs:
264
- _skip_null(codec)
265
- with pytest.raises(RuntimeError):
266
- codec.decode(bytearray())
267
- with pytest.raises(RuntimeError):
268
- codec.decode(bytearray(0))
248
+ @pytest.mark.parametrize('codec', codecs)
249
+ def test_decompression_error_handling(codec):
250
+ _skip_null(codec)
251
+ with pytest.raises(RuntimeError):
252
+ codec.decode(bytearray())
253
+ with pytest.raises(RuntimeError):
254
+ codec.decode(bytearray(0))
269
255
 
270
256
 
271
- def test_max_buffer_size():
272
- for codec in codecs:
273
- _skip_null(codec)
274
- assert codec.max_buffer_size == 2**31 - 1
275
- check_max_buffer_size(codec)
257
+ @pytest.mark.parametrize('codec', codecs)
258
+ def test_max_buffer_size(codec):
259
+ _skip_null(codec)
260
+ assert codec.max_buffer_size == 2**31 - 1
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())
285
+
286
+
287
+ def test_config_no_typesize():
288
+ codec = Blosc(shuffle=Blosc.SHUFFLE, typesize=5)
289
+ config = codec.get_config()
290
+ assert "typesize" not in config
@@ -84,9 +84,6 @@ def test_decode_errors():
84
84
  codec.decode(enc, out=np.zeros(10, dtype='i4'))
85
85
 
86
86
 
87
- # TODO: fix this test on GitHub actions somehow...
88
- # See https://github.com/zarr-developers/numcodecs/issues/683
89
- @pytest.mark.skip("Test is failing on GitHub actions.")
90
87
  def test_encode_none():
91
88
  a = np.array([b'foo', None, b'bar'], dtype=object)
92
89
  codec = VLenBytes()
@@ -1,10 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import pickle
3
4
  from typing import TYPE_CHECKING
4
5
 
5
6
  import numpy as np
6
7
  import pytest
7
8
 
9
+ import numcodecs.bitround
10
+
8
11
  if TYPE_CHECKING: # pragma: no cover
9
12
  import zarr
10
13
  else:
@@ -260,7 +263,7 @@ def test_delta_astype(store: StorePath):
260
263
  dtype=data.dtype,
261
264
  fill_value=0,
262
265
  filters=[
263
- numcodecs.zarr3.Delta(dtype="i8", astype="i2"), # type: ignore[arg-type]
266
+ numcodecs.zarr3.Delta(dtype="i8", astype="i2"),
264
267
  ],
265
268
  )
266
269
 
@@ -277,3 +280,39 @@ def test_repr():
277
280
  def test_to_dict():
278
281
  codec = numcodecs.zarr3.LZ4(level=5)
279
282
  assert codec.to_dict() == {"name": "numcodecs.lz4", "configuration": {"level": 5}}
283
+
284
+
285
+ @pytest.mark.parametrize(
286
+ "codec_cls",
287
+ [
288
+ numcodecs.zarr3.Blosc,
289
+ numcodecs.zarr3.LZ4,
290
+ numcodecs.zarr3.Zstd,
291
+ numcodecs.zarr3.Zlib,
292
+ numcodecs.zarr3.GZip,
293
+ numcodecs.zarr3.BZ2,
294
+ numcodecs.zarr3.LZMA,
295
+ numcodecs.zarr3.Shuffle,
296
+ numcodecs.zarr3.BitRound,
297
+ numcodecs.zarr3.Delta,
298
+ numcodecs.zarr3.FixedScaleOffset,
299
+ numcodecs.zarr3.Quantize,
300
+ numcodecs.zarr3.PackBits,
301
+ numcodecs.zarr3.AsType,
302
+ numcodecs.zarr3.CRC32,
303
+ numcodecs.zarr3.CRC32C,
304
+ numcodecs.zarr3.Adler32,
305
+ numcodecs.zarr3.Fletcher32,
306
+ numcodecs.zarr3.JenkinsLookup3,
307
+ numcodecs.zarr3.PCodec,
308
+ numcodecs.zarr3.ZFPY,
309
+ ],
310
+ )
311
+ def test_codecs_pickleable(codec_cls):
312
+ codec = codec_cls()
313
+
314
+ expected = codec
315
+
316
+ p = pickle.dumps(codec)
317
+ actual = pickle.loads(p)
318
+ assert actual == expected
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.1'
16
- __version_tuple__ = version_tuple = (0, 15, 1)
20
+ __version__ = version = '0.16.1'
21
+ __version_tuple__ = version_tuple = (0, 16, 1)
Binary file
numcodecs/zarr3.py CHANGED
@@ -28,8 +28,8 @@ from __future__ import annotations
28
28
  import asyncio
29
29
  import math
30
30
  from dataclasses import dataclass, replace
31
- from functools import cached_property, partial
32
- from typing import Any, Self, TypeVar
31
+ from functools import cached_property
32
+ from typing import Any, Self
33
33
  from warnings import warn
34
34
 
35
35
  import numpy as np
@@ -79,6 +79,18 @@ class _NumcodecsCodec(Metadata):
79
79
  codec_name: str
80
80
  codec_config: dict[str, JSON]
81
81
 
82
+ def __init_subclass__(cls, *, codec_name: str | None = None, **kwargs):
83
+ """To be used only when creating the actual public-facing codec class."""
84
+ super().__init_subclass__(**kwargs)
85
+ if codec_name is not None:
86
+ namespace = codec_name
87
+
88
+ cls_name = f"{CODEC_PREFIX}{namespace}.{cls.__name__}"
89
+ cls.codec_name = f"{CODEC_PREFIX}{namespace}"
90
+ cls.__doc__ = f"""
91
+ See :class:`{cls_name}` for more details and parameters.
92
+ """
93
+
82
94
  def __init__(self, **codec_config: JSON) -> None:
83
95
  if not self.codec_name:
84
96
  raise ValueError(
@@ -180,159 +192,77 @@ class _NumcodecsArrayBytesCodec(_NumcodecsCodec, ArrayBytesCodec):
180
192
  return chunk_spec.prototype.buffer.from_bytes(out)
181
193
 
182
194
 
183
- T = TypeVar("T", bound=_NumcodecsCodec)
184
-
185
-
186
- def _add_docstring(cls: type[T], ref_class_name: str) -> type[T]:
187
- cls.__doc__ = f"""
188
- See :class:`{ref_class_name}` for more details and parameters.
189
- """
190
- return cls
191
-
192
-
193
- def _add_docstring_wrapper(ref_class_name: str) -> partial:
194
- return partial(_add_docstring, ref_class_name=ref_class_name)
195
-
196
-
197
- def _make_bytes_bytes_codec(codec_name: str, cls_name: str) -> type[_NumcodecsBytesBytesCodec]:
198
- # rename for class scope
199
- _codec_name = CODEC_PREFIX + codec_name
200
-
201
- class _Codec(_NumcodecsBytesBytesCodec):
202
- codec_name = _codec_name
203
-
204
- def __init__(self, **codec_config: JSON) -> None:
205
- super().__init__(**codec_config)
206
-
207
- _Codec.__name__ = cls_name
208
- return _Codec
209
-
210
-
211
- def _make_array_array_codec(codec_name: str, cls_name: str) -> type[_NumcodecsArrayArrayCodec]:
212
- # rename for class scope
213
- _codec_name = CODEC_PREFIX + codec_name
214
-
215
- class _Codec(_NumcodecsArrayArrayCodec):
216
- codec_name = _codec_name
217
-
218
- def __init__(self, **codec_config: JSON) -> None:
219
- super().__init__(**codec_config)
220
-
221
- _Codec.__name__ = cls_name
222
- return _Codec
223
-
224
-
225
- def _make_array_bytes_codec(codec_name: str, cls_name: str) -> type[_NumcodecsArrayBytesCodec]:
226
- # rename for class scope
227
- _codec_name = CODEC_PREFIX + codec_name
195
+ # bytes-to-bytes codecs
196
+ class Blosc(_NumcodecsBytesBytesCodec, codec_name="blosc"):
197
+ pass
228
198
 
229
- class _Codec(_NumcodecsArrayBytesCodec):
230
- codec_name = _codec_name
231
199
 
232
- def __init__(self, **codec_config: JSON) -> None:
233
- super().__init__(**codec_config)
200
+ class LZ4(_NumcodecsBytesBytesCodec, codec_name="lz4"):
201
+ pass
234
202
 
235
- _Codec.__name__ = cls_name
236
- return _Codec
237
203
 
204
+ class Zstd(_NumcodecsBytesBytesCodec, codec_name="zstd"):
205
+ pass
238
206
 
239
- def _make_checksum_codec(codec_name: str, cls_name: str) -> type[_NumcodecsBytesBytesCodec]:
240
- # rename for class scope
241
- _codec_name = CODEC_PREFIX + codec_name
242
207
 
243
- class _ChecksumCodec(_NumcodecsBytesBytesCodec):
244
- codec_name = _codec_name
208
+ class Zlib(_NumcodecsBytesBytesCodec, codec_name="zlib"):
209
+ pass
245
210
 
246
- def __init__(self, **codec_config: JSON) -> None:
247
- super().__init__(**codec_config)
248
211
 
249
- def compute_encoded_size(self, input_byte_length: int, chunk_spec: ArraySpec) -> int:
250
- return input_byte_length + 4 # pragma: no cover
212
+ class GZip(_NumcodecsBytesBytesCodec, codec_name="gzip"):
213
+ pass
251
214
 
252
- _ChecksumCodec.__name__ = cls_name
253
- return _ChecksumCodec
254
215
 
216
+ class BZ2(_NumcodecsBytesBytesCodec, codec_name="bz2"):
217
+ pass
255
218
 
256
- # bytes-to-bytes codecs
257
- Blosc = _add_docstring(_make_bytes_bytes_codec("blosc", "Blosc"), "numcodecs.blosc.Blosc")
258
- LZ4 = _add_docstring(_make_bytes_bytes_codec("lz4", "LZ4"), "numcodecs.lz4.LZ4")
259
- Zstd = _add_docstring(_make_bytes_bytes_codec("zstd", "Zstd"), "numcodecs.zstd.Zstd")
260
- Zlib = _add_docstring(_make_bytes_bytes_codec("zlib", "Zlib"), "numcodecs.zlib.Zlib")
261
- GZip = _add_docstring(_make_bytes_bytes_codec("gzip", "GZip"), "numcodecs.gzip.GZip")
262
- BZ2 = _add_docstring(_make_bytes_bytes_codec("bz2", "BZ2"), "numcodecs.bz2.BZ2")
263
- LZMA = _add_docstring(_make_bytes_bytes_codec("lzma", "LZMA"), "numcodecs.lzma.LZMA")
264
219
 
220
+ class LZMA(_NumcodecsBytesBytesCodec, codec_name="lzma"):
221
+ pass
265
222
 
266
- @_add_docstring_wrapper("numcodecs.shuffle.Shuffle")
267
- class Shuffle(_NumcodecsBytesBytesCodec):
268
- codec_name = f"{CODEC_PREFIX}shuffle"
269
-
270
- def __init__(self, **codec_config: JSON) -> None:
271
- super().__init__(**codec_config)
272
223
 
224
+ class Shuffle(_NumcodecsBytesBytesCodec, codec_name="shuffle"):
273
225
  def evolve_from_array_spec(self, array_spec: ArraySpec) -> Shuffle:
274
- if self.codec_config.get("elementsize", None) is None:
226
+ if self.codec_config.get("elementsize") is None:
275
227
  return Shuffle(**{**self.codec_config, "elementsize": array_spec.dtype.itemsize})
276
228
  return self # pragma: no cover
277
229
 
278
230
 
279
231
  # array-to-array codecs ("filters")
280
- @_add_docstring_wrapper("numcodecs.delta.Delta")
281
- class Delta(_NumcodecsArrayArrayCodec):
282
- codec_name = f"{CODEC_PREFIX}delta"
283
-
284
- def __init__(self, **codec_config: dict[str, JSON]) -> None:
285
- super().__init__(**codec_config)
286
-
232
+ class Delta(_NumcodecsArrayArrayCodec, codec_name="delta"):
287
233
  def resolve_metadata(self, chunk_spec: ArraySpec) -> ArraySpec:
288
234
  if astype := self.codec_config.get("astype"):
289
- return replace(chunk_spec, dtype=np.dtype(astype)) # type: ignore[arg-type]
235
+ return replace(chunk_spec, dtype=np.dtype(astype)) # type: ignore[call-overload]
290
236
  return chunk_spec
291
237
 
292
238
 
293
- BitRound = _add_docstring(
294
- _make_array_array_codec("bitround", "BitRound"), "numcodecs.bitround.BitRound"
295
- )
296
-
239
+ class BitRound(_NumcodecsArrayArrayCodec, codec_name="bitround"):
240
+ pass
297
241
 
298
- @_add_docstring_wrapper("numcodecs.fixedscaleoffset.FixedScaleOffset")
299
- class FixedScaleOffset(_NumcodecsArrayArrayCodec):
300
- codec_name = f"{CODEC_PREFIX}fixedscaleoffset"
301
-
302
- def __init__(self, **codec_config: JSON) -> None:
303
- super().__init__(**codec_config)
304
242
 
243
+ class FixedScaleOffset(_NumcodecsArrayArrayCodec, codec_name="fixedscaleoffset"):
305
244
  def resolve_metadata(self, chunk_spec: ArraySpec) -> ArraySpec:
306
245
  if astype := self.codec_config.get("astype"):
307
- return replace(chunk_spec, dtype=np.dtype(astype)) # type: ignore[arg-type]
246
+ return replace(chunk_spec, dtype=np.dtype(astype)) # type: ignore[call-overload]
308
247
  return chunk_spec
309
248
 
310
249
  def evolve_from_array_spec(self, array_spec: ArraySpec) -> FixedScaleOffset:
311
- if self.codec_config.get("dtype", None) is None:
250
+ if self.codec_config.get("dtype") is None:
312
251
  return FixedScaleOffset(**{**self.codec_config, "dtype": str(array_spec.dtype)})
313
252
  return self
314
253
 
315
254
 
316
- @_add_docstring_wrapper("numcodecs.quantize.Quantize")
317
- class Quantize(_NumcodecsArrayArrayCodec):
318
- codec_name = f"{CODEC_PREFIX}quantize"
319
-
255
+ class Quantize(_NumcodecsArrayArrayCodec, codec_name="quantize"):
320
256
  def __init__(self, **codec_config: JSON) -> None:
321
257
  super().__init__(**codec_config)
322
258
 
323
259
  def evolve_from_array_spec(self, array_spec: ArraySpec) -> Quantize:
324
- if self.codec_config.get("dtype", None) is None:
260
+ if self.codec_config.get("dtype") is None:
325
261
  return Quantize(**{**self.codec_config, "dtype": str(array_spec.dtype)})
326
262
  return self
327
263
 
328
264
 
329
- @_add_docstring_wrapper("numcodecs.packbits.PackBits")
330
- class PackBits(_NumcodecsArrayArrayCodec):
331
- codec_name = f"{CODEC_PREFIX}packbits"
332
-
333
- def __init__(self, **codec_config: JSON) -> None:
334
- super().__init__(**codec_config)
335
-
265
+ class PackBits(_NumcodecsArrayArrayCodec, codec_name="packbits"):
336
266
  def resolve_metadata(self, chunk_spec: ArraySpec) -> ArraySpec:
337
267
  return replace(
338
268
  chunk_spec,
@@ -345,36 +275,50 @@ class PackBits(_NumcodecsArrayArrayCodec):
345
275
  raise ValueError(f"Packbits filter requires bool dtype. Got {dtype}.")
346
276
 
347
277
 
348
- @_add_docstring_wrapper("numcodecs.astype.AsType")
349
- class AsType(_NumcodecsArrayArrayCodec):
350
- codec_name = f"{CODEC_PREFIX}astype"
351
-
352
- def __init__(self, **codec_config: JSON) -> None:
353
- super().__init__(**codec_config)
354
-
278
+ class AsType(_NumcodecsArrayArrayCodec, codec_name="astype"):
355
279
  def resolve_metadata(self, chunk_spec: ArraySpec) -> ArraySpec:
356
280
  return replace(chunk_spec, dtype=np.dtype(self.codec_config["encode_dtype"])) # type: ignore[arg-type]
357
281
 
358
282
  def evolve_from_array_spec(self, array_spec: ArraySpec) -> AsType:
359
- if self.codec_config.get("decode_dtype", None) is None:
283
+ if self.codec_config.get("decode_dtype") is None:
360
284
  return AsType(**{**self.codec_config, "decode_dtype": str(array_spec.dtype)})
361
285
  return self
362
286
 
363
287
 
364
288
  # bytes-to-bytes checksum codecs
365
- CRC32 = _add_docstring(_make_checksum_codec("crc32", "CRC32"), "numcodecs.checksum32.CRC32")
366
- CRC32C = _add_docstring(_make_checksum_codec("crc32c", "CRC32C"), "numcodecs.checksum32.CRC32C")
367
- Adler32 = _add_docstring(_make_checksum_codec("adler32", "Adler32"), "numcodecs.checksum32.Adler32")
368
- Fletcher32 = _add_docstring(
369
- _make_checksum_codec("fletcher32", "Fletcher32"), "numcodecs.fletcher32.Fletcher32"
370
- )
371
- JenkinsLookup3 = _add_docstring(
372
- _make_checksum_codec("jenkins_lookup3", "JenkinsLookup3"), "numcodecs.checksum32.JenkinsLookup3"
373
- )
289
+ class _NumcodecsChecksumCodec(_NumcodecsBytesBytesCodec):
290
+ def compute_encoded_size(self, input_byte_length: int, chunk_spec: ArraySpec) -> int:
291
+ return input_byte_length + 4 # pragma: no cover
292
+
293
+
294
+ class CRC32(_NumcodecsChecksumCodec, codec_name="crc32"):
295
+ pass
296
+
297
+
298
+ class CRC32C(_NumcodecsChecksumCodec, codec_name="crc32c"):
299
+ pass
300
+
301
+
302
+ class Adler32(_NumcodecsChecksumCodec, codec_name="adler32"):
303
+ pass
304
+
305
+
306
+ class Fletcher32(_NumcodecsChecksumCodec, codec_name="fletcher32"):
307
+ pass
308
+
309
+
310
+ class JenkinsLookup3(_NumcodecsChecksumCodec, codec_name="jenkins_lookup3"):
311
+ pass
312
+
374
313
 
375
314
  # array-to-bytes codecs
376
- PCodec = _add_docstring(_make_array_bytes_codec("pcodec", "PCodec"), "numcodecs.pcodec.PCodec")
377
- ZFPY = _add_docstring(_make_array_bytes_codec("zfpy", "ZFPY"), "numcodecs.zfpy.ZFPY")
315
+ class PCodec(_NumcodecsArrayBytesCodec, codec_name="pcodec"):
316
+ pass
317
+
318
+
319
+ class ZFPY(_NumcodecsArrayBytesCodec, codec_name="zfpy"):
320
+ pass
321
+
378
322
 
379
323
  __all__ = [
380
324
  "BZ2",
Binary file
@@ -1,9 +1,9 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: numcodecs
3
- Version: 0.15.1
3
+ Version: 0.16.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
- License: MIT
6
+ License-Expression: MIT
7
7
  Project-URL: Bug Tracker, https://github.com/zarr-developers/numcodecs/issues
8
8
  Project-URL: Changelog, https://numcodecs.readthedocs.io/en/stable/release.html
9
9
  Project-URL: Documentation, https://numcodecs.readthedocs.io/
@@ -12,7 +12,6 @@ Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Information Technology
14
14
  Classifier: Intended Audience :: Science/Research
15
- Classifier: License :: OSI Approved :: MIT License
16
15
  Classifier: Programming Language :: Python
17
16
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
17
  Classifier: Operating System :: Unix
@@ -21,8 +20,16 @@ Classifier: Programming Language :: Python :: 3 :: Only
21
20
  Requires-Python: >=3.11
22
21
  Description-Content-Type: text/x-rst
23
22
  License-File: LICENSE.txt
23
+ License-File: c-blosc/LICENSE.txt
24
+ License-File: c-blosc/LICENSES/BITSHUFFLE.txt
25
+ License-File: c-blosc/LICENSES/FASTLZ.txt
26
+ License-File: c-blosc/LICENSES/LZ4.txt
27
+ License-File: c-blosc/LICENSES/SNAPPY.txt
28
+ License-File: c-blosc/LICENSES/STDINT.txt
29
+ License-File: c-blosc/LICENSES/ZLIB-NG.txt
30
+ License-File: c-blosc/LICENSES/ZLIB.txt
24
31
  Requires-Dist: numpy>=1.24
25
- Requires-Dist: deprecated
32
+ Requires-Dist: typing_extensions
26
33
  Provides-Extra: docs
27
34
  Requires-Dist: sphinx; extra == "docs"
28
35
  Requires-Dist: sphinx-issues; extra == "docs"
@@ -42,6 +49,7 @@ Provides-Extra: pcodec
42
49
  Requires-Dist: pcodec<0.4,>=0.3; extra == "pcodec"
43
50
  Provides-Extra: crc32c
44
51
  Requires-Dist: crc32c>=2.7; extra == "crc32c"
52
+ Dynamic: license-file
45
53
 
46
54
  Numcodecs
47
55
  =========
@@ -1,23 +1,23 @@
1
- numcodecs/__init__.py,sha256=IdxAMSfHMK0HLqtxa_vUKy2nUHXxCgojJJRsCzXc6SQ,3249
2
- numcodecs/_shuffle.cp311-win_amd64.pyd,sha256=IDz0n12VfNP6aJ0YEjaiupoEpkJRcq3_2x-4EcjCmtI,133632
1
+ numcodecs/__init__.py,sha256=zcO3_tRbWzdbtZQniKvnleQ8U6wZcLtNLRXvzYjESAg,3250
2
+ numcodecs/_shuffle.cp311-win_amd64.pyd,sha256=YlIaIDyt0FtsGHtieMdRCckivQ-Cfly1P1zM0njQW6Q,122368
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.cp311-win_amd64.pyd,sha256=KfqULufpcumxU4epF4bmykIJq-qp1BXc20ECJxrbDiU,619008
7
+ numcodecs/blosc.cp311-win_amd64.pyd,sha256=Rt9Bp1c9yyFDzI75_4wcgXzrMJYbbr9KpFI4iEqfFaM,570368
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=ZIYm_eAMLZEw2Nj87Y3dckuy8Vtm69ZoRMq_NgiVfTU,5620
10
+ numcodecs/checksum32.py,sha256=FAA1N6agDIxE8OMcyusjqGLFy5vyxzsxnARsfhOXeTQ,5909
11
11
  numcodecs/compat.py,sha256=ghz0-UpxV0q_mAaiZLZv6BBhJNNLeLTDGirO4Oda_ZM,6711
12
- numcodecs/compat_ext.cp311-win_amd64.pyd,sha256=lznO3WkA6E-tcVukm6A1uTS61pR4sbLilXy6UfVQ6pI,35328
12
+ numcodecs/compat_ext.cp311-win_amd64.pyd,sha256=_1WGF1OO4ZKljy7AbKjREbBD6z_TFRJ06IV2plW16bc,23552
13
13
  numcodecs/delta.py,sha256=cSU6M1hT6q_ZNdyW3zkbcPsyviZsc9OJ5nZLBOpnwxc,2885
14
14
  numcodecs/errors.py,sha256=Acfi3-rFKs93QM3-fcS7vo2qGvocLXwWnA0HhuOwGqk,689
15
15
  numcodecs/fixedscaleoffset.py,sha256=mjIakyHT5cY38o7gE-9f99SjPJRVAxYkyOJ0h9OnyKE,4318
16
- numcodecs/fletcher32.cp311-win_amd64.pyd,sha256=8jN0WMGrzj6ilXwlve9WZ7Ya3yaLunRGuHx1x2wkATE,155136
16
+ numcodecs/fletcher32.cp311-win_amd64.pyd,sha256=xjPK77Jz281HwVdLf4yNgA0cqIb1YKG9ywS3plTyuVg,142336
17
17
  numcodecs/gzip.py,sha256=w7TpS4sorX36J7L4Izs8BszU7ZH-Mks455Ai-QHWZrs,1486
18
- numcodecs/jenkins.cp311-win_amd64.pyd,sha256=mTNOSM2ieUYlPhk0cYDhMPp3xUX1JmOJ4uLgQdIhVqM,144384
18
+ numcodecs/jenkins.cp311-win_amd64.pyd,sha256=gJU8YoYPviCCXx6DaSoNzWNM0e37RCEpMX4Bi1Q9avw,135168
19
19
  numcodecs/json.py,sha256=dFoZcpBSY3fU-4p4x1DjI3mtr-reRlsMSJ7Aiwy_sgI,3500
20
- numcodecs/lz4.cp311-win_amd64.pyd,sha256=CP-03xAdY1T0z7tlPVaKs7hrPoDjRZhlVM2fUEjCqKQ,73216
20
+ numcodecs/lz4.cp311-win_amd64.pyd,sha256=JEoRVleQj72OXYkaIgMt5iWpnhdoEdEShEqW0kLqjO8,68096
21
21
  numcodecs/lzma.py,sha256=N01IBcCZKiMS0fPB75157inIhuZkVNFcW3Xf96mmWJ8,2329
22
22
  numcodecs/msgpacks.py,sha256=a6do5fvFqnSXOadxajtw-uq7UdcUsWUY-hTDv8HCx08,2705
23
23
  numcodecs/ndarray_like.py,sha256=M6n00SC1h_SgN0enXClkKMFeE4z-AewLAYVbq56Vl2A,1948
@@ -27,18 +27,18 @@ numcodecs/pickles.py,sha256=Yh8hCg-ETdLWM5MjCy5vPW8E8_3DCjyvOPoKtvbr1ZU,1345
27
27
  numcodecs/quantize.py,sha256=hHzsMgFtJGDHrYRjdFqNBJ2wit9I45y59Uqc5pUjIWQ,3114
28
28
  numcodecs/registry.py,sha256=IlPYY8RlVZgRid2j-S7SxnhCMq4y9cxQwQMGCy7lgbI,1938
29
29
  numcodecs/shuffle.py,sha256=ty-NJ1bIgsErwmTyJtspSgrrJ4PspQjp6Hb-U2M17hY,1636
30
- numcodecs/version.py,sha256=N9lUWBZ0Ree-hUkAarPhWZOx0C9_k2y1HZaFAacE5Zg,429
31
- numcodecs/vlen.cp311-win_amd64.pyd,sha256=TY_Dqm-Ek9IY6QVp49eGZqhrnRWwp0yhKTrZy9Kn5lg,200192
32
- numcodecs/zarr3.py,sha256=JX_LrNQFp26nlOEcS2nnxau5t8HYBV28ckVC8008ojA,15066
30
+ numcodecs/version.py,sha256=Q-sQEcpO0WIsA4KgY99KmzTgmRvvelk-5dmyYTgdykY,534
31
+ numcodecs/vlen.cp311-win_amd64.pyd,sha256=d3VAFgO2Mm4d3PaCqmUBRqg1BFTdAmHT1bf-N1iKNdE,186368
32
+ numcodecs/zarr3.py,sha256=tkziYhdg427GAzEaeLnvgyL-uXAcvvFpYoaxN8aFoCM,12234
33
33
  numcodecs/zfpy.py,sha256=SP6zPdXwSrZzu_iuudoSZGBuE6IvXWdvJri1fgz-4nY,4013
34
34
  numcodecs/zlib.py,sha256=C5TO2qRPyG6SY25lmB9qeFh6yr4IRAqHz0v4RaPvygE,1091
35
- numcodecs/zstd.cp311-win_amd64.pyd,sha256=MzHAt2FKPwPOkAvceUM4bsVtAlj545YNzAF7sucySJE,451584
35
+ numcodecs/zstd.cp311-win_amd64.pyd,sha256=P6ZuXEpTBXmPhcM4wbD5jqeklwABFb1uJtvzruLjxlk,444928
36
36
  numcodecs/tests/__init__.py,sha256=W7MDbDAXcjl7fVmolo3U_30rFkOCb6mWQ8vcByUpu8g,75
37
- numcodecs/tests/common.py,sha256=jxox32_wMnqwiBi6Ibz32-5lDXtlOaMVq5B-CUgtAbc,12537
37
+ numcodecs/tests/common.py,sha256=oOBW3lYM9TKG7PQjeK_CKBtg2o1oA3pLA_8npHwV5vY,9592
38
38
  numcodecs/tests/test_astype.py,sha256=m-l8k4q8jSZrIqviASKxYsaPzzuBG_Y4tUNlIigYbco,2441
39
39
  numcodecs/tests/test_base64.py,sha256=znf-cMk2JBW3vjcZu7CpC2b9wIiIzBPwfmHX_WlkZ1o,2396
40
40
  numcodecs/tests/test_bitround.py,sha256=idosc7MlWLWoA93jFFPgfKk1WzazmaLqH3gzCsVV0F0,2430
41
- numcodecs/tests/test_blosc.py,sha256=PwvxL1d0bI8VY5KFUKuwyL5A2QqpwUbhJSma4V_w5KY,9129
41
+ numcodecs/tests/test_blosc.py,sha256=TvnWfKImQ-XVm5Sz9dhg3MEskdAY37jYPsIVVR2VBOA,9953
42
42
  numcodecs/tests/test_bz2.py,sha256=iH9BPZ8wtXCEfq52RXOqQ9bmQsTMiy3uujIKNpi2Mqs,1955
43
43
  numcodecs/tests/test_categorize.py,sha256=wug4Im375r3nM1oTIrDVW5woZiZDCsp5uE1Fz6qwIkI,2843
44
44
  numcodecs/tests/test_checksum32.py,sha256=1ZbJrUXPFAPZdmKYso0u0lHBUBtdyA-mfiQdmXRqdqs,4755
@@ -62,18 +62,26 @@ numcodecs/tests/test_quantize.py,sha256=muD4zwQSa4XM4jPO3qXu8rMdoU4eHCpVfQ8z0G7Z
62
62
  numcodecs/tests/test_registry.py,sha256=Ar_Op6MIEm8MTxzBPgjtMrWXA5EhYm7JnM-Yab79zrY,1159
63
63
  numcodecs/tests/test_shuffle.py,sha256=25AOv67ip0EroQyufgWZXPYueA4p4HZcctwTTFeT5Q0,4825
64
64
  numcodecs/tests/test_vlen_array.py,sha256=sUwLaza31Yo0IMnmKCGykRPaB3ha7i0ImiCY9yvHS9o,2574
65
- numcodecs/tests/test_vlen_bytes.py,sha256=--iq7kzkb-ynZQHRAbIInaezjBNW2H26v3kLmGnzyeM,2738
65
+ numcodecs/tests/test_vlen_bytes.py,sha256=ujYHFkBn7EultxVkEepbmFriQfO_pJxfh7dEfTxCCco,2566
66
66
  numcodecs/tests/test_vlen_utf8.py,sha256=X0nBvLv1hVDHGz3pIRMP4rVs75lAkXGUb0cRcfZM1Ss,2565
67
- numcodecs/tests/test_zarr3.py,sha256=awcNOFFUmTZ0wer2G8gOIXl9kETWwkByRonH54XodJo,8762
67
+ numcodecs/tests/test_zarr3.py,sha256=72s8pRMtvZEw_6NQLDe3f-6cHORN3etHMFJkT4Kn2sQ,9732
68
68
  numcodecs/tests/test_zarr3_import.py,sha256=enI8IqSnTynihEQ2mh95UdTZ5Gb8m9Wock6gbg3iLYs,345
69
69
  numcodecs/tests/test_zfpy.py,sha256=lSkKcpGg437poMRQ88EDYdbQVIqKmF0Il-ASdlYkkIY,2866
70
70
  numcodecs/tests/test_zlib.py,sha256=SxgYIyH2bH_eIX7k-9kgPUOXCHEllGPoLSUSn0Qk5rg,2633
71
71
  numcodecs/tests/test_zstd.py,sha256=P-wHnm0wOuclHOoX7danVEvufxKNM3GwYBgHBchzILE,2702
72
72
  numcodecs/tests/package_with_entrypoint/__init__.py,sha256=j0h1AHePXH8ONfd-TMGwKsMW4gBqbgiGOuGP25S9hLE,223
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=yNnHoQL2GZYIUXm9YvoaBpFjGlUoK9qq9oqYeudrWlE,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
73
+ numcodecs-0.16.1.dist-info/licenses/LICENSE.txt,sha256=IxxTq7WTy9_G9AbShWjbBcg6x2G3pDlJEIBJN2o95ks,1145
74
+ numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSE.txt,sha256=O7ymticiBIDDnp1Qz4k3YxL84kZcC9Anjw8LcRxPOi4,1675
75
+ numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/BITSHUFFLE.txt,sha256=KlmZr2WeErTRwZ6evuOiOyon5Lzx3q_5r6Ia77DpIJQ,1169
76
+ numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/FASTLZ.txt,sha256=FYqEiOTbader3aeXp85aD6aVA90BFKUDRJpEPu_8w-8,1155
77
+ numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/LZ4.txt,sha256=rRc2s37unSWbyuYw_OWvM97RJrWSfYjQ3pcrcU9N6io,1337
78
+ numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/SNAPPY.txt,sha256=J-aF3rkomek7rPuKYzRPUOrIUgGnoqoNhXndJ3q8QMI,1503
79
+ numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/STDINT.txt,sha256=DjS3TKOVRT0V_QC6Bf4u9IQWvXgfwnLmvPxsFdUGRqM,1597
80
+ numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/ZLIB-NG.txt,sha256=PqsweFGCCDpkeUrFcwoGvQ_PPc3ZcGNNqSSR0bdSJwk,910
81
+ numcodecs-0.16.1.dist-info/licenses/c-blosc/LICENSES/ZLIB.txt,sha256=GNvTfwqxdcN4d-kFP_hwp94oCaPpuWc7JpaqUAkmRjg,1024
82
+ numcodecs-0.16.1.dist-info/METADATA,sha256=aDxoAuL6CVsjhuF3ejRTFsHFEKvi_oSKK0NORq0aMfQ,3324
83
+ numcodecs-0.16.1.dist-info/WHEEL,sha256=w9Xlqjb4P__1xPosTTDG8Ieqhmo6FNdeoRaV5xSg6-o,101
84
+ numcodecs-0.16.1.dist-info/entry_points.txt,sha256=3W3FHKrwE52X3fLq8KdioOtf93lh5KaoGV5t2D10DBI,919
85
+ numcodecs-0.16.1.dist-info/top_level.txt,sha256=JkHllzt6IuVudg4Tk--wF-yfPPsdVOiMTag1tjGIihw,10
78
86
  numcodecs/tests/package_with_entrypoint-0.1.dist-info/entry_points.txt,sha256=COk3sfJsTt3T00bA2bcUMCuWEhwkQvf4lPHcBDk34qA,62
79
- numcodecs-0.15.1.dist-info/RECORD,,
87
+ numcodecs-0.16.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (80.8.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp311-cp311-win_amd64
5
5
 
@@ -0,0 +1,31 @@
1
+ BSD License
2
+
3
+ For Blosc - A blocking, shuffling and lossless compression library
4
+
5
+ Copyright (c) 2009-2018 Francesc Alted <francesc@blosc.org>
6
+ Copyright (c) 2019-present Blosc Development Team <blosc@blosc.org>
7
+
8
+ Redistribution and use in source and binary forms, with or without modification,
9
+ are permitted provided that the following conditions are met:
10
+
11
+ * Redistributions of source code must retain the above copyright notice, this
12
+ list of conditions and the following disclaimer.
13
+
14
+ * Redistributions in binary form must reproduce the above copyright notice,
15
+ this list of conditions and the following disclaimer in the documentation
16
+ and/or other materials provided with the distribution.
17
+
18
+ * Neither the name Francesc Alted nor the names of its contributors may be used
19
+ to endorse or promote products derived from this software without specific
20
+ prior written permission.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
23
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
26
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
27
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
29
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,21 @@
1
+ Bitshuffle - Filter for improving compression of typed binary data.
2
+
3
+ Copyright (c) 2014 Kiyoshi Masui (kiyo@physics.ubc.ca)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,20 @@
1
+ FastLZ - Byte-aligned LZ77 compression library
2
+ Copyright (C) 2005-2020 Ariya Hidayat <ariya.hidayat@gmail.com>
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in
12
+ all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
@@ -0,0 +1,25 @@
1
+
2
+ LZ4 Library
3
+ Copyright (c) 2011-2020, Yann Collet
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without modification,
7
+ are permitted provided that the following conditions are met:
8
+
9
+ * Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above copyright notice, this
13
+ list of conditions and the following disclaimer in the documentation and/or
14
+ other materials provided with the distribution.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
20
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,28 @@
1
+ Copyright 2011, Google Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are
6
+ met:
7
+
8
+ * Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+ * Redistributions in binary form must reproduce the above
11
+ copyright notice, this list of conditions and the following disclaimer
12
+ in the documentation and/or other materials provided with the
13
+ distribution.
14
+ * Neither the name of Google Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from
16
+ this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,29 @@
1
+ ISO C9x compliant stdint.h for Microsoft Visual Studio
2
+ Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
3
+
4
+ Copyright (c) 2006-2013 Alexander Chemeris
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright notice,
10
+ this list of conditions and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+
16
+ 3. Neither the name of the product nor the names of its contributors may
17
+ be used to endorse or promote products derived from this software
18
+ without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
21
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
23
+ EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,17 @@
1
+ (C) 1995-2013 Jean-loup Gailly and Mark Adler
2
+
3
+ This software is provided 'as-is', without any express or implied
4
+ warranty. In no event will the authors be held liable for any damages
5
+ arising from the use of this software.
6
+
7
+ Permission is granted to anyone to use this software for any purpose,
8
+ including commercial applications, and to alter it and redistribute it
9
+ freely, subject to the following restrictions:
10
+
11
+ 1. The origin of this software must not be misrepresented; you must not
12
+ claim that you wrote the original software. If you use this software
13
+ in a product, an acknowledgment in the product documentation would be
14
+ appreciated but is not required.
15
+ 2. Altered source versions must be plainly marked as such, and must not be
16
+ misrepresented as being the original software.
17
+ 3. This notice may not be removed or altered from any source distribution.
@@ -0,0 +1,22 @@
1
+ Copyright notice:
2
+
3
+ (C) 1995-2022 Jean-loup Gailly and Mark Adler
4
+
5
+ This software is provided 'as-is', without any express or implied
6
+ warranty. In no event will the authors be held liable for any damages
7
+ arising from the use of this software.
8
+
9
+ Permission is granted to anyone to use this software for any purpose,
10
+ including commercial applications, and to alter it and redistribute it
11
+ freely, subject to the following restrictions:
12
+
13
+ 1. The origin of this software must not be misrepresented; you must not
14
+ claim that you wrote the original software. If you use this software
15
+ in a product, an acknowledgment in the product documentation would be
16
+ appreciated but is not required.
17
+ 2. Altered source versions must be plainly marked as such, and must not be
18
+ misrepresented as being the original software.
19
+ 3. This notice may not be removed or altered from any source distribution.
20
+
21
+ Jean-loup Gailly Mark Adler
22
+ jloup@gzip.org madler@alumni.caltech.edu