'Add a new edge to the chart, and return True if this operation
modified the chart.  In particular, return true iff the chart
did not already contain ``edge``, or if it did not already associate
``child_pointer_lists`` with ``edge``.
:type edge: EdgeI
:param edge: The new edge
:type child_pointer_lists: sequence of tuple(EdgeI)
:param child_pointer_lists: A sequence of lists of the edges that
were used to form this edge.  This list is used to reconstruct
the trees (or partial trees) that are associated with ``edge``.
:rtype: bool'

def insert(self, edge, *child_pointer_lists):

    if (edge not in self._edge_to_cpls):
        self._append_edge(edge)
        self._register_with_indexes(edge)
    cpls = self._edge_to_cpls.setdefault(edge, OrderedDict())
    chart_was_modified = False
    for child_pointer_list in child_pointer_lists:
        child_pointer_list = tuple(child_pointer_list)
        if (child_pointer_list not in cpls):
            cpls[child_pointer_list] = True
            chart_was_modified = True
    return chart_was_modified
