An interface for Lie group operations

LieGroups.AbstractGroupOperation β€” Type
AbstractGroupOperation

Represent a type of group operation for a LieGroup $\mathcal G$, that is a smooth binary operation $∘ : \mathcal G Γ— \mathcal G β†’ \mathcal G$ on elements of a Lie group $\mathcal G$.

source
LieGroups.Identity β€” Type
Identity{O<:AbstractGroupOperation}

Represent the group identity element $e ∈ \mathcal G$ on a LieGroup $\mathcal G$ with AbstractGroupOperation of type O.

Similar to the philosophy that points are agnostic of their group at hand, the identity does not store the group $\mathcal G$ it belongs to. However it depends on the type of the AbstractGroupOperation used.

See also identity_element on how to obtain the corresponding AbstractManifoldPoint or array representation.

Constructors

Identity(::LieGroup{𝔽,O}) where {𝔽,O<:AbstractGroupOperation}
Identity(o::AbstractGroupOperation)
Identity(::Type{AbstractGroupOperation})

create the identity of the corresponding subtype O<:AbstractGroupOperation

source

You can combine some specific group operations with one of several manifolds to form a Lie group. You can still define the corresponding functions generically for all groups with this group operation regardless of the manifold. The following sections collect these.

Additive group operation

LieGroups.AdditionGroupOperation β€” Type
AdditionGroupOperation <: AbstractGroupOperation

A group operation that is realised introducing defaults that fall back to + and - being overloaded, for example _compose(G::LieGroup{𝔽,AdditionGroupOperation}, a, b) = a + b

source
Base.exp β€” Method
exp(G::LieGroup{𝔽,AdditionGroupOperation}, e::Identity{AdditionGroupOperation}, X, t::Number=1)
exp!(G::LieGroup{𝔽,AdditionGroupOperation}, g, e::Identity{AdditionGroupOperation}, X, t::Number=1)

Compute the Lie group exponential on a LieGroup with an AdditionGroupOperation. This can be computed in-place of g.

Since e is just the zero-element with respect to the corresponding +, the formula reads $g=0+X=X$.

source
Base.inv β€” Method
inv(G::LieGroup{𝔽,AdditionGroupOperation}, g)
inv!(G::LieGroup{𝔽,AdditionGroupOperation}, h, g)

Compute the inverse group element $g^{-1}$, which for the AdditionGroupOperation simplifies to $-g$. This can be done in-place of h.

source
Base.log β€” Method
log(G::LieGroup{𝔽,AdditionGroupOperation}, e::Identity{AdditionGroupOperation}, g)
log!(G::LieGroup{𝔽,AdditionGroupOperation}, X, e::Identity{AdditionGroupOperation}, g)

Compute the Lie group logarithm on a LieGroup with an AdditionGroupOperation. This can be computed in-place of X.

Since e is just the zero-element with respect to the corresponding +, the formula reads $X=g-0=g$.

source
LieGroups.compose! β€” Method
compose(G::LieGroup{𝔽,AdditionGroupOperation}, g, h)
compose!(G::LieGroup{𝔽,AdditionGroupOperation}, k, g, h)

Compute the group operation composition of g and h with respect to the AdditionGroupOperation on G, which falls back to calling g+h, where + is assumed to be overloaded accordingly.

This can be computed in-place of k.

