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 77 #ifdef ASPECT_WITH_PYTHON 78 namespace PythonHelper
89 std::unique_ptr<PyObject, void(*)(PyObject *)> vector_to_numpy_object(
const std::vector<double> &vec)
91 const npy_intp size =
static_cast<npy_intp
>(vec.size());
93 auto deleter = [](PyObject *obj)
98 return std::unique_ptr<PyObject, void(*)(PyObject *)>(PyArray_SimpleNew(1, &size, NPY_DOUBLE), deleter);
99 double *data =
const_cast<double *
>(vec.data());
100 return std::unique_ptr<PyObject, void(*)(PyObject *)>(PyArray_SimpleNewFromData(1, &size, NPY_DOUBLE, data), deleter);
109 inline ::ArrayView<double> numpy_to_array_view(PyObject *obj)
111 AssertThrow(PyArray_Check(obj), ::ExcMessage(
"Expected a numpy array"));
112 PyArrayObject *arr =
reinterpret_cast<PyArrayObject *
>(obj);
113 return ::ArrayView<double>(
static_cast<double *
>(PyArray_DATA(arr)),
114 static_cast<size_t>(PyArray_SIZE(arr)));