##// END OF EJS Templates
don't special case for py3k+numpy...
MinRK -
Show More
@@ -16,6 +16,8 Authors:
16 16 # Imports
17 17 #-------------------------------------------------------------------------------
18 18
19 import sys
20
19 21 from unittest import TestCase
20 22
21 23 from IPython.testing.decorators import parametric
@@ -23,6 +25,8 from IPython.utils import newserialized as ns
23 25 from IPython.utils.pickleutil import can, uncan, CannedObject, CannedFunction
24 26 from IPython.parallel.tests.clienttest import skip_without
25 27
28 if sys.version_info[0] >= 3:
29 buffer = memoryview
26 30
27 31 class CanningTestCase(TestCase):
28 32 def test_canning(self):
@@ -88,10 +92,10 class CanningTestCase(TestCase):
88 92 self.assertEquals(md['shape'], a.shape)
89 93 self.assertEquals(md['dtype'], a.dtype.str)
90 94 buff = ser1.getData()
91 self.assertEquals(buff, numpy.getbuffer(a))
95 self.assertEquals(buff, buffer(a))
92 96 s = ns.Serialized(buff, td, md)
93 97 final = ns.unserialize(s)
94 self.assertEquals(numpy.getbuffer(a), numpy.getbuffer(final))
98 self.assertEquals(buffer(a), buffer(final))
95 99 self.assertTrue((a==final).all())
96 100 self.assertEquals(a.dtype.str, final.dtype.str)
97 101 self.assertEquals(a.shape, final.shape)
@@ -35,6 +35,8 if sys.version_info[0] >= 3:
35 35 py3k = True
36 36 else:
37 37 py3k = False
38 if sys.version_info[:2] <= (2,6):
39 memoryview = buffer
38 40
39 41 #-----------------------------------------------------------------------------
40 42 # Classes and functions
@@ -101,10 +103,7 class SerializeIt(object):
101 103 self.data = None
102 104 self.obj = unSerialized.getObject()
103 105 if numpy is not None and isinstance(self.obj, numpy.ndarray):
104 if py3k or len(self.obj.shape) == 0: # length 0 arrays are just pickled
105 # FIXME:
106 # also use pickle for numpy arrays on py3k, since
107 # pyzmq doesn't rebuild from memoryviews properly
106 if len(self.obj.shape) == 0: # length 0 arrays are just pickled
108 107 self.typeDescriptor = 'pickle'
109 108 self.metadata = {}
110 109 else:
@@ -125,7 +124,7 class SerializeIt(object):
125 124
126 125 def _generateData(self):
127 126 if self.typeDescriptor == 'ndarray':
128 self.data = numpy.getbuffer(self.obj)
127 self.data = buffer(self.obj)
129 128 elif self.typeDescriptor in ('bytes', 'buffer'):
130 129 self.data = self.obj
131 130 elif self.typeDescriptor == 'pickle':
@@ -158,11 +157,10 class UnSerializeIt(UnSerialized):
158 157 typeDescriptor = self.serialized.getTypeDescriptor()
159 158 if numpy is not None and typeDescriptor == 'ndarray':
160 159 buf = self.serialized.getData()
161 if isinstance(buf, (bytes, buffer)):
160 if isinstance(buf, (bytes, buffer, memoryview)):
162 161 result = numpy.frombuffer(buf, dtype = self.serialized.metadata['dtype'])
163 162 else:
164 # memoryview
165 result = numpy.array(buf, dtype = self.serialized.metadata['dtype'])
163 raise TypeError("Expected bytes or buffer/memoryview, but got %r"%type(buf))
166 164 result.shape = self.serialized.metadata['shape']
167 165 elif typeDescriptor == 'pickle':
168 166 result = pickle.loads(self.serialized.getData())
General Comments 0
You need to be logged in to leave comments. Login now