source
LieGroups.diff_conjugate! β€” Method
diff_conjugate(G::LieGroup{𝔽,AdditionGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{𝔽,AdditionGroupOperation}, Y, g, h, X)

Compute the differential of the conjutage $c_g(h) = g∘h∘g^{-1} = g+h-g = h$, which simplifies for AdditionGroupOperation to $D(c_g(h))[X] = X$.

source
LieGroups.diff_conjugate β€” Method
diff_conjugate(G::LieGroup{𝔽,AdditionGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{𝔽,AdditionGroupOperation}, Y, g, h, X)

Compute the differential of the conjutage $c_g(h) = g∘h∘g^{-1} = g+h-g = h$, which simplifies for AdditionGroupOperation to $D(c_g(h))[X] = X$.

source
LieGroups.diff_inv! β€” Method
diff_inv(G::LieGroup{𝔽,AdditionGroupOperation}, g, X)
diff_inv!(G::LieGroup{𝔽,AdditionGroupOperation}, Y, g, X)

Compute the differential of the inverse operation $ΞΉ_{\mathcal G}(g) = g^-1 = -g$, which simplifies for AdditionGroupOperation to $DΞΉ_{\mathcal G}(g)[X] = -X$

source
LieGroups.diff_inv β€” Method
diff_inv(G::LieGroup{𝔽,AdditionGroupOperation}, g, X)
diff_inv!(G::LieGroup{𝔽,AdditionGroupOperation}, Y, g, X)

Compute the differential of the inverse operation $ΞΉ_{\mathcal G}(g) = g^-1 = -g$, which simplifies for AdditionGroupOperation to $DΞΉ_{\mathcal G}(g)[X] = -X$

source
LieGroups.diff_left_compose! β€” Method
diff_left_compose(G::LieGroup{𝔽,AdditionGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{𝔽,AdditionGroupOperation}, Y, g, h, X)

Compute the differential of the left group multiplication $λ_g(h) = g∘h$, which simplifies for AdditionGroupOperation to $Dλ_g(h)[X] = X$.

source
LieGroups.diff_left_compose β€” Method
diff_left_compose(G::LieGroup{𝔽,AdditionGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{𝔽,AdditionGroupOperation}, Y, g, h, X)

Compute the differential of the left group multiplication $λ_g(h) = g∘h$, which simplifies for AdditionGroupOperation to $Dλ_g(h)[X] = X$.

source
LieGroups.diff_right_compose! β€” Method
diff_right_compose(G::LieGroup{𝔽,AdditionGroupOperation}, h, g, X)
diff_right_compose!(G::LieGroup{𝔽,AdditionGroupOperation}, Y, h, g, X)

Compute the differential of the right group multiplication $ρ_g(h) = h∘g$, which simplifies for AdditionGroupOperation to $Dρ_g(h)[X] = X$.

source
LieGroups.diff_right_compose β€” Method
diff_right_compose(G::LieGroup{𝔽,AdditionGroupOperation}, h, g, X)
diff_right_compose!(G::LieGroup{𝔽,AdditionGroupOperation}, Y, h, g, X)

Compute the differential of the right group multiplication $ρ_g(h) = h∘g$, which simplifies for AdditionGroupOperation to $Dρ_g(h)[X] = X$.

source
LieGroups.inv! β€” Method
inv(G::LieGroup{𝔽,AdditionGroupOperation}, g)
inv!(G::LieGroup{𝔽,AdditionGroupOperation}, h, g)

Compute the inverse group element $g^{-1}$, which for the AdditionGroupOperation simplifies to $-g$. This can be done in-place of h.

source
LieGroups.lie_bracket! β€” Method
lie_bracket!(𝔀::LieAlgebra{𝔽,AdditionGroupOperation}, X, Y)
lie_bracket!(𝔀::LieAlgebra{𝔽,AdditionGroupOperation}, Z, X, Y)

Compute the Lie bracket $[β‹…,β‹…]: \mathfrak gΓ—\mathfrak g β†’ \mathfrak g$, which for the for the AdditionGroupOperation simplifies to the corresponding zero_vector. The computation can be done in-place of Z.

source
LieGroups.lie_bracket β€” Method
lie_bracket!(𝔀::LieAlgebra{𝔽,AdditionGroupOperation}, X, Y)
lie_bracket!(𝔀::LieAlgebra{𝔽,AdditionGroupOperation}, Z, X, Y)

Compute the Lie bracket $[β‹…,β‹…]: \mathfrak gΓ—\mathfrak g β†’ \mathfrak g$, which for the for the AdditionGroupOperation simplifies to the corresponding zero_vector. The computation can be done in-place of Z.

source
Manifolds.compose β€” Method
compose(G::LieGroup{𝔽,AdditionGroupOperation}, g, h)
compose!(G::LieGroup{𝔽,AdditionGroupOperation}, k, g, h)

Compute the group operation composition of g and h with respect to the AdditionGroupOperation on G, which falls back to calling g+h, where + is assumed to be overloaded accordingly.

This can be computed in-place of k.

source
ManifoldsBase.exp! β€” Method
exp(G::LieGroup{𝔽,AdditionGroupOperation}, e::Identity{AdditionGroupOperation}, X, t::Number=1)
exp!(G::LieGroup{𝔽,AdditionGroupOperation}, g, e::Identity{AdditionGroupOperation}, X, t::Number=1)

Compute the Lie group exponential on a LieGroup with an AdditionGroupOperation. This can be computed in-place of g.

Since e is just the zero-element with respect to the corresponding +, the formula reads $g=0+X=X$.

source
ManifoldsBase.log! β€” Method
log(G::LieGroup{𝔽,AdditionGroupOperation}, e::Identity{AdditionGroupOperation}, g)
log!(G::LieGroup{𝔽,AdditionGroupOperation}, X, e::Identity{AdditionGroupOperation}, g)

Compute the Lie group logarithm on a LieGroup with an AdditionGroupOperation. This can be computed in-place of X.

Since e is just the zero-element with respect to the corresponding +, the formula reads $X=g-0=g$.

source

Multiplication group operation

LieGroups.AbstractMultiplicationGroupOperation β€” Type
AbstractMultiplicationGroupOperation <: AbstractGroupOperation

A group operation that is realised introducing defaults that fall back to * being overloaded, for example _compose(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, a, b) = a * b

source
Base.exp β€” Method
exp(G::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, e::Identity{MatrixMultiplicationGroupOperation}, X, t::Number=1)
exp!(G::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, g, e::Identity{MatrixMultiplicationGroupOperation}, X, t::Number=1)

Compute the Lie group exponential on a LieGroup with a MatrixMultiplicationGroupOperation, which simplifies to the matrix exponential.

This can be computed in-place of g.

source
Base.inv β€” Method
inv(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperationroupOperation}, g)
inv!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, h, g)

Compute the inverse group element $g^{-1}$, which for an AbstractMultiplicationGroupOperation simplifies to the multiplicative inverse $g^{-1}$. This can be done in-place of h.

source
Base.log β€” Method
log(G::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, e::Identity{MatrixMultiplicationGroupOperation}, g)
log!(G::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, X, e::Identity{MatrixMultiplicationGroupOperation}, g)

Compute the Lie group logarithm on a LieGroup with a MatrixMultiplicationGroupOperation, which simplifies to the matrix logarithm.

This can be computed in-place of X.

source
LieGroups.compose! β€” Method
compose(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, g, h)
compose!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, k, g, h)

Compute the group operation composition of g and h with respect to an AbstractMultiplicationGroupOperation on G, which falls back to calling g*h, where * is assumed to be overloaded accordingly.

This can be computed in-place of k.

source
LieGroups.diff_conjugate! β€” Method
diff_conjugate(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)

Compute the differential of the conjutage $c_g(h) = g∘h∘g^{-1} = ghg^{-1}$, which simplifies for an AbstractMultiplicationGroupOperation to $D(c_g(h))[X] = gXg^{-1}$.

source
LieGroups.diff_conjugate β€” Method
diff_conjugate(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_conjugate!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)

Compute the differential of the conjutage $c_g(h) = g∘h∘g^{-1} = ghg^{-1}$, which simplifies for an AbstractMultiplicationGroupOperation to $D(c_g(h))[X] = gXg^{-1}$.

source
LieGroups.diff_inv! β€” Method
diff_inv(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, g, X)
diff_inv!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, Y, g, X)

