Group manifolds and actions

Lie groups, groups that are Manifolds with a smooth binary group operation AbstractGroupOperation, are implemented as subtypes of AbstractGroupManifold or by decorating an existing manifold with a group operation using GroupManifold.

The common addition and multiplication group operations of AdditionOperation and MultiplicationOperation are provided, though their behavior may be customized for a specific group.

Contents

Groups

Group manifold

Manifolds.AbstractGroupOperation β€” Type
AbstractGroupOperation

Abstract type for smooth binary operations $∘$ on elements of a Lie group $\mathcal{G}$:

\[∘ : \mathcal{G} Γ— \mathcal{G} β†’ \mathcal{G}\]

An operation can be either defined for a specific AbstractGroupManifold over number system 𝔽 or in general, by defining for an operation Op the following methods:

identity!(::AbstractGroupManifold{𝔽,Op}, q, q)
identity(::AbstractGroupManifold{𝔽,Op}, p)
inv!(::AbstractGroupManifold{𝔽,Op}, q, p)
inv(::AbstractGroupManifold{𝔽,Op}, p)
compose(::AbstractGroupManifold{𝔽,Op}, p, q)
compose!(::AbstractGroupManifold{𝔽,Op}, x, p, q)

Note that a manifold is connected with an operation by wrapping it with a decorator, AbstractGroupManifold. In typical cases the concrete wrapper GroupManifold can be used.

source
Manifolds.GroupExponentialRetraction β€” Type
GroupExponentialRetraction{D<:ActionDirection} <: AbstractRetractionMethod

Retraction using the group exponential group_exp "translated" to any point on the manifold.

For more details, see retract.

Constructor

GroupExponentialRetraction(conv::ActionDirection = LeftAction())
source
Manifolds.GroupManifold β€” Type
GroupManifold{𝔽,M<:Manifold{𝔽},O<:AbstractGroupOperation} <: AbstractGroupManifold{𝔽,O}

Decorator for a smooth manifold that equips the manifold with a group operation, thus making it a Lie group. See AbstractGroupManifold for more details.

Group manifolds by default forward metric-related operations to the wrapped manifold.

Constructor

GroupManifold(manifold, op)
source
Manifolds.Identity β€” Type
Identity(G::AbstractGroupManifold, p)

The group identity element $e ∈ \mathcal{G}$ represented by point p.

source
Base.identity β€” Method
identity(G::AbstractGroupManifold, p)

Identity element $e ∈ \mathcal{G}$, such that for any element $p ∈ \mathcal{G}$, $p \circ e = e \circ p = p$. The returned element is of a similar type to p.

source
Base.inv β€” Method
inv(G::AbstractGroupManifold, p)

Inverse $p^{-1} ∈ \mathcal{G}$ of an element $p ∈ \mathcal{G}$, such that $p \circ p^{-1} = p^{-1} \circ p = e ∈ \mathcal{G}$, where $e$ is the identity element of $\mathcal{G}$.

source
Manifolds.base_group β€” Method
base_group(M::Manifold) -> AbstractGroupManifold

Un-decorate M until an AbstractGroupManifold is encountered. Return an error if the base_manifold is reached without encountering a group.

source
Manifolds.compose β€” Method
compose(G::AbstractGroupManifold, p, q)

Compose elements $p,q ∈ \mathcal{G}$ using the group operation $p \circ q$.

source
Manifolds.group_exp β€” Method
group_exp(G::AbstractGroupManifold, X)

Compute the group exponential of the Lie algebra element X.

Given an element $X ∈ 𝔀 = T_e \mathcal{G}$, where $e$ is the identity element of the group $\mathcal{G}$, and $𝔀$ is its Lie algebra, the group exponential is the map

\[\exp : 𝔀 β†’ \mathcal{G},\]

such that for $t,s ∈ ℝ$, $Ξ³(t) = \exp (t X)$ defines a one-parameter subgroup with the following properties:

