Author: Ronan Lamy <[email protected]>
Branch: PyBuffer
Changeset: r90842:912d9dbe8d1f
Date: 2017-03-28 14:53 +0100
http://bitbucket.org/pypy/pypy/changeset/912d9dbe8d1f/
Log: Simplify _cast_to_ND()
diff --git a/pypy/objspace/std/memoryobject.py
b/pypy/objspace/std/memoryobject.py
--- a/pypy/objspace/std/memoryobject.py
+++ b/pypy/objspace/std/memoryobject.py
@@ -546,7 +546,8 @@
"memoryview: cast must be 1D -> ND or ND -> 1D")
origfmt = self.getformat()
- mv = self._cast_to_1D(space, buf, origfmt, fmt)
+ newbuf = self._cast_to_1D(space, buf, origfmt, fmt)
+ mv = W_MemoryView(newbuf, newbuf.getformat(), newbuf.getitemsize())
if w_shape:
fview = space.fixedview(w_shape)
shape = [space.int_w(w_obj) for w_obj in fview]
@@ -604,10 +605,7 @@
if not newfmt:
raise oefmt(space.w_RuntimeError,
"memoryview: internal error")
- newbuf = BufferView1D(buf, newfmt, itemsize)
- mv = W_MemoryView(newbuf, newbuf.getformat(), newbuf.getitemsize())
- mv._init_flags()
- return mv
+ return BufferView1D(buf, newfmt, itemsize)
def get_native_fmtstr(self, fmt):
lenfmt = len(fmt)
@@ -637,33 +635,31 @@
return None
def _cast_to_ND(self, space, shape, ndim):
- self.ndim = ndim
- length = self.itemsize
- if ndim == 0:
- self.shape = []
- self.strides = []
- else:
- self.shape = shape
- for i in range(ndim):
- length *= shape[i]
- self._init_strides_from_shape()
-
+ buf = self.buf
+ length = itemsize = buf.getitemsize()
+ for i in range(ndim):
+ length *= shape[i]
if length != self.buf.getlength():
raise oefmt(space.w_TypeError,
"memoryview: product(shape) * itemsize != buffer size")
+ self.ndim = ndim
+ self.shape = shape
+ self.strides = self._strides_from_shape(shape, itemsize)
self._init_flags()
- def _init_strides_from_shape(self):
- shape = self.getshape()
- s = [0] * len(shape)
- self.strides = s
- ndim = self.getndim()
- s[ndim-1] = self.itemsize
- i = ndim-2
+ @staticmethod
+ def _strides_from_shape(shape, itemsize):
+ ndim = len(shape)
+ if ndim == 0:
+ return []
+ s = [0] * ndim
+ s[ndim - 1] = itemsize
+ i = ndim - 2
while i >= 0:
s[i] = s[i+1] * shape[i+1]
i -= 1
+ return s
def descr_hex(self, space):
from pypy.objspace.std.bytearrayobject import _array_to_hexstring
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit