From b4415d5cf244d4d7fed2a028ccde294b6701612a Mon Sep 17 00:00:00 2001 From: Berk Onat <b.onat@warwick.ac.uk> Date: Tue, 12 Dec 2017 17:42:56 +0000 Subject: [PATCH] Fixed numpy initialization bug at C functions. --- pymolfile/molfile/pymolfile.cxx | 21 ++++++++++++++++----- pymolfile/molfile/pymolfile.h | 6 ++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/pymolfile/molfile/pymolfile.cxx b/pymolfile/molfile/pymolfile.cxx index d5ba6cb..e8d4c85 100644 --- a/pymolfile/molfile/pymolfile.cxx +++ b/pymolfile/molfile/pymolfile.cxx @@ -38,7 +38,12 @@ molfile_plugin_t** plugin_list; #define PyInt_AsLong PyLong_AsLong #define PyString_FromString PyBytes_FromString #define PyInt_FromLong PyLong_FromLong - +int initNumpyArray(void){ + if(PyArray_API == NULL) + { + import_array(); + } +} void del_molfile_plugin_list(PyObject* molcapsule) { plugin_list = (molfile_plugin_t**) PyMolfileCapsule_AsVoidPtr(molcapsule); @@ -52,6 +57,12 @@ void del_molfile_file_handle(PyObject* molcapsule) Py_XDECREF(molcapsule); } #else +void initNumpyArray(void){ + if(PyArray_API == NULL) + { + import_array(); + } +} void del_molfile_plugin_list(void* molcapsule) { plugin_list = (molfile_plugin_t**) PyMolfileCapsule_AsVoidPtr((PyObject*)molcapsule); @@ -201,7 +212,7 @@ PyObject * molfile_plugin_info(PyObject* molcapsule, int plugin_no) { PyObject* read_fill_structure(PyObject* molpack, PyObject* prototype) { //Py_Initialize(); - import_array(); + initNumpyArray(); int options = 0; molfile_plugin_t* plugin; void* file_handle; @@ -264,7 +275,7 @@ PyObject* read_fill_structure(PyObject* molpack, PyObject* prototype) PyObject* read_fill_bonds(PyObject* molpack) { - import_array(); + initNumpyArray(); int options = 0; molfile_plugin_t* plugin; void* file_handle; @@ -359,7 +370,7 @@ PyObject* read_fill_bonds(PyObject* molpack) PyObject* read_fill_angles(PyObject* molpack) { - import_array(); + initNumpyArray(); int options = 0; molfile_plugin_t* plugin; void* file_handle; @@ -558,7 +569,7 @@ PyObject* read_fill_angles(PyObject* molpack) PyObject* read_fill_next_timestep(PyObject* molpack) { - import_array(); + initNumpyArray(); molfile_plugin_t* plugin; void* file_handle; int numatoms, status; diff --git a/pymolfile/molfile/pymolfile.h b/pymolfile/molfile/pymolfile.h index 97019a9..b0c31fb 100644 --- a/pymolfile/molfile/pymolfile.h +++ b/pymolfile/molfile/pymolfile.h @@ -22,6 +22,12 @@ extern "C" #endif +#if PY_VERSION_HEX >= 0x03000000 +#define NUMPY_IMPORT_ARRAY_RETVAL NULL +#else +#define NUMPY_IMPORT_ARRAY_RETVAL +#endif + #include "molfile_plugin.h" #include "libmolfile_plugin.h" #include "vmdplugin.h" -- GitLab