11 using namespace Eigen;
14 template <
typename MatType>
16 if (MatType::IsVectorAtCompileTime) std::cout <<
"isVector" << std::endl;
17 std::cout <<
"input size: cols " <<
mat.cols() <<
" rows " <<
mat.rows()
19 std::cout <<
mat << std::endl;
22 template <
typename VecType>
24 EIGEN_STATIC_ASSERT_VECTOR_ONLY(VecType);
28 template <
typename MatType>
33 template <
typename VecType>
35 std::cout <<
"copyVectorFromConstRef::vec: " <<
vec.transpose() << std::endl;
39 template <
typename MatType>
40 Eigen::Ref<MatType>
getBlock(Eigen::Ref<MatType>
mat, Eigen::DenseIndex i,
41 Eigen::DenseIndex j, Eigen::DenseIndex n,
42 Eigen::DenseIndex
m) {
43 return mat.block(i, j, n,
m);
46 template <
typename MatType>
47 Eigen::Ref<MatType>
editBlock(Eigen::Ref<MatType>
mat, Eigen::DenseIndex i,
48 Eigen::DenseIndex j, Eigen::DenseIndex n,
49 Eigen::DenseIndex
m) {
50 typename Eigen::Ref<MatType>::BlockXpr
B =
mat.block(i, j, n,
m);
52 for (
int i = 0; i <
B.rows(); ++i) {
53 for (
int j = 0; j <
B.cols(); ++j) {
57 std::cout <<
"B:\n" <<
B << std::endl;
61 template <
typename MatType>
62 void fill(Eigen::Ref<MatType>
mat,
const typename MatType::Scalar&
value) {
67 template <
typename MatType>
70 std::cout <<
"create ref to matrix of size (" <<
rows <<
"," <<
cols <<
")\n";
74 template <
typename MatType>
75 Eigen::Ref<MatType>
asRef(Eigen::Ref<MatType>
mat) {
76 std::cout <<
"create Ref to input mutable Ref\n";
77 return Eigen::Ref<MatType>(
mat);
80 template <
typename MatType>
81 const Eigen::Ref<const MatType>
asConstRef(Eigen::Ref<const MatType>
mat) {
82 return Eigen::Ref<const MatType>(
mat);
89 virtual void call(Eigen::Ref<MatrixXd>
mat) = 0;
94 void call(Eigen::Ref<MatrixXd>
mat) { this->get_override(
"call")(
mat); }
107 bp::def(
"printMatrix", printMatrix<Vector3d>);
108 bp::def(
"printMatrix", printMatrix<VectorXd>);
109 bp::def(
"printMatrix", printMatrix<MatrixXd>);
111 bp::def(
"printVector", printVector<VectorXd>);
112 bp::def(
"printRowVector", printVector<RowVectorXd>);
114 bp::def(
"setOnes", setOnes<Vector3d>);
115 bp::def(
"setOnes", setOnes<VectorXd>);
116 bp::def(
"setOnes", setOnes<MatrixXd>);
118 bp::def(
"fillVec3", fill<Vector3d>);
119 bp::def(
"fillVec", fill<VectorXd>);
120 bp::def(
"fill", fill<MatrixXd>);
122 bp::def(
"getRefToStatic", getRefToStatic<MatrixXd>);
123 bp::def(
"asRef", asRef<MatrixXd>);
124 bp::def(
"asConstRef", asConstRef<MatrixXd>);
126 bp::def(
"getBlock", &getBlock<MatrixXd>);
127 bp::def(
"editBlock", &editBlock<MatrixXd>);
129 bp::def(
"copyVectorFromConstRef", ©VectorFromConstRef<VectorXd>);
130 bp::def(
"copyRowVectorFromConstRef", ©VectorFromConstRef<RowVectorXd>);
132 bp::class_<modify_block_wrap, boost::noncopyable>(
"modify_block",
138 bp::class_<has_ref_member, boost::noncopyable>(
"has_ref_member", bp::init<>())
143 bp::return_value_policy<bp::return_by_value>()));