def METHOD_NAME(self, from_obj, to_obj, label):
    from_obj_ord = self.find_ord(from_obj)
    to_obj_ord = self.find_ord(to_obj)
    '''
    To node is no longer a root node
    '''
    self.root_nodes.discard(to_obj_ord)
    if from_obj_ord is None and to_obj_ord is None:
        raise LookupError("From object {} and to object {} not found".format(from_obj, to_obj))
    elif from_obj_ord is None:
        raise LookupError("From object not found {}".format(from_obj))
    elif to_obj_ord is None:
        raise LookupError("To object not found {}".format(to_obj))
    self.node_from_edges_by_label.setdefault(label, dict()).setdefault(from_obj_ord, [])
    self.node_to_edges_by_label.setdefault(label, dict()).setdefault(to_obj_ord, [])
    self.node_from_edges_by_label[label][from_obj_ord].append(to_obj_ord)
    self.node_to_edges_by_label[label][to_obj_ord].append(from_obj_ord)