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.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.