def exercise_knot():
    edge_sets = utils.construct_edge_sets(n_vertices=4,
                                          edge_list=[(0, 1), (1, 2), (2, 3),
                                                     (1, 3)])
    expected_loops_dendrites = [({}, {
        2: [set([1]), set([1, 3])],
        3: [set([1, 2]), set([1])]
    }), ({
        2: [[3]],
        3: [[2]]
    }, {
        2: [set([3])],
        3: [set([2])]
    }), ({
        1: [[3]],
        3: [[1]]
    }, {
        0: [set([1])],
        1: [set([3])],
        3: [set([1])]
    }), ({
        1: [[2]],
        2: [[1]]
    }, {
        0: [set([1])],
        1: [set([2])],
        2: [set([1])]
    })]
    for iv in xrange(4):
        loop_dendrites = find_paths(edge_sets=edge_sets).search_from(iv=iv)
        assert loop_dendrites == expected_loops_dendrites[iv]
def exercise_simple_loops(loop_size_max=10):
    for n_vertices in xrange(3, loop_size_max + 1):
        edge_list = [
            tuple(sorted((i, (i + 1) % n_vertices)))
            for i in xrange(n_vertices)
        ]
        edge_sets = utils.construct_edge_sets(n_vertices=n_vertices,
                                              edge_list=edge_list)
        loops, dendrites = find_paths(edge_sets=edge_sets).search_from(iv=0)
        if (n_vertices <= 7):
            assert len(loops) == 2
            assert sorted(dendrites.keys()) == range(1, n_vertices)
        else:
            assert len(loops) == 0
            assert sorted(dendrites.keys()) == range(2, n_vertices - 1)
        if (n_vertices == 3):
            assert loops == {1: [[2]], 2: [[1]]}
            assert dendrites == {1: [set([2])], 2: [set([1])]}
        elif (n_vertices == 4):
            assert loops == {1: [[2, 3]], 3: [[2, 1]]}
            assert dendrites == {
                1: [set([2, 3])],
                2: [set([1]), set([3])],
                3: [set([1, 2])]
            }
def exercise_knot():
  edge_sets = utils.construct_edge_sets(
    n_vertices=4,
    edge_list=[(0,1), (1,2), (2,3), (1,3)])
  expected_loops_dendrites = [
    ({}, {2: [set([1]), set([1, 3])], 3: [set([1, 2]), set([1])]}),
    ({2: [[3]], 3: [[2]]}, {2: [set([3])], 3: [set([2])]}),
    ({1: [[3]], 3: [[1]]}, {0: [set([1])], 1: [set([3])], 3: [set([1])]}),
    ({1: [[2]], 2: [[1]]}, {0: [set([1])], 1: [set([2])], 2: [set([1])]})]
  for iv in xrange(4):
    loop_dendrites = find_paths(edge_sets=edge_sets).search_from(iv=iv)
    assert loop_dendrites == expected_loops_dendrites[iv]
예제 #4
0
def exercise_test_cases(out):
    for i_tc, tc in enumerate(test_cases):
        print("test_case index:", i_tc, file=out)
        print(tc.art, file=out)
        tc_c1, tc_he1, tc_r1, tc_tid1, tc_le1, tc_leb1, \
        tc_c2, tc_he2, tc_le2, tc_leb2 = \
          tc.clusters1, tc.hinge_edges1, \
          tc.roots1, tc.tree_ids1, tc.loop_edges1, tc.loop_edge_bendings1, \
          tc.clusters1, tc.hinge_edges1, tc.loop_edges1, tc.loop_edge_bendings1

        def assert_same(label, have, expected):
            print(label, have, file=out)
            if (expected is not None):
                if (have != expected):
                    print("expected:", expected, file=out)
                assert have == expected, "Note: --verbose for details"

        #
        tt = construct(n_vertices=tc.n_vertices, edge_list=tc.edge_list)
        cm = tt.cluster_manager
        assert_same("c1:", cm.clusters, tc_c1)
        cm.construct_spanning_trees(edge_sets=tt.edge_sets)
        print("c1t:", cm.clusters, file=out)
        assert_same("he1:", cm.hinge_edges, tc_he1)
        assert_same("le1:", cm.loop_edges, tc_le1)
        r = cm.roots()
        assert_same("r1:", r, tc_r1)
        tid = cm.tree_ids()
        assert_same("tid1:", tid, tc_tid1)
        cm.find_loop_edge_bendings(edge_sets=tt.edge_sets)
        assert_same("leb1:", cm.loop_edge_bendings, tc_leb1)
        #
        tt = construct(n_vertices=tc.n_vertices, edge_list=tc.edge_list)
        cm = tt.cluster_manager
        cm.merge_clusters_with_multiple_connections(edge_sets=tt.edge_sets)
        assert_same("c2:", cm.clusters, tc_c2)
        cm.construct_spanning_trees(edge_sets=tt.edge_sets)
        print("c2t:", cm.clusters, file=out)
        assert_same("he2:", cm.hinge_edges, tc_he2)
        assert_same("le2:", cm.loop_edges, tc_le2)
        cm.find_loop_edge_bendings(edge_sets=tt.edge_sets)
        assert_same("leb2:", cm.loop_edge_bendings, tc_leb2)
        #
        fp = find_paths(edge_sets=tt.edge_sets)
        for iv in range(len(tt.edge_sets)):
            fp.search_from(iv=iv)
        #
        print(file=out)
