class_docstr: Class for representing Junction Tree.
  
  Junction tree is undirected graph where each node represents a clique
  (list, tuple or set of nodes) and edges represent sepset between two cliques.
  Each sepset in G separates the variables strictly on one side of edge to
  other.
  
  Parameters
  ----------
  data: input graph
      Data to initialize graph. If data=None (default) an empty graph is
      created. The data is an edge list.
  
  Examples
  --------
  Create an empty JunctionTree with no nodes and no edges
  
  >>> from pgmpy.models import JunctionTree
  >>> G = JunctionTree()
  
  G can be grown by adding clique nodes.
  
  **Nodes:**
  
  Add a tuple (or list or set) of nodes as single clique node.
  
  >>> G.add_node(('a', 'b', 'c'))
  >>> G.add_nodes_from([('a', 'b'), ('a', 'b', 'c')])
  
  **Edges:**
  
  G can also be grown by adding edges.
  
  >>> G.add_edge(('a', 'b', 'c'), ('a', 'b'))
  
  or a list of edges
  
  >>> G.add_edges_from([(('a', 'b', 'c'), ('a', 'b')),
  ...                   (('a', 'b', 'c'), ('a', 'c'))])
docstr: Check the model for various errors. This method checks for the following
  errors. In the same time also updates the cardinalities of all the random
  variables.
  
  * Checks if clique potentials are defined for all the cliques or not.
  * Check for running intersection property is not done explicitly over
    here as it done in the add_edges method.
  
  Returns
  -------
  check: boolean
      True if all the checks are passed
code: def check_model(self):
      """
      Check the model for various errors. This method checks for the following
      errors. In the same time also updates the cardinalities of all the random
      variables.
  
      * Checks if clique potentials are defined for all the cliques or not.
      * Check for running intersection property is not done explicitly over
        here as it done in the add_edges method.
  
      Returns
      -------
      check: boolean
          True if all the checks are passed
      """
      if not nx.is_connected(self):
          raise ValueError(
              "The Junction Tree defined is not fully connected."
          )
  
      return super(JunctionTree, self).check_model()
  
file_path: pgmpy/pgmpy/models/JunctionTree.py
imports: import networkx
  from pgmpy.models import ClusterGraph
label_desc: Use image node_id 4 for calling the JunctionTree obj's underlying member method code with example usage: obj.check_model() and returns: super