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.
- fixed a few typos in the doc string of the SPD fixed determinant description.
- Updated
Project.toml
compatibility entries.
- 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
JuliaManifolds#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 JuliaManifolds#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.