docs: def _AddEdge(self, start_node, end_node):
      """Add a directed edge to the graph.
  
      Add the end to the list of outgoing nodes of the start and the start to the
      list of incoming nodes of the end node.
  
      Args:
        start_node: name of the start node
        end_node: name of the end node
      """
  
      self.graph[start_node].outgoing.append(end_node)
  
      # This check is necessary because an artifact can provide attributes that
      # are not covered by the graph because they are not relevant for the
      # requested artifacts.
      if end_node in self.graph:
        self.graph[end_node].incoming.append(start_node)