rename GaussianMixtureConditional to GaussianMixture

release/4.3a0
Varun Agrawal 2022-06-02 00:13:02 -04:00
parent d2029f3d03
commit c8bf9d350c
7 changed files with 43 additions and 43 deletions

View File

@ -10,7 +10,7 @@
* -------------------------------------------------------------------------- */ * -------------------------------------------------------------------------- */
/** /**
* @file GaussianMixtureConditional.cpp * @file GaussianMixture.cpp
* @brief A hybrid conditional in the Conditional Linear Gaussian scheme * @brief A hybrid conditional in the Conditional Linear Gaussian scheme
* @author Fan Jiang * @author Fan Jiang
* @author Varun Agrawal * @author Varun Agrawal
@ -20,41 +20,41 @@
#include <gtsam/base/utilities.h> #include <gtsam/base/utilities.h>
#include <gtsam/discrete/DecisionTree-inl.h> #include <gtsam/discrete/DecisionTree-inl.h>
#include <gtsam/hybrid/GaussianMixtureConditional.h> #include <gtsam/hybrid/GaussianMixture.h>
#include <gtsam/inference/Conditional-inst.h> #include <gtsam/inference/Conditional-inst.h>
#include <gtsam/linear/GaussianFactorGraph.h> #include <gtsam/linear/GaussianFactorGraph.h>
namespace gtsam { namespace gtsam {
GaussianMixtureConditional::GaussianMixtureConditional( GaussianMixture::GaussianMixture(
const KeyVector &continuousFrontals, const KeyVector &continuousParents, const KeyVector &continuousFrontals, const KeyVector &continuousParents,
const DiscreteKeys &discreteParents, const DiscreteKeys &discreteParents,
const GaussianMixtureConditional::Conditionals &conditionals) const GaussianMixture::Conditionals &conditionals)
: BaseFactor(CollectKeys(continuousFrontals, continuousParents), : BaseFactor(CollectKeys(continuousFrontals, continuousParents),
discreteParents), discreteParents),
BaseConditional(continuousFrontals.size()), BaseConditional(continuousFrontals.size()),
conditionals_(conditionals) {} conditionals_(conditionals) {}
/* *******************************************************************************/ /* *******************************************************************************/
const GaussianMixtureConditional::Conditionals & const GaussianMixture::Conditionals &
GaussianMixtureConditional::conditionals() { GaussianMixture::conditionals() {
return conditionals_; return conditionals_;
} }
/* *******************************************************************************/ /* *******************************************************************************/
GaussianMixtureConditional GaussianMixtureConditional::FromConditionals( GaussianMixture GaussianMixture::FromConditionals(
const KeyVector &continuousFrontals, const KeyVector &continuousParents, const KeyVector &continuousFrontals, const KeyVector &continuousParents,
const DiscreteKeys &discreteParents, const DiscreteKeys &discreteParents,
const std::vector<GaussianConditional::shared_ptr> &conditionalsList) { const std::vector<GaussianConditional::shared_ptr> &conditionalsList) {
Conditionals dt(discreteParents, conditionalsList); Conditionals dt(discreteParents, conditionalsList);
return GaussianMixtureConditional(continuousFrontals, continuousParents, return GaussianMixture(continuousFrontals, continuousParents,
discreteParents, dt); discreteParents, dt);
} }
/* *******************************************************************************/ /* *******************************************************************************/
GaussianMixtureConditional::Sum GaussianMixtureConditional::add( GaussianMixture::Sum GaussianMixture::add(
const GaussianMixtureConditional::Sum &sum) const { const GaussianMixture::Sum &sum) const {
using Y = GaussianFactorGraph; using Y = GaussianFactorGraph;
auto add = [](const Y &graph1, const Y &graph2) { auto add = [](const Y &graph1, const Y &graph2) {
auto result = graph1; auto result = graph1;
@ -66,8 +66,8 @@ GaussianMixtureConditional::Sum GaussianMixtureConditional::add(
} }
/* *******************************************************************************/ /* *******************************************************************************/
GaussianMixtureConditional::Sum GaussianMixture::Sum
GaussianMixtureConditional::asGaussianFactorGraphTree() const { GaussianMixture::asGaussianFactorGraphTree() const {
auto lambda = [](const GaussianFactor::shared_ptr &factor) { auto lambda = [](const GaussianFactor::shared_ptr &factor) {
GaussianFactorGraph result; GaussianFactorGraph result;
result.push_back(factor); result.push_back(factor);
@ -77,13 +77,13 @@ GaussianMixtureConditional::asGaussianFactorGraphTree() const {
} }
/* *******************************************************************************/ /* *******************************************************************************/
bool GaussianMixtureConditional::equals(const HybridFactor &lf, bool GaussianMixture::equals(const HybridFactor &lf,
double tol) const { double tol) const {
return BaseFactor::equals(lf, tol); return BaseFactor::equals(lf, tol);
} }
/* *******************************************************************************/ /* *******************************************************************************/
void GaussianMixtureConditional::print(const std::string &s, void GaussianMixture::print(const std::string &s,
const KeyFormatter &formatter) const { const KeyFormatter &formatter) const {
std::cout << s; std::cout << s;
if (isContinuous()) std::cout << "Continuous "; if (isContinuous()) std::cout << "Continuous ";

View File

@ -10,7 +10,7 @@
* -------------------------------------------------------------------------- */ * -------------------------------------------------------------------------- */
/** /**
* @file GaussianMixtureConditional.h * @file GaussianMixture.h
* @brief A hybrid conditional in the Conditional Linear Gaussian scheme * @brief A hybrid conditional in the Conditional Linear Gaussian scheme
* @author Fan Jiang * @author Fan Jiang
* @author Varun Agrawal * @author Varun Agrawal
@ -39,14 +39,14 @@ namespace gtsam {
* coefficient. * coefficient.
* *
*/ */
class GTSAM_EXPORT GaussianMixtureConditional class GTSAM_EXPORT GaussianMixture
: public HybridFactor, : public HybridFactor,
public Conditional<HybridFactor, GaussianMixtureConditional> { public Conditional<HybridFactor, GaussianMixture> {
public: public:
using This = GaussianMixtureConditional; using This = GaussianMixture;
using shared_ptr = boost::shared_ptr<GaussianMixtureConditional>; using shared_ptr = boost::shared_ptr<GaussianMixture>;
using BaseFactor = HybridFactor; using BaseFactor = HybridFactor;
using BaseConditional = Conditional<HybridFactor, GaussianMixtureConditional>; using BaseConditional = Conditional<HybridFactor, GaussianMixture>;
/// Alias for DecisionTree of GaussianFactorGraphs /// Alias for DecisionTree of GaussianFactorGraphs
using Sum = DecisionTree<Key, GaussianFactorGraph>; using Sum = DecisionTree<Key, GaussianFactorGraph>;
@ -67,10 +67,10 @@ class GTSAM_EXPORT GaussianMixtureConditional
/// @{ /// @{
/// Defaut constructor, mainly for serialization. /// Defaut constructor, mainly for serialization.
GaussianMixtureConditional() = default; GaussianMixture() = default;
/** /**
* @brief Construct a new GaussianMixtureConditional object. * @brief Construct a new GaussianMixture object.
* *
* @param continuousFrontals the continuous frontals. * @param continuousFrontals the continuous frontals.
* @param continuousParents the continuous parents. * @param continuousParents the continuous parents.
@ -80,7 +80,7 @@ class GTSAM_EXPORT GaussianMixtureConditional
* cardinality of the DiscreteKeys in discreteParents, since the * cardinality of the DiscreteKeys in discreteParents, since the
* discreteParents will be used as the labels in the decision tree. * discreteParents will be used as the labels in the decision tree.
*/ */
GaussianMixtureConditional(const KeyVector &continuousFrontals, GaussianMixture(const KeyVector &continuousFrontals,
const KeyVector &continuousParents, const KeyVector &continuousParents,
const DiscreteKeys &discreteParents, const DiscreteKeys &discreteParents,
const Conditionals &conditionals); const Conditionals &conditionals);
@ -107,7 +107,7 @@ class GTSAM_EXPORT GaussianMixtureConditional
/* print utility */ /* print utility */
void print( void print(
const std::string &s = "GaussianMixtureConditional\n", const std::string &s = "GaussianMixture\n",
const KeyFormatter &formatter = DefaultKeyFormatter) const override; const KeyFormatter &formatter = DefaultKeyFormatter) const override;
/// @} /// @}

View File

@ -54,7 +54,7 @@ HybridConditional::HybridConditional(
/* ************************************************************************ */ /* ************************************************************************ */
HybridConditional::HybridConditional( HybridConditional::HybridConditional(
boost::shared_ptr<GaussianMixtureConditional> gaussianMixture) boost::shared_ptr<GaussianMixture> gaussianMixture)
: BaseFactor(KeyVector(gaussianMixture->keys().begin(), : BaseFactor(KeyVector(gaussianMixture->keys().begin(),
gaussianMixture->keys().begin() + gaussianMixture->keys().begin() +
gaussianMixture->nrContinuous()), gaussianMixture->nrContinuous()),

View File

@ -18,7 +18,7 @@
#pragma once #pragma once
#include <gtsam/discrete/DiscreteConditional.h> #include <gtsam/discrete/DiscreteConditional.h>
#include <gtsam/hybrid/GaussianMixtureConditional.h> #include <gtsam/hybrid/GaussianMixture.h>
#include <gtsam/hybrid/HybridFactor.h> #include <gtsam/hybrid/HybridFactor.h>
#include <gtsam/hybrid/HybridGaussianFactorGraph.h> #include <gtsam/hybrid/HybridGaussianFactorGraph.h>
#include <gtsam/inference/Conditional.h> #include <gtsam/inference/Conditional.h>
@ -42,7 +42,7 @@ class HybridGaussianFactorGraph;
* As a type-erased variant of: * As a type-erased variant of:
* - DiscreteConditional * - DiscreteConditional
* - GaussianConditional * - GaussianConditional
* - GaussianMixtureConditional * - GaussianMixture
* *
* The reason why this is important is that `Conditional<T>` is a CRTP class. * The reason why this is important is that `Conditional<T>` is a CRTP class.
* CRTP is static polymorphism such that all CRTP classes, while bearing the * CRTP is static polymorphism such that all CRTP classes, while bearing the
@ -128,16 +128,16 @@ class GTSAM_EXPORT HybridConditional
* HybridConditional. * HybridConditional.
*/ */
HybridConditional( HybridConditional(
boost::shared_ptr<GaussianMixtureConditional> gaussianMixture); boost::shared_ptr<GaussianMixture> gaussianMixture);
/** /**
* @brief Return HybridConditional as a GaussianMixtureConditional * @brief Return HybridConditional as a GaussianMixture
* *
* @return GaussianMixtureConditional::shared_ptr * @return GaussianMixture::shared_ptr
*/ */
GaussianMixtureConditional::shared_ptr asMixture() { GaussianMixture::shared_ptr asMixture() {
if (!isHybrid()) throw std::invalid_argument("Not a mixture"); if (!isHybrid()) throw std::invalid_argument("Not a mixture");
return boost::static_pointer_cast<GaussianMixtureConditional>(inner_); return boost::static_pointer_cast<GaussianMixture>(inner_);
} }
/** /**

View File

@ -23,7 +23,7 @@
#include <gtsam/discrete/DiscreteEliminationTree.h> #include <gtsam/discrete/DiscreteEliminationTree.h>
#include <gtsam/discrete/DiscreteFactorGraph.h> #include <gtsam/discrete/DiscreteFactorGraph.h>
#include <gtsam/discrete/DiscreteJunctionTree.h> #include <gtsam/discrete/DiscreteJunctionTree.h>
#include <gtsam/hybrid/GaussianMixtureConditional.h> #include <gtsam/hybrid/GaussianMixture.h>
#include <gtsam/hybrid/GaussianMixtureFactor.h> #include <gtsam/hybrid/GaussianMixtureFactor.h>
#include <gtsam/hybrid/HybridConditional.h> #include <gtsam/hybrid/HybridConditional.h>
#include <gtsam/hybrid/HybridDiscreteFactor.h> #include <gtsam/hybrid/HybridDiscreteFactor.h>
@ -207,8 +207,8 @@ hybridElimination(const HybridGaussianFactorGraph &factors,
const GaussianMixtureFactor::Factors &separatorFactors = pair.second; const GaussianMixtureFactor::Factors &separatorFactors = pair.second;
// Create the GaussianMixtureConditional from the conditionals // Create the GaussianMixture from the conditionals
auto conditional = boost::make_shared<GaussianMixtureConditional>( auto conditional = boost::make_shared<GaussianMixture>(
frontalKeys, keysOfSeparator, discreteSeparator, pair.first); frontalKeys, keysOfSeparator, discreteSeparator, pair.first);
// If there are no more continuous parents, then we should create here a // If there are no more continuous parents, then we should create here a
@ -262,7 +262,7 @@ EliminateHybrid(const HybridGaussianFactorGraph &factors,
// Because of all these reasons, we carefully consider how to // Because of all these reasons, we carefully consider how to
// implement the hybrid factors so that we do not get poor performance. // implement the hybrid factors so that we do not get poor performance.
// The first thing is how to represent the GaussianMixtureConditional. // The first thing is how to represent the GaussianMixture.
// A very possible scenario is that the incoming factors will have different // A very possible scenario is that the incoming factors will have different
// levels of discrete keys. For example, imagine we are going to eliminate the // levels of discrete keys. For example, imagine we are going to eliminate the
// fragment: $\phi(x1,c1,c2)$, $\phi(x1,c2,c3)$, which is perfectly valid. // fragment: $\phi(x1,c1,c2)$, $\phi(x1,c2,c3)$, which is perfectly valid.

View File

@ -38,16 +38,16 @@ class GaussianMixtureFactor : gtsam::HybridFactor {
gtsam::DefaultKeyFormatter) const; gtsam::DefaultKeyFormatter) const;
}; };
#include <gtsam/hybrid/GaussianMixtureConditional.h> #include <gtsam/hybrid/GaussianMixture.h>
class GaussianMixtureConditional : gtsam::HybridFactor { class GaussianMixture : gtsam::HybridFactor {
static GaussianMixtureConditional FromConditionals( static GaussianMixture FromConditionals(
const gtsam::KeyVector& continuousFrontals, const gtsam::KeyVector& continuousFrontals,
const gtsam::KeyVector& continuousParents, const gtsam::KeyVector& continuousParents,
const gtsam::DiscreteKeys& discreteParents, const gtsam::DiscreteKeys& discreteParents,
const std::vector<gtsam::GaussianConditional::shared_ptr>& const std::vector<gtsam::GaussianConditional::shared_ptr>&
conditionalsList); conditionalsList);
void print(string s = "GaussianMixtureConditional\n", void print(string s = "GaussianMixture\n",
const gtsam::KeyFormatter& keyFormatter = const gtsam::KeyFormatter& keyFormatter =
gtsam::DefaultKeyFormatter) const; gtsam::DefaultKeyFormatter) const;
}; };

View File

@ -20,7 +20,7 @@
#include <gtsam/discrete/DecisionTreeFactor.h> #include <gtsam/discrete/DecisionTreeFactor.h>
#include <gtsam/discrete/DiscreteKey.h> #include <gtsam/discrete/DiscreteKey.h>
#include <gtsam/discrete/DiscreteValues.h> #include <gtsam/discrete/DiscreteValues.h>
#include <gtsam/hybrid/GaussianMixtureConditional.h> #include <gtsam/hybrid/GaussianMixture.h>
#include <gtsam/hybrid/GaussianMixtureFactor.h> #include <gtsam/hybrid/GaussianMixtureFactor.h>
#include <gtsam/hybrid/HybridBayesNet.h> #include <gtsam/hybrid/HybridBayesNet.h>
#include <gtsam/hybrid/HybridBayesTree.h> #include <gtsam/hybrid/HybridBayesTree.h>
@ -65,9 +65,9 @@ TEST(HybridGaussianFactorGraph, creation) {
hfg.add(HybridGaussianFactor(JacobianFactor(0, I_3x3, Z_3x1))); hfg.add(HybridGaussianFactor(JacobianFactor(0, I_3x3, Z_3x1)));
GaussianMixtureConditional clgc( GaussianMixture clgc(
{X(0)}, {X(1)}, DiscreteKeys(DiscreteKey{C(0), 2}), {X(0)}, {X(1)}, DiscreteKeys(DiscreteKey{C(0), 2}),
GaussianMixtureConditional::Conditionals( GaussianMixture::Conditionals(
C(0), C(0),
boost::make_shared<GaussianConditional>(X(0), Z_3x1, I_3x3, X(1), boost::make_shared<GaussianConditional>(X(0), Z_3x1, I_3x3, X(1),
I_3x3), I_3x3),