Skip to content

Commit e11880e

Browse files
kellertuerLeoSchreiterplc99mateuszbaran
authored
Port remaining groups (Part 3/3): The Circle group (#31)
* initial commit of the n progress circle group in 3 variants * Test suite CircleGroup --------- Co-authored-by: LeoSchreiter <[email protected]> Co-authored-by: plc99 <[email protected]> Co-authored-by: Mateusz Baran <[email protected]>
1 parent b93f902 commit e11880e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1437
-121
lines changed

.github/workflows/changelog.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
name: Check Changelog
1+
name: Check News entry
22
on:
33
pull_request:
44

55
jobs:
66
Check-Changelog:
7-
name: Check Changelog Action
7+
name: Check that the News.md was updated
88
runs-on: ubuntu-latest
99
steps:
1010
- uses: tarides/changelog-check-action@v3

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Everything denoted by “formerly” refers to the previous name in [`Manifolds.
3232
* `RightSemidirectProductLieGroup`
3333
* `SpecialLinearGroup` (formerly `SpecialLinear`)
3434
* `SymplecticGroup`
35+
* `CircleGroup` now with even three representations: Real line (mod 2π), Complex and plane circle
3536
* `` (alias for `RightSemidirectProductGroupOperation` when a `default_right_action(G,H)` is defined for the two groups)
3637
* a `ValidationLieGroup` verifying input and output of all interface functions, similar to the [`ValidationManifold`](https://juliamanifolds.github.io/ManifoldsBase.jl/stable/manifolds/#A-manifold-for-validation) which can also be used internally.
3738
* `AbstractGroupOperation` as well as its concrete subtypes

Project.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "LieGroups"
22
uuid = "6774de46-80ba-43f8-ba42-e41071ccfc5f"
33
authors = ["Seth Axen <[email protected]>", "Mateusz Baran <[email protected]>", "Ronny Bergmann <[email protected]>", "Yueh-Hua Tu", "Olivier Verdier <[email protected]>"]
4-
version = "0.0.3"
4+
version = "0.1.0"
55

66
[deps]
77
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
@@ -20,8 +20,8 @@ LieGroupsRecursiveArrayToolsExt = "RecursiveArrayTools"
2020
[compat]
2121
Aqua = "0.8"
2222
LinearAlgebra = "1.10"
23-
Manifolds = "0.10.15"
24-
ManifoldsBase = "1"
23+
Manifolds = "0.10.16"
24+
ManifoldsBase = "1.0.3"
2525
Quaternions = "0.7.6"
2626
Random = "1.10"
2727
RecursiveArrayTools = "2, 3"

Readme.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,11 @@ In Julia you can install this package by typing
2121
using Pkg; Pkg.add("LieGroups")
2222
```
2323

24-
in the Julia REPL.
24+
in the Julia REPL. For a first start, see the [get started tutorial](https://juliamanifolds.github.io/LieGroups.jl/stable/tutorials/getstarted/).
2525

2626
> [!NOTE]
2727
> Since this is a rework of the features from [`Manifolds.jl`](https://juliamanifolds.github.io/Manifolds.jl/stable/), both `LieGroups.jl` and `Manifolds.jl` 0.10 export a few types of same name, for example `Identity`.
28-
While `LieGroups.jl` depends on `Manifolds.jl`, it is not recommended to load both into the same namespace, that is, doing `using Manifolds.jl, LieGroups.jl`, since then these conflicts might lead to unforeseen errors, where you would need to specify the namespace to resolve this ambiguity.
28+
While `LieGroups.jl` depends on `Manifolds.jl`, it is not recommended to load both into the same name space, that is, doing `using Manifolds.jl, LieGroups.jl`, since then these conflicts might lead to unforeseen errors, where you would need to specify the name space to resolve this ambiguity.
2929
> See [transition from Manifolds.jl](https://juliamanifolds.github.io/LieGroups.jl/stable/tutorials/transition-from-manifoldsjl.html) for a comprehensive list.
3030
> This especially also includes a few different choices in default behaviour that
3131
is different from the [`Manifolds.jl`](https://juliamanifolds.github.io/Manifolds.jl/stable/) one. For purely manifold-based operations, any Lie group still is “build upon” a Riemannian manifold.
32-
33-
See [#5](https://github.com/JuliaManifolds/LieGroups.jl/issues/5) for an overview of features that we plan to implement.
34-
Feel free to add to this list with opening further issues.

docs/make.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ makedocs(;
136136
format=Documenter.HTML(;
137137
prettyurls=(get(ENV, "CI", nothing) == "true") || ("--prettyurls" ARGS),
138138
assets=["assets/favicon.ico", "assets/citations.css", "assets/link-icons.css"],
139+
size_threshold_warn=200 * 2^10, # raise slightly from 100 to 200 KiB
140+
size_threshold=300 * 2^10, # raise slightly 200 to to 300 KiB
139141
),
140142
modules=[LieGroups],
141143
authors="Seth Axen, Mateusz Baran, Ronny Bergmann, Olivier Verdier, and contributors",
@@ -146,6 +148,7 @@ makedocs(;
146148
(tutorials_in_menu ? [tutorials_menu] : [])...,
147149
"Lie groups" => [
148150
"List of Lie groups" => "groups/index.md",
151+
"Circle Group" => "groups/circle_group.md",
149152
"General linear group" => "groups/general_linear.md",
150153
"Heisenberg group" => "groups/heisenberg_group.md",
151154
"Orthogonal group" => "groups/orthogonal_group.md",

docs/src/about.md

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,28 @@
11
# About LieGroups.jl
22

3-
`LieGroups.jl` is a “spin-off” from [`Manifolds.jl](https://juliamanifolds.github.io/Manifolds.jl/stable/), where `GroupManifolds` where implemented around 2021.
4-
Around the same time, [Yueh-Hua Tu](https://github.com/yuehhua) started a package `LieGroups.jl`, which was continued than here with a full rewrite to use the manifolds from `Manifolds.jl`.
3+
The package `LieGroups.jl` in its current form started in 2024 as a “spin-off” from [`Manifolds.jl`](@extref Manifolds :std:doc:`index`), where a type `GroupManifolds` was a predecessor of the
4+
main [`LieGroup`](@ref) type of this package. That approach started around 2021 by [Seth Axen](https://sethaxen.com).
5+
At about the same, [Yueh-Hua Tu](https://github.com/yuehhua) started a package `LieGroups.jl`,
6+
which was continued then here with a full rewrite in order to base all Lie groups on a
7+
manifold from [`Manifolds.jl`](@extref Manifolds :std:doc:`index`).
8+
9+
The current main developers are [Ronny Bergmann](https://ronnybergmann.net) and [Mateusz Baran](https://github.com/mateuszbaran).
10+
11+
## Contributors
12+
13+
Thanks to the following contributors to `LieGroups.jl`:
14+
15+
* [Paula Conrad](https://github.com/plc99) and [Leonard Schreiter](https://github.com/LeoSchreiter) implemented the [Circle group](@ref CircleGroup) as part of their student assistant project.
16+
* [Olivier Verdier](https://www.olivierverdier.com) helped in the design and some mathematical explanations
17+
18+
as well as [contributors](https://github.com/JuliaManifolds/LieGroups.jl/graphs/contributors) providing small extensions, finding small bugs and mistakes and fixing them by opening [PR](https://github.com/JuliaManifolds/LieGroups.jl/pulls)s. Thanks to all of you.
19+
20+
If you want to contribute a manifold or algorithm or have any questions, visit
21+
the [GitHub repository](https://github.com/JuliaManifolds/LieGroups.jl/)
22+
to clone/fork the repository or open an issue.
23+
24+
## Work using LieGroups.jl
25+
26+
If `LieGroups.jl` is useful within another package or in your project, we would like to list that here.
27+
Please [open an issue](https://github.com/JuliaManifolds/LieGroups.jl/issues/new).
28+
It would be great to collect anything and anyone using `LieGroups.jl` in this list.

docs/src/groups/circle_group.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# The circle group
2+
3+
```@autodocs
4+
Modules = [LieGroups]
5+
Pages = ["groups/circle_group.jl"]
6+
Order = [:type, :function]
7+
```
8+
9+
# [Representation on the real line](@id circle-group-real)
10+
11+
```@autodocs
12+
Modules = [LieGroups]
13+
Pages = ["groups/circle_group_real.jl"]
14+
Order = [:type, :function]
15+
```
16+
17+
# [Representation on the complex plane](@id circle-group-complex)
18+
19+
```@autodocs
20+
Modules = [LieGroups]
21+
Pages = ["groups/circle_group_complex.jl"]
22+
Order = [:type, :function]
23+
```
24+
25+
# [Representation on the 2D-plane](@id circle-group-plane)
26+
27+
```@autodocs
28+
Modules = [LieGroups]
29+
Pages = ["groups/circle_group_sphere.jl"]
30+
Order = [:type, :function]
31+
```

docs/src/groups/index.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
# An overview of Lie groups
22

3-
# Alphabetical list of Lie groups
4-
53
| Group | Manifold | ```` | Comment |
64
|:------|:---------|:---------:|:------|
5+
| [`CircleGroup`](@ref) | real or complex [`Circle`](@extref `Manifolds.Circle`), [`Sphere`](@extref `Manifolds.Sphere`) | [`*`](@ref AbelianMultiplicationGroupOperation) | |
76
| [`GeneralLinearGroup`](@ref) | [`InvertibleMatrices`](@extref `Manifolds.InvertibleMatrices`) | [`*`](@ref MatrixMultiplicationGroupOperation) | |
87
| [`HeisenbergGroup`](@ref) | [`HeisenbergMatrices`](@extref `Manifolds.HeisenbergMatrices`) | [`*`](@ref MatrixMultiplicationGroupOperation) | |
98
| [`OrthogonalGroup`](@ref) | [`OrthogonalMatrices`](@extref `Manifolds.OrthogonalMatrices`) | [`*`](@ref MatrixMultiplicationGroupOperation) | This can be interpreted as all rotations and reflections. |
109
| [`PowerLieGroup`](@ref) | [`PowerManifold`](@extref `ManifoldsBase.PowerManifold`) | [``](@ref PowerGroupOperation) | [`^`](@ref PowerLieGroup) is a constructor |
1110
| [`ProductLieGroup`](@ref) | [`ProductManifold`](@extref `ManifoldsBase.ProductManifold`) | [``](@ref ProductGroupOperation) | [`×`](@ref LinearAlgebra.cross(::AbstractGroupOperation...)) of two Lie groups is a constructor |
1211
| [`LeftSemidirectProductLieGroup`](@ref) | [`ProductManifold`](@extref `ManifoldsBase.ProductManifold`) | [``](@ref LeftSemidirectProductGroupOperation) | [``](@ref ⋉(L1::LieGroup, L2::LieGroup)) of 2 Lie groups is a constructor, similarly [``](@ref ⋊(L1::LieGroup, L2::LieGroup)) for the right variant |
1312
| [`SpecialEuclideanGroup`](@ref) | [`Rotations`](@extref `Manifolds.Rotations`)[``](@ref LeftSemidirectProductGroupOperation)[`Euclidean`](@extref `Manifolds.Rotations`) | [``](@ref LeftSemidirectProductGroupOperation) | Analogously you can also use a [``](@ref RightSemidirectProductGroupOperation) if you prefer tuples `(t,R)` having the rotation matrix in the second component |
14-
| [`SpecialLinearGroup`](@ref) | [`GeneralUnitaryMatrices`](@extref `Manifolds.GeneralUnitaryMatrices`) with determinant one | [`*`](@ref MatrixMultiplicationGroupOperation) | |
13+
| [`SpecialLinearGroup`](@ref) | [`DeterminantOneMatrices`](@extref `Manifolds.DeterminantOneMatrices`) | [`*`](@ref MatrixMultiplicationGroupOperation) | |
1514
| [`SpecialOrthogonalGroup`](@ref) | [`Rotations`](@extref `Manifolds.Rotations`) | [`*`](@ref MatrixMultiplicationGroupOperation) | |
1615
| [`SpecialUnitaryGroup`](@ref) | [`GeneralUnitaryMatrices`](@extref `Manifolds.GeneralUnitaryMatrices`) | [`*`](@ref MatrixMultiplicationGroupOperation) | |
1716
| [`SymplecticGroup`](@ref) | [`SymplecticMatrices`](@extref `Manifolds.SymplecticMatrices`) | [`*`](@ref MatrixMultiplicationGroupOperation) | |

docs/src/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ CurrentModule = LieGroups
1010
LieGroups.LieGroups
1111
```
1212

13-
The implemented [Lie groups](https://en.wikipedia.org/wiki/Lie_group) are implemented using the interface for manifolds in [`ManifoldsBase.jl`](@extref ManifoldsBase :doc:`index`) together with additional interfaces [for Lie groups](interface/group.md) and [Lie algebras](interface/algebra.md) as well as internally using the manifolds implemented in [`Manifolds.jl`](@extref Manifolds :doc:`index`).
13+
The implemented [Lie groups](https://en.wikipedia.org/wiki/Lie_group) use the interface for manifolds in [`ManifoldsBase.jl`](@extref ManifoldsBase :doc:`index`) together with an [interface for Lie groups](interface/group.md) and [Lie algebras](interface/algebra.md) as well as internally using the manifolds implemented in [`Manifolds.jl`](@extref Manifolds :doc:`index`).
1414

1515
For more general information about the history of and contributions to the package see the [About](about.md) page.
1616

docs/src/interface/operations.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ The following sections collect these.
1212

1313

1414
* an [`AdditionGroupOperation`](@ref)
15+
* an [`AbelianMultiplicationGroupOperation`](@ref) and
16+
* a [`MatrixMultiplicationGroupOperation`](@ref)
17+
1518

1619
## [Additive group operation](@id addition-operation-sec)
1720

@@ -21,6 +24,7 @@ Pages = ["addition_operation.jl"]
2124
Order = [:type, :function]
2225
```
2326

27+
2428
## [Multiplication group operation](@id multiplication-operation-sec)
2529

2630
```@autodocs
@@ -29,6 +33,17 @@ Pages = ["multiplication_operation.jl"]
2933
Order = [:type, :function]
3034
```
3135

36+
## [Abelian multiplication group operation](@id multiplication-operationabelian-sec)
37+
Since the commutativity of some Lie groups leads to a significant simplification of computations on those groups, the [`abelian multiplication group operation`](@ref multiplication-operationabelian-sec) optimizes these cases.
38+
Additionally, it provides an interface for the abelian Lie groups. Some of these can are represented by `isbits`-types,
39+
which don't have mutating variants of the functions.
40+
41+
```@autodocs
42+
Modules = [LieGroups]
43+
Pages = ["multiplication_operation_abelian.jl"]
44+
Order = [:type, :function]
45+
```
46+
3247
## Literature
3348

3449
```@bibliography

0 commit comments

Comments
 (0)