Compute the value of differential $DΞΉ_{\mathcal G}(g)[X]$ of matrix inversion $ΞΉ_{\mathcal G}(g) := g^{-1}$ at $X ∈ 𝔀$ in the LieAlgebra $𝔀$ of the LieGroup G.

The formula is given by

\[DΞΉ_{\mathcal G}(g)[X] = -g^{\mathrm{T}}Xg^{-1},\]

which stems from using the differential of the inverse from [Gil08] given by $D(g^{-1})[X] = -g^{-1}Xg^{-1}$ composed with the push forward of the left composition $DΞ»_\mathrm{e}(g)[X] = gX$ mapping from the Liea algebra into the tangent space at $g$, and its adjoint $D^*Ξ»_\mathrm{e}(g)[X] = g^{\mathrm{T}}X$. Then we get $g^{\mathrm{T}}(g^{-1}(gX)g^{-1})$ which simplifies to $-g^{\mathrm{T}}Xg^{-1}$ from above.

source
LieGroups.diff_inv β€” Method
diff_inv(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, g, X)
diff_inv!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, Y, g, X)

Compute the value of differential $DΞΉ_{\mathcal G}(g)[X]$ of matrix inversion $ΞΉ_{\mathcal G}(g) := g^{-1}$ at $X ∈ 𝔀$ in the LieAlgebra $𝔀$ of the LieGroup G.

The formula is given by

\[DΞΉ_{\mathcal G}(g)[X] = -g^{\mathrm{T}}Xg^{-1},\]

