Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.10.17] - 2025-04-21
Changed
- deprecate
GroupManifold
s and its concrete subtypes as well as all functions related to Lie groups. They can now be found in the new package LieGroups.jl, see their How to transition fromGroupManifold
s tutorial for all details.
Note that while it is currently not so easy to use Manifolds.jl
and LieGroups.jl
together due to the common definitions that are here now deprecated, it might still take a reasonable time to do a breaking release here, since we do not have a very good reason to yet.
[0.10.16] 2025-04-08
Changed
- Added all
[compat]
entries also for thedocs/
andtutorials/
environments get_vector
onCircle
no longer returnsSArray
when no static arrays are passed as arguments.
Fixed
- a copy pase error in the new determinant one manifold from the last release.
[0.10.15] 2025-03-28
Added
- a
DeterminantOneMatrices
manifold of matrices of determinant one.
Changed
- the following internal types were renamed since their super type also uses the singular
AbsoluteDeterminantOneMatrices
toAbsoluteDeterminantOneMatrixType
DeterminantOneMatrices
toDeterminantOneMatrixType
Fixed
- fix
rand!
to also work on theCircle(โ)
[0.10.14] - 2025-02-18
Changed
- Introduced new implementation of parallel transport on
Rotations(3)
based on Rodrigues' rotation
formula.
[0.10.13] - 2025-02-10
Changed
- Bumped dependency of ManifoldsBase.jl to 1.0, split
exp
intoexp
(without optional argumentt
) andexp_fused
(with argumentt
) and similarlyretract
toretract
andretract_fused
. - ManifoldsBase.jl 1.0 also moved from
TVector
toTangentVector
s in type names. The following names are adapted- Renamed
HyperboloidTVector
(now deprecated) toHyperboloidTangentVector
- Renamed
OrthogonalTVector
(now deprecated) toOrthogonalTangentVector
- Renamed
PoincareBallTVector
(now deprecated) toPoincareBallTangentVector
- Renamed
PoincareHalfSpaceTVector
(now deprecated) toPoincareHalfSpaceTangentVector
- Renamed
ProjectorTVector
(now deprecated) toProjectorTangentVector
- Renamed
StiefelTVector
(now deprecated) toStiefelTangentVector
- Renamed
TuckerTVector
(now deprecated) toTuckerTangentVector
- Renamed
UMVTVector
(now deprecated) toUMVTangentVector
- Renamed
- The internal access
array_value
is now calledinternal_value
, compare to its renaming inManifoldsBase
[0.10.12] - 2025-01-10
Added
- Orthonormal bases for
CholeskySpace
andLogCholesky
metric forSymmetricPositiveDefinite
. rand
forCholeskySpace
.
Changed
- Improved performance of selected
get_vector
andget_coordinates
methods for complexEuclidean
manifold.
[0.10.11] - 2025-01-02
Added
- Bases and rand for
HeisenbergMatrices
andInvertibleMatrices
.
[0.10.10] - 2024-12-20
Added
- the
Segre
manifold - the
WarpedMetric
for theSegre
manifold
[0.10.9] - 2024-12-16
Added
- the
Segre
manifold - the
WarpedMetric
for theSegre
manifold - The manifold
HeisenbergMatrices
as the underlying manifold ofHeisenbergGroup
.
Changed
about.md
now also lists contributors of manifolds and a very short history of the package.
[0.10.8] โ 2024-11-27
Changed
- Some methods related to
get_vector
forGeneralUnitaryMatrices
now haveAbstractVector
upper bound for coefficients. - Minimum Julia version is now 1.10 (the LTS which replaced 1.6)
- The dependency ManifoldDiff.jl has been upgraded from v0.3 to v0.4, to bring compatibility with DifferentiationInterface.jl.
[0.10.7] โ 2024-11-16
Added
adjoint_matrix
for Lie groups, with optimized implementations for SO(2), SO(3), SE(2) and SE(3).
[0.10.6] โ 2024-11-06
Added
- Two new actions:
ComplexPlanarRotation
,QuaternionRotation
. - New function
quaternion_rotation_matrix
for converting quaternions to rotation matrices. make.jl
script now has more command line arguments, for example--exclude-tutorials
when you do not want to build the tutorials but still look at the docs. Seemake.jl --help
for more information.
[0.10.5] โ 2024-10-24
Added
- the manifold
InvertibleMatrices
of invertible matrices
Changed
- rewrote the
CONTRIBUTING.md
and adapt it to today's links and references.
[0.10.4] - 2024-10-20
Added
uniform_distribution
now has an error hint explaining what has to be done to make it work.Euclidean
now follows the newhas_components
function fromManifoldsBase.jl
(0.15.18) and can handle also ther
-norms now.- Union type
MatrixGroup
- Columnwise group action with arbitrary matrix groups
uniform_distribution
now has an error hint explaining what has to be done to make it work.lie_bracket
is exactly zero on orthogonal Lie algebra in 2D
[0.10.3] - 2024-10-04
Changed
- Mildly breaking: the number system parameter now corresponds to the coefficients standing in front of basis vectors in a linear combination instead of components of a vector. For example,
DefaultOrthonormalBasis() == DefaultOrthonormalBasis(โ)
ofEuclidean(3, field=โ)
now has 6 vectors, andDefaultOrthonormalBasis(โ)
of the same manifold has 3 basis vectors.
Fixed
- Fixed
solve_exp_ode
only returning the starting position (#744) - Fixed documentation of
solve_exp_ode
function signature (#740)
[0.10.2] - 2024-09-24
Added
GroupManifold
can now be called with two arguments, the third one defaulting toLeftInvariantRepresentation
.
Changed
- fixes a few typographical errors.
[0.10.1] โ 2024-08-29
Changed
identity_element
onProductManifold
withoutRecursiveArrayTools.jl
now prints a useful error message.
[0.10.0] โ 2024-08-24
Changed
Distributions.jl
,RecursiveArrayTools.jl
andHybridArrays.jl
were moved to weak dependencies to reduce load time and improve extensibility.translate_diff
,inv_diff
and thusapply_diff_group
, are available for all the groups with invariant tangent vector storage.SpecialEuclidean
group now has a different default tangent vector representation, the left-invariant one; to get the old representation passvectors=HybridTangentRepresentation()
to the constructor ofSpecialEuclidean
.adjoint_action
takes a direction argument; by default it isLeftAction
.adjoint_action!
is the necessary method to implement in groups with left-invariant tangent vector representation.- Fixed a few typos in the doc string of the SPD fixed determinant description.
- Random point on the
MultinomialSymmetricPositiveDefinite
manifold was improved to make it more robust.
Added
- Introduced
exp_inv
andlog_inv
based onexp_lie
andlog_lie
. They are invariant to the group operation. - A tutorial about usage of group-related functionality.
Removed
- Deprecated bindings:
ExtrinsicEstimation()
(should be replaced withExtrinsicEstimation(EfficientEstimator())
),Symplectic
(renamed toSymplecticMatrices
),SymplecticMatrix
(renamed toSymplecticElement
).AbstractEstimationMethod
(renamed toAbstractApproximationMethod
).VectorBundleVectorTransport
(renamed toFiberBundleProductVectorTransport
).rand
onSymplecticMatrices
andSymplecticStiefel
no longer acceptshamiltonian_norm
as an alias forฯ
.mean!
andmedian!
no longer acceptextrinsic_method
(should be replaced withe = ExtrinsicEstimation(extrinsic_method)
).
- As a result of making
Distributions.jl
andRecursiveArrayTools.jl
weak dependencies the following symbols are no longer exported fromManifolds.jl
. Essential functionality is still available but distribution-related features may change in the future without a breaking release.ArrayPartition
(RecursiveArrayTools.jl
needs to be explicitly imported),ProjectedPointDistribution
(not exported),normal_tvector_distribution
(not exported),projected_distribution
(not exported),uniform_distribution
(not exported).
- Ability to create non-real
SymplecticStiefel
andSymplecticGrassmann
manifolds; essential functionality was missing so it was removed until a more developed version is developed.
[0.9.20] โ 2024-06-17
Added
- implemented parallel transport on the Grassmann manifold with respect to Stiefel representation
Changed
- since now all exp/log/parallel transport are available for all representations of
Grassmann
, these are now also set as defaults, since they are more exact.
[0.9.19] โ 2024-06-12
Changed
- Updated
Project.toml
compatibility entries. - Updated CI for Julia 1.11-beta
Fixed
- a few typos in the doc string of the SPD fixed determinant description
- several other typographical errors throughout the documentation
[0.9.18] โ 2024-05-07
Added
- added the injectivity radius for the Stiefel manifold with Euclidean metric
[0.9.17] โ 2024-04-23
Added
Hyperrectangle
manifold with boundary.
[0.9.16] โ 2024-04-01
Changed
NonlinearSolve.jl
andPythonCall.jl
are no longer an upper bounded dependency (bugs were fixed).
[0.9.15] โ 2024-03-24
Added
- using
DocumenterInterLinks
for links to other Julia packages documentation. - Implementation of
sectional_curvature
,sectional_curvature_min
andsectional_curvature_max
for several manifolds. sectional_curvature_matrix
function and a tutorial on coordinate-free curvature.
Changed
default_vector_transport_method
forGeneralUnitaryMatrices
other thanRotations
was changed toProjectionTransport
.
Fixed
- typographical errors in tutorials/working-in-charts.jl.
- several typographical errors in the docs
- unifies to use two backticks
``
for math instead of$
further in the docs
[0.9.14] โ 2024-01-31
Added
rand
onUnitaryMatrices
rand
on arbitraryGroupManifold
s and manifolds withIsGroupManifold
trait generating points and elements from the Lie algebra, respectively
[0.9.13] โ 2024-01-24
Added
- added the real symplectic Grassmann manifold
SymplecticGrassmann
- Introduce the manifold of
HamiltonianMatrices
and a wrapper forHamiltonian
matrices - introduce
rand(:HamiltonianMatrices)
- extend
rand
to alsorand!
forHamiltonianMatrices
,SymplecticMatrices
andSymplecticStiefel
- implement
riemannian_gradient
conversion forSymplecticMatrices
andSymplecticGrassmann
- the new manifold of
MultinomialSymmetricPositiveDefinite
matrices rand!
forMultinomialDoublyStochastic
andMultinomialSymmetric
Deprecated
- Rename
Symplectic
toSimplecticMatrices
in order to have aSymplectic
wrapper for such matrices as well in the future for the next breaking change. - Rename
SymplecticMatrix
toSymplecticElement
to clarify that it is the special matrix $J_{2n}$ and not an arbitrary symplectic matrix.
Fixed
- a bug that cause
project
for tangent vectors to return wrong results onMultinomialDoublyStochastic
[0.9.12] โ 2024-01-21
Fixed
- Fixed
var
onTranslationGroup
.
[0.9.11] โ 2023-12-27
Fixed
- Fixed mixed array index number in-place
parallel_transport_to!
on zero-indexEuclidean
, on Julia 1.6.
[0.9.10] โ 2023-12-27
Added
- Compatibility with
RecursiveArrayTools
v3.
Fixed
- Fixed mixed array index number in-place
parallel_transport_to!
on realCircle
, on Julia 1.6. - Violations of MD004 lint rule in this file.
[0.9.9] โ 2023-12-25
Fixed
- introduced a nonzero
atol
for all point and vector checks that compre to zero. This makes those checks a bit more relaxed by default and resolves #630. default_estimation_method(M, f)
is deprecated, usedefault_approximation_method(M, f)
for your specific methodf
on the manifoldM
.AbstractEstimationMethod
is deprecated, useAbstractApproximationMethod
instead.
[0.9.8] - 2023-11-17
Fixed
- Improved distribution of random vector generation for rotation matrices and complex circle.
[0.9.7] โ 2023-11-14
Fixed
- Fixed
is_flat
forCholeskySpace
andSymmetricPositiveDefinite
withLogCholeskyMetric
https://github.com/JuliaManifolds/Manifolds.jl/issues/684.
[0.9.6] - 2023-11-09
Fixed
- Fixed real coefficient basis for complex circle (an issue exposed by https://github.com/JuliaManifolds/ManifoldsBase.jl/pull/173).
- Fixed
VeeOrthogonalBasis
test for non-real manifolds.
[0.9.5] - 2023-11-08
Changed
identity_element
now returns a complex matrix for unitary group.number_of_coordinates
is now exported.
[0.9.4] - 2023-11-06
Added
- Functions
inv_diff
,inv_diff!
,adjoint_inv_diff
andadjoint_inv_diff!
that correspond to differentials and pullbacks of group inversion. - Julia 1.10-rc CI workflow.
Changed
- Documentation project files are marked as compatible with
BoundaryValueDiffEq
v5.
Fixed
- Fixed issue with incorrect implementation of
apply_diff_group
inGroupOperationAction
with left backward and right forward action #669.
[0.9.3] - 2023-10-28
Added
- Support for
BoundaryValueDiffEq
v5.
[0.9.2] - 2023-10-27
Added
rand(G; vector_at=Identity(G))
now works for translation, special orthogonal and special Euclidean groupsG
(issue #665).get_embedding
now works forGeneralUnitaryMultiplicationGroup
.- Github action that checks for NEWS.md changes.
[0.9.1] - 2023-10-25
Added
- a new retraction and its inverse for the fixed Rank Manifolds, the orthographic retraction.
[0.9.0] - 2023-10-24
Added
- Vector bundles are generalized to fiber bundles. Old
BundleFibers
functionality was reworked to better match mathematical abstractions. Fiber bundle functionality is experimental and minor changes may happen without a breaking release, with the exception ofTangentBundle
which is considered to be stable. RotationTranslationAction
is introduced.
Changed
Sizes of all manifolds can now be either encoded in type or stored in a field to avoid over-specialization. The default is set to store the size in type parameter (except for
PowerManifold
and its variants), replicating the previous behavior. For field storage, pass theparameter=:field
keyword argument to manifold constructor. For example statically sizedCenteredMatrices{m,n}
is nowCenteredMatrices{TypeParameter{Tuple{m,n}}}
, whereas the type of special Euclidean group with field-stored size isCenteredMatrices{Tuple{Int,Int}}
. Similar change applies to:CenteredMatrices{m,n}
,CholeskySpace{N}
,Elliptope{N,K}
,Euclidean
,FixedRankMatrices{m,n,k}
,KendallsPreShapeSpace{n,k}
,KendallsShapeSpace{n,k}
,GeneralLinear{n}
,GeneralUnitaryMultiplicationGroup{n}
,GeneralizedGrassmann{n,k}
,GeneralizedStiefel{n,k}
,Grassmann{n,k}
,Heisenberg{n}
,Hyperbolic{n}
,MultinomialMatrices{N,M}
,MultinomialDoublyStochastic{n}
,MultinomialSymmetric{n}
,Orthogonal{n}
,PowerManifold
,PositiveArrays
,PositiveMatrices
,PositiveNumbers
,ProbabilitySimplex{n}
,SPDFixedDeterminant{n}
,SpecialLinear{n}
,SpecialOrthogonal{n}
,SpecialUnitary{n}
,SpecialEuclidean{n}
,SpecialEuclideanManifold{n}
,Spectrahedron{n,k}
,SphereSymmetricMatrices{N}
,Stiefel{n,k}
,SymmetricMatrices{N}
,SymmetricPositiveDefinite{n}
,SymmetricPositiveSemidefiniteFixedRank{n,k}
,Symplectic{n}
,SymplecticStiefel{n,k}
,TranslationGroup
,Tucker
.
For example
function Base.show(io::IO, ::CenteredMatrices{m,n}) where {m,n} return print(io, "CenteredMatrices($m, $n)") end
needs to be replaced with
function Base.show(io::IO, ::CenteredMatrices{TypeParameter{Tuple{m,n}}}) where {m,n} return print(io, "CenteredMatrices($m, $n)") end
for statically-sized groups and
function Base.show(io::IO, M::CenteredMatrices{Tuple{Int,Int}}) m, n = get_parameter(M.size) return print(io, "CenteredMatrices($m, $n; parameter=:field)") end
for groups with size stored in field. Alternatively, you can use a single generic method like this:
function Base.show(io::IO, M::CenteredMatrices{T}) where {T} m, n = get_parameter(M) if T <: TypeParameter return print(io, "CenteredMatrices($m, $n)") else return print(io, "CenteredMatrices($m, $n; parameter=:field)") end end
Argument order for type aliases
RotationActionOnVector
andRotationTranslationActionOnVector
: most often dispatched on argument is now first.A more consistent handling of action direction was introduced. 4-valued
ActionDirection
was split into 2-valuedActionDirection
(either left or right action) andGroupActionSide
(action acting from the left or right side). See https://github.com/JuliaManifolds/Manifolds.jl/issues/637 for a design discussion.
Removed
ProductRepr
is removed; please useArrayPartition
instead.- Default methods throwing "not implemented"
ErrorException
for some group-related operations. StandardMethodError
is now thrown instead. LinearAffineMetric
was deprecated in a previous release and the symbol is now removed. Please useAffineInvariantMetric
instead.