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>
69 static MatType
mat(rows, cols);
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);
88 void modify(
int n,
int m) {
call(J.topLeftCorner(n, m)); }
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>()));
void call(Eigen::Ref< MatrixXd > mat)
Eigen::Ref< MatType > editBlock(Eigen::Ref< MatType > mat, Eigen::DenseIndex i, Eigen::DenseIndex j, Eigen::DenseIndex n, Eigen::DenseIndex m)
BOOST_PYTHON_MODULE(eigen_ref)
Eigen::Ref< MatType > getRefToStatic(const int rows, const int cols)
Get ref to a static matrix of size ( rows, cols )
void EIGENPY_DLLAPI enableEigenPy()
void modify(int n, int m)
const Eigen::Ref< const MatType > asConstRef(Eigen::Ref< const MatType > mat)
void printMatrix(const Eigen::Ref< const MatType > mat)
Eigen::Ref< MatType > getBlock(Eigen::Ref< MatType > mat, Eigen::DenseIndex i, Eigen::DenseIndex j, Eigen::DenseIndex n, Eigen::DenseIndex m)
Allows a template specialization.
Eigen::Ref< MatrixXd > Jref
Eigen::Ref< MatType > asRef(Eigen::Ref< MatType > mat)
void setOnes(Eigen::Ref< MatType > mat)
void printVector(const Eigen::Ref< const VecType > &vec)
VecType copyVectorFromConstRef(const Eigen::Ref< const VecType > vec)
void fill(Eigen::Ref< MatType > mat, const typename MatType::Scalar &value)