which stems from using the differential of the inverse from [Gil08] given by $D(g^{-1})[X] = -g^{-1}Xg^{-1}$ composed with the push forward of the left composition $DΞ»_\mathrm{e}(g)[X] = gX$ mapping from the Liea algebra into the tangent space at $g$, and its adjoint $D^*Ξ»_\mathrm{e}(g)[X] = g^{\mathrm{T}}X$. Then we get $g^{\mathrm{T}}(g^{-1}(gX)g^{-1})$ which simplifies to $-g^{\mathrm{T}}Xg^{-1}$ from above.

source
LieGroups.diff_left_compose! β€” Method
diff_left_compose(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)

Compute the differential of the left group multiplication $λ_g(h) = g∘h$, which simplifies for an AbstractMultiplicationGroupOperation to $Dλ_g(h)[X] = gX$.

source
LieGroups.diff_left_compose β€” Method
diff_left_compose(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, g, h, X)
diff_left_compose!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, Y, g, h, X)

Compute the differential of the left group multiplication $λ_g(h) = g∘h$, which simplifies for an AbstractMultiplicationGroupOperation to $Dλ_g(h)[X] = gX$.

source
LieGroups.diff_right_compose! β€” Method
diff_right_compose(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, h, g, X)
diff_right_compose!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, Y, h, g, X)

Compute the differential of the right group multiplication $ρ_g(h) = h∘g$, which simplifies for an AbstractMultiplicationGroupOperation to $Dρ_g(h)[X] = Xg$.

source
LieGroups.diff_right_compose β€” Method
diff_right_compose(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, h, g, X)
diff_right_compose!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, Y, h, g, X)

Compute the differential of the right group multiplication $ρ_g(h) = h∘g$, which simplifies for an AbstractMultiplicationGroupOperation to $Dρ_g(h)[X] = Xg$.

source
LieGroups.inv! β€” Method
inv(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperationroupOperation}, g)
inv!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, h, g)

Compute the inverse group element $g^{-1}$, which for an AbstractMultiplicationGroupOperation simplifies to the multiplicative inverse $g^{-1}$. This can be done in-place of h.

source
LieGroups.lie_bracket! β€” Method
lie_bracket(::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, X, Y)
lie_bracket!(::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, Z, X, Y)

Compute the Lie bracket $[β‹…,β‹…]: \mathfrak gΓ—\mathfrak g β†’ \mathfrak g$, which for the for the MatrixMultiplicationGroupOperation yields the commutator bracket

\[[X, Y] = XY-YX\]

The computation can be done in-place of Z.

source
LieGroups.lie_bracket β€” Method
lie_bracket(::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, X, Y)
lie_bracket!(::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, Z, X, Y)

Compute the Lie bracket $[β‹…,β‹…]: \mathfrak gΓ—\mathfrak g β†’ \mathfrak g$, which for the for the MatrixMultiplicationGroupOperation yields the commutator bracket

\[[X, Y] = XY-YX\]

The computation can be done in-place of Z.

source
Manifolds.compose β€” Method
compose(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, g, h)
compose!(G::LieGroup{𝔽,<:AbstractMultiplicationGroupOperation}, k, g, h)

Compute the group operation composition of g and h with respect to an AbstractMultiplicationGroupOperation on G, which falls back to calling g*h, where * is assumed to be overloaded accordingly.

This can be computed in-place of k.

source
ManifoldsBase.exp! β€” Method
exp(G::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, e::Identity{MatrixMultiplicationGroupOperation}, X, t::Number=1)
exp!(G::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, g, e::Identity{MatrixMultiplicationGroupOperation}, X, t::Number=1)

Compute the Lie group exponential on a LieGroup with a MatrixMultiplicationGroupOperation, which simplifies to the matrix exponential.

This can be computed in-place of g.

source
ManifoldsBase.log! β€” Method
log(G::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, e::Identity{MatrixMultiplicationGroupOperation}, g)
log!(G::LieGroup{𝔽,MatrixMultiplicationGroupOperation}, X, e::Identity{MatrixMultiplicationGroupOperation}, g)

Compute the Lie group logarithm on a LieGroup with a MatrixMultiplicationGroupOperation, which simplifies to the matrix logarithm.

This can be computed in-place of X.

source

Literature

[Gil08]
M.Β B.Β Giles. Collected Matrix Derivative Results for Forward and Reverse Mode Algorithmic Differentiation. In: Advances in Automatic Differentiation, Lecture Notes in Computational Science and Engineering, edited by C.Β H.Β Bischof, H.Β M.Β BΓΌcker, P.Β Hovland, U.Β Naumann and J.Β Utke (Springer, Berlin, Heidelberg, 2008); pp.Β 35–44.