From b45ba003cad605bd157f98b8fa88a9033aac44e7 Mon Sep 17 00:00:00 2001 From: Frank Dellaert Date: Thu, 26 Sep 2024 11:29:03 -0700 Subject: [PATCH] Simplify all call sites --- gtsam/hybrid/HybridGaussianFactorGraph.cpp | 2 +- gtsam/hybrid/tests/TinyHybridExample.h | 3 +- gtsam/hybrid/tests/testGaussianMixture.cpp | 6 +-- gtsam/hybrid/tests/testHybridBayesNet.cpp | 6 +-- gtsam/hybrid/tests/testHybridConditional.cpp | 2 + gtsam/hybrid/tests/testHybridEstimation.cpp | 10 +--- .../tests/testHybridGaussianConditional.cpp | 6 +-- .../hybrid/tests/testHybridGaussianFactor.cpp | 7 ++- .../tests/testHybridGaussianFactorGraph.cpp | 46 +++++-------------- .../hybrid/tests/testSerializationHybrid.cpp | 4 +- 10 files changed, 27 insertions(+), 65 deletions(-) diff --git a/gtsam/hybrid/HybridGaussianFactorGraph.cpp b/gtsam/hybrid/HybridGaussianFactorGraph.cpp index 82828bb41..540ee446b 100644 --- a/gtsam/hybrid/HybridGaussianFactorGraph.cpp +++ b/gtsam/hybrid/HybridGaussianFactorGraph.cpp @@ -414,7 +414,7 @@ hybridElimination(const HybridGaussianFactorGraph &factors, HybridGaussianConditional::Conditionals conditionals( eliminationResults, [](const Result &pair) { return pair.first; }); auto hybridGaussian = std::make_shared( - frontalKeys, continuousSeparator, discreteSeparator, conditionals); + discreteSeparator, conditionals); return {std::make_shared(hybridGaussian), newFactor}; } diff --git a/gtsam/hybrid/tests/TinyHybridExample.h b/gtsam/hybrid/tests/TinyHybridExample.h index 09905bf79..f2ff7dde2 100644 --- a/gtsam/hybrid/tests/TinyHybridExample.h +++ b/gtsam/hybrid/tests/TinyHybridExample.h @@ -46,8 +46,7 @@ inline HybridBayesNet createHybridBayesNet(size_t num_measurements = 1, std::vector conditionals{ GaussianConditional::sharedMeanAndStddev(Z(i), I_1x1, X(0), Z_1x1, 0.5), GaussianConditional::sharedMeanAndStddev(Z(i), I_1x1, X(0), Z_1x1, 3)}; - bayesNet.emplace_shared( - KeyVector{Z(i)}, KeyVector{X(0)}, mode_i, conditionals); + bayesNet.emplace_shared(mode_i, conditionals); } // Create prior on X(0). diff --git a/gtsam/hybrid/tests/testGaussianMixture.cpp b/gtsam/hybrid/tests/testGaussianMixture.cpp index be4ba2ff4..cde7e4063 100644 --- a/gtsam/hybrid/tests/testGaussianMixture.cpp +++ b/gtsam/hybrid/tests/testGaussianMixture.cpp @@ -43,9 +43,6 @@ const DiscreteValues m1Assignment{{M(0), 1}}; DiscreteConditional::shared_ptr mixing = std::make_shared(m, "60/40"); -// define Continuous keys -const KeyVector continuousKeys{Z(0)}; - /** * Create a simple Gaussian Mixture Model represented as p(z|m)P(m) * where m is a discrete variable and z is a continuous variable. @@ -61,8 +58,7 @@ HybridBayesNet GaussianMixtureModel(double mu0, double mu1, double sigma0, model0), c1 = std::make_shared(Z(0), Vector1(mu1), I_1x1, model1); - hbn.emplace_shared(continuousKeys, KeyVector{}, m, - std::vector{c0, c1}); + hbn.emplace_shared(m, std::vector{c0, c1}); hbn.push_back(mixing); return hbn; } diff --git a/gtsam/hybrid/tests/testHybridBayesNet.cpp b/gtsam/hybrid/tests/testHybridBayesNet.cpp index 6e23db91e..b049b03fd 100644 --- a/gtsam/hybrid/tests/testHybridBayesNet.cpp +++ b/gtsam/hybrid/tests/testHybridBayesNet.cpp @@ -108,8 +108,7 @@ TEST(HybridBayesNet, evaluateHybrid) { HybridBayesNet bayesNet; bayesNet.push_back(continuousConditional); bayesNet.emplace_shared( - KeyVector{X(1)}, KeyVector{}, Asia, - std::vector{conditional0, conditional1}); + Asia, std::vector{conditional0, conditional1}); bayesNet.emplace_shared(Asia, "99/1"); // Create values at which to evaluate. @@ -169,8 +168,7 @@ TEST(HybridBayesNet, Error) { X(1), Vector1::Constant(2), I_1x1, model1); auto gm = std::make_shared( - KeyVector{X(1)}, KeyVector{}, Asia, - std::vector{conditional0, conditional1}); + Asia, std::vector{conditional0, conditional1}); // Create hybrid Bayes net. HybridBayesNet bayesNet; bayesNet.push_back(continuousConditional); diff --git a/gtsam/hybrid/tests/testHybridConditional.cpp b/gtsam/hybrid/tests/testHybridConditional.cpp index 365dde3bc..106ae28e5 100644 --- a/gtsam/hybrid/tests/testHybridConditional.cpp +++ b/gtsam/hybrid/tests/testHybridConditional.cpp @@ -39,6 +39,8 @@ TEST(HybridConditional, Invariants) { const DiscreteValues d{{M(0), 1}}; const HybridValues values{c, d}; + GTSAM_PRINT(bn); + // Check invariants for p(z|x,m) auto hc0 = bn.at(0); CHECK(hc0->isHybrid()); diff --git a/gtsam/hybrid/tests/testHybridEstimation.cpp b/gtsam/hybrid/tests/testHybridEstimation.cpp index 4899205df..6c69607a4 100644 --- a/gtsam/hybrid/tests/testHybridEstimation.cpp +++ b/gtsam/hybrid/tests/testHybridEstimation.cpp @@ -623,10 +623,7 @@ TEST(HybridEstimation, ModeSelection) { Z_1x1, noise_loose), GaussianConditional::sharedMeanAndStddev(Z(0), I_1x1, X(0), -I_1x1, X(1), Z_1x1, noise_tight)}; - bn.emplace_shared( - KeyVector{Z(0)}, KeyVector{X(0), X(1)}, DiscreteKeys{mode}, - HybridGaussianConditional::Conditionals(DiscreteKeys{mode}, - conditionals)); + bn.emplace_shared(mode, conditionals); VectorValues vv; vv.insert(Z(0), Z_1x1); @@ -658,10 +655,7 @@ TEST(HybridEstimation, ModeSelection2) { Z_3x1, noise_loose), GaussianConditional::sharedMeanAndStddev(Z(0), I_3x3, X(0), -I_3x3, X(1), Z_3x1, noise_tight)}; - bn.emplace_shared( - KeyVector{Z(0)}, KeyVector{X(0), X(1)}, DiscreteKeys{mode}, - HybridGaussianConditional::Conditionals(DiscreteKeys{mode}, - conditionals)); + bn.emplace_shared(mode, conditionals); VectorValues vv; vv.insert(Z(0), Z_3x1); diff --git a/gtsam/hybrid/tests/testHybridGaussianConditional.cpp b/gtsam/hybrid/tests/testHybridGaussianConditional.cpp index adcf6c70f..02163df9e 100644 --- a/gtsam/hybrid/tests/testHybridGaussianConditional.cpp +++ b/gtsam/hybrid/tests/testHybridGaussianConditional.cpp @@ -52,8 +52,7 @@ const std::vector conditionals{ commonSigma), GaussianConditional::sharedMeanAndStddev(Z(0), I_1x1, X(0), Vector1(0.0), commonSigma)}; -const HybridGaussianConditional hybrid_conditional({Z(0)}, {X(0)}, mode, - conditionals); +const HybridGaussianConditional hybrid_conditional(mode, conditionals); } // namespace equal_constants /* ************************************************************************* */ @@ -158,8 +157,7 @@ const std::vector conditionals{ 0.5), GaussianConditional::sharedMeanAndStddev(Z(0), I_1x1, X(0), Vector1(0.0), 3.0)}; -const HybridGaussianConditional hybrid_conditional({Z(0)}, {X(0)}, mode, - conditionals); +const HybridGaussianConditional hybrid_conditional(mode, conditionals); } // namespace mode_dependent_constants /* ************************************************************************* */ diff --git a/gtsam/hybrid/tests/testHybridGaussianFactor.cpp b/gtsam/hybrid/tests/testHybridGaussianFactor.cpp index 55c3bccfb..5df9f4811 100644 --- a/gtsam/hybrid/tests/testHybridGaussianFactor.cpp +++ b/gtsam/hybrid/tests/testHybridGaussianFactor.cpp @@ -169,7 +169,7 @@ TEST(HybridGaussianFactor, HybridGaussianConditional) { auto gaussians = std::make_shared(); HybridGaussianConditional::Conditionals conditionals(gaussians); - HybridGaussianConditional gm({}, keys, dKeys, conditionals); + HybridGaussianConditional gm(dKeys, conditionals); EXPECT_LONGS_EQUAL(2, gm.discreteKeys().size()); } @@ -234,9 +234,8 @@ static HybridGaussianConditional::shared_ptr CreateHybridMotionModel( -I_1x1, model1); DiscreteKeys discreteParents{m1}; return std::make_shared( - KeyVector{X(1)}, KeyVector{X(0)}, discreteParents, - HybridGaussianConditional::Conditionals(discreteParents, - std::vector{c0, c1})); + discreteParents, HybridGaussianConditional::Conditionals( + discreteParents, std::vector{c0, c1})); } /// Create two state Bayes network with 1 or two measurement models diff --git a/gtsam/hybrid/tests/testHybridGaussianFactorGraph.cpp b/gtsam/hybrid/tests/testHybridGaussianFactorGraph.cpp index b1c68adf3..6e817d312 100644 --- a/gtsam/hybrid/tests/testHybridGaussianFactorGraph.cpp +++ b/gtsam/hybrid/tests/testHybridGaussianFactorGraph.cpp @@ -72,13 +72,10 @@ TEST(HybridGaussianFactorGraph, Creation) { // Define a hybrid gaussian conditional P(x0|x1, c0) // and add it to the factor graph. HybridGaussianConditional gm( - {X(0)}, {X(1)}, DiscreteKeys(DiscreteKey{M(0), 2}), - HybridGaussianConditional::Conditionals( - M(0), - std::make_shared(X(0), Z_3x1, I_3x3, X(1), - I_3x3), - std::make_shared(X(0), Vector3::Ones(), I_3x3, - X(1), I_3x3))); + {M(0), 2}, + {std::make_shared(X(0), Z_3x1, I_3x3, X(1), I_3x3), + std::make_shared(X(0), Vector3::Ones(), I_3x3, X(1), + I_3x3)}); hfg.add(gm); EXPECT_LONGS_EQUAL(2, hfg.size()); @@ -654,11 +651,7 @@ TEST(HybridGaussianFactorGraph, ErrorTreeWithConditional) { x0, -I_1x1, model0), c1 = make_shared(f01, Vector1(mu), I_1x1, x1, I_1x1, x0, -I_1x1, model1); - DiscreteKeys discreteParents{m1}; - hbn.emplace_shared( - KeyVector{f01}, KeyVector{x0, x1}, discreteParents, - HybridGaussianConditional::Conditionals(discreteParents, - std::vector{c0, c1})); + hbn.emplace_shared(m1, std::vector{c0, c1}); // Discrete uniform prior. hbn.emplace_shared(m1, "0.5/0.5"); @@ -830,11 +823,8 @@ TEST(HybridGaussianFactorGraph, EliminateTiny1) { X(0), Vector1(14.1421), I_1x1 * 2.82843), conditional1 = std::make_shared( X(0), Vector1(10.1379), I_1x1 * 2.02759); - DiscreteKeys discreteParents{mode}; expectedBayesNet.emplace_shared( - KeyVector{X(0)}, KeyVector{}, discreteParents, - HybridGaussianConditional::Conditionals( - discreteParents, std::vector{conditional0, conditional1})); + mode, std::vector{conditional0, conditional1}); // Add prior on mode. expectedBayesNet.emplace_shared(mode, "74/26"); @@ -860,10 +850,7 @@ TEST(HybridGaussianFactorGraph, EliminateTiny1Swapped) { std::vector conditionals{ GaussianConditional::sharedMeanAndStddev(Z(0), I_1x1, X(0), Z_1x1, 3), GaussianConditional::sharedMeanAndStddev(Z(0), I_1x1, X(0), Z_1x1, 0.5)}; - auto gm = std::make_shared( - KeyVector{Z(0)}, KeyVector{X(0)}, DiscreteKeys{mode}, - HybridGaussianConditional::Conditionals(DiscreteKeys{mode}, - conditionals)); + auto gm = std::make_shared(mode, conditionals); bn.push_back(gm); // Create prior on X(0). @@ -891,9 +878,7 @@ TEST(HybridGaussianFactorGraph, EliminateTiny1Swapped) { conditional1 = std::make_shared( X(0), Vector1(14.1421), I_1x1 * 2.82843); expectedBayesNet.emplace_shared( - KeyVector{X(0)}, KeyVector{}, DiscreteKeys{mode}, - HybridGaussianConditional::Conditionals( - DiscreteKeys{mode}, std::vector{conditional0, conditional1})); + mode, std::vector{conditional0, conditional1}); // Add prior on mode. expectedBayesNet.emplace_shared(mode, "1/1"); @@ -929,9 +914,7 @@ TEST(HybridGaussianFactorGraph, EliminateTiny2) { conditional1 = std::make_shared( X(0), Vector1(10.274), I_1x1 * 2.0548); expectedBayesNet.emplace_shared( - KeyVector{X(0)}, KeyVector{}, DiscreteKeys{mode}, - HybridGaussianConditional::Conditionals( - DiscreteKeys{mode}, std::vector{conditional0, conditional1})); + mode, std::vector{conditional0, conditional1}); // Add prior on mode. expectedBayesNet.emplace_shared(mode, "23/77"); @@ -980,10 +963,7 @@ TEST(HybridGaussianFactorGraph, EliminateSwitchingNetwork) { GaussianConditional::sharedMeanAndStddev(Z(t), I_1x1, X(t), Z_1x1, 0.5), GaussianConditional::sharedMeanAndStddev(Z(t), I_1x1, X(t), Z_1x1, 3.0)}; - bn.emplace_shared( - KeyVector{Z(t)}, KeyVector{X(t)}, DiscreteKeys{noise_mode_t}, - HybridGaussianConditional::Conditionals(DiscreteKeys{noise_mode_t}, - conditionals)); + bn.emplace_shared(noise_mode_t, conditionals); // Create prior on discrete mode N(t): bn.emplace_shared(noise_mode_t, "20/80"); @@ -999,10 +979,8 @@ TEST(HybridGaussianFactorGraph, EliminateSwitchingNetwork) { 0.2), GaussianConditional::sharedMeanAndStddev(X(t), I_1x1, X(t - 1), I_1x1, 0.2)}; - auto gm = std::make_shared( - KeyVector{X(t)}, KeyVector{X(t - 1)}, DiscreteKeys{motion_model_t}, - HybridGaussianConditional::Conditionals(DiscreteKeys{motion_model_t}, - conditionals)); + auto gm = std::make_shared(motion_model_t, + conditionals); bn.push_back(gm); // Create prior on motion model M(t): diff --git a/gtsam/hybrid/tests/testSerializationHybrid.cpp b/gtsam/hybrid/tests/testSerializationHybrid.cpp index 4bf90019b..6a672a3d2 100644 --- a/gtsam/hybrid/tests/testSerializationHybrid.cpp +++ b/gtsam/hybrid/tests/testSerializationHybrid.cpp @@ -115,9 +115,7 @@ TEST(HybridSerialization, HybridGaussianConditional) { GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 0.5)); const auto conditional1 = std::make_shared( GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 3)); - const HybridGaussianConditional gm({Z(0)}, {X(0)}, {mode}, - HybridGaussianConditional::Conditionals( - {mode}, {conditional0, conditional1})); + const HybridGaussianConditional gm(mode, {conditional0, conditional1}); EXPECT(equalsObj(gm)); EXPECT(equalsXML(gm));