\[\begin{aligned} Ξ³(t) &= Ξ³(-t)^{-1}\\ Ξ³(t + s) &= Ξ³(t) \circ Ξ³(s) = Ξ³(s) \circ Ξ³(t)\\ Ξ³(0) &= e\\ \lim_{t β†’ 0} \frac{d}{dt} Ξ³(t) &= X. \end{aligned}\]

Note

In general, the group exponential map is distinct from the Riemannian exponential map exp.

group_exp(G::AbstractGroupManifold{𝔽,AdditionOperation}, X) where {𝔽}

Compute $q = X$.

group_exp(G::AbstractGroupManifold{𝔽,MultiplicationOperation}, X) where {𝔽}

For Number and AbstractMatrix types of X, compute the usual numeric/matrix exponential,

\[\exp X = \operatorname{Exp} X = \sum_{n=0}^∞ \frac{1}{n!} X^n.\]

source
Manifolds.group_log β€” Method
group_log(G::AbstractGroupManifold, q)

Compute the group logarithm of the group element q.

Given an element $q ∈ \mathcal{G}$, compute the right inverse of the group exponential map group_exp, that is, the element $\log q = X ∈ 𝔀 = T_e \mathcal{G}$, such that $q = \exp X$

Note

In general, the group logarithm map is distinct from the Riemannian logarithm map log.

group_log(G::AbstractGroupManifold{𝔽,AdditionOperation}, q) where {𝔽}

Compute $X = q$.

group_log(G::AbstractGroupManifold{𝔽,MultiplicationOperation}, q) where {𝔽}

For Number and AbstractMatrix types of q, compute the usual numeric/matrix logarithm:

\[\log q = \operatorname{Log} q = \sum_{n=1}^∞ \frac{(-1)^{n+1}}{n} (q - e)^n,\]

where $e$ here is the identity element, that is, $1$ for numeric $q$ or the identity matrix $I_m$ for matrix $q ∈ ℝ^{m Γ— m}$.

source
Manifolds.inverse_translate β€” Method
inverse_translate(G::AbstractGroupManifold, p, q)
inverse_translate(G::AbstractGroupManifold, p, q, conv::ActionDirection=LeftAction())

Inverse translate group element $q$ by $p$ with the inverse translation $Ο„_p^{-1}$ with the specified convention, either left ($L_p^{-1}$) or right ($R_p^{-1}$), defined as

\[\begin{aligned} L_p^{-1} &: q ↦ p^{-1} \circ q\\ R_p^{-1} &: q ↦ q \circ p^{-1}. \end{aligned}\]

source
Manifolds.inverse_translate_diff β€” Method
inverse_translate_diff(G::AbstractGroupManifold, p, q, X)
inverse_translate_diff(G::AbstractGroupManifold, p, q, X, conv::ActionDirection=LeftAction())

For group elements $p, q ∈ \mathcal{G}$ and tangent vector $X ∈ T_q \mathcal{G}$, compute the action on $X$ of the differential of the inverse translation $Ο„_p$ by $p$, with the specified left or right convention. The differential transports vectors:

\[(\mathrm{d}Ο„_p^{-1})_q : T_q \mathcal{G} β†’ T_{Ο„_p^{-1} q} \mathcal{G}\\\]

source
Manifolds.translate β€” Method
translate(G::AbstractGroupManifold, p, q)
translate(G::AbstractGroupManifold, p, q, conv::ActionDirection=LeftAction()])

Translate group element $q$ by $p$ with the translation $Ο„_p$ with the specified convention, either left ($L_p$) or right ($R_p$), defined as

\[\begin{aligned} L_p &: q ↦ p \circ q\\ R_p &: q ↦ q \circ p. \end{aligned}\]

source
Manifolds.translate_diff β€” Method
translate_diff(G::AbstractGroupManifold, p, q, X)
translate_diff(G::AbstractGroupManifold, p, q, X, conv::ActionDirection=LeftAction())

For group elements $p, q ∈ \mathcal{G}$ and tangent vector $X ∈ T_q \mathcal{G}$, compute the action of the differential of the translation $Ο„_p$ by $p$ on $X$, with the specified left or right convention. The differential transports vectors:

