In many scientific and engineering scenarios, measured data or model variables lie in smooth, nonlinear spaces like the sphere or the group of 3D rotations. Such spaces often have a manifold structure, that is, they locally can be approximately linearized (i.e. they are locally diffeomorphic to a Hilbert space). Equipping such manifolds with a (pseudo-)Riemannian metric tensor, which defines a ruler on the manifold, enables local computation of distances and angles. These features enable construction of efficient algorithms that respect the nonlinear structure, for example for optimization, interpolation, and statistical modeling.

In this talk, we demonstrate various tools that Manifolds.jl provides for working with manifolds. With these tools, you can for example explicitly locally linearize points using inverse retractions and orthonormal bases. You can also compute intrinsic statistics, such as the Riemannian mean and variance, of data on manifolds. We also extend Distributions.jl to support distributions on arbitrary manifolds, which can be used to generate random points on a manifold or for statistical modeling.

Manifolds.jl implements a library of manifolds and provides combinators to construct new manifolds from these. Examples are the product manifold of two manifolds, the power manifold, the tangent bundle, and Lie groups. Using a trait-based system, any manifold may be augmented with additional geometric structure, including various metrics, without sacrificing efficiency.

We also present the light-weight interface package ManifoldsBase.jl, which enables users to easily extend Manifolds.jl with new algorithms and additional manifolds thanks to multiple dispatch. The interface can also be used to develop new, stand-alone projects. It is minimally restrictive and makes it possible to write algorithms that are independent from any concrete implementations of the manifolds. One package that uses this interface is Manopt.jl, which provides optimization algorithms on Riemannian manifolds, with a focus on high-dimensional and non-smooth optimization.