[Numpy-svn] r3561 - trunk/numpy/doc

numpy-svn at scipy.org numpy-svn at scipy.org
Wed Feb 28 00:14:34 EST 2007


Author: oliphant
Date: 2007-02-27 23:14:30 -0600 (Tue, 27 Feb 2007)
New Revision: 3561

Modified:
   trunk/numpy/doc/pep_buffer.txt
Log:
buffer pep changes.

Modified: trunk/numpy/doc/pep_buffer.txt
===================================================================
--- trunk/numpy/doc/pep_buffer.txt	2007-02-28 04:32:41 UTC (rev 3560)
+++ trunk/numpy/doc/pep_buffer.txt	2007-02-28 05:14:30 UTC (rev 3561)
@@ -131,7 +131,7 @@
       object whose view is obtained when it is no longer needed.  A -1
       is returned on error and 0 on success.
 
-    typedef char *(*formatbufferproc)(PyObject *view, int *itemsize)
+    typedef PyObject *(*formatbufferproc)(PyObject *view, int *itemsize)
 
       Get the format-string of the memory using the struct-module
       string syntax (see below for proposed additions to that syntax).
@@ -147,17 +147,30 @@
       However, very often objects already know the itemsize without
       having to compute it separately.
 
+      The returned object is a Python CObject surrounding a char *
+      pointer which will deallocate the memory for the char * when
+      the reference disappears. 
+
     typedef PyObject *(*shapebufferproc)(PyObject *view)
 
-      Return a 2-tuple of lists containing shape information: (shape,
-      strides).  The strides object can be None if the memory is
-      C-style contiguous) otherwise it provides the striding in each 
-      dimension. 
+      Return a Python CObject surrounding a pointer to the structure
 
-    All of these routines are optional for a type object (but the last
-    three make no sense unless the first one is implemented).
+      struct {
+         int ndim
+         Py_ssize_t *shape;
+         Py_ssize_t *strides;
+      }
 
+      The strides pointer can be NULL if the memory is C-style contiguous
+      otherwise it provides the striding in each dimension. 
 
+      When the returned Object is deallocated, the memory for the shape
+      and strides is freed.
+
+      All of these routines are optional for a type object (but the last
+      three make no sense unless the first one is implemented).
+
+
 New C-API calls are proposed
 
    int 
@@ -217,6 +230,15 @@
       Return the implied size of the data-format area from a struct-style
       description.
 
+   PyObject *PyObject_BufferFormat(char *format, int copy)
+      Construct a CObject to return as the format in the buffer interface
+      from a string being sure to copy if specified.
+
+   PyObject *PyObject_BufferShape(int ndim, Py_ssize_t *shape, Py_ssize_t *strides)
+      Construct a CObject to return as the shape object in the buffer interface.
+      The values are copied from the arrays pointed to by shape and strides.
+      Strides can be NULL if the memory is C-style contiguous. 
+
 Additions to the struct string-syntax
 
    The struct string-syntax is missing some characters to fully
@@ -239,6 +261,7 @@
    '&'               specific pointer (prefix before another charater) 
    'X{}'             pointer to a function (optional function 
                                              signature inside {})
+   ' '               ignored (allow readability)
 
    The struct module will be changed to understand these as well and
    return appropriate Python objects on unpacking.  Un-packing a
@@ -250,7 +273,7 @@
 
    Endian-specification ('=','>','<') is also allowed inside the
    string so that it can change if needed.  The previously-specified
-   endian string is enforce at all times.  The default endian is '='.
+   endian string is enforce until changed.  The default endian is '='.
 
    According to the struct-module, a number can preceed a character
    code to specify how many of that type there are.  The
@@ -311,7 +334,9 @@
    The proposed locking mechanism relies entirely on the objects
    implementing the buffer interface to do their own thing.  Ideally
    an object that implements the buffer interface should keep at least
-   a number indicating how many releases are extant.
+   a number indicating how many releases are extant.  If there are views
+   to a memory location, then reallocation should fail and raise
+   an error. 
 
    The handling of discontiguous memory is new and can be seen as a
    modification of the multiple-segment interface.  It is motivated by
@@ -329,6 +354,11 @@
    specified as several ways of viewing memory areas (ctypes and
    NumPy) already allow this.
 
+   Python Objects are returned for Format and Shape descriptions so 
+   that memory-management is simply handled using reference-counting. 
+
+
+
 Copyright
 
    This PEP is placed in the public domain




More information about the Numpy-svn mailing list