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