Topological Vector Bundle¶
Let \(K\) be a topological field. A vector bundle of rank \(n\) over the field \(K\) and over a topological manifold \(B\) (base space) is a topological manifold \(E\) (total space) together with a continuous and surjective map \(\pi: E \to B\) such that for every point \(p \in B\), we have:
the set \(E_p=\pi^{-1}(p)\) has the vector space structure of \(K^n\),
there is a neighborhood \(U \subset B\) of \(p\) and a homeomorphism (trivialization) \(\varphi: \pi^{-1}(p) \to U \times K^n\) such that \(\varphi\) is compatible with the fibers, namely \(\pi \circ \varphi^{-1} = \mathrm{pr}_1\), and \(v \mapsto \varphi^{-1}(q,v)\) is a linear isomorphism between \(K^n\) and \(E_q\) for any \(q \in U\).
AUTHORS:
Michael Jung (2019) : initial version
-
class
sage.manifolds.vector_bundle.
TopologicalVectorBundle
(rank, name, base_space, field='real', latex_name=None, category=None, unique_tag=None)¶ Bases:
sage.structure.category_object.CategoryObject
,sage.structure.unique_representation.UniqueRepresentation
An instance of this class is a topological vector bundle \(E \to B\) over a topological field \(K\).
INPUT:
rank
– positive integer; rank of the vector bundlename
– string representation given to the total spacebase_space
– the base space (topological manifold) over which the vector bundle is definedfield
– field \(K\) which gives the fibers the structure of a vector space over \(K\); allowed values are'real'
or an object of typeRealField
(e.g.,RR
) for a vector bundle over \(\RR\)'complex'
or an object of typeComplexField
(e.g.,CC
) for a vector bundle over \(\CC\)an object in the category of topological fields (see
Fields
andTopologicalSpaces
) for other types of topological fields
latex_name
– (default:None
) LaTeX representation given to the total spacecategory
– (default:None
) to specify the category; ifNone
,VectorBundles(base_space, c_field)
is assumed (see the categoryVectorBundles
)unique_tag
– (default:None
) tag used to force the construction of a new object when all the other arguments have been used previously (withoutunique_tag
, theUniqueRepresentation
behavior would return the previously constructed object corresponding to these arguments)
EXAMPLES:
A real line bundle over some 4-dimensional topological manifold:
sage: M = Manifold(4, 'M', structure='top') sage: E = M.vector_bundle(1, 'E'); E Topological real vector bundle E -> M of rank 1 over the base space 4-dimensional topological manifold M sage: E.base_space() 4-dimensional topological manifold M sage: E.base_ring() Real Field with 53 bits of precision sage: E.rank() 1
For a more sophisticated example, let us define a non-trivial 2-manifold to work with:
sage: M = Manifold(2, 'M', structure='top') sage: U = M.open_subset('U') ; V = M.open_subset('V') sage: M.declare_union(U,V) # M is the union of U and V sage: c_xy.<x,y> = U.chart() ; c_uv.<u,v> = V.chart() sage: xy_to_uv = c_xy.transition_map(c_uv, (x+y, x-y), ....: intersection_name='W', restrictions1= x>0, ....: restrictions2= u+v>0) sage: uv_to_xy = xy_to_uv.inverse() sage: W = U.intersection(V) sage: E = M.vector_bundle(2, 'E'); E Topological real vector bundle E -> M of rank 2 over the base space 2-dimensional topological manifold M
Now, there a two ways to go. Most effortlessly, we define trivializations similar to charts (see
Trivialization
):sage: phi_U = E.trivialization('phi_U', domain=U); phi_U Trivialization (phi_U, E|_U) sage: phi_V = E.trivialization('phi_V', domain=V); phi_V Trivialization (phi_V, E|_V) sage: transf = phi_U.transition_map(phi_V, [[0,x],[x,0]]) # transition map between trivializations sage: fU = phi_U.frame(); fU Trivialization frame (E|_U, ((phi_U^*e_1),(phi_U^*e_2))) sage: fV = phi_V.frame(); fV Trivialization frame (E|_V, ((phi_V^*e_1),(phi_V^*e_2))) sage: E.changes_of_frame() # random {(Local frame (E|_W, ((phi_U^*e_1),(phi_U^*e_2))), Local frame (E|_W, ((phi_V^*e_1),(phi_V^*e_2)))): Automorphism phi_U^(-1)*phi_V^(-1) of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold M with values in the real vector bundle E of rank 2, (Local frame (E|_W, ((phi_V^*e_1),(phi_V^*e_2))), Local frame (E|_W, ((phi_U^*e_1),(phi_U^*e_2)))): Automorphism phi_U^(-1)*phi_V of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold M with values in the real vector bundle E of rank 2}
Then, the atlas of \(E\) consists of all known trivializations defined on E:
sage: E.atlas() # a shallow copy of the atlas [Trivialization (phi_U, E|_U), Trivialization (phi_V, E|_V)]
Or we just define frames, an automorphism on the free section module over the intersection domain \(W\) and declare the change of frame manually (for more details consult
LocalFrame
):sage: eU = E.local_frame('eU', domain=U); eU Local frame (E|_U, (eU_0,eU_1)) sage: eUW = eU.restrict(W) # to trivialize E|_W sage: eV = E.local_frame('eV', domain=V); eV Local frame (E|_V, (eV_0,eV_1)) sage: eVW = eV.restrict(W) sage: a = E.section_module(domain=W).automorphism(); a Automorphism of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: a[eUW,:] = [[0,x],[x,0]] sage: E.set_change_of_frame(eUW, eVW, a) sage: E.change_of_frame(eUW, eVW) Automorphism of the Free module C^0(W;E) of sections on the Open subset W of the 2-dimensional topological manifold M with values in the real vector bundle E of rank 2
Now, the list of all known frames defined on \(E\) can be displayed via
frames()
:sage: E.frames() # a shallow copy of all known frames on E [Trivialization frame (E|_U, ((phi_U^*e_1),(phi_U^*e_2))), Trivialization frame (E|_V, ((phi_V^*e_1),(phi_V^*e_2))), Local frame (E|_W, ((phi_U^*e_1),(phi_U^*e_2))), Local frame (E|_W, ((phi_V^*e_1),(phi_V^*e_2))), Local frame (E|_U, (eU_0,eU_1)), Local frame (E|_W, (eU_0,eU_1)), Local frame (E|_V, (eV_0,eV_1)), Local frame (E|_W, (eV_0,eV_1))]
By definition \(E\) is a manifold, in this case of dimension 4 (notice that the induced charts are not implemented, yet):
sage: E.total_space() 4-dimensional topological manifold E
The method
section()
returns a section while the methodsection_module()
returns the section module on the corresponding domain:sage: s = E.section(name='s'); s Section s on the 2-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: s in E.section_module() True
-
atlas
()¶ Return the list of trivializations that have been defined for
self
.EXAMPLES:
sage: M = Manifold(3, 'M') sage: U = M.open_subset('U') sage: V = M.open_subset('V') sage: E = M.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', domain=U) sage: phi_V = E.trivialization('phi_V', domain=V) sage: phi_M = E.trivialization('phi_M') sage: E.atlas() [Trivialization (phi_U, E|_U), Trivialization (phi_V, E|_V), Trivialization (phi_M, E|_M)]
-
base_field
()¶ Return the field on which the fibers are defined.
OUTPUT:
a topological field
EXAMPLES:
sage: M = Manifold(3, 'M', structure='topological') sage: E = M.vector_bundle(2, 'E', field=CC) sage: E.base_field() Complex Field with 53 bits of precision
-
base_field_type
()¶ Return the type of topological field on which the fibers are defined.
OUTPUT:
a string describing the field, with three possible values:
'real'
for the real field \(\RR\)'complex'
for the complex field \(\CC\)'neither_real_nor_complex'
for a field different from \(\RR\) and \(\CC\)
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: E = M.vector_bundle(2, 'E', field=CC) sage: E.base_field_type() 'complex'
-
base_space
()¶ Return the base space of the vector bundle.
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: E.base_space() 2-dimensional topological manifold M
-
change_of_frame
(frame1, frame2)¶ Return a change of local frames defined on
self
.INPUT:
frame1
– local frame 1frame2
– local frame 2
OUTPUT:
a
FreeModuleAutomorphism
representing, at each point, the vector space automorphism \(P\) that relates frame 1, \((e_i)\) say, to frame 2, \((f_i)\) say, according to \(f_i = P(e_i)\)
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: X.<x,y,z> = M.chart() sage: E = M.vector_bundle(2, 'E') sage: e = E.local_frame('e') sage: a = E.section_module().automorphism() # Now, the section module is free sage: a[:] = [[sqrt(3)/2, -1/2], [1/2, sqrt(3)/2]] sage: f = e.new_frame(a, 'f') sage: E.change_of_frame(e, f) Automorphism of the Free module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: a == E.change_of_frame(e, f) True sage: a.inverse() == E.change_of_frame(f, e) True
-
changes_of_frame
()¶ Return all the changes of local frames defined on
self
.OUTPUT:
dictionary of vector bundle automorphisms representing the changes of frames, the keys being the pair of frames
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: c_xyz.<x,y,z> = M.chart() sage: E = M.vector_bundle(2, 'E') sage: e = E.local_frame('e'); e Local frame (E|_M, (e_0,e_1)) sage: auto_group = E.section_module().general_linear_group() sage: e_to_f = auto_group([[0,1],[1,0]]); e_to_f Automorphism of the Free module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2 sage: f_in_e = auto_group([[0,1],[1,0]]) sage: f = e.new_frame(f_in_e, 'f'); f Local frame (E|_M, (f_0,f_1)) sage: E.changes_of_frame() # random {(Local frame (E|_M, (f_0,f_1)), Local frame (E|_M, (e_0,e_1))): Automorphism of the Free module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2, (Local frame (E|_M, (e_0,e_1)), Local frame (E|_M, (f_0,f_1))): Automorphism of the Free module C^0(M;E) of sections on the 3-dimensional topological manifold M with values in the real vector bundle E of rank 2}
-
coframes
()¶ Return the list of coframes defined on
self
.OUTPUT:
list of coframes defined on
self
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: U = M.open_subset('U'); V = M.open_subset('V') sage: phi_U = E.trivialization('phi_U', domain=U) sage: e = E.local_frame('e', domain=V) sage: E.coframes() [Trivialization coframe (E|_U, ((phi_U^*e^1),(phi_U^*e^2))), Local coframe (E|_V, (e^0,e^1))]
-
default_frame
()¶ Return the default frame of on
self
.OUTPUT:
a local frame as an instance of
LocalFrame
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: e = E.local_frame('e') sage: E.default_frame() Local frame (E|_M, (e_0,e_1))
-
fiber
(point)¶ Return the vector bundle fiber over a point.
INPUT:
point
–ManifoldPoint
; point \(p\) of the base space ofself
OUTPUT:
instance of
VectorBundleFiber
representing the fiber over \(p\)
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: X.<x,y,z> = M.chart() sage: p = M((0,2,1), name='p'); p Point p on the 3-dimensional topological manifold M sage: E = M.vector_bundle(2, 'E'); E Topological real vector bundle E -> M of rank 2 over the base space 3-dimensional topological manifold M sage: E.fiber(p) Fiber of E at Point p on the 3-dimensional topological manifold M
-
frames
()¶ Return the list of local frames defined on
self
.OUTPUT:
list of local frames defined on
self
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: U = M.open_subset('U'); V = M.open_subset('V') sage: phi_U = E.trivialization('phi_U', domain=U) sage: e = E.local_frame('e', domain=V) sage: E.frames() [Trivialization frame (E|_U, ((phi_U^*e_1),(phi_U^*e_2))), Local frame (E|_V, (e_0,e_1))]
-
irange
(start=None)¶ Single index generator.
INPUT:
start
– (default:None
) initial value \(i_0\) of the index; if none are provided, the value returned bysage.manifolds.manifold.Manifold.start_index()
is assumed
OUTPUT:
an iterable index, starting from \(i_0\) and ending at \(i_0 + n - 1\), where \(n\) is the vector bundle’s dimension
EXAMPLES:
Index range on a 4-dimensional vector bundle over a 5-dimensional manifold:
sage: M = Manifold(5, 'M', structure='topological') sage: E = M.vector_bundle(4, 'E') sage: list(E.irange()) [0, 1, 2, 3] sage: list(E.irange(2)) [2, 3]
Index range on a 4-dimensional vector bundle over a 5-dimensional manifold with starting index=1:
sage: M = Manifold(5, 'M', structure='topological', start_index=1) sage: E = M.vector_bundle(4, 'E') sage: list(E.irange()) [1, 2, 3, 4] sage: list(E.irange(2)) [2, 3, 4]
In general, one has always:
sage: next(E.irange()) == M.start_index() True
-
is_manifestly_trivial
()¶ Return
True
ifself
is manifestly a trivial bundle, i.e. there exists a frame or a trivialization defined on the whole base space.EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: E = M.vector_bundle(1, 'E') sage: U = M.open_subset('U') sage: V = M.open_subset('V') sage: M.declare_union(U, V) sage: phi_U = E.trivialization('phi_U', domain=U); phi_U Trivialization (phi_U, E|_U) sage: phi_V = E.trivialization('phi_V', domain=V); phi_V Trivialization (phi_V, E|_V) sage: E.is_manifestly_trivial() False sage: E.trivialization('phi_M', M) Trivialization (phi_M, E|_M) sage: E.is_manifestly_trivial() True
-
local_frame
(*args, **kwargs)¶ Define a local frame on
self
.A local frame is a section on a subset \(U \subset M\) in \(E\) that provides, at each point \(p\) of the base space, a vector basis of the fiber \(E_p\) at \(p\).
See also
LocalFrame
for complete documentation.INPUT:
symbol
– either a string, to be used as a common base for the symbols of the sections constituting the local frame, or a list/tuple of strings, representing the individual symbols of the sectionssections
– tuple or list of \(n\) linearly independent sections onself
(\(n\) being the rank ofself
) defining the local frame; can be omitted if the local frame is created from scratchlatex_symbol
– (default:None
) either a string, to be used as a common base for the LaTeX symbols of the sections constituting the local frame, or a list/tuple of strings, representing the individual LaTeX symbols of the sections; ifNone
,symbol
is used in place oflatex_symbol
indices
– (default:None
; used only ifsymbol
is a single string) tuple of strings representing the indices labelling the sections of the frame; ifNone
, the indices will be generated as integers within the range declared onself
latex_indices
– (default:None
) tuple of strings representing the indices for the LaTeX symbols of the sections; ifNone
,indices
is used insteadsymbol_dual
– (default:None
) same assymbol
but for the dual coframe; ifNone
,symbol
must be a string and is used for the common base of the symbols of the elements of the dual coframelatex_symbol_dual
– (default:None
) same aslatex_symbol
but for the dual coframedomain
– (default:None
) domain on which the local frame is defined; ifNone
, the whole base space is assumed
OUTPUT:
a
LocalFrame
representing the defined local frame
EXAMPLES:
Defining a local frame from two linearly independent sections on a real rank-2 vector bundle:
sage: M = Manifold(3, 'M', structure='top') sage: U = M.open_subset('U') sage: X.<x,y,z> = U.chart() sage: E = M.vector_bundle(2, 'E') sage: phi = E.trivialization('phi', domain=U) sage: s0 = E.section(name='s_0', domain=U) sage: s0[:] = 1+z^2, -2 sage: s1 = E.section(name='s_1', domain=U) sage: s1[:] = 1, 1+x^2 sage: e = E.local_frame('e', (s0, s1), domain=U); e Local frame (E|_U, (e_0,e_1)) sage: (e[0], e[1]) == (s0, s1) True
If the sections are not linearly independent, an error is raised:
sage: e = E.local_frame('z', (s0, -s0), domain=U) Traceback (most recent call last): ... ValueError: the provided sections are not linearly independent
It is also possible to create a local frame from scratch, without connecting it to previously defined local frames or sections (this can still be performed later via the method
set_change_of_frame()
):sage: f = E.local_frame('f', domain=U); f Local frame (E|_U, (f_0,f_1))
For a global frame, the argument
domain
is omitted:sage: g = E.local_frame('g'); g Local frame (E|_M, (g_0,g_1))
See also
For more options, in particular for the choice of symbols and indices, see
LocalFrame
.
-
rank
()¶ Return the rank of the vector bundle.
EXAMPLES:
sage: M = Manifold(2, 'M', structure='top') sage: E = M.vector_bundle(3, 'E') sage: E.rank() 3
-
section
(*comp, **kwargs)¶ Return a continuous section of
self
.INPUT:
domain
– (default:None
) domain on which the section shall be defined; ifNone
, the base space is assumedname
– (default:None
) name of the local sectionlatex_name
– (default``None``) latex representation of the local section
OUTPUT:
an instance of
Section
representing a continuous section of \(M\) with values on \(E\)
EXAMPLES:
A section on a non-trivial rank 2 vector bundle over a non-trivial 2-manifold:
sage: M = Manifold(2, 'M', structure='top') sage: U = M.open_subset('U') ; V = M.open_subset('V') sage: M.declare_union(U,V) # M is the union of U and V sage: c_xy.<x,y> = U.chart() ; c_uv.<u,v> = V.chart() sage: xy_to_uv = c_xy.transition_map(c_uv, (x+y, x-y), ....: intersection_name='W', restrictions1= x>0, ....: restrictions2= u+v>0) sage: uv_to_xy = xy_to_uv.inverse() sage: W = U.intersection(V) sage: E = M.vector_bundle(2, 'E') # define the vector bundle sage: phi_U = E.trivialization('phi_U', domain=U) # define trivializations sage: phi_V = E.trivialization('phi_V', domain=V) sage: transf = phi_U.transition_map(phi_V, [[0,x],[x,0]]) # transition map between trivializations sage: fU = phi_U.frame(); fV = phi_V.frame() # define induced frames sage: s = E.section(name='s'); s Section s on the 2-dimensional topological manifold M with values in the real vector bundle E of rank 2
-
section_module
(domain=None, force_free=False)¶ Return the section module of continuous sections on
self
.See
SectionModule
for a complete documentation.INPUT:
force_free
– (default:False
) if set toTrue
, force the construction of a free module (this implies that \(E\) is trivial)
OUTPUT:
a
SectionModule
(or if \(E\) is trivial, aSectionFreeModule
) representing the module \(\Gamma(E)\) of continuous sections on \(M\) taking values on \(E\)
EXAMPLES:
Module of sections on the Möbius bundle:
sage: M = Manifold(1, 'S^1', structure='top', start_index=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 t-pi sage: t_to_u = c_t.transition_map(c_u, (t-pi,), ....: intersection_name='W', ....: restrictions1 = t!=pi, ....: restrictions2 = u!=pi) sage: u_to_t = t_to_u.inverse() sage: W = U.intersection(V) sage: E = M.vector_bundle(1, 'E') sage: phi_U = E.trivialization('phi_U', latex_name=r'\varphi_U', ....: domain=U) sage: phi_V = E.trivialization('phi_V', latex_name=r'\varphi_V', ....: domain=V) sage: transf = phi_U.transition_map(phi_V, [[-1]]) sage: C0 = E.section_module(); C0 Module C^0(S^1;E) of sections on the 1-dimensional topological manifold S^1 with values in the real vector bundle E of rank 1
\(C^0(S^1;E)\) is a module over the algebra \(C^0(M)\):
sage: C0.category() Category of modules over Algebra of scalar fields on the 1-dimensional topological manifold S^1 sage: C0.base_ring() is M.scalar_field_algebra() True
However, \(C^0(S^1;E)\) is not a free module:
sage: isinstance(C0, FiniteRankFreeModule) False
since the Möbius bundle is not trivial:
sage: E.is_manifestly_trivial() False
The section module over \(U\), on the other hand, is a free module since \(E|_U\) admits a trivialization and therefore has a local frame:
sage: C0_U = E.section_module(domain=U) sage: isinstance(C0_U, FiniteRankFreeModule) True
The elements of \(C^0(U)\) are sections on \(U\):
sage: C0_U.an_element() Section on the Open subset U of the 1-dimensional topological manifold S^1 with values in the real vector bundle E of rank 1 sage: C0_U.an_element().display(phi_U.frame()) 2 (phi_U^*e_1)
-
set_change_of_frame
(frame1, frame2, change_of_frame, compute_inverse=True)¶ Relate two vector frames by an automorphism.
This updates the internal dictionary
self._frame_changes
.INPUT:
frame1
– frame 1, denoted \((e_i)\) belowframe2
– frame 2, denoted \((f_i)\) belowchange_of_frame
– instance of classFreeModuleAutomorphism
describing the automorphism \(P\) that relates the basis \((e_i)\) to the basis \((f_i)\) according to \(f_i = P(e_i)\)compute_inverse
(default: True) – if set to True, the inverse automorphism is computed and the change from basis \((f_i)\) to \((e_i)\) is set to it in the internal dictionaryself._frame_changes
EXAMPLES:
sage: M = Manifold(3, 'M') sage: c_xyz.<x,y,z> = M.chart() sage: E = M.vector_bundle(2, 'E') sage: e = E.local_frame('e') sage: f = E.local_frame('f') sage: a = E.section_module().automorphism() sage: a[e,:] = [[1,2],[0,3]] sage: E.set_change_of_frame(e, f, a) sage: f[0].display(e) f_0 = e_0 sage: f[1].display(e) f_1 = 2 e_0 + 3 e_1 sage: e[0].display(f) e_0 = f_0 sage: e[1].display(f) e_1 = -2/3 f_0 + 1/3 f_1 sage: E.change_of_frame(e,f)[e,:] [1 2] [0 3]
-
set_default_frame
(frame)¶ Set the default frame of
self
.INPUT:
frame
– a local frame defined onself
as an instance ofLocalFrame
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: e = E.local_frame('e') sage: E.default_frame() Local frame (E|_M, (e_0,e_1)) sage: f = E.local_frame('f') sage: E.set_default_frame(f) sage: E.default_frame() Local frame (E|_M, (f_0,f_1))
-
total_space
()¶ Return the total space of
self
.Note
At this stage, the total space does not come with induced charts.
OUTPUT:
the total space of
self
as an instance ofTopologicalManifold
EXAMPLES:
sage: M = Manifold(3, 'M', structure='top') sage: E = M.vector_bundle(2, 'E') sage: E.total_space() 6-dimensional topological manifold E
-
transition
(triv1, triv2)¶ Return the transition map between two trivializations defined over the manifold.
The transition map must have been defined previously, for instance by the method
transition_map()
.INPUT:
triv1
– trivialization 1triv2
– trivialization 2
OUTPUT:
instance of
TransitionMap
representing the transition map from trivialization 1 to trivialization 2
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() sage: U = M.open_subset('U') sage: V = M.open_subset('V') sage: X_UV = X.restrict(U.intersection(V)) sage: E = M.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', domain=U) sage: phi_V = E.trivialization('phi_V', domain=V) sage: phi_U_to_phi_V = phi_U.transition_map(phi_V, 1) sage: E.transition(phi_V, phi_U) Transition map from Trivialization (phi_V, E|_V) to Trivialization (phi_U, E|_U)
-
transitions
()¶ Return the transition maps defined over subsets of the base space.
OUTPUT:
dictionary of transition maps, with pairs of trivializations as keys
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() sage: U = M.open_subset('U') sage: V = M.open_subset('V') sage: X_UV = X.restrict(U.intersection(V)) sage: E = M.vector_bundle(2, 'E') sage: phi_U = E.trivialization('phi_U', domain=U) sage: phi_V = E.trivialization('phi_U', domain=V) sage: phi_U_to_phi_V = phi_U.transition_map(phi_V, 1) sage: E.transitions() # random {(Trivialization (phi_U, E|_U), Trivialization (phi_U, E|_V)): Transition map from Trivialization (phi_U, E|_U) to Trivialization (phi_U, E|_V), (Trivialization (phi_U, E|_V), Trivialization (phi_U, E|_U)): Transition map from Trivialization (phi_U, E|_V) to Trivialization (phi_U, E|_U)}
-
trivialization
(name, domain=None, latex_name=None)¶ Return a trivialization of
self
over the domaindomain
.INPUT:
domain
– (default:None
) domain on which the trivialization is defined; ifNone
the base space is assumedname
– (default:None
) name given to the trivializationlatex_name
– (default:None
) LaTeX name given to the trivialization
OUTPUT:
a
Trivialization
representing a trivialization of \(E\)
EXAMPLES:
sage: M = Manifold(3, 'M') sage: U = M.open_subset('U') sage: E = M.vector_bundle(2, 'E') sage: phi = E.trivialization('phi', domain=U); phi Trivialization (phi, E|_U)