# Group actions

Group actions represent actions of a given group on a specified manifold. The following operations are available:

Furthermore, group operation action features the following:

The following group actions are available:

Manifolds.adjoint_apply_diff_group โ Method
adjoint_apply_diff_group(A::AbstractGroupAction, a, X, p)

Pullback with respect to group element of group action A.

$$$(\mathrm{d}ฯ^{p,*}) : T_{ฯ_{a} p} \mathcal M โ T_{a} \mathcal G$$$
source
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 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.apply_diff_group โ Method
apply_diff_group(A::AbstractGroupAction, a, X, p)

Compute the value of differential of action AbstractGroupAction A on vector X, where element a is acting on p, with respect to the group element.

Let $\mathcal G$ be the group acting on manifold $\mathcal M$ by the action A. The action is of element $g โ \mathcal G$ on a point $p โ \mathcal M$. The differential transforms vector X from the tangent space at a โ \mathcal G, $X โ T_a \mathcal G$ into a tangent space of the manifold $\mathcal M$. When action on element p is written as $\mathrm{d}ฯ^p$, with the specified left or right convention, the differential transforms vectors

$$$(\mathrm{d}ฯ^p) : T_{a} \mathcal G โ T_{ฯ_a p} \mathcal M$$$

source
Manifolds.center_of_orbit โ Function
center_of_orbit(
A::AbstractGroupAction,
pts,
p,
)

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{AD<:ActionDirection,AS<:GroupActionSide,G<:AbstractDecoratorManifold} <: AbstractGroupAction{AD}

Action of a group upon itself via left or right translation, either from left or right side. An element p of the group can act upon another another element by either:

• left action from the left side: $L_p: q โฆ p \circ q$,
• right action from the left side: $L'_p: q โฆ p^{-1} \circ q$,
• right action from the right side: $R_p: q โฆ q \circ p$,
• left action from the right side: $R'_p: q โฆ q \circ p^{-1}$.

Constructor

GroupOperationAction(group::AbstractDecoratorManifold, AD::ActionDirectionAndSide = LeftForwardAction())
source
Manifolds.apply_diff_group โ Method
apply_diff_group(A::GroupOperationAction, a, X, p)

Compute differential of GroupOperationAction A with respect to group element at tangent vector X:

$$$(\mathrm{d}ฯ^p) : T_{a} \mathcal G โ T_{ฯ_a p} \mathcal G$$$

There are four cases:

• left action from the left side: $L_a: p โฆ a \circ p$, where
$$$(\mathrm{d}L_a) : T_{a} \mathcal G โ T_{a \circ p} \mathcal G.$$$
• right action from the left side: $L'_a: p โฆ a^{-1} \circ p$, where
$$$(\mathrm{d}L'_a) : T_{a} \mathcal G โ T_{a^{-1} \circ p} \mathcal G.$$$
• right action from the right side: $R_a: p โฆ p \circ a$, where
$$$(\mathrm{d}R_a) : T_{a} \mathcal G โ T_{p \circ a} \mathcal G.$$$
• left action from the right side: $R'_a: p โฆ p \circ a^{-1}$, where
$$$(\mathrm{d}R'_a) : T_{a} \mathcal G โ T_{p \circ a^{-1}} \mathcal G.$$$
source

## Rotation action

Manifolds.ColumnwiseMultiplicationAction โ Type
ColumnwiseMultiplicationAction{
TM<:AbstractManifold,
TO<:GeneralUnitaryMultiplicationGroup,
} <: AbstractGroupAction{TAD}

Action of the (special) unitary or orthogonal group GeneralUnitaryMultiplicationGroup of type On columns of points on a matrix manifold M.

Constructor

ColumnwiseMultiplicationAction(
M::AbstractManifold,
On::GeneralUnitaryMultiplicationGroup,
)
source
Manifolds.RowwiseMultiplicationAction โ Type
RowwiseMultiplicationAction{
TM<:AbstractManifold,
TO<:GeneralUnitaryMultiplicationGroup,
} <: AbstractGroupAction{TAD}

Action of the (special) unitary or orthogonal group GeneralUnitaryMultiplicationGroup of type On columns of points on a matrix manifold M.

Constructor

RowwiseMultiplicationAction(
M::AbstractManifold,
On::GeneralUnitaryMultiplicationGroup,
)
source
Manifolds.apply โ Method
apply(A::RotationAroundAxisAction, ฮธ, p)

Rotate point p from Euclidean(3) manifold around axis A.axis by angle ฮธ. The formula reads

$$$p_{rot} = (\cos(ฮธ))p + (kรp) \sin(ฮธ) + k (kโ p) (1-\cos(ฮธ)),$$$

where $k$ is the vector A.axis and โ is the dot product.

source
Manifolds.optimal_alignment โ Method
optimal_alignment(A::LeftColumnwiseMultiplicationAction, p, q)

Compute optimal alignment for the left ColumnwiseMultiplicationAction, i.e. the group element $O^{*}$ that, when it acts on p, returns the point closest to q. Details of computation are described in Section 2.2.1 of [SK16].

$$$O^{*} = \begin{cases} UV^T & \text{if } \operatorname{det}(p q^{\mathrm{T}}) \geq 0\\ U K V^{\mathrm{T}} & \text{otherwise} \end{cases}$$$

where $U \Sigma V^{\mathrm{T}}$ is the SVD decomposition of $p q^{\mathrm{T}}$ and $K$ is the unit diagonal matrix with the last element on the diagonal replaced with -1.

source

## Rotation-translation action (special Euclidean)

Manifolds.ColumnwiseSpecialEuclideanAction โ Type
ColumnwiseSpecialEuclideanAction{
TM<:AbstractManifold,
TSE<:SpecialEuclidean,
} <: AbstractGroupAction{TAD}

Action of the special Euclidean group SpecialEuclidean of type SE columns of points on a matrix manifold M.

Constructor

ColumnwiseSpecialEuclideanAction(
M::AbstractManifold,
SE::SpecialEuclidean,
)
source
Manifolds.RotationTranslationAction โ Type
RotationTranslationAction(
M::AbstractManifold,
SOn::SpecialEuclidean,
)

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

Left actions corresponds to active transformations while right actions can be identified with passive transformations for a particular choice of a basis.

source
Manifolds.apply โ Method
apply(::RotationTranslationActionOnVector{LeftAction}, a::ArrayPartition, p)

Rotate point p by a.x[2] and translate it by a.x[1].

source
Manifolds.apply โ Method
apply(::RotationTranslationActionOnVector{RightAction}, a::ArrayPartition, p)

Translate point p by -a.x[1] and rotate it by inverse of a.x[2].

source
Manifolds.inverse_apply โ Method
inverse_apply(::RotationTranslationActionOnVector{LeftAction}, a::ArrayPartition, p)

Translate point p by -a.x[1] and rotate it by inverse of a.x[2].

source
Manifolds.inverse_apply โ Method
inverse_apply(::RotationTranslationActionOnVector{RightAction}, a::ArrayPartition, p)

Rotate point p by a.x[2] and translate it by a.x[1].

source