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