Changelog
SageMath 10.1 (20 August 2023)
Improvements:
 Add a few operations from linear symplectic geometry [#35354]
SageMath 10.0 (20 May 2023)
Improvements:
 Replace
\mbox
by\text
in manifold code [#35353]  Add
# optional
doctest tags for modularization [#35267]  Add typing to tangent vectors [#35189]
 Document argument
is_open
of methodscomplement
anddifference
of classManifoldSubset
[#35040]
Bug fixes:
SageMath 9.8 (11 February 2023)
New features (see the Release Tour for examples):
 The
basis
method 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 theComponents
class (or one of its subclasses) [#30229] FiniteRankFreeModule.tensor_module
has new optional argumentssym
andantisym
to create a submodule of the tensor module spanned by tensors with prescribed symmetries; new methodssymmetric_power
anddual_symmetric_power
have been added [#30229] New method
isomorphism_with_fixed_basis
for tensor modules [#34427]  Tensor products of modules of tensor fields have been implemented
via the new methods
tensor_product
andtensor_power
[#34589]
Improvements:
 Sparse iterator for tensor components [#29619]
 New implementation class
FiniteRankDualFreeModule
[#30241]  Put tensor modules of
FiniteRankFreeModule
in the categoryModules(R).TensorProducts()
[#34448]  Canonicalize
sym
andantisym
in tensors [#34451]  Faster fast path for
tensor_module
,exterior_power
anddual_exterior_power
inVectorFieldModule
[#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_abstract
now inherits fromAbstractFamily
, so that vector bases are endowed with methodsitems
,keys
andvalues
(ticket #30300)
Improvements:
 Classes
FiniteRankFreeModule
andTensorFreeModule
now 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.all
andsage.rings.all
have been replaced by more specific imports (ticket #34428)
Bug fixes:
Manifold.options.omit_function_arguments
was 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_degree
ormetric_name
are 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
ExpressionNice
with 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 nonredundant indices for tensors with symmetries (ticket #32318)
 Unnecessary uses of symbolic functions removed from
sage.tensor.modules
(ticket #32415)  Doctests involving
SR
marked optional insage.tensor.modules
(ticket #32712) sage.tensor.modules
made independent fromsage.manifolds
(ticket #32708)
Bug fixes:
 Better handling of metrics on pseudoRiemannian 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
RealLine
andOpenInterval
are deprecated; use insteadmanifolds.RealLine
andmanifolds.OpenInterval
. Moreover, Sage's generic constructorRealSet
now returns a 1dimensional 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_restrictions
is 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_union
andintersection
can 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
ManifoldObjectFiniteFamily
andManifoldSubsetFiniteFamily
and 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_poset
of manifold subsets; for vizualization purposes, the methodssubset_digraph
andsuperset_digraph
have been introduced (ticket #31680)  The method
open_covers
of manifold subsets is now a generator ofManifoldSubsetFiniteFamily
instances, instead of returning a list of lists, and the takes new keyword argumentstrivial
andsupersets
. Similarly, the methodsubsets
is a generator of subsets, instead of returning a frozen set (ticket #31718)  Topological closures of manifold subsets have been implemented
through the new class
ManifoldSubsetClosure
and the new methodclosure
of manifold subsets; in addition, manifold subsets are endowed with new methodsis_closed
anddeclare_closed
(ticket #31644)  Images of continuous maps have been implemented through the new class
ImageManifoldSubset
and the new methodimage
of continuous maps, as well as the new methodas_subset
of submanifolds (ticket #31653)  Preimages of continuous maps have been implemented through the new class
ManifoldSubsetPullback
and 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
DeRhamCohomologyRing
andDeRhamCohomologyClass
; the algebra of mixed differential forms has been turned into a de Rham complex (ticket #31691)  New method
set_comp
for 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
name
andlatex_name
to copy method inset_restriction
(ticket #31854)  Refine category of scalar fields (ticket #31883)
 Eliminate direct use of the
Chart._domain
attribute (ticket #32009)  New method
Chart._parse_coordinates
attribute (ticket #32116)  Simplify the code of
VectorField.__call__
(ticket #31633)  Slight speedup of
copy
method 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
self
inCoordChange
(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 S^{3} 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 selfdiffeomorphism is implied (ticket #31323)
 New method
copy
for 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
form
input for bundle connections (ticket #31273)
Bug fixes:
 Fix trivial coercion of the type
Modules(QQ)(FiniteRankFreeModule(QQ, 3))
(ticket #30174)  Fix
UniqueRepresentation
behavior 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
f
can 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)
 Basisdependent isomorphism between a
FiniteRankFreeModule
and 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
copy
method (ticket #30285)
Improvements:
 Improve assignement of bundle connections (ticket #30208)
 Simplify unique representation code for dependent modules in
FiniteRankFreeModule
(ticket #30250)  Simplify
_repr_
ofExtPowerFreeModule
andExtPowerDualFreeModule
(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_power
andtensor_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 highdimensional Euclidean spaces (ticket #30061)
 Coercion from
ChartFunctionRing
toScalarFieldAlgebra
(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_frame
on 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 nonatomic 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
AttributeError
onshow_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 3dimensional Euclidean space and in the Euclidean plane, both in Cartesian and curvilinear coordinates, added to SageMath standard documentation.
 Keyword argument
verbose
changed tocheck
in the methodCoordChange.set_inverse()
, with the default set toTrue
and 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 nonfree 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 nearhorizon 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
t
is a tensor field andX
a coordinate chart, one can now uset.display(X)
as a shortcut fort.display(X.frame(), X)
.  Periodic coordinates (ticket
#27548):
the new keywords
period=
andperiodic
have 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)
wherev
is a tangent vector to a manifoldM
andf
is 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 shortterm 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 S^{2}, the torus T^{2}, 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_metric
andlorentzian_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
NilpotentLieGroup
inheritates from bothGroup
andDifferentiableManifold
.
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 R^{n} 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
,DifferentiableSubmanifold
andPseudoRiemannianSubmanifold
have 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)

ContinuousMap
class 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 S^{2} involving only SymPy
 PseudoRiemannian manifolds (ticket
#24622): manifolds can now
be constructed with a default metric, by providing the argument
structure
to 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
,laplacian
anddalembertian
are now implemented, as well asdot_product
,cross_product
andnorm
 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 SchoutenNijenhuis 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
plot
of classesRealChart
andVectorField
: keyword argumentnb_values
renamednumber_values
 Method
structure_coef
of classVectorFrame
renamedstructure_coeff
 Class
OpenInterval
: argumentsubinterval_of
renamedambient
in the constructor  Class
RealLine
: LateX name changed from\RR
to\Bold{R}
Internal changes:
 Systematic use of
Python3compatible syntax (to prepare the
migration of
SageMath to Python3); in particular:
 All occurences of
iteritems()
changed toitems()
 All occurences of
itervalues()
changed tovalues()
 Classes
ScalarField
andTensorField
: method__nonzero__
renamed__bool__
 Class
TensorField
: method__div__
renamed__truediv__
 All occurences of
 Classes
TensorFieldModule
,VectorFieldModule
andDiffFormModule
: add cached methodzero
 Classes
DiffForm
andDiffFormParal
: methodexterior_derivative
is cached (via the decorator@cached_method
)  Class
VectorFrame
: methodstructure_coeff
is 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
plot
methods  Values set by the user to some keyword arguments of
plot
methods become the new default values until further explicit change (this behavior is provided by the decorator@options
):TangentVector.plot
: argumentscale
VectorField.plot
: argumentsmax_range
,scale
andcolor
DifferentiableCurve.plot
: argumentsthickness
,plot_points
,max_range
andaspect_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 CottonYork conformal tensor associated to a given pseudoRiemannian metric
 Add structure of Lie algebroid to modules of vector fields (classes
VectorFieldModule
andVectorFieldFreeModule
): 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 classesFreeModuleBasis
andFreeModuleCoBasis
)
Syntactic changes:
 Method
CoordChange.set_inverse
: replace the keywordcheck
byverbose
, the default being nowverbose=False
 Introduction of
Manifold.options
to control the display of mathematical expressions instead of the global functionsnice_derivatives
andomit_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_der
renamedexterior_derivative
 Classes
DiffScalarField
,TensorField
andTensorFieldParal
: methodlie_der
renamedlie_derivative
, withlie_der
kept as an alias of the latter
More internal changes:
 Manifold structure now described via specific singleton classes:
TopologicalStructure
,RealTopologicalStructure
,DifferentialStructure
andRealDifferentialStructure
 Class
TopologicalManifoldSubset
renamedManifoldSubset
 Class
TopologicalManifoldPoint
renamedManifoldPoint
 Manifold subsets are no longer facade parents
 Class
ManifoldSubset
: new methodslift
andretract
 Introduction of the commutative algebra of all symbolic coordinate functions on a given chart: new class
CoordFunctionSymbRing
and classCoordFunction
now inheritates fromAlgebraElement
 Class
FiniteRankFreeModule
: category changed fromModules(ring)
toModules(ring).FiniteDimensional()
 Some changes to prepare the migration to Python 3 (e.g.
print
replaced 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 (nondiscrete to define differentiability for diff. manifolds). This allows to define easily complex manifolds, by setting the field to C.
 The class
ManifoldOpenSubset
has been suppressed: open subsets of manifolds are now instances ofTopologicalManifold
orDifferentiableManifold
(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
Parallelism
and 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_value
renamed 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/Element
framework
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
Domain
has been renamedManifoldSubset
.  Class
OpenDomain
has been renamedManifoldOpenSubset
.  Class
Point
has 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 nonparallelizable 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
,RealLine
andFiniteRankFreeModule
are 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
/Element
scheme used forDomain
/Point
, withDomain
in the category ofSets
 members
atlas
,frames
andcoframes
are now lists (and no longer dictionaries)
 class
Chart
: member
name
suppressed  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
CoordBasis
renamed toCoordFrame
 class
CompWithSym
: corrected treatment of preexisting symmetries in methods
symmetrize
andantisymmetrize
 corrected treatment of preexisting symmetries in methods
Version 0.3 (24 November 2013)
 Changes towards a better integration in Sage:
Parent
/Element
scheme 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
Domain
andOpenDomain
to deal with manifold subdomains: mappings and tensor fields can be now defined on subdomains only.  class
Manifold
: inherits from
OpenDomain
and 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
MCurve
has 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()
 multidomain 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 S^{2}, de Sitter and antide 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 ofFunctionChart
instances  modified method:
jacobian_det()
: returns a instance ofFunctionChart
 the various functions are now stored as instances of class
 class
Point
: added fields
name
andlatex_name
 suppressed method
change_coord()
: the changeofcoordinate 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.