From dfb3e60171ad912fe17193c7af59c525b3633b7c Mon Sep 17 00:00:00 2001 From: Alex Cunningham Date: Sat, 4 Jan 2014 20:01:05 -0500 Subject: [PATCH] Fixed issue with serialization by actively changing inf/nan values to zero in constrained noisemodel. Updated WhitenInPlace() and distance(). Apparently this caused a bunch of other unit tests to fail, though. --- gtsam/linear/NoiseModel.cpp | 48 +++++++++++++++---- gtsam/linear/NoiseModel.h | 31 ++++++------ gtsam/linear/tests/testNoiseModel.cpp | 5 +- .../linear/tests/testSerializationLinear.cpp | 12 ++--- 4 files changed, 65 insertions(+), 31 deletions(-) diff --git a/gtsam/linear/NoiseModel.cpp b/gtsam/linear/NoiseModel.cpp index 359ce9968..6afd23f55 100644 --- a/gtsam/linear/NoiseModel.cpp +++ b/gtsam/linear/NoiseModel.cpp @@ -166,9 +166,11 @@ void Gaussian::WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const // Diagonal /* ************************************************************************* */ Diagonal::Diagonal() : - Gaussian(1), sigmas_(ones(1)), invsigmas_(ones(1)), precisions_(ones(1)) { + Gaussian(1)//, sigmas_(ones(1)), invsigmas_(ones(1)), precisions_(ones(1)) +{ } +/* ************************************************************************* */ Diagonal::Diagonal(const Vector& sigmas) : Gaussian(sigmas.size()), sigmas_(sigmas), invsigmas_(reciprocal(sigmas)), precisions_( emul(invsigmas_, invsigmas_)) { @@ -229,6 +231,31 @@ void Diagonal::WhitenInPlace(Eigen::Block H) const { /* ************************************************************************* */ // Constrained +/* ************************************************************************* */ + +/* ************************************************************************* */ +Constrained::Constrained(const Vector& sigmas) + : Diagonal(sigmas), mu_(repeat(sigmas.size(), 1000.0)) { + for (int i=0; imu())); EXPECT(assert_equal(gtsam::repeat(d, 0), actual->sigmas())); - double Inf = numeric_limits::infinity(); - EXPECT(assert_equal(gtsam::repeat(d, Inf), actual->invsigmas())); - EXPECT(assert_equal(gtsam::repeat(d, Inf), actual->precisions())); + EXPECT(assert_equal(gtsam::repeat(d, 0), actual->invsigmas())); // Actually zero as dummy value + EXPECT(assert_equal(gtsam::repeat(d, 0), actual->precisions())); // Actually zero as dummy value actual = Constrained::All(d, m); EXPECT(assert_equal(gtsam::repeat(d, m), actual->mu())); diff --git a/gtsam/linear/tests/testSerializationLinear.cpp b/gtsam/linear/tests/testSerializationLinear.cpp index 9432cf326..5e08a7827 100644 --- a/gtsam/linear/tests/testSerializationLinear.cpp +++ b/gtsam/linear/tests/testSerializationLinear.cpp @@ -75,8 +75,8 @@ TEST (Serialization, noiseModels) { EXPECT(equalsDereferencedBinary(unit3)); EXPECT(equalsDereferencedBinary(constrained3)); - EXPECT(equalsDereferenced(constrained3)); // FAILS: "Exception: input stream error" - there are inf's that cannot be deserialized - EXPECT(equalsDereferencedXML(constrained3)); // FAILS: "Exception: input stream error" + EXPECT(equalsDereferenced(constrained3)); + EXPECT(equalsDereferencedXML(constrained3)); } /* ************************************************************************* */ @@ -103,8 +103,8 @@ TEST (Serialization, SharedNoiseModel_noiseModels) { EXPECT(equalsDereferencedBinary(unit3)); EXPECT(equalsDereferencedBinary(constrained3)); - EXPECT(equalsDereferenced(constrained3)); // FAILS: "Exception: input stream error" - EXPECT(equalsDereferencedXML(constrained3)); // FAILS: "Exception: input stream error" + EXPECT(equalsDereferenced(constrained3)); + EXPECT(equalsDereferencedXML(constrained3)); } /* ************************************************************************* */ @@ -122,8 +122,8 @@ TEST (Serialization, SharedDiagonal_noiseModels) { EXPECT(equalsDereferencedBinary(unit3)); EXPECT(equalsDereferencedBinary(constrained3)); - EXPECT(equalsDereferenced(constrained3)); // FAILS: "Exception: input stream error" - EXPECT(equalsDereferencedXML(constrained3)); // FAILS: "Exception: input stream error" + EXPECT(equalsDereferenced(constrained3)); + EXPECT(equalsDereferencedXML(constrained3)); } /* Create GUIDs for factors */