def get_non_conflicting_groups(passes, delay=timedelta(seconds=0)): """Get the different non-conflicting solutions in a group of conflicting passes. """ # Uses graphs and maximal clique finding with the Bron-Kerbosch algorithm. order = len(passes) if order == 1: return [passes] graph = Graph(order) for i, overpass in enumerate(sorted(passes, key=lambda x: x.risetime)): for j in range(i + 1, order): if not overpass.overlaps(passes[j], delay): graph.add_edge(i, j) groups = [] for res in graph.bron_kerbosch(set(), set(graph.vertices), set()): grp = [] for vertex in res: grp.append(passes[vertex]) groups.append(sorted(grp)) return groups