22 #ifndef _aspect_python_helper_h 23 #define _aspect_python_helper_h 26 #include <deal.II/base/array_view.h> 29 #ifdef ASPECT_WITH_PYTHON 34 #ifdef HAVE_SYS_TIME_H 35 # undef HAVE_SYS_TIME_H 37 #define PY_SSIZE_T_CLEAN 42 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION 47 #ifndef PY_ARRAY_UNIQUE_SYMBOL 48 # define PY_ARRAY_UNIQUE_SYMBOL ASPECT_ARRAY_API 58 #ifndef ASPECT_NUMPY_DEFINE_API 59 # define NO_IMPORT_ARRAY 62 #include <numpy/arrayobject.h> 66 #ifdef ASPECT_NUMPY_DEFINE_API 67 # undef ASPECT_NUMPY_DEFINE_API 69 #ifdef NO_IMPORT_ARRAY 70 # undef NO_IMPORT_ARRAY 75 namespace PythonHelper
86 std::unique_ptr<PyObject, void(*)(PyObject *)> vector_to_numpy_object(
const std::vector<double> &vec)
88 const npy_intp size =
static_cast<npy_intp
>(vec.size());
90 auto deleter = [](PyObject *obj)
95 return std::unique_ptr<PyObject, void(*)(PyObject *)>(PyArray_SimpleNew(1, &size, NPY_DOUBLE), deleter);
96 double *data =
const_cast<double *
>(vec.data());
97 return std::unique_ptr<PyObject, void(*)(PyObject *)>(PyArray_SimpleNewFromData(1, &size, NPY_DOUBLE, data), deleter);
106 inline ::ArrayView<double> numpy_to_array_view(PyObject *obj)
108 AssertThrow(PyArray_Check(obj), ::ExcMessage(
"Expected a numpy array"));
109 PyArrayObject *arr =
reinterpret_cast<PyArrayObject *
>(obj);
110 return ::ArrayView<double>(
static_cast<double *
>(PyArray_DATA(arr)),
111 static_cast<size_t>(PyArray_SIZE(arr)));