57 auto name = appendName<T>(
"obj_");
61 py::class_<Class> carmaWrapObj(mod,
name.data(), py::buffer_protocol());
64 const py::array_t<T, py::array::f_style |
65 py::array::forcecast> &data) {
66 int ndim =
data.ndim() + 1;
67 std::vector<long> data_dims(ndim);
68 data_dims[0] =
data.ndim();
69 copy(
data.shape(),
data.shape() +
data.ndim(), begin(data_dims) + 1);
70 return std::unique_ptr<Class>(
71 new Class(&c, data_dims.data(), (
const T *)
data.data()));
74 py::arg(
"context").none(
false), py::arg(
"h_data").none(
false));
76 carmaWrapObj.def(py::init([](
CarmaContext &c,
const Class &data) {
77 return std::unique_ptr<Class>(
new Class(&c, &data));
80 py::arg(
"context").none(
false),
81 py::arg(
"d_data").none(
false));
83 carmaWrapObj.def_buffer([](Class &frame) -> py::buffer_info {
86 const long *dims =
frame.get_dims();
87 std::vector<ssize_t> shape(dims[0]);
88 std::vector<ssize_t> strides(dims[0]);
89 ssize_t stride =
sizeof(T);
100 for (ssize_t dim(0); dim < dims[0]; ++dim) {
101 shape[dim] = dims[dim + 1];
102 strides[dim] = stride;
103 stride *= shape[dim];
106 return py::buffer_info(
frame.get_h_data(),
sizeof(T),
107 py::format_descriptor<T>::format(), dims[0], shape,
114 carmaWrapObj.def_property_readonly(
"nb_streams", &Class::get_nb_streams,
117 carmaWrapObj.def(
"add_stream", (
int (Class::*)()) & Class::add_stream,
120 carmaWrapObj.def(
"add_stream", (
int (Class::*)(
int)) & Class::add_stream,
124 carmaWrapObj.def(
"del_stream", (
int (Class::*)()) & Class::del_stream,
127 carmaWrapObj.def(
"del_stream", (
int (Class::*)(
int)) & Class::del_stream,
131 carmaWrapObj.def(
"wait_stream", &Class::wait_stream,
"TODO",
134 "swap_ptr", [](Class &obj, Class &obj2) { obj.swap_ptr(obj2.get_data()); },
138 carmaWrapObj.def(
"wait_all_streams", &Class::wait_all_streams,
142 carmaWrapObj.def_property_readonly(
144 [](Class &frame) -> py::array_t<long> {
145 long nb_dim =
frame.get_dims(0);
146 const long *c_dim =
frame.get_dims() + 1;
147 return py::array_t<long>(nb_dim, c_dim);
152 carmaWrapObj.def_property_readonly(
"nbElem", &Class::get_nb_elements,
155 carmaWrapObj.def_property_readonly(
"context", &Class::get_context,
158 carmaWrapObj.def_property_readonly(
"device", &Class::get_device,
169 py::array_t<T, py::array::f_style | py::array::forcecast> &data) {
170 c.host2device(
data.data());
173 py::arg(
"data").none(
false));
178 py::array_t<T, py::array::f_style | py::array::forcecast> &data) {
179 c.device2host(
data.mutable_data());
182 py::arg(
"data").none(
false));
187 [](Class &src, Class &dest,
long nb_elem) {
189 nb_elem = src.get_nb_elements();
191 src.copy_into(dest, nb_elem);
193 "TODO", py::arg(
"dest"),
194 py::arg(
"nb_elem") = -1);
198 [](Class &dest, Class &src,
long nb_elem) {
200 nb_elem = dest.get_nb_elements();
202 dest.copy_from(src, nb_elem);
204 "TODO", py::arg(
"data"),
205 py::arg(
"nb_elem") = -1);
207 carmaWrapObj.def(
"copy_into",
208 (
int (Class::*)(ipc::Cacao<T> *)) & Class::copy_into);
209 carmaWrapObj.def(
"copy_from",
210 (
int (Class::*)(ipc::Cacao<T> *)) & Class::copy_from);
213 carmaWrapObj.def(
"reset", &Class::reset,