-
-
Notifications
You must be signed in to change notification settings - Fork 660
Description
Currently (Sage 8.7), the definition of a tensor field on a differentiable manifold is a 2-step operation. For instance, for a vector field:
sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: v = M.vector_field() # step 1: declaration
sage: v[:] = -y, x # step 2: initialization of components
sage: v.display()
-y d/dx + x d/dy
This ticket adds the possibility to perform the definition in a single step:
sage: v = M.vector_field(-y, x)
sage: v.display()
-y d/dx + x d/dy
Moreover, some flexibility is introduced in passing the components: it can be a list:
sage: M.vector_field([-y, x]).display()
-y d/dx + x d/dy
or more generally any iterable, like a vector of symbolic expressions:
sage: M.vector_field(vector([-y, x])).display()
-y d/dx + x d/dy
The components can also be provided in a vector frame distinct from the default one:
sage: f = M.vector_frame('f')
sage: M.vector_field(y^2, -1, frame=f).display(f)
y^2 f_0 - f_1
An alternative is passing a dictionary, the keys of which are the vector frames in which the components are defined:
sage: M.vector_field({f: [y^2, -1]}).display(f)
y^2 f_0 - f_1
The dictionary is mandatory if the components are given in various frames at once:
sage: M.vector_field({X.frame(): [-y, x], f: [y^2, -1]}).display(f)
y^2 f_0 - f_1
Note that the possibility of initializing the components while declaring a vector field was introduced on Euclidean spaces in #24623. This ticket extends this to any kind of differentiable manifold and any kind of tensor field. Accordingly, the redefinition of the method vector_field
in the class EuclideanSpace
has been suppressed: it falls back now to the method vector_field
of the mother class DifferentiableManifold
.
Basically the (optional) component initialization is performed by the method TensorField._init_components
, which is invoked by all the end-user methods devoted to the creation of tensor fields on manifolds, i.e. the methods automorphism_field
, diff_form
, multivector_field
, one_form
, sym_bilin_form_field
, tensor_field
and vector_field
of class DifferentiableManifold
.
CC: @tscrim
Component: geometry
Keywords: tensor field
Author: Eric Gourgoulhon
Branch/Commit: 990a858
Reviewer: Travis Scrimshaw
Issue created by migration from https://trac.sagemath.org/ticket/27581