Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Power, Product, and semidirect product manifolds #14

Merged
merged 44 commits into from
Nov 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
388ff3f
Sketch a first few ideas.
kellertuer Nov 4, 2024
24c5e4e
Fix Test.
kellertuer Nov 5, 2024
9529e56
I think it has become too late for me to be clever enough to make the…
kellertuer Nov 6, 2024
e302ade
add entry to news.
kellertuer Nov 6, 2024
15cae9a
Define nice constructor for product and a show method.
kellertuer Nov 12, 2024
774edf8
Start test suite for product.
kellertuer Nov 12, 2024
6068f0a
fix show for power group
mateuszbaran Nov 12, 2024
b90fee5
setup power lie group test suite.
kellertuer Nov 12, 2024
5172b3b
increase test coverage.
kellertuer Nov 12, 2024
9366f9d
Initial sketch of semidirect products
kellertuer Nov 13, 2024
7c2dde3
add type in function
mateuszbaran Nov 15, 2024
1450285
A bit of renaming for actions.
kellertuer Nov 15, 2024
0a9bac6
Merge branch 'kellertuer/power-and-products' of github.com:JuliaManif…
kellertuer Nov 15, 2024
99caf4f
Refactor actions and define semidirect product Lie groups thoroughly.
kellertuer Nov 15, 2024
1aee6cf
Finish the initial sketch of Semidirect product Lie groups.
kellertuer Nov 15, 2024
8615bff
Start testing for semidirect.
kellertuer Nov 15, 2024
ceb7ddd
document the new changes in the NEWS.md.
kellertuer Nov 15, 2024
bc4f9d5
Got a bit stuck on allocations and ambiguities.
kellertuer Nov 16, 2024
61886d5
Introduce PowerGroupOperation to avoid ambiguities in dispatch.
kellertuer Nov 21, 2024
3147e71
Resolve a few ambiguities. Still fighting allocation with Power manif…
kellertuer Nov 21, 2024
9e6bf9d
fix rand allocation.
kellertuer Nov 21, 2024
ebfdd4c
Fix allocations.
kellertuer Nov 21, 2024
b3591a5
Continue power lie group interface.
kellertuer Nov 24, 2024
238e2ff
Documentation update to specify changes.
kellertuer Nov 25, 2024
597281f
runs format.
kellertuer Nov 25, 2024
1b8e5ee
Fix a typo.
kellertuer Nov 25, 2024
0680095
starts product manifolds with an RecursiveArrayToolsExtension
kellertuer Nov 25, 2024
459d526
Remove extension again, maybe not needed, implement first product fun…
kellertuer Nov 25, 2024
7eec68f
Continue with a few more functions.
kellertuer Nov 27, 2024
6c19040
remove duplicate code.
kellertuer Nov 27, 2024
9e0fde3
Activate more power tests
kellertuer Nov 27, 2024
bf0b181
Implement the last three functions, dispatch for Lie algebra not yet …
kellertuer Nov 28, 2024
e6b17de
debug hat/vee.
kellertuer Nov 28, 2024
6fd33ee
fix lie_bracket on new groups
mateuszbaran Nov 28, 2024
11ba125
small improvements
mateuszbaran Nov 28, 2024
e000605
add ain identity test and increase power code cov.
kellertuer Nov 28, 2024
9801cd5
A bit more test coverage.
kellertuer Nov 28, 2024
d16f091
Remove a spurious function definition.
kellertuer Nov 28, 2024
e52a711
Most of codecov.
kellertuer Nov 29, 2024
d3ababa
minor improvements
mateuszbaran Nov 30, 2024
c9d8607
improve coverage
mateuszbaran Nov 30, 2024
99193d8
make a better action interface test
mateuszbaran Nov 30, 2024
1455080
fix a doc string.
kellertuer Nov 30, 2024
c02a480
improve some docs
mateuszbaran Nov 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,28 @@ Everything denoted by “formerly” refers to the previous name in [`Manifolds.
* `LieGroup` (formerly `GroupManifold`) as well as the concrete groups
* `TranslationGroup`
* `GeneralLinearGroup` (formerly `GeneralLinear`)
* `LeftSemidirectProductLieGroup` (formerly `SemidirectProductGroup`)
* `⋉` (alias for `LeftSemidirectProductGroupOperation` when a `default_left_action(G,H)` is defined for the two groups)
* `PowerLieGroup` (formerly `PowerGroup`)
* `PowerGroupOperation` to internally avoid ambiguities. Since the constructor always expects a Lie group, this is only necessary internally
* `ProductLieGroup` (formerly `ProductGroup`)
* `RightSemidirectProductLieGroup`
* `⋊` (alias for `RightSemidirectProductGroupOperation` when a `default_right_action(G,H)` is defined for the two groups)
* `AbstractGroupOperation` as well as its concrete subtypes
* `AdditionGroupOperation` (formerly `AdditionOperation`)
* `MultiplicationGroupOperation` (formerly `MultiplicationOperation`)
* `PowerGroupOperation` (formerly the Lie group was stored inside a power manifold)
* `ProductGroupOperation` (formerly the Lie groups were stored inside a product manifold)
* `LeftSemidirectProductGroupOperation` (this was formerly only implicitly stored in the `SemidirectProductGroup`)
* `RightSemidirectProductGroupOperation`
* `AbstractGroupActionType` with its 2 specific (new) abstract subtypes
* `AbstractLeftGroupActionType`
* `AbstractRightGroupActionType`
* For the group operation actions there are now
* `LeftGroupOperation` (formerly `LeftForwardAction`)
* `RightGroupOperation` (formerly `RightBackwardAction`)
* `InverseLeftGroupOperation` (formerly `RightForwardAction`)
* `InverseRightGroupOperation` (formerly `LeftBackwardAction`)
* `LeftGroupOperationAction` (formerly `LeftForwardAction`)
* `RightGroupOperationAction` (formerly `RightBackwardAction`)
* `InverseLeftGroupOperationAction` (formerly `RightForwardAction`)
* `InverseRightGroupOperationAction` (formerly `LeftBackwardAction`)
* `LieAlgebraOrthogonalBasis` (replaces `VeeOrthogonalBasis`, which is still available in `ManifoldsBase.jl`)
* `Identity`
* `apply`and `apply!`
Expand Down
4 changes: 3 additions & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@ Aqua = "0.8"
LinearAlgebra = "1.6"
Manifolds = "0.10.5"
ManifoldsBase = "0.15.20"
RecursiveArrayTools = "2, 3"
Random = "1.6"
Test = "1.6"
julia = "1.6"

[extras]
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
Manifolds = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e"
RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test", "Aqua", "Manifolds"]
test = ["Test", "Aqua", "Manifolds", "RecursiveArrayTools"]
3 changes: 3 additions & 0 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,9 @@ makedocs(;
"Lie groups" => [
"List of Lie groups" => "groups/index.md",
"General Linear" => "groups/general_linear.md",
"Power group" => "groups/power_group.md",
"Product group" => "groups/product_group.md",
"Semidirect product group" => "groups/semidirect_product_group.md",
"Translation group" => "groups/translation.md",
],
"Interfaces" => [
Expand Down
7 changes: 7 additions & 0 deletions docs/src/groups/power_group.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# The power Lie group

```@autodocs
Modules = [LieGroups]
Pages = ["groups/power_group.jl"]
Order = [:type, :function]
```
7 changes: 7 additions & 0 deletions docs/src/groups/product_group.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# The product Lie group

```@autodocs
Modules = [LieGroups]
Pages = ["groups/product_group.jl"]
Order = [:type, :function]
```
7 changes: 7 additions & 0 deletions docs/src/groups/semidirect_product_group.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# The semidirect product Lie group

```@autodocs
Modules = [LieGroups]
Pages = ["groups/semidirect_product_group.jl"]
Order = [:type, :function]
```
24 changes: 16 additions & 8 deletions docs/src/tutorials/transition.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,15 @@ The list is alphabetical, but first lists types, then functions
| `Manifolds.jl` | `LieGroups.jl` | Comment |
|:---------- |:---------- |:-------------- |
| `AdditionOperation` | [`AdditionGroupOperation`](@ref) | |
| `LeftForwardAction` | [`LeftGroupOperation`](@ref)
| `RightBackwardAction` | [`RightGroupOperation`](@ref) | |
| `LeftBackwardAction` | [`InverseRightGroupOperation`](@ref) | note that this is now also aa [`AbstractLeftGroupActionType`](@ref) |
| `LeftForwardAction` | [`LeftGroupOperationAction`](@ref)
| `RightBackwardAction` | [`RightGroupOperationAction`](@ref) | |
| `LeftBackwardAction` | [`InverseRightGroupOperationAction`](@ref) | note that this is now also aa [`AbstractLeftGroupActionType`](@ref) |
| | [`LieAlgebra`](@ref)`(G)` | new alias to emphasize its manifold- and vector structure as well as for a few dispatch methods. |
| `GroupManifold(M, op)` | [`LieGroup`](@ref)`(M, op)` | |
| `RightForwardAction` | [`InverseLeftGroupOperation`](@ref) | note that this is an [`AbstractRightGroupActionType`](@ref) |
| `PowerGroup(M)` | [`PowerLieGroup`](@ref)`(G,n)` | The main change is, that the constructor now requires a Lie group to build the power Lie group; This also allows for `G^n`. The other two former constructors for nested and nested-replacing are no longer necessary. `PowerLieGroup` behaves exactly the same as [`PowerManifold`](@extref `ManifoldsBase.PowerManifold`). |
| `ProductGroup(M)` | [`ProductLieGroup`](@ref)`(G, H)` | The main change is, that the constructor now requires two Lie groups to build their product. This also allows for the short hand `G×H` to generate this product. |
| `SemidirectProductGroup(G, H, a)` | [`LeftSemidirectProductLieGroup`](@ref)`(G, H, a)` | While this staid the same, there is now also the [`default_left_action`](@ref)`(G,H)`. When this agrees with `a` you can use the short hand `G⋉H` to generate this semidirect product. Analogously there now also exists the [`RightSemidirectProductLieGroup`](@ref)`(G,H)` with[`default_left_action`](@ref)`(G,H)` that allows for the short cut `G⋊H` |
| `RightForwardAction` | [`InverseLeftGroupOperationAction`](@ref) | note that this is an [`AbstractRightGroupActionType`](@ref) |
| `adjoint` | [`adjoint`](@ref) | now implemented with a default, when you provide [`diff_conjugate!`](@ref).
| `apply_diff` | [`diff_apply`](@ref) | modifiers (diff) come first, consistent with [`ManifoldsDiff.jl`](https://juliamanifolds.github.io/ManifoldDiff.jl/stable/) |
| `apply_diff_group` | [`diff_group_apply`](@ref) | modifiers (diff/group) come first, consistent with [`ManifoldsDiff.jl`](https://juliamanifolds.github.io/ManifoldDiff.jl/stable/) |
Expand All @@ -41,12 +44,17 @@ The list is alphabetical, but first lists types, then functions
| `log(G, g, h)` | `log(`[`base_manifold`](@ref base_manifold(G::LieGroup))`(G), g, h)` | you can now access the previous defaults on the internal manifold whenever they do not agree with the invariant one |
| `log_inv(G, g, h)` | [`log`](@ref log(G::LieGroup, g, h))`(G, g, h)` | the logarithmic map invariant to the group operation is the default on Lie groups here |
| `log_lie(G, g)` | [`log`](@ref log(G::LieGroup, e::Identity, g))`(G, `[`Identity`](@ref)`(G), g)` | the (matrix) logarithm is now the one at the identity, since there it agrees with the invariant one |
| `switch_direction(A)` | [`inv`](@ref inv(::AbstractGroupAction))`(A)` | switches from an action to its inverse action (formerly the direction forward/backward, sometimes even left/right, do not confuse with the side left/right). |
| `switch_side(A)` | [`switch`](@ref switch(::AbstractGroupAction))`(A)` | switches from a left action to its corresponding right action. |
| `switch_direction(A)` | [`inv`](@ref inv(::GroupAction))`(A)` | switches from an action to its inverse action (formerly the direction forward/backward, sometimes even left/right, do not confuse with the side left/right). |
| `switch_side(A)` | [`switch`](@ref switch(::GroupAction))`(A)` | switches from a left action to its corresponding right action. |
| `translate(G, g, h)` | [`compose`](@ref)`(G, g, h)` | unified to `compose` |
| `translate_diff(G, g, X, c)` | [`diff_left_compose`](@ref)`(G, g, h, X)`, [`diff_right_compose`](@ref)`(G, g, h, X)` | for compose ``g∘h`` the functions now specify whether the derivative is taken w.r.t. to the left (`g`) or right (`h`) argument |
|`VeeOrthogonalBasis` | [`LieAlgebraOrthogonalBasis`](@ref) | |

# Notable changes
# Further notable changes

* The [`GeneralLinearGroup`](@ref) (formerly `GeneralLinear`) switched to using its Lie algebra to represent tangent vectors.
1. The [`GeneralLinearGroup`](@ref) (formerly `GeneralLinear`) switched to using its Lie algebra to represent tangent vectors.
2. Formerly, both a power of LieGroups as well as a LieGroup on the power manifold was possible. This is now unified to the latter,
the operation for power manifolds can hence stay the same as for the single manifold.
3. Formerly, product manifolds were stored as a [`ProductManifold`](@extref) of Lie groups and an indicator for the group operation, that the direct product should be used. This is switched to (as for the last point) internally only store a [`ProductManifold`](@extref) as well as a (new) [`ProductGroupOperation`](@ref) that specifies one group operation for every factor.
4. both the last two points achieve one unified modelling aspect of Lie groups: They are now always a Riemannian manifold `M` together with a group operation `op`,
but a Lie group does not store another Lie group (or product of them) internally.
6 changes: 3 additions & 3 deletions docs/styles/config/vocabularies/LieGroups/accept.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
julia
Julia
[jJ]ulia
LieGroups.jl
Lie algebra
Lie algebras
Lie group
Lie groups
Riemannian
Riemannian
semidirect
22 changes: 16 additions & 6 deletions src/LieGroups.jl
Original file line number Diff line number Diff line change
Expand Up @@ -32,29 +32,37 @@ include("group_operations/multiplication_operation.jl")
include("group_actions/group_action_interface.jl")
include("group_actions/group_operation_action.jl")

# Meta Lie groups
include("groups/power_group.jl")
include("groups/product_group.jl")
include("groups/semidirect_product_group.jl")
# Lie groups
include("groups/translation_group.jl")
include("groups/general_linear_group.jl")

export LieGroup, LieAlgebra
export PowerLieGroup, ProductLieGroup
export LeftSemidirectProductLieGroup, RightSemidirectProductLieGroup
export LieAlgebraOrthogonalBasis
export ×, ^, ⋉, ⋊
#
#
# Group Operations
export AbstractGroupOperation, Identity
export AdditionGroupOperation
export AbstractMultiplicationGroupOperation
export MatrixMultiplicationGroupOperation
export ProductGroupOperation
export LeftSemidirectProductGroupOperation, RightSemidirectProductGroupOperation

#
#
# Group Actions
export AbstractGroupActionType, AbstractGroupAction
export AbstractGroupActionType
export AbstractLeftGroupActionType, AbstractRightGroupActionType
export LeftGroupOperation, RightGroupOperation
export InverseLeftGroupOperation, InverseRightGroupOperation
export GroupOperationAction

export LeftGroupOperationAction, RightGroupOperationAction
export InverseLeftGroupOperationAction, InverseRightGroupOperationAction
export GroupAction, GroupOperationAction
#
#
# Specific groups
Expand All @@ -63,7 +71,9 @@ export TranslationGroup, GeneralLinearGroup
export adjoint, adjoint!, apply, apply!
export base_lie_group, base_manifold
export compose, compose!
export det,
export default_left_action,
default_right_action,
det,
diff_apply,
diff_apply!,
diff_group_apply,
Expand Down
Loading
Loading