From 6dce5078c179f834ec21ca74033c64f8269c8ae9 Mon Sep 17 00:00:00 2001 From: Miles Date: Tue, 28 May 2024 17:27:27 -0400 Subject: [PATCH 1/5] Change behavior of steiner_tree to remove degree-zero vertices. --- src/steiner_tree.jl | 10 +++++++++- test/test_namedgraph.jl | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/steiner_tree.jl b/src/steiner_tree.jl index c01207f..4b81948 100644 --- a/src/steiner_tree.jl +++ b/src/steiner_tree.jl @@ -9,5 +9,13 @@ using SimpleTraits: SimpleTraits, Not, @traitfn map(v -> vertex_positions(g)[v], term_vert), dist_matrix_to_position_dist_matrix(g, distmx), ) - return typeof(g)(position_tree, map(v -> ordered_vertices(g)[v], vertices(position_tree))) + named_st = typeof(g)( + position_tree, map(v -> ordered_vertices(g)[v], vertices(position_tree)) + ) + # Detect and remove vertices of degree zero + zero_verts = filter(v -> degree(named_st, v) == 0, vertices(named_st)) + for v in zero_verts + rem_vertex!(named_st, v) + end + return named_st end diff --git a/test/test_namedgraph.jl b/test/test_namedgraph.jl index 2d9e6c0..77365e8 100644 --- a/test/test_namedgraph.jl +++ b/test/test_namedgraph.jl @@ -675,7 +675,10 @@ end st = steiner_tree(g, terminal_vertices) es = [(1, 2) => (1, 3), (1, 3) => (1, 4), (1, 4) => (2, 4), (2, 4) => (3, 4)] @test ne(st) == 4 - @test nv(st) == 12 + @test nv(st) == 5 + # Test that there are no degree-zero vertices in output: + zv = filter(v -> degree(st, v) == 0, vertices(st)) + @test isempty(zv) for e in es @test has_edge(st, e) end From 6267636c23589a87d5f30e617e1bca6cb71f59ba Mon Sep 17 00:00:00 2001 From: Miles Date: Tue, 28 May 2024 17:32:38 -0400 Subject: [PATCH 2/5] Improve variable name --- test/test_namedgraph.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_namedgraph.jl b/test/test_namedgraph.jl index 77365e8..48bc3d2 100644 --- a/test/test_namedgraph.jl +++ b/test/test_namedgraph.jl @@ -677,8 +677,8 @@ end @test ne(st) == 4 @test nv(st) == 5 # Test that there are no degree-zero vertices in output: - zv = filter(v -> degree(st, v) == 0, vertices(st)) - @test isempty(zv) + zero_deg_verts = filter(v -> degree(st, v) == 0, vertices(st)) + @test isempty(zero_deg_verts) for e in es @test has_edge(st, e) end From 325f2dccc9852f5474a9f8f2527537f8d3a15509 Mon Sep 17 00:00:00 2001 From: Miles Date: Tue, 28 May 2024 18:32:11 -0400 Subject: [PATCH 3/5] Simplify vertex removal code --- src/steiner_tree.jl | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/steiner_tree.jl b/src/steiner_tree.jl index 4b81948..6ccc8db 100644 --- a/src/steiner_tree.jl +++ b/src/steiner_tree.jl @@ -9,13 +9,9 @@ using SimpleTraits: SimpleTraits, Not, @traitfn map(v -> vertex_positions(g)[v], term_vert), dist_matrix_to_position_dist_matrix(g, distmx), ) - named_st = typeof(g)( - position_tree, map(v -> ordered_vertices(g)[v], vertices(position_tree)) - ) - # Detect and remove vertices of degree zero - zero_verts = filter(v -> degree(named_st, v) == 0, vertices(named_st)) - for v in zero_verts - rem_vertex!(named_st, v) + tree = typeof(g)(position_tree, map(v -> ordered_vertices(g)[v], vertices(position_tree))) + for v in copy(vertices(tree)) + iszero(degree(tree, v)) && rem_vertex!(tree, v) end - return named_st + return tree end From 5c725b6eba44f4c4029b04705faae3000755218b Mon Sep 17 00:00:00 2001 From: Miles Date: Tue, 28 May 2024 18:34:24 -0400 Subject: [PATCH 4/5] Simplify test --- test/test_namedgraph.jl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/test_namedgraph.jl b/test/test_namedgraph.jl index 48bc3d2..08d9fa2 100644 --- a/test/test_namedgraph.jl +++ b/test/test_namedgraph.jl @@ -676,9 +676,7 @@ end es = [(1, 2) => (1, 3), (1, 3) => (1, 4), (1, 4) => (2, 4), (2, 4) => (3, 4)] @test ne(st) == 4 @test nv(st) == 5 - # Test that there are no degree-zero vertices in output: - zero_deg_verts = filter(v -> degree(st, v) == 0, vertices(st)) - @test isempty(zero_deg_verts) + @test !any(v -> degree(st, v) == 0, vertices(st)) for e in es @test has_edge(st, e) end From 61668ff6ee7fc6940767b8767a256cadcb4df510 Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Tue, 28 May 2024 18:53:37 -0400 Subject: [PATCH 5/5] Use iszero in tests --- test/test_namedgraph.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_namedgraph.jl b/test/test_namedgraph.jl index 08d9fa2..5ec2802 100644 --- a/test/test_namedgraph.jl +++ b/test/test_namedgraph.jl @@ -676,7 +676,7 @@ end es = [(1, 2) => (1, 3), (1, 3) => (1, 4), (1, 4) => (2, 4), (2, 4) => (3, 4)] @test ne(st) == 4 @test nv(st) == 5 - @test !any(v -> degree(st, v) == 0, vertices(st)) + @test !any(v -> iszero(degree(st, v)), vertices(st)) for e in es @test has_edge(st, e) end