[Numpy-discussion] PyArray_SETITEM macro ends in semicolon
Wed Sep 24 22:25:01 CDT 2008
I'm working on getting the Sage matrices for real/complex doubles to use
numpy as a backend. In this, I'm using the PyArray_SETITEM macro from
within Cython. However, Cython wraps the macro in a function call to
convert the output to a Python value:
__pyx_1 = PyInt_FromLong(PyArray_SETITEM(__pyx_v_self->_matrix_numpy,
PyArray_GETPTR2(__pyx_v_self->_matrix_numpy, __pyx_v_i, __pyx_v_j),
However, after preprocessing, because of the semicolon at the end of the
SETITEM macro, we get:
*)(__pyx_v_value), (char *)(((void *)((((PyArrayObject
*)(__pyx_v_self->_matrix_numpy))->data) + (__pyx_v_i)*(((PyArrayObject
Note that at the end, we have a "););". The file refuses to compile.
Presumably, since SETITEM returns a value, wrapping the return value in
a function call seems to be a reasonable thing to do. Would there be a
problem in eliminating the semicolon and instead wrapping the entire
function body in parenthesis?
I noticed that GETITEM also ended in a semicolon, though I didn't have
the same problem as above since Cython didn't automatically wrap it in a
function call (I'm not even sure if it returns something).
On a side note, is the above the best way (i.e., fastest way given an
arbitrary numpy array) to set/get
More information about the Numpy-discussion