Skip to content

Commit 4e8a8ce

Browse files
InterdisciplinaryPhysicsTeamClaudMorpitmonticone
committed
Update docstrings
Co-Authored-By: Claudio Moroni <[email protected]> Co-Authored-By: Pietro Monticone <[email protected]>
1 parent d126c41 commit 4e8a8ce

File tree

3 files changed

+38
-52
lines changed

3 files changed

+38
-52
lines changed

src/abstractmultilayerdigraph.jl

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ Abstract type representing an undirected multilayer graph.
66
abstract type AbstractMultilayerDiGraph{T,U} <: AbstractMultilayerGraph{T,U} end
77

88
# Nodes
9-
109
# Vertices
1110
"""
1211
add_vertex!(mg::M, V::MultilayerVertex) where {T, U, M <: AbstractMultilayerDiGraph{T,U}}
@@ -171,7 +170,7 @@ function set_metadata!(mg::AbstractMultilayerDiGraph, src::MultilayerVertex, dst
171170
return true
172171
end
173172

174-
# Overloads that make AbstractMultilayerDiGraph an extension of Graphs.jl. These are all well-inferred .
173+
# Overloads that make AbstractMultilayerDiGraph an extension of Graphs.jl. These are all well-inferred.
175174
"""
176175
edges(mg::M) where {T,U,M<:AbstractMultilayerDiGraph{T,U}}
177176
@@ -378,17 +377,16 @@ Graphs.is_directed(mg::M) where {M<:Type{<:AbstractMultilayerDiGraph}} = true
378377
379378
Return the list of inneighbors of `v` within `mg`.
380379
"""
381-
function Graphs.inneighbors(
382-
mg::M, v::T
383-
) where {M<:AbstractMultilayerGraph{T,<:Real}} where {T}
380+
function Graphs.inneighbors(mg::M, v::T
381+
) where {M<:AbstractMultilayerGraph{T,<:Real}} where {T}
384382

385-
_inneighbors = T[]
383+
_inneighbors = T[]
386384

387-
for helfedge in mg.badjlist[v]
388-
push!(_inneighbors, get_v(mg, vertex(helfedge)))
389-
end
385+
for helfedge in mg.badjlist[v]
386+
push!(_inneighbors, get_v(mg, vertex(helfedge)))
387+
end
390388

391-
return _inneighbors
389+
return _inneighbors
392390
end
393391

394392
"""

