code: def add_edge(self, from_node, to_node):
          
          # Maybe to_node is unknown
          if to_node not in self.nodes:
              self.add_node(to_node)
  
          try:
              self.nodes[from_node]["sons"].append(to_node)
          # If from_node does not exist, add it with its son
          except KeyError:
              self.nodes[from_node] = {"dfs_loop_status": "", "sons": [to_node]}
docs: Add edge between two node
          The edge is oriented
  
          :param from_node: node where edge starts
          :type from_node: object
          :param to_node: node where edge ends
          :type to_node: object
          :return: None