Changelog
SageMath 10.8 (18 December 2025)
Improvements:
- Remove deprecated method
list_of_subsetsin favor ofsubset_familyin classManifoldSubset[#40647] - Remove deprecated method
characteristic_classin favor ofcharacteristic_cohomology_classin classDifferentiableVectorBundle[#41003] - Make error messages in
tensor/modulesstart with lower-case [#41211]
SageMath 10.7 (9 August 2025)
No change in the manifold code with respect to SageMath 10.6.
SageMath 10.6 (1 April 2025)
No change in the manifold code with respect to SageMath 10.5.
SageMath 10.5 (4 December 2024)
No change in the manifold code with respect to SageMath 10.4.
SageMath 10.4 (19 July 2024)
New features:
FiniteRankFreeModuleMorphism.display: Show matrix decorated with basis element names [#37825]FiniteRankFreeModule.isomorphism_with_fixed_basisnow gives an instance of the new classSetIsomorphism, and its inverse is defined [#37512]- Class
FreeModuleAutomorphismhas new methodscharacteristic_polynomial,fcpandminimal_polynomial[#37826] - New classes
FreeModuleEndset(as a subclass ofFreeModuleHomset) andFiniteRankFreeModuleEndomorphism(as a subclass ofFiniteRankFreeModuleMorphism) [#37831]
Bug fixes:
- Fix sign error in the Kerr metric of the manifold catalog [#37970]
- Small markup/formatting improvements in docstrings [#37829]
- Fix LaTeX output of
FreeModuleTensor.display_comp[#37823] - Fix bug in
TensorField.apply_map[#37822]
SageMath 10.3 (19 March 2024)
No change in the manifold code with respect to SageMath 10.2.
SageMath 10.2 (3 December 2023)
Improvements:
- Add
# needsmarkers in doctests for modularization [#36568]
SageMath 10.1 (20 August 2023)
Improvements:
- Add a few operations from linear symplectic geometry [#35354]
SageMath 10.0 (20 May 2023)
Improvements:
- Replace
\mboxby\textin manifold code [#35353] - Add
# optionaldoctest tags for modularization [#35267] - Add typing to tangent vectors [#35189]
- Document argument
is_openof methodscomplementanddifferenceof classManifoldSubset[#35040]
Bug fixes:
SageMath 9.8 (11 February 2023)
New features (see the Release Tour for examples):
- The
basismethod now works for tensor modules, not just the base module, and returns an instance of the new classTensorFreeSubmoduleBasis_sym, which represents the standard basis corresponding to an instance of theComponentsclass (or one of its subclasses) [#30229] FiniteRankFreeModule.tensor_modulehas new optional argumentssymandantisymto create a submodule of the tensor module spanned by tensors with prescribed symmetries; new methodssymmetric_poweranddual_symmetric_powerhave been added [#30229]- New method
isomorphism_with_fixed_basisfor tensor modules [#34427] - Tensor products of modules of tensor fields have been implemented
via the new methods
tensor_productandtensor_power[#34589]
Improvements:
- Sparse iterator for tensor components [#29619]
- New implementation class
FiniteRankDualFreeModule[#30241] - Put tensor modules of
FiniteRankFreeModulein the categoryModules(R).TensorProducts()[#34448] - Canonicalize
symandantisymin tensors [#34451] - Faster fast path for
tensor_module,exterior_poweranddual_exterior_powerinVectorFieldModule[#34486] - Make
FiniteRankFreeModule.tensor_module(0, 1)return the dual [#34474] - Modernize the use of
super()[#34532] - Slight documentation update for modules built upon a
FiniteRankFreeModule[#34792]
Bug fixes:
- Fix wrong link in the documentation of topological submanifolds [#34565]
SageMath 9.7 (19 September 2022)
New features (see the Release Tour for examples):
- Tensor products of free modules of finite rank have been implemented, via the new method tensor_product; in particular this regards free modules of tensor fields on parallelizable manifolds (ticket #31276)
- Class
Basis_abstractnow inherits fromAbstractFamily, so that vector bases are endowed with methodsitems,keysandvalues(ticket #30300)
Improvements:
- Classes
FiniteRankFreeModuleandTensorFreeModulenow inherit from a common abstract base class:FiniteRankFreeModule_abstract(ticket #34424) - Construction methods added to free modules of finite rank (ticket #30235)
- Imports from
sage.arith.allandsage.rings.allhave been replaced by more specific imports (ticket #34428)
Bug fixes:
Manifold.options.omit_function_argumentswas ineffective for arguments that were not in alphabetic order (ticket #33957)- Some docstrings have been fixed (ticket #34158)
SageMath 9.6 (15 May 2022)
New features (see the Release Tour for examples):
- Symplectic structures have been introduced; this encompasses symplectic forms, Poisson bivectors, musical isomorphisms, Hamiltonian vector fields, Poisson brackets, Liouville volume forms and symplectic Hodge duality; see the Release Tour for examples (ticket #30362)
- Projective spaces have been added to the manifold catalog (ticket #33221)
-
The Manifold constructor has been slightly improved: when parameters such as
diff_degreeormetric_nameare given, the implied structure is selected without having to specify it via the parameterstructure(ticket #33001)
Improvements:
Some performance improvements have been implemented:- No try to simplify trivial expressions consisting only of a single number or symbolic variable (ticket #33110)
- Use the first Bianchi identity in the computation of the Riemann tensor (ticket #33110)
- Compute volume forms with contravariant indices only as needed (ticket #33110)
Bug fixes:
- Better handling of default charts on spheres (ticket #32953)
- Fix a bug in
ExpressionNicewith composite variables (ticket #33399) - Fix a bug regarding the name of interior products resulting to zero (ticket #33780)
SageMath 9.5 (30 January 2022)
New features (see the Release Tour for examples):
- De Rham cohomology and characteristic classes have been improved, notably in terms of performance, and new features have been added; see here for details (tickets #29581 and #32270)
- The method plot of curves now automatically performs a coordinate change to make the plot in terms a specified chart, in case the curve has not known been initialized in this chart yet; see this example (ticket #32578)
Improvements:
- Faster generation of non-redundant indices for tensors with symmetries (ticket #32318)
- Unnecessary uses of symbolic functions removed from
sage.tensor.modules(ticket #32415) - Doctests involving
SRmarked optional insage.tensor.modules(ticket #32712) sage.tensor.modulesmade independent fromsage.manifolds(ticket #32708)
Bug fixes:
- Better handling of metrics on pseudo-Riemannian submanifolds (ticket #31781)
- Fix a few documentation issues (ticket #32457)
- Fix bug in multiple tensor contractions with scalar result (ticket #32355)
- Fix bug in coordinate range when restricting charts to subdomains (ticket #32929)
SageMath 9.4 (22 August 2021)
New features (see the Release Tour for examples):
- Unicode characters ⊗, ∧ , →, ↦, ∂/∂ are now used to display various operators in plain text mode, see e.g. the outputs in this tutorial (ticket #30473)
- The global constructors
RealLineandOpenIntervalare deprecated; use insteadmanifolds.RealLineandmanifolds.OpenInterval. Moreover, Sage's generic constructorRealSetnow returns a 1-dimensional manifold if the keyword argumentstructure='differentiable'is used, withRealSet(-oo, +oo, structure='differentiable')being equivalent tomanifolds.RealLine()(tickets #30832 and #31881) - While declaring a new coordinate chart, coordinate restrictions must now be passed
via the new keyword argument
coord_restrictions; consequently, the methodChart.add_restrictionsis deprecated (ticket #32102) - Coordinate charts have been endowed with the method
codomain(ticket #32089) - Manifold subsets have been endowed with new methods
declare_empty,declare_nonempty,is_empty,has_defined_points,declare_subset,declare_superset,declare_equal,equal_subsets,equal_subset_family,difference,complement,open_subset, andopen_cover_family; moreover, the methodsunion,declare_unionandintersectioncan now take an arbitrary number of arguments (tickets #31677, #31732, #31736, #31763, #31764 and #31798) - Families of manifold objects indexed by their names have been implemented through the new classes
ManifoldObjectFiniteFamilyandManifoldSubsetFiniteFamilyand the new methodssubset_family, superset_family and open_superset_family of manifold subsets (tickets #31680 and #31727) - Subsets or supersets of a manifold subset can now be treated as finite posets,
via the new methods
subset_poset,superset_posetof manifold subsets; for vizualization purposes, the methodssubset_digraphandsuperset_digraphhave been introduced (ticket #31680) - The method
open_coversof manifold subsets is now a generator ofManifoldSubsetFiniteFamilyinstances, instead of returning a list of lists, and the takes new keyword argumentstrivialandsupersets. Similarly, the methodsubsetsis a generator of subsets, instead of returning a frozen set (ticket #31718) - Topological closures of manifold subsets have been implemented
through the new class
ManifoldSubsetClosureand the new methodclosureof manifold subsets; in addition, manifold subsets are endowed with new methodsis_closedanddeclare_closed(ticket #31644) - Images of continuous maps have been implemented through the new class
ImageManifoldSubsetand the new methodimageof continuous maps, as well as the new methodas_subsetof submanifolds (ticket #31653) - Preimages of continuous maps have been implemented through the new class
ManifoldSubsetPullbackand the new methodpreimage(alias:pullback) of continuous maps (ticket #31688) - A tangent vector at a given point of a differentiable manifold can now be constructed
directly by means of the new method
tangent_vector, without having to explicitely construct first the corresponding tangent space (ticket #31609) - Scalar fields have been endowed with the method
copy_from(ticket #31654) - De Rham cohomology has been implemented via the new classes
DeRhamCohomologyRingandDeRhamCohomologyClass; the algebra of mixed differential forms has been turned into a de Rham complex (ticket #31691) - New method
set_compfor mixed forms (ticket #30272) - Characteristic classes on differentiable vector bundles are now endowed with a method
sequence, which provides the multiplicative/additive sequence associated with the characteristic class (ticket #30211) - Polyhedrons have been endowed with the method
affine_hull_manifold, which returns their affine hull as a manifold (ticket #31659)
Improvements:
- Remove Python 2 compatibility in internal code (ticket #31704)
- Improve immutability of scalar fields (ticket #30311)
- Make open subsets of immersed/embedded submanifolds immersed/embedded submanifolds (ticket #31674)
- Pass
nameandlatex_nameto copy method inset_restriction(ticket #31854) - Refine category of scalar fields (ticket #31883)
- Eliminate direct use of the
Chart._domainattribute (ticket #32009) - New method
Chart._parse_coordinatesattribute (ticket #32116) - Simplify the code of
VectorField.__call__(ticket #31633) - Slight speed-up of
copymethod of tensor fields (ticket #31658) - Refactor display behavior of mixed forms (ticket #31692)
- Immutability functionality for mixed forms (ticket #31706)
Bug fixes:
- The inverse of the inverse is now
selfinCoordChange(ticket #31923) - Fix bug in
Chart.__init__regarding the determination of top charts when two charts share the same coordinate symbols (ticket #32112) - Fix mixed form name bug for pullback bundle (ticket #31784)
- Fix pullback silent failure in some cases with multiple charts (ticket #31904)
SageMath 9.3 (9 May 2021)
New features (see also the Release Tour):
- Spheres of arbitrary dimension
have been added to the manifolds catalog; they are accessible via the command
manifolds.Sphere(n); see the S3 example (ticket #30804) - The ambient metric is used by default when computing the Hodge dual of a differential form; see this example (ticket #31322)
- If the codomain is omitted while declaring a diffeomorphism, a self-diffeomorphism is implied (ticket #31323)
- New method
copyfor bundle connections and improved handling of their mutability (ticket #30284)
Improvements:
- Immutability of chart functions (ticket #30310)
- Add folder for manifold examples (ticket #30799)
- Stronger categories for manifold examples: connectedness (ticket #31243)
- Documentation of item assignment behavior for bundle connections (ticket #31215)
- Mutability of sections and tensor fields (ticket #31255)
- Remove deprecated
forminput for bundle connections (ticket #31273)
Bug fixes:
- Fix trivial coercion of the type
Modules(QQ)(FiniteRankFreeModule(QQ, 3))(ticket #30174) - Fix
UniqueRepresentationbehavior of subintervals ofOpenInterval(ticket #30830) - Fix some typos in manifolds (ticket #31202)
SageMath 9.2 (24 October 2020)
New features (see also the Release Tour):
- Manifold orientability: orientations of differentiable manifolds, vector bundles and topological manifolds have been introduced (tickets #30178 and #30519)
- The exterior derivative of a differentiable form
fcan be obtained viadiff(f), instead off.exterior_derivative(), see this example (ticket #29953) - The methods
dot_product(),cross_product()andnorm()can be now be used for vector fields defined along a differentiable map, the codomain of which is a Riemannian manifold, see this example (ticket #30318) - The action of a bundle connection on sections has been implemented (ticket #30209)
- Euclidean spaces have been endowed with a distance function, making them metric spaces, see this example (ticket #30062)
- Unicode characters, in particular Greek letters, are now allowed in index notation for tensors (ticket #29248)
- Basis-dependent isomorphism between a
FiniteRankFreeModuleand an object in the categoryModulesWithBasis, see this example (ticket #30094) - Tensors on free modules can now be declared immutable, via the new method
set_immutable()(tickets #30181, #30275) - Chart functions have coercion via restriction (ticket #30267)
- Affine connections have been endowed with a
copymethod (ticket #30285)
Improvements:
- Improve assignement of bundle connections (ticket #30208)
- Simplify unique representation code for dependent modules in
FiniteRankFreeModule(ticket #30250) - Simplify
_repr_ofExtPowerFreeModuleandExtPowerDualFreeModule(ticket #30251) - Create a default basis in the base module if necessary in
TensorFreeModule._an_element_(ticket #30254) -
FiniteRankFreeModule: Move all module identifications to methodsexterior_power,dual_exterior_powerandtensor_module(ticket #30255) - Add test suite to
sage.tensor.modules.free_module_basis(ticket #30287) - Immutability and hashability for scalar fields (ticket #30266)
- Improve scalar field arithmetics via the new method
is_trivial_one(ticket #30291) - Declare sections of vector bundles with name only (ticket #30228)
- Immutability of affine connections (ticket #30280)
- Immutability of sections of vector bundles (ticket #30288)
- Speed up construction of high-dimensional Euclidean spaces (ticket #30061)
- Coercion from
ChartFunctionRingtoScalarFieldAlgebra(ticket #30112) - Some flake8 cleanup (ticket #30538)
Bug fixes:
- Normalize init argument for unique representation in
FiniteRankFreeModule(ticket #30169) - Wedge product of multivector field with scalar field (ticket #29628)
- Fix initialization of vector field with rational components (ticket #29639)
- Fix not equal comparison of mixed forms (ticket #30108)
- Failed conversion yields unconclusive error message (ticket #30191)
- Fix display of a continuous map between open intervals (ticket #30289)
- Fix unions of subsets of a fixed open set (ticket #30401)
- Fix
set_default_frameon parallelizable manifolds (ticket #30320)
SageMath 9.1 (20 May 2020)
New features (see also the Release Tour):
- Manifolds with a degenerate metric: degenerate submanifolds and degenerate manifolds (tickets #26355, #29080 and #29440); introduces degenerate metric, rigging, screen distribution, Weingarten map and shape operator; see example 1 and example 2.
- New functionalities in index notation for tensors
(ticket #28787);
for instance, it is now possible to perform a contraction on a sum:
a['^k_i']*(b['_kj'] + b['_jk'])yields the same result asa.contract(0, 2*b.symmetrize()). - New method
apply_map()for tensor fields (ticket #29244): applies a function to the coordinate expressions of all components of a tensor field in a given vector frame; this allows for operations like factorization, expansion, simplification or substitution.
Improvements:
- More flexible coercions in mixed form algebra (ticket #28916)
- Improved treatment of multiplication by zero of a mixed form (ticket #28921)
- Improved documentation of vector bundles (ticket #28963)
- Improved documentation of characteristic classes (tickets #28854 and #29470)
Bug fixes:
- Fix notation of the inverse of an automorphism that has an non-atomic name (ticket #28973)
- Fix bug in setting the calculus method on manifolds (ticket #29021)
- Wrong parent when using a differential form of degree zero (ticket #29570)
SageMath 9.0 (1 January 2020)
New features (see also the Release Tour):
- Vector bundles (ticket #28159): topological vector bundles, trivializations, local frames, simple sections, differentiable vector bundles and tensor bundles
- Characteristic classes on vector bundles (ticket #27784)
- Construction of a vector frame from a family of vector fields (ticket #28716)
- Multiple symmetries and multiple contractions with index notation (ticket #28784)
- More control on the numerical ODE solver for integrated curves and geodesics (ticket #28707)
Improvements:
- Improved computation of connection coefficients (ticket #28543)
- Improved treatment of scalar field restrictions (ticket #28554)
- Better treatment of the zero element of scalar and tensor fields (ticket #28562)
- Output dicts and lists copied (ticket #28563)
- Consistent naming of tensor fields and sections (ticket #28564)
- Mixed forms improvements (ticket #28578)
Bug fixes:
- Fix wedge product on the right with a scalar field (ticket #28579)
- Use standard notation for pullback and pushforward on manifolds (ticket #28600)
- Fix
set_restriction()behaviour when the subdomain is the domain itself (ticket #28628) - Unnecessary coordinate check while initializing an integrated curve (ticket #28669)
- Fix name of section modules on vector bundles (ticket #28690)
- Scalar fields raise
AttributeErroronshow_identifiers()call (ticket #28769)
SageMath 8.9 (29 September 2019)
New features:
- Tutorials about vector calculus (ticket #27703): a series of tutorials devoted to vector calculus in the 3-dimensional Euclidean space and in the Euclidean plane, both in Cartesian and curvilinear coordinates, added to SageMath standard documentation.
- Keyword argument
verbosechanged tocheckin the methodCoordChange.set_inverse(), with the default set toTrueand improved printed output (ticket #28422)
Bug fixes:
- Fix an issue in calculus on manifolds with incomplete set of transition maps (ticket #28072)
- Better error messages related to non-free vector field modules (ticket #28331)
- Fix some issues with submanifolds and improve their documentation (ticket #28344)
- Better handling of Manifold uniqueness (ticket #28365)
- Fix a bug in computing the second fundamental form of a Riemannian submanifold that is not part of a foliation (ticket #28462)
SageMath 8.8 (26 June 2019)
New features:
- Tensor series expansion (ticket
#25866): the series
expansions with respect to some small parameter are governed by the new tensor field methods
series_expansion(),truncate()andset_calc_order(). An example of use is the computation of the near-horizon geometry of an extremal Kerr black hole, in this notebook. - Mixed differential forms and their graded algebra (ticket #27584): see this example notebook.
- Customized simplifications in symbolic calculus (ticket
#27601): the user
can introduce her own simplifying function instead of the default one. This is acheived
thanks to the new manifold method
set_simplify_function(). For more flexibility, it is also possible to define a simplifying function chart by chart, via the new methodCalculusMethod.set_simplify_function(). - Possibility to initialize the components of a tensor field while declaring it (ticket #27581): see these examples.
- Shortcut for the display of a tensor field in a coordinate frame (ticket
#27655):
if
tis a tensor field andXa coordinate chart, one can now uset.display(X)as a shortcut fort.display(X.frame(), X). - Periodic coordinates (ticket
#27548):
the new keywords
period=andperiodichave been added in the string defining a coordinate chart, as well as the methodperiods(); this is useful in particular for computing geodesics that enroll with the periodic coordinate. - Tangent vectors as derivations on scalar fields (ticket
#27856): it is now
possible to form
v(f)wherevis a tangent vector to a manifoldMandfis a scalar field onM.
Bug fixes:
- Bug in wedge of unnamed differential forms (ticket #27576)
- Error in testing whether a scalar field belongs to a module of differential forms (ticket #27658)
SageMath 8.7 (23 March 2019)
No new feature regarding manifolds with respect to SageMath 8.6 (but many things in preparation for SageMath 8.8, see #18528).
SageMath 8.6 (15 January 2019)
No new feature regarding manifolds with respect to SageMath 8.5 (8.6 is actually a short-term release, only a few weeks after 8.5, necessary for SageMath to be packaged in the next stable Debian release).
SageMath 8.5 (22 December 2018)
New features:
- Manifolds catalog (ticket
#25869):
in order to create rapidly standard manifolds, a catalogue of
manifolds has been introduced; it is accessible
via the global keyword
manifolds. Typemanifolds.<TAB>, where<TAB>stands for the tabulation key, to get the list of available manifolds (currently this is the sphere S2, the torus T2, Minkowski spacetime and Kerr spacetime).
Improvements:
- Improved computation of integrated curves and geodesics on manifolds (ticket #25936): new integration backend allowing for integration over multiple charts and faster code.
- Parallelization of the computation of tensor components in a new frame and of the pullback of a tensor field (tickets #26168 and #26777)
- Make all doctests passed with Python3 in
src/sage/manifolds(tickets #26475 and #26569) - Make all doctests passed with Python3 in
src/sage/tensor(ticket #26601) - Remove deprecated manifold methods
diff_mapping,riemann_metric,lorentz_metric(they are replaced by respectivelydiff_map,riemannian_metricandlorentzian_metric) (ticket #26609)
Bug fixes:
- Make simplifications effective in the computation of the inverse of a transition map (ticket #26701)
SageMath 8.4 (17 October 2018)
New features:
- Nilpotent Lie groups (ticket
#26344): this is the
first implementation of Lie groups in SageMath. It relies on the manifold implementation.
In particular, the class
NilpotentLieGroupinheritates from bothGroupandDifferentiableManifold.
Improvements:
- Remove deprecated method
view()in tensor fields (ticket #26392)
Bug fixes:
- Restrictions of tensor fields (ticket #26012)
Note on version numbers: since October 2018, version numbers specific to SageManifolds code are no longer issued; only the SageMath version number is used. This reflects the integration of all the code in SageMath, which is actually effective since SageMath 7.5.
Version 1.3 (3 August 2018)
This version is released as part of SageMath 8.3. Here are the main changes with respect to v1.2:
New features:
- Euclidean spaces and vector calculus (ticket #24623): Euclidean spaces are implemented as Riemannian manifolds diffeomorphic to Rn and equipped with a flat metric, which defines the Euclidean dot product. Using the vector operators introduced in version 1.2, this provides the standard operators of vector calculus: dot product, norm, cross product, gradient, divergence, curl and Laplacian, along with the standard coordinate systems (Cartesian, spherical, cylindrical).
-
Submanifolds (tickets
#25164
and #25438):
new classes
TopologicalSubmanifold,DifferentiableSubmanifoldandPseudoRiemannianSubmanifoldhave been introduced to deal with immersed and embedded submanifolds and their extrinsic geometry; see here for a concrete example. - Tensor fields along a submanifold (ticket #25254): Given a tensor field T on some differentiable manifold M, a differentiable manifold U and a differentiable map F: U --> M, the new method along() performs the computation of the tensor field t along U with values in M such that t(p) = T(F(p)) at any point p in U.
Improvements:
- Better restrictions of tensor fields on manifolds (ticket #25417)
-
ContinuousMapclass is made hashable (ticket #25502) (required for Python 3 compatibility)
Bug fixes:
- Declared coordinate range with a symbolic bound (ticket #25510)
Version 1.2 (5 May 2018)
This version is released as part of SageMath 8.2. Here are the main changes with respect to v1.1:
New features:
- SymPy as an alternative to SR for symbolic calculus on manifolds (ticket #22801); see this notebook for computations on the sphere S2 involving only SymPy
- Pseudo-Riemannian manifolds (ticket
#24622): manifolds can now
be constructed with a default metric, by providing the argument
structureto the functionManifold, as inM = Manifold(4, 'M', structure='Lorentzian')
The default metric is then returned by the methodmetric()without any argument:g = M.metric()
- Operators for vector calculus (ticket
#24622): operators
gradient,divergence,curl,laplaciananddalembertianare now implemented, as well asdot_product,cross_productandnorm - More functionalities for bases of free modules and vector frames (ticket #24792): it is now possible
to choose individual symbols for each element of a basis or to label the basis elements
by a string (instead of an integer); moreover the operator
[:]has been implemented for bases
Improvements:
- Full rewriting of the functions simplify_sqrt_real and simplify_abs_trig, which are involved in simplifying the outcome of symbolic computations on manifolds (ticket #24232); in particular square roots with derivative of symbolic functions can now be simplified, as well as absolute values of cosines.
-
Better handling of matrix output for operator
[:]acting on sets of tensor components (ticket #24884)
Version 1.1 (7 December 2017)
This version is released as part of SageMath 8.1. Here are the main changes with respect to v1.0.2:
New features:
- Integrated curves and geodesics (ticket #22951); see example 1, example 2, example 3, example 4
- Exterior powers of free modules of finite rank (ticket #23207)
- Multivector fields and the Schouten-Nijenhuis bracket (ticket #23429)
Improvements:
- Characteristic of coordinate function rings (cf. ticket #23329)
- Faster comparison of manifold points (cf. ticket #23592)
- New method
is_trivial_zero()for fast comparison to zero of coordinate functions and scalar fields (cf. ticket #23623)
Version 1.0.2 (21 July 2017)
This version is released as part of SageMath 8.0. There are only minor changes with respect to v1.0.1:
Improvements:
- More efficient computations of Jacobians of transition maps (cf. ticket #22789)
- More efficient arithmetics of coordinate functions and scalar fields (cf. ticket #22859)
Bug fixes:
- Pullback on parallelizable manifolds (cf. ticket #22563)
- Tensor field restrictions on parallelizable manifolds (cf. ticket #22637)
- Inverse metric on parallelizable manifolds (cf. ticket #22667)
Version 1.0.1 (25 March 2017)
This version is released as part of SageMath 7.6. There are only minor changes with respect to v1.0:
Improvements:
- The computation of Lie derivatives has been parallelized (cf. ticket #22200)
Bug fixes:
- List functionality of free module bases (cf. ticket #22518)
- Display of tensors on free modules of finite rank (cf. ticket #22520)
- Checking validity of coordinate values on a chart (cf. ticket #22535)
- Symbolic derivatives in simplification of coordinate functions (cf. ticket #22503)
Version 1.0 (11 January 2017)
Besides the full integration in SageMath 7.5, there are only minor changes with respect to v0.9.1:
Syntactic changes:
- Method
plotof classesRealChartandVectorField: keyword argumentnb_valuesrenamednumber_values - Method
structure_coefof classVectorFramerenamedstructure_coeff - Class
OpenInterval: argumentsubinterval_ofrenamedambientin the constructor - Class
RealLine: LateX name changed from\RRto\Bold{R}
Internal changes:
- Systematic use of
Python3-compatible syntax (to prepare the
migration of
SageMath to Python3); in particular:
- All occurences of
iteritems()changed toitems() - All occurences of
itervalues()changed tovalues() - Classes
ScalarFieldandTensorField: method__nonzero__renamed__bool__ - Class
TensorField: method__div__renamed__truediv__
- All occurences of
- Classes
TensorFieldModule,VectorFieldModuleandDiffFormModule: add cached methodzero - Classes
DiffFormandDiffFormParal: methodexterior_derivativeis cached (via the decorator@cached_method) - Class
VectorFrame: methodstructure_coeffis cached (via the decorator@cached_method)
Other changes:
- Improvements in the documentation; in particular 3D graphics have been added to the
reference manual for illustrating the use of some
plotmethods - Values set by the user to some keyword arguments of
plotmethods become the new default values until further explicit change (this behavior is provided by the decorator@options):TangentVector.plot: argumentscaleVectorField.plot: argumentsmax_range,scaleandcolorDifferentiableCurve.plot: argumentsthickness,plot_points,max_rangeandaspect_ratio
Version 0.9.1 (19 September 2016)
This release propagates further code changes related to the integration of SageManifolds into SageMath (cf. the metaticket #18528); it also adds a few new functionalities.
New functionalities:
- Computation of the Schouten tensor, the Cotton conformal tensor and the Cotton-York conformal tensor associated to a given pseudo-Riemannian metric
- Add structure of Lie algebroid to modules of vector fields (classes
VectorFieldModuleandVectorFieldFreeModule): new methodVectorField.bracket - Parallelization of vector field plots
- Parallelization of arithmetics of fully antisymmetric tensor components
- Improved rendering of variables in partial derivatives, using LaTeX display
of symbols (class
ExpressionNice) - Add comparison operator for transition maps (class
CoordChange) - Add list functionalities for bases (methods
__len__and__iter__in classesFreeModuleBasisandFreeModuleCoBasis)
Syntactic changes:
- Method
CoordChange.set_inverse: replace the keywordcheckbyverbose, the default being nowverbose=False - Introduction of
Manifold.optionsto control the display of mathematical expressions instead of the global functionsnice_derivativesandomit_function_args, which have been suppressed - Function
set_axes_labels(to set labels on 3D plots) no longer imported at the startup time; if required, one has to typefrom sage.manifolds.utilities import set_axes_labels - Function
xder(exterior derivative) no longer imported at the startup time; if required, one has to typefrom sage.manifolds.utilities import xder - Class
DiffForm: methodexterior_derrenamedexterior_derivative - Classes
DiffScalarField,TensorFieldandTensorFieldParal: methodlie_derrenamedlie_derivative, withlie_derkept as an alias of the latter
More internal changes:
- Manifold structure now described via specific singleton classes:
TopologicalStructure,RealTopologicalStructure,DifferentialStructureandRealDifferentialStructure - Class
TopologicalManifoldSubsetrenamedManifoldSubset - Class
TopologicalManifoldPointrenamedManifoldPoint - Manifold subsets are no longer facade parents
- Class
ManifoldSubset: new methodsliftandretract - Introduction of the commutative algebra of all symbolic coordinate functions on a given chart: new class
CoordFunctionSymbRingand classCoordFunctionnow inheritates fromAlgebraElement - Class
FiniteRankFreeModule: category changed fromModules(ring)toModules(ring).FiniteDimensional() - Some changes to prepare the migration to Python 3 (e.g.
printreplaced byprint())
Version 0.9 (10 December 2015)
This is a major release, resulting from an important refactoring of the code, in view of a full integration of SageManifolds into SageMath (cf. the metaticket #18528 on the SageMath developer trac). The major changes are
- Topological properties have been separated from differential ones, by
implementing topological manifolds (new class
TopologicalManifold) and making the class for differentiable manifolds (DifferentiableManifold) inherit fromTopologicalManifold. - The base field over which manifolds are defined is no longer assumed to be the real field: it can be any topological field (non-discrete to define differentiability for diff. manifolds). This allows to define easily complex manifolds, by setting the field to C.
- The class
ManifoldOpenSubsethas been suppressed: open subsets of manifolds are now instances ofTopologicalManifoldorDifferentiableManifold(since an open subset of a top/diff manifold is a top/diff manifold by itself) - Functions defined on a coordinate patch are no longer necessarily symbolic
functions of the coordinates: they now pertain to the generic class
CoordFunction, symbolic functions being described by a subclass of it (CoordFunctionSymb). This opens the way for "numerical" manifolds, like spacetimes generated by numerical relativity codes. - Better parallelization, governed by the new singleton class
Parallelismand the global functionuse_multiproc.
Some syntactic changes:
- differentiable manifolds: renaming of some methods:
aff_connection()--->affine_connection()diff_mapping()--->diff_map()frame_change()--->change_of_frame()frame_changes()--->changes_of_frame()lorentz_metric()--->lorentzian_metric()riemann_metric()--->riemannian_metric()set_frame_change()--->set_change_of_frame()
- charts: method
coord_change()removed, onlytransition_map()remains - manifolds maps: method
multi_function_chart()renamed tocoord_functions() - curves in manifolds: method
coord_functions()renamed tocoord_expr() - differential forms: method
hodge_star()renamed tohodge_dual() - in all methods
plot(): optional argumentmax_valuerenamed tomax_range
Version 0.8 (16 May 2015)
Changes for the end user:
- Plot of vector fields: new method
VectorField.plot() - Possibility of parallelizing heavy computations: parallelization is implemented for basic tensor calculus (arithmetics, contractions) and for calculus regarding affine connections (connection coefficients, action on a tensor field, Riemann curvature tensor)
- Nice display of partial derivatives
- Standard math functions exp, cos, sin, etc. on scalar fields
- Display of tensor components as a list, one per line: new methods
TensorField.display_comp()andFreeModuleTensor.display_comp() - Nice display of connection coefficients: new method
AffConnection.display() - Nice display of Christoffel symbols: new method
Metric.christoffel_symbols_display() - Nice display of chart transition maps: new method
CoordChange.display()
Internal changes:
- Better handling of uniqueness of tangent spaces
- Suppression of the class
ZeroScalarField, for a better integration in Sage'sParent/Elementframework
Version 0.7 (12 March 2015)
This is a major release, with numerous internal changes, leading to a better
integration in Sage Parent/Element framework.
-
New Python classes have been introduced:
FreeModuleHomset, FiniteRankFreeModuleMorphism, FreeModuleLinearGroup, ExtPowerFreeModule, ManifoldHomset, ManifoldCurveSet, ManifoldCurve, OpenInterval, AutomorphismFieldParalGroup, AutomorphismFieldGroup, DiffFormModule, DiffFormFreeModule. - Other classes have been removed:
FreeModuleEndomorphism, FreeModuleIdentityMap, FreeModuleLinForm, IdentityMap, EndomorphismField, EndomorphismFieldParal, TangentIdentityField, TangentIdentityFieldParal, OneForm.
For the end user, new features are
- the introduction of curves in manifolds (with some plotting capabilities)
- improvements in differential mappings between manifolds, including mapping composition and mapping differential
- the introduction of homomorphisms between free modules
Some semantic changes have also been performed:
- Methods
view()have been renameddisplay()(withdisp()as an abbreviation);view()is still usable but generates a deprecation warning. - Method
open_domain()has been renamedopen_subset(). - Method
view_bases()has been renamedprint_bases(). - Class
Domainhas been renamedManifoldSubset. - Class
OpenDomainhas been renamedManifoldOpenSubset. - Class
Pointhas been renamedManifoldPoint.
Version 0.6 (28 September 2014)
- Graphical output for charts (method
Chart.plot()) and points (methodPoint.plot()); here are some examples. - Introduction of index notation to denote tensor contractions and
tensor symmetrizations (new class
TensorWithIndices); see these links: [1], [2] and [3]. - The argument of methods
symmetrize()andantisymmetrize()in tensor classes is now directly a sequence of index positions (and no longer a single list/tuple encapsulating such a sequence). - Method
self_contract()of tensor classes renamedtrace(). - The code for tensor contractions has been optimized; moreover multiple tensor contractions are now allowed.
- The documentation (reference manuals [4] and [5]) has been improved.
Version 0.5 (12 July 2014)
This is a major release, involving the introduction of algebraic structures
to describe tensor fields, namely modules over the algebra of scalar fields,
among which free modules of finite rank.
This is achieved via Sage Parent/Element scheme and
coercion model. A view of the corresponding Python class architecture is
here.
For the end user, new features are
- A rigorous treatment of non-parallelizable manifold
- Tangent spaces at a given manifold point and tensors on them, possibly as values of tensor fields at the point
- Tensor fields along an open subset of a manifold taking their values on another manifold (via some differential mapping between the two manifolds)
- Only the Python classes
Manifold,RealLineandFiniteRankFreeModuleare imported in the global name space of a Sage session. All constructions of objects not belonging to these classes are to be performed by method calls on other objects.
Version 0.4 (10 February 2014)
- class
Domain:Parent/Elementscheme used forDomain/Point, withDomainin the category ofSets- members
atlas,framesandcoframesare now lists (and no longer dictionaries)
- class
Chart:- member
namesuppressed - new methods:
__hash__and__eq__
- member
- class
ScalarField:- member
express: now a dictionary with keys being the charts (and no longer their names)
- member
- class
DiffMapping:- member
coord_expression: now a dictionary with keys being the charts (and no longer their names)
- member
- class
TensorField:- member
components: now a dictionary with keys being the vector frames (and no longer their names)
- member
- class
VectorFrame:- method
__call__changed to__getitem__ - new methods:
__hash__and__eq__
- method
- class
CoFrame:- method
__call__changed to__getitem__
- method
- class
CoordBasisrenamed toCoordFrame - class
CompWithSym:- corrected treatment of pre-existing symmetries in methods
symmetrizeandantisymmetrize
- corrected treatment of pre-existing symmetries in methods
Version 0.3 (24 November 2013)
- Changes towards a better integration in Sage:
Parent/Elementscheme used forManifold/Point- construction of objects via factory methods (no need to have the various class constructors in the global namespace)
- use of the preparser tool <x,y,...> to explicitely set the coordinates in the global namespace
- New classes
DomainandOpenDomainto deal with manifold subdomains: mappings and tensor fields can be now defined on subdomains only. - class
Manifold:- inherits from
OpenDomainand Sage'sParent
- inherits from
- class
Point:- inherits from Sage's
Element
- inherits from Sage's
- class
Chart:- the coordinates are no longer set by default to global variables: the preparser tool <,> must be used for this
- added coordinate restrictions, subcharts and supercharts to deal with subdomains
- new methods
subchart(),transition_map(),valid_coordinates(),__getitem__() - method
__call__()applies now to a point and returns the point's coordinates
- class
DiffMapping:- mappings between manifolds now defined on subdomains
- new method
add_expr()in addition toset_expr()
- class
Submanifold:- complete reorganization (in particular subclass
MCurvehas been suppressed) - method
pushforward()added
- complete reorganization (in particular subclass
- class
VectorFrame:- added subframes and superframes to deal with subdomains
- class
Components:- construction is now on the vector frame + number of indices
- class
ScalarField:- new methods
common_charts()andadd_expr() - method
gradient()renamed todifferential() - multi-domain handling in the arithmetic
- new methods
- class
TensorField:- tensor fields are now defined on subdomains (instead of the whole manifold)
- new method
add_comp()in addition toset_comp() - method
show()renamed toview()
- New example worksheets have been added (sphere S2, de Sitter and anti-de Sitter spaces) and other worksheets have been updated (see the example worksheets)
- Development repository moved from svn to git
Version 0.2 (12 September 2013)
svn revision 395
- class
Chart:- the coordinate ranges are now passed in the arguments (as intervals) and are used to set assumptions on the coordinates
- class
MultiFunctionChart:- the various functions are now stored as instances of class
FunctionChart(and no longer as symbolic expressions) - new method:
expr() - modified method:
jacobian(): returns an array ofFunctionChartinstances - modified method:
jacobian_det(): returns a instance ofFunctionChart
- the various functions are now stored as instances of class
- class
Point:- added fields
nameandlatex_name - suppressed method
change_coord(): the change-of-coordinate computation is now taken in charge by methodcoord()
- added fields
- class
DiffMapping:- new methods:
multi_function_chart(), expr(), show(), pullback() - method
new_coord_representation()changed toset_express()
- new methods:
- class
Components:- new method:
mtrace()
- new method:
- class
TensorField:- new method:
mtrace()
- new method:
- Many doctests changed to comply with Sage 5.11 (new ordering in symbolic expressions resulting from some change in pynac, cf. ticket 9880 on Sage Trac)
Version 0.1 (7 July 2013)
svn revision 318
First public release.