\[(\mathrm{d}Ο„_p)_q : T_q \mathcal{G} β†’ T_{Ο„_p q} \mathcal{G}\\\]

source
ManifoldsBase.inverse_retract β€” Method
inverse_retract(
    G::AbstractGroupManifold,
    p,
    X,
    method::GroupLogarithmicInverseRetraction{<:ActionDirection},
)

Compute the inverse retraction using the group logarithm group_log "translated" to any point on the manifold. With a group translation (translate) $Ο„_p$ in a specified direction, the retraction is

\[\operatorname{retr}_p^{-1} = (\mathrm{d}Ο„_p)_e \circ \log \circ Ο„_p^{-1},\]

where $\log$ is the group logarithm (group_log), and $(\mathrm{d}Ο„_p)_e$ is the action of the differential of translation $Ο„_p$ evaluated at the identity element $e$ (see translate_diff).

source
ManifoldsBase.retract β€” Method
retract(
    G::AbstractGroupManifold,
    p,
    X,
    method::GroupExponentialRetraction{<:ActionDirection},
)

Compute the retraction using the group exponential group_exp "translated" to any point on the manifold. With a group translation (translate) $Ο„_p$ in a specified direction, the retraction is

\[\operatorname{retr}_p = Ο„_p \circ \exp \circ (\mathrm{d}Ο„_p^{-1})_p,\]

where $\exp$ is the group exponential (group_exp), and $(\mathrm{d}Ο„_p^{-1})_p$ is the action of the differential of inverse translation $Ο„_p^{-1}$ evaluated at $p$ (see inverse_translate_diff).

source

Product group

Manifolds.ProductGroup β€” Method
ProductGroup{𝔽,T} <: GroupManifold{𝔽,ProductManifold{T},ProductOperation}

Decorate a product manifold with a ProductOperation.

Each submanifold must also be an AbstractGroupManifold or a decorated instance of one. This type is mostly useful for equipping the direct product of group manifolds with an Identity element.

Constructor

ProductGroup(manifold::ProductManifold)
source

Semidirect product group

Manifolds.SemidirectProductGroup β€” Method
SemidirectProductGroup(N::GroupManifold, H::GroupManifold, A::AbstractGroupAction)

A group that is the semidirect product of a normal group $\mathcal{N}$ and a subgroup $\mathcal{H}$, written $\mathcal{G} = \mathcal{N} β‹Š_ΞΈ \mathcal{H}$, where $ΞΈ: \mathcal{H} Γ— \mathcal{N} β†’ \mathcal{N}$ is an automorphism action of $\mathcal{H}$ on $\mathcal{N}$. The group $\mathcal{G}$ has the composition rule

\[g \circ g' = (n, h) \circ (n', h') = (n \circ ΞΈ_h(n'), h \circ h')\]

and the inverse

\[g^{-1} = (n, h)^{-1} = (ΞΈ_{h^{-1}}(n^{-1}), h^{-1}).\]

source
Manifolds.SemidirectProductOperation β€” Type
SemidirectProductOperation(action::AbstractGroupAction)

Group operation of a semidirect product group. The operation consists of the operation opN on a normal subgroup N, the operation opH on a subgroup H, and an automorphism action of elements of H on N. Only the action is stored.

source

Circle group

General linear group

Manifolds.GeneralLinear β€” Type
GeneralLinear{n,𝔽} <:
    AbstractGroupManifold{𝔽,MultiplicationOperation,DefaultEmbeddingType}

The general linear group, that is, the group of all invertible matrices in $𝔽^{nΓ—n}$.

The default metric is the left-$\mathrm{GL}(n)$-right-$\mathrm{O}(n)$-invariant metric whose inner product is

\[⟨X_p,Y_p⟩_p = ⟨p^{-1}X_p,p^{-1}Y_p⟩_\mathrm{F} = ⟨X_e, Y_e⟩_\mathrm{F},\]

