Graph manifold

For a given graph $G(V,E)$ implemented using Graphs.jl, the GraphManifold models a PowerManifold either on the nodes or edges of the graph, depending on the GraphManifoldType. i.e., it's either a $\mathcal M^{\lvert V \rvert}$ for the case of a vertex manifold or a $\mathcal M^{\lvert E \rvert}$ for the case of a edge manifold.

Example

To make a graph manifold over $โ„^2$ with three vertices and two edges, one can use

using Manifoldsusing GraphsM = Euclidean(2)p = [[1., 4.], [2., 5.], [3., 6.]]q = [[4., 5.], [6., 7.], [8., 9.]]x = [[6., 5.], [4., 3.], [2., 8.]]G = SimpleGraph(3)add_edge!(G, 1, 2)add_edge!(G, 2, 3)N = GraphManifold(G, M, VertexManifold())
GraphManifold
Graph:
 {3, 2} undirected simple Int64 graph
AbstractManifold on vertices:
 Euclidean(2; field=โ„)

It supports all AbstractPowerManifold operations (it is based on NestedPowerRepresentation) and furthermore it is possible to compute a graph logarithm:

incident_log(N, p)
3-element Vector{Vector{Float64}}:
 [1.0, 1.0]
 [0.0, 0.0]
 [-1.0, -1.0]

Types and functions

Manifolds.incident_log โ€” Method
incident_log(M::GraphManifold, x)

Return the tangent vector on the (vertex) GraphManifold, where at each node the sum of the logs to incident nodes is computed. For a SimpleGraph, an edge is interpreted as double edge in the corresponding SimpleDiGraph

If the internal graph is a SimpleWeightedGraph the weighted sum of the tangent vectors is computed.

source