[Numpy-svn] r4940 - trunk/numpy/oldnumeric

numpy-svn at scipy.org numpy-svn at scipy.org
Tue Mar 25 00:28:52 EDT 2008


Author: oliphant
Date: 2008-03-24 23:28:49 -0500 (Mon, 24 Mar 2008)
New Revision: 4940

Modified:
   trunk/numpy/oldnumeric/compat.py
   trunk/numpy/oldnumeric/misc.py
Log:
Improve support for old pickles.

Modified: trunk/numpy/oldnumeric/compat.py
===================================================================
--- trunk/numpy/oldnumeric/compat.py	2008-03-25 01:24:36 UTC (rev 4939)
+++ trunk/numpy/oldnumeric/compat.py	2008-03-25 04:28:49 UTC (rev 4940)
@@ -6,7 +6,8 @@
            '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 @@
     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"

Modified: trunk/numpy/oldnumeric/misc.py
===================================================================
--- trunk/numpy/oldnumeric/misc.py	2008-03-25 01:24:36 UTC (rev 4939)
+++ trunk/numpy/oldnumeric/misc.py	2008-03-25 04:28:49 UTC (rev 4940)
@@ -1,15 +1,15 @@
 # Functions that already have the correct syntax or miscellaneous functions
 
 
-__all__ = ['load', 'sort', 'copy_reg', 'clip', 'Unpickler', 'rank',
+__all__ = ['sort', 'copy_reg', 'clip', 'rank',
            'sign', 'shape', 'types', 'allclose', 'size',
            'choose', 'swapaxes', 'array_str',
            'pi', 'math', 'concatenate', 'putmask', 'put',
            'around', 'vdot', 'transpose', 'array2string', 'diagonal',
            'searchsorted', 'copy', 'resize',
            'array_repr', 'e', 'StringIO', 'pickle',
-           'argsort', 'convolve', 'loads', 'cross_correlate',
-           'Pickler', 'dot', 'outerproduct', 'innerproduct', 'insert']
+           'argsort', 'convolve', 'cross_correlate',
+           'dot', 'outerproduct', 'innerproduct', 'insert']
 
 import types
 import StringIO
@@ -17,26 +17,13 @@
 import math
 import copy
 import copy_reg
-from pickle import load, loads
 
 from numpy import sort, clip, rank, sign, shape, putmask, allclose, size,\
      choose, swapaxes, array_str, array_repr, e, pi, put, \
      resize, around, concatenate, vdot, transpose, \
      diagonal, searchsorted, argsort, convolve, dot, \
-     outer as outerproduct, inner as innerproduct, correlate as cross_correlate, \
+     outer as outerproduct, inner as innerproduct, \
+     correlate as cross_correlate, \
      place as insert
 
 from array_printer import array2string
-
-
-class Unpickler(pickle.Unpickler):
-    def __init__(self, *args, **kwds):
-        raise NotImplementedError
-    def load_array(self):
-        raise NotImplementedError
-
-class Pickler(pickle.Pickler):
-    def __init__(self, *args, **kwds):
-        raise NotImplementedError
-    def save_array(self, object):
-        raise NotImplementedError




More information about the Numpy-svn mailing list