Skip to content

Commit db4f6ad

Browse files
InterdisciplinaryPhysicsTeamClaudMorpitmonticone
committed
Update tests
Co-Authored-By: Claudio Moroni <[email protected]> Co-Authored-By: Pietro Monticone <[email protected]>
1 parent 40abaca commit db4f6ad

File tree

3 files changed

+20
-64
lines changed

3 files changed

+20
-64
lines changed

test/abstractmultilayerdigraph.jl

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ for node in nodes(multilayerdigraph)
6060
@test has_node(multilayerdigraph, node)
6161
end
6262

63-
## Test MultilayerGraphs.add_node! and MultilayerGraphs.rem_node!
63+
# Test MultilayerGraphs.add_node! and MultilayerGraphs.rem_node!
6464
new_node = Node("new_node")
6565
nv_prev = nv(multilayerdigraph)
6666
ne_prev = ne(multilayerdigraph)
@@ -69,7 +69,7 @@ ne_prev = ne(multilayerdigraph)
6969
@test has_node(multilayerdigraph, new_node)
7070
@test MultilayerGraphs.rem_node!(multilayerdigraph, new_node)
7171
@test !has_node(multilayerdigraph, new_node)
72-
### Test that nothing changed
72+
# Test that nothing changed
7373
@test nv_prev == nv(multilayerdigraph)
7474
@test ne_prev == ne(multilayerdigraph)
7575

@@ -78,19 +78,17 @@ ne_prev = ne(multilayerdigraph)
7878
nv(multilayerdigraph)
7979
@test length(multilayerdigraph.fadjlist) == length(vertices(multilayerdigraph)) # nv_withmissing(multilayerdigraph)
8080

81-
## Test that all multilayer vertices are present
81+
# Test that all multilayer vertices are present
8282
for mv in vcat(mv_vertices.(all_layers_d)...)
8383
@test has_vertex(multilayerdigraph, mv)
8484
end
8585

8686
for mv in mv_vertices(multilayerdigraph)
87-
# if !(mv isa MissingVertex)
8887
mv_inneighbors(multilayerdigraph, mv)
8988
mv_outneighbors(multilayerdigraph, mv)
90-
# end
9189
end
9290

93-
## Test add_vertex! and rem_vertex!
91+
# Test add_vertex! and rem_vertex!
9492

9593
# Test edges
9694
ne(multilayerdigraph)
@@ -116,7 +114,6 @@ wgt = weight_tensor(multilayerdigraph)
116114
wgt = weight_tensor(multilayerdigraph)
117115
@test wgt[rand_mv_1_weight, rand_mv_2_weight] == get_weight(multilayerdigraph, rand_mv_1_weight, rand_mv_2_weight) == _weight + 1
118116

119-
120117
## Test set_metadata!
121118
_, rand_mv_1_meta, rand_mv_2_meta = _get_srcmv_dstmv_layer(layer_mdg)
122119
### On vertices
@@ -135,7 +132,6 @@ mt = metadata_tensor(multilayerdigraph)
135132

