Changelog
All notable Changes to the Julia package LieGroups.jl will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.7 (2025-10-28)
Added
NestedPowerRepresentationandNestedReplacingPowerRepresentationare now re-exported fromManifoldsBase.jl.getindexaccess to parts of a point of tangent vector represented by a matrix with:Rotationand:Translationas indices. For example, whengis a point on any variant of the special euclidean group,g[G, :Translation]will return the translation part ofgregardless of whetherGis the left or right semidirect product even whengis a matrix.
Fixed
- Zenodo metadata.
0.1.6 (2025-10-10)
Fixed
diff_group_applyhas corrected documentation and works withgequal toIdentity.
0.1.5 (2025-10-09)
Changed
LieGroups.jlnow requiresManifoldsBase.jlv2.0 andManifolds.jlv0.11.
0.1.4 (2025-10-02)
Added
- mention
adjoint_matrixin the transition documentation (#52) - introduce
jacobian_expfor the Jacobian of the exponential function. - Introduce a
AbstractActionActsOnTypeto distinguish, what previously was called “side”, i.e. whether an action acts on the left (ActionActsOnLeft) or right (ActionActsOnRight) - Introduce
_invand_inv!functions for the inverse operation to work the same way as_composeand_compose!, respectively. - introduce a
LeftMultiplicationGroupActionto represent left multiplication actions on Lie groups. While this is a bit more of a technical name, it replaces the oldComplexPlanarRotation,QuaternionRotation, andRotationAction, since in theGroupActionthis type is coupled with a group and a manifold anyway. - further methods for the
LeftMultiplicationGroupActionto cover the previous functionality of e.g.RotationTranslationActionOnVector
- Add the Special Galilean Group (#60)
Fixed
- Fixed an issue where internally the product manifold in a
SemidirectProductLieGroupwas accidentally splashed - make
×andProductLieGroupbehave the same way as×andProductManifolddo - Fixed an issue, where
exp!(G, h, g, X)would return a wrong result if the inputgand the outputhare aliased (#63). - Fixed issues with the documentation of
diff_left_composeanddiff_right_composethat were inconsistent - fixed
push_forward_tangentandpull_back_tangentwhich on general Lie groups provided a wrong default. - fixes an allocation bug for
applyanddiff_apply(#52)
0.1.3 (2025-08-04)
Added
- introduce
push_forward_tangentandpull_back_tangentto combine the differential of left compose and its inverse to “move” from the Lie algebra to a certain tangent space and back, but also takes care of adapting the representation, for the case where the representation on the manifold is different from the one on the Lie group / Lie algebra. - introduce a
BaseManifoldRetractionto be able to use retractions on the underlying manifold also as a retraction on the Lie group, cf. (#43) and (#47). This feature assumes that the representation of points and tangent vectors on Lie group and the underlying manifold are the same (so it doesn't work with special Euclidean group with homogeneous coordinates).
Changed
- Switch to using Runic.jl as code formatter
Fixed
- Fixed a typo, where
withinwas misspelled aswidthinwhich caused errors in a few places. - fix
default_basisforLieGroupto return aDefaultLieAlgebraOrthogonalBasisalso when providing a point type. That wayget_vectorfalls back to the manifold when called with a Lie group and a point, though this is mere a historical format and the Lie algebra approach is the recommended one. - mention
get_coordinates,get_vector,hat, andveein the transition documentation since it moved to using theLieAlgebrainstead of the Lie group and a point. - Fixed
RightGroupOperationActionto be a subtype ofAbstractRightGroupActionType - Add
lie_bracketfor the SpecialEuclideanGroup. - For the CircleGroup(ℝ), fixed compose StackOverflowError and a bug where result could be outside [-π,π), see (#62) for detail.
0.1.2 (2025-06-24)
Added
is_flatforSpecialEuclideanGroupinnerandnormforLieAlgebrato compute the inner product and norm on the Lie algebra.- a test suite function for
identity_element. - New StaticArrays.jl specializations for multiple functions, including:
expandlogon the orthogonal and special orthogonal group in 2 and 3 dimensions.get_coordinatesandget_vectoron the orthogonal and special orthogonal group in 2 and 3 dimensions, forLieAlgebraOrthogonalBasis.
- More generic implementation of non-mutating
get_vector_lieonAbstractProductGroupOperationgroups.
Changed
identity_elementonUnitaryGroup(1, ℍ)now returns by default a 1x1Matrixinstead of a number to be consistent with higher-dimensional unitary quaternionic groups. Useidentity_element(UnitaryGroup(1, ℍ), QuaternionF64)to get a number corresponding to the identity.
Fixed
get_vectoronSpecialEuclideanGroupwithArrayPartitionpoint type.identity_elementandzero_vectorare now all using a type as second argument and respect this type more thoroughly.- fixes (#44) (accuracy of
logon SE(2) and SE(3) for small angles).
0.1.1 (2025-05-05)
Added
identity_elementonTranslationGroupsupports nowStaticArrays.jltypes.- introduce
get_vectorin legacy form to work on Lie groups, but they pass on to their Lie algebra. - adapt to the new
default_basisfrom ManifoldsBase.jl 1.1.
Changed
- the tutorials are now rendered with
quartousing theQuartoNotebookRunner.jland are hence purely julia based.
Fixed
identity_elementonTranslationGroupno longer accepts a number as a second argument (it accepts number type instead).
0.1.0 (2025-04-22)
Everything denoted by “formerly” refers to the previous name in Manifolds.jl. Several structs have been changed from the pre-release, so these are breaking.
Added
LieAlgebraLieGroup(formerlyGroupManifold) as well as the concrete groupsTranslationGroupSpecialEuclideanGroup(formerlySpecialEuclidean) includingSpecialEuclideanMatrixPointandSpecialEuclideanMatrixTangentVectorwhen representing the points as affine (abstract) matricesSpecialEuclideanProductPointandSpecialEuclideanProductTangentVectorwhen representing them in a product structure, that is as anArrayPartitionfromRecursiveArrayTools.- neither of those types is necessary, besides for conversion between both. The product representation differs for the left and right semidirect product, while the affine matrix variant does not.
SpecialOrthogonalGroup(formerlySpecialOrthogonal)SpecialUnitaryGroup(formerlySpecialUnitary)OrthogonalGroup(formerlyOrthogonal)UnitaryGroup(formerlyUnitary) also for quaternions.GeneralLinearGroup(formerlyGeneralLinear)HeisenbergGroupLeftSemidirectProductLieGroup(formerlySemidirectProductGroup)⋉(alias forLeftSemidirectProductGroupOperationwhen adefault_left_action(G,H)is defined for the two groups)PowerLieGroup(formerlyPowerGroup)PowerGroupOperationto internally avoid ambiguities. Since the constructor always expects a Lie group, this is only necessary internallyProductLieGroup(formerlyProductGroup)RightSemidirectProductLieGroupSpecialLinearGroup(formerlySpecialLinear)SymplecticGroupCircleGroupnow with even three representations: Real line (mod 2π), Complex and plane circle⋊(alias forRightSemidirectProductGroupOperationwhen adefault_right_action(G,H)is defined for the two groups)- a
ValidationLieGroupverifying input and output of all interface functions, similar to theValidationManifoldwhich can also be used internally.
AbstractGroupOperationas well as its concrete subtypesAdditionGroupOperation(formerlyAdditionOperation)MatrixMultiplicationGroupOperation(formerlyMultiplicationOperation)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 theSemidirectProductGroup)RightSemidirectProductGroupOperation
AbstractGroupActionTypewith its 2 specific (new) abstract subtypesAbstractLeftGroupActionTypeAbstractRightGroupActionType
- For the group operation actions there are now
LeftGroupOperationAction(formerlyLeftForwardAction)RightGroupOperationAction(formerlyRightBackwardAction)InverseLeftGroupOperationAction(formerlyRightForwardAction)InverseRightGroupOperationAction(formerlyLeftBackwardAction)
DefaultLieAlgebraOrthogonalBasis(replacesVeeOrthogonalBasis, which is still available inManifoldsBase.jl)AbstractLieGroupPointandAbstractLieAlgebraTangentVectoras abstract types to introduce point and Lie algebra tangent vector representationsIdentityapplyandapply!base_manifoldto access the manifold within a Lie groupcomposeandcompose!conjugateandconjugate!diff_apply,diff_apply!,diff_group_apply, anddiff_group_apply!(formerlyapply_diff_[group][!])diff_conjugateanddiff_conjugate!diff_left_compose,diff_left_compose!,diff_right_compose,diff_right_compose!(formerlytranslate_diffwith different sides)exp(G::LieGroup, g, X)andexp!(G::LieGroup, h, g, X)(formerlyexp_invandexp_inv!)exp(G::LieGroup, X)andexp!(G::LieGroup, h, X)(formerlyexp_lieandexp_lie!)hatandhat!, with slightly different signatures, since the base point is omitted.identity_elementandidentity_element!invandinv!(inv(::AbstractGroupAction)was formerlyswitch_direction)inv_left_compose,inv_left_compose!andinv_right_compose,inv_right_compose!(these functions correspond toinverse_translatewith corresponding direction and side)is_identitylie_bracketandlie_bracket!jacobian_conjugate(formerlyadjoint_matrix, which is now a special case of this)log(G::LieGroup, g, h)andlog!(G::LieGroup, X, g, h)(formerlylog_invandlog_inv!)log(G::LieGroup, ::Identity, g)andlog!(G::LieGroup, X, ::Identity, g)(formerlylog_lieandlog_lie!)switch(formerlyswitch_side)veeandvee!, with slightly different signatures, since the base point is omitted.
Compared to Manifolds.jl
- all
translatefunctions are not implemented here, since you can just usecompose. The differentials are implemented as listed above with respect to both left and right argument of compose - all
inverse_applyfunctions are not implemented here, since it is recommended to useapply(inv(A), g, p)as a replacement.
0.0.3 (– 2025-02-19)
Added
- Finishes most of the work on the interface for the
LieGrouptype and the newLieAlgebratype. - Finishes a generic implementation of a
SemidirectProductGroupOperation - All details will be detailed in the next release
Old Changelog pre 0.0.3
Two previous releases where done by Yueh-Hua Tu in 2022 before he was so kind to transfer the development to the JuliaManifolds GitHub organisation.
All notable changes to this project will be documented in this file.
[0.0.2]
- fix SE{3} and add jacobian
- define dof and dim for Lie algebra and jacobian of inv
- add action for SE{N}
- add se3_location example