Basic interface for manifolds in Julia
Author JuliaManifolds
25 Stars
Updated Last
1 Year Ago
Started In
November 2019


Build Status

Basic interface for manifolds in Julia.

The project Manifolds.jl is based on this interface and provides a variety of manifolds.

Number system

A number system represents the field a manifold is based upon. Most prominently, these are real-valued (โ„) and complex valued (โ„‚) fields that parametrize certain manifolds. A further type to represent the field of quaternions (โ„) can also be used.


Several different types of bases for a tangent space at p on a AbstractManifold are provided. Methods are provided to obtain such a basis, to represent a tangent vector in a basis and to reconstruct a tangent vector from coefficients with respect to a basis. The last two can be performed without computing the complete basis. Further a basis can be cached and hence be reused, see CachedBasis.


The decorator manifold enhances a manifold by certain, in most cases implicitly assumed to have a standard case, properties, see for example the EmbeddedManifold. The decorator acts semi transparently, i.e. :transparent for all functions not affected by that decorator and :intransparent otherwise. Another possibility is, that the decorator just passes to :parent in order to fill default values.


This interface includes a simple DefaultManifold, which is a reduced version of the Euclidean manifold from Manifolds.jl, such that the interface functions can be tested.


The embedded manifold models the embedding of a manifold into another manifold. This way a manifold can benefit from existing implementations. One example is the TransparentIsometricEmbeddingType where a manifold uses the metric, inner, from its embedding.


The ValidationManifold further illustrates how one can also used types to represent points on a manifold, tangent vectors, and cotangent vectors, where values are encapsulated in a certain type.

In general, ValidationManifold might be used for manifolds where these three types are represented by more complicated data structures or when it is necessary to distinguish these by type.

This adds a semantic layer to the interface, and the default implementation of ValidationManifold adds checks to all inputs and outputs of typed data.

Required Packages

No packages found.