Skip to content

I cannot expose Eigen::Matrix<double, 4, 6> #208

@cmastalli

Description

@cmastalli

When I tried to expose this object in Crocoddyl, I have the compilation error described above.
I follow the standard procedure to expose this type of matrix, i.e.

typedef double Scalar;
typedef Eigen::Matrix<Scalar, 4, 6> Matrix46;
eigenpy::enableEigenPySpecific<Matrix46>();
                 from /home/cmastalli/devel/crocoddyl/bindings/python/crocoddyl/crocoddyl.cpp:9:
/usr/local/include/eigen3/Eigen/src/Core/AssignEvaluator.h: In instantiation of ‘void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Ref<Eigen::Matrix<double, 4, 6>, 0, Eigen::OuterStride<> >; Src = Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<int, double>, const Eigen::Transpose<const Eigen::Map<Eigen::Matrix<int, 4, 6, 0, 4, 6>, 0, Eigen::Stride<-1, -1> > > >; Func = Eigen::internal::assign_op<double, double>]’:
/usr/local/include/eigen3/Eigen/src/Core/AssignEvaluator.h:804:27:   required from ‘void Eigen::internal::call_assignment(Dst&, const Src&, const Func&, typename Eigen::internal::enable_if<(! Eigen::internal::evaluator_assume_aliasing<Src>::value), void*>::type) [with Dst = Eigen::Ref<Eigen::Matrix<double, 4, 6>, 0, Eigen::OuterStride<> >; Src = Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<int, double>, const Eigen::Transpose<const Eigen::Map<Eigen::Matrix<int, 4, 6, 0, 4, 6>, 0, Eigen::Stride<-1, -1> > > >; Func = Eigen::internal::assign_op<double, double>; typename Eigen::internal::enable_if<(! Eigen::internal::evaluator_assume_aliasing<Src>::value), void*>::type = void*]’
/usr/local/include/eigen3/Eigen/src/Core/AssignEvaluator.h:782:18:   required from ‘void Eigen::internal::call_assignment(Dst&, const Src&) [with Dst = Eigen::Ref<Eigen::Matrix<double, 4, 6>, 0, Eigen::OuterStride<> >; Src = Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<int, double>, const Eigen::Transpose<const Eigen::Map<Eigen::Matrix<int, 4, 6, 0, 4, 6>, 0, Eigen::Stride<-1, -1> > > >]’
/usr/local/include/eigen3/Eigen/src/Core/Assign.h:66:28:   required from ‘Derived& Eigen::MatrixBase<Derived>::operator=(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::CwiseUnaryOp<Eigen::internal::scalar_cast_op<int, double>, const Eigen::Transpose<const Eigen::Map<Eigen::Matrix<int, 4, 6, 0, 4, 6>, 0, Eigen::Stride<-1, -1> > > >; Derived = Eigen::Ref<Eigen::Matrix<double, 4, 6>, 0, Eigen::OuterStride<> >]’
/usr/local/include/eigenpy/eigen-allocator.hpp:81:17:   required from ‘static void eigenpy::details::cast_matrix_or_array<Scalar, NewScalar, cast_is_valid>::run(const Eigen::MatrixBase<OtherDerived>&, const Eigen::MatrixBase<OtherDerived>&) [with MatrixIn = Eigen::Map<Eigen::Matrix<int, 4, 6, 0, 4, 6>, 0, Eigen::Stride<-1, -1> >; MatrixOut = Eigen::Ref<Eigen::Matrix<double, 4, 6>, 0, Eigen::OuterStride<> >; Scalar = int; NewScalar = double; bool cast_is_valid = true]’
/usr/local/include/eigenpy/eigen-allocator.hpp:262:13:   required from ‘static void eigenpy::EigenAllocator<Eigen::Ref<PlainObjectType, RefOptions, StrideType> >::allocate(PyArrayObject*, boost::python::converter::rvalue_from_python_storage<Eigen::Ref<PlainObjectType, RefOptions, StrideType> >*) [with MatType = Eigen::Matrix<double, 4, 6>; int Options = 0; Stride = Eigen::OuterStride<>; PyArrayObject = tagPyArrayObject]’
/usr/local/include/eigenpy/eigen-from-python.hpp:265:43:   required from ‘void eigenpy::eigen_from_py_construct(PyObject*, boost::python::converter::rvalue_from_python_stage1_data*) [with MatOrRefType = Eigen::Ref<Eigen::Matrix<double, 4, 6>, 0, Eigen::OuterStride<> >; PyObject = _object]’
/usr/local/include/eigenpy/eigen-from-python.hpp:489:7:   required from ‘static void eigenpy::EigenFromPy<Eigen::Ref<PlainObjectType, RefOptions, StrideType> >::registration() [with MatType = Eigen::Matrix<double, 4, 6>; int Options = 0; Stride = Eigen::OuterStride<>]’
/usr/local/include/eigenpy/eigen-from-python.hpp:431:41:   required from ‘static void eigenpy::EigenFromPyConverter<MatType>::registration() [with MatType = Eigen::Matrix<double, 4, 6>]’
/usr/local/include/eigenpy/details.hpp:69:48:   required from ‘void eigenpy::enableEigenPySpecific() [with MatType = Eigen::Matrix<double, 4, 6>]’
/home/cmastalli/devel/crocoddyl/bindings/python/crocoddyl/crocoddyl.cpp:31:44:   required from here
/usr/local/include/eigen3/Eigen/src/Core/AssignEvaluator.h:833:3: error: static assertion failed: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES
   EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned,Src)
   ^

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions