Пример #1
0
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]
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
0
def test_topsort_doc():
    assert topsort.topsort([(1, 2), (3, 3)]) == [1, 3, 2]