Skip to content

Commit 1105ae2

Browse files
InterdisciplinaryPhysicsTeampitmonticoneClaudMor
committed
Update
Co-Authored-By: Pietro Monticone <38562595+pitmonticone@users.noreply.github.com> Co-Authored-By: Claudio Moroni <43729990+ClaudMor@users.noreply.github.com>
1 parent ed37841 commit 1105ae2

File tree

5 files changed

+29
-41
lines changed

5 files changed

+29
-41
lines changed

src/halfedge.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ vertex(he::HalfEdge) = he.vertex
3232
3333
Return the weight of the edge.
3434
"""
35-
weight(he::HalfEdge) = he.weight
35+
SimpleWeightedGraphs.weight(he::HalfEdge) = he.weight
3636
"""
3737
metadata(he::HalfEdge)
3838

src/multilayeredge.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ Graphs.dst(e::AbstractMultilayerEdge) = e.dst
8080
8181
Return the weight of `e`.
8282
"""
83-
weight(e::AbstractMultilayerEdge) = e.weight
83+
SimpleWeightedGraphs.weight(e::AbstractMultilayerEdge) = e.weight
8484

8585
"""
8686
metadata(e::AbstractMultilayerEdge)

src/subgraphs/layer.jl

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -66,18 +66,11 @@ function Layer(
6666
edge_list::Union{Vector{<:MultilayerEdge}, Vector{Tuple{ MultilayerVertex{nothing}, MultilayerVertex{nothing}}}}
6767
) where {T<:Integer}
6868
# First check that the vertices are of the correct type
69-
if hasproperty(eltype(vertices), :parameters)
69+
if typeof(vertices) <: Vector{<:MultilayerVertex} #hasproperty(eltype(vertices), :parameters)
7070
par = eltype(vertices).parameters[1]
7171
(isnothing(par) || par == descriptor.name) || throw(
7272
ErrorException(
73-
"`vertices` should be a `Vector{MultilayerVertex{:$(descriptor.name)}}` or a `Vector{MultilayerVertex{nothing}}`. Found $(typeof(vertices))",
74-
),
75-
)
76-
else
77-
# if not, throw an error
78-
throw(
79-
ErrorException(
80-
"`vertices` should be a `Vector{MultilayerVertex{:$(descriptor.name)}}` or a `Vector{MultilayerVertex{nothing}}`. Found $(typeof(vertices))",
73+
"`vertices` should be a `Vector{MultilayerVertex{:$(descriptor.name)}}` or a `Vector{MultilayerVertex{nothing}}` or a `Vector{Node}}`. Found $(typeof(vertices))",
8174
),
8275
)
8376
end
@@ -95,7 +88,7 @@ function Layer(
9588
end
9689
else
9790
for node in vertices
98-
add_vertex!(layer, MV(node, metadata = descriptor.default_vertex_metadata(MV(node))))
91+
add_vertex!(layer, MV(node, descriptor.default_vertex_metadata(MV(node))))
9992
end
10093
end
10194
# Add the edges
@@ -128,8 +121,8 @@ Constructor for `Layer`.
128121
"""
129122
function Layer(
130123
name::Symbol,
131-
vertices::Union{Vector{<:MultilayerVertex}, Vector{<:Node}},
132-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}},
124+
vertices::Union{Vector{MultilayerVertex{nothing}}, Vector{Node}},
125+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}},
133126
null_graph::G,
134127
weighttype::Type{U};
135128
default_vertex_metadata::Function=mv -> NamedTuple(),
@@ -516,12 +509,6 @@ Returns an directed `Layer` with given `indegree_sequence` and `outdegree_sequen
516509
end
517510
end
518511

519-
#= for edge in edges(equivalent_graph)
520-
src_mv = vertices[src(edge)]
521-
dst_mv = vertices[dst(edge)]
522-
push!(edge_list, ME(src_mv, dst_mv, default_edge_weight(src_mv, dst_mv), default_edge_metadata(src_mv, dst_mv)))
523-
end =#
524-
525512
layer = Layer(descriptor, vertices, edge_list)
526513

527514
return layer
@@ -554,7 +541,7 @@ Constructor for a `Layer` whose underlying graph is a `SimpleGraph` from `Graphs
554541
function layer_simplegraph(
555542
name::Symbol,
556543
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
557-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
544+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
558545
vertextype::Type{T} = Int64,
559546
weighttype::Type{U} = Float64
560547
) where {T<:Integer,U<:Real}
@@ -632,7 +619,7 @@ Constructor for a `Layer` whose underlying graph is a `SimpleDiGraph` from `Grap
632619
function layer_simpledigraph(
633620
name::Symbol,
634621
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
635-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
622+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
636623
vertextype::Type{T} = Int64,
637624
weighttype::Type{U} = Float64
638625
) where {T<:Integer,U<:Real}
@@ -716,7 +703,7 @@ Constructor for a `Layer` whose underlying graph is a `SimpleWeightedGraph` from
716703
function layer_simpleweightedgraph(
717704
name::Symbol,
718705
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
719-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
706+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
720707
default_edge_weight::Function = (src,dst) -> nothing,
721708
vertextype::Type{T} = Int64,
722709
weighttype::Type{U} = Float64
@@ -802,7 +789,7 @@ Constructor for a `Layer` whose underlying graph is a `SimpleWeightedDiGraph` fr
802789
function layer_simpleweighteddigraph(
803790
name::Symbol,
804791
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
805-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
792+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
806793
default_edge_weight::Function = (src,dst) -> nothing,
807794
vertextype::Type{T} = Int64,
808795
weighttype::Type{U} = Float64
@@ -898,7 +885,7 @@ Constructor for a `Layer` whose underlying graph is a `MetaGraph` from `MetaGrap
898885
function layer_metagraph(
899886
name::Symbol,
900887
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
901-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
888+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
902889
default_vertex_metadata::Function = mv -> NamedTuple(),
903890
default_edge_metadata::Function = (src, dst) -> NamedTuple(),
904891
vertextype::Type{T} = Int64,
@@ -999,7 +986,7 @@ Constructor for a `Layer` whose underlying graph is a `MetaDiGraph` from `MetaGr
999986
function layer_metadigraph(
1000987
name::Symbol,
1001988
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
1002-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
989+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
1003990
default_vertex_metadata::Function = mv -> NamedTuple(),
1004991
default_edge_metadata::Function = (src, dst) -> NamedTuple(),
1005992
vertextype::Type{T} = Int64,
@@ -1104,7 +1091,7 @@ Constructor for a `Layer` whose underlying graph is a `ValGraph` from `SimpleVal
11041091
function layer_valgraph(
11051092
name::Symbol,
11061093
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
1107-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
1094+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
11081095
default_vertex_metadata::Function = mv -> NamedTuple(),
11091096
default_edge_metadata::Function = (src, dst) -> NamedTuple(),
11101097
vertextype::Type{T} = Int64,
@@ -1242,7 +1229,7 @@ Constructor for a `Layer` whose underlying graph is a `ValOutDiGraph` from `Simp
12421229
function layer_valoutdigraph(
12431230
name::Symbol,
12441231
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
1245-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
1232+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
12461233
default_vertex_metadata::Function = mv -> NamedTuple(),
12471234
default_edge_metadata::Function = (src, dst) -> NamedTuple(),
12481235
vertextype::Type{T} = Int64,
@@ -1363,7 +1350,7 @@ Constructor for a `Layer` whose underlying graph is a `ValDiGraph` from `SimpleV
13631350
function layer_valdigraph(
13641351
name::Symbol,
13651352
vertices::Union{Vector{MultilayerVertex{nothing}},Vector{Node}},
1366-
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex}}};
1353+
edge_list::Union{Vector{<:MultilayerEdge}, Vector{NTuple{2, MultilayerVertex{nothing}}}};
13671354
default_vertex_metadata::Function = mv -> NamedTuple(),
13681355
default_edge_metadata::Function = (src, dst) -> NamedTuple(),
13691356
vertextype::Type{T} = Int64,

test/layer.jl

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,7 @@ rem_edge!(layer, rand_mv_1, rand_mv_2)
9797
@test !has_edge(layer, rand_mv_1, rand_mv_2)
9898
@test add_edge!(layer, rand_mv_1, rand_mv_2; weight=3.14, metadata=())
9999
@test has_edge(layer, rand_mv_1, rand_mv_2)
100-
@test layer.graph.weights[
101-
layer.v_V_associations(rand_mv_1), layer.v_V_associations(rand_mv_2)
102-
] ==
103-
layer.graph.weights[
104-
layer.v_V_associations(rand_mv_2), layer.v_V_associations(rand_mv_1)
105-
] ==
106-
3.14
100+
@test Graphs.weights(layer)[get_v(layer, rand_mv_1), get_v(layer, rand_mv_2) ] == Graphs.weights(layer)[get_v(layer, rand_mv_2), get_v(layer, rand_mv_1) ] == 3.14
107101
# test hybrid add_edge!
108102
@test rem_edge!(layer, rand_mv_1, rand_mv_2)
109103
@test add_edge!(layer, rand_mv_1, rand_mv_2, 3.14)
@@ -120,6 +114,7 @@ rem_edge!(layer, rand_mv_1, rand_mv_2)
120114
@test add_vertex!(layer, rand_mv_1)
121115
@test has_vertex(layer, rand_mv_1)
122116

117+
123118
layer = layer_swdg
124119
#= rand_mv_1 = rand(mv_vertices(layer))
125120
rand_mv_2 = rand(mv_vertices(layer)) =#
@@ -136,9 +131,7 @@ rem_edge!(layer, rand_mv_1, rand_mv_2)
136131
@test add_edge!(layer, rand_mv_1, rand_mv_2, 3.14)
137132
@test has_edge(layer, rand_mv_1, rand_mv_2)
138133
# Why do I have to switch the vertices?
139-
@test layer.graph.weights[
140-
layer.v_V_associations(rand_mv_2), layer.v_V_associations(rand_mv_1)
141-
] == 3.14
134+
@test Graphs.weights(layer)[get_v(layer, rand_mv_1), get_v(layer, rand_mv_2) ] == 3.14
142135
# Test uniform add_vertex!
143136
@test rem_vertex!(layer, rand_mv_1)
144137
@test !has_vertex(layer, rand_mv_1)

test/runtests.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ layer_swg = Layer(
5555
default_edge_weight=(src, dst) -> rand(),
5656
)
5757
_layer_simpleweightedgraph = layer_simpleweightedgraph(:layer_simpleweightedgraph, sample(mvs_layers, _nv, replace = false), Truncated(Normal(), 0, 10), default_edge_weight = (src,dst) -> 3.0)
58+
# Test constructor with node vertices and edge tuples
59+
node_vertices = sample(multilayer_nodes, _nv, replace = false)
60+
_layer_simpleweightedgraph_default = layer_simpleweightedgraph(:layer_simpleweightedgraph_default, node_vertices , [Tuple(MV.(rand(node_vertices,2))) for i in 1:_ne], default_edge_weight = (src,dst) -> 3.0)
61+
@test all(weight.(collect(edges(_layer_simpleweightedgraph_default))) .== 3.0)
5862

5963
layer_swdg = Layer(
6064
:layer_swdg,
@@ -77,8 +81,12 @@ layer_mg = Layer(
7781
_weighttype;
7882
default_edge_metadata=(src, dst) -> (from_to="from_$(src)_to_$(dst)",),
7983
)
80-
_layer_metagraph = layer_metagraph(:layer_metagraph, sample(mvs_metadata, _nv, replace = false), Truncated(Normal(), 0, 10), default_vertex_metadata = mv -> (metamv = "metadata of $mv",), default_edge_metadata = (src,dst) -> (metaedge = "metadata of edge from $src to $dst",))
81-
84+
_layer_metagraph = layer_metagraph(:layer_metagraph, sample(mvs_metadata, _nv, replace = false), Truncated(Normal(), 0, 10), default_vertex_metadata = mv -> (metamv = 5,), default_edge_metadata = (src,dst) -> (metaedge = "metadata of edge from $src to $dst",))
85+
# Test constructor with node vertices and tuple edges
86+
node_vertices = sample(multilayer_nodes, _nv, replace = false)
87+
_layer_metagraph_default = layer_metagraph(:layer_metagraph_default, node_vertices,[Tuple(MV.(rand(node_vertices,2))) for i in 1:_ne], default_vertex_metadata = mv -> (metamv = 4,), default_edge_metadata = (src,dst) -> (metaedge = 5,))
88+
@test all(getproperty.(metadata.(mv_vertices(_layer_metagraph_default)), Ref(:metamv)) .== 4)
89+
@test all(getproperty.(metadata.(collect(edges(_layer_metagraph_default))), Ref(:metaedge)) .== 5)
8290

8391
layer_mdg = Layer(
8492
:layer_mdg,

0 commit comments

Comments
 (0)