Hello together,
we embedded Python 3 in a C++ environment. In this application I created a new class, that is a subclass from numpy array. Until now (numpy 1.6 or numpy 1.7 without the deprecation define (NPY_NO_DEPRECATED_API) the typedef for my class describing the object was something like
typedef struct { PyArrayObject numpyArray; int myMember1; int myMember2; ... } PySubclassObject
This always worked for me and a call to PyArray_NDIM(obj) returned the number of dimensions, where obj is of type PySubclassObject*.
If I am now using numpy 1.7 this also works if the line #define NPY_NO_DEPRECATED_API 0x00000007 is not set. However, if I removed all deprecated content, there occurrs the first runtime error when creating an instance of PySubclassObject.
This is due to the fact, that PyArrayObject now only is a tiny typedef of the following form
typedef struct tagPyArrayObject { PyObject_HEAD } PyArrayObject;
Previously this has been something like
typedef struct tagPyArrayObject { PyObject_HEAD char *data; int nd; npy_intp *dimensions; ... } PyArrayObject;
Usually, when creating only one np.array, there is extra space allocated depending on the size of PyArrayObject_fields. However, in my subclass I don't know how to add that extra space between the members numpyArray and myMember1. Finally, when calling PyArray_NDIM(obj) like above, the obj-pointer is casted in the macro to PyArrayObject_fields*. This yields an access conflict with myMember1, myMember2... and the members of PyArrayObject_fields.
I hope this description was clear enough to understand my problem. Has anybody an idea what I need to change such that the subclassing also works for the new numpy structure?
Thanks for any answer.
Cheers Marc