Exemple #1
0
def test_simplex_tree_deep_copy_constructor():
    st = SimplexTree()
    st.insert([1, 2, 3], 0.)
    # compute persistence only on the original
    st.compute_persistence()

    st_copy = SimplexTree(st)
    assert st_copy == st
    st_filt_list = list(st.get_filtration())

    # check persistence is not copied
    assert st.__is_persistence_defined() == True
    assert st_copy.__is_persistence_defined() == False

    # remove something in the copy and check the copy is included in the original
    st_copy.remove_maximal_simplex([1, 2, 3])
    a_filt_list = list(st_copy.get_filtration())
    assert len(a_filt_list) < len(st_filt_list)

    for a_splx in a_filt_list:
        assert a_splx in st_filt_list

    # test double free
    del st
    del st_copy
Exemple #2
0
def test_extend_filtration():

    # Inserted simplex:
    #      5   4
    #      o   o
    #     / \ /
    #    o   o
    #   /2\ /3
    #  o   o
    #  1   0

    st = SimplexTree()
    st.insert([0, 2])
    st.insert([1, 2])
    st.insert([0, 3])
    st.insert([2, 5])
    st.insert([3, 4])
    st.insert([3, 5])
    st.assign_filtration([0], 1.)
    st.assign_filtration([1], 2.)
    st.assign_filtration([2], 3.)
    st.assign_filtration([3], 4.)
    st.assign_filtration([4], 5.)
    st.assign_filtration([5], 6.)

    assert list(st.get_filtration()) == [([0, 2], 0.0), ([1, 2], 0.0),
                                         ([0, 3], 0.0), ([3, 4], 0.0),
                                         ([2, 5], 0.0), ([3, 5], 0.0),
                                         ([0], 1.0), ([1], 2.0), ([2], 3.0),
                                         ([3], 4.0), ([4], 5.0), ([5], 6.0)]

    st.extend_filtration()

    assert list(st.get_filtration()) == [([6], -3.0), ([0], -2.0), ([1], -1.8),
                                         ([2], -1.6), ([0, 2], -1.6),
                                         ([1, 2], -1.6), ([3], -1.4),
                                         ([0, 3], -1.4), ([4], -1.2),
                                         ([3, 4], -1.2), ([5], -1.0),
                                         ([2, 5], -1.0), ([3, 5], -1.0),
                                         ([5, 6], 1.0), ([4, 6], 1.2),
                                         ([3, 6], 1.4), ([3, 4, 6], 1.4),
                                         ([3, 5, 6], 1.4), ([2, 6], 1.6),
                                         ([2, 5, 6], 1.6), ([1, 6], 1.8),
                                         ([1, 2, 6], 1.8), ([0, 6], 2.0),
                                         ([0, 2, 6], 2.0), ([0, 3, 6], 2.0)]

    dgms = st.extended_persistence(min_persistence=-1.)

    assert dgms[0][0][1][0] == pytest.approx(2.)
    assert dgms[0][0][1][1] == pytest.approx(3.)
    assert dgms[1][0][1][0] == pytest.approx(5.)
    assert dgms[1][0][1][1] == pytest.approx(4.)
    assert dgms[2][0][1][0] == pytest.approx(1.)
    assert dgms[2][0][1][1] == pytest.approx(6.)
    assert dgms[3][0][1][0] == pytest.approx(6.)
    assert dgms[3][0][1][1] == pytest.approx(1.)
Exemple #3
0
def tograph2(cplx: gd.SimplexTree):

    graph = nx.Graph()
    simplices = cplx.get_filtration()

    for (simplex, filtration) in simplices:
        if len(simplex) == 2:
            #print("hei")
            #print(simplex)
            graph.add_nodes_from(simplex)
            graph.add_edge(simplex[0], simplex[1])

    return graph
Exemple #4
0
def toGraph(cplx: gd.SimplexTree, capDict: dict, vertexName: dict):

    # Initializes output graph
    graph = nx.Graph()

    # Gets list of simplices
    simplices = cplx.get_filtration()

    # Adds 1 simplices with labels from the dictionary
    for (simplex, filtration) in simplices:
        if len(simplex) == 1:
            graph.add_node(str(vertexName[simplex[0]]))

    # Adds 2-simplices to graph
    for (simplex, filtration) in simplices:
        if len(simplex) == 2:
            graph.add_edge(str(vertexName[simplex[0]]),
                           str(vertexName[simplex[1]]),
                           capacity=capDict[tuple(simplex)])

    return graph
Exemple #5
0
def test_expansion():
    st = SimplexTree()
    assert st.__is_defined() == True
    assert st.__is_persistence_defined() == False

    # insert test
    assert st.insert([3, 2], 0.1) == True
    assert st.insert([2, 0], 0.2) == True
    assert st.insert([1, 0], 0.3) == True
    assert st.insert([3, 1], 0.4) == True
    assert st.insert([2, 1], 0.5) == True
    assert st.insert([6, 5], 0.6) == True
    assert st.insert([4, 2], 0.7) == True
    assert st.insert([3, 0], 0.8) == True
    assert st.insert([6, 4], 0.9) == True
    assert st.insert([6, 3], 1.0) == True

    assert st.num_vertices() == 7
    assert st.num_simplices() == 17

    assert list(st.get_filtration()) == [
        ([2], 0.1),
        ([3], 0.1),
        ([2, 3], 0.1),
        ([0], 0.2),
        ([0, 2], 0.2),
        ([1], 0.3),
        ([0, 1], 0.3),
        ([1, 3], 0.4),
        ([1, 2], 0.5),
        ([5], 0.6),
        ([6], 0.6),
        ([5, 6], 0.6),
        ([4], 0.7),
        ([2, 4], 0.7),
        ([0, 3], 0.8),
        ([4, 6], 0.9),
        ([3, 6], 1.0),
    ]

    st.expansion(3)
    assert st.num_vertices() == 7
    assert st.num_simplices() == 22

    assert list(st.get_filtration()) == [
        ([2], 0.1),
        ([3], 0.1),
        ([2, 3], 0.1),
        ([0], 0.2),
        ([0, 2], 0.2),
        ([1], 0.3),
        ([0, 1], 0.3),
        ([1, 3], 0.4),
        ([1, 2], 0.5),
        ([0, 1, 2], 0.5),
        ([1, 2, 3], 0.5),
        ([5], 0.6),
        ([6], 0.6),
        ([5, 6], 0.6),
        ([4], 0.7),
        ([2, 4], 0.7),
        ([0, 3], 0.8),
        ([0, 1, 3], 0.8),
        ([0, 2, 3], 0.8),
        ([0, 1, 2, 3], 0.8),
        ([4, 6], 0.9),
        ([3, 6], 1.0),
    ]