docs: def get_factors(self, node=None):
          """
          Return the factors that have been added till now to the graph.
  
          If node is not None, it would return the factor corresponding to the
          given node.
  
          Examples
          --------
          >>> from pgmpy.models import ClusterGraph
          >>> from pgmpy.factors.discrete import DiscreteFactor
          >>> G = ClusterGraph()
          >>> G.add_nodes_from([('a', 'b', 'c'), ('a', 'b'), ('a', 'c')])
          >>> G.add_edges_from([(('a', 'b', 'c'), ('a', 'b')),
          ...                   (('a', 'b', 'c'), ('a', 'c'))])
          >>> phi1 = DiscreteFactor(['a', 'b', 'c'], [2, 2, 2], np.random.rand(8))
          >>> phi2 = DiscreteFactor(['a', 'b'], [2, 2], np.random.rand(4))
          >>> phi3 = DiscreteFactor(['a', 'c'], [2, 2], np.random.rand(4))
          >>> G.add_factors(phi1, phi2, phi3)
          >>> G.get_factors()
          >>> G.get_factors(node=('a', 'b', 'c'))
          """
          if node is None:
              return self.factors
          else:
              nodes = [set(n) for n in self.nodes()]
  
              if set(node) not in nodes:
                  raise ValueError('Node not present in Cluster Graph')
  
              factors = filter(lambda x: set(x.scope()) == set(node), self.factors)
              return next(factors)