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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20130324/e3dcd841/attachment.html