docstr: Refer to H&D pg. 20
docstr_tok: ["Refer","to","H","&","D","pg",".","20"]
code: def propagate(self, starting_clique=None):
      """Refer to H&D pg. 20"""
  
      # Step 1 is to choose an arbitrary clique cluster
      # as starting cluster
      if starting_clique is None:
          starting_clique = self.clique_nodes[0]
      logging.debug(
          "Starting propagating messages from: %s", starting_clique.name
      )
      # Step 2: Unmark all clusters, call collect_evidence(X)
      for node in self.clique_nodes:
          node.marked = False
          logging.debug(
              "Marking node as not visited Node: %s", node.name
          )
      self.collect_evidence(sender=starting_clique)
  
      # Step 3: Unmark all clusters, call distribute_evidence(X)
      for node in self.clique_nodes:
          node.marked = False
  
      self.distribute_evidence(starting_clique)
  
imports: import copy
  import heapq
  import logging
  from collections import defaultdict
  from io import StringIO
  from itertools import combinations, product
  from random import choice, random
  from .exceptions import VariableNotInGraphError, VariableValueNotInDomainError
  from .graph import Node, UndirectedGraph, UndirectedNode, connect
  from .utils import get_args, get_original_factors
label_desc: Use image node_id 7 for calling the JoinTree obj's underlying member method code with example usage: obj.propagate(starting_clique) without return types