ManifoldsBase.jl

Build Statuscodecov.io

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.

Bases

Several different types of bases for a tangent space at p on a Manifold 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.

DecoratorManifold

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.

DefaultManifold

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.

EmbeddedManifold

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.

ValidationManifold

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.