2 from gtsam 
import Symbol
 
    5 def make_key(character, index, cardinality):
 
    7     Helper function to mimic the behavior of gtbook.Variables discrete_series function. 
    9     symbol = 
Symbol(character, index)
 
   11     return (key, cardinality)
 
   16     Generate a row-wise CPT for a transition matrix. 
   18     if transitions 
is None:
 
   20         transitions = np.eye(num_states) + 0.1 / num_states
 
   23     transitions /= np.sum(transitions, axis=1, keepdims=
True)
 
   24     return " ".join([
"/".join(map(str, row)) 
for row 
in transitions])
 
   29     Generate a row-wise CPT for observations with contrived probabilities. 
   31     obs = np.zeros((num_states, num_obs + 1))
 
   33     obs[desired_state, 0:-1] = 1
 
   34     obs[desired_state, -1] = 0
 
   35     return " ".join([
"/".join(map(str, row)) 
for row 
in obs])