diff --git a/gtsam/hybrid/HybridGaussianFactorGraph.cpp b/gtsam/hybrid/HybridGaussianFactorGraph.cpp index 8f63d6e71..831e0ccc2 100644 --- a/gtsam/hybrid/HybridGaussianFactorGraph.cpp +++ b/gtsam/hybrid/HybridGaussianFactorGraph.cpp @@ -351,8 +351,7 @@ discreteElimination(const HybridGaussianFactorGraph &factors, // All the discrete variables should form a single clique, // so we can sum out on all the variables as frontals. // This should give an empty separator. - Ordering orderedKeys(product.keys()); - TableFactor::shared_ptr sum = product.sum(orderedKeys); + TableFactor::shared_ptr sum = product.sum(frontalKeys); #if GTSAM_HYBRID_TIMING gttoc_(EliminateDiscreteSum); #endif @@ -361,8 +360,9 @@ discreteElimination(const HybridGaussianFactorGraph &factors, gttic_(EliminateDiscreteFormDiscreteConditional); #endif // Finally, get the conditional - auto conditional = - std::make_shared(product, *sum, orderedKeys); + auto c = product / (*sum); + auto conditional = std::make_shared( + frontalKeys.size(), c.toDecisionTreeFactor()); #if GTSAM_HYBRID_TIMING gttoc_(EliminateDiscreteFormDiscreteConditional); #endif diff --git a/gtsam/hybrid/tests/testGaussianMixture.cpp b/gtsam/hybrid/tests/testGaussianMixture.cpp index 14bef5fbb..698c1bbf6 100644 --- a/gtsam/hybrid/tests/testGaussianMixture.cpp +++ b/gtsam/hybrid/tests/testGaussianMixture.cpp @@ -162,6 +162,7 @@ TEST(GaussianMixture, GaussianMixtureModel2) { EXPECT_DOUBLES_EQUAL(expected, posterior2(m1Assignment), 1e-8); } } + /* ************************************************************************* */ int main() { TestResult tr;