Boost logo

Boost :

From: John Barnard (barnard_at_[hidden])
Date: 2001-01-04 23:07:11

I'm trying to add a method to a wrapped valarray<double> class
(DVArray) that creates a Python NumPy array that shares the valarray
instance's data (allowing me to easily perform numerical operations on
the valarray data in Python). I've written a function, given below,
that does most of the job, but it doesn't increment the reference
count of the wrapped DVArray instance.

  PyObject* to_array(DVArray& self) {
    PyArrayObject *arr;
    int n;
    n = self.size();
    arr = (PyArrayObject *) \
      PyArray_FromDimsAndData(1, &n, PyArray_DOUBLE, (char
    if (arr == NULL) return NULL;
    arr->flags |= OWN_DATA;
    return (PyObject *) arr;

to_array gets added as a method of the wrapped class as follows (in
the module init function):

      DVArrayPC(grid, "DVArray");
      DVArrayPC.def(&grid_python::DVArray::size, "__len__");
      DVArrayPC.def(grid_python::to_array, "toarray");

How do I access the reference count of the wrapped DVArray instance? I
would also like to gain access to the PyObject* of the wrapped
instance so I can make it the base for the NumPy array instance (and
subsequently have the reference count of the wrapped DVArray decrease
when the NumPy array is destroyed).



John Barnard
Assistant Professor
Department of Statistics
Harvard University
Phone: (617) 495-1603
Fax:   (617) 496-8057
Email: barnard_at_[hidden]

Boost list run by bdawes at, gregod at, cpdaniel at, john at