def get_edge_posteriors(self,seq):
     nr_states = self.nr_states
     node_potentials,edge_potentials = self.build_potentials(seq)
     forward,backward = forward_backward(node_potentials,edge_potentials)
     H,N = forward.shape
     likelihood = np.sum(forward[:,N-1])
     return self.get_edge_posteriors_aux(seq,forward,backward,node_potentials,edge_potentials,likelihood)
 def get_posteriors(self,seq):
     forward,backward = forward_backward(seq)
     #self.sanity_check_fb(forward,backward)
     H,N = forward.shape
     likelihood = np.sum(forward[:,N-1])
     node_posteriors = self.get_node_posteriors_aux(seq,forward,backward,likelihood)
     edge_posteriors = self.get_edge_posteriors_aux(seq,forward,backward,likelihood)
     return [node_posteriors,edge_posteriors],likelihood 
 def get_posteriors(self,seq):
     nr_states = self.nr_states
     node_potentials,edge_potentials = self.build_potentials(seq)
     forward,backward = forward_backward(node_potentials,edge_potentials)
     #self.sanity_check_fb(forward,backward)
     H,N = forward.shape
     likelihood = np.sum(forward[:,N-1])
     node_posteriors = self.get_node_posteriors_aux(seq,forward,backward,node_potentials,edge_potentials,likelihood)
     edge_posteriors = self.get_edge_posteriors_aux(seq,forward,backward,node_potentials,edge_potentials,likelihood)
     return [node_posteriors,edge_posteriors],likelihood 
 def forward_backward(self,seq):
     node_potentials,edge_potentials = self.build_potentials(seq)
     forward,backward = forward_backward(node_potentials,edge_potentials)
     sanity_check_forward_backward(forward,backward)
     return forward,backward