2 GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
3 Atlanta, Georgia 30332-0415
6 See LICENSE for the license information
8 Unit tests for Discrete Search.
16 from dfg_utils
import generate_observation_cpt, generate_transition_cpt, make_key
27 OrderingType = Ordering.OrderingType
31 """Tests for Discrete Factor Graphs."""
35 Test for numerical underflow in EliminateMPE on long chains.
36 Adapted from the toy problem of @pcl15423
37 Ref: https://github.com/borglab/gtsam/issues/1448
45 Z = {index:
make_key(
"Z", index, num_obs + 1)
for index
in range(num_obs)}
49 for i
in reversed(
range(1, num_obs)):
51 X[i], [X[i - 1]], transition_cpt
53 graph.push_back(transition_conditional)
59 for i
in range(num_obs):
61 factor = obs_conditional.likelihood(i)
62 graph.push_back(factor)
65 mpe = graph.optimize()
66 vals = [mpe[X[i][0]]
for i
in range(num_obs)]
67 self.assertEqual(vals, [desired_state] * num_obs)
71 for i
in reversed(
range(num_obs)):
72 ordering.push_back(X[i][0])
75 search = DiscreteSearch.FromFactorGraph(graph, ordering)
76 solutions = search.run(K=1)
77 mpe2 = solutions[0].assignment
79 vals = [mpe2[X[i][0]]
for i
in range(num_obs)]
80 self.assertEqual(vals, [desired_state] * num_obs)
83 if __name__ ==
"__main__":