[pypy-commit] pypy memoryview-attributes: move stride, format, ndim, itemsize, shape down to Buffer, override in ArrayBuffer

mattip pypy.commits at gmail.com
Sun Aug 14 16:12:16 EDT 2016


Author: Matti Picus <matti.picus at gmail.com>
Branch: memoryview-attributes
Changeset: r86189:0fcf7070dd43
Date: 2016-08-14 22:07 +0300
http://bitbucket.org/pypy/pypy/changeset/0fcf7070dd43/

Log:	move stride, format, ndim, itemsize, shape down to Buffer, override
	in ArrayBuffer

diff --git a/pypy/module/micronumpy/concrete.py b/pypy/module/micronumpy/concrete.py
--- a/pypy/module/micronumpy/concrete.py
+++ b/pypy/module/micronumpy/concrete.py
@@ -704,3 +704,20 @@
     def get_raw_address(self):
         from rpython.rtyper.lltypesystem import rffi
         return rffi.ptradd(self.impl.storage, self.impl.start)
+
+    def getformat(self):
+        return self.impl.dtype.char
+
+    def getitemsize(self):
+        return self.impl.dtype.elsize
+
+    def getndim(self):
+        return len(self.impl.shape)
+
+    def getshape(self):
+        return self.impl.shape
+
+    def getstrides(self):
+        return self.impl.strides
+
+
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
@@ -100,22 +100,22 @@
         return space.wrap(self.buf.getlength())
 
     def w_get_format(self, space):
-        return space.wrap("B")
+        return space.wrap(self.buf.getformat())
 
     def w_get_itemsize(self, space):
-        return space.wrap(1)
+        return space.wrap(self.buf.getitemsize())
 
     def w_get_ndim(self, space):
-        return space.wrap(1)
+        return space.wrap(self.buf.getndim())
 
     def w_is_readonly(self, space):
         return space.wrap(self.buf.readonly)
 
     def w_get_shape(self, space):
-        return space.newtuple([space.wrap(self.getlength())])
+        return space.newtuple([space.wrap(x) for x in self.buf.getshape()])
 
     def w_get_strides(self, space):
-        return space.newtuple([space.wrap(1)])
+        return space.newtuple([space.wrap(x) for x in self.buf.getstrides()])
 
     def w_get_suboffsets(self, space):
         # I've never seen anyone filling this field
diff --git a/rpython/rlib/buffer.py b/rpython/rlib/buffer.py
--- a/rpython/rlib/buffer.py
+++ b/rpython/rlib/buffer.py
@@ -59,6 +59,20 @@
     def get_raw_address(self):
         raise ValueError("no raw buffer")
 
+    def getformat(self):
+        return 'B'
+
+    def getitemsize(self):
+        return 1
+
+    def getndim(self):
+        return 1
+
+    def getshape(self):
+        return [self.getlength()]
+
+    def getstrides(self):
+        return [1]
 
 class StringBuffer(Buffer):
     __slots__ = ['value']


More information about the pypy-commit mailing list