You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Implement `translate_diff` and `inv_diff` for all groups (#679)
* implement a general `inv_diff`
* fixing the SpecialEuclidean case (mostly)
what remains to be fixed is if it is wrapped
in a `MetricManifold`, or a `ConnectionManifold`, for instance.
In that case, the wrong `translate_diff` methods are called.
* changelog
* formatting
* translate_diff for product/power groups
* fix CircleGroup
* adjoint_action fallback for all groups
* translate_diff is always defined from adjoint_action
A vanilla group has no adjoint_action defined
* semidirect products: remove specific translate_diff implementations
`translate_diff` is now always computed from adjoint_action instead
* special_euclidean: implement adjoint action
adjoint action was previously not available
since not all translate_diff methods were implemented
* fix trivial adjoint action for commutative groups
implement for LeftAction direction, the other direction
is automatic
* left invariant storage for special_euclidean
this ensures that all group methods are now defined
* Generic implementation of exp and log for all groups
This is the `exp` and `log` associated to any of the
Cartan–Schouten connections. It uses the left-invariant
storage of tangent vectors and the specific exp_lie/log_lie
implementations.
* special_euclidean: Remove specific log/exp implementations
These implementations are the one from *group product*,
so they are not invariant with respect to the semidirect
product.
One could put them back in the product_group layer instead.
The proper way to invoke them is then `exp(base_manifold(G), ...)`
instead of `exp(G, ...)`.
Until this is fixed, `exp` now uses more allocations, even
when calling it with `base_manifold`.
* special_euclidean: Remove some failing tests
The failing tests come from using matrices instead
of `ArrayPartition`. Using the `ArrayPartition`
type (the one returned by `identity_element`)
works normally.
* special_linear: tighter test points
The invariant log fails when points are too far apart.
* News update
* Formatting
* Update NEWS
* adjoint_action: more tests
more adjoint action methods for CircleGroup
* Format
* Test: more translate_diff tests
* Test: inv_diff!
* Tests: adjoint_action
- at Identity
- remove some unused adjoint_action! implementations
* Fromat
* Fixup to 402c49b
* Redundant method
* Doc: adjoint_action direction
* Rewrite: avoid inv
The implementation is still not optimal
* Doc: move code comments to docstrings
* Doc: remove allocate TODOs
* Doc: storage of tangent vectors on Lie groups
* Doc: tangent vector storage -> representation
* moving to more weak dependencies
* fixes
* more fixes
* even more fixes
* fixes again
* turn HybridArrays into an extension
* fix path
* fix SE exp, log
* forgot to add a test dependency
* fix for Julia 1.6
* fixing a really weird error
* these shouldn't have been re-added
* initial support for tangent vector representations in Lie groups
* lots of fixes related to vector representation
* fix product group
* fixing special euclidean
* increase coverage
* polishing and removing remaining deprecated things
* Update NEWS.md
Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
* fix a few tests
* HybridTangentRepresentation for semidirect product groups, change default for SE(n)
* fix allocation issue?
* maybe we have fewer ambiguities now
* restrict the default left-invariant log and exp on groups to semidirect products for now
* improve coverage
* rename gvr to vectors
* improve coverage
* start the group tutorial, remove two `exp` and `log` methods that shouldn't be there
* stuff
* updates to the group tutorial; exp_inv and log_inv
* Update NEWS.md
Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
* expand tutorial
* fix stuff, improve coverage
* fixing tutorial issues and a reference
* fixing stuff in groups.qmd
* fix table in groups.qmd
* remove non-real SymplecticStiefel for now
* also remove non-real symplectic Grassmann
* Fix qusrto setup and slightly fix alignment in table
* yellow circle
* Commonmark code stuff no longer necessary.
* maybe also enable footnotes
* Remove more deprecated things
* improve coverage
* tests for inv_diff on SE, more robust random point generation on multinomial SPD
* exclude line from coverage
* improve news and groups tutorial
* bump version
* would that fix tutorial building?
* optimized defaults for inverse_translate_diff! of groups with left-invariant storage
* let's solve these ambiguities later
---------
Co-authored-by: Olivier Verdier <olivier.verdier@gmail.com>
Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
Copy file name to clipboardExpand all lines: NEWS.md
+35Lines changed: 35 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,41 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [0.10.0] – 2024-08-24
9
+
10
+
### Changed
11
+
12
+
*`Distributions.jl`, `RecursiveArrayTools.jl` and `HybridArrays.jl` were moved to weak dependencies to reduce load time and improve extensibility.
13
+
*`translate_diff`, `inv_diff` and thus `apply_diff_group`, are available for all the groups with invariant tangent vector storage.
14
+
*`SpecialEuclidean` group now has a different default tangent vector representation, the left-invariant one; to get the old representation pass `vectors=HybridTangentRepresentation()` to the constructor of `SpecialEuclidean`.
15
+
*`adjoint_action` takes a direction argument; by default it is `LeftAction`.
16
+
*`adjoint_action!` is the necessary method to implement in groups with left-invariant tangent vector representation.
17
+
* Fixed a few typos in the doc string of the SPD fixed determinant description.
18
+
* Random point on the `MultinomialSymmetricPositiveDefinite` manifold was improved to make it more robust.
19
+
20
+
### Added
21
+
22
+
* Introduced `exp_inv` and `log_inv` based on `exp_lie` and `log_lie`. They are invariant to the group operation.
23
+
* A tutorial about usage of group-related functionality.
24
+
25
+
### Removed
26
+
27
+
* Deprecated bindings:
28
+
*`ExtrinsicEstimation()` (should be replaced with `ExtrinsicEstimation(EfficientEstimator())`),
29
+
*`Symplectic` (renamed to `SymplecticMatrices`),
30
+
*`SymplecticMatrix` (renamed to `SymplecticElement`).
31
+
*`AbstractEstimationMethod` (renamed to `AbstractApproximationMethod`).
32
+
*`VectorBundleVectorTransport` (renamed to `FiberBundleProductVectorTransport`).
33
+
*`rand` on `SymplecticMatrices` and `SymplecticStiefel` no longer accepts `hamiltonian_norm` as an alias for `σ`.
34
+
*`mean!` and `median!` no longer accept `extrinsic_method` (should be replaced with `e = ExtrinsicEstimation(extrinsic_method)`).
35
+
* As a result of making `Distributions.jl` and `RecursiveArrayTools.jl` weak dependencies the following symbols are no longer exported from `Manifolds.jl`. Essential functionality is still available but distribution-related features may change in the future without a breaking release.
36
+
*`ArrayPartition` (`RecursiveArrayTools.jl` needs to be explicitly imported),
37
+
*`ProjectedPointDistribution` (not exported),
38
+
*`normal_tvector_distribution` (not exported),
39
+
*`projected_distribution` (not exported),
40
+
*`uniform_distribution` (not exported).
41
+
* Ability to create non-real `SymplecticStiefel` and `SymplecticGrassmann` manifolds; essential functionality was missing so it was removed until a more developed version is developed.
In most groups, the representation of a tangent vector
49
+
``X`` at the point ``p ∈ \mathcal{G}`` is stored
50
+
as a vector ``Y ∈ \mathfrak{g}``.
51
+
This helps to compute the derivatives of the composition and inverse.
52
+
53
+
To explain this, let us assume that *the group consists of matrices* (this is always possible).
54
+
The representation of a tangent vector
55
+
``X`` at the point ``p ∈ \mathcal{G}`` is stored
56
+
as the vector ``Y ∈ \mathfrak{g}`` given by
57
+
58
+
```math
59
+
X = pY
60
+
```
61
+
62
+
#### Derivative of the Group Composition on the Left
63
+
64
+
The derivative of the composition ``pq`` with respect to ``p`` in
65
+
the direction ``X``, tangent at ``p`` is given by
66
+
67
+
```math
68
+
Xq = pYq = pq(q^{-1}Yq)
69
+
```
70
+
71
+
We see that with this representation convention, this derivative is just the
72
+
adjoint action of ``q^{-1}`` on the vector ``Y``.
73
+
74
+
#### Derivative of the Group Composition on the Right
75
+
76
+
For the derivative with respect to ``q`` of the composition ``pq`` at a tangent vector ``X`` at ``q``
77
+
stored as ``Y`` with ``X = qY``, we have similarly
78
+
79
+
```math
80
+
pX = pqY
81
+
```
82
+
83
+
With the representation convention above, this derivative is just the identity.
84
+
85
+
#### Derivative of the Group Inverse
86
+
87
+
Finally, we look at the derivative of the inverse ``p^{-1}`` at a point ``p`` in a tangent direction ``X``
88
+
at ``p`` with ``X = pY``.
89
+
The result is a tangent vector at ``p^{-1}`` given by
90
+
91
+
```math
92
+
-p^{-1}Xp^{-1} = - Yp^{-1} = -p^{-1}(p Y p^{-1})
93
+
```
94
+
95
+
With the representation convention above, this derivative is thus ``-pYp^{-1}``, that is, the opposite of the adjoint action of ``p`` on the vector ``Y``.
96
+
97
+
#### Implication for Creating New Groups
98
+
99
+
When you create a new group,
100
+
defining the adjoint action alone ([`adjoint_action`](@ref))
101
+
automatically defines all the relevant derivatives above.
102
+
46
103
### Generic Operations
47
104
48
105
For groups based on an addition operation or a group operation, several default implementations are provided.
Copy file name to clipboardExpand all lines: docs/src/manifolds/power.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -90,7 +90,7 @@ get_component(M, p, 4)
90
90
The final representation is the [`NestedReplacingPowerRepresentation`](@extref`ManifoldsBase.NestedReplacingPowerRepresentation`). It is similar to the [`NestedPowerRepresentation`](@extref`ManifoldsBase.NestedPowerRepresentation`) but it does not perform in-place operations on the points on the underlying manifold. The example below uses this representation to store points on a power manifold of the [`SpecialEuclidean`](@ref) group in-line in an `Vector` for improved efficiency. When having a mixture of both, i.e. an array structure that is nested (like [´NestedPowerRepresentation](@ref)) in the sense that the elements of the main vector are immutable, then changing the elements can not be done in an in-place way and hence [`NestedReplacingPowerRepresentation`](@extref`ManifoldsBase.NestedReplacingPowerRepresentation`) has to be used.
91
91
92
92
```@example 4
93
-
using Manifolds, StaticArrays
93
+
using Manifolds, StaticArrays, RecursiveArrayTools
0 commit comments