where $X_p, Y_p ∈ T_p \mathrm{GL}(n, 𝔽)$, $X_e = p^{-1}X_p ∈ 𝔀𝔩(n) = T_e \mathrm{GL}(n, 𝔽) = 𝔽^{nΓ—n}$ is the corresponding vector in the Lie algebra, and $βŸ¨β‹…,β‹…βŸ©_\mathrm{F}$ denotes the Frobenius inner product.

By default, tangent vectors $X_p$ are represented with their corresponding Lie algebra vectors $X_e = p^{-1}X_p$.

source
Base.exp β€” Method
exp(G::GeneralLinear, p, X)

Compute the exponential map on the GeneralLinear group.

The exponential map is

\[\exp_p \colon X ↦ p \operatorname{Exp}(X^\mathrm{H}) \operatorname{Exp}(X - X^\mathrm{H}),\]

where $\operatorname{Exp}(β‹…)$ denotes the matrix exponential, and $β‹…^\mathrm{H}$ is the conjugate transpose. [AndruchowLarotondaRechtVarela2014][MartinNeff2016]

source
Base.log β€” Method
log(G::GeneralLinear, p, q)

Compute the logarithmic map on the GeneralLinear(n) group.

The algorithm proceeds in two stages. First, the point $r = p^{-1} q$ is projected to the nearest element (under the Frobenius norm) of the direct product subgroup $\mathrm{O}(n) Γ— S^+$, whose logarithmic map is exactly computed using the matrix logarithm. This initial tangent vector is then refined using the NLsolveInverseRetraction.

For GeneralLinear(n, β„‚), the logarithmic map is instead computed on the realified supergroup GeneralLinear(2n) and the resulting tangent vector is then complexified.

Note that this implementation is experimental.

source

Special linear group

Manifolds.SpecialLinear β€” Type
SpecialLinear{n,𝔽} <:
    AbstractGroupManifold{𝔽,MultiplicationOperation,DefaultEmbeddingType}

The special linear group $\mathrm{SL}(n,𝔽)$ that is, the group of all invertible matrices with unit determinant in $𝔽^{nΓ—n}$.

The Lie algebra $𝔰𝔩(n, 𝔽) = T_e \mathrm{SL}(n,𝔽)$ is the set of all matrices in $𝔽^{nΓ—n}$ with trace of zero. By default, tangent vectors $X_p ∈ T_p \mathrm{SL}(n,𝔽)$ for $p ∈ \mathrm{SL}(n,𝔽)$ are represented with their corresponding Lie algebra vector $X_e = p^{-1}X_p ∈ 𝔰𝔩(n, 𝔽)$.

The default metric is the same left-$\mathrm{GL}(n)$-right-$\mathrm{O}(n)$-invariant metric used for GeneralLinear(n, 𝔽). The resulting geodesic on $\mathrm{GL}(n,𝔽)$ emanating from an element of $\mathrm{SL}(n,𝔽)$ in the direction of an element of $𝔰𝔩(n, 𝔽)$ is a closed subgroup of $\mathrm{SL}(n,𝔽)$. As a result, most metric functions forward to GeneralLinear.

source
ManifoldsBase.project β€” Method
project(G::SpecialLinear, p, X)

Orthogonally project $X ∈ 𝔽^{n Γ— n}$ onto the tangent space of $p$ to the SpecialLinear $G = \mathrm{SL}(n, 𝔽)$. The formula reads

\[\operatorname{proj}_{p} = (\mathrm{d}L_p)_e ∘ \operatorname{proj}_{𝔰𝔩(n, 𝔽)} ∘ (\mathrm{d}L_p^{-1})_p \colon X ↦ X - \frac{\operatorname{tr}(X)}{n} I,\]

where the last expression uses the tangent space representation as the Lie algebra.

source
ManifoldsBase.project β€” Method
project(G::SpecialLinear, p)

Project $p ∈ \mathrm{GL}(n, 𝔽)$ to the SpecialLinear group $G=\mathrm{SL}(n, 𝔽)$.

