From 04c7d2edb2838b04c86682ceeb1b4f3b825067a0 Mon Sep 17 00:00:00 2001 From: Frank Dellaert Date: Thu, 5 Jan 2023 11:52:32 -0800 Subject: [PATCH] Simplified API --- gtsam/hybrid/HybridBayesNet.cpp | 18 +---------- gtsam/hybrid/HybridBayesNet.h | 55 ++++++++------------------------- 2 files changed, 14 insertions(+), 59 deletions(-) diff --git a/gtsam/hybrid/HybridBayesNet.cpp b/gtsam/hybrid/HybridBayesNet.cpp index e01fcbdcf..4c61085d7 100644 --- a/gtsam/hybrid/HybridBayesNet.cpp +++ b/gtsam/hybrid/HybridBayesNet.cpp @@ -197,8 +197,7 @@ HybridBayesNet HybridBayesNet::prune(size_t maxNrLeaves) { prunedGaussianMixture->prune(*decisionTree); // imperative :-( // Type-erase and add to the pruned Bayes Net fragment. - prunedBayesNetFragment.push_back( - boost::make_shared(prunedGaussianMixture)); + prunedBayesNetFragment.push_back(prunedGaussianMixture); } else { // Add the non-GaussianMixture conditional @@ -209,21 +208,6 @@ HybridBayesNet HybridBayesNet::prune(size_t maxNrLeaves) { return prunedBayesNetFragment; } -/* ************************************************************************* */ -GaussianMixture::shared_ptr HybridBayesNet::atMixture(size_t i) const { - return at(i)->asMixture(); -} - -/* ************************************************************************* */ -GaussianConditional::shared_ptr HybridBayesNet::atGaussian(size_t i) const { - return at(i)->asGaussian(); -} - -/* ************************************************************************* */ -DiscreteConditional::shared_ptr HybridBayesNet::atDiscrete(size_t i) const { - return at(i)->asDiscrete(); -} - /* ************************************************************************* */ GaussianBayesNet HybridBayesNet::choose( const DiscreteValues &assignment) const { diff --git a/gtsam/hybrid/HybridBayesNet.h b/gtsam/hybrid/HybridBayesNet.h index de0a38271..8d0671c9d 100644 --- a/gtsam/hybrid/HybridBayesNet.h +++ b/gtsam/hybrid/HybridBayesNet.h @@ -63,55 +63,26 @@ class GTSAM_EXPORT HybridBayesNet : public BayesNet { /// @{ /// Add HybridConditional to Bayes Net - using Base::add; + using Base::emplace_shared; - /// Add a Gaussian Mixture to the Bayes Net. - void addMixture(const GaussianMixture::shared_ptr &ptr) { - push_back(HybridConditional(ptr)); + /// Add a conditional directly using a pointer. + template + void emplace_back(Conditional *conditional) { + factors_.push_back(boost::make_shared( + boost::shared_ptr(conditional))); } - /// Add a Gaussian conditional to the Bayes Net. - void addGaussian(const GaussianConditional::shared_ptr &ptr) { - push_back(HybridConditional(ptr)); + /// Add a conditional directly using a shared_ptr. + void push_back(boost::shared_ptr conditional) { + factors_.push_back(conditional); } - /// Add a discrete conditional to the Bayes Net. - void addDiscrete(const DiscreteConditional::shared_ptr &ptr) { - push_back(HybridConditional(ptr)); + /// Add a conditional directly using implicit conversion. + void push_back(HybridConditional &&conditional) { + factors_.push_back( + boost::make_shared(std::move(conditional))); } - /// Add a Gaussian Mixture to the Bayes Net. - template - void emplaceMixture(T &&...args) { - push_back(HybridConditional( - boost::make_shared(std::forward(args)...))); - } - - /// Add a Gaussian conditional to the Bayes Net. - template - void emplaceGaussian(T &&...args) { - push_back(HybridConditional( - boost::make_shared(std::forward(args)...))); - } - - /// Add a discrete conditional to the Bayes Net. - template - void emplaceDiscrete(T &&...args) { - push_back(HybridConditional( - boost::make_shared(std::forward(args)...))); - } - - using Base::push_back; - - /// Get a specific Gaussian mixture by index `i`. - GaussianMixture::shared_ptr atMixture(size_t i) const; - - /// Get a specific Gaussian conditional by index `i`. - GaussianConditional::shared_ptr atGaussian(size_t i) const; - - /// Get a specific discrete conditional by index `i`. - DiscreteConditional::shared_ptr atDiscrete(size_t i) const; - /** * @brief Get the Gaussian Bayes Net which corresponds to a specific discrete * value assignment.