Hello, I am using swig to wrap some numerical code. I have managed to make swig understand and convert between numarrays and C arrays. However if I use NA_IoArray to make the convertion and pass an integer array when a double array is expected the changes are not copied back to the original array. Let me give a "minimal" example. When I want to wrap the following function: void inc(int len, double *v) { int i; for (i = 0; i < len; i++) v[i]++; } Swig generates the following code, that looks right to me. static PyObject *_wrap_inc(PyObject *self, PyObject *args) { PyObject *resultobj; int arg1 ; double *arg2 = (double *) 0 ; PyArrayObject *NAimg2 = NULL ; PyObject * obj1 = 0 ; if(!PyArg_ParseTuple(args,(char *)"iO:inc",&arg1,&obj1)) goto fail; { PyArrayObject *NAimg2 = NA_IoArray(obj1, tFloat64, NUM_C_ARRAY); if (!NAimg2) { printf("**** no (double) numarray *****\n"); SWIG_exception(SWIG_RuntimeError, "No double Array Found"); return 0; } arg2 = (double *) NA_OFFSETDATA(NAimg2); } inc(arg1,arg2); Py_INCREF(Py_None); resultobj = Py_None; { Py_XDECREF(NAimg2); } return resultobj; fail: { Py_XDECREF(NAimg2); } return NULL; } However if I run the following python code:
import test_na_ioarray from numarray import * v = zeros((5,)) test_na_ioarray(5, v) print v [0 0 0 0 0]
Shouldn't the resultant array be full of ones (when casting the Float64 array of ones to int)? Thanks, Paulo Obs: The code runs fine if the original vector is already a Float64 array.