def _add_rule(self, rule): key = None for pv in enumerate(rule): if pv[1] is not None: key = pv if key is not None: ind = self._index.setdefault(key, {}) ind[rule] = 1 trellis.on_undo(ind.pop, rule, 1)
def _watching(self): cells = self._watching or {} for k in self.keys.removed: if k in cells: trellis.on_undo(cells.__setitem__, k, cells[k]) del cells[k] trellis.mark_dirty() lookup = self.lookup_func for k in self.keys.added: trellis.on_undo(cells.pop, k, None) cells[k] = trellis.Cell(instancemethod(lookup, k, type(k))) trellis.mark_dirty() return cells
def _del_rule(self, rule): index = self._index for pv in enumerate(rule): if pv in index: index[pv].pop(rule, 1) trellis.on_undo(index[pv].__setitem__, rule, 1)