def compress(cls, operators): sets = OrderedDict() incs = OrderedDict() rval = [] for op in operators: if isinstance(op, cls): if op.as_update: rval.append(op) else: assert op.sets or op.incs if op.sets: sets.setdefault(op.sets[0], []).append(op) if op.incs: incs.setdefault(op.incs[0], []).append(op) else: rval.append(op) done = set() for view, set_ops in iteritems(sets): set_op, = set_ops done.add(set_op) for inc_op in incs.get(view, []): set_op.As.extend(inc_op.As) set_op.Xs.extend(inc_op.Xs) done.add(inc_op) rval.append(set_op) for view, inc_ops in iteritems(incs): for inc_op in inc_ops: if inc_op not in done: rval.append(inc_op) return rval