35 #include <boost/version.hpp>
37 #ifdef BOOST_HAS_NUMPY
39 #include <boost/python.hpp>
40 #include <boost/python/numpy.hpp>
42 namespace py = boost::python;
43 namespace np = boost::python::numpy;
47 #include <boost/python.hpp>
48 #include <boost/numpy.hpp>
50 namespace py = boost::python;
51 namespace np = boost::numpy;
55 #define SIZENAME(s) SIZE_##s
56 #define NEKPY_WRAP_ENUM(ENUMNAME,MAPNAME) \
58 py::enum_<ENUMNAME> tmp(#ENUMNAME); \
59 for (int a = 0; a < (int)SIZENAME(ENUMNAME); ++a) \
61 tmp.value(MAPNAME[a], (ENUMNAME)a); \
63 tmp.export_values(); \
65 #define NEKPY_WRAP_ENUM_STRING(ENUMNAME,MAPNAME) \
67 py::enum_<ENUMNAME> tmp(#ENUMNAME); \
68 for (int a = 0; a < (int)SIZENAME(ENUMNAME); ++a) \
70 tmp.value(MAPNAME[a].c_str(), (ENUMNAME)a); \
72 tmp.export_values(); \
74 #if PY_MAJOR_VERSION == 2
75 #define NEKPY_WRAP_ENUM_STRING_DOCS(ENUMNAME,MAPNAME,DOCSTRING) \
77 py::enum_<ENUMNAME> tmp(#ENUMNAME); \
78 for (int a = 0; a < (int)SIZENAME(ENUMNAME); ++a) \
80 tmp.value(MAPNAME[a].c_str(), (ENUMNAME)a); \
82 tmp.export_values(); \
83 PyTypeObject * pto = \
84 reinterpret_cast<PyTypeObject*>(tmp.ptr()); \
85 PyDict_SetItemString(pto->tp_dict, "__doc__", \
86 PyString_FromString(DOCSTRING)); \
89 #define NEKPY_WRAP_ENUM_STRING_DOCS(ENUMNAME,MAPNAME,DOCSTRING) \
91 py::enum_<ENUMNAME> tmp(#ENUMNAME); \
92 for (int a = 0; a < (int)SIZENAME(ENUMNAME); ++a) \
94 tmp.value(MAPNAME[a].c_str(), (ENUMNAME)a); \
96 tmp.export_values(); \
97 PyTypeObject * pto = \
98 reinterpret_cast<PyTypeObject*>(tmp.ptr()); \
99 PyDict_SetItemString(pto->tp_dict, "__doc__", \
100 PyUnicode_FromString(DOCSTRING)); \
105 #if BOOST_VERSION < 106300
106 #define NEKPY_SHPTR_FIX(SOURCE,TARGET) \
107 py::implicitly_convertible<std::shared_ptr<SOURCE>, \
108 std::shared_ptr<TARGET>>();
110 #define NEKPY_SHPTR_FIX(SOURCE,TARGET)