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.
2.0.2 (23/10/2025)
Added
- Reference to
embed_projectinprojectdocumentation. - Expanded docs of
inner.
2.0.1 (17/10/2025)
Added
get_vector,get_coordinates,projectand their mutating variants now use traits for propagation.
2.0.0 (02/10/2025)
While this release should be mostly backward compatible, especially when using defined manifolds from Manifolds.jl, some breaking changes were introduced. To be precise, defining and using traits e.g. to dispatch functions to the embedding changed internally. If you defined your own manifolds and used traits, please check the documentation of the new trait
Added
- an interface for quotient manifolds. this also unified the naming a bit. Formerly
differential_canonical_projectis nowdiff_canonical_project.
Changed
- refactor the trait system to no longer use a list of traits but single traits separately for the metric and the embedding specification
- Switch to using Runic.jl as code formatter
Removed
ODEExponentialRetractionwas removed in favor ofsolve_chart_exp_odeimplemented inManifolds.jl.
1.2.0 (08/05/2025)
Added
tangent_vector_typefor converting point types to matching tangent vector types.
1.1.0 (29/04/2025)
Added
default_basis(M)to be more flexible than a fixedDefaultOrthonormalBasisdefault.StabilizedRetraction, a retraction that improves numerical stability of another retraction by projecting the resulting point.
1.0.3 (08/04/2025)
Changed
VectorSpaceFiberno longer requires the number system to be consistent with the wrapped manifold.
1.0.2 (07/04/2025)
Changed
Fiberno longer requires the number system to be consistent with the wrapped manifold.
Added
allocatemethod that works with numeric scalars.
1.0.1 (05/02/2025)
Fixed
- An issue with allocation type promotion in
exp_fused.
[1.0] 05/02/2025
Changed
- to avoid logical ambiguities to the forthcoming
LieGroups.jl, the “fusing” variantexp(M, p, X, t)has been moved to its own nameexp_fused(M, p, X, t)and similarlyexp!(M, q, p, X, t)has been moved to its own nameexp_fused!(M, q, p, X, t). Note that the newexp_fused!method is not exported and by default falls back to callingexp!witht*X. Actions to take- if you just implemented an own
exp(M, p, X)orexp!(M, q, p, X)everything works as before. - if you implemented a fused variant
exp!(M, q, p, X, t)you have to adapt two things- move that implementation to
ManifoldsBase.exp_fused!(M, q, p, X, t) - Implement the default
exp!(M, q, p, X) = ManifoldBase.exp_fused!(M, q, p, one(eltype(p)), X),
- move that implementation to
- if you just implemented an own
- Similar to
exp, the “fusing” variantretract(M, p, X, t, m)has been moved to its own nameretract_fused(M, p, X, t, m)and similarlyretract!(M, q, p, X, t, m)has been moved to its own nameretract_fused!(M, q, p, X, t, m). Note that the newretract_fused!method is not exported and by default falls back to callingretract!witht*X. Actions to take- if you just implemented an own
retract(M, p, X, m)orretract!(M, q, p, X, m)everything works as before. - if you implemented a fused variant
retract!(M, q, p, X, t)you have to adapt two things- move that implementation to
ManifoldsBase.retract_fused!(M, q, p, X, t, m) - Implement the default
retract!(M, q, p, X, m) = ManifoldBase.retract_fused!(M, q, p, one(eltype(p)), X), or an own specific implementation for the non-fused variant.
- move that implementation to
- if you just implemented an own
- the
TVectortype has been renamed toAbstractTangentVector - the
CoTVectortype has been renamed toAbstractCotangentVector
Removed
parallel_transport_along(M, p, X, c),vector_transport_along(M, p, X, c, m)as well as their mutating variants are removed from the API for now. It was never specified how to actually specify a curvecand the method was only implemented forEuclideaninManifolds.jl, where it is the identity.
0.15.24 (17/01/2025)
Added
- extended support for
allocate_onwithArrayPartition.
0.15.23 (09/12/2024)
Added
- a field
pointtoValidationFibreVectorto potentially store the point of the vector. - a field
store_base_pointtoValidationManifoldto indicate whether for new fibre vectors the base point should be stored. - a keyword
ignore_contextstoValidationManifoldto ignore certain contexts from validation, such as:Input,:Output,:Point, or:Vector. - a keyword
ignore_functionstoValidationFibreVectorto ignore certain contexts within a single function. This is provided as a dictionary with the key being the (allocating) function and the value is a context or vector of contexts.
Changed
- the internal function
array_valuewas renamed tointernal_valueand is now exported, since it can be also used on elements that store values different from arrays,
e.g. a ValidationMPoint storing a subtype of a ManifoldPoint. array_value is hence deprecated.
- Minimum Julia version is now 1.10 (the LTS which replaced 1.6)
0.15.22 (15/11/2024)
Added
DefaultOrthonormalBasis()is now the default basis forget_vector,get_vector!,get_vectors,get_coordinatesandget_coordinates!.
0.15.21 (12/11/2024)
Fixed
- Coordinate allocation was improved to be more friendly with automatic differentiation.
0.15.20 (24/10/2024)
Changed
normfunction onVectorSpaceFiber(such asTangentSpace) now needs to be called without the point. The passed point was already ignored before.
0.15.19 (20/10/2024)
Changed
- make
has_componentsintroduced in the last version a decorator trait function.
0.15.18 (18/10/2024)
Added
distance(M, p, q, r)to computer-norms on manifolds that have components.distance(M, p, q, m, r)to compute (approximate)r-norms on manifolds that have components using anAbstractInverseRetractionMethod mwithin every (inner) distance call.norm(M, p, X, r)to computer-norms on manifolds that have components.
0.15.17 (04/10/2024)
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(ℝ)ofDefaultManifold(3, field=ℂ)now has 6 vectors, andDefaultOrthonormalBasis(ℂ)of the same manifold has 3 basis vectors.
0.15.16 (13/09/2024)
Changed
- Adapt the traits, so that they also can be used when only
using ManifoldsBase,
without importing internal structs like EmptyTrait and TraitList
0.15.15 (29/08/2024)
Changed
- Refactored error message code when
ProductManifoldis used withoutRecursiveArrayTools.jl.
0.15.14 (27/08/2024)
Added
- A helpful error message when
ProductManifoldis used withoutRecursiveArrayTools.jl.
Changed
representation_sizeforProductManifoldnow returnsnothinginstead of a one-element tuple. This change makes it easier to notice errors caused by not havingRecursiveArrayTools.jlloaded.
0.15.13 (10/08/2024)
Changed
- Fixed a small bug that caused calling
get_vectorson PowerManifolds
to sometimes cause an error, cf #199.
0.15.12 (03/08/2024)
Changed
- Improved performance of power manifold creation and some cases of
get_componenton product manifold.
0.15.11 (28/07/2024)
Added
- Function
allocate_onto generically allocate point and tangent vectors on a manifold without a pre-existing instance but of a particular type. - Function
default_typeto get the default type of points and tangent vectors for a manifold. - Package extension for the
Quaternions.jlpackage that handles allocation.
Changed
- Default allocation method was made more robust to custom promotion functions.
0.15.10 (19/05/2024)
Added
- Functions
fill(p, N)andfill!(P, p, N)to fill values into a point on a power manifoldN. - introduce a
base_point(TpM)to access the base point of a tangent space - introduce
TpM[i]to access tangent spaces of factors from anAbstractPowerManifoldor aProductManifold.
0.15.9 (02/05/2024)
Added
- Tests now also use
Aqua.jlto spot problems in the code such as ambiguities. - introduce a
check_inverse_retractionfunction to numerically check whether an inverse retraction method is a (correct) inverse retraction. - introduce a
check_retractionfunction to numerically check whether a retraction method is a (correct) retraction. - introduce a
check_vector_transportfunction to numerically check whether a vector transport is a (correct) vector transport.
Changed
- introduced a
ManifoldsBaseTestUtilsmodule to encapsulate common types and function definitions in different parts of the tests.
0.15.8 (13/03/2024)
Added
sectional_curvature,sectional_curvature_maxandsectional_curvature_minfunctions for obtaining information about sectional curvature of a manifold.
0.15.7 (24/01/2024)
Fixed
is_pointandis_vectorcan now more stably:infoor:warnwhen they return false, since they emplyshowerrorfor these displays.
0.15.6 (15/12/2023)
Added
- An
AbstractApproximationMethodto specify estimation methods for other more general functions,
as well as a default_approximation_method to specify defaults on manifolds.
- An
EmbeddedVectorTransportto use a vector transport in the embedding and a final projection.
Fixed
number_eltypecorrectly returns scalar type for nested array types likenumber_eltype(Vector{Vector{Float64}}).
0.15.5 (13/12/2023)
Added
- Compatibility with
RecursiveArrayToolsv3.
0.15.4 (25/11/2023)
Fixed
- Fixed a bug reported in Manopt#330.
0.15.3 (17/11/2023)
Fixed
- Pass kwargs in
rand!forAbstractPowerManifoldto appropriate methods on the wrapped manifold.
0.15.2 (8/11/2023)
Fixed
veeandhatnow use real coefficient basis for complex manifolds.
0.15.1 (30/10/2023)
Added
zero_vector(TpM)to generate a zero vector in the tangent space- a GitHub CI action that errors, when this file was not updated on a PR
Fixed
is_pointandis_vectorfor the tangent space now correctly forward to vector checks on the corresponding manifold. The same for bothcheck_sizes- add
[compat]entries for the standard libraries.
0.15.0 (21/10/2023)
Added
ProductManifoldtype was migrated from Manifolds.jl.Fiber,VectorSpaceFiberandTangentSpacetypes.TangentSpaceis a generalized version ofTangentSpaceAtPointfrom Manifolds.jl.- A keyword to
ValidationManifoldwhicherror=mode to use. This is by default the previous:errormode. change_representer!,change_metric!andWeingarten!methods added toPowerManifold.×now also works for retractions, inverse retractions, and vector transports to create their product versionsretract,inverse_retract, andvector_transport_to(and_dir) now also accept arbirtrary retractions on the product manifold. These act the same as the n-fold product of a retraction.
Changed
retractnow behaves likeexpin the sense that it allocates early, which reduces the amount of code to dispatch through levels 1-3 twiceinverse_retractnow behaves likelogin the sense that it allocates earlyRequires.jlis added as a dependency to facilitate loading some methods related toProductManifoldson Julia 1.6 to 1.8. Later versions rely on package extensions.Documenter.jlwas updated to 1.0.PowerManifoldcan now store its size either in a field or in a type, similarly toDefaultManifold. By default the size is stored in a field.- The signature of
is_pointwas changed to be consistent withisapprox.. The error positional symbol (third argument) is now a keyword argument. We left the boolean shortcut in place. That meansis_point(M, p, true)works the same as before (falseis the default anyways)is_point(M, p, :warn)has to be changed tois_point(M, p; error=:warn)
- The signature of
is_vectorwas changed to be consistent withisapproxandis_point. The error positional symbol (fourth argument) is now a keyword argument. The error positional boolean (fourth argument) hence moved to fifth place (aftercheck_base_point) This meansis_vector(M, p, X, true)should now beis_vector(M, p, X; error=:error)is_vector(M, p, X, err, base)for two booleanserr, baseshould now beis_vector(M, p, X, base, err)is_vector(M, p, X, err, base)for a symbolerrshould now beis_vector(M, p, X, base; error=err)
Removed
- Julia 1.0 is no longer supported. From now on, the earliest supported Julia version is 1.6.
0.14.12 (23/09/2023)
Changed
- Introduce a thorough way to allocate tangent vectors for
rand
0.14.11 (25/08/2023)
Added
- Make the
Weingartenmap a decorator capable function.
0.14.10 (17/08/2023)
Added
- introduce the
Weingartenmap and its in place variantWeingarten!.
0.14.9 (03/08/2023)
Added
- Introduce an interface that allows the static size of a manifold to be a field as well.
0.14.8 (07/07/2023)
Changed
- Improve
showfor cached bases and make it more robust
0.14.7 (07/07/2023)
Changed
- the tutorial is now written in Quarto.
0.14.6 (10/06/2023)
Added
- export the inplace random function
rand!
0.14.5 (03/05/2023)
Added
- Allow to specify an
AbstractManifoldwhen converting points or tangent vector types.
0.14.4 (10/04/2023)
Changed
- Fix
copyto work properly when copyingNumbers
0.14.3 (16/03/2023)
Changed
- Fix an allocation bug in nested power manifolds
0.14.2 (16/03/2023)
Added
- adds a DependaBot workflow.
Changed
- Fix an allocation issue with
exp(M, p, X, t)that did not respect the type oft.
0.14.1 (18/02/2023)
Note that this release did not trigger a TagBot, so it appears within 0.14.2 in the tagged/created releases
Added
- Introduce
change_representeralready inManifoldsBase.
0.14.0 (– 15/02/2023)
Added
- Type restriction for
tin scaled retractions relaxed toNumber. embed_project(M::AbstractManifold, p)andembed_project(M::AbstractManifold, p, X)that are like projections onto a manifold or a tangent space but are guaranteed to be idempotent.
Changed
- Retractions for scaled vectors no longer dispatch to non-scaled retractions. It is now reversed for performance reasons. Please either just define
exp!(::MyManifold, q, p, X, t::Number)or both this andexp!(::MyManifold, q, p, X). DefaultManifoldnow stores size in a field instead of the type itself to reduce the amount of compilation needed.- Fixed typo in
inverse_retract_caley(nowinverse_retract_cayley) andretract_caley(nowretract_cayley). retract_padeandretract_pade!now receivePadeRetractionobjects instead of justn.