[Numpy-discussion] PyArray_SETITEM macro ends in semicolon

Charles R Harris charlesr.harris at gmail.com
Thu Sep 25 00:38:45 EDT 2008


On Wed, Sep 24, 2008 at 9:25 PM, <jason-sage at creativetrax.com> wrote:

> 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),
> __pyx_v_value));
>
> However, after preprocessing, because of the semicolon at the end of the
> SETITEM macro, we get:
>

Hmm, not good. IMHO, macros should be ended with semicolons *when used*, not
in themselves.


>
>
> PyInt_FromLong(((PyArrayObject
> *)(__pyx_v_self->_matrix_numpy))->descr->f->setitem((PyObject
> *)(__pyx_v_value), (char *)(((void *)((((PyArrayObject
> *)(__pyx_v_self->_matrix_numpy))->data) + (__pyx_v_i)*(((PyArrayObject
> *)(__pyx_v_self->_matrix_numpy))->strides)[0] +
> (__pyx_v_j)*(((PyArrayObject
> *)(__pyx_v_self->_matrix_numpy))->strides)[1]))), (PyArrayObject
> *)(__pyx_v_self->_matrix_numpy)););
>
> 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?
>

We should do this if possible. Open a ticket.


>
> 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
> an element?
>

Don't know.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20080924/9d206a89/attachment.html>


More information about the NumPy-Discussion mailing list