[Numpy-discussion] Array interface updated to Version 3 (original) (raw)

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/arrayinterface.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