ManifoldsBase.jl is moving to a stable version 1.0
A few years back, we in JuliaManifolds decided, that it would be nice to have a general interface package for the manifolds defined in Manifolds.jl, since that allows
- other packages to use manifolds purely based on a lightweight manifolds API
- other packages to define their own manifolds
Besides Manifolds.jl itself defining manifolds, from the start Manopt.jl was using abstract manifolds to define its optimisation algorithms.
By now, there are more packages defining their own manifolds, for example the ExponentialFamilyManifolds.jl
The API has grown into a very stable state with only one minor change to the exponential map and retractions in the version 1.0. This is mainly in preparation for a next forthcoming package, where we do require a slightly different signature as well. See our changelog for a full explanation of the breaking changes.
We will still work on providing a broader interface for more fatures on manifolds covered in the API; still, the current state is considered so stable now, that we are happy to call this version ManifoldsBase.jl 1.0!
19 Likes
This is very cool! I took a course on differential geometry once but I didn’t think it would quickly become relevant for me again when I took the computational science specialisation afterwards.
What sort of applications is this currently being used for? I suppose General Relativity?
1 Like
Actually manifolds are a very neat way to describe any structure of continuous data, especially constraints. We can then do optimization and statistics on such data. As a more concrete example, it’s frequently used in robotics and anything that deals with modelling orientations (special orthogonal and special Euclidean groups). Also, subspaces of vector spaces form neat manifolds (Stiefel, Grassman and flag). They are very relevant in statistical modelling.
We don’t do general relativity right now. We are trying to do as much as possible without coordinates, which doesn’t work for GR but is great in other applications. For me working with manifolds is just respecting structure of your data in a very broad sense and not necessarily dealing with curvature (though it’s one of the problems the approach addresses).
4 Likes
My personal main interest is developing optimization algorithm on arbitrary manifolds (see Manopt.jl), which might be beneficial whenever you have a problem naturally defined on a manifold, often a Sphere, a Stiefel or Grassmann manifold. for these works I do not necessarily directly have an application in mind.
A main focus I do my research on is the case where the objective you aim to minimise is non smooth, so we do not have a gradient but maybe a sub gradient.
Of course with Hyperbloic space anything related to general relativity is also possible, the main areas I have seen (though not yet worked un much) are Model order reduction, especially Hamiltonian systems and the symplectic Stiefel manifold, but also Density Function theory (cf. DFTK.jl) as problems on Stiefel manifolds,… but to be honest I personally am maybe not the most applied person for that.
If you have applications we are surely interested to help how manifolds can help – for example defining Bézier curves on manifolds is one of our examples, cf. 🚀 Get Started with Manifolds.jl · Manifolds.jl, which I came to when then even optimising its control points (with respect to a certain objective)
1 Like
@kellertuer @mateuszbaran thank you both for your elaborate replies
I personally am interested in splines and related geometric objects (see my recent package SplineGrids.jl), so if you see possibilities for collaboration there I would love to hear it
2 Likes
Nice! I worked a bit with Bézier curves on manifolds, but also before with (Euclidean) splines in my masters.
As in the linkes example – one can easily generalise e.g. Casteljau’s algorithm to arbitrary manifolds and hence smoothly interpolate data in Hyperbolic space. I know a few works that even try that for multivariate data on grids, but then the tangent spaces and requirements become a bit tricky (cf. https://epubs.siam.org/doi/10.1137/16M1057978). But sure, one could in theory combine manifolds and Splines/Bézier curves.
2 Likes
Applications wise, I thought about the application of estimating the Fundamental / Homography matrix.
The problem is given by:
\arg \min_{\boldsymbol{F}} \sum_{i} \boldsymbol{x}_{i}^{T} \boldsymbol{F} \boldsymbol{y}_{i} \; \text{ subject to } \operatorname{rank} \left( \boldsymbol{F} \right) = 2
Where \boldsymbol{F} \in \mathbb{R}^{3 \times 3}.
I wonder if there is a manifold which forces the rank.
Could one solve using the current state of the packages?
1 Like
Sure! (Not only with the interface for sure but) We do have the
in Manifolds.jl. There are even retractions and inverse retractions available as well as gradient and hessian conversions. So (not having tried it but)
Note. The fixed rand manifold does not have exp/log defined, but the retractions are first-order approximations to that. Similarly parallel_transport would be the exact mathematical way required for QN, but there is a vector transport that should be taken as an approximation of that automatically instead.
If you get stuck somewhere, maybe open a new topic here, or an issue in one of the packages 
And if you know more about your matrix, for example that it is an orthonormal basis of a 2D subspace (a 3x2 matrix, excluding the one zero eigenspace basically, ±ONB) you can use the Stiefel · Manifolds.jl even, which would be lower in dimension (if that is of interest).
1 Like