136133
# Test Graphs.jl extra overrides
137134
@test all(indegree(multilayerdigraph) .+ outdegree(multilayerdigraph) .== degree(multilayerdigraph))
138-
139135
@inferred(mean_degree(multilayerdigraph))
140136
@inferred(degree_second_moment(multilayerdigraph))
141137
@inferred(degree_variance(multilayerdigraph))
@@ -154,8 +150,6 @@ eig_centr_u, errs_u = eigenvector_centrality(multilayerdigraph; norm="n", tol=1e
154150

155151
modularity(multilayerdigraph, rand([1, 2, 3, 4], length(nodes(multilayerdigraph)), length(multilayerdigraph.layers)), )
156152

157-
# get_graph_of_layers(multilayerdigraph)
158-
159153
wgt = weight_tensor(multilayerdigraph)
160154
sam = supra_weight_matrix(multilayerdigraph)
161155
for edge in collect(edges(multilayerdigraph.layer_swdg))
@@ -167,33 +161,19 @@ end
167161
# Test that, given a 1-dimensional multilayerdigraph, we obtain the same metrics as we would by using Graphs.jl utilities on the one and only layer
168162
## unweighted and weighted case
169163
for layer in all_layers_d
170-
171164
if !(layer.graph isa SimpleValueGraphs.AbstractValGraph)
172165
monolayergraph = MultilayerDiGraph([layer])
173-
174166
@test length(edges(monolayergraph)) == length(edges(layer.graph))
175-
176167
@test eltype(monolayergraph) == eltype(layer.graph)
177-
178168
@test ne(monolayergraph) == ne(layer.graph)
179-
180169
@test length(nodes(monolayergraph)) == nv(layer.graph)
181-
182170
@test nv(monolayergraph) .== nv(layer.graph)
183-
184171
@test all(inneighbors.(Ref(monolayergraph), vertices(monolayergraph)) .== inneighbors.(Ref(layer.graph), vertices(layer.graph)))
185-
186-
187172
@test all(indegree(monolayergraph) .== indegree(layer.graph))
188-
189173
@test all(outdegree(monolayergraph) .== outdegree(layer.graph))
190-
191174
@test all(degree(monolayergraph) .== degree(layer.graph))
192-
193175
@test_broken vec(eigenvector_centrality(monolayergraph; norm="n", tol=1e-3)[1]) ==
194176
eigenvector_centrality(layer.graph)
195-
196-
197177
tests = Bool[]
198178
for i in 1:5
199179
clustering = rand(
@@ -205,7 +185,6 @@ for layer in all_layers_d
205185
)
206186
end
207187
@test_broken all(tests)
208-
209188
for edge in edges(layer)
210189
@test has_edge(monolayergraph, edge)
211190
end

test/abstractmultilayerugraph.jl

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
all_layers_u = [layer for layer in all_layers if !is_directed(layer)]
22
all_interlayers_u = [interlayer for interlayer in all_interlayers if !is_directed(interlayer)]
3-
43
multilayergraph = MultilayerGraph(all_layers_u, all_interlayers_u)
5-
64
layers_to_be_emptied = deepcopy([layer for layer in all_layers_u if !(layer.graph isa SimpleWeightedGraphs.AbstractSimpleWeightedGraph)])
7-
85
layers_names_to_be_emptied = name.(layers_to_be_emptied)
9-
106
interlayers_to_be_emptied = deepcopy([interlayer for interlayer in all_interlayers_u if all(in.(interlayer.layers_names, Ref(layers_names_to_be_emptied))) && !(interlayer.graph isa SimpleWeightedGraphs.AbstractSimpleWeightedGraph) ])
117

128
for layer in layers_to_be_emptied
@@ -22,7 +18,6 @@ for interlayer in interlayers_to_be_emptied
2218
end
2319

2420
@test all(ne.(layers_to_be_emptied) .== 0)
25-
2621
@test all(ne.(interlayers_to_be_emptied) .== 0)
2722

2823
# Instantiate configuration-model multilayergraph
@@ -58,7 +53,6 @@ default_edge_metadata = (src,dst) -> (rand(), "missing edge from_$(src)_to_$(dst
5853

5954
# Test nodes
6055
@inferred(nodes(multilayergraph))
61-
6256
@inferred(nn(multilayergraph))
6357

6458
for node in nodes(multilayergraph)
@@ -90,7 +84,6 @@ for mv in vcat(mv_vertices.(all_layers_u)...)
9084
end
9185

9286
for mv in mv_vertices(multilayergraph)
93-
9487
mv_inneighbors(multilayergraph, mv)
9588
mv_outneighbors(multilayergraph, mv)
9689
end
@@ -147,14 +140,10 @@ mt = metadata_tensor(multilayergraph)
147140
@test all(MultilayerGraphs.get_supra_weight_matrix_from_weight_tensor(weight_tensor(multilayergraph).array) .== supra_weight_matrix(multilayergraph).array)
148141
@test all(MultilayerGraphs.get_weight_tensor_from_supra_weight_matrix(multilayergraph, supra_weight_matrix(multilayergraph).array) .== weight_tensor(multilayergraph).array)
149142
@test_broken multilayer_global_clustering_coefficient(multilayergraph) .== global_clustering_coefficient(multilayergraph)
150-
151143
overlaygraph = MultilayerGraphs.get_overlay_monoplex_graph(multilayergraph)
152144
@test_broken global_clustering_coefficient(overlaygraph) .== overlay_clustering_coefficient(multilayergraph)
153-
154145
@test multilayer_weighted_global_clustering_coefficient(multilayergraph, [1 / 3, 1 / 3, 1 / 3]) .≈ multilayer_global_clustering_coefficient(multilayergraph)
155-
156146
eig_centr_u, errs_u = eigenvector_centrality(multilayergraph; norm="n", tol=1e-3)
157-
158147
modularity(multilayergraph, rand([1, 2, 3, 4], length(nodes(multilayergraph)), length(multilayergraph.layers)), )
159148

160149
# get_graph_of_layers(multilayergraph)
@@ -173,28 +162,17 @@ for layer in all_layers_u
173162

174163
if !(layer.graph isa SimpleValueGraphs.AbstractValGraph)
175164
monolayergraph = MultilayerGraph([layer])
176-
177165
@test length(edges(monolayergraph)) == length(edges(layer.graph))
178-
179166
@test eltype(monolayergraph) == eltype(layer.graph)
180-
181167
@test ne(monolayergraph) == ne(layer.graph)
182-
183168
@test length(nodes(monolayergraph)) == nv(layer.graph)
184-
185169
@test nv(monolayergraph) .== nv(layer.graph)
186-
187170
@test all(inneighbors.(Ref(monolayergraph), vertices(monolayergraph)) .== inneighbors.(Ref(layer.graph), vertices(layer.graph)))
188-
189171
@test all(indegree(monolayergraph) .== indegree(layer.graph))
190-
191172
@test all(outdegree(monolayergraph) .== outdegree(layer.graph))
192-
193173
@test all(degree(monolayergraph) .== degree(layer.graph))
194-
195174
@test_broken vec(eigenvector_centrality(monolayergraph; norm="n", tol=1e-3)[1]) ==
196175
eigenvector_centrality(layer.graph)
197-
198176
tests = Bool[]
199177
for i in 1:5
200178
clustering = rand(
@@ -206,7 +184,6 @@ for layer in all_layers_u
206184
)
207185
end
208186
@test_broken all(tests)
209-
210187
for edge in edges(layer)
211188
@test has_edge(monolayergraph, edge)
212189
end

test/agents_jl_integration.jl

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
1-
graph = MultilayerGraph(all_layers_u, all_interlayers_u)
1+
################################################
2+
####### TEST INTEGRATION WITH AGENTS.JL ########
3+
################################################
24

5+
# Create a multilayer graph
6+
graph = MultilayerGraph(all_layers_u, all_interlayers_u)
37
# Define the agent type
48
@agent EigenAgent GraphAgent begin
59
previous_value::Float64
610
old_value::Float64
711
new_value::Float64
812
end
9-
13+
# Instantiate the agent
1014
EigenAgent(id, pos; initial_opinion::Float64) = EigenAgent(id, pos, initial_opinion, initial_opinion,-1.0)
11-
12-
# Define the ABM
13-
EigenABM = ABM(EigenAgent, GraphSpace(graph)) #
14-
15-
# Add agents so that agent i is in vertex i
15+
# Define the agent-based model
16+
EigenABM = ABM(EigenAgent, GraphSpace(graph))
17+
# Add agents to the ABM so that agent i is located in vertex i
1618
for (i,mv) in enumerate(mv_vertices(graph))
1719
initial_opinion = 1.0
1820
add_agent!(i,EigenABM, initial_opinion = initial_opinion)
1921
end
20-
22+
# Define the individual-level dynamics (micro-dynamics)
2123
function agent_step!(agent::EigenAgent,model)
2224
agent.previous_value = agent.old_value
2325
agent.new_value = sum([outneighbor_agent.old_value for outneighbor_agent in nearby_agents(agent, model; neighbor_type = :all)])
2426
end
25-
27+
# Define the system-level dynamics (macro-dynamics)
2628
function model_step!(model)
27-
tot_edges_weight = sqrt(sum(abs2, [agent.new_value for agent in allagents(model)])) #sum(weight_tensor(model.space.graph).array)
29+
tot_edges_weight = sqrt(sum(abs2, [agent.new_value for agent in allagents(model)]))
2830
for agent in allagents(model)
2931
agent.new_value = agent.new_value / tot_edges_weight
3032
agent.old_value = agent.new_value
3133
end
3234
end
33-
35+
# Set the rule to stop the model simulation
3436
function terminate(model, s)
3537
# println(s, typeof(s))
3638
if any(
@@ -42,13 +44,11 @@ function terminate(model, s)
4244
return true
4345
end
4446
end
45-
47+
# Simulate the model
4648
agent_data, _ = run!(EigenABM, agent_step!, model_step!, terminate; adata = [:new_value], when = terminate)
47-
49+
# Compute the eigenvector centrality of the surrounding multilayer graph
4850
eig_centr_swm, err_swm = eigenvector_centrality(EigenABM.space.graph ;weighted = false, tol = 1e-18, norm = "null")
4951

5052
for (val_1, val_2) in zip(eig_centr_swm, agent_data.new_value)
5153
@test val_1 val_2
52-
end
53-
54-
# @test all(eig_centr_swm .≈ agent_data.new_value)
54+
end

0 commit comments

Comments
 (0)