diff --git a/gtsam/hybrid/HybridBayesNet.cpp b/gtsam/hybrid/HybridBayesNet.cpp index 59dfd809d..772fb250c 100644 --- a/gtsam/hybrid/HybridBayesNet.cpp +++ b/gtsam/hybrid/HybridBayesNet.cpp @@ -347,8 +347,6 @@ HybridGaussianFactorGraph HybridBayesNet::toFactorGraph( fg.push_back(gc->likelihood(measurements)); } else if (auto gm = conditional->asMixture()) { fg.push_back(gm->likelihood(measurements)); - const auto constantsFactor = gm->normalizationConstants(); - if (constantsFactor) fg.push_back(constantsFactor); } else { throw std::runtime_error("Unknown conditional type"); } diff --git a/gtsam/hybrid/tests/testHybridBayesNet.cpp b/gtsam/hybrid/tests/testHybridBayesNet.cpp index 1feabc4b5..da16299a8 100644 --- a/gtsam/hybrid/tests/testHybridBayesNet.cpp +++ b/gtsam/hybrid/tests/testHybridBayesNet.cpp @@ -77,9 +77,17 @@ TEST(HybridBayesNet, Tiny) { auto bn = tiny::createHybridBayesNet(); EXPECT_LONGS_EQUAL(3, bn.size()); - const VectorValues measurements{{Z(0), Vector1(5.0)}}; - auto fg = bn.toFactorGraph(measurements); - EXPECT_LONGS_EQUAL(4, fg.size()); + const VectorValues vv{{Z(0), Vector1(5.0)}, {X(0), Vector1(5.0)}}; + auto fg = bn.toFactorGraph(vv); + EXPECT_LONGS_EQUAL(3, fg.size()); + + // Check that the ratio of probPrime to evaluate is the same for all modes. + std::vector ratio(2); + for (size_t mode : {0, 1}) { + const HybridValues hv{vv, {{M(0), mode}}}; + ratio[mode] = std::exp(-fg.error(hv)) / bn.evaluate(hv); + } + EXPECT_DOUBLES_EQUAL(ratio[0], ratio[1], 1e-8); } /* ****************************************************************************/