Skip to content

Commit c301eff

Browse files
jakirkhamalimanfoo
authored andcommitted
Revert ndarray coercion of encode returned data (#155)
* Preserve `decode` data type where reasonable * Preserve `encode` data type where reasonable * Regenerate Cython files * Note reversion of ndarray coercion in changelog * Always return `bytes` from `GZip.encode` In order to make the user experience more consistent across Python 2/3, always return a `bytes` object from `GZip.encode`. This will add a copy to Python 3 before returning the result, but it will be no more copies than already occur on Python 2.
1 parent a2536e8 commit c301eff

File tree

13 files changed

+335
-573
lines changed

13 files changed

+335
-573
lines changed

docs/release.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ Release notes
2121
* Avoid copying into data in ``GZip``'s `decode()` method on Python 2.
2222
By :user:`John Kirkham <jakirkham>`, :issue:`152`.
2323

24+
* Revert ndarray coercion of encode returned data.
25+
By :user:`John Kirkham <jakirkham>`, :issue:`155`.
26+
2427

2528
.. _release_0.6.1:
2629

numcodecs/blosc.c

Lines changed: 84 additions & 152 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

numcodecs/blosc.pyx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ from cpython.bytes cimport PyBytes_FromStringAndSize, PyBytes_AS_STRING
1616

1717
from .compat_ext cimport Buffer
1818
from .compat_ext import Buffer
19-
from .compat import PY2, text_type, ensure_ndarray, ensure_contiguous_ndarray
19+
from .compat import PY2, text_type, ensure_contiguous_ndarray
2020
from .abc import Codec
2121

2222

@@ -488,13 +488,11 @@ class Blosc(Codec):
488488

489489
def encode(self, buf):
490490
buf = ensure_contiguous_ndarray(buf, self.max_buffer_size)
491-
out = compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize)
492-
return ensure_ndarray(out)
491+
return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize)
493492

494493
def decode(self, buf, out=None):
495494
buf = ensure_contiguous_ndarray(buf, self.max_buffer_size)
496-
out = decompress(buf, out)
497-
return ensure_ndarray(out)
495+
return decompress(buf, out)
498496

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

numcodecs/bz2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
from numcodecs.abc import Codec
7-
from numcodecs.compat import ndarray_copy, ensure_ndarray, ensure_contiguous_ndarray
7+
from numcodecs.compat import ndarray_copy, ensure_contiguous_ndarray
88

99

1010
class BZ2(Codec):
@@ -28,7 +28,7 @@ def encode(self, buf):
2828
buf = ensure_contiguous_ndarray(buf)
2929

3030
# do compression
31-
return ensure_ndarray(_bz2.compress(buf, self.level))
31+
return _bz2.compress(buf, self.level)
3232

3333
# noinspection PyMethodMayBeStatic
3434
def decode(self, buf, out=None):

numcodecs/gzip.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77
from .abc import Codec
8-
from .compat import ensure_bytes, ensure_ndarray, ensure_contiguous_ndarray, PY2
8+
from .compat import ensure_bytes, ensure_contiguous_ndarray, PY2
99

1010

1111
if PY2: # pragma: py3 no cover
@@ -42,13 +42,9 @@ def encode(self, buf):
4242
mode='wb',
4343
compresslevel=self.level) as compressor:
4444
compressor.write(buf)
45+
compressed = compressed.getvalue()
4546

46-
try:
47-
compressed = compressed.getbuffer()
48-
except AttributeError: # pragma: py3 no cover
49-
compressed = compressed.getvalue()
50-
51-
return ensure_ndarray(compressed)
47+
return compressed
5248

5349
# noinspection PyMethodMayBeStatic
5450
def decode(self, buf, out=None):
@@ -70,6 +66,6 @@ def decode(self, buf, out=None):
7066
if decompressor.read(1) != b'':
7167
raise ValueError("Unable to fit data into `out`")
7268
else:
73-
out = ensure_ndarray(decompressor.read())
69+
out = decompressor.read()
7470

7571
return out

0 commit comments

Comments
 (0)