58 auto name = appendName<T>(
"host_obj_");
61 py::class_<Class>(mod,
name.data(), py::buffer_protocol())
62 .def(py::init([](
const py::array_t<T, py::array::f_style |
63 py::array::forcecast> &data,
65 int ndim =
data.ndim() + 1;
66 std::vector<long> data_dims(ndim);
67 data_dims[0] =
data.ndim();
69 begin(data_dims) + 1);
70 return std::unique_ptr<Class>(
71 new Class(data_dims.data(), (
const T *)
data.data()));
74 py::arg(
"h_data").none(
false), py::arg(
"malloc_type")=
MA_MALLOC)
76 .def(py::init([](
const Class &data) {
77 return std::unique_ptr<Class>(
new Class(&data));
80 py::arg(
"d_data").none(
false))
82 .def_buffer([](Class &frame) -> py::buffer_info {
84 const long *dims =
frame.get_dims();
85 std::vector<ssize_t> shape(dims[0]);
86 std::vector<ssize_t> strides(dims[0]);
87 ssize_t stride =
sizeof(T);
98 for (ssize_t dim(0); dim < dims[0]; ++dim) {
99 shape[dim] = dims[dim + 1];
100 strides[dim] = stride;
101 stride *= shape[dim];
104 return py::buffer_info(
frame.get_data(),
sizeof(T),
105 py::format_descriptor<T>::format(), dims[0],
112 .def_property_readonly(
"shape",
113 [](Class &frame) -> py::array_t<long> {
114 long nb_dim =
frame.get_dims(0);
115 const long *c_dim =
frame.get_dims() + 1;
116 return py::array_t<long>(nb_dim, c_dim);
121 .def_property_readonly(
"nbElem", &Class::get_nb_elements,
129 mod.def(appendName<T>(
"magma_svd_cpu_").data(), py::overload_cast<Class *,
130 Class *, Class *, Class *>(&carma_magma_svd_cpu<T>));
137 mod.def(appendName<T>(
"magma_syevd_cpu_").data(), py::overload_cast<char, Class *, Class *>(&carma_magma_syevd_cpu<T>));
150 mod.def(appendName<T>(
"magma_getri_cpu_").data(), py::overload_cast<Class *>(&carma_magma_getri_cpu<T>));
154 mod.def(appendName<T>(
"magma_potri_cpu_").data(), py::overload_cast<Class *>(&carma_magma_potri_cpu<T>));