[Numpy-discussion] Numpy extension writing problems

Jeremy Sanders jeremy at jeremysanders.net
Thu Sep 24 04:50:22 EDT 2009


Hi - I've never written a Python extension before, so I apologise in advance 
for my lack of knowledge. I'm trying to interpret a variable length tuple of 
variable length numpy arrays, convert then to C double arrays and pass them 
to a C++ function. I'm using SIP (as I also need to deal with Qt).

Here is my rather poor code(I realise that variable length C arrays on the 
stack are a gcc extension). a0 is the PyObject* for the tuple. It core dumps 
on PyArray_AsCArray.

%MethodCode
        const Py_ssize_t numitems = PyTuple_Size(a0);
        double* data[numitems];
        int sizes[numitems];
        PyObject* objects[numitems];
        int status = 0;
        PyArray_Descr *descr = PyArray_DescrFromType(PyArray_DOUBLE);

        for(Py_ssize_t i = 0; i != numitems; i++)
         data[i] = NULL;

        if( ! PyTuple_Check(a0) )
         goto exit;

        for(Py_ssize_t i = 0; i != numitems; i++)
        {
                objects[i] = PyTuple_GetItem(a0, i);

                npy_intp size;
                int ret = PyArray_AsCArray(&objects[i], (void*)(&data[i]),
                 &size, 1, descr);

                if(ret < 0)
                {
                  status = 1;
                  goto exit;
                }
                sizes[i] = size;
        }

        // this is the actual function to call
        TestKlass::myfunc(data, sizes, numitems);

exit:
        for(Py_ssize_t i = 0; i != numitems; i++)
        {
          if( data[i] != NULL )
          {
            PyArray_Free(objects[i], data[i]);
          }
        }

        if(status != 0)
        {
                PyErr_SetString(PyExc_RuntimeError, "conversion error");
                sipIsErr = 1;
        }
%End

Can someone give me a hint on where I'm going wrong? Can't I pass 
PyTuple_GetItem objects to PyArray_AsCArray. Is there a numpy built in 
routine which makes this easier?

Thanks

Jeremy





More information about the NumPy-Discussion mailing list