[SciPy-dev] PyArray_FromDims and friends
Zachary Pincus
zachary.pincus@yale....
Fri Aug 15 12:26:40 CDT 2008
>
> OK, then the patch in:
> http://scipy.org/scipy/scipy/ticket/723
> should do it for scipy.interpolate. It includes the proper casting-to-
> (*npy_intp) for 64-bit platforms.
>
> No, no, you can't just cast the pointer to a different type, it
> needs to point to npy_intp instead of int to start with, i.e., n has
> to be an array of npy_intp.
Thanks for looking that over. This is of course what happens when I
try to deal with C too late at night.
For cases where the dimension was 1, I had originally had:
[whatever] = (PyArrayObject
*)PyArray_SimpleNew(1,&(npy_intp)n,PyArray_[whatever]);
But I got compiler warnings to the tune of "The argument to & is not
strictly an lvalue. This will be a hard error in the future." Which
makes sense, (npy_intp)n isn't a proper lvalue... So I changed it to:
[whatever] = (PyArrayObject *)PyArray_SimpleNew(1,
(npy_intp*)&n,PyArray_[whatever]);
which, as you point out, is pretty daft.
Is there a correct, portable, and warning-free way to do this in one
line? I'm guessing not. Anyhow, I'll fix the patch with a multi-line
solution:
npy_int intp_n;
...
intp_n = (npy_intp) n;
[whatever] = (PyArrayObject
*)PyArray_SimpleNew(1,&intp_n,PyArray_[whatever]);
Sorry for the noise, and thanks Chuck for the catch.
Zach
More information about the Scipy-dev
mailing list