docstr: Return the neighbouring cliques
  this is used during the propagation algorithm.
docstr_tok: ["Return","the","neighbouring","cliques","this","is","used","during","the","propagation","algorithm","."]
code: def neighbouring_cliques(self):
      """Return the neighbouring cliques
      this is used during the propagation algorithm.
  
      """
      neighbours = set()
      for sepset_node in self.neighbours:
          # All *immediate* neighbours will
          # be sepset nodes, its the neighbours of
          # these sepsets that form the nodes
          # clique neighbours (excluding itself)
          for clique_node in sepset_node.neighbours:
              if clique_node is not self:
                  neighbours.add(clique_node)
      return neighbours
  
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 3 for calling the JoinTreeCliqueNode obj's underlying member method code with example usage: obj.neighbouring_cliques() and returns: neighbours