diff --git a/.cproject b/.cproject
index bd149acf7..8c01c6610 100644
--- a/.cproject
+++ b/.cproject
@@ -7,8 +7,8 @@
-
+
@@ -20,8 +20,8 @@
-
-
+
+
@@ -34,9 +34,7 @@
-
+
@@ -131,8 +129,8 @@
-
-
+
+
@@ -214,8 +212,8 @@
-
-
+
+
@@ -300,15 +298,23 @@
-
+
make
-j2
- all
+ check
true
true
true
-
+
+ make
+ -j2
+ tests/testSPQRUtil.run
+ true
+ true
+ true
+
+
make
-j2
clean
@@ -316,190 +322,6 @@
true
true
-
- make
- -j2
- check
- true
- true
- true
-
-
- make
- -j2
- testGaussianConditional.run
- true
- true
- true
-
-
- make
- -j2
- testGaussianFactor.run
- true
- true
- true
-
-
- make
- -j2
- timeGaussianFactor.run
- true
- true
- true
-
-
- make
- -j2
- timeVectorConfig.run
- true
- true
- true
-
-
- make
- -j2
- testVectorBTree.run
- true
- true
- true
-
-
- make
- -j2
- testVectorMap.run
- true
- true
- true
-
-
- make
- -j2
- testNoiseModel.run
- true
- true
- true
-
-
- make
- -j2
- testBayesNetPreconditioner.run
- true
- true
- true
-
-
- make
-
- testErrors.run
- true
- false
- true
-
-
- make
- -j2
- tests/testLieScalar.run
- true
- true
- true
-
-
- make
- -j2
- tests/testSPQRUtil.valgrind
- true
- true
- true
-
-
- make
- -j2
- check
- true
- true
- true
-
-
- make
- -j2
- check
- true
- true
- true
-
-
- make
- -j2
- clean
- true
- true
- true
-
-
- make
- -j2
- testBTree.run
- true
- true
- true
-
-
- make
- -j2
- testDSF.run
- true
- true
- true
-
-
- make
- -j2
- testDSFVector.run
- true
- true
- true
-
-
- make
- -j2
- testMatrix.run
- true
- true
- true
-
-
- make
- -j2
- testSPQRUtil.run
- true
- true
- true
-
-
- make
- -j2
- testVector.run
- true
- true
- true
-
-
- make
- -j2
- timeMatrix.run
- true
- true
- true
-
-
- make
- -j2
- all
- true
- true
- true
-
make
-j2
@@ -524,10 +346,10 @@
false
true
-
+
make
- testBayesTree.run
+ tests/testBayesTree.run
true
false
true
@@ -588,10 +410,10 @@
false
true
-
+
make
- testSymbolicFactor.run
+ tests/testSymbolicFactor.run
true
false
true
@@ -612,34 +434,18 @@
true
true
-
+
make
- -j2
- check
+
+ tests/testBayesTree
true
- true
+ false
true
-
+
make
-j2
- testClusterTree.run
- true
- true
- true
-
-
- make
- -j2
- testJunctionTree.run
- true
- true
- true
-
-
- make
- -j2
- testEliminationTree.run
+ testGaussianFactor.run
true
true
true
@@ -821,6 +627,462 @@
true
true
+
+ make
+ -j2
+ testGaussianJunctionTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeCalibratedCamera.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeRot3.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ install
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVSLAMGraph
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianJunctionTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactorGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeGaussianFactorGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testTupleConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testFusionTupleConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testSerialization.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactorGraph
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianJunctionTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ SimpleRotation.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianConditional.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeVectorConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVectorBTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVectorMap.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testNoiseModel.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testBayesNetPreconditioner.run
+ true
+ true
+ true
+
+
+ make
+
+ testErrors.run
+ true
+ false
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testGaussianJunctionTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testGaussianConditional.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testBTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testDSF.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testDSFVector.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testMatrix.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testSPQRUtil.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVector.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeMatrix.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testClusterTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testJunctionTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testEliminationTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testSymbolicFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testVariableSlots.run
+ true
+ true
+ true
+
make
-j2
@@ -901,46 +1163,6 @@
true
true
-
- make
- -j2
- all
- true
- true
- true
-
-
- make
- -j2
- clean
- true
- true
- true
-
-
- make
- -j2
- all
- true
- true
- true
-
-
- make
- -j2
- clean
- true
- true
- true
-
-
- make
- -j2
- clean all
- true
- true
- true
-
make
-j2
@@ -1074,50 +1296,34 @@
false
true
-
+
make
-j2
- check
+ tests/testGaussianISAM2
true
true
true
-
+
make
-j2
- tests/testPose2.run
+ SimpleRotation.run
true
true
true
-
+
make
-j2
- tests/testTensors.run
+ SLAMSelfContained.run
true
true
true
-
+
make
-j2
- tests/testFundamental.run
- true
- true
- true
-
-
- make
- -j2
- tests/testHomography2.run
- true
- true
- true
-
-
- make
- -j2
- clean
+ PlanarSLAMExample.run
true
true
true
@@ -1130,15 +1336,14 @@
true
true
-
+
make
- -j2
- install
+ tests/testGaussianISAM2
true
- true
+ false
true
-
+
make
-j2
check
@@ -1146,7 +1351,23 @@
true
true
-
+
+ make
+ -j2
+ tests/testLieConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ install
+ true
+ true
+ true
+
+
make
-j2
clean
@@ -1154,6 +1375,70 @@
true
true
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ dist
+ true
+ true
+ true
+
+
+ make
+ -j2
+ inference/tests/testEliminationTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ slam/tests/testGaussianISAM2
+ true
+ true
+ true
+
+
+ make
+ -j2
+ inference/tests/testVariableIndex
+ true
+ true
+ true
+
+
+ make
+ -j2
+ inference/tests/testJunctionTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ linear/tests/testGaussianJunctionTree
+ true
+ true
+ true
+
make
-j2
@@ -1250,6 +1535,1397 @@
true
true
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ install
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testSPQRUtil.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -k
+ check
+ true
+ false
+ true
+
+
+ make
+
+ tests/testBayesTree.run
+ true
+ false
+ true
+
+
+ make
+
+ testBinaryBayesNet.run
+ true
+ false
+ true
+
+
+ make
+ -j2
+ testFactorGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testISAM.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testJunctionTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testKey.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testOrdering.run
+ true
+ true
+ true
+
+
+ make
+
+ testSymbolicBayesNet.run
+ true
+ false
+ true
+
+
+ make
+
+ tests/testSymbolicFactor.run
+ true
+ false
+ true
+
+
+ make
+
+ testSymbolicFactorGraph.run
+ true
+ false
+ true
+
+
+ make
+ -j2
+ timeSymbolMaps.run
+ true
+ true
+ true
+
+
+ make
+
+ tests/testBayesTree
+ true
+ false
+ true
+
+
+ make
+ -j2
+ testGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactorGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianISAM.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianISAM2.run
+ true
+ true
+ true
+
+
+ make
+ testGraph.run
+ true
+ false
+ true
+
+
+ make
+ -j2
+ testIterative.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testNonlinearEquality.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testNonlinearFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testNonlinearFactorGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testNonlinearOptimizer.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testSQP.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testSubgraphPreconditioner.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testTupleConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeGaussianFactorGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testBayesNetPreconditioner.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testConstraintOptimizer.run
+ true
+ true
+ true
+
+
+ make
+ testInference.run
+ true
+ false
+ true
+
+
+ make
+ testGaussianBayesNet.run
+ true
+ false
+ true
+
+
+ make
+ testGaussianFactor.run
+ true
+ false
+ true
+
+
+ make
+ testJunctionTree.run
+ true
+ false
+ true
+
+
+ make
+ testSymbolicBayesNet.run
+ true
+ false
+ true
+
+
+ make
+ testSymbolicFactorGraph.run
+ true
+ false
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianJunctionTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeCalibratedCamera.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeRot3.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ install
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVSLAMGraph
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianJunctionTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactorGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeGaussianFactorGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testTupleConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testFusionTupleConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testSerialization.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactorGraph
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianJunctionTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ SimpleRotation.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianConditional.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeVectorConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVectorBTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVectorMap.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testNoiseModel.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testBayesNetPreconditioner.run
+ true
+ true
+ true
+
+
+ make
+
+ testErrors.run
+ true
+ false
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testGaussianJunctionTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testGaussianConditional.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testBTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testDSF.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testDSFVector.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testMatrix.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testSPQRUtil.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVector.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeMatrix.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testGaussianFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testClusterTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testJunctionTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testEliminationTree.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testSymbolicFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testVariableSlots.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testNonlinearConstraint.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testLieConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testConstraintOptimizer.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ install
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ all
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPlanarSLAM.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose2Config.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose2Factor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose2Prior.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose2SLAM.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose3Config.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose3SLAM.run
+ true
+ true
+ true
+
+
+ make
+ testSimulated2DOriented.run
+ true
+ false
+ true
+
+
+ make
+ -j2
+ testVSLAMConfig.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVSLAMFactor.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testVSLAMGraph.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose3Factor.run
+ true
+ true
+ true
+
+
+ make
+ testSimulated2D.run
+ true
+ false
+ true
+
+
+ make
+ testSimulated3D.run
+ true
+ false
+ true
+
+
+ make
+ -j2
+ tests/testGaussianISAM2
+ true
+ true
+ true
+
+
+ make
+ -j2
+ SimpleRotation.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ SLAMSelfContained.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ PlanarSLAMExample.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ tests/testGaussianISAM2
+ true
+ false
+ true
+
+
+ make
+ -j2
+ check
+ true
+ true
+ true
+
+
+ make
+ -j2
+ tests/testLieConfig.run
+ true
+ true
+ true
+
make
-j2
@@ -1290,7 +2966,119 @@
true
true
-
+
+ make
+ -j2
+ inference/tests/testEliminationTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ slam/tests/testGaussianISAM2
+ true
+ true
+ true
+
+
+ make
+ -j2
+ inference/tests/testVariableIndex
+ true
+ true
+ true
+
+
+ make
+ -j2
+ inference/tests/testJunctionTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ linear/tests/testGaussianJunctionTree
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testRot3.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testRot2.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose3.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ timeRot3.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPose2.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testCal3_S2.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testSimpleCamera.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testHomography2.run
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testCalibratedCamera.run
+ true
+ true
+ true
+
+
make
-j2
check
@@ -1298,10 +3086,18 @@
true
true
-
+
make
-j2
- testSubgraphPreconditioner.run
+ clean
+ true
+ true
+ true
+
+
+ make
+ -j2
+ testPoint2.run
true
true
true
diff --git a/.project b/.project
index 893b1174b..d20fd358e 100644
--- a/.project
+++ b/.project
@@ -29,6 +29,10 @@
org.eclipse.cdt.make.core.buildCommand
make
+
+ org.eclipse.cdt.make.core.buildLocation
+ ${workspace_loc:/gtsam/build}
+
org.eclipse.cdt.make.core.cleanBuildTarget
clean
diff --git a/.settings/org.eclipse.cdt.core.prefs b/.settings/org.eclipse.cdt.core.prefs
index 448d0dcc5..a915be654 100644
--- a/.settings/org.eclipse.cdt.core.prefs
+++ b/.settings/org.eclipse.cdt.core.prefs
@@ -1,4 +1,6 @@
-#Wed Aug 18 18:00:45 EDT 2010
+#Wed Oct 06 11:57:41 EDT 2010
eclipse.preferences.version=1
+environment/project/cdt.managedbuild.toolchain.gnu.macosx.base.1359703544.1441575890/append=true
+environment/project/cdt.managedbuild.toolchain.gnu.macosx.base.1359703544.1441575890/appendContributed=true
environment/project/cdt.managedbuild.toolchain.gnu.macosx.base.1359703544/append=true
environment/project/cdt.managedbuild.toolchain.gnu.macosx.base.1359703544/appendContributed=true
diff --git a/CppUnitLite/TestRegistry.cpp b/CppUnitLite/TestRegistry.cpp
index 47a7e5736..c2fb05a63 100644
--- a/CppUnitLite/TestRegistry.cpp
+++ b/CppUnitLite/TestRegistry.cpp
@@ -31,12 +31,15 @@ TestRegistry& TestRegistry::instance ()
void TestRegistry::add (Test *test)
{
if (tests == 0) {
+ test->setNext(0);
tests = test;
+ lastTest = test;
return;
}
- test->setNext (tests);
- tests = test;
+ test->setNext (0);
+ lastTest->setNext(test);
+ lastTest = test;
}
diff --git a/CppUnitLite/TestRegistry.h b/CppUnitLite/TestRegistry.h
index 3a477c947..0af76c72d 100644
--- a/CppUnitLite/TestRegistry.h
+++ b/CppUnitLite/TestRegistry.h
@@ -29,6 +29,7 @@ private:
Test *tests;
+ Test *lastTest;
};
diff --git a/Makefile.am b/Makefile.am
index 7e97bf83a..a9cb84897 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -29,9 +29,14 @@ endif
# The following lines specify the actual shared library to be built with libtool
lib_LTLIBRARIES = libgtsam.la
-libgtsam_la_SOURCES =
+libgtsam_la_SOURCES =
+nodist_EXTRA_libgtsam_la_SOURCES = dummy.cxx
libgtsam_la_LIBADD = $(SUBLIBS)
-libgtsam_la_LDFLAGS = -version-info 0:0:0
+libgtsam_la_LDFLAGS = -no-undefined -version-info 0:0:0
+
+if USE_ACCELERATE_MACOS
+libgtsam_la_LDFLAGS += -Wl,/System/Library/Frameworks/Accelerate.framework/Accelerate
+endif
# Add these files to make sure they're in the distribution
noinst_HEADERS = gtsam.h
diff --git a/base/Makefile.am b/base/Makefile.am
index 6742c15f4..632d6e507 100644
--- a/base/Makefile.am
+++ b/base/Makefile.am
@@ -23,7 +23,8 @@ check_PROGRAMS += tests/testSPQRUtil
endif
# Testing
-headers += Testable.h TestableAssertions.h numericalDerivative.h
+headers += Testable.h TestableAssertions.h numericalDerivative.h
+sources += timing.cpp
# Lie Groups
headers += Lie.h Lie-inl.h lieProxies.h LieScalar.h
@@ -36,7 +37,7 @@ sources += DSFVector.cpp
check_PROGRAMS += tests/testBTree tests/testDSF tests/testDSFVector
# Timing tests
-noinst_PROGRAMS = tests/timeMatrix
+noinst_PROGRAMS = tests/timeMatrix tests/timeublas
#----------------------------------------------------------------------------------------------------
# Create a libtool library that is not installed
@@ -85,7 +86,7 @@ AM_LDFLAGS += -llapack
endif
if USE_ACCELERATE_MACOS
-AM_LDFLAGS += -framework Accelerate
+AM_LDFLAGS += -Wl,/System/Library/Frameworks/Accelerate.framework/Accelerate
endif
# rule to run an executable
diff --git a/base/Matrix-inl.h b/base/Matrix-inl.h
new file mode 100644
index 000000000..a68aca318
--- /dev/null
+++ b/base/Matrix-inl.h
@@ -0,0 +1,98 @@
+/**
+ * @file Matrix-inl.h
+ * @brief
+ * @author Richard Roberts
+ * @created Sep 26, 2010
+ */
+
+#pragma once
+
+#include
+
+#include
+
+namespace gtsam {
+
+using namespace std;
+
+/* ************************************************************************* */
+/**
+ * backSubstitute U*x=b
+ * @param U an upper triangular matrix
+ * @param b an RHS vector
+ * @return the solution x of U*x=b
+ */
+template
+Vector backSubstituteUpper(const boost::numeric::ublas::matrix_expression& _U,
+ const boost::numeric::ublas::vector_expression& _b, bool unit=false) {
+ const MatrixAE& U((const MatrixAE&)_U);
+ const VectorAE& b((const VectorAE&)_b);
+ size_t n = U.size2();
+#ifndef NDEBUG
+ size_t m = U.size1();
+ if (m!=n)
+ throw invalid_argument("backSubstituteUpper: U must be square");
+#endif
+
+ Vector result(n);
+ for (size_t i = n; i > 0; i--) {
+ double zi = b(i-1);
+ for (size_t j = i+1; j <= n; j++)
+ zi -= U(i-1,j-1) * result(j-1);
+#ifndef NDEBUG
+ if(!unit && fabs(U(i-1,i-1)) <= numeric_limits::epsilon()) {
+ stringstream ss;
+ ss << "backSubstituteUpper: U is singular,\n";
+ print(U, "U: ", ss);
+ throw invalid_argument(ss.str());
+ }
+#endif
+ if (!unit) zi /= U(i-1,i-1);
+ result(i-1) = zi;
+ }
+
+ return result;
+}
+
+/* ************************************************************************* */
+/**
+ * backSubstitute x'*U=b'
+ * @param U an upper triangular matrix
+ * @param b an RHS vector
+ * @param unit, set true if unit triangular
+ * @return the solution x of x'*U=b'
+ * TODO: use boost
+ */
+template
+Vector backSubstituteUpper(const boost::numeric::ublas::vector_expression& _b,
+ const boost::numeric::ublas::matrix_expression& _U, bool unit=false) {
+ const VectorAE& b((const VectorAE&)_b);
+ const MatrixAE& U((const MatrixAE&)_U);
+ size_t n = U.size2();
+#ifndef NDEBUG
+ size_t m = U.size1();
+ if (m!=n)
+ throw invalid_argument("backSubstituteUpper: U must be square");
+#endif
+
+ Vector result(n);
+ for (size_t i = 1; i <= n; i++) {
+ double zi = b(i-1);
+ for (size_t j = 1; j < i; j++)
+ zi -= U(j-1,i-1) * result(j-1);
+#ifndef NDEBUG
+ if(!unit && fabs(U(i-1,i-1)) <= numeric_limits::epsilon()) {
+ stringstream ss;
+ ss << "backSubstituteUpper: U is singular,\n";
+ print(U, "U: ", ss);
+ throw invalid_argument(ss.str());
+ }
+#endif
+ if (!unit) zi /= U(i-1,i-1);
+ result(i-1) = zi;
+ }
+
+ return result;
+}
+
+}
diff --git a/base/Matrix.cpp b/base/Matrix.cpp
index 4bb0aaa2c..facd76c79 100644
--- a/base/Matrix.cpp
+++ b/base/Matrix.cpp
@@ -38,7 +38,7 @@ extern "C" {
#include
#endif
-#include
+#include
#include
#include
@@ -47,6 +47,12 @@ namespace ublas = boost::numeric::ublas;
namespace gtsam {
+/** Explicit instantiations of template functions for standard types */
+template Vector backSubstituteUpper(const boost::numeric::ublas::matrix_expression& U,
+ const boost::numeric::ublas::vector_expression& b, bool unit);
+template Vector backSubstituteUpper(const boost::numeric::ublas::vector_expression& b,
+ const boost::numeric::ublas::matrix_expression& U, bool unit);
+
/* ************************************************************************* */
Matrix Matrix_( size_t m, size_t n, const double* const data) {
Matrix A(m,n);
@@ -115,17 +121,25 @@ bool equal_with_abs_tol(const Matrix& A, const Matrix& B, double tol) {
size_t n1 = A.size2(), m1 = A.size1();
size_t n2 = B.size2(), m2 = B.size1();
- if(m1!=m2 || n1!=n2) return false;
+ bool equal = true;
- for(size_t i=0; i tol)
- return false;
+ equal = false;
+ else if(fabs(A(i,j) - B(i,j)) > tol)
+ equal = false;
}
- return true;
+// if(!equal) {
+// cout << "not equal:" << endl;
+// print(A,"expected = ");
+// print(B,"actual = ");
+// }
+
+ return equal;
}
/* ************************************************************************* */
@@ -709,63 +723,63 @@ void householder(Matrix &A) {
#endif
#endif
-/* ************************************************************************* */
-Vector backSubstituteUpper(const Matrix& U, const Vector& b, bool unit) {
- size_t n = U.size2();
-#ifndef NDEBUG
- size_t m = U.size1();
- if (m!=n)
- throw invalid_argument("backSubstituteUpper: U must be square");
-#endif
+///* ************************************************************************* */
+//Vector backSubstituteUpper(const Matrix& U, const Vector& b, bool unit) {
+// size_t n = U.size2();
+//#ifndef NDEBUG
+// size_t m = U.size1();
+// if (m!=n)
+// throw invalid_argument("backSubstituteUpper: U must be square");
+//#endif
+//
+// Vector result(n);
+// for (size_t i = n; i > 0; i--) {
+// double zi = b(i-1);
+// for (size_t j = i+1; j <= n; j++)
+// zi -= U(i-1,j-1) * result(j-1);
+//#ifndef NDEBUG
+// if(!unit && fabs(U(i-1,i-1)) <= numeric_limits::epsilon()) {
+// stringstream ss;
+// ss << "backSubstituteUpper: U is singular,\n";
+// print(U, "U: ", ss);
+// throw invalid_argument(ss.str());
+// }
+//#endif
+// if (!unit) zi /= U(i-1,i-1);
+// result(i-1) = zi;
+// }
+//
+// return result;
+//}
- Vector result(n);
- for (size_t i = n; i > 0; i--) {
- double zi = b(i-1);
- for (size_t j = i+1; j <= n; j++)
- zi -= U(i-1,j-1) * result(j-1);
-#ifndef NDEBUG
- if(!unit && fabs(U(i-1,i-1)) <= numeric_limits::epsilon()) {
- stringstream ss;
- ss << "backSubstituteUpper: U is singular,\n";
- print(U, "U: ", ss);
- throw invalid_argument(ss.str());
- }
-#endif
- if (!unit) zi /= U(i-1,i-1);
- result(i-1) = zi;
- }
-
- return result;
-}
-
-/* ************************************************************************* */
-Vector backSubstituteUpper(const Vector& b, const Matrix& U, bool unit) {
- size_t n = U.size2();
-#ifndef NDEBUG
- size_t m = U.size1();
- if (m!=n)
- throw invalid_argument("backSubstituteUpper: U must be square");
-#endif
-
- Vector result(n);
- for (size_t i = 1; i <= n; i++) {
- double zi = b(i-1);
- for (size_t j = 1; j < i; j++)
- zi -= U(j-1,i-1) * result(j-1);
-#ifndef NDEBUG
- if(!unit && fabs(U(i-1,i-1)) <= numeric_limits::epsilon()) {
- stringstream ss;
- ss << "backSubstituteUpper: U is singular,\n";
- print(U, "U: ", ss);
- throw invalid_argument(ss.str());
- }
-#endif
- if (!unit) zi /= U(i-1,i-1);
- result(i-1) = zi;
- }
-
- return result;
-}
+///* ************************************************************************* */
+//Vector backSubstituteUpper(const Vector& b, const Matrix& U, bool unit) {
+// size_t n = U.size2();
+//#ifndef NDEBUG
+// size_t m = U.size1();
+// if (m!=n)
+// throw invalid_argument("backSubstituteUpper: U must be square");
+//#endif
+//
+// Vector result(n);
+// for (size_t i = 1; i <= n; i++) {
+// double zi = b(i-1);
+// for (size_t j = 1; j < i; j++)
+// zi -= U(j-1,i-1) * result(j-1);
+//#ifndef NDEBUG
+// if(!unit && fabs(U(i-1,i-1)) <= numeric_limits::epsilon()) {
+// stringstream ss;
+// ss << "backSubstituteUpper: U is singular,\n";
+// print(U, "U: ", ss);
+// throw invalid_argument(ss.str());
+// }
+//#endif
+// if (!unit) zi /= U(i-1,i-1);
+// result(i-1) = zi;
+// }
+//
+// return result;
+//}
/* ************************************************************************* */
Vector backSubstituteLower(const Matrix& L, const Vector& b, bool unit) {
@@ -885,6 +899,15 @@ void vector_scale_inplace(const Vector& v, Matrix& A) {
}
}
+/* ************************************************************************* */
+// row scaling, in-place
+void vector_scale_inplace(const Vector& v, MatrixColMajor& A) {
+ size_t m = A.size1(); size_t n = A.size2();
+ double *Aij = A.data().begin();
+ for (size_t j=0; j Matrix;
+typedef boost::numeric::ublas::matrix MatrixColMajor;
#endif
namespace gtsam {
@@ -274,7 +275,9 @@ void householder(Matrix &A);
* @return the solution x of U*x=b
* TODO: use boost
*/
-Vector backSubstituteUpper(const Matrix& U, const Vector& b, bool unit=false);
+template
+Vector backSubstituteUpper(const boost::numeric::ublas::matrix_expression& U,
+ const boost::numeric::ublas::vector_expression& b, bool unit=false);
/**
* backSubstitute x'*U=b'
@@ -284,7 +287,9 @@ Vector backSubstituteUpper(const Matrix& U, const Vector& b, bool unit=false);
* @return the solution x of x'*U=b'
* TODO: use boost
*/
-Vector backSubstituteUpper(const Vector& b, const Matrix& U, bool unit=false);
+template
+Vector backSubstituteUpper(const boost::numeric::ublas::vector_expression& b,
+ const boost::numeric::ublas::matrix_expression& U, bool unit=false);
/**
* backSubstitute L*x=b
@@ -321,6 +326,7 @@ Matrix collect(size_t nrMatrices, ...);
* Arguments (Matrix, Vector) scales the columns,
* (Vector, Matrix) scales the rows
*/
+void vector_scale_inplace(const Vector& v, MatrixColMajor& A); // row
void vector_scale_inplace(const Vector& v, Matrix& A); // row
Matrix vector_scale(const Vector& v, const Matrix& A); // row
Matrix vector_scale(const Matrix& A, const Vector& v); // column
diff --git a/base/SPQRUtil.cpp b/base/SPQRUtil.cpp
index 3552009ce..0de6db529 100644
--- a/base/SPQRUtil.cpp
+++ b/base/SPQRUtil.cpp
@@ -6,10 +6,14 @@
* Description: the utility functions for SPQR
*/
-#include