예제 #5
0
def exercise_test_cases(out):
  for i_tc,tc in enumerate(test_cases):
    print >> out, "test_case index:", i_tc
    print >> out, tc.art
    tc_c1, tc_he1, tc_r1, tc_tid1, tc_le1, tc_leb1, \
    tc_c2, tc_he2, tc_le2, tc_leb2 = \
      tc.clusters1, tc.hinge_edges1, \
      tc.roots1, tc.tree_ids1, tc.loop_edges1, tc.loop_edge_bendings1, \
      tc.clusters1, tc.hinge_edges1, tc.loop_edges1, tc.loop_edge_bendings1
    def assert_same(label, have, expected):
      print >> out, label, have
      if (expected is not None):
        if (have != expected):
          print >> out, "expected:", expected
        assert have == expected, "Note: --verbose for details"
    #
    tt = construct(n_vertices=tc.n_vertices, edge_list=tc.edge_list)
    cm = tt.cluster_manager
    assert_same("c1:", cm.clusters, tc_c1)
    cm.construct_spanning_trees(edge_sets=tt.edge_sets)
    print >> out, "c1t:", cm.clusters
    assert_same("he1:", cm.hinge_edges, tc_he1)
    assert_same("le1:", cm.loop_edges, tc_le1)
    r = cm.roots()
    assert_same("r1:", r, tc_r1)
    tid = cm.tree_ids()
    assert_same("tid1:", tid, tc_tid1)
    cm.find_loop_edge_bendings(edge_sets=tt.edge_sets)
    assert_same("leb1:", cm.loop_edge_bendings, tc_leb1)
    #
    tt = construct(n_vertices=tc.n_vertices, edge_list=tc.edge_list)
    cm = tt.cluster_manager
    cm.merge_clusters_with_multiple_connections(edge_sets=tt.edge_sets)
    assert_same("c2:", cm.clusters, tc_c2)
    cm.construct_spanning_trees(edge_sets=tt.edge_sets)
    print >> out, "c2t:", cm.clusters
    assert_same("he2:", cm.hinge_edges, tc_he2)
    assert_same("le2:", cm.loop_edges, tc_le2)
    cm.find_loop_edge_bendings(edge_sets=tt.edge_sets)
    assert_same("leb2:", cm.loop_edge_bendings, tc_leb2)
    #
    fp = find_paths(edge_sets=tt.edge_sets)
    for iv in xrange(len(tt.edge_sets)):
      fp.search_from(iv=iv)
    #
    print >> out
def exercise_simple_loops(loop_size_max=10):
  for n_vertices in xrange(3, loop_size_max+1):
    edge_list = [tuple(sorted((i,(i+1)%n_vertices)))
      for i in xrange(n_vertices)]
    edge_sets = utils.construct_edge_sets(
      n_vertices=n_vertices, edge_list=edge_list)
    loops, dendrites = find_paths(edge_sets=edge_sets).search_from(iv=0)
    if (n_vertices <= 7):
      assert len(loops) == 2
      assert sorted(dendrites.keys()) == range(1,n_vertices)
    else:
      assert len(loops) == 0
      assert sorted(dendrites.keys()) == range(2,n_vertices-1)
    if (n_vertices == 3):
      assert loops == {1: [[2]], 2: [[1]]}
      assert dendrites == {1: [set([2])], 2: [set([1])]}
    elif (n_vertices == 4):
      assert loops == {1: [[2, 3]], 3: [[2, 1]]}
      assert dendrites == {
        1: [set([2, 3])], 2: [set([1]), set([3])], 3: [set([1, 2])]}
def exercise_minimal():
    edge_sets = utils.construct_edge_sets(n_vertices=1, edge_list=[])
    assert find_paths(edge_sets=edge_sets).search_from(iv=0) == ({}, {})
    edge_sets = utils.construct_edge_sets(n_vertices=2, edge_list=[(0, 1)])
    for iv in [0, 1]:
        assert find_paths(edge_sets=edge_sets).search_from(iv=iv) == ({}, {})
def exercise_minimal():
  edge_sets = utils.construct_edge_sets(n_vertices=1, edge_list=[])
  assert find_paths(edge_sets=edge_sets).search_from(iv=0) == ({}, {})
  edge_sets = utils.construct_edge_sets(n_vertices=2, edge_list=[(0,1)])
  for iv in [0,1]:
    assert find_paths(edge_sets=edge_sets).search_from(iv=iv) == ({}, {})