On Wed, Sep 24, 2008 at 9:25 PM, <[EMAIL PROTECTED]> 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
_______________________________________________ Numpy-discussion mailing list [email protected] http://projects.scipy.org/mailman/listinfo/numpy-discussion
