16 #ifndef _aspect_python_helper_h 17 #define _aspect_python_helper_h 23 #ifdef ASPECT_WITH_PYTHON 28 #ifdef HAVE_SYS_TIME_H 29 # undef HAVE_SYS_TIME_H 31 #define PY_SSIZE_T_CLEAN 36 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION 41 #ifndef PY_ARRAY_UNIQUE_SYMBOL 42 # define PY_ARRAY_UNIQUE_SYMBOL ASPECT_ARRAY_API 52 #ifndef ASPECT_NUMPY_DEFINE_API 53 # define NO_IMPORT_ARRAY 56 #include <numpy/arrayobject.h> 60 #ifdef ASPECT_NUMPY_DEFINE_API 61 # undef ASPECT_NUMPY_DEFINE_API 63 #ifdef NO_IMPORT_ARRAY 64 # undef NO_IMPORT_ARRAY 71 #ifdef ASPECT_WITH_PYTHON 72 namespace PythonHelper
83 std::unique_ptr<PyObject, void(*)(PyObject *)> vector_to_numpy_object(
const std::vector<double> &vec)
85 const npy_intp
size =
static_cast<npy_intp
>(vec.size());
87 auto deleter = [](PyObject *obj)
92 return std::unique_ptr<PyObject, void(*)(PyObject *)>(PyArray_SimpleNew(1, &size, NPY_DOUBLE), deleter);
93 double *
data =
const_cast<double *
>(vec.data());
94 return std::unique_ptr<PyObject, void(*)(PyObject *)>(PyArray_SimpleNewFromData(1, &size, NPY_DOUBLE, data), deleter);
103 inline ::ArrayView<double> numpy_to_array_view(PyObject *obj)
106 PyArrayObject *arr =
reinterpret_cast<PyArrayObject *
>(obj);
107 return ::ArrayView<double>(
static_cast<double *
>(PyArray_DATA(arr)),
108 static_cast<size_t>(PyArray_SIZE(arr)));
116 PyObject *call_python_function(PyObject *pModule,
const char *func_name, PyObject *pArgs =
nullptr)
118 PyObject *pFunc = PyObject_GetAttrString(pModule, func_name);
119 if (!pFunc || !PyCallable_Check(pFunc))
122 PyObject *pValue = PyObject_CallObject(pFunc, pArgs);
125 if (pValue ==
nullptr)
127 if (PyErr_Occurred())
std::vector< index_type > data
#define AssertThrow(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)