[Numpy-discussion] Array interface updated to Version 3

Thomas Heller theller at python.net
Tue Jun 20 15:05:51 EDT 2006


Travis Oliphant schrieb:
> I just updated the array interface page to emphasize we now have version 
> 3.  NumPy still supports  objects that expose (the C-side) of version 2 
> of the array interface, though. 
> 
> The new interface is basically the same except (mostly) for asthetics:  
> The differences are listed at the bottom of
> 
> http://numeric.scipy.org/array_interface.html
> 
> There is talk of ctypes supporting the new interface which is a worthy 
> development.  Please encourage that if you can.
> 
> Please voice concerns now if you have any.

 From http://numeric.scipy.org/array_interface.html:
"""
New since June 16, 2006:
For safety-checking the return object from PyCObject_GetDesc(obj) should 
be a Python Tuple with the first object a Python string containing 
"PyArrayInterface Version 3" and whose second object is a reference to 
the object exposing the array interface (i.e. self).

Older versions of the interface used the "desc" member of the PyCObject 
itself (do not confuse this with the "descr" member of the 
PyArrayInterface structure above --- they are two separate things) to 
hold the pointer to the object exposing the interface, thus you should 
make sure the object returned is a Tuple before assuming it is in a 
sanity check.

In a sanity check it is recommended to only check for "PyArrayInterface 
Version" and not for the actual version number so that later versions 
will still be compatible.  The old sanity check for the integer 2 in the 
first field is no longer necessary (but it is necessary to place the 
number 2 in that field so that objects reading the old version of the 
interface will still understand this one).
"""

I know that you changed that because of my suggestions, but I don't 
think it should stay like this.

The idea was to have the "desc" member of the PyCObject a 'magic value'
which can be used to determine that the PyCObjects "void *cobj" pointer
really points to a PyArrayInterface structure.  I have seen PyCObject 
uses before in this way, but I cannot find them any longer.

If current implementations of the array interface use this pointer for
other things (like keeping a reference to the array object), that's 
fine, and I don't think the specification should change.  I think it is
espscially dangerous to assume that the desc pointer is a PyObject 
pointer,  Python will segfault if it is not.

I suggest that you revert this change.

Thomas





More information about the NumPy-Discussion mailing list