docs: def add_edge(self, u, v, weight=None):
          """
          Add an edge between u and v.
  
          The nodes u and v will be automatically added if they are
          not already in the graph.
  
          Parameters
          ----------
          u, v : nodes
              Nodes can be any hashable Python object.
  
          weight: int, float (default=None)
              The weight of the edge.
  
          Examples
          --------
          >>> from pgmpy.base import UndirectedGraph
          >>> G = UndirectedGraph()
          >>> G.add_nodes_from(nodes=['Alice', 'Bob', 'Charles'])
          >>> G.add_edge(u='Alice', v='Bob')
          >>> G.nodes()
          ['Alice', 'Bob', 'Charles']
          >>> G.edges()
          [('Alice', 'Bob')]
  
          When the node is not already present in the graph:
          >>> G.add_edge(u='Alice', v='Ankur')
          >>> G.nodes()
          ['Alice', 'Ankur', 'Bob', 'Charles']
          >>> G.edges()
          [('Alice', 'Bob'), ('Alice', 'Ankur')]
  
          Adding edges with weight:
          >>> G.add_edge('Ankur', 'Maria', weight=0.1)
          >>> G.edge['Ankur']['Maria']
          {'weight': 0.1}
          """
          super(UndirectedGraph, self).add_edge(u, v, weight=weight)