Changelog
All notable changes to Manifolds.jl will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.11.34 (2026-10-22)
Changed
- Tensor contractions are now computed using
TensorOperations.jlinstead ofTullio.jlto supportCUDA.jlv6.0.
0.11.33 (2026-10-21)
This release is based on an LLM based report, that was then carefully reviewed, refined and eventually applied to fix inconsistencies, typos, a few missing functions and bugs. The changes are also generated by the LLM, so they might be a bit verbose. We decided to keep that for completeness. The initial report, all work through the items found, and the final report are also part of the PR (#931). The hope is, that now the package is more consistent and has less bugs we do hope, that this did not disturb anyone's workflow.
Added
distanceandinneron theGrassmannmanifold forProjectorPoints andProjectorTangentVectors.- Chart-based
gaussian_curvature, equal to half ofricci_curvature. get_basis,get_coordinatesandget_vectoron theEssentialManifoldwith an orthonormal basis of its five-dimensional horizontal space.CenteredMatricesprovideget_coordinatesandget_vectorin their default orthonormal basis, for real and complex matrices.is_flatfor theLorentzmanifold with theMinkowskiMetric.is_flatfor theSymplecticGrassmannmanifold.logon theProbabilitySimplexwith theEuclideanMetric.manifold_dimensionandis_flatforMultinomialSymmetricPositiveDefinite.PolarInverseRetractionon theGeneralizedGrassmannmanifold.PolarRetraction,QRRetraction,CayleyRetraction,PolarInverseRetractionandQRInverseRetractionon the realGeneralizedStiefelmanifold.projecton theHamiltonianMatrices, for points and for tangent vectors.projectontoHeisenbergMatricesand onto their tangent spaces.project(M, p)projects a point onto the hyperboloid of theHyperbolicspace.projectonto the tangent spaces ofInvertibleMatrices.warn_nonconvergencekeyword forprojecton the doubly stochastic multinomial manifolds, which allows disabling the warning issued when Sinkhorn's algorithm does not converge.ProjectionRetractionon theMultinomialSymmetricPositiveDefinitemanifold.QRInverseRetractionandPolarInverseRetractionon the realGeneralUnitaryMatrices, in particular onOrthogonalMatrices, previously only available onRotations. OnOrthogonalMatricesthey throw aDomainErrorfor points from different connected components.randnow works onProjectiveSpace.randandrand!on theSpecialUnitaryMatrices, which draw points of determinant one and tangent vectors of trace zero.randandrand!forSphereSymmetricMatrices.randgenerates random points on theSymplecticGrassmannmanifold.riemann_tensor,sectional_curvature,sectional_curvature_maxandsectional_curvature_minonHamiltonianMatrices,InvertibleMatrices,HeisenbergMatrices,CholeskySpace,CircleandSymmetricPositiveDefiniteunder theLogCholeskyMetric, the last two also onSymmetricMatrices,SkewHermitianMatricesandCenteredMatrices.riemann_tensorandsectional_curvatureonSymmetricMatrices,SkewHermitianMatricesandCenteredMatrices.riemann_tensor,sectional_curvature,sectional_curvature_maxandsectional_curvature_minonSymmetricPositiveDefinitewith theLogEuclideanMetricreturn zero.- the test suite runs JET.jl on the whole package with all extensions loaded, in its own environment
test/jetand its own CI job, on released Julia versions. @tfvector_inner_via_get_vectorand@tfvector_norm_via_get_vectormacros that defineinnerandnormofTFVectors on a metric manifold with a closed-forminnerornormby converting them withget_vector.
Changed
- Basis-based methods of
christoffel_symbols_first,christoffel_symbols_second,christoffel_symbols_second_jacobian,det_local_metric,einstein_tensor,gaussian_curvature,inverse_local_metric,local_metric,local_metric_jacobian,log_local_metric_density,ricci_curvature,ricci_tensor,riemann_tensorandsolve_exp_ode(taking a pointpand anAbstractBasisB) are deprecated. Use their chart-based variants taking an atlasA, chart indexiand parametersainstead, for examplericci_curvature(M, A, i, a);solve_exp_odeis replaced bysolve_chart_exp_ode, whilelocal_metric_jacobianandchristoffel_symbols_second_jacobianhave no direct replacements and are covered by the chart-basedchristoffel_symbols_first,christoffel_symbols_secondandriemann_tensor. - The default retraction and inverse retraction of
FixedRankMatricesareOrthographicRetractionandOrthographicInverseRetraction. - The default retraction of the
Hyperbolicspace in the hyperboloid model is theStabilizedRetractionof the exponential map, which projects onto the hyperboloid afterwards. default_retraction_methodon the doubly stochastic multinomial manifolds is now the
ProjectionRetraction.
- embedding of the
MultinomialSymmetricPositiveDefinitemanifold is changed fromMultinomialMatricestoMultinomialSymmetric, and is marked asIsometricallyEmbeddedManifoldTypeinstead ofEmbeddedManifoldType. Consequently,inner,normandriemannian_gradientare now also available. estimated_sectional_curvature_matrixtakes the number of points as the keywordN, as its docstring says; the keywordN_ptsstill works and issues a deprecation warning.projectonto the tangent space ofMultinomialMatricesis now orthogonal with respect to the Fisher–Rao metric instead of subtracting the mean of each column.
Fixed
- Two generalized Stiefel, generalized Grassmann or graph manifolds, and two generalized Bures–Wasserstein metrics, with equal contents compare equal and hash alike.
- Two
Hyperrectangles with equal bounds compare equal and hash alike. Circle(ℂ)^nreturns the power manifold of the complex circle.AbstractAffineConnectionis available when onlyManifoldsis loaded.change_metricfor a metric given by its local matrix keeps inner products also when that matrix does not commute with the local matrix of the manifold's metric.change_metricon theGeneralizedGrassmannmanifold returns a tangent vector whose length in the manifold's metric equals the Euclidean length of the given one.change_representerfor a metric given by its local matrix reproduces the inner products of that metric also when its local matrix does not commute with the local matrix of the manifold's metric.- The chart solvers for geodesics and Jacobi fields continue from the point reached when an atlas asks for a chart switch but keeps its chart.
- The point check of
CenteredMatricestakes a relative tolerancertoland accepts the large points the manifold produces. check_pointandcheck_vectoron aFiberBundlecheck the base part and the fiber part and report the errors of both.check_pointandcheck_vectoronHeisenbergMatricesuse the tolerances passed to them and report the size of the deviation they found.check_pointonHyperbolicnow also tests if the last entry is positive.check_pointonSPDFixedDeterminantpasses its keyword arguments, such asatolandrtol, to the check of the determinant.check_vectoron theCholeskySpacerejects a matrix with a nonzero strictly upper triangular part with the same default tolerance ascheck_point.check_vectoronDeterminantOneMatricesaccepts a trace that vanishes up to rounding, with the tolerance keywordatol.check_vectoron aFlagin the orthogonal representation accepts tangent vectors whose blocks vanish up to rounding, with the tolerance keywordatol.check_vectorandis_vectoronMultinomialSymmetricapply a givenatolandrtolalso to the row sums.check_vectorand the tangent projection ofSPDFixedDeterminantuse the condition that the trace ofp \ Xvanishes, so that a geodesic in an accepted direction keeps the determinant, and the tangent check takes a relative tolerancertol.- The tangent checks of the sphere, the projective space, the probability simplex, the hyperbolic space, the centered matrices, the elliptope and the spectrahedron take a relative tolerance
rtoland accept tangent vectors of any length. connected_by_geodesicon theSegremanifold with aWarpedMetrictakes the warping factor into account.- Constructors of manifolds throw a
DomainErrorfor sizes at which the manifold would be empty or have a negative dimension, such asSphere(-1),Stiefel(2, 3),SpecialUnitaryMatrices(0),Spectrahedron(0, 0)orSegre(2, 0).FlagandTuckerthrow aDomainErrorinstead of anErrorExceptionand anAssertionErrorfor invalid sizes. This affects the following manifolds:ArrayProjectiveSpaceArraySphereCenteredMatricesCholeskySpaceDeterminantOneMatricesElliptopeEuclideanFixedRankMatricesFlagGeneralizedGrassmannGeneralizedStiefelGeneralUnitaryMatricesGrassmannHamiltonianMatricesHeisenbergMatricesHyperbolicInvertibleMatricesKendallsPreShapeSpaceKendallsShapeSpaceLorentzMultinomialDoubleStochasticMultinomialMatricesMultinomialSymmetricMultinomialSymmetricPositiveDefiniteObliqueOrthogonalMatricesProbabilitySimplexProjectiveSpaceRotationsSegreSkewHermitianMatricesSPDFixedDeterminantSpecialUnitaryMatricesSpectrahedronSphereSphereSymmetricMatricesStiefelSymmetricMatricesSymmetricPositiveDefiniteSymmetricPositiveSemidefiniteFixedRankSymplecticGrassmannSymplecticMatricesSymplecticStiefelTorusTuckerUnitaryMatrices
SymplecticGrassmannthrows anArgumentErrorfor odd matrix sizes, asSymplecticStiefeldoes, instead of rounding them down.copyof anSVDMPointor aTuckerPointreturns a point with its own arrays.diff_canonical_projectanddiff_canonical_project!on theGrassmannmanifold compute the differential of the canonical projection from Stiefel points onto projectors.distanceandlogon the unsignedEssentialManifoldchoose the closest of the four sign flips, so that they are the same for every representative of a point.distanceandlogon theEssentialManifoldreturn a number when a turn about the z axis puts one of the two cameras in place.distanceon a complexEuclideanspace returns a real number.distanceandlogon theGeneralizedGrassmannmanifold use the metric given byB, anddistancereturnsπ/2for a right principal angle.distanceon theGrassmannmanifold returnsπ/2for a right principal angle instead of throwing aSingularException.distanceon the hyperboloid model of theHyperbolicspace keeps the number type of its points, so that single precision points give a single precision distance.- Increased accuracy of
distanceonHyperbolicfor distant points. distanceon theProbabilitySimplexreturns a number for every pair of points, also for a point and itself.distance,logandconnected_by_geodesicon theSegremanifold, also with aWarpedMetric, leave the points they are given unchanged.distanceon theSymmetricPositiveDefinitemanifold returns zero only for equal points, also when their eigenvalues differ by many orders of magnitude.distanceunder theBuresWassersteinMetricand theGeneralizedBuresWassersteinMetricreturns a real number also when rounding makes the squared distance negative or complex, for example for a point and itself.embedandembed!of a tangent vector on theSegremanifold return the embedded tangent vector, andembed!writes it into the given array.- The embedding of an
ArrayProjectiveSpacethat stores its size in a field stores its size in a field as well. - embedding of the
Flagmanifold is now marked asEmbeddedManifoldTypeinstead ofIsometricallyEmbeddedManifoldType. estimated_sectional_curvatureaccepts any pair of tangent vectors spanning the plane, assectional_curvaturedoes.estimated_sectional_curvatureworks on manifolds whose points are arrays of arrays, such asSegre.expon theGeneralizedGrassmannmanifold follows the geodesic in the direction of the given tangent vector.exp,log,mid_point, the retractions and the inverse retractions onGrassmannandStiefelaccept points and tangent vectors given asStiefelPointandStiefelTangentVector.exponProbabilitySimplex(n; boundary = :closed)follows the geodesic within the face at points with zero entries.- The exponential map and the parallel transport on
Rotations(3)andOrthogonalMatrices(3)return finite values for tangent vectors shorter than1e-162. exp!, and with it the in-placeretract!andmid_point!, on theSegremanifold and under itsWarpedMetricreturn the correct point when the result is the starting point itself.expandexp_fusedon the sphere can be differentiated with forward-mode automatic differentiation at the zero tangent vector, so thatManifoldDiff.gradientandManifoldDiff.hessianwith a forward-modeTangentDiffBackendwork on the sphere.exp!on theStiefelmanifold with theCanonicalMetriccan write its result into its own starting point.exp!into anSPDPointstores an orthonormal eigen decomposition, so the resulting point is correct also when it does not store its matrix, and equals the result ofexp.FiberBundleProductRetractionon aVectorBundletransports the fiber part with the vertical vector transport method, the oneFiberBundleInverseProductRetractionuses.flatandsharpon aMetricManifoldapply the local metric to coefficients in an induced basis, asflat!andsharp!do.- The basis vectors of a
FiberBundlealong the base manifold have a fiber part of the size of the fiber elements instead of the base manifold elements. - charts of the
DefaultTorusAtlasare now correctly switched according to the distance of the point from the chart centre (get_chart_index,check_chart_switch). get_coordinateson theCholeskySpacedivides the diagonal entries by the diagonal of the point, so that the coordinates are those of the orthonormal basis and invertget_vector.get_coordinateson the number-valuedEuclideanspace accepts a tangent vector given as a number, for real and for complex coefficients.get_coordinates,get_coordinates!,get_vectorandget_vector!in the cotangentDefaultOrthonormalBasiswork on everyFiberBundle, including tangent bundles withArrayPartitionpoints.get_coordinates!andget_vector!on the realGrassmannmanifold and the differentiated retraction vector transports onStiefelaccept points and tangent vectors given asStiefelPointandStiefelTangentVector.get_coordinatesandget_vectoron theHyperbolicspace accept a diagonalizing basis whose direction is aHyperboloidTangentVector.get_coordinates,get_vectorandget_basison the complexInvertibleMatriceswork for real and for complex coefficients, in the basis of the embedding.get_coordinatesandget_vectoronKendallsPreShapeSpaceuse an orthonormal basis of its tangent space.get_coordinates,get_coordinates!,get_vectorandget_vector!in the cotangentDefaultOrthonormalBasiswork on aMetricManifold.get_coordinates!on theSegremanifold and under itsWarpedMetricwrites the coordinates into the given vector.- The manifold of complex
SkewHermitianMatricesnow correctly supports the real orthonormal basis (DefaultOrthonormalBasis(ℝ)) of its tangent space instead of mistakenly implementing the complex coefficient basis (DefaultOrthonormalBasis(ℂ)). get_coordinatesandget_vectoron the sphere and the projective space, andparallel_transport_toon the projective space, accept points with integer entries.get_coordinates!on theTuckermanifold writes the coordinates of the default orthonormal basis into the given vector.get_coordinateson theTuckermanifold works in theDefaultOrthogonalBasisand theDefaultBasis.get_embeddingon anArraySpherecreated withparameter = :fieldreturns aEuclideanspace that stores its size in a field as well.get_embeddingon theObliqueandMultinomialMatricesmanifolds returns the space of matrices of their size, so that the extrinsic mean andembedon aValidationManifoldwork for them.get_pointon aProductManifoldaccepts parameters given as anArrayPartition.get_vectorin the orthonormal basis of the number-valuedEuclideanspace returns a number when the point is a number.get_vectoronHeisenbergMatricesreturns the tangent vector for every sizen, as its in-place variant does.get_vectoron complexSymmetricMatricesreturns a Hermitian matrix, so that it invertsget_coordinates.get_vectorunder theLogCholeskyMetriconSymmetricPositiveDefiniteuses the Cholesky factor of the point, so that it invertsget_coordinatesand its basis vectors are orthonormal at every point.- Indexing and
viewof points on aPowerManifoldwork when the point is aVectorOfArrayfrom RecursiveArrayTools.jl. - Indexing and
viewof points on aPowerManifoldwork for arrays from NamedDims.jl and FillArrays.jl. horizontal_component, and with itexp,innerandnorm, onKendallsShapeSpacereturn a value when the landmarks span fewer dimensions than the space, such as collinear points in the plane.incident_log!on aGraphManifoldoverwrites the tangent vector it is given, so that it returns the same result asincident_loginstead of adding the logarithm to the existing tangent vector.innerof twoTFVectors works on theLorentzmanifold and for the canonical and submersion metrics onStiefel, the Bures-Wasserstein, generalized Bures-Wasserstein and log-Cholesky metrics onSymmetricPositiveDefinite, and the warped metric onSegre.innerandnormofTFVectors work on aMetricManifoldwith theEuclideanMetric.innerunder theBuresWassersteinMetriconSymmetricPositiveDefinitereturns a number of the element type of its arguments.inverse_retractwithNLSolveInverseRetractionnow correctly applies tangent space projections.inverse_retractwithQRInverseRetractionon a complexStiefelmanifold returns a tangent vector and invertsretractwithQRRetraction.is_flatonDeterminantOneMatricesreturnsfalsefor sizes two and larger.is_flatonMultinomialSymmetric(2)returnstrue.is_flatonSymmetricPositiveDefinitewith theLogEuclideanMetricreturnstrue.is_pointonFixedRankMatricesaccepts a plain matrix of rankkfor everykand requires the rank to be exactlyk, also for anSVDMPoint.is_pointon the complexGrassmannmanifold accepts points in the projector representation and rejects projectors that are not Hermitian.is_pointon theHyperrectanglechecks the bounds also when keyword arguments such asatolare given.is_pointonSymmetricPositiveDefiniteaccepts a matrix that is symmetric up to rounding, such as a result ofexp; the tolerance can be set with the keywords ofisapprox.is_pointonSymmetricPositiveSemidefiniteFixedRankchecks the rank ofq*q', so that it accepts a point of rankkwith a small last singular value.is_vectoronFixedRankMatricesreturnsfalsefor a tangent vector whoseVtfactor is not orthogonal to the point.is_vectoron theGeneralizedStiefelandGeneralizedGrassmannmanifolds accepts complex tangent vectors and those withp'BX = 0, with a tolerance relative to the length of the vector.is_vectoronGrassmannrequiresp'X = 0relative to the size ofXwith the keywordsatolandrtol, so that vectors that only rotate the basis of the point are rejected.is_vectorandprojecton theSpecialUnitaryMatricesrequire and return tangent vectors of trace zero.is_vectoronStiefelchecks thatp'Xis skew-Hermitian withisapproxand an absolute tolerance scaled by the size ofX, so that it accepts complex tangent vectors and the tangent vectors ofStiefel(n, 1).is_vectoron theTuckermanifold checks that the factor matrices of a tangent vector are orthogonal to those of the point, and it accepts the keywordsatolandrtol.isapproxon theEssentialManifoldreports two representatives of the same point as equal.isapproxfor tangent vectors on aFiberBundlecompares the base part as a tangent vector at the base point.isapproxon aFlagaccepts points in the orthogonal representation.isapproxonGrassmann,GeneralizedGrassmannandKendallsShapeSpacefinds every point approximately equal to itself, also withatol = 0.jacobi_fieldandadjoint_Jacobi_fieldon theCircleand on the number-valuedEuclideanspace apply the weight function they are given.kretschmann_scalarnow correctly uses the metric instead of the inverse for one of the contractions.local_metricon the realSpherein theStereographicAtlasreturns aDiagonalmatrix of the size of the parameters instead of aUniformScaling, so that chart-based curvature functions such asricci_curvaturework in that atlas.logon the complexCirclereturns a tangent vector for every pair of opposite points and nearly opposite points.logandinverse_retractwork on aPowerManifoldof complexCircles.logonSpecialUnitaryMatricesreturns the tangent vector of minimal norm, which has trace zero.logonSphereandArraySpherereturns a tangent vector for every pair of opposite points and is more accurate.- The logarithmic map of the
Stiefelmanifold with theCanonicalMetricalso works for two coinciding or nearly coinciding points when2k > n. logonSymmetricPositiveDefinitewith theBuresWassersteinMetrictakes the square roots of the products of the two points, so that it invertsexpalso for points that do not commute.logon theSymmetricPositiveDefinitemanifold returns a tangent vector whose length is the distance also whenqis more than sixteen orders of magnitude smaller thanp, such asq = 1e-9 * Iandp = 1e9 * I.manifold_dimensiononDeterminantOneMatricesover the complex numbers counts the determinant condition as the two real conditions it is.manifold_dimensionon theHamiltonianMatricesreturns the dimension of the manifold, over the real and over the complex numbers.manifold_volumeofOrthogonalMatrices,Rotations,UnitaryMatricesandSpecialUnitaryMatricesis the volume with respect to the metric ofinner.manifold_volume,volume_densityandriemann_tensoron theProbabilitySimplexreturn the correct values for every point and tangent vector (sphere radius was incorrectly set to 1 instead of 2 for the diffeomorphism).Manifolds.Test.test_default_retractionandManifolds.Test.test_default_vector_transport_methodcompare with an expected value only when one is given.Manifolds.Test.test_geodesiccompares the speed of the geodesic withnorm(M, p, X), so that it passes for end times other than one.Manifolds.Test.test_manifoldcompares the expected result oflogwhen one is given.Manifolds.Test.test_manifoldcompares the expected sectional curvature and its expected minimum and maximum when they are given.- The
:Seedproperty ofManifolds.Test.test_manifoldand theseedkeyword ofManifolds.Test.test_randseed the random number generator before sampling. Manifolds.Test.test_mid_point, and with itManifolds.Test.test_manifold, compare the mid-points of both argument orders by default and skip this comparison fortest_symmetry = falseor the property:TestMidpointSymmetry => false.Manifolds.Test.test_parallel_transportandManifolds.Test.test_vector_transportcompare the transported vector in the tangent space at the point it is transported to.Manifolds.Test.test_retract,test_sectional_curvature,test_sharp,test_shortest_geodesicandtest_vector_transportcompare their result with a supplied expected value.mean!(M, y, x)uses the default estimation method for the type of the points, asmean(M, x)does.mean(M, x)andmean(M, x, w)pass their keyword arguments to the estimation method, also on decorator manifolds.meanwithGeodesicInterpolationand a shuffling generatorshuffle_rngskips exactly the points of weight zero.mean_and_varwithGeodesicInterpolationreturns the weighted mean and variance also when the first points have weight zero.median(M, x)andmedian(M, x, w)pass their keyword arguments to the estimation method.medianwithWeiszfeldEstimationreturns the point itself for a single point and for coinciding points.metricreturnsEuclideanMetric()on the projective spaces,Elliptope,Spectrahedron,SymmetricPositiveSemidefiniteFixedRank,KendallsShapeSpaceandParametricSurface, so thatriemannian_gradientconverts a Euclidean gradient on them.mid_pointon the complexCirclereturns the midpoint of the shortest geodesic for every pair of points.NLSolveInverseRetractionwithproject_point = trueleaves the point it is given unchanged.normin the orthogonal representation of a flag manifold is fixed (it had wrong scaling).parallel_transport_directionon theGrassmannmanifold allocates its result directly instead of computing a geodesic for it.parallel_transport_toon theCholeskySpace(and hence under the log-Cholesky metric) keeps the strictly lower part of the tangent vector, so that the transport is an isometry.parallel_transport_toandparallel_transport_directionwork onOrthogonalMatrices,UnitaryMatricesandSpecialUnitaryMatricesas they do onRotations.- Parallel transport on the
SymmetricPositiveDefinitematrices returns the vector unchanged when both points are equal. - The plotting recipe of
Sphere(2)draws the solid surface with the resolutionsurface_resolutionalso when it differs fromwires. power_dimensionson theObliquemanifold returns a one-element tuple, like the other power manifolds.projectandproject!work for the realCircleand hence for theTorus.projectonto the tangent space of theElliptoperemoves the vertical part with the right sign, so that it is a projection onto the horizontal space.projectfrom aEuclideanembedding into aEuclideanmanifold of fewer array dimensions returns the corresponding entries.project,embed,zero_vectorandis_vectoron a complexFixedRankMatricesmanifold work with complex tangent vectors.projectonto the tangent space of theGeneralizedGrassmannmanifold removes the whole part along the columns of the point, so that it andrandreturn tangent vectorsXwithp'BX = 0.projectonto a complexGeneralizedStiefelmanifold, and its default retraction, return a point of the manifold also when the weight matrix is the identity.project!on all three models ofHyperbolicandzero_vector!on the Poincaré ball and half space return the tangent vector they fill.projectandrandonKendallsShapeSpacereturn horizontal tangent vectors, so that the basis fromProjectedOrthonormalBasisis orthonormal.projectof a matrix onto the multinomial doubly stochastic manifolds runs Sinkhorn's algorithm for up to 1000 iterations, stops once every column sum is withintoleranceof one, and warns when it does not get there.projectonto the tangent space ofMultinomialDoubleStochasticreturns a tangent vector at every point, also at the uniform matrix of two or four rows.project!onto the multinomial doubly stochastic manifolds accepts a matrix with integer entries when the result is a floating point matrix.projectonto the tangent space ofMultinomialSymmetric, and with itriemannian_gradientandriemannian_Hessian, use the symmetric part of a nonsymmetric input, so that they return the correct tangent vector.- Point
project!onto theSPDFixedDeterminantreturns the projected point. projectonto the tangent space of the complexSymmetricMatricesreturns the Hermitian part, so that its result is a tangent vector.projectonto the tangent space of theTuckermanifold also works in its allocating form and returns aTuckerTangentVector.projectonto a tangent space andembedof a tangent vector on the quaternionicUnitaryMatrices(1, ℍ)take the point into account, so that they and the default vector transport follow the Lie algebra representation of tangent vectors.randdraws random points and tangent vectors onCenteredMatrices,Elliptope,SpectrahedronandSPDFixedDeterminant.randonDeterminantOneMatricesdraws tangent vectors from the whole tangent space, andis_vectorthere takes a relative tolerancertoland accepts tangent vectors of any length.randon theEssentialManifolddraws tangent vectors in the horizontal space, so that they have no part along the equivalence class.- Random tangent vectors of a
FiberBundleare drawn in the fiber over the base point ofvector_at. randon a complexFixedRankMatricesmanifold returns complex points and tangent vectors, and its keywordσscales the singular values of a point and the factors of a tangent vector.randwithvector_aton aFlagmanifold with an orthogonal representation returns anOrthogonalTangentVectorinstead ofOrthogonalPoint.randon a complexGeneralizedGrassmannmanifold returns a point, andprojectonto it returns a point also when the weight matrix is the identity.randon a complexGeneralizedStiefelmanifold returns a point or, withvector_at, a tangent vector.randon theHamiltonianMatricesdraws its two off-diagonal blocks independently, as documented.randandrand!on theHyperbolicspace accept points and tangent vectors of the hyperboloid, the Poincaré ball and the Poincaré half space types.randon theHyperbolicspace draws tangent vectors whose coordinates in an orthonormal basis are independent normal with standard deviationσat every base point.randonKendallsPreShapeSpaceandKendallsShapeSpacedraws in the number type of the array it fills, so that random points inBigFloatpassis_point.randonMultinomialSymmetricpasses its keyword arguments other thanσto the projection onto the manifold, as documented.randon theMultinomialSymmetricPositiveDefinitemanifold rejects samples for which Sinkhorn's algorithm did not converge, so that it no longer occasionally returns points whose rows do not sum to one.randonMultinomialSymmetricPositiveDefinitereturns a random point, and withvector_ata random tangent vector drawn as onMultinomialSymmetric.randonOrthogonalMatriceswithvector_atdraws the projection of a normally distributed matrix with standard deviationσ.randwithvector_atandchange_metricon theProbabilitySimplexand theMultinomialMatriceswork at points with small entries (near the boundary).randandrand!on theSegremanifold draw from a given random number generator.randon the quaternionicStiefelandGrassmannmanifolds returns a point.randwithvector_atonStiefel,GeneralizedStiefel,GrassmannandGeneralizedGrassmannscales the random tangent vector byσ, as documented.randonSymmetricPositiveDefinitedraws Gaussian tangent vectors whose coordinates in an orthonormal basis at the base point have standard deviationσ, by default1/sqrt(n), the:Riciandraw accepts anSPDPoint, andrand!into anSPDPointstores the matrix square roots of the drawn point.randwith avector_aton theSymplecticMatricesuses the generator it is given, so seeded draws repeat.retractwith theOrthographicRetractiononFixedRankMatricesreturns the point of its documented formula.retract,retract_fusedandinverse_retractwith theOrthographicRetractionand theOrthographicInverseRetractiononFixedRankMatricesaccept keyword arguments.retracton aFlagwithout a retraction method uses the QR retraction for points in the orthogonal representation.retractwithQRRetractiononGrassmannmultiplies each column by the sign of its own diagonal entry of the triangular factor, as documented.retractwith the defaultProjectionRetractionon theHyperrectanglereturns a point inside the box.retractwithSoftmaxRetractionon theProbabilitySimplexapplies correct scaling byp, keeps zero entries of a point on the closed simplex and does not overflow for large exponents.retract,retract_fusedandinverse_retractwith thePolarLightRetractionand thePolarLightInverseRetractiononStiefelaccept keyword arguments.riemann_tensoron the realGrassmannmanifold adds the second term of its documented formula, so thatsectional_curvaturethere is never negative.riemann_tensoron theSegremanifold, also under aWarpedMetric, returns the element type of the point instead of alwaysFloat64.riemannian_gradienton theHyperbolicspace changes the representer before it projects onto the tangent space, so that it returns the Riemannian gradient.riemannian_gradientonMultinomialMatricesreturns the Riemannian gradient with respect to the Fisher–Rao metric.riemannian_gradientonPositiveNumbersaccepts a point and a Euclidean gradient given as numbers.riemannian_gradienton aPowerManifoldwith the array or the nested representation computes the gradient factor by factor, with the gradient of the factor manifold.riemannian_gradienton theSymplecticGrassmannmanifold returns the gradient given in its documentation.riemannian_gradientonSymplecticMatricesreturns the gradient with respect to theRealSymplecticMetric, the metric thatinnerimplements.riemannian_gradienton theSymplecticStiefelmanifold accepts theembedding_metrickeyword in its allocating form and returns the same result with it as without it.riemannian_HessianonFixedRankMatricesworks for matrices with more columns than the rank.riemannian_Hessianon theHyperbolicspace follows its documented formula and leaves the Euclidean Hessian it is given unchanged.riemannian_HessianonOrthogonalMatricesandUnitaryMatricesreturns the correct Hessian at every point.riemannian_Hessianworks onPositiveVectors,PositiveMatricesandPositiveArrays.riemannian_Hessianon theStiefelmanifold with theCanonicalMetricor aStiefelSubmersionMetricapplies the inverse of the metric, so it returns the Hessian with respect to that metric.sectional_curvature_matrixandestimated_sectional_curvature_matrixreturn their result in the floating-point number type of the point.sectional_curvature_minonSymmetricPositiveDefinitereturns-0.5, the smallest sectional curvature of the affine invariant metric.- The
Obliquemanifold prints its number system as the positional argument its constructor takes, so that its printed form evaluates back to it. showmethod forSpecialUnitaryMatricesfor nicer printing.skewness(M, x[, w])andkurtosis(M, x[, w])return the same values as with the precomputed meanmean(M, x[, w]), also where the mean is computed by geodesic interpolation. This avoids using the Welford's algorithm by default, which is very inaccurate on non-flat manifolds.vector_transport_directionandvector_transport_towithDifferentiatedRetractionVectorTransport(QRRetraction())onStiefelcompute the derivative of the QR retraction.vector_transport_direction!on aVectorBundlemoves the fiber part with the transport of the fiber, asvector_transport_directiondoes.vector_transport_toon theGeneralizedGrassmannmanifold usesProjectionTransportby default.vector_transport_towithProjectionTransportis available on theSegremanifold with aWarpedMetric.vector_transport_to!withProjectionTransporton theSegremanifold returns the transported vector also when the result is the tangent vector being transported.vector_transport_towithProjectionTransporton a complexTuckermanifold returns the projection onto the tangent space at the target point.volume_densityon theHyperbolicspace measures the tangent vector with its Riemannian norm, so that it is the determinant of the differential of the exponential map at every point.volume_densityon aPowerManifoldin a nested representation returns the product of the volume densities of its components.volume_densityonRotationsandOrthogonalMatricesreturns the determinant of the differential of the exponential map.volume_densityonSymmetricPositiveDefiniteuses the eigenvalues ofp^(-1/2) X p^(-1/2)and half their differences, so that it is the determinant of the differential of the exponential map atp.Weingartenis available on everyAbstractSphere, so also onArraySphere,KendallsPreShapeSpaceandSphereSymmetricMatrices, and uses the real part of the inner product for complex and quaternionic points.WeingartenonRotations,OrthogonalMatricesandUnitaryMatricesreturns a tangent vector in the Lie algebra, like its tangent vector argument.WeiszfeldEstimationis exported, like the other estimation methods formeanandmedian.
0.11.32 (2026-09-30)
Added
- The
Veronesemanifold of nonzero symmetric rank-one tensors. (#924)
0.11.31 (2026-09-25)
Fixed
- Forwarding of statistics-related functions through decorators.
0.11.30 (2026-09-22)
Added
- Chart-based solvers for Jacobi fields, exponential- and logarithmic map differentials and their adjoints, as well as exponential map volume density:
solve_chart_jacobi_field,
solve_chart_volume_density, solve_chart_differential_exp_basepoint, solve_chart_differential_exp_argument,solve_chart_differential_log_basepoint,solve_chart_differential_log_argument,solve_chart_adjoint_differential_exp_basepoint,solve_chart_adjoint_differential_exp_argument,solve_chart_adjoint_differential_log_basepoint,solve_chart_adjoint_differential_log_argument.
GrassmannAtlasandStiefelAtlas(withStiefelChart) for real Grassmann and Stiefel manifolds.- Chart operations and induced-basis support for the stereographic atlas on spheres.
- Extended the "Working in Charts" tutorial covering new additions.
PowerAtlasandProductAtlasforPowerManifoldandProductManifold, respectively, with induced-basis support.ParametricSurfacemanifold for handling parametric surfaces (with or without boundaries and corners) in Euclidean space with the metric induced by the embedding.
Changed
- The documentation now uses DocumenterCodeBlocks.jl
- The documentation now has a landing page using DocumenterLandingPage.jl
DocumenterCitations.jlwas bumped to version 1.5.- Several docstrings were rewritten to start with a short summary sentence, such that
DocumenterCodeBlocks.jlcan display them in tooltips. - More atlas and chart-related operations are now exported:
get_chart_index,transition_map,transition_map!,transition_map_diffandtransition_map_diff!. - Chart-based geodesic and parallel-transport ODE solvers use in-place problem definitions for performance.
get_default_atlasforPowerManifoldandProductManifoldnow returnPowerAtlasandProductAtlasof default atlases of wrapped manifolds instead of theRetractionAtlas.
Fixed
- Edited several doc strings to have a first sentence / line with less than 200 characters to fit the new Doc string tooltips.
ricci_tensornow uses the correct contraction for the Ricci tensor in terms of the Riemann curvature tensor, fixing a bug in thericci_tensorthat could lead to wrong sign of the result.
0.11.29 (2026-07-22)
Added
vector_transport_to_project!forTuckermanifold. (#909)
Changed
- SciML-related extensions now import interfaces and solvers from their owner packages and explicitly trigger on the required SciML weak dependencies.
Fixed
- PythonPlot was replaced with GR to fix documentation building on CI.
0.11.28 (2026-06-15)
Added
change_metric,change_representerextended to allGeneralUnitaryMatrices.get_coordinatesandget_vectoron theUnitaryMatricesmanifold.
0.11.27 (2026-06-06)
Added
- a
DefaultOrthonormalBasisfor theGrassmannmanifold in Stiefel representation. (#904) - improved documentation of the tangent space.
0.11.26 (2026-05-22)
Changed
- Update the function of
vector_transport_to(::Segre, p, X, q, ::ProjectionTransport)for Segre Manifold (#898)
0.11.25 (2026-05-20)
Added
- An allocating variant of
levi_civita_affine_connection!
Changed
- Argument name for
christoffel_symbols_second!, fromitoindex. The previousioverlapped with a for loop index, also namedi, later in the function, thus resulting in incorrect behavior.
0.11.24 (2026-05-19)
Added
vector_transport_to(::Segre, p, X, q, ::ProjectionTransport)for Segre Manifold (#893)
0.11.23 (2026-04-29)
Changed
- Bumped
RecursiveArrayToolscompat to2, 3, 4andOrdinaryDiffEqcompat to6.31, 7, allowing the SciMLBase 3 ecosystem (RAT 4 / OrdinaryDiffEqCore 4 / SciMLBase 3). ManifoldsOrdinaryDiffEqDiffEqCallbacksExtnow usesRodas5Pinstead of the removedRodas5re-export from OrdinaryDiffEq, andSciMLBase.terminate!instead of the removedOrdinaryDiffEq.terminate!. The defaultsolverforsolve_chart_exp_ode/solve_chart_parallel_transport_odeis nowAutoVern9(Rodas5P()).
Fixed
ManifoldsBoundaryValueDiffEqExtnow triggers onBoundaryValueDiffEqMIRK(the only subpackage actually used) and requires version1.17, avoiding a transitive resolver pickingBoundaryValueDiffEqCore2.1 withBoundaryValueDiffEqMIRK/BoundaryValueDiffEqFIRK1.13, a combination whose precompile workload fails (SciML/DifferentialEquations.jl#1136). The1.17lower bound also includes the upstream fix for SciML/BoundaryValueDiffEq.jl#484 (UndefRefError in MIRK adaptive mesh refinement on nonlinear BVPs under the SciMLBase 3 / RAT 4 stack), sosolve_chart_log_bvpworks with defaultadaptive = true.solve_chart_log_bvpnow uses a function-valued initial guess (linear interpolation betweena1anda2) and the callablebc!(residual, u, p, t)API (u(tspan[1]),u(tspan[2])) compatible withEvalSol.kwargs...are now forwarded tosolve(previously silently dropped), so callers can pass throughadaptiveand other solver options.
0.11.22 (2026-04-24)
Added
- A clarification on the use of AI in the CONTRIBUTING.md (#886)
Changed
- Improved performance of
embedfor embedding tangent vectors ofFixedRankMatrices(#885).
0.11.21 (2026-04-03)
Changed
- bump compat of RecursiveArrayTools to 4
- introduce a Project.toml workspace and a separate Project.toml for the
test/folder - move julia package dependency checks from CompatHelper to dependabot, since that one can group PRs.
0.11.20 (2026-03-31)
Added
- a spell checker following crate-ci/typos
Changed
- Improved formatting of the references in the Readme.md (#869)
Fixed
get_vectorson Stiefel no longer returns incorrect vectors in certain cases.
0.11.19 (2026-03-21)
Added
recursive_bottom_eltypemethods forTuckerTangentVectorandTuckerPointfor better compatibility withRecursiveArrayTools.jl.
Changed
default_inverse_retraction_method,default_retraction_methodanddefault_vector_transport_methodforTuckermanifold are nowProjectionRetraction,ProjectionRetractionandProjectionTransport, respectively, since the previous defaults were not available for the manifold.
Fixed
- Fixed broadcasting of
TuckerTangentVectorinsideArrayPartition.
0.11.18 (2026-03-20)
Added
- Random point and tangent vector generation on the
Tuckermanifold.
0.11.17 (2026-03-13)
Fixed
- Fixed polar retraction on
UnitaryMatrices.
0.11.16 (2026-03-11)
Fixed
- Fixed
embed!onSegremanifold.
0.11.15 (2026-03-04)
Fixed
- fixed a missing transpose in the inverse polar light retraction.
0.11.14 (2026-03-02)
Added
- a new retraction and its inverse on the Stiefel manifold (#858)
- similar to Manopt.jl, we now do typechecking with crate-ci/typos (#858)
Fixed
- fixed a bug where the second vector in the test suite had to be both in the first and the second points tangent space added a new
:SecondVectorto provide the second tangent vector in the first points tangent space (e.g. forinner) (#858)
0.11.13 (2026-02-24)
Changed
rand!onUnitaryMatricesand the QR retraction methods were rewritten to be faster and more GPU array-compatible.
0.11.12 (2026-02-04)
Added
- Chart-based variants of
christoffel_symbols_first,einstein_tensor,det_local_metricandlog_local_metric_density.
Changed
- Deprecated variants of
det_local_metric,einstein_tensor,inverse_local_metric,local_metric,local_metric_jacobian,ricci_curvaturethat receive a point and a basis as arguments. New variants that work in charts should be used instead.
0.11.11 (2026-01-24)
Changed
Hyperrectanglenow hashas_componentsdefined totrue, as well as r-norm support fornormanddistance.
0.11.10 (2026-01-07)
Added
change_representerandchange_metricforRotationsmanifold fromEuclideanMetric.
0.11.9 (2025-12-15)
Fixed
projectfor tangent vectors onHyperrectangleno longer truncates unnecessarily to the domain ofexp(#851).DefaultMetricis now internally imported fromManifoldsBase.jl.
0.11.8 (2025-12-09)
Changed
MetricManifoldandConnectionManifoldwere moved toManifoldsBase.jl(#848).
0.11.7 (2025-11-27)
Added
- added a more structured version for the extension with
Test.jlthat now introduces (#839)- a complete test suite
Manifolds.Test.test_manifold(M; kwargs...)it follows the structure of the one recently written forLieGroups.jl. - a lot of small test functions like
Manifolds.Test.test_exp(M, p, X; kwargs...)with the goal of providing one test for each individual API function
- a complete test suite
- New methods and functions for working in a chart:
local_metric,inverse_local_metric,levi_civita_affine_connection!,christoffel_symbols_second. - Default implementation of
get_vector!andget_coordinates!forInducedBasisusing automatic differentiation. - A new tutorial that describes working with the Levi-Civita connection for a Riemannian metric defined through
innerin a chart.
Fixed
- the circle represented in angles (
Circle()) had a wrong default and provided aprojectandembedmethod while not being an embedded manifold, this is now fixed, but might cause errors for some users. To fix the errors, note that the old behavior ofembed(M, p)was just returningp, and the old behavior ofproject(M, p)wasManifolds.sym_rem(p). (#839)
0.11.6 (2025-11-19)
Changed
randonHyperrectanglereturns valid points in the presence of-InfandInf.check_pointonHyperrectanglechecks that there are noNaNs.
0.11.5 (2025-11-13)
Added
randforSkewHermitianMatrices
0.11.4 (2025-11-07)
Changed
- Random tangent vectors on
Hyperbolicare now much shorter (their norm is on the order of 1) to guide users away from numerical issues with long vectors.
0.11.3 (2025-11-04)
Fixed
- fixes a few inconsistencies regarding
get_embedding, which now consistently uses a point type as positional second argument.
0.11.2 (2025-10-30)
Fixed
- fixed the
default_retraction_methodforAbstractSphereto be the stabilized exponential map to avoid accumulations of rounding errors when the tangent vector is not exactly tangent. - fixed the contributing.md to mention runic as the code formatter.
0.11.1 (2025-10-24)
Fixed
- fix a few small errors regarding the forwarding of
retract,retract_fused, andinverse_retractwhen using aMetricManifold.jl(cf (#823)) - document why we kept that
vector_transport_directionandvector_transport_toare not automatically forwarded inMetricManifold.jl
0.11.0 (2025-10-02)
Added
- a function
metric(M)analogous toget_embedding(M)andconnection(M)that returns the metric of the manifoldM. - a
DefaultMetric()type to specify that the manifold uses some specific metric, that is not further named.
Changed
- Switch to using Runic.jl as code formatter
- refactored all manifolds to use a parameter order of
{𝔽, T}where𝔽is the number type andTthe type of size parameter (either aTypeParameteror aTuple). this changed internallyArraySphere{T<:Tuple,𝔽}toArraySphere{𝔽, T<:Tuple}CenteredMatrices{T, 𝔽}toCenteredMatrices{𝔽, T}Euclidean{T, 𝔽}toEuclidean{𝔽, T}FixedRankMatrices{T, 𝔽}toFixedRankMatrices{𝔽, T}GeneralizedGrassmann{T, 𝔽, B}toGeneralizedGrassmann{𝔽, T, B}GeneralizedStiefel{T, 𝔽, B}toGeneralizedStiefel{𝔽, T, B}Grassmann{T, 𝔽, B}toGrassmann{𝔽, T, B}GeneralUnitaryMatrices{T, 𝔽, S}toGeneralUnitaryMatrices{𝔽, T, S}GraphManifold{G <: AbstractGraph, 𝔽, TM, T <: GraphManifoldType}toGraphManifold{𝔽, G <: AbstractGraph, TM, T <: GraphManifoldType}Grassmann{T, 𝔽}toGrassmann{𝔽, T}HamiltonianMatrices{T, 𝔽}toHamiltonianMatrices{𝔽, T}Oblique{T, 𝔽, S}toOblique{𝔽, T, S}SkewHermitianMatrices{T, 𝔽}toSkewHermitianMatrices{𝔽, T}Sphere{T, 𝔽}toSphere{𝔽, T}SphereSymmetricMatrices{T, 𝔽}toSphereSymmetricMatrices{𝔽, T}Stiefel{T, 𝔽}toStiefel{𝔽, T}SymmetricMatrices{T, 𝔽}toSymmetricMatrices{𝔽, T}SymplecticGrassmann{T, 𝔽}toSymplecticGrassmann{𝔽, T}SymplecticStiefel{T, 𝔽}toSymplecticStiefel{𝔽, T}Tucker{T, D, 𝔽}toTucker{𝔽, T, D}UnitaryMatrices{T, 𝔽}toUnitaryMatrices{𝔽, T}
- the functions
canonical_project,differential_canonical_project,horizontal_lift,horizontal_component,get_total_space, andvertical_componenthave been moved upstream toManifoldsBase.jl
Removed
- the trait system that was present additionally to the wrapper types for metric, embedding and connections. Those were moved to
default_Xfunctions and the dispatch was adapted to still obtain the same logic/behaviour. - the
QuotientManifoldtype, since it was not really used and its proper definition would require functionality from LieGroups.jl - all functions related to the
GroupManifolds type and corresponding traits using the old trait system have been removed here after being deprecated for a while now. These have been redesigned and introduced in the new package LieGroups.jl, see their How to transition fromGroupManifolds tutorial for all details. - all deprecated tangent vector types that had
TVectorin their name- instead of
HyperboloidTVectoruseHyperboloidTangentVector - instead of
OrthogonalTVectoruseOrthogonalTangentVector - instead of
PoincareBallTVectorusePoincareBallTangentVector - instead of
PoincareHalfSpaceTVectorusePoincareHalfSpaceTangentVector - instead of
ProjectorTVectoruseProjectorTangentVector - instead of
StiefelTVectoruseStiefelTangentVector - instead of
TuckerTVectoruseTuckerTangentVector - instead of
UMVTVectoruseUMVTangentVector
- instead of
- The
QuotientManifoldtype has been removed, the API for general (implicit) quotient manifolds is now already inManifoldsBase.jl. - The
retract_exp_ode!andretract_exp_ode_fused!functions were removed. The cases in which they were correct are covered bysolve_chart_exp_ode, and it was too easy to useretract_exp_ode!incorrectly.
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 paste 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 compare 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.size) 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.