22 #ifndef _aspect_python_helper_h
23 #define _aspect_python_helper_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)
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)));
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
std::vector< index_type > data