MUQ  0.4.3
EigenVectorAlgebra.cpp
Go to the documentation of this file.
2 
3 using namespace muq::Modeling;
4 
5 EigenVectorAlgebra::EigenVectorAlgebra() {}
6 
7 EigenVectorAlgebra::~EigenVectorAlgebra() {}
8 
9 bool EigenVectorAlgebra::IsEigenVector(std::type_info const& obj_type) {
10  // is this an Eigen::Vector type?
11  return typeid(Eigen::Vector2d)==obj_type
12  || typeid(Eigen::Vector2f)==obj_type
13  || typeid(Eigen::Vector2i)==obj_type
14  || typeid(Eigen::Vector3d)==obj_type
15  || typeid(Eigen::Vector3f)==obj_type
16  || typeid(Eigen::Vector3i)==obj_type
17  || typeid(Eigen::Vector4d)==obj_type
18  || typeid(Eigen::Vector4f)==obj_type
19  || typeid(Eigen::Vector4i)==obj_type
20  || typeid(Eigen::VectorXd)==obj_type
21  || typeid(Eigen::VectorXf)==obj_type
22  || typeid(Eigen::VectorXi)==obj_type;
23 }
24 
25 bool EigenVectorAlgebra::IsZero(boost::any const& obj) {
26  if( typeid(Eigen::Vector2d)==obj.type() ) { return IsZero<Eigen::Vector2d>(obj); }
27  if( typeid(Eigen::Vector2f)==obj.type() ) { return IsZero<Eigen::Vector2f>(obj); }
28  if( typeid(Eigen::Vector2i)==obj.type() ) { return IsZero<Eigen::Vector2i>(obj); }
29 
30  if( typeid(Eigen::Vector3d)==obj.type() ) { return IsZero<Eigen::Vector3d>(obj); }
31  if( typeid(Eigen::Vector3f)==obj.type() ) { return IsZero<Eigen::Vector3f>(obj); }
32  if( typeid(Eigen::Vector3i)==obj.type() ) { return IsZero<Eigen::Vector3i>(obj); }
33 
34  if( typeid(Eigen::Vector4d)==obj.type() ) { return IsZero<Eigen::Vector4d>(obj); }
35  if( typeid(Eigen::Vector4f)==obj.type() ) { return IsZero<Eigen::Vector4f>(obj); }
36  if( typeid(Eigen::Vector4i)==obj.type() ) { return IsZero<Eigen::Vector4i>(obj); }
37 
38  if( typeid(Eigen::VectorXd)==obj.type() ) { return IsZero<Eigen::VectorXd>(obj); }
39  if( typeid(Eigen::VectorXf)==obj.type() ) { return IsZero<Eigen::VectorXf>(obj); }
40  if( typeid(Eigen::VectorXi)==obj.type() ) { return IsZero<Eigen::VectorXi>(obj); }
41 
42  // something went wrong
43  assert(false);
44  return false;
45 }
46 
47 unsigned int EigenVectorAlgebra::Size(boost::any const& vec) {
48  if( typeid(Eigen::Vector2d)==vec.type() ) { return 2; }
49  if( typeid(Eigen::Vector3d)==vec.type() ) { return 3; }
50  if( typeid(Eigen::Vector4d)==vec.type() ) { return 4; }
51  if( typeid(Eigen::VectorXd)==vec.type() ) {
52  const Eigen::VectorXd& eig = boost::any_cast<Eigen::VectorXd const&>(vec);
53  return eig.size();
54  }
55 
56  if( typeid(Eigen::Vector2f)==vec.type() ) { return 2; }
57  if( typeid(Eigen::Vector3f)==vec.type() ) { return 3; }
58  if( typeid(Eigen::Vector4f)==vec.type() ) { return 4; }
59  if( typeid(Eigen::VectorXf)==vec.type() ) {
60  const Eigen::VectorXf& eig = boost::any_cast<Eigen::VectorXf const&>(vec);
61  return eig.size();
62  }
63 
64  if( typeid(Eigen::Vector2i)==vec.type() ) { return 2; }
65  if( typeid(Eigen::Vector3i)==vec.type() ) { return 3; }
66  if( typeid(Eigen::Vector4i)==vec.type() ) { return 4; }
67  if( typeid(Eigen::VectorXi)==vec.type() ) {
68  const Eigen::VectorXi& eig = boost::any_cast<Eigen::VectorXi const&>(vec);
69  return eig.size();
70  }
71 
72  // something went wront
73  assert(false);
74  return 0;
75 }
76 
77 double EigenVectorAlgebra::Norm(boost::any const& vec) {
78  if( typeid(Eigen::Vector2d)==vec.type() ) { return boost::any_cast<Eigen::Vector2d const&>(vec).norm(); }
79  if( typeid(Eigen::Vector3d)==vec.type() ) { return boost::any_cast<Eigen::Vector3d const&>(vec).norm(); }
80  if( typeid(Eigen::Vector4d)==vec.type() ) { return boost::any_cast<Eigen::Vector4d const&>(vec).norm(); }
81  if( typeid(Eigen::VectorXd)==vec.type() ) { return boost::any_cast<Eigen::VectorXd const&>(vec).norm(); }
82 
83  if( typeid(Eigen::Vector2f)==vec.type() ) { return boost::any_cast<Eigen::Vector2f const&>(vec).norm(); }
84  if( typeid(Eigen::Vector3f)==vec.type() ) { return boost::any_cast<Eigen::Vector3f const&>(vec).norm(); }
85  if( typeid(Eigen::Vector4f)==vec.type() ) { return boost::any_cast<Eigen::Vector4f const&>(vec).norm(); }
86  if( typeid(Eigen::VectorXf)==vec.type() ) { return boost::any_cast<Eigen::VectorXf const&>(vec).norm(); }
87 
88  if( typeid(Eigen::Vector2i)==vec.type() ) { return boost::any_cast<Eigen::Vector2i const&>(vec).norm(); }
89  if( typeid(Eigen::Vector3i)==vec.type() ) { return boost::any_cast<Eigen::Vector3i const&>(vec).norm(); }
90  if( typeid(Eigen::Vector4i)==vec.type() ) { return boost::any_cast<Eigen::Vector4i const&>(vec).norm(); }
91  if( typeid(Eigen::VectorXi)==vec.type() ) { return boost::any_cast<Eigen::VectorXi const&>(vec).norm(); }
92 
93  // something went wront
94  assert(false);
95  return 0;
96 }
97 
98 double EigenVectorAlgebra::InnerProduct(boost::any const& vec1, boost::any const& vec2) {
99  if( typeid(Eigen::Vector2d)==vec1.type() && typeid(Eigen::Vector2d)==vec2.type() ) { return InnerProduct<Eigen::Vector2d, Eigen::Vector2d>(vec1, vec2); }
100  if( typeid(Eigen::VectorXd)==vec1.type() && typeid(Eigen::Vector2d)==vec2.type() ) { return InnerProduct<Eigen::VectorXd, Eigen::Vector2d>(vec1, vec2); }
101  if( typeid(Eigen::Vector2d)==vec1.type() && typeid(Eigen::VectorXd)==vec2.type() ) { return InnerProduct<Eigen::Vector2d, Eigen::VectorXd>(vec1, vec2); }
102 
103  if( typeid(Eigen::Vector3d)==vec1.type() && typeid(Eigen::Vector3d)==vec2.type() ) { return InnerProduct<Eigen::Vector3d, Eigen::Vector3d>(vec1, vec2); }
104  if( typeid(Eigen::VectorXd)==vec1.type() && typeid(Eigen::Vector3d)==vec2.type() ) { return InnerProduct<Eigen::VectorXd, Eigen::Vector3d>(vec1, vec2); }
105  if( typeid(Eigen::Vector3d)==vec1.type() && typeid(Eigen::VectorXd)==vec2.type() ) { return InnerProduct<Eigen::Vector3d, Eigen::VectorXd>(vec1, vec2); }
106 
107  if( typeid(Eigen::Vector4d)==vec1.type() && typeid(Eigen::Vector4d)==vec2.type() ) { return InnerProduct<Eigen::Vector4d, Eigen::Vector4d>(vec1, vec2); }
108  if( typeid(Eigen::VectorXd)==vec1.type() && typeid(Eigen::Vector4d)==vec2.type() ) { return InnerProduct<Eigen::VectorXd, Eigen::Vector4d>(vec1, vec2); }
109  if( typeid(Eigen::Vector4d)==vec1.type() && typeid(Eigen::VectorXd)==vec2.type() ) { return InnerProduct<Eigen::Vector4d, Eigen::VectorXd>(vec1, vec2); }
110 
111  if( typeid(Eigen::VectorXd)==vec1.type() && typeid(Eigen::VectorXd)==vec2.type() ) { return InnerProduct<Eigen::VectorXd, Eigen::VectorXd>(vec1, vec2); }
112 
113  if( typeid(Eigen::Vector2f)==vec1.type() && typeid(Eigen::Vector2f)==vec2.type() ) { return InnerProduct<Eigen::Vector2f, Eigen::Vector2f>(vec1, vec2); }
114  if( typeid(Eigen::VectorXf)==vec1.type() && typeid(Eigen::Vector2f)==vec2.type() ) { return InnerProduct<Eigen::VectorXf, Eigen::Vector2f>(vec1, vec2); }
115  if( typeid(Eigen::Vector2f)==vec1.type() && typeid(Eigen::VectorXf)==vec2.type() ) { return InnerProduct<Eigen::Vector2f, Eigen::VectorXf>(vec1, vec2); }
116 
117  if( typeid(Eigen::Vector3f)==vec1.type() && typeid(Eigen::Vector3f)==vec2.type() ) { return InnerProduct<Eigen::Vector3f, Eigen::Vector3f>(vec1, vec2); }
118  if( typeid(Eigen::VectorXf)==vec1.type() && typeid(Eigen::Vector3f)==vec2.type() ) { return InnerProduct<Eigen::VectorXf, Eigen::Vector3f>(vec1, vec2); }
119  if( typeid(Eigen::Vector3f)==vec1.type() && typeid(Eigen::VectorXf)==vec2.type() ) { return InnerProduct<Eigen::Vector3f, Eigen::VectorXf>(vec1, vec2); }
120 
121  if( typeid(Eigen::Vector4f)==vec1.type() && typeid(Eigen::Vector4f)==vec2.type() ) { return InnerProduct<Eigen::Vector4f, Eigen::Vector4f>(vec1, vec2); }
122  if( typeid(Eigen::VectorXf)==vec1.type() && typeid(Eigen::Vector4f)==vec2.type() ) { return InnerProduct<Eigen::VectorXf, Eigen::Vector4f>(vec1, vec2); }
123  if( typeid(Eigen::Vector4f)==vec1.type() && typeid(Eigen::VectorXf)==vec2.type() ) { return InnerProduct<Eigen::Vector4f, Eigen::VectorXf>(vec1, vec2); }
124 
125  if( typeid(Eigen::VectorXf)==vec1.type() && typeid(Eigen::VectorXf)==vec2.type() ) { return InnerProduct<Eigen::VectorXf, Eigen::VectorXf>(vec1, vec2); }
126 
127  if( typeid(Eigen::Vector2i)==vec1.type() && typeid(Eigen::Vector2i)==vec2.type() ) { return InnerProduct<Eigen::Vector2i, Eigen::Vector2i>(vec1, vec2); }
128  if( typeid(Eigen::VectorXi)==vec1.type() && typeid(Eigen::Vector2i)==vec2.type() ) { return InnerProduct<Eigen::VectorXi, Eigen::Vector2i>(vec1, vec2); }
129  if( typeid(Eigen::Vector2i)==vec1.type() && typeid(Eigen::VectorXi)==vec2.type() ) { return InnerProduct<Eigen::Vector2i, Eigen::VectorXi>(vec1, vec2); }
130 
131  if( typeid(Eigen::Vector3i)==vec1.type() && typeid(Eigen::Vector3i)==vec2.type() ) { return InnerProduct<Eigen::Vector3i, Eigen::Vector3i>(vec1, vec2); }
132  if( typeid(Eigen::VectorXi)==vec1.type() && typeid(Eigen::Vector3i)==vec2.type() ) { return InnerProduct<Eigen::VectorXi, Eigen::Vector3i>(vec1, vec2); }
133  if( typeid(Eigen::Vector3i)==vec1.type() && typeid(Eigen::VectorXi)==vec2.type() ) { return InnerProduct<Eigen::Vector3i, Eigen::VectorXi>(vec1, vec2); }
134 
135  if( typeid(Eigen::Vector4i)==vec1.type() && typeid(Eigen::Vector4i)==vec2.type() ) { return InnerProduct<Eigen::Vector4i, Eigen::Vector4i>(vec1, vec2); }
136  if( typeid(Eigen::VectorXi)==vec1.type() && typeid(Eigen::Vector4i)==vec2.type() ) { return InnerProduct<Eigen::VectorXi, Eigen::Vector4i>(vec1, vec2); }
137  if( typeid(Eigen::Vector4i)==vec1.type() && typeid(Eigen::VectorXi)==vec2.type() ) { return InnerProduct<Eigen::Vector4i, Eigen::VectorXi>(vec1, vec2); }
138 
139  if( typeid(Eigen::VectorXi)==vec1.type() && typeid(Eigen::VectorXi)==vec2.type() ) { return InnerProduct<Eigen::VectorXi, Eigen::VectorXi>(vec1, vec2); }
140 
141  // something went wrong
142  assert(false);
143  return 0.0;
144 }
145 
146 boost::any EigenVectorAlgebra::OuterProduct(boost::any const& vec1, boost::any const& vec2) {
147  if( typeid(Eigen::Vector2d)==vec1.type() && typeid(Eigen::Vector2d)==vec2.type() ) { return OuterProduct<Eigen::Matrix2d, Eigen::Vector2d, Eigen::Vector2d>(vec1, vec2); }
148  if( typeid(Eigen::VectorXd)==vec1.type() && typeid(Eigen::Vector2d)==vec2.type() ) { return OuterProduct<Eigen::MatrixXd, Eigen::VectorXd, Eigen::Vector2d>(vec1, vec2); }
149  if( typeid(Eigen::Vector2d)==vec1.type() && typeid(Eigen::VectorXd)==vec2.type() ) { return OuterProduct<Eigen::MatrixXd, Eigen::Vector2d, Eigen::VectorXd>(vec1, vec2); }
150 
151  if( typeid(Eigen::Vector3d)==vec1.type() && typeid(Eigen::Vector3d)==vec2.type() ) { return OuterProduct<Eigen::Matrix3d, Eigen::Vector3d, Eigen::Vector3d>(vec1, vec2); }
152  if( typeid(Eigen::VectorXd)==vec1.type() && typeid(Eigen::Vector3d)==vec2.type() ) { return OuterProduct<Eigen::MatrixXd, Eigen::VectorXd, Eigen::Vector3d>(vec1, vec2); }
153  if( typeid(Eigen::Vector3d)==vec1.type() && typeid(Eigen::VectorXd)==vec2.type() ) { return OuterProduct<Eigen::MatrixXd, Eigen::Vector3d, Eigen::VectorXd>(vec1, vec2); }
154 
155  if( typeid(Eigen::Vector4d)==vec1.type() && typeid(Eigen::Vector4d)==vec2.type() ) { return OuterProduct<Eigen::Matrix4d, Eigen::Vector4d, Eigen::Vector4d>(vec1, vec2); }
156  if( typeid(Eigen::VectorXd)==vec1.type() && typeid(Eigen::Vector4d)==vec2.type() ) { return OuterProduct<Eigen::MatrixXd, Eigen::VectorXd, Eigen::Vector4d>(vec1, vec2); }
157  if( typeid(Eigen::Vector4d)==vec1.type() && typeid(Eigen::VectorXd)==vec2.type() ) { return OuterProduct<Eigen::MatrixXd, Eigen::Vector4d, Eigen::VectorXd>(vec1, vec2); }
158 
159  if( typeid(Eigen::VectorXd)==vec1.type() && typeid(Eigen::VectorXd)==vec2.type() ) { return OuterProduct<Eigen::MatrixXd, Eigen::VectorXd, Eigen::VectorXd>(vec1, vec2); }
160 
161  if( typeid(Eigen::Vector2f)==vec1.type() && typeid(Eigen::Vector2f)==vec2.type() ) { return OuterProduct<Eigen::Matrix2f, Eigen::Vector2f, Eigen::Vector2f>(vec1, vec2); }
162  if( typeid(Eigen::VectorXf)==vec1.type() && typeid(Eigen::Vector2f)==vec2.type() ) { return OuterProduct<Eigen::MatrixXf, Eigen::VectorXf, Eigen::Vector2f>(vec1, vec2); }
163  if( typeid(Eigen::Vector2f)==vec1.type() && typeid(Eigen::VectorXf)==vec2.type() ) { return OuterProduct<Eigen::MatrixXf, Eigen::Vector2f, Eigen::VectorXf>(vec1, vec2); }
164 
165  if( typeid(Eigen::Vector3f)==vec1.type() && typeid(Eigen::Vector3f)==vec2.type() ) { return OuterProduct<Eigen::Matrix3f, Eigen::Vector3f, Eigen::Vector3f>(vec1, vec2); }
166  if( typeid(Eigen::VectorXf)==vec1.type() && typeid(Eigen::Vector3f)==vec2.type() ) { return OuterProduct<Eigen::MatrixXf, Eigen::VectorXf, Eigen::Vector3f>(vec1, vec2); }
167  if( typeid(Eigen::Vector3f)==vec1.type() && typeid(Eigen::VectorXf)==vec2.type() ) { return OuterProduct<Eigen::MatrixXf, Eigen::Vector3f, Eigen::VectorXf>(vec1, vec2); }
168 
169  if( typeid(Eigen::Vector4f)==vec1.type() && typeid(Eigen::Vector4f)==vec2.type() ) { return OuterProduct<Eigen::Matrix4f, Eigen::Vector4f, Eigen::Vector4f>(vec1, vec2); }
170  if( typeid(Eigen::VectorXf)==vec1.type() && typeid(Eigen::Vector4f)==vec2.type() ) { return OuterProduct<Eigen::MatrixXf, Eigen::VectorXf, Eigen::Vector4f>(vec1, vec2); }
171  if( typeid(Eigen::Vector4f)==vec1.type() && typeid(Eigen::VectorXf)==vec2.type() ) { return OuterProduct<Eigen::MatrixXf, Eigen::Vector4f, Eigen::VectorXf>(vec1, vec2); }
172 
173  if( typeid(Eigen::VectorXf)==vec1.type() && typeid(Eigen::VectorXf)==vec2.type() ) { return OuterProduct<Eigen::MatrixXf, Eigen::VectorXf, Eigen::VectorXf>(vec1, vec2); }
174 
175  if( typeid(Eigen::Vector2i)==vec1.type() && typeid(Eigen::Vector2i)==vec2.type() ) { return OuterProduct<Eigen::Matrix2i, Eigen::Vector2i, Eigen::Vector2i>(vec1, vec2); }
176  if( typeid(Eigen::VectorXi)==vec1.type() && typeid(Eigen::Vector2i)==vec2.type() ) { return OuterProduct<Eigen::MatrixXi, Eigen::VectorXi, Eigen::Vector2i>(vec1, vec2); }
177  if( typeid(Eigen::Vector2i)==vec1.type() && typeid(Eigen::VectorXi)==vec2.type() ) { return OuterProduct<Eigen::MatrixXi, Eigen::Vector2i, Eigen::VectorXi>(vec1, vec2); }
178 
179  if( typeid(Eigen::Vector3i)==vec1.type() && typeid(Eigen::Vector3i)==vec2.type() ) { return OuterProduct<Eigen::Matrix3i, Eigen::Vector3i, Eigen::Vector3i>(vec1, vec2); }
180  if( typeid(Eigen::VectorXi)==vec1.type() && typeid(Eigen::Vector3i)==vec2.type() ) { return OuterProduct<Eigen::MatrixXi, Eigen::VectorXi, Eigen::Vector3i>(vec1, vec2); }
181  if( typeid(Eigen::Vector3i)==vec1.type() && typeid(Eigen::VectorXi)==vec2.type() ) { return OuterProduct<Eigen::MatrixXi, Eigen::Vector3i, Eigen::VectorXi>(vec1, vec2); }
182 
183  if( typeid(Eigen::Vector4i)==vec1.type() && typeid(Eigen::Vector4i)==vec2.type() ) { return OuterProduct<Eigen::Matrix4i, Eigen::Vector4i, Eigen::Vector4i>(vec1, vec2); }
184  if( typeid(Eigen::VectorXi)==vec1.type() && typeid(Eigen::Vector4i)==vec2.type() ) { return OuterProduct<Eigen::MatrixXi, Eigen::VectorXi, Eigen::Vector4i>(vec1, vec2); }
185  if( typeid(Eigen::Vector4i)==vec1.type() && typeid(Eigen::VectorXi)==vec2.type() ) { return OuterProduct<Eigen::MatrixXi, Eigen::Vector4i, Eigen::VectorXi>(vec1, vec2); }
186 
187  if( typeid(Eigen::VectorXi)==vec1.type() && typeid(Eigen::VectorXi)==vec2.type() ) { return OuterProduct<Eigen::MatrixXi, Eigen::VectorXi, Eigen::VectorXi>(vec1, vec2); }
188 
189  // something went wrong
190  assert(false);
191  return boost::none;
192 }
193 
194 boost::any EigenVectorAlgebra::AccessElement(boost::any const& vec, unsigned int const i) {
195  if( typeid(Eigen::Vector2d)==vec.type() ) { return AccessElement<Eigen::Vector2d>(vec, i); }
196  if( typeid(Eigen::Vector2f)==vec.type() ) { return AccessElement<Eigen::Vector2f>(vec, i); }
197  if( typeid(Eigen::Vector2i)==vec.type() ) { return AccessElement<Eigen::Vector2i>(vec, i); }
198 
199  if( typeid(Eigen::Vector3d)==vec.type() ) { return AccessElement<Eigen::Vector3d>(vec, i); }
200  if( typeid(Eigen::Vector3f)==vec.type() ) { return AccessElement<Eigen::Vector3f>(vec, i); }
201  if( typeid(Eigen::Vector3i)==vec.type() ) { return AccessElement<Eigen::Vector3i>(vec, i); }
202 
203  if( typeid(Eigen::Vector4d)==vec.type() ) { return AccessElement<Eigen::Vector4d>(vec, i); }
204  if( typeid(Eigen::Vector4f)==vec.type() ) { return AccessElement<Eigen::Vector4f>(vec, i); }
205  if( typeid(Eigen::Vector4i)==vec.type() ) { return AccessElement<Eigen::Vector4i>(vec, i); }
206 
207  if( typeid(Eigen::VectorXd)==vec.type() ) { return AccessElement<Eigen::VectorXd>(vec, i); }
208  if( typeid(Eigen::VectorXf)==vec.type() ) { return AccessElement<Eigen::VectorXf>(vec, i); }
209  if( typeid(Eigen::VectorXi)==vec.type() ) { return AccessElement<Eigen::VectorXi>(vec, i); }
210 
211  // something went wront
212  assert(false);
213  return boost::none;
214 }
215 
216 boost::any EigenVectorAlgebra::Identity(std::type_info const& type, unsigned int const rows, unsigned int const cols) {
217  if( type==typeid(Eigen::Vector2d) ) { return (Eigen::Matrix2d)Eigen::Matrix2d::Identity(); }
218  if( type==typeid(Eigen::Vector2f) ) { return (Eigen::Matrix2f)Eigen::Matrix2f::Identity(); }
219  if( type==typeid(Eigen::Vector2i) ) { return (Eigen::Matrix2i)Eigen::Matrix2i::Identity(); }
220 
221  if( type==typeid(Eigen::Vector3d) ) { return (Eigen::Matrix3d)Eigen::Matrix3d::Identity(); }
222  if( type==typeid(Eigen::Vector3f) ) { return (Eigen::Matrix3f)Eigen::Matrix3f::Identity(); }
223  if( type==typeid(Eigen::Vector3i) ) { return (Eigen::Matrix3i)Eigen::Matrix3i::Identity(); }
224 
225  if( type==typeid(Eigen::Vector4d) ) { return (Eigen::Matrix4d)Eigen::Matrix4d::Identity(); }
226  if( type==typeid(Eigen::Vector4f) ) { return (Eigen::Matrix4f)Eigen::Matrix4f::Identity(); }
227  if( type==typeid(Eigen::Vector4i) ) { return (Eigen::Matrix4i)Eigen::Matrix4i::Identity(); }
228 
229  if( type==typeid(Eigen::VectorXd) ) { return (Eigen::MatrixXd)Eigen::MatrixXd::Identity(rows, cols); }
230  if( type==typeid(Eigen::VectorXf) ) { return (Eigen::MatrixXf)Eigen::MatrixXf::Identity(rows, cols); }
231  if( type==typeid(Eigen::VectorXi) ) { return (Eigen::MatrixXi)Eigen::MatrixXi::Identity(rows, cols); }
232 
233  // something went wrong
234  assert(false);
235  return boost::none;
236 }
237 
238 boost::any EigenVectorAlgebra::Add(boost::any const& in0, boost::any const& in1) {
239  // 2D vectors
240  if( in0.type()==typeid(Eigen::Vector2d) ) {
241  if( in1.type()==typeid(Eigen::Vector2d) ) { return Add<Eigen::Vector2d, Eigen::Vector2d>(in0, in1); }
242  return Add<Eigen::Vector2d, Eigen::VectorXd>(in0, in1);
243  }
244  if( in0.type()==typeid(Eigen::Vector2f) ) {
245  if( in1.type()==typeid(Eigen::Vector2f) ) { return Add<Eigen::Vector2f, Eigen::Vector2f>(in0, in1); }
246  return Add<Eigen::Vector2f, Eigen::VectorXf>(in0, in1);
247  }
248  if( in0.type()==typeid(Eigen::Vector2i) ) {
249  if( in1.type()==typeid(Eigen::Vector2i) ) { return Add<Eigen::Vector2i, Eigen::Vector2i>(in0, in1); }
250  return Add<Eigen::Vector2i, Eigen::VectorXi>(in0, in1);
251  }
252 
253  // 3D vectors
254  if( in0.type()==typeid(Eigen::Vector3d) ) {
255  if( in1.type()==typeid(Eigen::Vector3d) ) { return Add<Eigen::Vector3d, Eigen::Vector3d>(in0, in1); }
256  return Add<Eigen::Vector3d, Eigen::VectorXd>(in0, in1);
257  }
258  if( in0.type()==typeid(Eigen::Vector3f) ) {
259  if( in1.type()==typeid(Eigen::Vector3f) ) { return Add<Eigen::Vector3f, Eigen::Vector3f>(in0, in1); }
260  return Add<Eigen::Vector3f, Eigen::VectorXf>(in0, in1);
261  }
262  if( in0.type()==typeid(Eigen::Vector3i) ) {
263  if( in1.type()==typeid(Eigen::Vector3i) ) { return Add<Eigen::Vector3i, Eigen::Vector3i>(in0, in1); }
264  return Add<Eigen::Vector3i, Eigen::VectorXi>(in0, in1);
265  }
266 
267  // 4D vectors
268  if( in0.type()==typeid(Eigen::Vector4d) ) {
269  if( in1.type()==typeid(Eigen::Vector4d) ) { return Add<Eigen::Vector4d, Eigen::Vector4d>(in0, in1); }
270  return Add<Eigen::Vector4d, Eigen::VectorXd>(in0, in1);
271  }
272  if( in0.type()==typeid(Eigen::Vector4f) ) {
273  if( in1.type()==typeid(Eigen::Vector4f) ) { return Add<Eigen::Vector4f, Eigen::Vector4f>(in0, in1); }
274  return Add<Eigen::Vector4f, Eigen::VectorXf>(in0, in1);
275  }
276  if( in0.type()==typeid(Eigen::Vector4i) ) {
277  if( in1.type()==typeid(Eigen::Vector4i) ) { return Add<Eigen::Vector4i, Eigen::Vector4i>(in0, in1); }
278  return Add<Eigen::Vector4i, Eigen::VectorXi>(in0, in1);
279  }
280 
281  // XD vectors
282  if( in0.type()==typeid(Eigen::VectorXd) ) {
283  if( in1.type()==typeid(Eigen::Vector2d) ) { return Add<Eigen::VectorXd, Eigen::Vector2d>(in0, in1); }
284  if( in1.type()==typeid(Eigen::Vector3d) ) { return Add<Eigen::VectorXd, Eigen::Vector3d>(in0, in1); }
285  if( in1.type()==typeid(Eigen::Vector4d) ) { return Add<Eigen::VectorXd, Eigen::Vector4d>(in0, in1); }
286  return Add<Eigen::VectorXd, Eigen::VectorXd>(in0, in1);
287  }
288  if( in0.type()==typeid(Eigen::VectorXf) ) {
289  if( in1.type()==typeid(Eigen::Vector2f) ) { return Add<Eigen::VectorXf, Eigen::Vector2f>(in0, in1); }
290  if( in1.type()==typeid(Eigen::Vector3f) ) { return Add<Eigen::VectorXf, Eigen::Vector3f>(in0, in1); }
291  if( in1.type()==typeid(Eigen::Vector4f) ) { return Add<Eigen::VectorXf, Eigen::Vector4f>(in0, in1); }
292  return Add<Eigen::VectorXf, Eigen::VectorXf>(in0, in1);
293  }
294  if( in0.type()==typeid(Eigen::VectorXi) ) {
295  if( in1.type()==typeid(Eigen::Vector2i) ) { return Add<Eigen::VectorXi, Eigen::Vector2i>(in0, in1); }
296  if( in1.type()==typeid(Eigen::Vector3i) ) { return Add<Eigen::VectorXi, Eigen::Vector3i>(in0, in1); }
297  if( in1.type()==typeid(Eigen::Vector4i) ) { return Add<Eigen::VectorXi, Eigen::Vector4i>(in0, in1); }
298  return Add<Eigen::VectorXi, Eigen::VectorXi>(in0, in1);
299  }
300 
301  // something went wrong
302  assert(false);
303  return boost::none;
304 }
305 
306 boost::any EigenVectorAlgebra::Subtract(boost::any const& in0, boost::any const& in1) {
307  // 2D vectors
308  if( in0.type()==typeid(Eigen::Vector2d) ) {
309  if( in1.type()==typeid(Eigen::Vector2d) ) { return Subtract<Eigen::Vector2d, Eigen::Vector2d>(in0, in1); }
310  return Subtract<Eigen::Vector2d, Eigen::VectorXd>(in0, in1);
311  }
312  if( in0.type()==typeid(Eigen::Vector2f) ) {
313  if( in1.type()==typeid(Eigen::Vector2f) ) { return Subtract<Eigen::Vector2f, Eigen::Vector2f>(in0, in1); }
314  return Subtract<Eigen::Vector2f, Eigen::VectorXf>(in0, in1);
315  }
316  if( in0.type()==typeid(Eigen::Vector2i) ) {
317  if( in1.type()==typeid(Eigen::Vector2i) ) { return Subtract<Eigen::Vector2i, Eigen::Vector2i>(in0, in1); }
318  return Subtract<Eigen::Vector2i, Eigen::VectorXi>(in0, in1);
319  }
320 
321  // 3D vectors
322  if( in0.type()==typeid(Eigen::Vector3d) ) {
323  if( in1.type()==typeid(Eigen::Vector3d) ) { return Subtract<Eigen::Vector3d, Eigen::Vector3d>(in0, in1); }
324  return Subtract<Eigen::Vector3d, Eigen::VectorXd>(in0, in1);
325  }
326  if( in0.type()==typeid(Eigen::Vector3f) ) {
327  if( in1.type()==typeid(Eigen::Vector3f) ) { return Subtract<Eigen::Vector3f, Eigen::Vector3f>(in0, in1); }
328  return Subtract<Eigen::Vector3f, Eigen::VectorXf>(in0, in1);
329  }
330  if( in0.type()==typeid(Eigen::Vector3i) ) {
331  if( in1.type()==typeid(Eigen::Vector3i) ) { return Subtract<Eigen::Vector3i, Eigen::Vector3i>(in0, in1); }
332  return Subtract<Eigen::Vector3i, Eigen::VectorXi>(in0, in1);
333  }
334 
335  // 4D vectors
336  if( in0.type()==typeid(Eigen::Vector4d) ) {
337  if( in1.type()==typeid(Eigen::Vector4d) ) { return Subtract<Eigen::Vector4d, Eigen::Vector4d>(in0, in1); }
338  return Subtract<Eigen::Vector4d, Eigen::VectorXd>(in0, in1);
339  }
340  if( in0.type()==typeid(Eigen::Vector4f) ) {
341  if( in1.type()==typeid(Eigen::Vector4f) ) { return Subtract<Eigen::Vector4f, Eigen::Vector4f>(in0, in1); }
342  return Subtract<Eigen::Vector4f, Eigen::VectorXf>(in0, in1);
343  }
344  if( in0.type()==typeid(Eigen::Vector4i) ) {
345  if( in1.type()==typeid(Eigen::Vector4i) ) { return Subtract<Eigen::Vector4i, Eigen::Vector4i>(in0, in1); }
346  return Subtract<Eigen::Vector4i, Eigen::VectorXi>(in0, in1);
347  }
348 
349  // XD vectors
350  if( in0.type()==typeid(Eigen::VectorXd) ) {
351  if( in1.type()==typeid(Eigen::Vector2d) ) { return Subtract<Eigen::VectorXd, Eigen::Vector2d>(in0, in1); }
352  if( in1.type()==typeid(Eigen::Vector3d) ) { return Subtract<Eigen::VectorXd, Eigen::Vector3d>(in0, in1); }
353  if( in1.type()==typeid(Eigen::Vector4d) ) { return Subtract<Eigen::VectorXd, Eigen::Vector4d>(in0, in1); }
354  return Subtract<Eigen::VectorXd, Eigen::VectorXd>(in0, in1);
355  }
356  if( in0.type()==typeid(Eigen::VectorXf) ) {
357  if( in1.type()==typeid(Eigen::Vector2f) ) { return Subtract<Eigen::VectorXf, Eigen::Vector2f>(in0, in1); }
358  if( in1.type()==typeid(Eigen::Vector3f) ) { return Subtract<Eigen::VectorXf, Eigen::Vector3f>(in0, in1); }
359  if( in1.type()==typeid(Eigen::Vector4f) ) { return Subtract<Eigen::VectorXf, Eigen::Vector4f>(in0, in1); }
360  return Subtract<Eigen::VectorXf, Eigen::VectorXf>(in0, in1);
361  }
362  if( in0.type()==typeid(Eigen::VectorXi) ) {
363  if( in1.type()==typeid(Eigen::Vector2i) ) { return Subtract<Eigen::VectorXi, Eigen::Vector2i>(in0, in1); }
364  if( in1.type()==typeid(Eigen::Vector3i) ) { return Subtract<Eigen::VectorXi, Eigen::Vector3i>(in0, in1); }
365  if( in1.type()==typeid(Eigen::Vector4i) ) { return Subtract<Eigen::VectorXi, Eigen::Vector4i>(in0, in1); }
366  return Subtract<Eigen::VectorXi, Eigen::VectorXi>(in0, in1);
367  }
368 
369  // something went wrong
370  assert(false);
371  return boost::none;
372 }
373 
374 boost::any EigenVectorAlgebra::ScalarMultiply(boost::any const& in0, boost::any const& in1) {
375  if( in0.type()==typeid(double) ) {
376  if( in1.type()==typeid(Eigen::Vector2d) ) { return ScalarMultiply<double, Eigen::Vector2d>(in0, in1); }
377  if( in1.type()==typeid(Eigen::Vector3d) ) { return ScalarMultiply<double, Eigen::Vector3d>(in0, in1); }
378  if( in1.type()==typeid(Eigen::Vector4d) ) { return ScalarMultiply<double, Eigen::Vector4d>(in0, in1); }
379 
380  return ScalarMultiply<double, Eigen::VectorXd>(in0, in1);
381  }
382 
383  if( in0.type()==typeid(float) ) {
384  if( in1.type()==typeid(Eigen::Vector2f) ) { return ScalarMultiply<float, Eigen::Vector2f>(in0, in1); }
385  if( in1.type()==typeid(Eigen::Vector3f) ) { return ScalarMultiply<float, Eigen::Vector3f>(in0, in1); }
386  if( in1.type()==typeid(Eigen::Vector4f) ) { return ScalarMultiply<float, Eigen::Vector4f>(in0, in1); }
387 
388  return ScalarMultiply<float, Eigen::VectorXf>(in0, in1);
389  }
390 
391  if( in0.type()==typeid(int) ) {
392  if( in1.type()==typeid(Eigen::Vector2i) ) { return ScalarMultiply<int, Eigen::Vector2i>(in0, in1); }
393  if( in1.type()==typeid(Eigen::Vector3i) ) { return ScalarMultiply<int, Eigen::Vector3i>(in0, in1); }
394  if( in1.type()==typeid(Eigen::Vector4i) ) { return ScalarMultiply<int, Eigen::Vector4i>(in0, in1); }
395 
396  return ScalarMultiply<int, Eigen::VectorXi>(in0, in1);
397  }
398 
399  if( in0.type()==typeid(unsigned int) ) {
400  if( in1.type()==typeid(Eigen::Vector2i) ) { return ScalarMultiply<unsigned int, Eigen::Vector2i>(in0, in1); }
401  if( in1.type()==typeid(Eigen::Vector3i) ) { return ScalarMultiply<unsigned int, Eigen::Vector3i>(in0, in1); }
402  if( in1.type()==typeid(Eigen::Vector4i) ) { return ScalarMultiply<unsigned int, Eigen::Vector4i>(in0, in1); }
403 
404  return ScalarMultiply<unsigned int, Eigen::VectorXi>(in0, in1);
405  }
406 
407  // something went wrong
408  assert(false);
409  return boost::none;
410 }
411 
412 boost::any EigenVectorAlgebra::Apply(boost::any const& A, boost::any const& x) {
413  if( A.type()==typeid(Eigen::Vector2d) ) {
414  if( x.type()==typeid(Eigen::Vector2d) ) { return Apply<Eigen::Vector2d, Eigen::Vector2d>(A, x); }
415  return Apply<Eigen::Vector2d, Eigen::VectorXd>(A, x);
416  }
417  if( A.type()==typeid(Eigen::Vector2f) ) {
418  if( x.type()==typeid(Eigen::Vector2f) ) { return Apply<Eigen::Vector2f, Eigen::Vector2f>(A, x); }
419  return Apply<Eigen::Vector2f, Eigen::VectorXf>(A, x);
420  }
421  if( A.type()==typeid(Eigen::Vector2i) ) {
422  if( x.type()==typeid(Eigen::Vector2i) ) { return Apply<Eigen::Vector2i, Eigen::Vector2i>(A, x); }
423  return Apply<Eigen::Vector2i, Eigen::VectorXi>(A, x);
424  }
425 
426  if( A.type()==typeid(Eigen::Vector3d) ) {
427  if( x.type()==typeid(Eigen::Vector3d) ) { return Apply<Eigen::Vector3d, Eigen::Vector3d>(A, x); }
428  return Apply<Eigen::Vector3d, Eigen::VectorXd>(A, x);
429  }
430  if( A.type()==typeid(Eigen::Vector3f) ) {
431  if( x.type()==typeid(Eigen::Vector3f) ) { return Apply<Eigen::Vector3f, Eigen::Vector3f>(A, x); }
432  return Apply<Eigen::Vector3f, Eigen::VectorXf>(A, x);
433  }
434  if( A.type()==typeid(Eigen::Vector3i) ) {
435  if( x.type()==typeid(Eigen::Vector3i) ) { return Apply<Eigen::Vector3i, Eigen::Vector3i>(A, x); }
436  return Apply<Eigen::Vector3i, Eigen::VectorXi>(A, x);
437  }
438 
439  if( A.type()==typeid(Eigen::Vector4d) ) {
440  if( x.type()==typeid(Eigen::Vector4d) ) { return Apply<Eigen::Vector4d, Eigen::Vector4d>(A, x); }
441  return Apply<Eigen::Vector4d, Eigen::VectorXd>(A, x);
442  }
443  if( A.type()==typeid(Eigen::Vector4f) ) {
444  if( x.type()==typeid(Eigen::Vector4f) ) { return Apply<Eigen::Vector4f, Eigen::Vector4f>(A, x); }
445  return Apply<Eigen::Vector4f, Eigen::VectorXf>(A, x);
446  }
447  if( A.type()==typeid(Eigen::Vector4i) ) {
448  if( x.type()==typeid(Eigen::Vector4i) ) { return Apply<Eigen::Vector4i, Eigen::Vector4i>(A, x); }
449  return Apply<Eigen::Vector4i, Eigen::VectorXi>(A, x);
450  }
451 
452  if( A.type()==typeid(Eigen::VectorXd) ) {
453  if( x.type()==typeid(Eigen::Vector2d) ) { return Apply<Eigen::VectorXd, Eigen::Vector2d>(A, x); }
454  if( x.type()==typeid(Eigen::Vector3d) ) { return Apply<Eigen::VectorXd, Eigen::Vector3d>(A, x); }
455  if( x.type()==typeid(Eigen::Vector4d) ) { return Apply<Eigen::VectorXd, Eigen::Vector4d>(A, x); }
456 
457  return Apply<Eigen::VectorXd, Eigen::VectorXd>(A, x);
458  }
459  if( A.type()==typeid(Eigen::VectorXf) ) {
460  if( x.type()==typeid(Eigen::Vector2f) ) { return Apply<Eigen::VectorXf, Eigen::Vector2f>(A, x); }
461  if( x.type()==typeid(Eigen::Vector3f) ) { return Apply<Eigen::VectorXf, Eigen::Vector3f>(A, x); }
462  if( x.type()==typeid(Eigen::Vector4f) ) { return Apply<Eigen::VectorXf, Eigen::Vector4f>(A, x); }
463 
464  return Apply<Eigen::VectorXf, Eigen::VectorXf>(A, x);
465  }
466  if( A.type()==typeid(Eigen::VectorXi) ) {
467  if( x.type()==typeid(Eigen::Vector2i) ) { return Apply<Eigen::VectorXi, Eigen::Vector2i>(A, x); }
468  if( x.type()==typeid(Eigen::Vector3i) ) { return Apply<Eigen::VectorXi, Eigen::Vector3i>(A, x); }
469  if( x.type()==typeid(Eigen::Vector4i) ) { return Apply<Eigen::VectorXi, Eigen::Vector4i>(A, x); }
470 
471  return Apply<Eigen::VectorXi, Eigen::VectorXi>(A, x);
472  }
473 
474  // something went wrong
475  assert(false);
476  return boost::none;
477 }
478 
479 boost::any EigenVectorAlgebra::ApplyInverse(boost::any const& A, boost::any const& x) {
480  if( A.type()==typeid(Eigen::Vector2d) ) {
481  if( x.type()==typeid(Eigen::Vector2d) ) { return ApplyInverse<Eigen::Vector2d, Eigen::Vector2d>(A, x); }
482  return ApplyInverse<Eigen::Vector2d, Eigen::VectorXd>(A, x);
483  }
484  if( A.type()==typeid(Eigen::Vector2f) ) {
485  if( x.type()==typeid(Eigen::Vector2f) ) { return ApplyInverse<Eigen::Vector2f, Eigen::Vector2f>(A, x); }
486  return ApplyInverse<Eigen::Vector2f, Eigen::VectorXf>(A, x);
487  }
488  if( A.type()==typeid(Eigen::Vector2i) ) {
489  if( x.type()==typeid(Eigen::Vector2i) ) { return ApplyInverse<Eigen::Vector2i, Eigen::Vector2i>(A, x); }
490  return ApplyInverse<Eigen::Vector2i, Eigen::VectorXi>(A, x);
491  }
492 
493  if( A.type()==typeid(Eigen::Vector3d) ) {
494  if( x.type()==typeid(Eigen::Vector3d) ) { return ApplyInverse<Eigen::Vector3d, Eigen::Vector3d>(A, x); }
495  return ApplyInverse<Eigen::Vector3d, Eigen::VectorXd>(A, x);
496  }
497  if( A.type()==typeid(Eigen::Vector3f) ) {
498  if( x.type()==typeid(Eigen::Vector3f) ) { return ApplyInverse<Eigen::Vector3f, Eigen::Vector3f>(A, x); }
499  return ApplyInverse<Eigen::Vector3f, Eigen::VectorXf>(A, x);
500  }
501  if( A.type()==typeid(Eigen::Vector3i) ) {
502  if( x.type()==typeid(Eigen::Vector3i) ) { return ApplyInverse<Eigen::Vector3i, Eigen::Vector3i>(A, x); }
503  return ApplyInverse<Eigen::Vector3i, Eigen::VectorXi>(A, x);
504  }
505 
506  if( A.type()==typeid(Eigen::Vector4d) ) {
507  if( x.type()==typeid(Eigen::Vector4d) ) { return ApplyInverse<Eigen::Vector4d, Eigen::Vector4d>(A, x); }
508  return ApplyInverse<Eigen::Vector4d, Eigen::VectorXd>(A, x);
509  }
510  if( A.type()==typeid(Eigen::Vector4f) ) {
511  if( x.type()==typeid(Eigen::Vector4f) ) { return ApplyInverse<Eigen::Vector4f, Eigen::Vector4f>(A, x); }
512  return ApplyInverse<Eigen::Vector4f, Eigen::VectorXf>(A, x);
513  }
514  if( A.type()==typeid(Eigen::Vector4i) ) {
515  if( x.type()==typeid(Eigen::Vector4i) ) { return ApplyInverse<Eigen::Vector4i, Eigen::Vector4i>(A, x); }
516  return ApplyInverse<Eigen::Vector4i, Eigen::VectorXi>(A, x);
517  }
518 
519  if( A.type()==typeid(Eigen::VectorXd) ) {
520  if( x.type()==typeid(Eigen::Vector2d) ) { return ApplyInverse<Eigen::VectorXd, Eigen::Vector2d>(A, x); }
521  if( x.type()==typeid(Eigen::Vector3d) ) { return ApplyInverse<Eigen::VectorXd, Eigen::Vector3d>(A, x); }
522  if( x.type()==typeid(Eigen::Vector4d) ) { return ApplyInverse<Eigen::VectorXd, Eigen::Vector4d>(A, x); }
523 
524  return ApplyInverse<Eigen::VectorXd, Eigen::VectorXd>(A, x);
525  }
526  if( A.type()==typeid(Eigen::VectorXf) ) {
527  if( x.type()==typeid(Eigen::Vector2f) ) { return ApplyInverse<Eigen::VectorXf, Eigen::Vector2f>(A, x); }
528  if( x.type()==typeid(Eigen::Vector3f) ) { return ApplyInverse<Eigen::VectorXf, Eigen::Vector3f>(A, x); }
529  if( x.type()==typeid(Eigen::Vector4f) ) { return ApplyInverse<Eigen::VectorXf, Eigen::Vector4f>(A, x); }
530 
531  return ApplyInverse<Eigen::VectorXf, Eigen::VectorXf>(A, x);
532  }
533  if( A.type()==typeid(Eigen::VectorXi) ) {
534  if( x.type()==typeid(Eigen::Vector2i) ) { return ApplyInverse<Eigen::VectorXi, Eigen::Vector2i>(A, x); }
535  if( x.type()==typeid(Eigen::Vector3i) ) { return ApplyInverse<Eigen::VectorXi, Eigen::Vector3i>(A, x); }
536  if( x.type()==typeid(Eigen::Vector4i) ) { return ApplyInverse<Eigen::VectorXi, Eigen::Vector4i>(A, x); }
537 
538  return ApplyInverse<Eigen::VectorXi, Eigen::VectorXi>(A, x);
539  }
540 
541  // something went wrong
542  assert(false);
543  return boost::none;
544 }
545 
546 boost::any EigenVectorAlgebra::Zero(std::type_info const& type, unsigned int const size) {
547  if( typeid(Eigen::Vector2d)==type ) { return (Eigen::Vector2d)Eigen::Vector2d::Zero(); }
548  if( typeid(Eigen::Vector2f)==type ) { return (Eigen::Vector2f)Eigen::Vector2f::Zero(); }
549  if( typeid(Eigen::Vector2i)==type ) { return (Eigen::Vector2i)Eigen::Vector2i::Zero(); }
550 
551  if( typeid(Eigen::Vector3d)==type ) { return (Eigen::Vector3d)Eigen::Vector3d::Zero(); }
552  if( typeid(Eigen::Vector3f)==type ) { return (Eigen::Vector3f)Eigen::Vector3f::Zero(); }
553  if( typeid(Eigen::Vector3i)==type ) { return (Eigen::Vector3i)Eigen::Vector3i::Zero(); }
554 
555  if( typeid(Eigen::Vector4d)==type ) { return (Eigen::Vector4d)Eigen::Vector4d::Zero(); }
556  if( typeid(Eigen::Vector4f)==type ) { return (Eigen::Vector4f)Eigen::Vector4f::Zero(); }
557  if( typeid(Eigen::Vector4i)==type ) { return (Eigen::Vector4i)Eigen::Vector4i::Zero(); }
558 
559  if( typeid(Eigen::VectorXd)==type ) { return (Eigen::VectorXd)Eigen::VectorXd::Zero(size); }
560  if( typeid(Eigen::VectorXf)==type ) { return (Eigen::VectorXf)Eigen::VectorXf::Zero(size); }
561  if( typeid(Eigen::VectorXi)==type ) { return (Eigen::VectorXi)Eigen::VectorXi::Zero(size); }
562 
563  // something went wrong
564  assert(false);
565  return boost::none;
566 }
567 
568 boost::any EigenVectorAlgebra::SquareRoot(boost::any const& obj) {
569  if( typeid(Eigen::Vector2d)==obj.type() ) { return (Eigen::Vector2d)boost::any_cast<Eigen::Vector2d>(obj).cwiseSqrt().matrix(); }
570  if( typeid(Eigen::Vector3d)==obj.type() ) { return (Eigen::Vector3d)boost::any_cast<Eigen::Vector3d>(obj).cwiseSqrt().matrix(); }
571  if( typeid(Eigen::Vector4d)==obj.type() ) { return (Eigen::Vector4d)boost::any_cast<Eigen::Vector4d>(obj).cwiseSqrt().matrix(); }
572  if( typeid(Eigen::VectorXd)==obj.type() ) { return (Eigen::VectorXd)boost::any_cast<Eigen::VectorXd>(obj).cwiseSqrt().matrix(); }
573 
574  if( typeid(Eigen::Vector2f)==obj.type() ) { return (Eigen::Vector2f)boost::any_cast<Eigen::Vector2f>(obj).cwiseSqrt().matrix(); }
575  if( typeid(Eigen::Vector3f)==obj.type() ) { return (Eigen::Vector3f)boost::any_cast<Eigen::Vector3f>(obj).cwiseSqrt().matrix(); }
576  if( typeid(Eigen::Vector4f)==obj.type() ) { return (Eigen::Vector4f)boost::any_cast<Eigen::Vector4f>(obj).cwiseSqrt().matrix(); }
577  if( typeid(Eigen::VectorXf)==obj.type() ) { return (Eigen::VectorXf)boost::any_cast<Eigen::VectorXf>(obj).cwiseSqrt().matrix(); }
578 
579  if( typeid(Eigen::Vector2i)==obj.type() ) { return (Eigen::Vector2i)boost::any_cast<Eigen::Vector2i>(obj).cwiseSqrt().matrix(); }
580  if( typeid(Eigen::Vector3i)==obj.type() ) { return (Eigen::Vector3i)boost::any_cast<Eigen::Vector3i>(obj).cwiseSqrt().matrix(); }
581  if( typeid(Eigen::Vector4i)==obj.type() ) { return (Eigen::Vector4i)boost::any_cast<Eigen::Vector4i>(obj).cwiseSqrt().matrix(); }
582  if( typeid(Eigen::VectorXi)==obj.type() ) { return (Eigen::VectorXi)boost::any_cast<Eigen::VectorXi>(obj).cwiseSqrt().matrix(); }
583 
584  // something went wrong
585  assert(false);
586  return boost::none;
587 }
588 
589 double EigenVectorAlgebra::LogDeterminate(boost::any const& obj) {
590  if( typeid(Eigen::Vector2d)==obj.type() ) { return LogDeterminate<Eigen::Vector2d>(obj); }
591  if( typeid(Eigen::Vector2f)==obj.type() ) { return LogDeterminate<Eigen::Vector2f>(obj); }
592 
593  if( typeid(Eigen::Vector3d)==obj.type() ) { return LogDeterminate<Eigen::Vector3d>(obj); }
594  if( typeid(Eigen::Vector3f)==obj.type() ) { return LogDeterminate<Eigen::Vector3f>(obj); }
595 
596  if( typeid(Eigen::Vector4d)==obj.type() ) { return LogDeterminate<Eigen::Vector4d>(obj); }
597  if( typeid(Eigen::Vector4f)==obj.type() ) { return LogDeterminate<Eigen::Vector4f>(obj); }
598 
599  if( typeid(Eigen::VectorXd)==obj.type() ) { return LogDeterminate<Eigen::VectorXd>(obj); }
600  if( typeid(Eigen::VectorXf)==obj.type() ) { return LogDeterminate<Eigen::VectorXf>(obj); }
601 
602  // something went wrong
603  assert(false);
604  return -1.0;
605 }