def add_edge(self, from_node, to_node):
        """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
        """
        # 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]}
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