src/abstractmultilayergraph.jl

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ Base.eltype(::M) where {T,M<:AbstractMultilayerGraph{T}} = T
107107
108108
Return true if `v` is in mg, else false.
109109
"""
110-
Graphs.has_vertex(mg::M, v::T ) where {T, M <: AbstractMultilayerGraph{T}} = v in domain(mg.v_V_associations) # && !(mg.v_V_associations[v] isa MissingVertex)
110+
Graphs.has_vertex(mg::M, v::T ) where {T, M <: AbstractMultilayerGraph{T}} = v in domain(mg.v_V_associations)
111111

112112
"""
113113
has_vertex(mg::AbstractMultilayerGraph, mv::MultilayerVertex)
@@ -151,7 +151,7 @@ Set the metadata of vertex `mv` to `metadata`. Return true if succeeds
151151
"""
152152
function set_metadata!(mg::AbstractMultilayerGraph, mv::MultilayerVertex, metadata::Union{Tuple, NamedTuple})
153153

154-
descriptor = mg.layers[get_layer_idx(mg, layer(mv))]#get_subgraph_descriptor(mg, layer(mv))
154+
descriptor = mg.layers[get_layer_idx(mg, layer(mv))]
155155
is_meta(descriptor.null_graph) || return false
156156
has_vertex(mg, mv) || return false
157157
mg.v_metadata_dict[get_v(mg, mv)] = metadata
@@ -160,7 +160,6 @@ function set_metadata!(mg::AbstractMultilayerGraph, mv::MultilayerVertex, metada
160160

161161
end
162162

163-
164163
# Edges
165164
"""
166165
edgetype(::M) where {T,U,M<:AbstractMultilayerGraph{T,U}}
@@ -379,40 +378,38 @@ end
379378
Internal function. It is called by the `specify_interlayer!` API functions.
380379
"""
381380
function _specify_interlayer!(
382-
mg::M, new_interlayer::In
383-
) where {T,U,G<:AbstractGraph{T},M<:AbstractMultilayerGraph{T,U},In<:Interlayer{T,U,G}}
384-
385-
all(in.([new_interlayer.layer_1, new_interlayer.layer_2], Ref(mg.layers_names))) ||
386-
# throw(
387-
# ErrorException(
388-
throw(ErrorException("The new interlayer connects two layers that are not (one or both) part of the multilayer graph. Make sure you spelled the `layer_1` and `layer_2` arguments of the `Interlayer` correctly. Available layers are $(mg.layers_names), found $(new_interlayer.layer_1) and $(new_interlayer.layer_2)."))
389-
# ),
390-
# )
391-
392-
# Check that it has the correct number of nodes on both layers
393-
(isempty(setdiff(Set(new_interlayer.layer_1_nodes), Set(nodes(Base.getproperty(mg, new_interlayer.layer_1)))) ) && isempty(setdiff(Set(new_interlayer.layer_2_nodes), Set(nodes(Base.getproperty(mg, new_interlayer.layer_2)))) )) || throw(ErrorException("The nodes in the interlayer $(new_interlayer.name) do not correspond to the nodes in the respective layers $(new_interlayer.layer_1) and $(new_interlayer.layer_2). Found $( setdiff(Set(new_interlayer.layer_1_nodes), Set(nodes(Base.getproperty(mg, new_interlayer.layer_1)))) ) and $(setdiff(Set(new_interlayer.layer_2_nodes), Set(nodes(Base.getproperty(mg, new_interlayer.layer_2)))))"))
394-
395-
# A rem_interlayer! function may not exist since there always must be all interlayers. We then proceed to effectively remove the interlayer here
396-
key = Set([new_interlayer.layer_1, new_interlayer.layer_2])
397-
if haskey(mg.interlayers, key)
398-
existing_interlayer = getproperty(mg, mg.interlayers[key].name)
399-
400-
for edge in edges(existing_interlayer)
401-
rem_edge!(mg, edge)
402-
end
403-
end
381+
mg::M, new_interlayer::In
382+
) where {T,U,G<:AbstractGraph{T},M<:AbstractMultilayerGraph{T,U},In<:Interlayer{T,U,G}}
404383

405-
mg.interlayers[Set([new_interlayer.layer_1, new_interlayer.layer_2])] = new_interlayer.descriptor
384+
all(in.([new_interlayer.layer_1, new_interlayer.layer_2], Ref(mg.layers_names))) ||
385+
# throw(
386+
# ErrorException(
387+
throw(ErrorException("The new interlayer connects two layers that are not (one or both) part of the multilayer graph. Make sure you spelled the `layer_1` and `layer_2` arguments of the `Interlayer` correctly. Available layers are $(mg.layers_names), found $(new_interlayer.layer_1) and $(new_interlayer.layer_2)."))
388+
# ),
389+
# )
406390

407-
for edge in edges(new_interlayer)
408-
success = add_edge!(mg, edge)
409-
@assert success
410-
end
391+
# Check that it has the correct number of nodes on both layers
392+
(isempty(setdiff(Set(new_interlayer.layer_1_nodes), Set(nodes(Base.getproperty(mg, new_interlayer.layer_1)))) ) && isempty(setdiff(Set(new_interlayer.layer_2_nodes), Set(nodes(Base.getproperty(mg, new_interlayer.layer_2)))) )) || throw(ErrorException("The nodes in the interlayer $(new_interlayer.name) do not correspond to the nodes in the respective layers $(new_interlayer.layer_1) and $(new_interlayer.layer_2). Found $( setdiff(Set(new_interlayer.layer_1_nodes), Set(nodes(Base.getproperty(mg, new_interlayer.layer_1)))) ) and $(setdiff(Set(new_interlayer.layer_2_nodes), Set(nodes(Base.getproperty(mg, new_interlayer.layer_2)))))"))
411393

412-
return true
413-
end
394+
# A rem_interlayer! function may not exist since there always must be all interlayers. We then proceed to effectively remove the interlayer here
395+
key = Set([new_interlayer.layer_1, new_interlayer.layer_2])
396+
if haskey(mg.interlayers, key)
397+
existing_interlayer = getproperty(mg, mg.interlayers[key].name)
398+
399+
for edge in edges(existing_interlayer)
400+
rem_edge!(mg, edge)
401+
end
402+
end
414403

404+
mg.interlayers[Set([new_interlayer.layer_1, new_interlayer.layer_2])] = new_interlayer.descriptor
415405

406+
for edge in edges(new_interlayer)
407+
success = add_edge!(mg, edge)
408+
@assert success
409+
end
410+
411+
return true
412+
end
416413

417414
"""
418415
get_interlayer(
@@ -425,7 +422,6 @@ Return the `Interlayer` between `layer_1` and `layer_2`.
425422
function get_interlayer(
426423
mg::AbstractMultilayerGraph, layer_1_name::Symbol, layer_2_name::Symbol
427424
)
428-
429425
layer_1_name mg.layers_names || throw(ErrorException("$layer_1_name doesn't belong to the multilayer graph. Available layers are $(mg.layers_names)."))
430426
layer_2_name mg.layers_names || throw(ErrorException("$layer_2_name doesn't belong to the multilayer graph. Available layers are $(mg.layers_names)."))
431427
layer_1_name != layer_2_name || throw(ErrorException("`layer_1` argument is the same as `layer_2`. There is no interlayer between a layer and itself."))
@@ -447,14 +443,12 @@ end
447443
Return the index of the `Layer` whose name is `layer_name` within `mg.layers`.
448444
"""
449445
function get_layer_idx(mg::M, layer_name::Symbol) where {T,U,M<:AbstractMultilayerGraph{T,U}}
450-
451446
idx = findfirst(descriptor -> descriptor.name == layer_name, mg.layers)
452447
if !isnothing(idx)
453448
return idx
454449
else
455450
return nothing
456451
end
457-
458452
end
459453

460454
"""
@@ -463,15 +457,13 @@ end
463457
Return the descriptor associated to the interlayer connecting `layer_1` to `layer_2` (or to the Layer named `layer_1` if `layer_1` == `layer_2`)
464458
"""
465459
function get_subgraph_descriptor(mg::M, layer_1_name::Symbol, layer_2_name::Symbol) where {T,U,M<:AbstractMultilayerGraph{T,U}}
466-
467460
if layer_1_name == layer_2_name
468461
idx = get_layer_idx(mg, layer_1_name)
469462
if !isnothing(idx)
470463
return mg.layers[idx]
471464
else
472465
throw(ErrorException("The multilayer graph does not contain any Layer named $(layer_1_name). Available layers are $(mg.layers_names)."))
473466
end
474-
475467
else
476468
layer_1_name mg.layers_names || throw(ErrorException("$layer_1_name does nto belong to the multilayer graph. Available layers are $(mg.layers_names)."))
477469
layer_2_name mg.layers_names ||throw(ErrorException("$layer_2_name does nto belong to the multilayer graph. Available layers are $(mg.layers_names)."))

src/abstractmultilayerugraph.jl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
# ne
2-
# has_edge
3-
# edges
4-
51
"""
62
AbstractMultilayerUGraph{T,U} <: AbstractMultilayerGraph{T,U}
73
@@ -201,7 +197,7 @@ Add layer `layer` to `mg`.
201197
- `mg::M`: the `MultilayerGraph` which the new layer will be added to;
202198
- `new_layer::L`: the new `Layer` to add to `mg`;
203199
- `default_interlayers_null_graph::H = SimpleGraph{T}()`: upon addition of a new `Layer`, all the `Interlayer`s between the new and the existing `Layer`s are immediately created. This keyword argument specifies their `null_graph` See the `Layer` constructor for more information. Defaults to `SimpleGraph{T}()`;
204-
- `default_interlayers_structure::String = "multiplex"`: The structure of the `Interlayer`s created by deafault. May either be "multiplex" to have diagonally-coupled only interlayers, or "empty" for empty interlayers. Defaults to "multiplex".
200+
- `default_interlayers_structure::String = "multiplex"`: The structure of the `Interlayer`s created by default. May either be "multiplex" to have diagonally-coupled only interlayers, or "empty" for empty interlayers. Defaults to "multiplex".
205201
"""
206202
function add_layer!(
207203
mg::M, new_layer::L; default_interlayers_null_graph::H = SimpleGraph{T}(), default_interlayers_structure::String ="multiplex"

0 commit comments

Comments
 (0)