code: def add_edge(self, ind_node, dep_node):
          
          graph = self.graph
          if ind_node not in graph:
              raise KeyError('independent node %s does not exist' % ind_node)
          if dep_node not in graph:
              raise KeyError('dependent node %s does not exist' % dep_node)
          test_graph = deepcopy(graph)
          test_graph[ind_node].add(dep_node)
          test_dag = DAG()
          test_dag.graph = test_graph
          is_valid, message = test_dag.validate()
          if is_valid:
              graph[ind_node].add(dep_node)
          else:
              raise DAGValidationError(message)
docs: Add an edge (dependency) between the specified nodes.
  
          Args:
              ind_node (str): The independent node to add an edge to.
              dep_node (str): The dependent node that has a dependency on the
                              ind_node.
  
          Raises:
              KeyError: Either the ind_node, or dep_node do not exist.
              DAGValidationError: Raised if the resulting graph is invalid.