def group_by_targets(sl): groups = [] seen = set() for order, stmt in enumerate(flat_iteration(sl)): targets = set(list_targets(stmt)) group = [(order, stmt)] disjoint = targets.isdisjoint(seen) seen |= targets if not disjoint: groups, old_groups = [], groups for old_targets, old_group in old_groups: if targets.isdisjoint(old_targets): groups.append((old_targets, old_group)) else: targets |= old_targets group += old_group groups.append((targets, group)) return [(targets, _resort_statements(stmts)) for targets, stmts in groups]
def _flat_list(e): if isinstance(e, collections.Iterable): return flat_iteration(e) else: return [e]
def __init__(self, *args): Value.__init__(self) self.l = list(flat_iteration(args))