Skip to content

Commit 32442b8

Browse files
authored
Define rename_vertices for SimpleEdge (#65)
1 parent 254e4cd commit 32442b8

File tree

4 files changed

+33
-13
lines changed

4 files changed

+33
-13
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "NamedGraphs"
22
uuid = "678767b0-92e7-4007-89e4-4527a8725b19"
33
authors = ["Matthew Fishman <[email protected]> and contributors"]
4-
version = "0.4.0"
4+
version = "0.4.1"
55

66
[deps]
77
AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"

src/abstractnamededge.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Base.eltype(::Type{<:AbstractNamedEdge{V}}) where {V} = V
88
Graphs.src(e::AbstractNamedEdge) = not_implemented()
99
Graphs.dst(e::AbstractNamedEdge) = not_implemented()
1010

11+
AbstractNamedEdge(e::AbstractNamedEdge) = e
12+
1113
function GraphsExtensions.convert_vertextype(
1214
::Type{V}, E::Type{<:AbstractNamedEdge{V}}
1315
) where {V}
@@ -49,6 +51,10 @@ function GraphsExtensions.rename_vertices(f::Function, e::AbstractNamedEdge)
4951
return set_vertices(e, f(src(e)), f(dst(e)))
5052
end
5153

52-
function GraphsExtensions.rename_vertices(e::AbstractNamedEdge, name_map)
54+
function GraphsExtensions.rename_vertices(e::AbstractEdge, name_map)
5355
return rename_vertices(v -> name_map[v], e)
5456
end
57+
58+
function GraphsExtensions.rename_vertices(f::Function, e::AbstractEdge)
59+
return rename_vertices(f, AbstractNamedEdge(e))
60+
end

src/namededge.jl

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,32 @@ using .GraphsExtensions: GraphsExtensions
44
struct NamedEdge{V} <: AbstractNamedEdge{V}
55
src::V
66
dst::V
7-
NamedEdge{V}(src::V, dst::V) where {V} = new{V}(src, dst)
7+
NamedEdge{V}(src, dst) where {V} = new{V}(src, dst)
88
end
99
NamedEdge(src::V, dst::V) where {V} = NamedEdge{V}(src, dst)
10-
NamedEdge(src::S, dst::D) where {S,D} = NamedEdge{promote_type(S, D)}(src, dst)
10+
NamedEdge(src, dst) = NamedEdge{promote_type(typeof(src), typeof(dst))}(src, dst)
1111

12-
GraphsExtensions.convert_vertextype(V::Type, ::Type{<:NamedEdge}) = NamedEdge{V}
12+
function GraphsExtensions.convert_vertextype(vertextype::Type, ::Type{<:NamedEdge})
13+
return NamedEdge{vertextype}
14+
end
1315

1416
Graphs.src(e::NamedEdge) = e.src
1517
Graphs.dst(e::NamedEdge) = e.dst
1618

1719
NamedEdge{V}(e::NamedEdge{V}) where {V} = e
1820
NamedEdge(e::NamedEdge) = e
1921

20-
NamedEdge{V}(e::AbstractNamedEdge) where {V} = NamedEdge{V}(e.src, e.dst)
22+
NamedEdge{V}(e::AbstractEdge) where {V} = NamedEdge{V}(src(e), dst(e))
23+
NamedEdge(e::AbstractEdge) = NamedEdge(src(e), dst(e))
24+
25+
AbstractNamedEdge(e::AbstractEdge) = NamedEdge(e)
2126

22-
Base.convert(E::Type{<:NamedEdge}, e::NamedEdge) = E(e)
27+
Base.convert(edgetype::Type{<:NamedEdge}, e::AbstractEdge) = edgetype(e)
2328

24-
NamedEdge(t::Tuple) = NamedEdge(t[1], t[2])
25-
NamedEdge(p::Pair) = NamedEdge(p.first, p.second)
26-
NamedEdge{V}(p::Pair) where {V} = NamedEdge{V}(p.first, p.second)
27-
NamedEdge{V}(t::Tuple) where {V} = NamedEdge{V}(t[1], t[2])
29+
NamedEdge(p::Tuple) = NamedEdge(p...)
30+
NamedEdge(p::Pair) = NamedEdge(p...)
31+
NamedEdge{V}(p::Pair) where {V} = NamedEdge{V}(p...)
32+
NamedEdge{V}(p::Tuple) where {V} = NamedEdge{V}(p...)
2833

2934
# TODO: Define generic `set_vertices` in `GraphsExtensions`.
3035
set_vertices(e::NamedEdge, src, dst) = NamedEdge(src, dst)

test/test_namedgraph.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ using Graphs:
5858
topological_sort_by_dfs,
5959
vertices,
6060
yen_k_shortest_paths
61-
using Graphs.SimpleGraphs: SimpleDiGraph
61+
using Graphs.SimpleGraphs: SimpleDiGraph, SimpleEdge
6262
using GraphsFlows: GraphsFlows
63-
using NamedGraphs: NamedEdge, NamedDiGraph, NamedGraph
63+
using NamedGraphs: AbstractNamedEdge, NamedEdge, NamedDiGraph, NamedGraph
6464
using NamedGraphs.GraphsExtensions:
6565
GraphsExtensions,
6666
,
@@ -87,8 +87,17 @@ using SymRCM: SymRCM
8787
using Test: @test, @test_broken, @testset
8888

8989
@testset "NamedEdge" begin
90+
@test NamedEdge(SimpleEdge(1, 2)) == NamedEdge(1, 2)
91+
@test AbstractNamedEdge(SimpleEdge(1, 2)) == NamedEdge(1, 2)
9092
@test is_ordered(NamedEdge("A", "B"))
9193
@test !is_ordered(NamedEdge("B", "A"))
94+
@test rename_vertices(NamedEdge("A", "B"), Dict(["A" => "C", "B" => "D"])) ==
95+
NamedEdge("C", "D")
96+
@test rename_vertices(SimpleEdge(1, 2), Dict([1 => "C", 2 => "D"])) == NamedEdge("C", "D")
97+
@test rename_vertices(v -> Dict(["A" => "C", "B" => "D"])[v], NamedEdge("A", "B")) ==
98+
NamedEdge("C", "D")
99+
@test rename_vertices(v -> Dict([1 => "C", 2 => "D"])[v], SimpleEdge(1, 2)) ==
100+
NamedEdge("C", "D")
92101
end
93102

94103
@testset "NamedGraph" begin

0 commit comments

Comments
 (0)