Given the singular value decomposition of $p$, written $p = U S V^\mathrm{H}$, the formula for the projection is

\[\operatorname{proj}_{\mathrm{SL}(n, 𝔽)}(p) = U S D V^\mathrm{H},\]

where

\[D_{ij} = Ξ΄_{ij} \begin{cases} 1 & \text{ if } i β‰  n \\ \det(p)^{-1} & \text{ if } i = n \end{cases}.\]

source

Special orthogonal group

Manifolds.SpecialOrthogonal β€” Type
SpecialOrthogonal{n} <: GroupManifold{ℝ,Rotations{n},MultiplicationOperation}

Special orthogonal group $\mathrm{SO}(n)$ represented by rotation matrices.

Constructor

SpecialOrthogonal(n)
source

Translation group

Manifolds.TranslationGroup β€” Type
TranslationGroup{T<:Tuple,𝔽} <: GroupManifold{Euclidean{T,𝔽},AdditionOperation}

Translation group $\mathrm{T}(n)$ represented by translation arrays.

Constructor

TranslationGroup(n₁,...,nα΅’; field = 𝔽)

Generate the translation group on $𝔽^{n₁,…,nα΅’}$ = Euclidean(n₁,...,nα΅’; field = 𝔽), which is isomorphic to the group itself.

source

Special Euclidean group

Manifolds.SpecialEuclidean β€” Type
SpecialEuclidean(n)

Special Euclidean group $\mathrm{SE}(n)$, the group of rigid motions.

$\mathrm{SE}(n)$ is the semidirect product of the TranslationGroup on $ℝ^n$ and SpecialOrthogonal(n)

\[\mathrm{SE}(n) ≐ \mathrm{T}(n) β‹Š_ΞΈ \mathrm{SO}(n),\]

where $ΞΈ$ is the canonical action of $\mathrm{SO}(n)$ on $\mathrm{T}(n)$ by vector rotation.

This constructor is equivalent to calling

Tn = TranslationGroup(n)
SOn = SpecialOrthogonal(n)
SemidirectProductGroup(Tn, SOn, RotationAction(Tn, SOn))

Points on $\mathrm{SE}(n)$ may be represented as points on the underlying product manifold $\mathrm{T}(n) Γ— \mathrm{SO}(n)$. For group-specific functions, they may also be represented as affine matrices with size (n + 1, n + 1) (see affine_matrix), for which the group operation is MultiplicationOperation.

source
Manifolds.affine_matrix β€” Method
affine_matrix(G::SpecialEuclidean, p) -> AbstractMatrix

Represent the point $p ∈ \mathrm{SE}(n)$ as an affine matrix. For $p = (t, R) ∈ \mathrm{SE}(n)$, where $t ∈ \mathrm{T}(n), R ∈ \mathrm{SO}(n)$, the affine representation is the $n + 1 Γ— n + 1$ matrix

\[\begin{pmatrix} R & t \\ 0^\mathrm{T} & 1 \end{pmatrix}.\]

See also screw_matrix for matrix representations of the Lie algebra.

source
Manifolds.group_exp β€” Method
group_exp(G::SpecialEuclidean{2}, X)

Compute the group exponential of $X = (b, Ξ©) ∈ 𝔰𝔒(2)$, where $b ∈ 𝔱(2)$ and $Ξ© ∈ 𝔰𝔬(2)$:

\[\exp X = (t, R) = (U(ΞΈ) b, \exp Ξ©),\]

where $t ∈ \mathrm{T}(2)$, $R = \exp Ω$ is the group exponential on $\mathrm{SO}(2)$,

\[U(ΞΈ) = \frac{\sin ΞΈ}{ΞΈ} I_2 + \frac{1 - \cos ΞΈ}{ΞΈ^2} Ξ©,\]

and $ΞΈ = \frac{1}{\sqrt{2}} \lVert Ξ© \rVert_e$ (see norm) is the angle of the rotation.

source
Manifolds.group_exp β€” Method
group_exp(G::SpecialEuclidean{3}, X)

