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.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
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

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

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