testHybridConditional.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 
19 
20 #include "TinyHybridExample.h"
21 
22 // Include for test suite
24 
25 using namespace gtsam;
26 
30 
31 /* ****************************************************************************/
32 // Test the HybridConditional constructor.
33 TEST(HybridConditional, Constructor) {
34  // Create a HybridGaussianConditional.
35  const KeyVector continuousKeys{X(0), X(1)};
36  const DiscreteKeys discreteKeys{{M(0), 2}};
37  const size_t nFrontals = 1;
38  const HybridConditional hc(continuousKeys, discreteKeys, nFrontals);
39 
40  // Check Frontals:
41  EXPECT_LONGS_EQUAL(1, hc.nrFrontals());
42  const auto frontals = hc.frontals();
43  EXPECT_LONGS_EQUAL(1, frontals.size());
44  EXPECT_LONGS_EQUAL(X(0), *frontals.begin());
45 
46  // Check parents:
47  const auto parents = hc.parents();
48  EXPECT_LONGS_EQUAL(2, parents.size());
49  EXPECT_LONGS_EQUAL(X(1), *parents.begin());
50  EXPECT_LONGS_EQUAL(M(0), *(parents.begin() + 1));
51 }
52 
53 /* ****************************************************************************/
54 // Check invariants for all conditionals in a tiny Bayes net.
55 TEST(HybridConditional, Invariants) {
56  // Create hybrid Bayes net p(z|x,m)p(x)P(m)
57  auto bn = tiny::createHybridBayesNet();
58 
59  // Create values to check invariants.
60  const VectorValues c{{X(0), Vector1(5.1)}, {Z(0), Vector1(4.9)}};
61  const DiscreteValues d{{M(0), 1}};
62  const HybridValues values{c, d};
63 
64  // Check invariants for p(z|x,m)
65  auto hc0 = bn.at(0);
66  CHECK(hc0->isHybrid());
67 
68  // Check parents:
69  const auto parents = hc0->parents();
70  EXPECT_LONGS_EQUAL(2, parents.size());
71  EXPECT_LONGS_EQUAL(X(0), *parents.begin());
72  EXPECT_LONGS_EQUAL(M(0), *(parents.begin() + 1));
73 
74  // Check invariants as a HybridGaussianConditional.
75  const auto conditional = hc0->asHybrid();
77 
78  // Check invariants as a HybridConditional.
80 
81  // Check invariants for p(x)
82  auto hc1 = bn.at(1);
83  CHECK(hc1->isContinuous());
84 
85  // Check invariants as a GaussianConditional.
86  const auto gaussian = hc1->asGaussian();
89 
90  // Check invariants as a HybridConditional.
92 
93  // Check invariants for p(m)
94  auto hc2 = bn.at(2);
95  CHECK(hc2->isDiscrete());
96 
97  // Check invariants as a DiscreteConditional.
98  const auto discrete = hc2->asDiscrete();
101 
102  // Check invariants as a HybridConditional.
104 }
105 
106 /* ************************************************************************* */
107 int main() {
108  TestResult tr;
109  return TestRegistry::runAllTests(tr);
110 }
111 /* ************************************************************************* */
TestRegistry::runAllTests
static int runAllTests(TestResult &result)
Definition: TestRegistry.cpp:27
gtsam::Vector1
Eigen::Matrix< double, 1, 1 > Vector1
Definition: Vector.h:42
gtsam::HybridValues
Definition: HybridValues.h:37
gtsam::HybridConditional
Definition: HybridConditional.h:60
d
static const double d[K][N]
Definition: igam.h:11
EXPECT_LONGS_EQUAL
#define EXPECT_LONGS_EQUAL(expected, actual)
Definition: Test.h:154
EXPECT
#define EXPECT(condition)
Definition: Test.h:150
TestHarness.h
gtsam::symbol_shorthand::M
Key M(std::uint64_t j)
Definition: inference/Symbol.h:160
c
Scalar Scalar * c
Definition: benchVecAdd.cpp:17
different_sigmas::values
HybridValues values
Definition: testHybridBayesNet.cpp:247
X
#define X
Definition: icosphere.cpp:20
gtsam::DiscreteKeys
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition: DiscreteKey.h:41
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::symbol_shorthand::X
Key X(std::uint64_t j)
Definition: inference/Symbol.h:171
gtsam::VectorValues
Definition: VectorValues.h:74
gtsam::symbol_shorthand::Z
Key Z(std::uint64_t j)
Definition: inference/Symbol.h:173
gtsam::Conditional< HybridGaussianFactor, HybridGaussianConditional >::CheckInvariants
static bool CheckInvariants(const HybridGaussianConditional &conditional, const VALUES &x)
Definition: Conditional-inst.h:69
TinyHybridExample.h
TestResult
Definition: TestResult.h:26
gtsam
traits
Definition: SFMdata.h:40
gtsam::TEST
TEST(SmartFactorBase, Pinhole)
Definition: testSmartFactorBase.cpp:38
gtsam::DiscreteValues
Definition: DiscreteValues.h:34
CHECK
#define CHECK(condition)
Definition: Test.h:108
gtsam::tiny::createHybridBayesNet
HybridBayesNet createHybridBayesNet(size_t num_measurements=1, bool manyModes=false)
Definition: TinyHybridExample.h:39
main
int main()
Definition: testHybridConditional.cpp:107
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:02