Compute the group exponential of $X = (b, Ξ©) ∈ 𝔰𝔒(3)$, where $b ∈ 𝔱(3)$ and $Ξ© ∈ 𝔰𝔬(3)$:

\[\exp X = (t, R) = (U(ΞΈ) b, \exp Ξ©),\]

where $t ∈ \mathrm{T}(3)$, $R = \exp Ω$ is the group exponential on $\mathrm{SO}(3)$,

\[U(ΞΈ) = I_3 + \frac{1 - \cos ΞΈ}{ΞΈ^2} Ξ© + \frac{ΞΈ - \sin ΞΈ}{ΞΈ^3} Ξ©^2,\]

and $ΞΈ = \frac{1}{\sqrt{2}} \lVert Ξ© \rVert_e$ (see norm) is the angle of the rotation.

source
Manifolds.group_exp β€” Method
group_exp(G::SpecialEuclidean{n}, X)

Compute the group exponential of $X = (b, Ξ©) ∈ 𝔰𝔒(n)$, where $b ∈ 𝔱(n)$ and $Ξ© ∈ 𝔰𝔬(n)$:

\[\exp X = (t, R),\]

where $t ∈ \mathrm{T}(n)$ and $R = \exp Ω$ is the group exponential on $\mathrm{SO}(n)$.

In the screw_matrix representation, the group exponential is the matrix exponential (see group_exp).

source
Manifolds.group_log β€” Method
group_log(G::SpecialEuclidean{2}, p)

Compute the group logarithm of $p = (t, R) ∈ \mathrm{SE}(2)$, where $t ∈ \mathrm{T}(2)$ and $R ∈ \mathrm{SO}(2)$:

\[\log p = (b, Ξ©) = (U(ΞΈ)^{-1} t, \log R),\]

where $b ∈ 𝔱(2)$, $Ξ© = \log R ∈ 𝔰𝔬(2)$ is the group logarithm on $\mathrm{SO}(2)$,

\[U(ΞΈ) = \frac{\sin ΞΈ}{ΞΈ} I_2 + \frac{1 - \cos ΞΈ}{ΞΈ^2} Ξ©,\]

and $ΞΈ = \frac{1}{\sqrt{2}} \lVert Ξ© \rVert_e$ (see norm) is the angle of the rotation.

source
Manifolds.group_log β€” Method
group_log(G::SpecialEuclidean{3}, p)

Compute the group logarithm of $p = (t, R) ∈ \mathrm{SE}(3)$, where $t ∈ \mathrm{T}(3)$ and $R ∈ \mathrm{SO}(3)$:

\[\log p = (b, Ξ©) = (U(ΞΈ)^{-1} t, \log R),\]

where $b ∈ 𝔱(3)$, $Ξ© = \log R ∈ 𝔰𝔬(3)$ is the group logarithm on $\mathrm{SO}(3)$,

\[U(ΞΈ) = I_3 + \frac{1 - \cos ΞΈ}{ΞΈ^2} Ξ© + \frac{ΞΈ - \sin ΞΈ}{ΞΈ^3} Ξ©^2,\]

and $ΞΈ = \frac{1}{\sqrt{2}} \lVert Ξ© \rVert_e$ (see norm) is the angle of the rotation.

source
Manifolds.group_log β€” Method
group_log(G::SpecialEuclidean{n}, p) where {n}

Compute the group logarithm of $p = (t, R) ∈ \mathrm{SE}(n)$, where $t ∈ \mathrm{T}(n)$ and $R ∈ \mathrm{SO}(n)$:

\[\log p = (b, Ξ©),\]

where $b ∈ 𝔱(n)$ and $Ξ© = \log R ∈ 𝔰𝔬(n)$ is the group logarithm on $\mathrm{SO}(n)$.

In the affine_matrix representation, the group logarithm is the matrix logarithm (see group_log):

source
Manifolds.screw_matrix β€” Method
screw_matrix(G::SpecialEuclidean, X) -> AbstractMatrix

