Changelog

SageMath 10.4 (19 July 2024)

New features:

  • FiniteRankFreeModuleMorphism.display: Show matrix decorated with basis element names [#37825]
  • FiniteRankFreeModule.isomorphism_with_fixed_basis now gives an instance of the new class SetIsomorphism, and its inverse is defined [#37512]
  • Class FreeModuleAutomorphism has new methods characteristic_polynomial, fcp and minimal_polynomial [#37826]
  • New classes FreeModuleEndset (as a subclass of FreeModuleHomset) and FiniteRankFreeModuleEndomorphism (as a subclass of FiniteRankFreeModuleMorphism) [#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 regarding the manifold code with respect to SageMath 10.2.

SageMath 10.2 (3 December 2023)

Improvements:

  • Add # needs markers 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 \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 methods complement and difference of class ManifoldSubset [#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 class TensorFreeSubmoduleBasis_sym, which represents the standard basis corresponding to an instance of the Components class (or one of its subclasses) [#30229]
  • FiniteRankFreeModule.tensor_module has new optional arguments sym and antisym to create a submodule of the tensor module spanned by tensors with prescribed symmetries; new methods symmetric_power and dual_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 and tensor_power [#34589]

Improvements:

  • Sparse iterator for tensor components [#29619]
  • New implementation class FiniteRankDualFreeModule [#30241]
  • Put tensor modules of FiniteRankFreeModule in the category Modules(R).TensorProducts() [#34448]
  • Canonicalize sym and antisym in tensors [#34451]
  • Faster fast path for tensor_module, exterior_power and dual_exterior_power in VectorFieldModule [#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 from AbstractFamily, so that vector bases are endowed with methods items, keys and values (ticket #30300)

Improvements:

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 or metric_name are given, the implied structure is selected without having to specify it via the parameter structure (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 non-redundant indices for tensors with symmetries (ticket #32318)
  • Unnecessary uses of symbolic functions removed from sage.tensor.modules (ticket #32415)
  • Doctests involving SR marked optional in sage.tensor.modules (ticket #32712)
  • sage.tensor.modules made independent from sage.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):

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 and latex_name to copy method in set_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 speed-up 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 in CoordChange (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):

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 of OpenInterval (ticket #30830)
  • Fix some typos in manifolds (ticket #31202)

SageMath 9.2 (24 October 2020)

New features (see also the Release Tour):

Improvements:

  • Improve assignement of bundle connections (ticket #30208)
  • Simplify unique representation code for dependent modules in FiniteRankFreeModule (ticket #30250)
  • Simplify _repr_ of ExtPowerFreeModule and ExtPowerDualFreeModule (ticket #30251)
  • Create a default basis in the base module if necessary in TensorFreeModule._an_element_ (ticket #30254)
  • FiniteRankFreeModule: Move all module identifications to methods exterior_power, dual_exterior_power and tensor_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 ChartFunctionRing to ScalarFieldAlgebra (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):

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):

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 on show_identifiers() call (ticket #28769)

SageMath 8.9 (29 September 2019)

New features:

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:

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. Type manifolds.<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 respectively diff_map, riemannian_metric and lorentzian_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:

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, DifferentiableSubmanifold and PseudoRiemannianSubmanifold 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:

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:

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 classes RealChart and VectorField: keyword argument nb_values renamed number_values
  • Method structure_coef of class VectorFrame renamed structure_coeff
  • Class OpenInterval: argument subinterval_of renamed ambient in the constructor
  • Class RealLine: LateX name changed from \RR to \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 to items()
    • All occurences of itervalues() changed to values()
    • Classes ScalarField and TensorField: method __nonzero__ renamed __bool__
    • Class TensorField: method __div__ renamed __truediv__
  • Classes TensorFieldModule, VectorFieldModule and DiffFormModule: add cached method zero
  • Classes DiffForm and DiffFormParal: method exterior_derivative is cached (via the decorator @cached_method)
  • Class VectorFrame: method structure_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: argument scale
    • VectorField.plot: arguments max_range, scale and color
    • DifferentiableCurve.plot: arguments thickness, plot_points, max_range and aspect_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 VectorFieldModule and VectorFieldFreeModule): new method VectorField.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 classes FreeModuleBasis and FreeModuleCoBasis)

Syntactic changes:

  • Method CoordChange.set_inverse: replace the keyword check by verbose, the default being now verbose=False
  • Introduction of Manifold.options to control the display of mathematical expressions instead of the global functions nice_derivatives and omit_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 type from sage.manifolds.utilities import set_axes_labels
  • Function xder (exterior derivative) no longer imported at the startup time; if required, one has to type from sage.manifolds.utilities import xder
  • Class DiffForm: method exterior_der renamed exterior_derivative
  • Classes DiffScalarField, TensorField and TensorFieldParal: method lie_der renamed lie_derivative, with lie_der kept as an alias of the latter

More internal changes:

  • Manifold structure now described via specific singleton classes: TopologicalStructure, RealTopologicalStructure, DifferentialStructure and RealDifferentialStructure
  • Class TopologicalManifoldSubset renamed ManifoldSubset
  • Class TopologicalManifoldPoint renamed ManifoldPoint
  • Manifold subsets are no longer facade parents
  • Class ManifoldSubset: new methods lift and retract
  • Introduction of the commutative algebra of all symbolic coordinate functions on a given chart: new class CoordFunctionSymbRing and class CoordFunction now inheritates from AlgebraElement
  • Class FiniteRankFreeModule: category changed from Modules(ring) to Modules(ring).FiniteDimensional()
  • Some changes to prepare the migration to Python 3 (e.g. print replaced by print())

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 from TopologicalManifold.
  • 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 ManifoldOpenSubset has been suppressed: open subsets of manifolds are now instances of TopologicalManifold or DifferentiableManifold (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 function use_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, only transition_map() remains
  • manifolds maps: method multi_function_chart() renamed to coord_functions()
  • curves in manifolds: method coord_functions() renamed to coord_expr()
  • differential forms: method hodge_star() renamed to hodge_dual()
  • in all methods plot(): optional argument max_value renamed to max_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() and FreeModuleTensor.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's Parent/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

Some semantic changes have also been performed:

  • Methods view() have been renamed display() (with disp() as an abbreviation); view() is still usable but generates a deprecation warning.
  • Method open_domain() has been renamed open_subset().
  • Method view_bases() has been renamed print_bases().
  • Class Domain has been renamed ManifoldSubset.
  • Class OpenDomain has been renamed ManifoldOpenSubset.
  • Class Point has been renamed ManifoldPoint.

Version 0.6 (28 September 2014)

  • Graphical output for charts (method Chart.plot()) and points (method Point.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() and antisymmetrize() 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 renamed trace().
  • 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, RealLine and FiniteRankFreeModule 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 for Domain/Point, with Domain in the category of Sets
    • members atlas, frames and coframes are now lists (and no longer dictionaries)
  • class Chart:
    • member name suppressed
    • new methods: __hash__ and __eq__
  • class ScalarField:
    • member express: now a dictionary with keys being the charts (and no longer their names)
  • class DiffMapping:
    • member coord_expression: now a dictionary with keys being the charts (and no longer their names)
  • class TensorField:
    • member components: now a dictionary with keys being the vector frames (and no longer their names)
  • class VectorFrame:
    • method __call__ changed to __getitem__
    • new methods: __hash__ and __eq__
  • class CoFrame:
    • method __call__ changed to __getitem__
  • class CoordBasis renamed to CoordFrame
  • class CompWithSym:
    • corrected treatment of pre-existing symmetries in methods symmetrize and antisymmetrize

Version 0.3 (24 November 2013)

  • Changes towards a better integration in Sage:
    • Parent/Element scheme used for Manifold/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 and OpenDomain to deal with manifold subdomains: mappings and tensor fields can be now defined on subdomains only.
  • class Manifold:
    • inherits from OpenDomain and Sage's Parent
  • class Point:
    • inherits from Sage's Element
  • 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 to set_expr()
  • class Submanifold:
    • complete reorganization (in particular subclass MCurve has been suppressed)
    • method pushforward() added
  • 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() and add_expr()
    • method gradient() renamed to differential()
    • multi-domain handling in the arithmetic
  • class TensorField:
    • tensor fields are now defined on subdomains (instead of the whole manifold)
    • new method add_comp() in addition to set_comp()
    • method show() renamed to view()
  • 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 of FunctionChart instances
    • modified method: jacobian_det(): returns a instance of FunctionChart
  • class Point:
    • added fields name and latex_name
    • suppressed method change_coord(): the change-of-coordinate computation is now taken in charge by method coord()
  • class DiffMapping:
    • new methods: multi_function_chart(), expr(), show(), pullback()
    • method new_coord_representation() changed to set_express()
  • class Components:
    • new method: mtrace()
  • class TensorField:
    • new method: mtrace()
  • 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.