Source code for numcodecs.pickles

# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, division


import numpy as np


from .abc import Codec
from .compat import PY2, ensure_contiguous_ndarray


if PY2:  # pragma: py3 no cover
    import cPickle as pickle
    from cStringIO import StringIO
else:  # pragma: py2 no cover
    import pickle


[docs]class Pickle(Codec): """Codec to encode data as as pickled bytes. Useful for encoding an array of Python string objects. Parameters ---------- protocol : int, defaults to pickle.HIGHEST_PROTOCOL The protocol used to pickle data. Examples -------- >>> import numcodecs as codecs >>> import numpy as np >>> x = np.array(['foo', 'bar', 'baz'], dtype='object') >>> f = codecs.Pickle() >>> f.decode(f.encode(x)) array(['foo', 'bar', 'baz'], dtype=object) See Also -------- numcodecs.msgpacks.MsgPack """ codec_id = 'pickle' def __init__(self, protocol=pickle.HIGHEST_PROTOCOL): self.protocol = protocol
[docs] def encode(self, buf): return pickle.dumps(buf, protocol=self.protocol)
[docs] def decode(self, buf, out=None): buf = ensure_contiguous_ndarray(buf) if PY2: # pragma: py3 no cover dec = pickle.load(StringIO(buf)) else: # pragma: py2 no cover dec = pickle.loads(buf) if out is not None: np.copyto(out, dec) return out else: return dec
[docs] def get_config(self): return dict(id=self.codec_id, protocol=self.protocol)
def __repr__(self): return 'Pickle(protocol=%s)' % self.protocol