test_GaussianBayesNet.py
Go to the documentation of this file.
1 """
2 GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
3 Atlanta, Georgia 30332-0415
4 All Rights Reserved
5 
6 See LICENSE for the license information
7 
8 Unit tests for Gaussian Bayes Nets.
9 Author: Frank Dellaert
10 """
11 # pylint: disable=invalid-name, no-name-in-module, no-member
12 
13 import unittest
14 
15 import numpy as np
16 from gtsam.utils.test_case import GtsamTestCase
17 
18 import gtsam
19 from gtsam import GaussianBayesNet, GaussianConditional
20 
21 # some keys
22 _x_ = 11
23 _y_ = 22
24 _z_ = 33
25 
26 I_1x1 = np.eye(1, dtype=float)
27 
28 
30  """Create a small Bayes Net for testing"""
31  bayesNet = GaussianBayesNet()
32  bayesNet.push_back(GaussianConditional(_x_, [9.0], I_1x1, _y_, I_1x1))
33  bayesNet.push_back(GaussianConditional(_y_, [5.0], I_1x1))
34  return bayesNet
35 
36 
38  """Tests for Gaussian Bayes nets."""
39 
40  def test_matrix(self):
41  """Test matrix method"""
42  R, d = smallBayesNet().matrix() # get matrix and RHS
43  R1 = np.array([[1.0, 1.0], [0.0, 1.0]])
44  d1 = np.array([9.0, 5.0])
45  np.testing.assert_equal(R, R1)
46  np.testing.assert_equal(d, d1)
47 
48  def test_evaluate(self):
49  """Test evaluate method"""
50  bayesNet = smallBayesNet()
51  values = gtsam.VectorValues()
52  values.insert(_x_, np.array([9.0]))
53  values.insert(_y_, np.array([5.0]))
54  for i in [0, 1]:
55  self.assertAlmostEqual(
56  bayesNet.at(i).logProbability(values),
57  np.log(bayesNet.at(i).evaluate(values)))
58  self.assertAlmostEqual(bayesNet.logProbability(values),
59  np.log(bayesNet.evaluate(values)))
60 
61  def test_sample(self):
62  """Test sample method"""
63  bayesNet = smallBayesNet()
64  sample = bayesNet.sample()
65  self.assertIsInstance(sample, gtsam.VectorValues)
66 
67  # standard deviation is 1.0 for both, so we set tolerance to 3*sigma
68  mean = bayesNet.optimize()
69  self.gtsamAssertEquals(sample, mean, tol=3.0)
70 
71  # Sample with rng
72  rng = gtsam.MT19937(42)
73  conditional = GaussianConditional(_x_, [9.0], I_1x1)
74  # Sample multiple times and average to get mean
75  val = 0
76  niters = 10000
77  for _ in range(niters):
78  val += conditional.sample(rng).at(_x_).item()
79  self.assertAlmostEqual(val / niters, 9.0, 1)
80 
81 
82 if __name__ == "__main__":
83  unittest.main()
test_GaussianBayesNet.TestGaussianBayesNet.test_matrix
def test_matrix(self)
Definition: test_GaussianBayesNet.py:40
gtsam::utils.test_case.GtsamTestCase.gtsamAssertEquals
def gtsamAssertEquals(self, actual, expected, tol=1e-9)
Definition: test_case.py:19
gtsam::range
Double_ range(const Point2_ &p, const Point2_ &q)
Definition: slam/expressions.h:30
gtsam::VectorValues
Definition: VectorValues.h:74
gtsam::GaussianConditional
Definition: GaussianConditional.h:40
gtsam::utils.test_case
Definition: test_case.py:1
test_GaussianBayesNet.TestGaussianBayesNet
Definition: test_GaussianBayesNet.py:37
test_GaussianBayesNet.TestGaussianBayesNet.test_evaluate
def test_evaluate(self)
Definition: test_GaussianBayesNet.py:48
matrix
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: gtsam/3rdparty/Eigen/blas/common.h:110
test_GaussianBayesNet.TestGaussianBayesNet.test_sample
def test_sample(self)
Definition: test_GaussianBayesNet.py:61
gtsam::utils.test_case.GtsamTestCase
Definition: test_case.py:16
gtsam::GaussianBayesNet
Definition: GaussianBayesNet.h:35
test_GaussianBayesNet.smallBayesNet
def smallBayesNet()
Definition: test_GaussianBayesNet.py:29


gtsam
Author(s):
autogenerated on Wed May 28 2025 03:06:00