docs: def add_edge(self, u, v, **kwargs):
          """
          Add an edge between variable_node and factor_node.
  
          Parameters
          ----------
          u, v: nodes
              Nodes can be any hashable Python object.
  
          Examples
          --------
          >>> from pgmpy.models import FactorGraph
          >>> G = FactorGraph()
          >>> G.add_nodes_from(['a', 'b', 'c'])
          >>> phi1 = DiscreteFactor(['a', 'b'], [2, 2], np.random.rand(4))
          >>> G.add_nodes_from([phi1, phi2])
          >>> G.add_edge('a', phi1)
          """
          if u != v:
              super(FactorGraph, self).add_edge(u, v, **kwargs)
          else:
              raise ValueError('Self loops are not allowed')