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})

Что-то не так с этим конвертером? Почему не срабатывает?

0 ответов

Другие вопросы по тегам