testSerializationHybrid.cpp
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
26 #include <gtsam/inference/Symbol.h>
28 
29 #include "Switching.h"
30 
31 // Include for test suite
33 
34 using namespace std;
35 using namespace gtsam;
39 
40 using namespace serializationTestHelpers;
41 
42 BOOST_CLASS_EXPORT_GUID(Factor, "gtsam_Factor");
43 BOOST_CLASS_EXPORT_GUID(HybridFactor, "gtsam_HybridFactor");
44 BOOST_CLASS_EXPORT_GUID(JacobianFactor, "gtsam_JacobianFactor");
45 BOOST_CLASS_EXPORT_GUID(GaussianConditional, "gtsam_GaussianConditional");
46 BOOST_CLASS_EXPORT_GUID(DiscreteConditional, "gtsam_DiscreteConditional");
47 
48 BOOST_CLASS_EXPORT_GUID(DecisionTreeFactor, "gtsam_DecisionTreeFactor");
50 BOOST_CLASS_EXPORT_GUID(ADT, "gtsam_AlgebraicDecisionTree");
51 BOOST_CLASS_EXPORT_GUID(ADT::Leaf, "gtsam_AlgebraicDecisionTree_Leaf");
52 BOOST_CLASS_EXPORT_GUID(ADT::Choice, "gtsam_AlgebraicDecisionTree_Choice")
53 
54 BOOST_CLASS_EXPORT_GUID(GaussianMixtureFactor, "gtsam_GaussianMixtureFactor");
56  "gtsam_GaussianMixtureFactor_Factors");
58  "gtsam_GaussianMixtureFactor_Factors_Leaf");
60  "gtsam_GaussianMixtureFactor_Factors_Choice");
61 
62 BOOST_CLASS_EXPORT_GUID(GaussianMixture, "gtsam_GaussianMixture");
64  "gtsam_GaussianMixture_Conditionals");
66  "gtsam_GaussianMixture_Conditionals_Leaf");
67 BOOST_CLASS_EXPORT_GUID(GaussianMixture::Conditionals::Choice,
68  "gtsam_GaussianMixture_Conditionals_Choice");
69 // Needed since GaussianConditional::FromMeanAndStddev uses it
70 BOOST_CLASS_EXPORT_GUID(noiseModel::Isotropic, "gtsam_noiseModel_Isotropic");
71 
72 BOOST_CLASS_EXPORT_GUID(HybridBayesNet, "gtsam_HybridBayesNet");
73 
74 /* ****************************************************************************/
75 // Test GaussianMixtureFactor serialization.
76 TEST(HybridSerialization, GaussianMixtureFactor) {
77  KeyVector continuousKeys{X(0)};
78  DiscreteKeys discreteKeys{{M(0), 2}};
79 
80  auto A = Matrix::Zero(2, 1);
81  auto b0 = Matrix::Zero(2, 1);
82  auto b1 = Matrix::Ones(2, 1);
83  auto f0 = std::make_shared<JacobianFactor>(X(0), A, b0);
84  auto f1 = std::make_shared<JacobianFactor>(X(0), A, b1);
85  std::vector<GaussianFactor::shared_ptr> factors{f0, f1};
86 
87  const GaussianMixtureFactor factor(continuousKeys, discreteKeys, factors);
88 
89  EXPECT(equalsObj<GaussianMixtureFactor>(factor));
90  EXPECT(equalsXML<GaussianMixtureFactor>(factor));
91  EXPECT(equalsBinary<GaussianMixtureFactor>(factor));
92 }
93 
94 /* ****************************************************************************/
95 // Test HybridConditional serialization.
96 TEST(HybridSerialization, HybridConditional) {
97  const DiscreteKey mode(M(0), 2);
98  Matrix1 I = Matrix1::Identity();
99  const auto conditional = std::make_shared<GaussianConditional>(
100  GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 0.5));
101  const HybridConditional hc(conditional);
102 
103  EXPECT(equalsObj<HybridConditional>(hc));
104  EXPECT(equalsXML<HybridConditional>(hc));
105  EXPECT(equalsBinary<HybridConditional>(hc));
106 }
107 
108 /* ****************************************************************************/
109 // Test GaussianMixture serialization.
110 TEST(HybridSerialization, GaussianMixture) {
111  const DiscreteKey mode(M(0), 2);
112  Matrix1 I = Matrix1::Identity();
113  const auto conditional0 = std::make_shared<GaussianConditional>(
114  GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 0.5));
115  const auto conditional1 = std::make_shared<GaussianConditional>(
116  GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 3));
117  const GaussianMixture gm({Z(0)}, {X(0)}, {mode},
118  {conditional0, conditional1});
119 
120  EXPECT(equalsObj<GaussianMixture>(gm));
121  EXPECT(equalsXML<GaussianMixture>(gm));
122  EXPECT(equalsBinary<GaussianMixture>(gm));
123 }
124 
125 /* ****************************************************************************/
126 // Test HybridBayesNet serialization.
127 TEST(HybridSerialization, HybridBayesNet) {
128  Switching s(2);
129  HybridBayesNet hbn = *(s.linearizedFactorGraph.eliminateSequential());
130 
131  EXPECT(equalsObj<HybridBayesNet>(hbn));
132  EXPECT(equalsXML<HybridBayesNet>(hbn));
133  EXPECT(equalsBinary<HybridBayesNet>(hbn));
134 }
135 
136 /* ****************************************************************************/
137 // Test HybridBayesTree serialization.
138 TEST(HybridSerialization, HybridBayesTree) {
139  Switching s(2);
140  HybridBayesTree hbt = *(s.linearizedFactorGraph.eliminateMultifrontal());
141 
142  EXPECT(equalsObj<HybridBayesTree>(hbt));
143  EXPECT(equalsXML<HybridBayesTree>(hbt));
144  EXPECT(equalsBinary<HybridBayesTree>(hbt));
145 }
146 
147 /* ************************************************************************* */
148 int main() {
149  TestResult tr;
150  return TestRegistry::runAllTests(tr);
151 }
152 /* ************************************************************************* */
TestRegistry::runAllTests
static int runAllTests(TestResult &result)
Definition: TestRegistry.cpp:27
gtsam::GaussianMixtureFactor
Implementation of a discrete conditional mixture factor. Implements a joint discrete-continuous facto...
Definition: GaussianMixtureFactor.h:47
gtsam::DecisionTreeFactor
Definition: DecisionTreeFactor.h:44
GaussianConditional.h
Conditional Gaussian Base class.
simple_graph::b1
Vector2 b1(2, -1)
gtsam::HybridConditional
Definition: HybridConditional.h:59
Leaf
static sharedNode Leaf(Key key, const SymbolicFactorGraph &factors)
Definition: testSymbolicEliminationTree.cpp:78
s
RealScalar s
Definition: level1_cplx_impl.h:126
EXPECT
#define EXPECT(condition)
Definition: Test.h:150
TestHarness.h
gtsam::HybridBayesNet
Definition: HybridBayesNet.h:35
Switching.h
simple_graph::factors
const GaussianFactorGraph factors
Definition: testJacobianFactor.cpp:213
gtsam::GaussianMixture
A conditional of gaussian mixtures indexed by discrete variables, as part of a Bayes Network....
Definition: GaussianMixture.h:53
gtsam::JacobianFactor
Definition: JacobianFactor.h:91
gtsam::HybridBayesTree
Definition: HybridBayesTree.h:62
gtsam::HybridFactor
Definition: HybridFactor.h:53
HybridBayesNet.h
A Bayes net of Gaussian Conditionals indexed by discrete keys.
X
#define X
Definition: icosphere.cpp:20
gtsam::Factor
Definition: Factor.h:69
gtsam::DiscreteKeys
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition: DiscreteKey.h:41
DiscreteConditional.h
gtsam::KeyVector
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:92
hc
Vector3d hc
Definition: Tridiagonalization_householderCoefficients.cpp:5
gtsam::AlgebraicDecisionTree< Key >
gtsam::Switching
Definition: Switching.h:120
Vector1
Eigen::Matrix< double, 1, 1 > Vector1
Definition: testEvent.cpp:33
main
int main()
Definition: testSerializationHybrid.cpp:148
I
#define I
Definition: main.h:112
TEST
TEST(HybridSerialization, GaussianMixtureFactor)
Definition: testSerializationHybrid.cpp:76
gtsam::GaussianConditional
Definition: GaussianConditional.h:40
GaussianMixture.h
A hybrid conditional in the Conditional Linear Gaussian scheme.
Symbol.h
HybridBayesTree.h
Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
E1::A
@ A
serializationTestHelpers.h
TestResult
Definition: TestResult.h:26
gtsam::DiscreteConditional
Definition: DiscreteConditional.h:37
gtsam
traits
Definition: chartTesting.h:28
gtsam::DiscreteKey
std::pair< Key, size_t > DiscreteKey
Definition: DiscreteKey.h:38
std
Definition: BFloat16.h:88
BOOST_CLASS_EXPORT_GUID
BOOST_CLASS_EXPORT_GUID(Factor, "gtsam_Factor")
mode
static const DiscreteKey mode(modeKey, 2)
Eigen::Matrix
The matrix class, also used for vectors and row-vectors.
Definition: 3rdparty/Eigen/Eigen/src/Core/Matrix.h:178
unary::f1
Point2 f1(const Point3 &p, OptionalJacobian< 2, 3 > H)
Definition: testExpression.cpp:79
Z
#define Z
Definition: icosphere.cpp:21
GaussianMixtureFactor.h
A set of GaussianFactors, indexed by a set of discrete keys.
HybridConditional.h
M
Matrix< RealScalar, Dynamic, Dynamic > M
Definition: bench_gemm.cpp:51


gtsam
Author(s):
autogenerated on Tue Jun 25 2024 03:06:41