On Tue, Oct 2, 2012 at 11:43 AM, Charles R Harris wrote: On Tue, Oct 2, 2012 at 11:30 AM, Frédéric Bastien On Tue, Oct 2, 2012 at 1:18 PM, Charles R Harris
On Tue, Oct 2, 2012 at 9:45 AM, Frédéric Bastien wrote: We implement our own subtensor(x[...], where ... can be index or
slice) c code due to the way Theano work. I can probably change the logic, but if you plan to revert this
interface changes, I prefer to wait for this change we someone else is
doing other changes that would conflict. Also, I did a Theano release
candidate and I really would like the final version to work with the
next release of NumPy. Well, you don't *have* to define NPY_NO_DEPRECATED_API. If you don't
you can
access the array as before using the macros even for future versions of
numpy. The only way that could cause a problems is if the array
structure is
rearranged and I don't think that will happen anytime soon. On that
account
there has not been any discussion of reverting the changes. However, I'd
like f2py generated modules to use the new functions at some point and
in
order to do that numpy needs to supply some extra functionality, I'm
just
not sure of the best way to do it at the moment. If I had a good idea of
what you want to do it would help in deciding what numpy should provide. I do not define NPY_NO_DEPRECATED_API, so I get g++ warning about
that. That is the problem I have. What I do is close to that: alloc a new ndarray that point to the start of the ndarray I want to
view with the right number of output dimensions. Compute the new dimensions/strides and data ptr. Then set the data ptr
to what I computed. Then set the base ptr. I can reverse this and create the ndarray only at the end, but as this
change break existing code here, it can break more code. That is why I
wrote to the list. doing "PyArray_BASE(xview) = ptr" work when I don't define
NPY_NO_DEPRECATED_API, but do not work when I define
NPY_NO_DEPRECATED_API. I would have expected the same for
PyArray_BYTES/DATA. Do this explain clearly the problem I saw? Yes, thanks. I see in ndarraytypes.h #define PyArray_DATA(obj) ((void *)(((PyArrayObject_fields *)(obj))->data)) I wonder if the cast to void* is causing a problem? Could you try char*
instead? Oops, the problem is that you need a pointer to the slot, not the pointer
in the slot. That is, you need a different macro/function.
Chuck