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__":