docs: def add_edge(self, u, v, **kwargs):
          """
          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.
  
          Examples
          --------
          >>> from pgmpy.models import BayesianModel/home/abinash/software_packages/numpy-1.7.1
          >>> G = BayesianModel()
          >>> G.add_nodes_from(['grade', 'intel'])
          >>> G.add_edge('grade', 'intel')
          """
          if u == v:
              raise ValueError('Self loops are not allowed.')
          if u in self.nodes() and v in self.nodes() and nx.has_path(self, v, u):
              raise ValueError(
                  'Loops are not allowed. Adding the edge from (%s->%s) forms a loop.' % (u, v))
          else:
              super(BayesianModel, self).add_edge(u, v, **kwargs)