From d4ee6997f7e032b9720c554ecd2b6fe6ab96b545 Mon Sep 17 00:00:00 2001 From: Frank Dellaert Date: Thu, 29 Dec 2022 13:54:44 -0500 Subject: [PATCH] Remove FromConditionals --- gtsam/hybrid/GaussianMixture.cpp | 11 ++++------ gtsam/hybrid/GaussianMixture.h | 2 +- gtsam/hybrid/hybrid.i | 25 +++++++++++++--------- gtsam/hybrid/tests/testGaussianMixture.cpp | 4 +--- gtsam/hybrid/tests/testHybridBayesNet.cpp | 4 ++-- python/gtsam/tests/test_HybridBayesNet.py | 5 ++--- 6 files changed, 25 insertions(+), 26 deletions(-) diff --git a/gtsam/hybrid/GaussianMixture.cpp b/gtsam/hybrid/GaussianMixture.cpp index a5d06f04d..e34467527 100644 --- a/gtsam/hybrid/GaussianMixture.cpp +++ b/gtsam/hybrid/GaussianMixture.cpp @@ -42,15 +42,12 @@ const GaussianMixture::Conditionals &GaussianMixture::conditionals() const { } /* *******************************************************************************/ -GaussianMixture GaussianMixture::FromConditionals( +GaussianMixture::GaussianMixture( const KeyVector &continuousFrontals, const KeyVector &continuousParents, const DiscreteKeys &discreteParents, - const std::vector &conditionalsList) { - Conditionals dt(discreteParents, conditionalsList); - - return GaussianMixture(continuousFrontals, continuousParents, discreteParents, - dt); -} + const std::vector &conditionalsList) + : GaussianMixture(continuousFrontals, continuousParents, discreteParents, + Conditionals(discreteParents, conditionalsList)) {} /* *******************************************************************************/ GaussianMixture::Sum GaussianMixture::add( diff --git a/gtsam/hybrid/GaussianMixture.h b/gtsam/hybrid/GaussianMixture.h index 672a886ad..2cdc23b46 100644 --- a/gtsam/hybrid/GaussianMixture.h +++ b/gtsam/hybrid/GaussianMixture.h @@ -114,7 +114,7 @@ class GTSAM_EXPORT GaussianMixture * @param discreteParents Discrete parents variables * @param conditionals List of conditionals */ - static This FromConditionals( + GaussianMixture( const KeyVector &continuousFrontals, const KeyVector &continuousParents, const DiscreteKeys &discreteParents, const std::vector &conditionals); diff --git a/gtsam/hybrid/hybrid.i b/gtsam/hybrid/hybrid.i index 2721612f9..29247cdc3 100644 --- a/gtsam/hybrid/hybrid.i +++ b/gtsam/hybrid/hybrid.i @@ -66,12 +66,13 @@ class GaussianMixtureFactor : gtsam::HybridFactor { #include class GaussianMixture : gtsam::HybridFactor { - static GaussianMixture FromConditionals( - const gtsam::KeyVector& continuousFrontals, - const gtsam::KeyVector& continuousParents, - const gtsam::DiscreteKeys& discreteParents, - const std::vector& - conditionalsList); + GaussianMixture(const gtsam::KeyVector& continuousFrontals, + const gtsam::KeyVector& continuousParents, + const gtsam::DiscreteKeys& discreteParents, + const std::vector& + conditionalsList); + + gtsam::GaussianMixtureFactor* likelihood(const gtsam::VectorValues &frontals) const; void print(string s = "GaussianMixture\n", const gtsam::KeyFormatter& keyFormatter = @@ -104,7 +105,7 @@ class HybridBayesTree { gtsam::DefaultKeyFormatter) const; }; -#include +#include class HybridBayesNet { HybridBayesNet(); void add(const gtsam::HybridConditional& s); @@ -113,6 +114,11 @@ class HybridBayesNet { void addDiscrete(const gtsam::DiscreteConditional* s); void emplaceMixture(const gtsam::GaussianMixture& s); + void emplaceMixture(const gtsam::KeyVector& continuousFrontals, + const gtsam::KeyVector& continuousParents, + const gtsam::DiscreteKeys& discreteParents, + const std::vector& + conditionalsList); void emplaceGaussian(const gtsam::GaussianConditional& s); void emplaceDiscrete(const gtsam::DiscreteConditional& s); void emplaceDiscrete(const gtsam::DiscreteKey& key, string spec); @@ -162,9 +168,8 @@ class HybridGaussianFactorGraph { void push_back(const gtsam::HybridBayesNet& bayesNet); void push_back(const gtsam::HybridBayesTree& bayesTree); void push_back(const gtsam::GaussianMixtureFactor* gmm); - - void add(gtsam::DecisionTreeFactor* factor); - void add(gtsam::JacobianFactor* factor); + void push_back(gtsam::DecisionTreeFactor* factor); + void push_back(gtsam::JacobianFactor* factor); bool empty() const; void remove(size_t i); diff --git a/gtsam/hybrid/tests/testGaussianMixture.cpp b/gtsam/hybrid/tests/testGaussianMixture.cpp index ed5771770..242c9ba41 100644 --- a/gtsam/hybrid/tests/testGaussianMixture.cpp +++ b/gtsam/hybrid/tests/testGaussianMixture.cpp @@ -148,9 +148,7 @@ static GaussianMixture createSimpleGaussianMixture() { GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 0.5)); const auto conditional1 = boost::make_shared( GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 3)); - const auto gm = GaussianMixture::FromConditionals( - {Z(0)}, {X(0)}, {mode}, {conditional0, conditional1}); - return gm; + return GaussianMixture({Z(0)}, {X(0)}, {mode}, {conditional0, conditional1}); } /* ************************************************************************* */ diff --git a/gtsam/hybrid/tests/testHybridBayesNet.cpp b/gtsam/hybrid/tests/testHybridBayesNet.cpp index 9a2ca1208..627d82694 100644 --- a/gtsam/hybrid/tests/testHybridBayesNet.cpp +++ b/gtsam/hybrid/tests/testHybridBayesNet.cpp @@ -88,8 +88,8 @@ TEST(HybridBayesNet, evaluateHybrid) { // Create hybrid Bayes net. HybridBayesNet bayesNet; bayesNet.emplaceGaussian(continuousConditional); - bayesNet.emplaceMixture(GaussianMixture::FromConditionals( - {X(1)}, {}, {Asia}, {conditional0, conditional1})); + GaussianMixture gm({X(1)}, {}, {Asia}, {conditional0, conditional1}); + bayesNet.emplaceMixture(gm); // copy :-( bayesNet.emplaceDiscrete(Asia, "99/1"); // Create values at which to evaluate. diff --git a/python/gtsam/tests/test_HybridBayesNet.py b/python/gtsam/tests/test_HybridBayesNet.py index 66cddf05e..af89a4ba7 100644 --- a/python/gtsam/tests/test_HybridBayesNet.py +++ b/python/gtsam/tests/test_HybridBayesNet.py @@ -42,14 +42,13 @@ class TestHybridBayesNet(GtsamTestCase): conditional1 = GaussianConditional(X(1), [2], I_1x1, model1) dkeys = DiscreteKeys() dkeys.push_back(Asia) - gm = GaussianMixture.FromConditionals([X(1)], [], dkeys, - [conditional0, conditional1]) # + gm = GaussianMixture([X(1)], [], dkeys, [conditional0, conditional1]) # Create hybrid Bayes net. bayesNet = HybridBayesNet() bayesNet.addGaussian(gc) bayesNet.addMixture(gm) - bayesNet.addDiscrete(Asia, "99/1") + bayesNet.emplaceDiscrete(Asia, "99/1") # Create values at which to evaluate. values = HybridValues()