def test_firing_squad():
    undirected_edges = [
        frozenset(('captain', 'rifle_person_1')),
        frozenset(('captain', 'rifle_person_2')),
        frozenset(('rifle_person_1', 'death')),
        frozenset(('rifle_person_2', 'death')),
    ]

    graph = MarkedPatternGraph(nodes=[
        'captain', 'rifle_person_1', 'rifle_person_2', 'prisoner shot',
        'prisoner death'
    ])

    graph.add_undirected_edge(('captain', 'rifle_person_1'))
    graph.add_undirected_edge(('captain', 'rifle_person_2'))
    graph.add_undirected_edge(('rifle_person_1', 'prisoner shot'))
    graph.add_undirected_edge(('rifle_person_2', 'prisoner shot'))
    graph.add_undirected_edge(('prisoner shot', 'prisoner death'))

    graph.add_arrowhead(('rifle_person_1', 'prisoner shot'))
    graph.add_arrowhead(('rifle_person_2', 'prisoner shot'))

    RecursiveEdgeOrienter(marked_pattern_graph=graph).orient()

    assert graph.get_marked_arrows() == set({('prisoner shot',
                                              'prisoner death')})
def test_longer_marked_path_exists():
    #  A           B
    #  |\        / |
    #  | \      /  |
    #  |  v    v   |
    #  | --- C     |
    #  | |   |     |
    #  | |   |     |
    #  | |   |     |
    #  | |   D     |
    #  | |   |     |
    #  | |   |     |
    #  | |   v     |
    #  |-|---E-----|
    #
    graph = MarkedPatternGraph(nodes=['a', 'b', 'c', 'd', 'e'])
    graph.add_undirected_edge(('a', 'c'))
    graph.add_undirected_edge(('b', 'c'))
    graph.add_undirected_edge(('c', 'd'))
    graph.add_undirected_edge(('d', 'e'))
    graph.add_undirected_edge(('c', 'e'))
    graph.add_undirected_edge(('b', 'e'))
    graph.add_undirected_edge(('a', 'e'))

    graph.add_arrowhead(('a', 'c'))
    graph.add_arrowhead(('b', 'c'))

    RecursiveEdgeOrienter(marked_pattern_graph=graph).orient()

    assert graph.get_marked_arrows() == set({('c', 'd')})
Example #3
0
def test_has_arrowhead_with_unmarked_arrowhead():
    graph = MarkedPatternGraph(nodes=['a', 'b'])
    graph.add_undirected_edge(('a', 'b'))
    assert graph.has_arrowhead(('a', 'b')) == False

    graph.add_arrowhead(('a', 'b'))

    assert graph.has_arrowhead(('a', 'b')) == True
Example #4
0
def test_bidirectional_edges():
    graph = MarkedPatternGraph(nodes=['a', 'b'])
    graph.add_undirected_edge(('a', 'b'))
    graph.add_arrowhead(('a', 'b'))
    graph.add_arrowhead(('b', 'a'))

    assert set(graph.get_undirected_edges()) == set({})
    assert set(graph.get_unmarked_arrows()) == set({})
    assert set(graph.get_marked_arrows()) == set({})
    assert set(graph.get_bidirectional_edges()) == set({frozenset({'a', 'b'})})
def test_simple():
    #  a     c
    #   \   /
    #    v v
    #     b
    #     |
    #     d
    graph = MarkedPatternGraph(nodes=['a', 'b', 'c', 'd'])
    graph.add_undirected_edge(('a', 'b'))
    graph.add_undirected_edge(('c', 'b'))
    graph.add_undirected_edge(('b', 'd'))

    graph.add_arrowhead(('a', 'b'))
    graph.add_arrowhead(('c', 'b'))

    RecursiveEdgeOrienter(marked_pattern_graph=graph).orient()

    assert graph.get_marked_arrows() == set({('b', 'd')})
Example #6
0
def test_simple():
    # a     c
    # \   /
    # v v
    # b
    # |
    # d
    graph = MarkedPatternGraph(nodes=['a', 'b', 'c', 'd'])
    graph.add_undirected_edge(('a', 'b'))
    graph.add_undirected_edge(('c', 'b'))
    graph.add_undirected_edge(('b', 'd'))

    graph.add_arrowhead(('a', 'b'))
    graph.add_arrowhead(('c', 'b'))

    assert graph.get_edges() == set(
        {frozenset({'a', 'b'}),
         frozenset({'b', 'c'}),
         frozenset({'b', 'd'})})