Represent the Lie algebra element $X ∈ 𝔰𝔒(n) = T_e \mathrm{SE}(n)$ as a screw matrix. For $X = (b, Ξ©) ∈ 𝔰𝔒(n)$, where $Ξ© ∈ 𝔰𝔬(n) = T_e \mathrm{SO}(n)$, the screw representation is the $n + 1 Γ— n + 1$ matrix

\[\begin{pmatrix} Ξ© & b \\ 0^\mathrm{T} & 0 \end{pmatrix}.\]

See also affine_matrix for matrix representations of the Lie group.

source

Group actions

Manifolds.apply! β€” Method
apply!(A::AbstractGroupAction, q, a, p)

Apply action a to the point p with the rule specified by A. The result is saved in q.

source
Manifolds.apply β€” Method
apply(A::AbstractGroupAction, a, p)

Apply action a to the point p using map $Ο„_a$, specified by A. Unless otherwise specified, the right action is defined in terms of the left action:

\[\mathrm{R}_a = \mathrm{L}_{a^{-1}}\]

source
Manifolds.apply_diff β€” Method
apply_diff(A::AbstractGroupAction, a, p, X)

For group point $p ∈ \mathcal M$ and tangent vector $X ∈ T_p \mathcal M$, compute the action on $X$ of the differential of the action of $a ∈ \mathcal{G}$, specified by rule A. Written as $(\mathrm{d}Ο„_a)_p$, with the specified left or right convention, the differential transports vectors

\[(\mathrm{d}Ο„_a)_p : T_p \mathcal M β†’ T_{Ο„_a p} \mathcal M\]

source
Manifolds.center_of_orbit β€” Function
center_of_orbit(
    A::AbstractGroupAction,
    pts,
    p,
    mean_method::AbstractEstimationMethod = GradientDescentEstimation(),
)

Calculate an action element $a$ of action A that is the mean element of the orbit of p with respect to given set of points pts. The mean is calculated using the method mean_method.

The orbit of $p$ with respect to the action of a group $\mathcal{G}$ is the set

\[O = \{ Ο„_a p : a ∈ \mathcal{G} \}.\]

This function is useful for computing means on quotients of manifolds by a Lie group action.

source
Manifolds.inverse_apply! β€” Method
inverse_apply!(A::AbstractGroupAction, q, a, p)

Apply inverse of action a to the point p with the rule specified by A. The result is saved in q.

source
Manifolds.inverse_apply β€” Method
inverse_apply(A::AbstractGroupAction, a, p)

Apply inverse of action a to the point p. The action is specified by A.

source
Manifolds.inverse_apply_diff β€” Method
inverse_apply_diff(A::AbstractGroupAction, a, p, X)

For group point $p ∈ \mathcal M$ and tangent vector $X ∈ T_p \mathcal M$, compute the action on $X$ of the differential of the inverse action of $a ∈ \mathcal{G}$, specified by rule A. Written as $(\mathrm{d}Ο„_a^{-1})_p$, with the specified left or right convention, the differential transports vectors

\[(\mathrm{d}Ο„_a^{-1})_p : T_p \mathcal M β†’ T_{Ο„_a^{-1} p} \mathcal M\]

source
Manifolds.optimal_alignment! β€” Method
optimal_alignment!(A::AbstractGroupAction, x, p, q)

Calculate an action element of action A that acts upon p to produce the element closest to q. The result is written to x.

source
Manifolds.optimal_alignment β€” Method
optimal_alignment(A::AbstractGroupAction, p, q)

Calculate an action element $a$ of action A that acts upon p to produce the element closest to q in the metric of the G-manifold:

\[\arg\min_{a ∈ \mathcal{G}} d_{\mathcal M}(Ο„_a p, q)\]

where $\mathcal{G}$ is the group that acts on the G-manifold $\mathcal M$.

source

Group operation action

Manifolds.GroupOperationAction β€” Type
GroupOperationAction(group::AbstractGroupManifold, AD::ActionDirection = LeftAction())

