diff --git a/Project.toml b/Project.toml index 0c91d1f..c76bb5f 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "NamedGraphs" uuid = "678767b0-92e7-4007-89e4-4527a8725b19" -version = "0.12.1" +version = "0.12.2" authors = ["Matthew Fishman , Joseph Tindall and contributors"] [workspace] diff --git a/src/abstractnamedgraph.jl b/src/abstractnamedgraph.jl index 6d99927..b766e09 100644 --- a/src/abstractnamedgraph.jl +++ b/src/abstractnamedgraph.jl @@ -573,6 +573,11 @@ end function edge_subgraph_namedgraph(graph, edgelist) vs = unique(vcat(src.(edgelist), dst.(edgelist))) g = subgraph(graph, vs) - g = rem_edges!(g, setdiff(edges(g), edgelist)) + edgeset = Set(edgelist) + for e in edges(g) + if !(e ∈ edgeset || reverse(e) ∈ edgeset) + rem_edge!(g, e) + end + end return g end diff --git a/src/namedgraph.jl b/src/namedgraph.jl index 66e9646..63f15ad 100644 --- a/src/namedgraph.jl +++ b/src/namedgraph.jl @@ -225,3 +225,10 @@ end function GraphsExtensions.similar_graph(T::Type{<:GenericNamedGraph}, vertices) return T(vertices) end + +function edge_subgraph_namedgraph(graph::NamedDiGraph, edgelist) + vs = unique(vcat(src.(edgelist), dst.(edgelist))) + g = subgraph(graph, vs) + g = rem_edges!(g, setdiff(edges(g), edgelist)) + return g +end diff --git a/test/test_namedgraph.jl b/test/test_namedgraph.jl index 18d21b0..061813c 100644 --- a/test/test_namedgraph.jl +++ b/test/test_namedgraph.jl @@ -14,10 +14,11 @@ using Graphs: Edge, a_star, add_edge!, add_vertex!, adjacency_matrix, using GraphsFlows: GraphsFlows using NamedGraphs.GraphsExtensions: GraphsExtensions, boundary_edges, boundary_vertices, convert_vertextype, degrees, dijkstra_mst, dijkstra_parents, dijkstra_tree, - eccentricities, has_vertices, incident_edges, indegrees, inner_boundary_vertices, - mincut_partitions, outdegrees, outer_boundary_vertices, permute_vertices, - rename_vertices, subgraph, symrcm_perm, symrcm_permute, vertextype, ⊔ -using NamedGraphs.NamedGraphGenerators: named_binary_tree, named_grid, named_path_graph + eccentricities, edge_subgraph, has_vertices, incident_edges, indegrees, + inner_boundary_vertices, mincut_partitions, outdegrees, outer_boundary_vertices, + permute_vertices, rename_vertices, subgraph, symrcm_perm, symrcm_permute, vertextype, ⊔ +using NamedGraphs.NamedGraphGenerators: + named_binary_tree, named_grid, named_hexagonal_lattice_graph, named_path_graph using NamedGraphs: AbstractNamedEdge, NamedDiGraph, NamedEdge, NamedGraph, Vertices using SymRCM: SymRCM using Test: @test, @test_broken, @testset @@ -118,6 +119,30 @@ end # Test Graphs.jl `getindex` syntax. @test g_sub == g[Vertices(["A", "B"])] + g_sub = edge_subgraph(g, NamedEdge.(["A" => "B"])) + @test has_vertex(g_sub, "A") + @test has_vertex(g_sub, "B") + @test !has_vertex(g_sub, "C") + @test !has_vertex(g_sub, "D") + @test has_edge(g_sub, "A" => "B") + # Test Graphs.jl `getindex` syntax. + @test g_sub == g[Vertices(["A", "B"])] + + g = named_hexagonal_lattice_graph(3, 3) + es = NamedEdge.( + [ + (1, 1) => (2, 1), + (2, 1) => (3, 1), + (3, 1) => (3, 2), + (2, 2) => (3, 2), + (1, 2) => (2, 2), + (1, 1) => (1, 2), + ] + ) + @test all([e in edges(g) for e in es]) + eg = edge_subgraph(g, es) + @test length(edges(eg)) == length(es) + g = NamedGraph(["A", "B", "C", "D", "E"]) add_edge!(g, "A" => "B") add_edge!(g, "B" => "C")