12 #include <hipipe/build_config.hpp>
13 #ifdef HIPIPE_BUILD_PYTHON
15 #include <hipipe/core/python/range.hpp>
16 #include <hipipe/core/python/utility/vector_converter.hpp>
18 #include <boost/python.hpp>
24 namespace hipipe::python::utility {
36 struct vector_to_python_impl {
37 static PyObject* impl(T val)
39 boost::python::object obj{std::move(val)};
46 struct vector_to_python_impl<std::vector<T>> {
47 static PyObject* impl(std::vector<T> vec)
49 if (std::is_arithmetic<T>{}) {
50 return utility::to_ndarray(std::move(vec));
53 PyObject* list{PyList_New(vec.size())};
54 if (!list)
throw std::runtime_error{
"Unable to create Python list."};
55 for (std::size_t i = 0; i < vec.size(); ++i) {
56 PyList_SET_ITEM(list, i, vector_to_python_impl<T>::impl(std::move(vec[i])));
70 boost::python::object to_python(std::vector<T> v)
72 namespace py = boost::python;
73 py::handle<> py_obj_handle{detail::vector_to_python_impl<std::vector<T>>::impl(std::move(v))};
74 return py::object{py_obj_handle};
79 #endif // HIPIPE_BUILD_PYTHON