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
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.)
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
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
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), ]