diff --git a/onedal/datatypes/numpy/data_conversion.cpp b/onedal/datatypes/numpy/data_conversion.cpp index 3f308148ce..a83b870cc6 100644 --- a/onedal/datatypes/numpy/data_conversion.cpp +++ b/onedal/datatypes/numpy/data_conversion.cpp @@ -269,9 +269,10 @@ dal::table convert_to_table(py::object inp_obj, py::object queue, bool recursed) return res; } -static void free_capsule(PyObject *cap) { +template +void free_capsule(PyObject *cap) { // TODO: check safe cast - dal::base *stored_array = static_cast(PyCapsule_GetPointer(cap, NULL)); + dal::array *stored_array = static_cast *>(PyCapsule_GetPointer(cap, NULL)); if (stored_array) { delete stored_array; } @@ -304,7 +305,7 @@ static PyObject *convert_to_numpy_impl( throw std::invalid_argument("Conversion to numpy array failed"); void *opaque_value = static_cast(new dal::array(host_array)); - PyObject *cap = PyCapsule_New(opaque_value, NULL, free_capsule); + PyObject *cap = PyCapsule_New(opaque_value, NULL, free_capsule); PyArray_SetBaseObject(reinterpret_cast(obj), cap); return obj; } diff --git a/onedal/datatypes/table.cpp b/onedal/datatypes/table.cpp index d76171be7b..2969cda5dd 100644 --- a/onedal/datatypes/table.cpp +++ b/onedal/datatypes/table.cpp @@ -103,9 +103,9 @@ ONEDAL_PY_INIT_MODULE(table) { return numpy::convert_to_table(obj, queue); }); - m.def("from_table", [](const dal::table& t) -> py::handle { + m.def("from_table", [](const dal::table& t) -> py::object { auto* obj_ptr = numpy::convert_to_pyobject(t); - return obj_ptr; + return py::reinterpret_steal(obj_ptr); }); m.def("dlpack_memory_order", &dlpack::dlpack_memory_order); py::enum_(m, "DLDeviceType")