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 Manifolds
using Graphs
M = 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.EdgeManifold
โ TypeEdgeManifoldManifold <: GraphManifoldType
A type for a GraphManifold
where the data is given on the edges.
Manifolds.GraphManifold
โ TypeGraphManifold{G,๐ฝ,M,T} <: AbstractPowerManifold{๐ฝ,M,NestedPowerRepresentation}
Build a manifold, that is a PowerManifold
of the AbstractManifold
M
either on the edges or vertices of a graph G
depending on the GraphManifoldType
T
.
Fields
G
is anAbstractSimpleGraph
M
is aAbstractManifold
Manifolds.GraphManifoldType
โ TypeGraphManifoldType
This type represents the type of data on the graph that the GraphManifold
represents.
Manifolds.VertexManifold
โ TypeVectexGraphManifold <: GraphManifoldType
A type for a GraphManifold
where the data is given on the vertices.
Manifolds.incident_log
โ Methodincident_log(M::GraphManifold, x)
Return the tangent vector on the (vertex) GraphManifold
, where at each node the sum of the log
s to incident nodes is computed. For a SimpleGraph
, an egde 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.
ManifoldsBase.check_point
โ Methodcheck_point(M::GraphManifold, p)
Check whether p
is a valid point on the GraphManifold
, i.e. its length equals the number of vertices (for VertexManifold
s) or the number of edges (for EdgeManifold
s) and that each element of p
passes the check_point
test for the base manifold M.manifold
.
ManifoldsBase.check_vector
โ Methodcheck_vector(M::GraphManifold, p, X; kwargs...)
Check whether p
is a valid point on the GraphManifold
, and X
it from its tangent space, i.e. its length equals the number of vertices (for VertexManifold
s) or the number of edges (for EdgeManifold
s) and that each element of X
together with its corresponding entry of p
passes the check_vector
test for the base manifold M.manifold
.
ManifoldsBase.manifold_dimension
โ Methodmanifold_dimension(N::GraphManifold{G,๐ฝ,M,EdgeManifold})
returns the manifold dimension of the GraphManifold
N
on the edges of a graph $G=(V,E)$, i.e.
\[\dim(\mathcal N) = \lvert E \rvert \dim(\mathcal M),\]
where $\mathcal M$ is the manifold of the data on the edges.
ManifoldsBase.manifold_dimension
โ Methodmanifold_dimension(N::GraphManifold{G,๐ฝ,M,VertexManifold})
returns the manifold dimension of the GraphManifold
N
on the vertices of a graph $G=(V,E)$, i.e.
\[\dim(\mathcal N) = \lvert V \rvert \dim(\mathcal M),\]
where $\mathcal M$ is the manifold of the data on the nodes.