class_docstr: Class for performing inference using Belief Propagation method
  for the input Dynamic Bayesian Network.
  
  For the exact inference implementation, the interface algorithm
  is used which is adapted from [1].
  
  Parameters
  ----------
  model: Dynamic Bayesian Network
      Model for which inference is to performed
  
  Examples
  --------
  >>> from pgmpy.factors.discrete import TabularCPD
  >>> from pgmpy.models import DynamicBayesianNetwork as DBN
  >>> from pgmpy.inference import DBNInference
  >>> dbnet = DBN()
  >>> dbnet.add_edges_from([(('Z', 0), ('X', 0)), (('X', 0), ('Y', 0)),
  ...                       (('Z', 0), ('Z', 1))])
  >>> z_start_cpd = TabularCPD(('Z', 0), 2, [[0.5], [0.5]])
  >>> x_i_cpd = TabularCPD(('X', 0), 2, [[0.6, 0.9],
  ...                                    [0.4, 0.1]],
  ...                      evidence=[('Z', 0)],
  ...                      evidence_card=[2])
  >>> y_i_cpd = TabularCPD(('Y', 0), 2, [[0.2, 0.3],
  ...                                    [0.8, 0.7]],
  ...                      evidence=[('X', 0)],
  ...                      evidence_card=[2])
  >>> z_trans_cpd = TabularCPD(('Z', 1), 2, [[0.4, 0.7],
  ...                                        [0.6, 0.3]],
  ...                      evidence=[('Z', 0)],
  ...                      evidence_card=[2])
  >>> dbnet.add_cpds(z_start_cpd, z_trans_cpd, x_i_cpd, y_i_cpd)
  >>> dbnet.initialize_initial_state()
  >>> dbn_inf = DBNInference(dbnet)
  >>> dbn_inf.start_junction_tree.nodes()
  NodeView(((('X', 0), ('Y', 0)), (('X', 0), ('Z', 0))))
  >>> dbn_inf.one_and_half_junction_tree.nodes()
  NodeView(((('Z', 1), ('Z', 0)), (('Y', 1), ('X', 1)), (('Z', 1), ('X', 1))))
  
  References
  ----------
  [1] Dynamic Bayesian Networks: Representation, Inference and Learning
      by Kevin Patrick Murphy
      http://www.cs.ubc.ca/~murphyk/Thesis/thesis.pdf
class_docstr_tok: ["Class","for","performing","inference","using","Belief","Propagation","method","for","the","input","Dynamic","Bayesian","Network",".","For","the","exact","inference","implementation",",","the","interface","algorithm","is","used","which","is","adapted","from","[","1","]",".","Parameters","--","--","--","--","--","model",":","Dynamic","Bayesian","Network","Model","for","which","inference","is","to","performed","Examples","--","--","--","--",">",">",">","from","pgmpy.factors.discrete","import","TabularCPD",">",">",">","from","pgmpy.models","import","DynamicBayesianNetwork","as","DBN",">",">",">","from","pgmpy.inference","import","DBNInference",">",">",">","dbnet","=","DBN","(",")",">",">",">","dbnet.add_edges_from","(","[","(","(","'","Z","'",",","0",")",",","(","'","X","'",",","0",")",")",",","(","(","'","X","'",",","0",")",",","(","'","Y","'",",","0",")",")",",","...","(","(","'","Z","'",",","0",")",",","(","'","Z","'",",","1",")",")","]",")",">",">",">","z_start_cpd","=","TabularCPD","(","(","'","Z","'",",","0",")",",","2",",","[","[","0.5","]",",","[","0.5","]","]",")",">",">",">","x_i_cpd","=","TabularCPD","(","(","'","X","'",",","0",")",",","2",",","[","[","0.6",",","0.9","]",",","...","[","0.4",",","0.1","]","]",",","...","evidence=","[","(","'","Z","'",",","0",")","]",",","...","evidence_card=","[","2","]",")",">",">",">","y_i_cpd","=","TabularCPD","(","(","'","Y","'",",","0",")",",","2",",","[","[","0.2",",","0.3","]",",","...","[","0.8",",","0.7","]","]",",","...","evidence=","[","(","'","X","'",",","0",")","]",",","...","evidence_card=","[","2","]",")",">",">",">","z_trans_cpd","=","TabularCPD","(","(","'","Z","'",",","1",")",",","2",",","[","[","0.4",",","0.7","]",",","...","[","0.6",",","0.3","]","]",",","...","evidence=","[","(","'","Z","'",",","0",")","]",",","...","evidence_card=","[","2","]",")",">",">",">","dbnet.add_cpds","(","z_start_cpd",",","z_trans_cpd",",","x_i_cpd",",","y_i_cpd",")",">",">",">","dbnet.initialize_initial_state","(",")",">",">",">","dbn_inf","=","DBNInference","(","dbnet",")",">",">",">","dbn_inf.start_junction_tree.nodes","(",")","NodeView","(","(","(","(","'","X","'",",","0",")",",","(","'","Y","'",",","0",")",")",",","(","(","'","X","'",",","0",")",",","(","'","Z","'",",","0",")",")",")",")",">",">",">","dbn_inf.one_and_half_junction_tree.nodes","(",")","NodeView","(","(","(","(","'","Z","'",",","1",")",",","(","'","Z","'",",","0",")",")",",","(","(","'","Y","'",",","1",")",",","(","'","X","'",",","1",")",")",",","(","(","'","Z","'",",","1",")",",","(","'","X","'",",","1",")",")",")",")","References","--","--","--","--","--","[","1","]","Dynamic","Bayesian","Networks",":","Representation",",","Inference","and","Learning","by","Kevin","Patrick","Murphy","http",":","\/\/www.cs.ubc.ca\/~murphyk\/Thesis\/thesis.pdf"]
code: def __init__(self, model):
      super(DBNInference, self).__init__(model)
      self._initialize_structures()
  
      self.interface_nodes_0 = model.get_interface_nodes(time_slice=0)
      self.interface_nodes_1 = model.get_interface_nodes(time_slice=1)
  
      start_markov_model = self.start_bayesian_model.to_markov_model()
      one_and_half_markov_model = (
          self.one_and_half_model.to_markov_model()
      )
  
      combinations_slice_0 = tee(
          combinations(set(self.interface_nodes_0), 2), 2
      )
      combinations_slice_1 = combinations(
          set(self.interface_nodes_1), 2
      )
  
      start_markov_model.add_edges_from(combinations_slice_0[0])
      one_and_half_markov_model.add_edges_from(
          chain(combinations_slice_0[1], combinations_slice_1)
      )
  
      self.one_and_half_junction_tree = (
          one_and_half_markov_model.to_junction_tree()
      )
      self.start_junction_tree = start_markov_model.to_junction_tree()
  
      self.start_interface_clique = self._get_clique(
          self.start_junction_tree, self.interface_nodes_0
      )
      self.in_clique = self._get_clique(
          self.one_and_half_junction_tree, self.interface_nodes_0
      )
      self.out_clique = self._get_clique(
          self.one_and_half_junction_tree, self.interface_nodes_1
      )
  
file_path: pgmpy/pgmpy/inference/dbn_inference.py
imports: from collections import defaultdict
  from itertools import chain, combinations, tee
  from pgmpy.factors import factor_product
  from pgmpy.factors.discrete import DiscreteFactor
  from pgmpy.inference import BeliefPropagation, Inference
label_desc: Use image node_id 1 to create a new DBNInference object from inherited base classes: Inference with example: obj = DBNInference(model)