creating and filtering multilayer-networks

Good morning T.Paula Piexoto and first of all : thank you for the great job
you’v already done with graph-tool.

I am physicist and I am trying to deal with multilayer large (|E|=10^6)
graphs. This largeness is basically the reason why i get seduced by
graph-tool.

I am trying to find a way to *creat* and *filter* graphs G(E,V,D) according
to the dimension D of sets of nodes and keep edges between them to perform
common mono-layer graph’s operations with it.

<http://main-discussion-list-for-the-graph-tool-project.982480.n3.nabble.com/file/t496105/Network_of_layers_in_multilayer_systems.png&gt;
Multilayered-network with dimension D in (1,2,3,4), each layers C(D) are
linked with each other with edges. (Reference :
https://en.wikipedia.org/wiki/Multidimensional_network )

I’m asking myself if you have designed such a thing in graph-tool and if,
maybe, you have some examples to show how to do that.

I hope I didn’t missed this case in the documentation you have provided…

Best regards

M. Vigouroux

The way this should be handled with graph-tool is by using a regular graph,
and then annotate the edges using property maps. If all nodes belong to all
layers, then you only need to label each edge with its layer. If the nodes
can belong to a subset of the layers, then you need to annotate the nodes
with property maps as well, i.e.

g = Graph()
elayer = g.new_ep("int") # layer membership of edges
vlayers = g.new_vp("vector<int>") # layer membership of nodes

g.add_vertex(10)
vlayers[5] = [0, 3, 7] # node 5 belongs to layers 0, 3 and 7
vlayers[8] = [1, 3] # node 8 belongs to layers 1 and 3

e = g.add_edge(5, 8)
elayer[e] = 3 # edge (5, 8) exists in layer 3

# u3 below is a graph view that isolates the vertices and edges of layer 3

u3 = GraphView(g, efilt=elayer.a == 3, vfilt=lambda v: 3 in vlayers[v])

Best,
Tiago

Thank you very much !
Enjoy your weekend
Best regards