Hi,

The C++ module here is a class that's used by an OpenGL window, to extract data from numpy arrays and basically draw molecules whose coordinates are stored in numpy arrays.

The C++ module is accessed from Python using wrappers generated by swig. Our application may contain many active OpenGL windows, where each one of them contains an instance of the swig wrapped C++ module. So the question is then:

* Should the constructor of each instance of the C++ class call import_array()? * Should import_array() be called every time a method in the C++ class handles a numpy structure? * Should import_array() only be called one time, namely when the main application is started?

Best regards,

Mads

On 14/02/2012 10:09, Travis Oliphant wrote:
Technically, when you write an extension module you really should use import_array(); in the init method of the extensions module. This ensures that the C-API is loaded so that the API -table is available if your C++ code uses the C-API at all.

In this case you are just using some #defines that access the NumPy array structure, so it works without the import_array(). However, this could change in future releases (i.e. PyArray_DIMS and PyArray_DATA could become functions that are looked up in an API-table that must be loaded by import_array() ).

Best regards,

-Travis







On Feb 14, 2012, at 3:03 AM, Mads Ipsen wrote:

Hi,

I have C++ module (OpenGL) that extracts data from numpy arrays. The interface is pure read-only: It never returns any Python objects but only extracts data from numpy arrays. Eg:

#include "numpy/arrayobject.h"

void PrimitiveManager::deleteAtoms(PyObject * numpy_indices)
{
    // Extract number of indices
    int const n = static_cast<int>(PyArray_DIMS(numpy_indices)[0]);
    long * const indices = (long *) PyArray_DATA(numpy_indices);

    // Delete atoms in buffer
    for (int i = 0; i < n; ++i)
    {
        // Do stuff
    }
}

Now, when I compile the code with g++, I get the following warning:

numpy/core/include/numpy/__multiarray_api.h:1532: warning: ‘int _import_array()’ defined but not used

Do I need to call '_import_array()' somewhere? Am I doing something potentially nasty?

Best regards,

Mads





--
+-----------------------------------------------------+
| Mads Ipsen                                          |
+----------------------+------------------------------+
| Gåsebæksvej 7, 4. tv |                              |
| DK-2500 Valby        | phone:          +45-29716388 |
| Denmark              | email:mads.ip...@gmail.com  |
+----------------------+------------------------------+

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org <mailto:NumPy-Discussion@scipy.org>
http://mail.scipy.org/mailman/listinfo/numpy-discussion


_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


--
+-----------------------------------------------------+
| Mads Ipsen                                          |
+----------------------+------------------------------+
| Gåsebæksvej 7, 4. tv |                              |
| DK-2500 Valby        | phone:          +45-29716388 |
| Denmark              | email:  mads.ip...@gmail.com |
+----------------------+------------------------------+


_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to