Vector Field Modules¶
The set of vector fields along a differentiable manifold \(U\) with values on a differentiable manifold \(M\) via a differentiable map \(\Phi: U \to M\) (possibly \(U = M\) and \(\Phi=\mathrm{Id}_M\)) is a module over the algebra \(C^k(U)\) of differentiable scalar fields on \(U\). If \(\Phi\) is the identity map, this module is considered a Lie algebroid under the Lie bracket \([\ ,\ ]\) (cf. Wikipedia article Lie_algebroid). It is a free module if and only if \(M\) is parallelizable. Accordingly, there are two classes for vector field modules:
VectorFieldModule
for vector fields with values on a generic (in practice, not parallelizable) differentiable manifold \(M\).VectorFieldFreeModule
for vector fields with values on a parallelizable manifold \(M\).
AUTHORS:
 Eric Gourgoulhon, Michal Bejger (20142015): initial version
 Travis Scrimshaw (2016): structure of Lie algebroid (trac ticket #20771)
REFERENCES:

class
sage.manifolds.differentiable.vectorfield_module.
VectorFieldFreeModule
(domain, dest_map=None)¶ Bases:
sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule
Free module of vector fields along a differentiable manifold \(U\) with values on a parallelizable manifold \(M\), via a differentiable map \(U \rightarrow M\).
Given a differentiable map
\[\Phi:\ U \longrightarrow M\]the vector field module \(\mathcal{X}(U,\Phi)\) is the set of all vector fields of the type
\[v:\ U \longrightarrow TM\](where \(TM\) is the tangent bundle of \(M\)) such that
\[\forall p \in U,\ v(p) \in T_{\Phi(p)} M,\]where \(T_{\Phi(p)} M\) is the tangent space to \(M\) at the point \(\Phi(p)\).
Since \(M\) is parallelizable, the set \(\mathcal{X}(U,\Phi)\) is a free module over \(C^k(U)\), the ring (algebra) of differentiable scalar fields on \(U\) (see
DiffScalarFieldAlgebra
). In fact, it carries the structure of a finitedimensional Lie algebroid (cf. Wikipedia article Lie_algebroid).The standard case of vector fields on a differentiable manifold corresponds to \(U=M\) and \(\Phi = \mathrm{Id}_M\); we then denote \(\mathcal{X}(M,\mathrm{Id}_M)\) by merely \(\mathcal{X}(M)\). Other common cases are \(\Phi\) being an immersion and \(\Phi\) being a curve in \(M\) (\(U\) is then an open interval of \(\RR\)).
Note
If \(M\) is not parallelizable, the class
VectorFieldModule
should be used instead, for \(\mathcal{X}(U,\Phi)\) is no longer a free module.INPUT:
domain
– differentiable manifold \(U\) along which the vector fields are defineddest_map
– (default:None
) destination map \(\Phi:\ U \rightarrow M\) (type:DiffMap
); ifNone
, it is assumed that \(U=M\) and \(\Phi\) is the identity map of \(M\) (case of vector fields on \(M\))
EXAMPLES:
Module of vector fields on \(\RR^2\):
sage: M = Manifold(2, 'R^2') sage: cart.<x,y> = M.chart() # Cartesian coordinates on R^2 sage: XM = M.vector_field_module() ; XM Free module X(R^2) of vector fields on the 2dimensional differentiable manifold R^2 sage: XM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 2dimensional differentiable manifold R^2 sage: XM.base_ring() is M.scalar_field_algebra() True
Since \(\RR^2\) is obviously parallelizable,
XM
is a free module:sage: isinstance(XM, FiniteRankFreeModule) True
Some elements:
sage: XM.an_element().display() 2 d/dx + 2 d/dy sage: XM.zero().display() zero = 0 sage: v = XM([y,x]) ; v Vector field on the 2dimensional differentiable manifold R^2 sage: v.display() y d/dx + x d/dy
An example of module of vector fields with a destination map \(\Phi\) different from the identity map, namely a mapping \(\Phi: I \rightarrow \RR^2\), where \(I\) is an open interval of \(\RR\):
sage: I = Manifold(1, 'I') sage: canon.<t> = I.chart('t:(0,2*pi)') sage: Phi = I.diff_map(M, coord_functions=[cos(t), sin(t)], name='Phi', ....: latex_name=r'\Phi') ; Phi Differentiable map Phi from the 1dimensional differentiable manifold I to the 2dimensional differentiable manifold R^2 sage: Phi.display() Phi: I > R^2 t > (x, y) = (cos(t), sin(t)) sage: XIM = I.vector_field_module(dest_map=Phi) ; XIM Free module X(I,Phi) of vector fields along the 1dimensional differentiable manifold I mapped into the 2dimensional differentiable manifold R^2 sage: XIM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 1dimensional differentiable manifold I
The rank of the free module \(\mathcal{X}(I,\Phi)\) is the dimension of the manifold \(\RR^2\), namely two:
sage: XIM.rank() 2
A basis of it is induced by the coordinate vector frame of \(\RR^2\):
sage: XIM.bases() [Vector frame (I, (d/dx,d/dy)) with values on the 2dimensional differentiable manifold R^2]
Some elements of this module:
sage: XIM.an_element().display() 2 d/dx + 2 d/dy sage: v = XIM([t, t^2]) ; v Vector field along the 1dimensional differentiable manifold I with values on the 2dimensional differentiable manifold R^2 sage: v.display() t d/dx + t^2 d/dy
The test suite is passed:
sage: TestSuite(XIM).run()
Let us now consider the module of vector fields on the circle \(S^1\); we start by constructing the \(S^1\) manifold:
sage: M = Manifold(1, 'S^1') sage: U = M.open_subset('U') # the complement of one point sage: c_t.<t> = U.chart('t:(0,2*pi)') # the standard angle coordinate sage: V = M.open_subset('V') # the complement of the point t=pi sage: M.declare_union(U,V) # S^1 is the union of U and V sage: c_u.<u> = V.chart('u:(0,2*pi)') # the angle tpi sage: t_to_u = c_t.transition_map(c_u, (tpi,), intersection_name='W', ....: restrictions1 = t!=pi, restrictions2 = u!=pi) sage: u_to_t = t_to_u.inverse() sage: W = U.intersection(V)
\(S^1\) cannot be covered by a single chart, so it cannot be covered by a coordinate frame. It is however parallelizable and we introduce a global vector frame as follows. We notice that on their common subdomain, \(W\), the coordinate vectors \(\partial/\partial t\) and \(\partial/\partial u\) coincide, as we can check explicitly:
sage: c_t.frame()[0].display(c_u.frame().restrict(W)) d/dt = d/du
Therefore, we can extend \(\partial/\partial t\) to all \(V\) and hence to all \(S^1\), to form a vector field on \(S^1\) whose components w.r.t. both \(\partial/\partial t\) and \(\partial/\partial u\) are 1:
sage: e = M.vector_frame('e') sage: U.set_change_of_frame(e.restrict(U), c_t.frame(), ....: U.tangent_identity_field()) sage: V.set_change_of_frame(e.restrict(V), c_u.frame(), ....: V.tangent_identity_field()) sage: e[0].display(c_t.frame()) e_0 = d/dt sage: e[0].display(c_u.frame()) e_0 = d/du
Equipped with the frame \(e\), the manifold \(S^1\) is manifestly parallelizable:
sage: M.is_manifestly_parallelizable() True
Consequently, the module of vector fields on \(S^1\) is a free module:
sage: XM = M.vector_field_module() ; XM Free module X(S^1) of vector fields on the 1dimensional differentiable manifold S^1 sage: isinstance(XM, FiniteRankFreeModule) True sage: XM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 1dimensional differentiable manifold S^1 sage: XM.base_ring() is M.scalar_field_algebra() True
The zero element:
sage: z = XM.zero() ; z Vector field zero on the 1dimensional differentiable manifold S^1 sage: z.display() zero = 0 sage: z.display(c_t.frame()) zero = 0
The module \(\mathcal{X}(S^1)\) coerces to any module of vector fields defined on a subdomain of \(S^1\), for instance \(\mathcal{X}(U)\):
sage: XU = U.vector_field_module() ; XU Free module X(U) of vector fields on the Open subset U of the 1dimensional differentiable manifold S^1 sage: XU.has_coerce_map_from(XM) True sage: XU.coerce_map_from(XM) Conversion map: From: Free module X(S^1) of vector fields on the 1dimensional differentiable manifold S^1 To: Free module X(U) of vector fields on the Open subset U of the 1dimensional differentiable manifold S^1
The conversion map is actually the restriction of vector fields defined on \(S^1\) to \(U\).
The Sage test suite for modules is passed:
sage: TestSuite(XM).run()

Element
¶ alias of
VectorFieldParal

ambient_domain
()¶ Return the manifold in which the vector fields of
self
take their values.If the module is \(\mathcal{X}(U, \Phi)\), returns the codomain \(M\) of \(\Phi\).
OUTPUT:
 a
DifferentiableManifold
representing the manifold in which the vector fields ofself
take their values
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.ambient_domain() 3dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, uv, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.ambient_domain() 3dimensional differentiable manifold M
 a

basis
(symbol=None, latex_symbol=None, from_frame=None)¶ Define a basis of
self
.A basis of the vector field module is actually a vector frame along the differentiable manifold \(U\) over which the vector field module is defined.
If the basis specified by the given symbol already exists, it is simply returned. If no argument is provided the module’s default basis is returned.
INPUT:
symbol
– (string; default:None
) a letter (of a few letters) to denote a generic element of the basis; ifNone
andfrom_frame = None
the module’s default basis is returnedlatex_symbol
– (string; default:None
) symbol to denote a generic element of the basis; ifNone
, the value ofsymbol
is usedfrom_frame
– (default:None
) vector frame \(\tilde{e}\) on the codomain \(M\) of the destination map \(\Phi\) ofself
; the returned basis \(e\) is then such that for all \(p \in U\), we have \(e(p) = \tilde{e}(\Phi(p))\)
OUTPUT:
 a
VectorFrame
representing a basis onself
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: e = XM.basis('e'); e Vector frame (M, (e_0,e_1))
See
VectorFrame
for more examples and documentation.

destination_map
()¶ Return the differential map associated to
self
.The differential map associated to this module is the map
\[\Phi:\ U \longrightarrow M\]such that this module is the set \(\mathcal{X}(U,\Phi)\) of all vector fields of the type
\[v:\ U \longrightarrow TM\](where \(TM\) is the tangent bundle of \(M\)) such that
\[\forall p \in U,\ v(p) \in T_{\Phi(p)} M,\]where \(T_{\Phi(p)} M\) is the tangent space to \(M\) at the point \(\Phi(p)\).
OUTPUT:
 a
DiffMap
representing the differential map \(\Phi\)
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.destination_map() Identity map Id_M of the 3dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, uv, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.destination_map() Differentiable map Phi from the 2dimensional differentiable manifold U to the 3dimensional differentiable manifold M
 a

domain
()¶ Return the domain of the vector fields in
self
.If the module is \(\mathcal{X}(U, \Phi)\), returns the domain \(U\) of \(\Phi\).
OUTPUT:
 a
DifferentiableManifold
representing the domain of the vector fields that belong to this module
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.domain() 3dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, uv, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.domain() 2dimensional differentiable manifold U
 a

dual_exterior_power
(p)¶ Return the \(p\)th exterior power of the dual of
self
.If the vector field module is \(\mathcal{X}(U,\Phi)\), the \(p\)th exterior power of its dual is the set \(\Lambda^p(U, \Phi)\) of \(p\)forms along \(U\) with values on \(\Phi(U)\). It is a module over \(C^k(U)\), the ring (algebra) of differentiable scalar fields on \(U\).
INPUT:
p
– nonnegative integer
OUTPUT:
 for \(p \geq 1\), a
DiffFormFreeModule
representing the module \(\Lambda^p(U,\Phi)\); for \(p=0\), the base ring, i.e. \(C^k(U)\), is returned instead
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.dual_exterior_power(2) Free module /\^2(M) of 2forms on the 2dimensional differentiable manifold M sage: XM.dual_exterior_power(1) Free module /\^1(M) of 1forms on the 2dimensional differentiable manifold M sage: XM.dual_exterior_power(1) is XM.dual() True sage: XM.dual_exterior_power(0) Algebra of differentiable scalar fields on the 2dimensional differentiable manifold M sage: XM.dual_exterior_power(0) is M.scalar_field_algebra() True
See also
DiffFormFreeModule
for more examples and documentation.

general_linear_group
()¶ Return the general linear group of
self
.If the vector field module is \(\mathcal{X}(U,\Phi)\), the general linear group is the group \(\mathrm{GL}(\mathcal{X}(U,\Phi))\) of automorphisms of \(\mathcal{X}(U,\Phi)\). Note that an automorphism of \(\mathcal{X}(U,\Phi)\) can also be viewed as a field along \(U\) of automorphisms of the tangent spaces of \(V=\Phi(U)\).
OUTPUT:
 a
AutomorphismFieldParalGroup
representing \(\mathrm{GL}(\mathcal{X}(U,\Phi))\)
EXAMPLE:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.general_linear_group() General linear group of the Free module X(M) of vector fields on the 2dimensional differentiable manifold M
See also
AutomorphismFieldParalGroup
for more examples and documentation. a

metric
(name, signature=None, latex_name=None)¶ Construct a pseudoRiemannian metric (nondegenerate symmetric bilinear form) on the current vector field module.
A pseudoRiemannian metric of the vector field module is actually a field of tangentspace nondegenerate symmetric bilinear forms along the manifold \(U\) on which the vector field module is defined.
INPUT:
name
– (string) name given to the metricsignature
– (integer; default:None
) signature \(S\) of the metric: \(S = n_+  n_\), where \(n_+\) (resp. \(n_\)) is the number of positive terms (resp. number of negative terms) in any diagonal writing of the metric components; ifsignature
is not provided, \(S\) is set to the manifold’s dimension (Riemannian signature)latex_name
– (string; default:None
) LaTeX symbol to denote the metric; ifNone
, it is formed fromname
OUTPUT:
 instance of
PseudoRiemannianMetricParal
representing the defined pseudoRiemannian metric.
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.metric('g') Riemannian metric g on the 2dimensional differentiable manifold M sage: XM.metric('g', signature=0) Lorentzian metric g on the 2dimensional differentiable manifold M
See also
PseudoRiemannianMetricParal
for more documentation.

sym_bilinear_form
(name=None, latex_name=None)¶ Construct a symmetric bilinear form on
self
.A symmetric bilinear form on the vector field module is actually a field of tangentspace symmetric bilinear forms along the differentiable manifold \(U\) over which the vector field module is defined.
INPUT:
name
– string (default:None
); name given to the automorphismlatex_name
– string (default:None
); LaTeX symbol to denote the automorphism; ifNone
, the LaTeX symbol is set toname
OUTPUT:
 a
TensorFieldParal
of tensor type \((0,2)\) and symmetric
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.sym_bilinear_form(name='a') Field of symmetric bilinear forms a on the 2dimensional differentiable manifold M
See also
TensorFieldParal
for more examples and documentation.

tensor
(tensor_type, name=None, latex_name=None, sym=None, antisym=None, specific_type=None)¶ Construct a tensor on
self
.The tensor is actually a tensor field along the differentiable manifold \(U\) over which
self
is defined.INPUT:
tensor_type
– pair (k,l) with k being the contravariant rank and l the covariant rankname
– (string; default:None
) name given to the tensorlatex_name
– (string; default:None
) LaTeX symbol to denote the tensor; if none is provided, the LaTeX symbol is set toname
sym
– (default:None
) a symmetry or a list of symmetries among the tensor arguments: each symmetry is described by a tuple containing the positions of the involved arguments, with the convention position=0 for the first argument; for instance:sym = (0,1)
for a symmetry between the 1st and 2nd argumentssym = [(0,2), (1,3,4)]
for a symmetry between the 1st and 3rd arguments and a symmetry between the 2nd, 4th and 5th arguments
antisym
– (default:None
) antisymmetry or list of antisymmetries among the arguments, with the same convention as forsym
specific_type
– (default:None
) specific subclass ofTensorFieldParal
for the output
OUTPUT:
 a
TensorFieldParal
representing the tensor defined onself
with the provided characteristics
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.tensor((1,2), name='t') Tensor field t of type (1,2) on the 2dimensional differentiable manifold M sage: XM.tensor((1,0), name='a') Vector field a on the 2dimensional differentiable manifold M sage: XM.tensor((0,2), name='a', antisym=(0,1)) 2form a on the 2dimensional differentiable manifold M
See
TensorFieldParal
for more examples and documentation.

tensor_from_comp
(tensor_type, comp, name=None, latex_name=None)¶ Construct a tensor on
self
from a set of components.The tensor is actually a tensor field along the differentiable manifold \(U\) over which the vector field module is defined. The tensor symmetries are deduced from those of the components.
INPUT:
tensor_type
– pair \((k,l)\) with \(k\) being the contravariant rank and \(l\) the covariant rankcomp
–Components
; the tensor components in a given basisname
– string (default:None
); name given to the tensorlatex_name
– string (default:None
); LaTeX symbol to denote the tensor; ifNone
, the LaTeX symbol is set toname
OUTPUT:
 a
TensorFieldParal
representing the tensor defined on the vector field module with the provided characteristics
EXAMPLES:
A 2dimensional set of components transformed into a type\((1,1)\) tensor field:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: XM = M.vector_field_module() sage: from sage.tensor.modules.comp import Components sage: comp = Components(M.scalar_field_algebra(), X.frame(), 2, ....: output_formatter=XM._output_formatter) sage: comp[:] = [[1+x, y], [x*y, 2y^2]] sage: t = XM.tensor_from_comp((1,1), comp, name='t'); t Tensor field t of type (1,1) on the 2dimensional differentiable manifold M sage: t.display() t = (x + 1) d/dx*dx  y d/dx*dy + x*y d/dy*dx + (y^2 + 2) d/dy*dy
The same set of components transformed into a type\((0,2)\) tensor field:
sage: t = XM.tensor_from_comp((0,2), comp, name='t'); t Tensor field t of type (0,2) on the 2dimensional differentiable manifold M sage: t.display() t = (x + 1) dx*dx  y dx*dy + x*y dy*dx + (y^2 + 2) dy*dy

tensor_module
(k, l)¶ Return the free module of all tensors of type \((k, l)\) defined on
self
.INPUT:
k
– nonnegative integer; the contravariant rank, the tensor type being \((k, l)\)l
– nonnegative integer; the covariant rank, the tensor type being \((k, l)\)
OUTPUT:
 a
TensorFieldFreeModule
representing the free module of type\((k,l)\) tensors on the vector field module
EXAMPLES:
A tensor field module on a 2dimensional differentiable manifold:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.tensor_module(1,2) Free module T^(1,2)(M) of type(1,2) tensors fields on the 2dimensional differentiable manifold M
The special case of tensor fields of type (1,0):
sage: XM.tensor_module(1,0) Free module X(M) of vector fields on the 2dimensional differentiable manifold M
The result is cached:
sage: XM.tensor_module(1,2) is XM.tensor_module(1,2) True sage: XM.tensor_module(1,0) is XM True
See also
TensorFieldFreeModule
for more examples and documentation.

class
sage.manifolds.differentiable.vectorfield_module.
VectorFieldModule
(domain, dest_map=None)¶ Bases:
sage.structure.unique_representation.UniqueRepresentation
,sage.structure.parent.Parent
Module of vector fields along a differentiable manifold \(U\) with values on a differentiable manifold \(M\), via a differentiable map \(U \rightarrow M\).
Given a differentiable map
\[\Phi:\ U \longrightarrow M,\]the vector field module \(\mathcal{X}(U,\Phi)\) is the set of all vector fields of the type
\[v:\ U \longrightarrow TM\](where \(TM\) is the tangent bundle of \(M\)) such that
\[\forall p \in U,\ v(p) \in T_{\Phi(p)}M,\]where \(T_{\Phi(p)}M\) is the tangent space to \(M\) at the point \(\Phi(p)\).
The set \(\mathcal{X}(U,\Phi)\) is a module over \(C^k(U)\), the ring (algebra) of differentiable scalar fields on \(U\) (see
DiffScalarFieldAlgebra
). Furthermore, it is a Lie algebroid under the Lie bracket (cf. Wikipedia article Lie_algebroid)\[[X, Y] = X \circ Y  Y \circ X\]over the scalarfields if \(\Phi\) is the identity map. That is to say the Lie bracket is antisymmetric, bilinear over the base field, satisfies the Jacobi identity, and \([X, fY] = X(f) Y + f[X, Y]\).
The standard case of vector fields on a differentiable manifold corresponds to \(U = M\) and \(\Phi = \mathrm{Id}_M\); we then denote \(\mathcal{X}(M,\mathrm{Id}_M)\) by merely \(\mathcal{X}(M)\). Other common cases are \(\Phi\) being an immersion and \(\Phi\) being a curve in \(M\) (\(U\) is then an open interval of \(\RR\)).
Note
If \(M\) is parallelizable, the class
VectorFieldFreeModule
should be used instead.INPUT:
domain
– differentiable manifold \(U\) along which the vector fields are defineddest_map
– (default:None
) destination map \(\Phi:\ U \rightarrow M\) (type:DiffMap
); ifNone
, it is assumed that \(U = M\) and \(\Phi\) is the identity map of \(M\) (case of vector fields on \(M\))
EXAMPLES:
Module of vector fields on the 2sphere:
sage: M = Manifold(2, 'M') # the 2dimensional sphere S^2 sage: U = M.open_subset('U') # complement of the North pole sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: V = M.open_subset('V') # complement of the South pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: M.declare_union(U,V) # S^2 is the union of U and V sage: xy_to_uv = c_xy.transition_map(c_uv, (x/(x^2+y^2), y/(x^2+y^2)), ....: intersection_name='W', restrictions1= x^2+y^2!=0, ....: restrictions2= u^2+v^2!=0) sage: uv_to_xy = xy_to_uv.inverse() sage: XM = M.vector_field_module() ; XM Module X(M) of vector fields on the 2dimensional differentiable manifold M
\(\mathcal{X}(M)\) is a module over the algebra \(C^k(M)\):
sage: XM.category() Category of modules over Algebra of differentiable scalar fields on the 2dimensional differentiable manifold M sage: XM.base_ring() is M.scalar_field_algebra() True
\(\mathcal{X}(M)\) is not a free module:
sage: isinstance(XM, FiniteRankFreeModule) False
because \(M = S^2\) is not parallelizable:
sage: M.is_manifestly_parallelizable() False
On the contrary, the module of vector fields on \(U\) is a free module, since \(U\) is parallelizable (being a coordinate domain):
sage: XU = U.vector_field_module() sage: isinstance(XU, FiniteRankFreeModule) True sage: U.is_manifestly_parallelizable() True
The zero element of the module:
sage: z = XM.zero() ; z Vector field zero on the 2dimensional differentiable manifold M sage: z.display(c_xy.frame()) zero = 0 sage: z.display(c_uv.frame()) zero = 0
The module \(\mathcal{X}(M)\) coerces to any module of vector fields defined on a subdomain of \(M\), for instance \(\mathcal{X}(U)\):
sage: XU.has_coerce_map_from(XM) True sage: XU.coerce_map_from(XM) Conversion map: From: Module X(M) of vector fields on the 2dimensional differentiable manifold M To: Free module X(U) of vector fields on the Open subset U of the 2dimensional differentiable manifold M
The conversion map is actually the restriction of vector fields defined on \(M\) to \(U\).

Element
¶ alias of
VectorField

alternating_form
(degree, name=None, latex_name=None)¶ Construct an alternating form on the vector field module.
An alternating form on the vector field module is actually a differential form along the differentiable manifold \(U\) over which the vector field module is defined.
INPUT:
degree
– the degree of the alternating form (i.e. its tensor rank)name
– (string; optional) name given to the alternating formlatex_name
– (string; optional) LaTeX symbol to denote the alternating form; if none is provided, the LaTeX symbol is set toname
OUTPUT:
 instance of
DiffForm
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.alternating_form(2, name='a') 2form a on the 2dimensional differentiable manifold M sage: XM.alternating_form(1, name='a') 1form a on the 2dimensional differentiable manifold M
See also
DiffForm
for more examples and documentation.

ambient_domain
()¶ Return the manifold in which the vector fields of this module take their values.
If the module is \(\mathcal{X}(U,\Phi)\), returns the codomain \(M\) of \(\Phi\).
OUTPUT:
 instance of
DifferentiableManifold
representing the manifold in which the vector fields of this module take their values
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.ambient_domain() 5dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.ambient_domain() 5dimensional differentiable manifold M
 instance of

automorphism
(name=None, latex_name=None)¶ Construct an automorphism of the vector field module.
An automorphism of the vector field module is actually a field of tangentspace automorphisms along the differentiable manifold \(U\) over which the vector field module is defined.
INPUT:
name
– (string; optional) name given to the automorphismlatex_name
– (string; optional) LaTeX symbol to denote the automorphism; if none is provided, the LaTeX symbol is set toname
OUTPUT:
 instance of
AutomorphismField
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.automorphism() Field of tangentspace automorphisms on the 2dimensional differentiable manifold M sage: XM.automorphism(name='a') Field of tangentspace automorphisms a on the 2dimensional differentiable manifold M
See also
AutomorphismField
for more examples and documentation.

destination_map
()¶ Return the differential map associated to this module.
The differential map associated to this module is the map
\[\Phi:\ U \longrightarrow M\]such that this module is the set \(\mathcal{X}(U,\Phi)\) of all vector fields of the type
\[v:\ U \longrightarrow TM\](where \(TM\) is the tangent bundle of \(M\)) such that
\[\forall p \in U,\ v(p) \in T_{\Phi(p)}M,\]where \(T_{\Phi(p)}M\) is the tangent space to \(M\) at the point \(\Phi(p)\).
OUTPUT:
 instance of
DiffMap
representing the differential map \(\Phi\)
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.destination_map() Identity map Id_M of the 5dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.destination_map() Differentiable map Phi from the 2dimensional differentiable manifold U to the 5dimensional differentiable manifold M
 instance of

domain
()¶ Return the domain of the vector fields in this module.
If the module is \(\mathcal{X}(U,\Phi)\), returns the domain \(U\) of \(\Phi\).
OUTPUT:
 instance of
DifferentiableManifold
representing the domain of the vector fields that belong to this module
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.domain() 5dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.domain() 2dimensional differentiable manifold U
 instance of

dual
()¶ Return the dual module.
EXAMPLE:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.dual() Module /\^1(M) of 1forms on the 2dimensional differentiable manifold M

dual_exterior_power
(p)¶ Return the \(p\)th exterior power of the dual of the vector field module.
If the vector field module is \(\mathcal{X}(U,\Phi)\), the \(p\)th exterior power of its dual is the set \(\Lambda^p(U, \Phi)\) of \(p\)forms along \(U\) with values on \(\Phi(U)\). It is a module over \(C^k(U)\), the ring (algebra) of differentiable scalar fields on \(U\).
INPUT:
p
– nonnegative integer
OUTPUT:
 for \(p \geq 1\), instance of
DiffFormModule
representing the module \(\Lambda^p(U,\Phi)\); for \(p=0\), the base ring, i.e. \(C^k(U)\), is returned instead
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.dual_exterior_power(2) Module /\^2(M) of 2forms on the 2dimensional differentiable manifold M sage: XM.dual_exterior_power(1) Module /\^1(M) of 1forms on the 2dimensional differentiable manifold M sage: XM.dual_exterior_power(1) is XM.dual() True sage: XM.dual_exterior_power(0) Algebra of differentiable scalar fields on the 2dimensional differentiable manifold M sage: XM.dual_exterior_power(0) is M.scalar_field_algebra() True
See also
DiffFormModule
for more examples and documentation.

general_linear_group
()¶ Return the general linear group of
self
.If the vector field module is \(\mathcal{X}(U,\Phi)\), the general linear group is the group \(\mathrm{GL}(\mathcal{X}(U,\Phi))\) of automorphisms of \(\mathcal{X}(U, \Phi)\). Note that an automorphism of \(\mathcal{X}(U,\Phi)\) can also be viewed as a field along \(U\) of automorphisms of the tangent spaces of \(M \supset \Phi(U)\).
OUTPUT:
 instance of class
AutomorphismFieldGroup
representing \(\mathrm{GL}(\mathcal{X}(U,\Phi))\)
EXAMPLE:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.general_linear_group() General linear group of the Module X(M) of vector fields on the 2dimensional differentiable manifold M
See also
AutomorphismFieldGroup
for more examples and documentation. instance of class

identity_map
(name='Id', latex_name=None)¶ Construct the identity map on the vector field module.
The identity map on the vector field module is actually a field of tangentspace identity maps along the differentiable manifold \(U\) over which the vector field module is defined.
INPUT:
name
– (string; default:'Id'
) name given to the identity maplatex_name
– (string; optional) LaTeX symbol to denote the identity map; if none is provided, the LaTeX symbol is set to'\mathrm{Id}'
ifname
is'Id'
and toname
otherwise
OUTPUT:
 instance of
AutomorphismField
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.identity_map() Field of tangentspace identity maps on the 2dimensional differentiable manifold M

linear_form
(name=None, latex_name=None)¶ Construct a linear form on the vector field module.
A linear form on the vector field module is actually a field of linear forms (i.e. a 1form) along the differentiable manifold \(U\) over which the vector field module is defined.
INPUT:
name
– (string; optional) name given to the linear formlatex_name
– (string; optional) LaTeX symbol to denote the linear form; if none is provided, the LaTeX symbol is set toname
OUTPUT:
 instance of
DiffForm
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.linear_form() 1form on the 2dimensional differentiable manifold M sage: XM.linear_form(name='a') 1form a on the 2dimensional differentiable manifold M
See also
DiffForm
for more examples and documentation.

metric
(name, signature=None, latex_name=None)¶ Construct a pseudoRiemannian metric (nondegenerate symmetric bilinear form) on the current vector field module.
A pseudoRiemannian metric of the vector field module is actually a field of tangentspace nondegenerate symmetric bilinear forms along the manifold \(U\) on which the vector field module is defined.
INPUT:
name
– (string) name given to the metricsignature
– (integer; default:None
) signature \(S\) of the metric: \(S = n_+  n_\), where \(n_+\) (resp. \(n_\)) is the number of positive terms (resp. number of negative terms) in any diagonal writing of the metric components; ifsignature
is not provided, \(S\) is set to the manifold’s dimension (Riemannian signature)latex_name
– (string; default:None
) LaTeX symbol to denote the metric; ifNone
, it is formed fromname
OUTPUT:
 instance of
PseudoRiemannianMetric
representing the defined pseudoRiemannian metric.
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.metric('g') Riemannian metric g on the 2dimensional differentiable manifold M sage: XM.metric('g', signature=0) Lorentzian metric g on the 2dimensional differentiable manifold M
See also
PseudoRiemannianMetric
for more documentation.

tensor
(tensor_type, name=None, latex_name=None, sym=None, antisym=None, specific_type=None)¶ Construct a tensor on
self
.The tensor is actually a tensor field on the domain of the vector field module.
INPUT:
tensor_type
– pair (k,l) with k being the contravariant rank and l the covariant rankname
– (string; default:None
) name given to the tensorlatex_name
– (string; default:None
) LaTeX symbol to denote the tensor; if none is provided, the LaTeX symbol is set toname
sym
– (default:None
) a symmetry or a list of symmetries among the tensor arguments: each symmetry is described by a tuple containing the positions of the involved arguments, with the convention position=0 for the first argument; for instance:sym=(0,1)
for a symmetry between the 1st and 2nd argumentssym=[(0,2),(1,3,4)]
for a symmetry between the 1st and 3rd arguments and a symmetry between the 2nd, 4th and 5th arguments
antisym
– (default:None
) antisymmetry or list of antisymmetries among the arguments, with the same convention as forsym
specific_type
– (default:None
) specific subclass ofTensorField
for the output
OUTPUT:
 instance of
TensorField
representing the tensor defined on the vector field module with the provided characteristics
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.tensor((1,2), name='t') Tensor field t of type (1,2) on the 2dimensional differentiable manifold M sage: XM.tensor((1,0), name='a') Vector field a on the 2dimensional differentiable manifold M sage: XM.tensor((0,2), name='a', antisym=(0,1)) 2form a on the 2dimensional differentiable manifold M
See also
TensorField
for more examples and documentation.

tensor_module
(k, l)¶ Return the module of type\((k,l)\) tensors on
self
.INPUT:
k
– nonnegative integer; the contravariant rank, the tensor type being \((k,l)\)l
– nonnegative integer; the covariant rank, the tensor type being \((k,l)\)
OUTPUT:
 instance of
TensorFieldModule
representing the module \(T^{(k,l)}(U,\Phi)\) of type\((k,l)\) tensors on the vector field module
EXAMPLES:
A tensor field module on a 2dimensional differentiable manifold:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.tensor_module(1,2) Module T^(1,2)(M) of type(1,2) tensors fields on the 2dimensional differentiable manifold M
The special case of tensor fields of type (1,0):
sage: XM.tensor_module(1,0) Module X(M) of vector fields on the 2dimensional differentiable manifold M
The result is cached:
sage: XM.tensor_module(1,2) is XM.tensor_module(1,2) True sage: XM.tensor_module(1,0) is XM True
See
TensorFieldModule
for more examples and documentation.

zero
()¶ Return the zero of
self
.EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.zero() Vector field zero on the 2dimensional differentiable manifold M