Action of a group upon itself via left or right translation.

source

Rotation action

Manifolds.RotationAction β€” Type
RotationAction(
    M::Manifold,
    SOn::SpecialOrthogonal,
    AD::ActionDirection = LeftAction(),
)

Space of actions of the SpecialOrthogonal group $\mathrm{SO}(n)$ on a Euclidean-like manifold M of dimension n.

source

Translation action

Manifolds.TranslationAction β€” Type
TranslationAction(
    M::Manifold,
    Rn::TranslationGroup,
    AD::ActionDirection = LeftAction(),
)

Space of actions of the TranslationGroup $\mathrm{T}(n)$ on a Euclidean-like manifold M.

The left and right actions are equivalent.

source

Invariant metrics

Manifolds.InvariantMetric β€” Type
InvariantMetric{G<:Metric,D<:ActionDirection} <: Metric

Extend a metric on the Lie algebra of an AbstractGroupManifold to the whole group via translation in the specified direction.

Given a group $\mathcal{G}$ and a left- or right group translation map $Ο„$ on the group, a metric $g$ is $Ο„$-invariant if it has the inner product

\[g_p(X, Y) = g_{Ο„_q p}((\mathrm{d}Ο„_q)_p X, (\mathrm{d}Ο„_q)_p Y),\]

for all $p,q ∈ \mathcal{G}$ and $X,Y ∈ T_p \mathcal{G}$, where $(\mathrm{d}Ο„_q)_p$ is the differential of translation by $q$ evaluated at $p$ (see translate_diff).

InvariantMetric constructs an (assumed) $Ο„$-invariant metric by extending the inner product of a metric $h_e$ on the Lie algebra to the whole group:

\[g_p(X, Y) = h_e((\mathrm{d}Ο„_p^{-1})_p X, (\mathrm{d}Ο„_p^{-1})_p Y).\]

Warning

The invariance condition is not checked and must be verified for the entire group. To verify the condition for a set of points numerically, use has_approx_invariant_metric.

The convenient aliases LeftInvariantMetric and RightInvariantMetric are provided.

Constructor

InvariantMetric(metric::Metric, conv::ActionDirection = LeftAction())
source
Manifolds.has_approx_invariant_metric β€” Method
has_approx_invariant_metric(
    G::AbstractGroupManifold,
    p,
    X,
    Y,
    qs::AbstractVector,
    conv::ActionDirection = LeftAction();
    kwargs...,
) -> Bool

Check whether the metric on the group $\mathcal{G}$ is (approximately) invariant using a set of predefined points. Namely, for $p ∈ \mathcal{G}$, $X,Y ∈ T_p \mathcal{G}$, a metric $g$, and a translation map $Ο„_q$ in the specified direction, check for each $q ∈ \mathcal{G}$ that the following condition holds:

\[g_p(X, Y) β‰ˆ g_{Ο„_q p}((\mathrm{d}Ο„_q)_p X, (\mathrm{d}Ο„_q)_p Y).\]

This is necessary but not sufficient for invariance.

Optionally, kwargs passed to isapprox may be provided.

source
Manifolds.invariant_metric_dispatch β€” Method
invariant_metric_dispatch(G::AbstractGroupManifold, conv::ActionDirection) -> Val

Return Val(true) if the metric on the group $\mathcal{G}$ is invariant under translations by the specified direction, that is, given a group $\mathcal{G}$, a left- or right group translation map $Ο„$, and a metric $g_e$ on the Lie algebra, a $Ο„$-invariant metric at any point $p ∈ \mathcal{G}$ is defined as a metric with the inner product

\[g_p(X, Y) = g_{Ο„_q p}((\mathrm{d}Ο„_q)_p X, (\mathrm{d}Ο„_q)_p Y),\]

for $X,Y ∈ T_q \mathcal{G}$ and all $q ∈ \mathcal{G}$, where $(\mathrm{d}Ο„_q)_p$ is the differential of translation by $q$ evaluated at $p$ (see translate_diff).

source