diff options
Diffstat (limited to 'numpy/oldnumeric/compat.py')
-rw-r--r-- | numpy/oldnumeric/compat.py | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/numpy/oldnumeric/compat.py b/numpy/oldnumeric/compat.py index 369fa5000..cd8247be8 100644 --- a/numpy/oldnumeric/compat.py +++ b/numpy/oldnumeric/compat.py @@ -6,7 +6,8 @@ __all__ = ['NewAxis', 'array_constructor', 'pickle_array', 'DumpArray', 'LoadArray', 'multiarray', # from cPickle - 'dump', 'dumps' + 'dump', 'dumps', 'load', 'loads', + 'Unpickler', 'Pickler' ] import numpy.core.multiarray as multiarray @@ -64,3 +65,45 @@ def pickle_array(a): else: return (array_constructor, (a.shape, a.dtype.char, a.tostring(), LittleEndian)) + +def loads(astr): + import cPickle + arr = cPickle.loads(astr.replace('Numeric', 'numpy.oldnumeric')) + return arr + +def load(fp): + return loads(fp.read()) + +def _LoadArray(fp): + import typeconv + ln = fp.readline().split() + if ln[0][0] == 'A': ln[0] = ln[0][1:] + typecode = ln[0][0] + endian = ln[0][1] + itemsize = int(ln[0][2:]) + shape = [int(x) for x in ln[1:]) + sz = itemsize + for val in shape: + sz *= val + dstr = fp.read(sz) + m = mu.fromstring(dstr, typeconv.convtypecode(typecode)) + m.shape = shape + + if (LittleEndian and endian == 'B') or (not LittleEndian and endian == 'L'): + return m.byteswap(True) + else: + return m + +import pickle, copy +class Unpickler(pickle.Unpickler): + def load_array(self): + self.stack.append(_LoadArray(self)) + + dispatch = copy.copy(pickle.Unpickler.dispatch) + dispatch['A'] = load_array + +class Pickler(pickle.Pickler): + def __init__(self, *args, **kwds): + raise NotImplementedError, "Don't pickle new arrays with this" + def save_array(self, object): + raise NotImplementedError, "Don't pickle new arrays with this" |