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(HybridGaussianFactor, "gtsam_HybridGaussianFactor");
56  "gtsam_HybridGaussianFactor_Factors");
58  "gtsam_HybridGaussianFactor_Factors_Leaf");
60  "gtsam_HybridGaussianFactor_Factors_Choice");
61 
63  "gtsam_HybridGaussianConditional");
65  "gtsam_HybridGaussianConditional_Conditionals");
67  "gtsam_HybridGaussianConditional_Conditionals_Leaf");
69  "gtsam_HybridGaussianConditional_Conditionals_Choice");
70 // Needed since GaussianConditional::FromMeanAndStddev uses it
71 BOOST_CLASS_EXPORT_GUID(noiseModel::Isotropic, "gtsam_noiseModel_Isotropic");
72 
73 BOOST_CLASS_EXPORT_GUID(HybridBayesNet, "gtsam_HybridBayesNet");
74 
75 /* ****************************************************************************/
76 // Test HybridGaussianFactor serialization.
77 TEST(HybridSerialization, HybridGaussianFactor) {
78  DiscreteKey discreteKey{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 HybridGaussianFactor factor(discreteKey, factors);
88 
89  EXPECT(equalsObj<HybridGaussianFactor>(factor));
90  EXPECT(equalsXML<HybridGaussianFactor>(factor));
91  EXPECT(equalsBinary<HybridGaussianFactor>(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 HybridGaussianConditional serialization.
110 TEST(HybridSerialization, HybridGaussianConditional) {
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 HybridGaussianConditional gm(mode, {conditional0, conditional1});
118 
119  EXPECT(equalsObj<HybridGaussianConditional>(gm));
120  EXPECT(equalsXML<HybridGaussianConditional>(gm));
121  EXPECT(equalsBinary<HybridGaussianConditional>(gm));
122 }
123 
124 /* ****************************************************************************/
125 // Test HybridBayesNet serialization.
126 TEST(HybridSerialization, HybridBayesNet) {
127  Switching s(2);
128  HybridBayesNet hbn = *(s.linearizedFactorGraph.eliminateSequential());
129 
130  EXPECT(equalsObj<HybridBayesNet>(hbn));
131  EXPECT(equalsXML<HybridBayesNet>(hbn));
132  EXPECT(equalsBinary<HybridBayesNet>(hbn));
133 }
134 
135 /* ****************************************************************************/
136 // Test HybridBayesTree serialization.
137 TEST(HybridSerialization, HybridBayesTree) {
138  Switching s(2);
139  HybridBayesTree hbt = *(s.linearizedFactorGraph.eliminateMultifrontal());
140 
141  EXPECT(equalsObj<HybridBayesTree>(hbt));
142  EXPECT(equalsXML<HybridBayesTree>(hbt));
143  EXPECT(equalsBinary<HybridBayesTree>(hbt));
144 }
145 
146 /* ************************************************************************* */
147 int main() {
148  TestResult tr;
149  return TestRegistry::runAllTests(tr);
150 }
151 /* ************************************************************************* */
TestRegistry::runAllTests
static int runAllTests(TestResult &result)
Definition: TestRegistry.cpp:27
gtsam::DecisionTreeFactor
Definition: DecisionTreeFactor.h:44
GaussianConditional.h
Conditional Gaussian Base class.
simple_graph::b1
Vector2 b1(2, -1)
test_constructor::f1
auto f1
Definition: testHybridNonlinearFactor.cpp:56
gtsam::HybridConditional
Definition: HybridConditional.h:59
Leaf
static sharedNode Leaf(Key key, const SymbolicFactorGraph &factors)
Definition: testSymbolicEliminationTree.cpp:78
HybridGaussianConditional.h
A hybrid conditional in the Conditional Linear Gaussian scheme.
s
RealScalar s
Definition: level1_cplx_impl.h:126
TEST
TEST(HybridSerialization, HybridGaussianFactor)
Definition: testSerializationHybrid.cpp:77
EXPECT
#define EXPECT(condition)
Definition: Test.h:150
TestHarness.h
gtsam::HybridBayesNet
Definition: HybridBayesNet.h:36
Switching.h
simple_graph::factors
const GaussianFactorGraph factors
Definition: testJacobianFactor.cpp:213
gtsam::JacobianFactor
Definition: JacobianFactor.h:91
gtsam::HybridBayesTree
Definition: HybridBayesTree.h:62
gtsam::HybridFactor
Definition: HybridFactor.h:54
HybridBayesNet.h
A Bayes net of Gaussian Conditionals indexed by discrete keys.
X
#define X
Definition: icosphere.cpp:20
gtsam::Factor
Definition: Factor.h:70
DiscreteConditional.h
HybridGaussianFactor.h
A set of GaussianFactors, indexed by a set of discrete keys.
hc
Vector3d hc
Definition: Tridiagonalization_householderCoefficients.cpp:5
gtsam::AlgebraicDecisionTree< Key >
gtsam::Switching
ϕ(X(0)) .. ϕ(X(k),X(k+1)) .. ϕ(X(k);z_k) .. ϕ(M(0)) .. ϕ(M(k),M(k+1))
Definition: Switching.h:122
Vector1
Eigen::Matrix< double, 1, 1 > Vector1
Definition: testEvent.cpp:33
test_constructor::f0
auto f0
Definition: testHybridNonlinearFactor.cpp:55
main
int main()
Definition: testSerializationHybrid.cpp:147
I
#define I
Definition: main.h:112
mode
static const DiscreteKey mode(modeKey, 2)
gtsam::GaussianConditional
Definition: GaussianConditional.h:40
gtsam::HybridGaussianConditional
A conditional of gaussian conditionals indexed by discrete variables, as part of a Bayes Network....
Definition: HybridGaussianConditional.h:53
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
gtsam::HybridGaussianFactor
Implementation of a discrete-conditioned hybrid factor. Implements a joint discrete-continuous factor...
Definition: HybridGaussianFactor.h:59
BOOST_CLASS_EXPORT_GUID
BOOST_CLASS_EXPORT_GUID(Factor, "gtsam_Factor")
Eigen::Matrix
The matrix class, also used for vectors and row-vectors.
Definition: 3rdparty/Eigen/Eigen/src/Core/Matrix.h:178
Z
#define Z
Definition: icosphere.cpp:21
HybridConditional.h
M
Matrix< RealScalar, Dynamic, Dynamic > M
Definition: bench_gemm.cpp:51


gtsam
Author(s):
autogenerated on Fri Oct 4 2024 03:09:24