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 
27 #include <gtsam/inference/Symbol.h>
29 
30 #include "Switching.h"
31 
32 // Include for test suite
34 
35 using namespace std;
36 using namespace gtsam;
40 
41 using namespace serializationTestHelpers;
42 
43 BOOST_CLASS_EXPORT_GUID(Factor, "gtsam_Factor");
44 BOOST_CLASS_EXPORT_GUID(HybridFactor, "gtsam_HybridFactor");
45 BOOST_CLASS_EXPORT_GUID(JacobianFactor, "gtsam_JacobianFactor");
46 BOOST_CLASS_EXPORT_GUID(GaussianConditional, "gtsam_GaussianConditional");
47 BOOST_CLASS_EXPORT_GUID(DiscreteConditional, "gtsam_DiscreteConditional");
48 BOOST_CLASS_EXPORT_GUID(TableDistribution, "gtsam_TableDistribution");
49 
50 BOOST_CLASS_EXPORT_GUID(DecisionTreeFactor, "gtsam_DecisionTreeFactor");
52 BOOST_CLASS_EXPORT_GUID(ADT, "gtsam_AlgebraicDecisionTree");
53 BOOST_CLASS_EXPORT_GUID(ADT::Leaf, "gtsam_AlgebraicDecisionTree_Leaf");
54 BOOST_CLASS_EXPORT_GUID(ADT::Choice, "gtsam_AlgebraicDecisionTree_Choice")
55 
56 BOOST_CLASS_EXPORT_GUID(HybridGaussianFactor, "gtsam_HybridGaussianFactor");
58  "gtsam_HybridGaussianFactor_Factors");
60  "gtsam_HybridGaussianFactor_Factors_Leaf");
61 BOOST_CLASS_EXPORT_GUID(HybridGaussianFactor::FactorValuePairs::Choice,
62  "gtsam_HybridGaussianFactor_Factors_Choice");
63 
65  "gtsam_GaussianFactorGraphValuePair");
67  "gtsam_HybridGaussianProductFactor");
68 
70  "gtsam_HybridGaussianConditional");
72  "gtsam_HybridGaussianConditional_Conditionals");
74  "gtsam_HybridGaussianConditional_Conditionals_Leaf");
76  "gtsam_HybridGaussianConditional_Conditionals_Choice");
77 // Needed since GaussianConditional::FromMeanAndStddev uses it
78 BOOST_CLASS_EXPORT_GUID(noiseModel::Isotropic, "gtsam_noiseModel_Isotropic");
79 
80 BOOST_CLASS_EXPORT_GUID(HybridBayesNet, "gtsam_HybridBayesNet");
81 
82 /* ****************************************************************************/
83 // Test HybridGaussianFactor serialization.
84 TEST(HybridSerialization, HybridGaussianFactor) {
85  DiscreteKey discreteKey{M(0), 2};
86 
87  auto A = Matrix::Zero(2, 1);
88  auto b0 = Matrix::Zero(2, 1);
89  auto b1 = Matrix::Ones(2, 1);
90  auto f0 = std::make_shared<JacobianFactor>(X(0), A, b0);
91  auto f1 = std::make_shared<JacobianFactor>(X(0), A, b1);
92  std::vector<GaussianFactor::shared_ptr> factors{f0, f1};
93 
94  const HybridGaussianFactor factor(discreteKey, factors);
95 
96  EXPECT(equalsObj<HybridGaussianFactor>(factor));
97  EXPECT(equalsXML<HybridGaussianFactor>(factor));
98  EXPECT(equalsBinary<HybridGaussianFactor>(factor));
99 }
100 
101 /* ****************************************************************************/
102 // Test HybridConditional serialization.
103 TEST(HybridSerialization, HybridConditional) {
104  const DiscreteKey mode(M(0), 2);
105  Matrix1 I = Matrix1::Identity();
106  const auto conditional = std::make_shared<GaussianConditional>(
107  GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 0.5));
108  const HybridConditional hc(conditional);
109 
110  EXPECT(equalsObj<HybridConditional>(hc));
111  EXPECT(equalsXML<HybridConditional>(hc));
112  EXPECT(equalsBinary<HybridConditional>(hc));
113 }
114 
115 /* ****************************************************************************/
116 // Test HybridGaussianConditional serialization.
117 TEST(HybridSerialization, HybridGaussianConditional) {
118  const DiscreteKey mode(M(0), 2);
119  Matrix1 I = Matrix1::Identity();
120  const auto conditional0 = std::make_shared<GaussianConditional>(
121  GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 0.5));
122  const auto conditional1 = std::make_shared<GaussianConditional>(
123  GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 3));
124  const HybridGaussianConditional gm(mode, {conditional0, conditional1});
125 
126  EXPECT(equalsObj<HybridGaussianConditional>(gm));
127  EXPECT(equalsXML<HybridGaussianConditional>(gm));
128  EXPECT(equalsBinary<HybridGaussianConditional>(gm));
129 }
130 
131 /* ****************************************************************************/
132 // Test HybridBayesNet serialization.
133 TEST(HybridSerialization, HybridBayesNet) {
134  Switching s(2);
135  HybridBayesNet hbn = *(s.linearizedFactorGraph().eliminateSequential());
136 
137  EXPECT(equalsObj<HybridBayesNet>(hbn));
138  EXPECT(equalsXML<HybridBayesNet>(hbn));
139  EXPECT(equalsBinary<HybridBayesNet>(hbn));
140 }
141 
142 /* ****************************************************************************/
143 // Test HybridBayesTree serialization.
144 TEST(HybridSerialization, HybridBayesTree) {
145  Switching s(2);
146  HybridBayesTree hbt = *(s.linearizedFactorGraph().eliminateMultifrontal());
147 
148  EXPECT(equalsObj<HybridBayesTree>(hbt));
149  EXPECT(equalsXML<HybridBayesTree>(hbt));
150  EXPECT(equalsBinary<HybridBayesTree>(hbt));
151 }
152 
153 /* ************************************************************************* */
154 int main() {
155  TestResult tr;
156  return TestRegistry::runAllTests(tr);
157 }
158 /* ************************************************************************* */
TestRegistry::runAllTests
static int runAllTests(TestResult &result)
Definition: TestRegistry.cpp:27
TableDistribution.h
gtsam::DecisionTreeFactor
Definition: DecisionTreeFactor.h:45
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:60
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:84
EXPECT
#define EXPECT(condition)
Definition: Test.h:150
TestHarness.h
gtsam::HybridBayesNet
Definition: HybridBayesNet.h:37
gtsam::GaussianFactorGraphValuePair
std::pair< GaussianFactorGraph, double > GaussianFactorGraphValuePair
Definition: HybridGaussianProductFactor.h:31
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:51
HybridBayesNet.h
A Bayes net of Gaussian Conditionals indexed by discrete keys.
gtsam::HybridGaussianProductFactor
Alias for DecisionTree of GaussianFactorGraphs and their scalar sums.
Definition: HybridGaussianProductFactor.h:34
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 >
pruning_fixture::factor
DecisionTreeFactor factor(D &C &B &A, "0.0 0.0 0.0 0.60658897 0.61241912 0.61241969 0.61247685 0.61247742 0.0 " "0.0 0.0 0.99995287 1.0 1.0 1.0 1.0")
gtsam::Switching
ϕ(X(0)) .. ϕ(X(k),X(k+1)) .. ϕ(X(k);z_k) .. ϕ(M(0)) .. ϕ(M(K-3),M(K-2))
Definition: Switching.h:124
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:154
I
#define I
Definition: main.h:112
gtsam::TableDistribution
Definition: TableDistribution.h:39
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:55
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: SFMdata.h:40
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:60
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 Mar 28 2025 03:07:53