Boost.Python и Boost.uBLAS: типы аргументов Python не соответствуют сигнатуре C++
Мне нужно конвертировать numpy.ndarray
в ublas::matrix
используя Boost.Python
конвертер
Код ошибки не отличается от любых других работающих конвертеров, которые я нашел:
using boost::numeric::ublas::matrix;
template<typename MatEl>
struct ToBoost {
ToBoost() {
py::converter::registry::push_back(
&convertible,
&construct,
py::type_id<matrix<MatEl>>()
);
}
static void * convertible(PyObject * p) {
std::cout << "Tried to convert" << std::endl;
return p; // the test should always pass for debugging purposes
}
static void construct(PyObject * obj, py::converter::rvalue_from_python_stage1_data * data) {
std::cout << "Tried to construct" << std::endl;
// Working code to copy data
}
};
В отличие от другого протестированного конвертера, найденного здесь, он никогда не срабатывает, и любая попытка использовать функцию / метод требует matrix<???>
в Python вызывает только
Boost.Python.ArgumentError: Python argument types in
Example.addOne(Example, numpy.ndarray)
did not match C++ signature:
addOne(class Example {lvalue}, class boost::numeric::ublas::matrix<double,struct boost::numeric::ublas::basic_row_major<unsigned __int64,__int64>,class boost::numeric::ublas::unbounded_array<double,class std::allocator<double> > > {lvalue})
Что-то не так с этим конвертером? Почему не срабатывает?