Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bugs in README and example #101

Merged
merged 2 commits into from
Jan 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 12 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@ pkg> add MultilayerGraphs

## Usage

Here we are going to synthetically illustrate some of the main features of MultilayerGraphs.jl. For a more comprehensive exploration of the package functionalities we strongly recommend consulting the [documentation](https://juliagraphs.org/MultilayerGraphs.jl).

Let's begin by importing the necessary dependencies and setting the relevant constants.

```julia
Expand Down Expand Up @@ -99,7 +97,7 @@ Similar constructors, more flexible at the cost of ease of use, enable a finer t
# Create a simple directed value layer
n_vertices = rand(1:n_nodes) # Number of vertices
n_edges = rand(n_vertices:(n_vertices * (n_vertices - 1) - 1)) # Number of edges
default_vertex_metadata = v -> ("vertex_$(v)_metadata") # Vertex metadata
default_vertex_metadata = v -> ("vertex_$(v)_metadata",) # Vertex metadata
default_edge_metadata = (s, d) -> (rand(),) # Edge metadata
layer_simple_directed_value = Layer( # Layer constructor
:layer_simple_directed_value, # Layer name
Expand Down Expand Up @@ -151,7 +149,7 @@ interlayer_simple_directed_meta = interlayer_metadigraph( # Interlayer construct
layer_simple_directed_value, # Layer 2
n_edges; # Number of edges
default_edge_metadata=(src, dst) -> # Edge metadata
(edge_metadata="metadata_of_edge_from_$(src)_to_$(dst)"),
(edge_metadata="metadata_of_edge_from_$(src)_to_$(dst)",),
transfer_vertex_metadata=true # Boolean deciding layer vertex metadata inheritance
)

Expand All @@ -176,7 +174,7 @@ multilayerdigraph = MultilayerDiGraph( # Constructor
)

# Layers and interlayer can be accessed as properties using their names
multilayerdigraph.layer_simplevaldigraph
multilayerdigraph.layer_simple_directed_value
```

Then we proceed by showing how to add nodes, vertices and edges to a directed multilayer graph. The user may add vertices that do or do not represent nodes which are already present in the multilayer graph. In the latter case, we have to create a node first and then add the vertex representing such node to the multilayer graph. The vertex-level metadata are effectively considered only if the graph underlying the relevant layer or interlayer supports them, otherwise they are discarded. The same holds for edge-level metadata and/or weight.
Expand All @@ -187,10 +185,10 @@ new_node_1 = Node("new_node_1")
# Add the node to the multilayer graph
add_node!(multilayerdigraph, new_node_1)
# Create a vertex representing the node
new_vertex_1 = MV( # Constructor (alias for "MultilayerVertex")
new_node_1, # Node represented by the vertex
:layer_simplevaldigraph, # Layer containing the vertex
("new_metadata") # Vertex metadata
new_vertex_1 = MV( # Constructor (alias for "MultilayerVertex")
new_node_1, # Node represented by the vertex
:layer_simple_directed_value, # Layer containing the vertex
("new_metadata",) # Vertex metadata
)
# Add the vertex
add_vertex!(
Expand All @@ -201,18 +199,18 @@ add_vertex!(
# Create another node in another layer
new_node_2 = Node("new_node_2")
# Create another vertex representing the new node
new_vertex_2 = MV(new_node_2, :layer_simpledigraph)
new_vertex_2 = MV(new_node_2, :layer_simple_directed_value)
# Add the new vertex
add_vertex!(
multilayerdigraph,
new_vertex_2;
add_node=true # Add the associated node before adding the vertex
)
# Create an edge
new_edge = MultilayerEdge( # Constructor
new_vertex_1, # Source vertex
new_vertex_2, # Destination vertex
("some_edge_metadata") # Edge metadata
new_edge = MultilayerEdge( # Constructor
new_vertex_1, # Source vertex
new_vertex_2, # Destination vertex
("some_edge_metadata",) # Edge metadata
)
# Add the edge
add_edge!(
Expand Down
20 changes: 10 additions & 10 deletions example/example.jl
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ layer_simple_directed_weighted = layer_simpleweighteddigraph( # Layer construct
# Create a simple directed value layer
n_vertices = rand(1:n_nodes) # Number of vertices
n_edges = rand(n_vertices:(n_vertices * (n_vertices - 1) - 1)) # Number of edges
default_vertex_metadata = v -> ("vertex_$(v)_metadata") # Vertex metadata
default_vertex_metadata = v -> ("vertex_$(v)_metadata",) # Vertex metadata
default_edge_metadata = (s, d) -> (rand(),) # Edge metadata
layer_simple_directed_value = Layer( # Layer constructor
:layer_simple_directed_value, # Layer name
Expand Down Expand Up @@ -82,7 +82,7 @@ interlayer_simple_directed_meta = interlayer_metadigraph( # Interlayer construct
layer_simple_directed_value, # Layer 2
n_edges; # Number of edges
default_edge_metadata=(src, dst) -> # Edge metadata
(edge_metadata = "metadata_of_edge_from_$(src)_to_$(dst)"),
(edge_metadata="metadata_of_edge_from_$(src)_to_$(dst)",),
transfer_vertex_metadata=true, # Boolean deciding layer vertex metadata inheritance
)

Expand All @@ -105,28 +105,28 @@ multilayerdigraph = MultilayerDiGraph( # Constructor
)

# Layers and interlayer can be accessed as properties using their names
multilayerdigraph.layer_simplevaldigraph
multilayerdigraph.layer_simple_directed_value

# Create a node
new_node_1 = Node("new_node_1")
# Add the node to the multilayer graph
add_node!(multilayerdigraph, new_node_1)
# Create a vertex representing the node
new_vertex_1 = MV( # Constructor (alias for "MultilayerVertex")
new_node_1, # Node represented by the vertex
:layer_simplevaldigraph, # Layer containing the vertex
("new_metadata"), # Vertex metadata
new_vertex_1 = MV( # Constructor (alias for "MultilayerVertex")
new_node_1, # Node represented by the vertex
:layer_simple_directed_value, # Layer containing the vertex
("new_metadata",), # Vertex metadata
)
# Add the vertex
add_vertex!(
multilayerdigraph, # MultilayerDiGraph the vertex will be added to
multilayerdigraph, # MultilayerDiGraph the vertex will be added to
new_vertex_1, # MultilayerVertex to add
)

# Create another node in another layer
new_node_2 = Node("new_node_2")
# Create another vertex representing the new node
new_vertex_2 = MV(new_node_2, :layer_simpledigraph)
new_vertex_2 = MV(new_node_2, :layer_simple_directed)
# Add the new vertex
add_vertex!(
multilayerdigraph,
Expand All @@ -137,7 +137,7 @@ add_vertex!(
new_edge = MultilayerEdge( # Constructor
new_vertex_1, # Source vertex
new_vertex_2, # Destination vertex
("some_edge_metadata"), # Edge metadata
("some_edge_metadata",), # Edge metadata
)
# Add the edge
add_edge!(
Expand Down
24 changes: 12 additions & 12 deletions example/example.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Similar constructors, more flexible at the cost of ease of use, enable a finer t
# Create a simple directed value layer
n_vertices = rand(1:n_nodes) # Number of vertices
n_edges = rand(n_vertices:(n_vertices * (n_vertices - 1) - 1)) # Number of edges
default_vertex_metadata = v -> ("vertex_$(v)_metadata") # Vertex metadata
default_vertex_metadata = v -> ("vertex_$(v)_metadata",) # Vertex metadata
default_edge_metadata = (s, d) -> (rand(),) # Edge metadata
layer_simple_directed_value = Layer( # Layer constructor
:layer_simple_directed_value, # Layer name
Expand Down Expand Up @@ -113,7 +113,7 @@ interlayer_simple_directed_meta = interlayer_metadigraph( # Interlayer construct
layer_simple_directed_value, # Layer 2
n_edges; # Number of edges
default_edge_metadata=(src, dst) -> # Edge metadata
(edge_metadata="metadata_of_edge_from_$(src)_to_$(dst)"),
(edge_metadata="metadata_of_edge_from_$(src)_to_$(dst)",),
transfer_vertex_metadata=true # Boolean deciding layer vertex metadata inheritance
)

Expand All @@ -138,7 +138,7 @@ multilayerdigraph = MultilayerDiGraph( # Constructor
)

# Layers and interlayer can be accessed as properties using their names
multilayerdigraph.layer_simplevaldigraph
multilayerdigraph.layer_simple_directed_value
```

Then we proceed by showing how to add nodes, vertices and edges to a directed multilayer graph. The user may add vertices that do or do not represent nodes which are already present in the multilayer graph. In the latter case, we have to create a node first and then add the vertex representing such node to the multilayer graph. The vertex-level metadata are effectively considered only if the graph underlying the relevant layer or interlayer supports them, otherwise they are discarded. The same holds for edge-level metadata and/or weight.
Expand All @@ -149,10 +149,10 @@ new_node_1 = Node("new_node_1")
# Add the node to the multilayer graph
add_node!(multilayerdigraph, new_node_1)
# Create a vertex representing the node
new_vertex_1 = MV( # Constructor (alias for "MultilayerVertex")
new_node_1, # Node represented by the vertex
:layer_simplevaldigraph, # Layer containing the vertex
("new_metadata") # Vertex metadata
new_vertex_1 = MV( # Constructor (alias for "MultilayerVertex")
new_node_1, # Node represented by the vertex
:layer_simple_directed_value, # Layer containing the vertex
("new_metadata",) # Vertex metadata
)
# Add the vertex
add_vertex!(
Expand All @@ -163,18 +163,18 @@ add_vertex!(
# Create another node in another layer
new_node_2 = Node("new_node_2")
# Create another vertex representing the new node
new_vertex_2 = MV(new_node_2, :layer_simpledigraph)
new_vertex_2 = MV(new_node_2, :layer_simple_directed_value)
# Add the new vertex
add_vertex!(
multilayerdigraph,
new_vertex_2;
add_node=true # Add the associated node before adding the vertex
)
# Create an edge
new_edge = MultilayerEdge( # Constructor
new_vertex_1, # Source vertex
new_vertex_2, # Destination vertex
("some_edge_metadata") # Edge metadata
new_edge = MultilayerEdge( # Constructor
new_vertex_1, # Source vertex
new_vertex_2, # Destination vertex
("some_edge_metadata",) # Edge metadata
)
# Add the edge
add_edge!(
Expand Down