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.23] 2025-07-19
Fixed
- fix a small bug in the point checks of general unitary matrices.
[0.10.22] 2025-06-25
Fixed
- Support for
ForwardDiff.jlv1
[0.10.21] 2025-06-24
Added
- Support for
ForwardDiff.jlv1
[0.10.20] 2025-06-16
Fixed
- Fix in-place computation of
exp!forGeneralLinear.
[0.10.19] 2025-06-14
Added
riemannian_gradientfor theGeneralLinearmanifoldriemannian_gradientmethod forProductManifold.
Fixed
- Fix the projection and embedding of tangent vectors on
GeneralLinear.
[0.10.18] 2025-05-29
Fixed
- Fix the supertype of
PoincareBallTangentVectorto beAbstractTangentVector - Fix the supertype of
StiefelTangentVectorto beAbstractTangentVector - Fix
riemannian_gradientfor fixed rank matrices, which did not work due to a small bug in the default fallback and a missing metric specification.
[0.10.17] 2025-04-21
Changed
- deprecate
GroupManifolds 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 fromGroupManifolds 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_vectoronCircleno longer returnsSArraywhen 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
DeterminantOneMatricesmanifold of matrices of determinant one.
Changed
- the following internal types were renamed since their super type also uses the singular
AbsoluteDeterminantOneMatricestoAbsoluteDeterminantOneMatrixTypeDeterminantOneMatricestoDeterminantOneMatrixType
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
expintoexp(without optional argumentt) andexp_fused(with argumentt) and similarlyretracttoretractandretract_fused. - ManifoldsBase.jl 1.0 also moved from
TVectortoTangentVectors 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_valueis now calledinternal_value, compare to its renaming inManifoldsBase
[0.10.12] - 2025-01-10
Added
- Orthonormal bases for
CholeskySpaceandLogCholeskymetric forSymmetricPositiveDefinite. randforCholeskySpace.
Changed
- Improved performance of selected
get_vectorandget_coordinatesmethods for complexEuclideanmanifold.
[0.10.11] - 2025-01-02
Added
- Bases and rand for
HeisenbergMatricesandInvertibleMatrices.
[0.10.10] - 2024-12-20
Added
- the
Segremanifold - the
WarpedMetricfor theSegremanifold
[0.10.9] - 2024-12-16
Added
- the
Segremanifold - the
WarpedMetricfor theSegremanifold - The manifold
HeisenbergMatricesas the underlying manifold ofHeisenbergGroup.
Changed
about.mdnow 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_vectorforGeneralUnitaryMatricesnow haveAbstractVectorupper 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_matrixfor 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_matrixfor converting quaternions to rotation matrices. make.jlscript now has more command line arguments, for example--exclude-tutorialswhen you do not want to build the tutorials but still look at the docs. Seemake.jl --helpfor more information.
[0.10.5] โ 2024-10-24
Added
- the manifold
InvertibleMatricesof invertible matrices
Changed
- rewrote the
CONTRIBUTING.mdand adapt it to today's links and references.
[0.10.4] - 2024-10-20
Added
uniform_distributionnow has an error hint explaining what has to be done to make it work.Euclideannow follows the newhas_componentsfunction fromManifoldsBase.jl(0.15.18) and can handle also ther-norms now.- Union type
MatrixGroup - Columnwise group action with arbitrary matrix groups
uniform_distributionnow has an error hint explaining what has to be done to make it work.lie_bracketis 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_odeonly returning the starting position (#744) - Fixed documentation of
solve_exp_odefunction signature (#740)
[0.10.2] - 2024-09-24
Added
GroupManifoldcan 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_elementonProductManifoldwithoutRecursiveArrayTools.jlnow prints a useful error message.
[0.10.0] โ 2024-08-24
Changed
Distributions.jl,RecursiveArrayTools.jlandHybridArrays.jlwere moved to weak dependencies to reduce load time and improve extensibility.translate_diff,inv_diffand thusapply_diff_group, are available for all the groups with invariant tangent vector storage.SpecialEuclideangroup now has a different default tangent vector representation, the left-invariant one; to get the old representation passvectors=HybridTangentRepresentation()to the constructor ofSpecialEuclidean.adjoint_actiontakes 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
MultinomialSymmetricPositiveDefinitemanifold was improved to make it more robust.
Added
- Introduced
exp_invandlog_invbased onexp_lieandlog_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).randonSymplecticMatricesandSymplecticStiefelno longer acceptshamiltonian_normas an alias forฯ.mean!andmedian!no longer acceptextrinsic_method(should be replaced withe = ExtrinsicEstimation(extrinsic_method)).
- As a result of making
Distributions.jlandRecursiveArrayTools.jlweak 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.jlneeds 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
SymplecticStiefelandSymplecticGrassmannmanifolds; 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.tomlcompatibility 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
Hyperrectanglemanifold with boundary.
[0.9.16] โ 2024-04-01
Changed
NonlinearSolve.jlandPythonCall.jlare no longer an upper bounded dependency (bugs were fixed).
[0.9.15] โ 2024-03-24
Added
- using
DocumenterInterLinksfor links to other Julia packages documentation. - Implementation of
sectional_curvature,sectional_curvature_minandsectional_curvature_maxfor several manifolds. sectional_curvature_matrixfunction and a tutorial on coordinate-free curvature.
Changed
default_vector_transport_methodforGeneralUnitaryMatricesother thanRotationswas 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
randonUnitaryMatricesrandon arbitraryGroupManifolds and manifolds withIsGroupManifoldtrait 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
HamiltonianMatricesand a wrapper forHamiltonianmatrices - introduce
rand(:HamiltonianMatrices) - extend
randto alsorand!forHamiltonianMatrices,SymplecticMatricesandSymplecticStiefel - implement
riemannian_gradientconversion forSymplecticMatricesandSymplecticGrassmann - the new manifold of
MultinomialSymmetricPositiveDefinitematrices rand!forMultinomialDoublyStochasticandMultinomialSymmetric
Deprecated
- Rename
SymplectictoSimplecticMatricesin order to have aSymplecticwrapper for such matrices as well in the future for the next breaking change. - Rename
SymplecticMatrixtoSymplecticElementto clarify that it is the special matrix $J_{2n}$ and not an arbitrary symplectic matrix.
Fixed
- a bug that cause
projectfor tangent vectors to return wrong results onMultinomialDoublyStochastic
[0.9.12] โ 2024-01-21
Fixed
- Fixed
varonTranslationGroup.
[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
RecursiveArrayToolsv3.
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
atolfor 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 methodfon the manifoldM.AbstractEstimationMethodis deprecated, useAbstractApproximationMethodinstead.
[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_flatforCholeskySpaceandSymmetricPositiveDefinitewithLogCholeskyMetrichttps://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
VeeOrthogonalBasistest for non-real manifolds.
[0.9.5] - 2023-11-08
Changed
identity_elementnow returns a complex matrix for unitary group.number_of_coordinatesis now exported.
[0.9.4] - 2023-11-06
Added
- Functions
inv_diff,inv_diff!,adjoint_inv_diffandadjoint_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
BoundaryValueDiffEqv5.
Fixed
- Fixed issue with incorrect implementation of
apply_diff_groupinGroupOperationActionwith left backward and right forward action #669.
[0.9.3] - 2023-10-28
Added
- Support for
BoundaryValueDiffEqv5.
[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_embeddingnow 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
BundleFibersfunctionality was reworked to better match mathematical abstractions. Fiber bundle functionality is experimental and minor changes may happen without a breaking release, with the exception ofTangentBundlewhich is considered to be stable. RotationTranslationActionis 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
PowerManifoldand its variants), replicating the previous behavior. For field storage, pass theparameter=:fieldkeyword 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)") endneeds to be replaced with
function Base.show(io::IO, ::CenteredMatrices{TypeParameter{Tuple{m,n}}}) where {m,n} return print(io, "CenteredMatrices($m, $n)") endfor 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)") endfor 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 endArgument order for type aliases
RotationActionOnVectorandRotationTranslationActionOnVector: most often dispatched on argument is now first.A more consistent handling of action direction was introduced. 4-valued
ActionDirectionwas 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
ProductRepris removed; please useArrayPartitioninstead.- Default methods throwing "not implemented"
ErrorExceptionfor some group-related operations. StandardMethodErroris now thrown instead. LinearAffineMetricwas deprecated in a previous release and the symbol is now removed. Please useAffineInvariantMetricinstead.