def test_topsort_level_stability(): data = [ (0, 2), (1, 2), (2, 3), (2, 4), (3, 4), (3, 5), (6, 2), ] assert topsort.topsort_levels(data)[0] == [0, 1, 6] assert topsort.topsort(data) == [0, 1, 6, 2, 3, 4, 5] # Swap first two edges - so 1 appears first swap(data, 0, 1) assert topsort.topsort_levels(data)[0] == [1, 0, 6] assert topsort.topsort(data) == [1, 0, 6, 2, 3, 4, 5] # Shouldn't really affect sorting of 1 0 6 swap(data, 3, 4) assert topsort.topsort_levels(data)[0] == [1, 0, 6] assert topsort.topsort(data) == [1, 0, 6, 2, 3, 4, 5] # Place 0 before 6 in original list swap(data, 1, 6) assert topsort.topsort_levels(data)[0] == [1, 6, 0] assert topsort.topsort(data) == [1, 6, 0, 2, 3, 4, 5]
def order_workflow_steps(steps): """ Perform topological sort of the steps, return ordered or None """ try: edges = edgelist_for_workflow_steps(steps) node_order = topsort(edges) return [steps[i] for i in node_order] except CycleError: return None
def order_workflow_steps( steps ): """ Perform topological sort of the steps, return ordered or None """ try: edges = edgelist_for_workflow_steps( steps ) node_order = topsort( edges ) return [ steps[i] for i in node_order ] except CycleError: return None
def order_workflow_steps( steps ): """ Perform topological sort of the steps, return ordered or None """ position_data_available = True for step in steps: if not step.position or not 'left' in step.position or not 'top' in step.position: position_data_available = False if position_data_available: steps.sort(cmp=lambda s1, s2: cmp( math.sqrt(s1.position['left'] ** 2 + s1.position['top'] ** 2), math.sqrt(s2.position['left'] ** 2 + s2.position['top'] ** 2))) try: edges = edgelist_for_workflow_steps( steps ) node_order = topsort( edges ) return [ steps[i] for i in node_order ] except CycleError: return None
def order_workflow_steps(steps): """ Perform topological sort of the steps, return ordered or None """ position_data_available = True for step in steps: if not step.position or 'left' not in step.position or 'top' not in step.position: position_data_available = False if position_data_available: steps.sort(key=lambda _: math.sqrt(_.position['left'] ** 2 + _.position['top'] ** 2)) try: edges = sorted(edgelist_for_workflow_steps(steps)) node_order = topsort(edges) return [steps[i] for i in node_order] except CycleError: return None
def order_workflow_steps(steps): """ Perform topological sort of the steps, return ordered or None """ position_data_available = True for step in steps: if not step.position or 'left' not in step.position or 'top' not in step.position: position_data_available = False if position_data_available: steps.sort(key=lambda _: math.sqrt(_.position['left']**2 + _.position[ 'top']**2)) try: edges = edgelist_for_workflow_steps(steps) node_order = topsort(edges) return [steps[i] for i in node_order] except CycleError: return None
def test_topsort_doc(): assert topsort.topsort([(1, 2), (3, 3)]) == [1, 3, 2]