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.
- 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.
- the manifold
InvertibleMatrices
of invertible matrices
- rewrote the
CONTRIBUTING.md
and adapt it to today's links and references.
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
- 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
solve_exp_ode
only returning the starting position (#744) - Fixed documentation of
solve_exp_ode
function signature (#740)
GroupManifold
can now be called with two arguments, the third one defaulting toLeftInvariantRepresentation
.
- fixes a few typographical errors.
identity_element
onProductManifold
withoutRecursiveArrayTools.jl
now prints a useful error message.
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.
- 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.
- 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.
- implemented parallel transport on the Grassmann manifold with respect to Stiefel representation
- 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.
- Updated
Project.toml
compatibility entries. - Updated CI for Julia 1.11-beta
- a few typos in the doc string of the SPD fixed determinant description
- several other typographical errors throughout the documentation
- added the injectivity radius for the Stiefel manifold with Euclidean metric
Hyperrectangle
manifold with boundary.
NonlinearSolve.jl
andPythonCall.jl
are no longer an upper bounded dependency (bugs were fixed).
- 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.
default_vector_transport_method
forGeneralUnitaryMatrices
other thanRotations
was changed toProjectionTransport
.
- 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
rand
onUnitaryMatrices
rand
on arbitraryGroupManifold
s and manifolds withIsGroupManifold
trait generating points and elements from the Lie algebra, respectively
- 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
- 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 matrixJ_{2n}
and not an arbitrary symplectic matrix.
- a bug that cause
project
for tangent vectors to return wrong results onMultinomialDoublyStochastic
- Fixed
var
onTranslationGroup
.
- Fixed mixed array index number in-place
parallel_transport_to!
on zero-indexEuclidean
, on Julia 1.6.
- Compatibility with
RecursiveArrayTools
v3.
- Fixed mixed array index number in-place
parallel_transport_to!
on realCircle
, on Julia 1.6. - Violations of MD004 lint rule in this file.
- 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.
- Improved distribution of random vector generation for rotation matrices and complex circle.
- Fixed
is_flat
forCholeskySpace
andSymmetricPositiveDefinite
withLogCholeskyMetric
#684.
- Fixed real coefficient basis for complex circle (an issue exposed by JuliaManifolds/ManifoldsBase.jl#173).
- Fixed
VeeOrthogonalBasis
test for non-real manifolds.
identity_element
now returns a complex matrix for unitary group.number_of_coordinates
is now exported.
- 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.
- Documentation project files are marked as compatible with
BoundaryValueDiffEq
v5.
- Fixed issue with incorrect implementation of
apply_diff_group
inGroupOperationAction
with left backward and right forward action #669.
- Support for
BoundaryValueDiffEq
v5.
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.
- a new retraction and its inverse for the fixed Rank Manifolds, the orthographic retraction.
- 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.
-
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 #637 for a design discussion.
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.