[ANN] Manifolds.jl: Manifolds in Julia

The Manifolds.jl package provides a library of Riemannian manifolds that are implemented based on the ManifoldsBase.jl interface.

The package provides further:

  • an efficient power manifold working on arrays (including hybrid arrays) or nested structures,
  • an efficient product manifold,
  • basic support for statistics and distributions on manifolds,
  • a metric manifold to implement different metrics for a manifold, including a first ODE solver for the exponential map based on a given metric,
  • an embedded manifold scheme to take different embedding or different representations of an embedding into account,
  • group manifolds or Lie groups.

The last three features are based on an extensive decorator pattern that makes such an extension semi-transparent in the sense that all functions that are not affected by e.g. the metric are passed through to the underlying manifold.

The documentation also covers references and formulae for the implemented manifolds.

If a project implements the interface from ManifoldsBase.jl it can be used with all implemented manifolds. A first project that is currently ported to use the interface is Manopt.

We started this project in June last year, recently extended it to its own github org which now hosts Manifolds.jl. We are looking forward to feedback and interesting ideas and projects on manifolds.
And if your favourite manifold is missing, open an issue, provide the details and we will try to help you implementing it.

Kind regards
Mateusz (@mateuszbaran), Ronny (@kellertuer), and Seth (@sethaxen)

20 Likes

:tada:

New functionality is being developed so, if you have any manifold-valued data, we will have more and more tools to analyze it :slightly_smiling_face:.

3 Likes

This is great, thanks for developing it!

2 Likes

We have published a preprint about Manifolds.jl: [2106.08777] Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds :slightly_smiling_face: .

We also have new functionality, including new manifolds and metrics, extended documentation, support for atlases and charts and, last but not least, better performance!

4 Likes

Thanks for the package.
Is it possible to use it alongside Symbolics.jl in order to do symbolic differential geometry, just like sympy.diffgeom, for example?

Symbolic computation is currently not supported. We focus on general processing of manifold-valued data (including optimization) where symbolic computation doesn’t seem particularly relevant, or at least I haven’t seen it applied in this context.

That said, if someone works on symbolic differential geometry in Julia, I’d be happy to discuss possible connections between it and Manifolds.jl.

3 Likes

It is relevant in control theory and classical mechanics, but I understand that it is not the focus of your package.

Yes, that’s right. I’ve found your post: Symbolic differential geometry on Julia and we currently have atlases, we are slowly pushing towards supporting tensor fields and we are thinking about supporting manifolds with just an affine connection (instead of a metric). So there may be some functionality we could share :slightly_smiling_face: .

I see. It looks interesting at least for some numeric problems on mechanics.

1 Like

A symbolic toolkit for differential geometry would indeed be very interesting, but I have not the programming expertise nor the time requiered to develop it.

We are slowly continuing improving the interface and adding more and more features and manifolds.

The most recent version 0.8.64 from today introduces weak dependencies in Julia 1.9 for the packages we previously loaded with Requires.jl – it reduces the TTFM (time-to-first-manifold) from 3 seconds to 1.

4 Likes