Skip to content

Commit 3a060f4

Browse files
authored
Deprecate blosc helper functions (#619)
* Deprecate blosc helper functions * Fix calling deprecated functions * Add release notes * Add deprecated dep
1 parent c5cf0c5 commit 3a060f4

File tree

6 files changed

+43
-22
lines changed

6 files changed

+43
-22
lines changed

docs/compression/blosc.rst

-6
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,9 @@ Blosc
1818
Helper functions
1919
----------------
2020

21-
.. autofunction:: init
22-
.. autofunction:: destroy
23-
.. autofunction:: compname_to_compcode
2421
.. autofunction:: list_compressors
2522
.. autofunction:: get_nthreads
2623
.. autofunction:: set_nthreads
27-
.. autofunction:: cbuffer_sizes
2824
.. autofunction:: cbuffer_complib
29-
.. autofunction:: cbuffer_metainfo
3025
.. autofunction:: compress
3126
.. autofunction:: decompress
32-
.. autofunction:: decompress_partial

docs/release.rst

+14
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ Breaking changes
2222
are now keyword only, to support the updated API.
2323
By :user:`Sam Levang <slevang>`, :issue:`623`
2424

25+
Deprecations
26+
~~~~~~~~~~~~
27+
The following ``blosc`` funcitons are deprecated, with no replacement.
28+
This is because they are not intended to be public API.
29+
30+
- ``numcodecs.blosc.init``
31+
- ``numcodecs.blosc.destroy``
32+
- ``numcodecs.blosc.compname_to_compcode``
33+
- ``numcodecs.blosc.cbuffer_sizes``
34+
- ``numcodecs.blosc.cbuffer_metainfo``
35+
36+
In addition, ``numcodecs.blosc.decompress_partial`` is deprecated as
37+
has always been experimental and there is no equivalent in the official
38+
blsoc Python package.
2539

2640
Fixes
2741
~~~~~

numcodecs/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
ncores = multiprocessing.cpu_count()
5050
except OSError: # pragma: no cover
5151
ncores = 1
52-
blosc.init()
52+
blosc._init()
5353
blosc.set_nthreads(min(8, ncores))
5454
atexit.register(blosc.destroy)
5555

numcodecs/blosc.pyx

+22-10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import threading
77
import multiprocessing
88
import os
9+
from deprecated import deprecated
910

1011

1112
from cpython.buffer cimport PyBUF_ANY_CONTIGUOUS, PyBUF_WRITEABLE
@@ -95,24 +96,31 @@ def get_mutex():
9596
_importer_pid = os.getpid()
9697

9798

98-
def init():
99+
def _init():
99100
"""Initialize the Blosc library environment."""
100101
blosc_init()
101102

103+
init = deprecated(_init)
102104

103-
def destroy():
105+
106+
def _destroy():
104107
"""Destroy the Blosc library environment."""
105108
blosc_destroy()
106109

107110

108-
def compname_to_compcode(cname):
111+
destroy = deprecated(_destroy)
112+
113+
114+
def _compname_to_compcode(cname):
109115
"""Return the compressor code associated with the compressor name. If the compressor
110116
name is not recognized, or there is not support for it in this build, -1 is returned
111117
instead."""
112118
if isinstance(cname, str):
113119
cname = cname.encode('ascii')
114120
return blosc_compname_to_compcode(cname)
115121

122+
compname_to_compcode = deprecated(_compname_to_compcode)
123+
116124

117125
def list_compressors():
118126
"""Get a list of compressors supported in the current build."""
@@ -133,7 +141,7 @@ def set_nthreads(int nthreads):
133141
return blosc_set_nthreads(nthreads)
134142

135143

136-
def cbuffer_sizes(source):
144+
def _cbuffer_sizes(source):
137145
"""Return information about a compressed buffer, namely the number of uncompressed
138146
bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which
139147
is used internally for doing the compression by blocks).
@@ -160,6 +168,7 @@ def cbuffer_sizes(source):
160168

161169
return nbytes, cbytes, blocksize
162170

171+
cbuffer_sizes = deprecated(_cbuffer_sizes)
163172

164173
def cbuffer_complib(source):
165174
"""Return the name of the compression library used to compress `source`."""
@@ -180,7 +189,7 @@ def cbuffer_complib(source):
180189
return complib
181190

182191

183-
def cbuffer_metainfo(source):
192+
def _cbuffer_metainfo(source):
184193
"""Return some meta-information about the compressed buffer in `source`, including
185194
the typesize, whether the shuffle or bit-shuffle filters were used, and the
186195
whether the buffer was memcpyed.
@@ -217,11 +226,13 @@ def cbuffer_metainfo(source):
217226

218227
return typesize, shuffle, memcpyed
219228

229+
cbuffer_metainfo = deprecated(_cbuffer_metainfo)
220230

221-
def err_bad_cname(cname):
231+
def _err_bad_cname(cname):
222232
raise ValueError('bad compressor or compressor not supported: %r; expected one of '
223233
'%s' % (cname, list_compressors()))
224234

235+
err_bad_cname = deprecated(_err_bad_cname)
225236

226237
def compress(source, char* cname, int clevel, int shuffle=SHUFFLE,
227238
int blocksize=AUTOBLOCKS):
@@ -262,7 +273,7 @@ def compress(source, char* cname, int clevel, int shuffle=SHUFFLE,
262273
# check valid cname early
263274
cname_str = cname.decode('ascii')
264275
if cname_str not in list_compressors():
265-
err_bad_cname(cname_str)
276+
_err_bad_cname(cname_str)
266277

267278
# setup source buffer
268279
source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS)
@@ -300,7 +311,7 @@ def compress(source, char* cname, int clevel, int shuffle=SHUFFLE,
300311
if compressor_set < 0:
301312
# shouldn't happen if we checked against list of compressors
302313
# already, but just in case
303-
err_bad_cname(cname_str)
314+
_err_bad_cname(cname_str)
304315

305316
# set blocksize
306317
blosc_set_blocksize(blocksize)
@@ -405,7 +416,7 @@ def decompress(source, dest=None):
405416
return dest
406417

407418

408-
def decompress_partial(source, start, nitems, dest=None):
419+
def _decompress_partial(source, start, nitems, dest=None):
409420
"""**Experimental**
410421
Decompress data of only a part of a buffer.
411422
@@ -478,6 +489,7 @@ def decompress_partial(source, start, nitems, dest=None):
478489

479490
return dest
480491

492+
decompress_partial = deprecated(_decompress_partial)
481493

482494
# set the value of this variable to True or False to override the
483495
# default adaptive behaviour
@@ -575,7 +587,7 @@ class Blosc(Codec):
575587
def decode_partial(self, buf, int start, int nitems, out=None):
576588
'''**Experimental**'''
577589
buf = ensure_contiguous_ndarray(buf, self.max_buffer_size)
578-
return decompress_partial(buf, start, nitems, dest=out)
590+
return _decompress_partial(buf, start, nitems, dest=out)
579591

580592
def __repr__(self):
581593
r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \

numcodecs/tests/test_blosc.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,12 @@ def test_compress_blocksize_default(use_threads):
124124

125125
# default blocksize
126126
enc = blosc.compress(arr, b'lz4', 1, Blosc.NOSHUFFLE)
127-
_, _, blocksize = blosc.cbuffer_sizes(enc)
127+
_, _, blocksize = blosc._cbuffer_sizes(enc)
128128
assert blocksize > 0
129129

130130
# explicit default blocksize
131131
enc = blosc.compress(arr, b'lz4', 1, Blosc.NOSHUFFLE, 0)
132-
_, _, blocksize = blosc.cbuffer_sizes(enc)
132+
_, _, blocksize = blosc._cbuffer_sizes(enc)
133133
assert blocksize > 0
134134

135135

@@ -140,7 +140,7 @@ def test_compress_blocksize(use_threads, bs):
140140
blosc.use_threads = use_threads
141141

142142
enc = blosc.compress(arr, b'lz4', 1, Blosc.NOSHUFFLE, bs)
143-
_, _, blocksize = blosc.cbuffer_sizes(enc)
143+
_, _, blocksize = blosc._cbuffer_sizes(enc)
144144
assert blocksize == bs
145145

146146

@@ -174,7 +174,7 @@ def test_compress_metainfo(dtype, use_threads):
174174
blosc.use_threads = use_threads
175175
for cname in blosc.list_compressors():
176176
enc = blosc.compress(arr, cname.encode(), 1, shuffle)
177-
typesize, did_shuffle, _ = blosc.cbuffer_metainfo(enc)
177+
typesize, did_shuffle, _ = blosc._cbuffer_metainfo(enc)
178178
assert typesize == arr.dtype.itemsize
179179
assert did_shuffle == shuffle
180180

@@ -186,7 +186,7 @@ def test_compress_autoshuffle(use_threads):
186186
blosc.use_threads = use_threads
187187
for cname in blosc.list_compressors():
188188
enc = blosc.compress(varr, cname.encode(), 1, Blosc.AUTOSHUFFLE)
189-
typesize, did_shuffle, _ = blosc.cbuffer_metainfo(enc)
189+
typesize, did_shuffle, _ = blosc._cbuffer_metainfo(enc)
190190
assert typesize == varr.dtype.itemsize
191191
if typesize == 1:
192192
assert did_shuffle == Blosc.BITSHUFFLE

pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ for use in data storage and communication applications."""
1616
readme = "README.rst"
1717
dependencies = [
1818
"numpy>=1.24",
19+
"deprecated"
1920
]
2021
requires-python = ">=3.11"
2122
dynamic = [

0 commit comments

Comments
 (0)