Skip to content
This repository was archived by the owner on Feb 1, 2023. It is now read-only.

Commit 770e699

Browse files
author
Michael Jung
committed
More detailed documentation
1 parent b8eba57 commit 770e699

File tree

2 files changed

+109
-69
lines changed

2 files changed

+109
-69
lines changed

src/sage/manifolds/differentiable/vector_bundle.py

Lines changed: 105 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ def total_space(self):
161161
r"""
162162
Return the total space of ``self``.
163163
164+
.. NOTE::
165+
166+
At this stage, the total space does not come with induced charts.
167+
164168
OUTPUT:
165169
166170
- the total space of ``self`` as an instance of
@@ -196,17 +200,17 @@ class TensorBundle(DifferentiableVectorBundle):
196200
Tensor bundle over a differentiable manifold along a differentiable map.
197201
198202
An instance of this class represents the pullback tensor bundle
199-
`\Phi^* T^{(k,l)}M` along a differentiable map
203+
`\Phi^* T^{(k,l)}M` along a differentiable map (called *destination map*)
200204
201205
.. MATH::
202206
203-
\Phi: U \longrightarrow M
207+
\Phi: N \longrightarrow M
204208
205-
between two differentiable manifolds `U` and `M` over the topological field
209+
between two differentiable manifolds `N` and `M` over the topological field
206210
`K`.
207211
208212
More precisely, `\Phi^* T^{(k,l)}M` consists of all pairs
209-
`(p,t) \in U \times T^{(k,l)}M` such that `t \in T_q^{(k,l)}M` for
213+
`(p,t) \in N \times T^{(k,l)}M` such that `t \in T_q^{(k,l)}M` for
210214
`q = \Phi(p)`, namely
211215
212216
.. MATH::
@@ -231,29 +235,29 @@ class TensorBundle(DifferentiableVectorBundle):
231235
\left.\mathrm{d}x^{b_1}\right|_q, \dots,
232236
\left.\mathrm{d}x^{b_l}\right|_q \right) \in K
233237
234-
and a trivialization over `\Phi^{-1}(V) \subset U` is obtained via
238+
and a trivialization over `\Phi^{-1}(V) \subset N` is obtained via
235239
236240
.. MATH::
237241
238242
(p,t) \mapsto \left(p, t^{1 \ldots 1}_{\phantom{1 \ldots 1} \, 1 \ldots 1},
239243
\dots, t^{n \ldots n}_{\phantom{n \ldots n} \, n \ldots n} \right)
240-
\in U \times K^{n(k+l)}
244+
\in N \times K^{n(k+l)}
241245
242246
The standard case of a tensor bundle over a differentiable manifold
243-
corresponds to `U=M` and `\Phi = \mathrm{Id}_M`. Other common cases are
244-
`\Phi` being an immersion and `\Phi` being a curve in `M` (`U` is then an
247+
corresponds to `N=M` and `\Phi = \mathrm{Id}_M`. Other common cases are
248+
`\Phi` being an immersion and `\Phi` being a curve in `M` (`N` is then an
245249
open interval of `\RR`).
246250
247251
INPUT:
248252
249-
- ``base_space`` -- the base space (differentiable manifold) `U` over which
253+
- ``base_space`` -- the base space (differentiable manifold) `N` over which
250254
the tensor bundle is defined
251255
- ``k`` -- the contravariant rank of the corresponding tensor bundle
252256
- ``l`` -- the covariant rank of the corresponding tensor bundle
253257
- ``dest_map`` -- (default: ``None``) destination map
254-
`\Phi:\ U \rightarrow M`
258+
`\Phi:\ N \rightarrow M`
255259
(type: :class:`~sage.manifolds.differentiable.diff_map.DiffMap`); if
256-
``None``, it is assumed that `U=M` and `\Phi` is the identity map of
260+
``None``, it is assumed that `N=M` and `\Phi` is the identity map of
257261
`M` (case of the standard tensor bundle over `M`)
258262
259263
EXAMPLES:
@@ -430,15 +434,16 @@ def fiber(self, point):
430434

431435
def atlas(self):
432436
r"""
433-
Return the list of charts that have been defined on the codomain of
434-
`\Phi`.
437+
Return the list of charts that have been defined on the codomain of the
438+
destination map.
435439
436-
.. SEEALSO::
440+
.. NOTE::
437441
438-
This method invokes
442+
Since an atlas of charts gives rise to an atlas of trivializations,
443+
this method directly invokes
439444
:meth:`~sage.manifolds.manifold.TopologicalManifold.atlas`
440445
of class
441-
:class:`~sage.manifolds.manifold.TopologicalManifold`
446+
:class:`~sage.manifolds.manifold.TopologicalManifold`.
442447
443448
EXAMPLES::
444449
@@ -457,9 +462,9 @@ def section_module(self, domain=None):
457462
Return the section module, namely the corresponding tensor field module,
458463
of ``self``.
459464
460-
.. SEEALSO::
465+
.. NOTE::
461466
462-
This method invokes
467+
This method directly invokes
463468
:meth:`~sage.manifolds.differentiable.manifold.DifferentiableManifold.tensor_field_module`.
464469
465470
INPUT:
@@ -474,7 +479,7 @@ def section_module(self, domain=None):
474479
(or if `M` is parallelizable, a
475480
:class:`~sage.manifolds.differentiable.tensorfield_module.TensorFieldFreeModule`)
476481
representing the module `\mathcal{T}^{(k,l)}(M,\Phi)` of type-`(k,l)`
477-
tensor fields on `U` taking values on `\Phi(U)\subset M`
482+
tensor fields on `N` taking values on `\Phi(N)\subset M`
478483
479484
EXAMPLES::
480485
@@ -501,9 +506,9 @@ def section(self, *args, **kwargs):
501506
Return a section of ``self``, namely a tensor field on the base
502507
manifold.
503508
504-
.. SEEALSO::
509+
.. NOTE::
505510
506-
This method invokes
511+
This method directly invokes
507512
:meth:`~sage.manifolds.differentiable.manifold.DifferentiableManifold.tensor_field`.
508513
509514
INPUT:
@@ -586,11 +591,17 @@ def set_change_of_frame(self, frame1, frame2, change_of_frame,
586591
Relate two vector frames by an automorphism.
587592
588593
This updates the internal dictionary ``self._frame_changes`` of the
589-
base space `M`.
594+
base space `N`.
590595
591596
.. SEEALSO::
592597
593-
This method invokes
598+
For further details on frames on ``self`` see
599+
:meth:`local_frame`.
600+
601+
.. NOTE::
602+
603+
Since frames on ``self`` are directly induced by vector frames on
604+
the base space, this method directly invokes
594605
:meth:`~sage.manifolds.differentiable.manifold.DifferentiableManifold.set_change_of_frame`.
595606
596607
INPUT:
@@ -637,11 +648,17 @@ def set_change_of_frame(self, frame1, frame2, change_of_frame,
637648

638649
def change_of_frame(self, frame1, frame2):
639650
r"""
640-
Return a change of vector frames defined on ``self``.
651+
Return a change of vector frames defined on the base space of ``self``.
641652
642653
.. SEEALSO::
643654
644-
This method invokes
655+
For further details on frames on ``self`` see
656+
:meth:`local_frame`.
657+
658+
.. NOTE::
659+
660+
Since frames on ``self`` are directly induced by vector frames on
661+
the base space, this method directly invokes
645662
:meth:`~sage.manifolds.differentiable.manifold.DifferentiableManifold.change_of_frame`
646663
of class :class:`~sage.manifolds.differentiable.manifold.DifferentiableManifold`.
647664
@@ -686,13 +703,13 @@ def change_of_frame(self, frame1, frame2):
686703

687704
def changes_of_frame(self):
688705
r"""
689-
Return all the changes of vector frames defined on ``self``.
706+
Return the changes of vector frames defined on the base space of
707+
``self`` with respect to the destination map.
690708
691709
.. SEEALSO::
692710
693-
This method invokes
694-
:meth:`~sage.manifolds.differentiable.manifold.DifferentiableManifold.changes_of_frame`
695-
of class :class:`~sage.manifolds.differentiable.manifold.DifferentiableManifold`.
711+
For further details on frames on ``self`` see
712+
:meth:`local_frame`.
696713
697714
OUTPUT:
698715
@@ -741,18 +758,24 @@ def changes_of_frame(self):
741758
True
742759
743760
"""
744-
return self._base_space.changes_of_frame()
761+
base_cof = self._base_space.changes_of_frame()
762+
###
763+
# Filter out all frames with respect to dest_map:
764+
cof = {}
765+
for frames in base_cof:
766+
if frames[0]._dest_map == self._dest_map:
767+
cof[(frames[0], frames[1])] = base_cof[frames]
768+
return cof
745769

746770
def frames(self):
747771
r"""
748-
Return the list of vector frames defined on ``self``.
772+
Return the list of all vector frames defined on the base space of
773+
``self`` with respect to the destination map.
749774
750775
.. SEEALSO::
751776
752-
This method invokes
753-
:meth:`~sage.manifolds.differentiable.manifold.DifferentiableManifold.frames`
754-
of class
755-
:class:`~sage.manifolds.differentiable.manifold.DifferentiableManifold`.
777+
For further details on frames on ``self`` see
778+
:meth:`local_frame`.
756779
757780
OUTPUT:
758781
@@ -788,20 +811,19 @@ def frames(self):
788811
# Filter out all frames with respect to dest_map:
789812
frames = []
790813
for frame in self._base_space.frames():
791-
if frame._dest_map is self._dest_map:
814+
if frame._dest_map == self._dest_map:
792815
frames.append(frame)
793816
return frames
794817

795818
def coframes(self):
796819
r"""
797-
Return the list of coframes defined on ``self``.
820+
Return the list of coframes defined on the base manifold of ``self``
821+
with respect to the destination map.
798822
799823
.. SEEALSO::
800824
801-
This method invokes
802-
:meth:`~sage.manifolds.differentiable.manifold.DifferentiableManifold.coframes`
803-
of class
804-
:class:`~sage.manifolds.differentiable.manifold.DifferentiableManifold`.
825+
For further details on frames on ``self`` see
826+
:meth:`local_frame`.
805827
806828
OUTPUT:
807829
@@ -841,7 +863,7 @@ def coframes(self):
841863
# Filter out all coframes with respect to dest_map:
842864
coframes = []
843865
for coframe in self._base_space.coframes():
844-
if coframe._dest_map is self._dest_map:
866+
if coframe._dest_map == self._dest_map:
845867
coframes.append(coframe)
846868
return coframes
847869

@@ -850,9 +872,10 @@ def trivialization(self, coordinates='', names=None, calc_method=None):
850872
Return a trivialization of ``self`` in terms of a chart on the codomain
851873
of the destination map.
852874
853-
.. SEEALSO::
875+
.. NOTE::
854876
855-
This method invokes
877+
Since a chart gives direct rise to a trivialization, this method is
878+
nothing but an invocation of
856879
:meth:`~sage.manifolds.manifold.TopologicalManifold.chart`.
857880
858881
INPUT:
@@ -931,12 +954,14 @@ def trivialization(self, coordinates='', names=None, calc_method=None):
931954

932955
def transitions(self):
933956
r"""
934-
Return the coordinate changes defined via charts on the codomain of
935-
the destination map.
957+
Return the transition maps between trivialization maps in terms of
958+
coordinate changes defined via charts on the codomain of the destination
959+
map.
936960
937-
.. SEEALSO::
961+
.. NOTE::
938962
939-
This method invokes
963+
Since a chart gives direct rise to a trivialization, this method is
964+
nothing but an invocation of
940965
:meth:`~sage.manifolds.manifold.TopologicalManifold.coord_changes`.
941966
942967
EXAMPLES:
@@ -982,15 +1007,17 @@ def transitions(self):
9821007

9831008
def transition(self, chart1, chart2):
9841009
r"""
985-
Return the coordinate change between two differentiable charts defined
986-
on codomain of the destination map.
1010+
Return the change of trivializations in terms of a coordinate change
1011+
between two differentiable charts defined on the codomain of the
1012+
destination map.
9871013
9881014
The differentiable chart must have been defined previously, for instance
9891015
by the method :meth:`~sage.manifolds.chart.Chart.transition_map`.
9901016
991-
.. SEEALSO::
1017+
.. NOTE::
9921018
993-
This method invokes
1019+
Since a chart gives direct rise to a trivialization, this method is
1020+
nothing but an invocation of
9941021
:meth:`~sage.manifolds.manifold.TopologicalManifold.coord_change`.
9951022
9961023
INPUT:
@@ -1101,7 +1128,7 @@ def is_manifestly_trivial(self):
11011128
return True
11021129
###
11031130
# Otherwise check whether a global frame on the pullback bundle is
1104-
# given:
1131+
# defined:
11051132
for frame in self.frames():
11061133
if frame._domain is self._base_space:
11071134
return True
@@ -1111,14 +1138,28 @@ def local_frame(self, symbol=None, latex_symbol=None, from_frame=None,
11111138
indices=None, latex_indices=None, symbol_dual=None,
11121139
latex_symbol_dual=None, domain=None):
11131140
r"""
1114-
Define a local frame for ``self`` over some open subset of the base
1115-
space.
1141+
Define a vector frame over ``domain``, possibly with values in the
1142+
tangent bundle of the codomain of the destination map. This
1143+
automatically induces a local frame on the tensor bundle ``self``.
1144+
1145+
More precisely, if `e: U \to \Phi^*TM` is a vector frame over
1146+
`U \subset N` with values in `\Phi^*TM` along the destination map
1147+
1148+
.. MATH::
1149+
1150+
\Phi: N \longrightarrow M
1151+
1152+
then the map
1153+
1154+
.. MATH::
1155+
1156+
p \mapsto \Big(\underbrace{e^*(p), \dots, e^*(p)}_{k\ \; \mbox{times}},
1157+
\underbrace{e(p), \dots, e(p)}_{l\ \; \mbox{times}}\Big) \in
1158+
T^{(k,l)}_q M ,
11161159
1117-
If `k` is the (vector bundle) rank of ``self`` and `U` is an open
1118-
subset of the base manifold of ``self``, a *local frame over* `U` is
1119-
a `k`-tuple of local sections `(s_1,\ldots,s_k)` over `U` such that
1120-
for each `p\in U`, `(s_1(p),\ldots,s_k(p))` is a vector basis of the
1121-
fiber over `p` .
1160+
with `q=\Phi(p)`, defines a basis at each point `p \in U` and
1161+
therefore gives rise to a local frame on `\Phi^* T^{(k,l)}M` over the
1162+
domain `U`.
11221163
11231164
.. SEEALSO::
11241165
@@ -1139,7 +1180,7 @@ def local_frame(self, symbol=None, latex_symbol=None, from_frame=None,
11391180
if ``None``, ``symbol`` is used in place of ``latex_symbol``
11401181
- ``from_frame`` -- (default: ``None``) vector frame `\tilde{e}`
11411182
on the codomain `M` of the destination map `\Phi`; the returned
1142-
frame `e` is then such that for all `p \in U`,
1183+
frame `e` is then such that for all `p \in N`,
11431184
we have `e(p) = \tilde{e}(\Phi(p))`
11441185
- ``indices`` -- (default: ``None``; used only if ``symbol`` is a
11451186
single string) tuple of strings representing the indices labelling
@@ -1160,10 +1201,9 @@ def local_frame(self, symbol=None, latex_symbol=None, from_frame=None,
11601201
11611202
OUTPUT:
11621203
1163-
- the local frame corresponding to the above specifications; this is
1204+
- the vector frame corresponding to the above specifications; this is
11641205
an instance of
1165-
:class:`~sage.manifolds.differentiable.vectorframe.VectorFrame`
1166-
if ``self`` is a tangent bundle.
1206+
:class:`~sage.manifolds.differentiable.vectorframe.VectorFrame`.
11671207
11681208
EXAMPLES:
11691209
@@ -1177,7 +1217,7 @@ def local_frame(self, symbol=None, latex_symbol=None, from_frame=None,
11771217
sage: e[0]
11781218
Vector field e_0 on the 3-dimensional differentiable manifold M
11791219
1180-
Specifying the domain of the local frame::
1220+
Specifying the domain of the vector frame::
11811221
11821222
sage: U = M.open_subset('U')
11831223
sage: f = TM.local_frame('f', domain=U); f
@@ -1194,10 +1234,6 @@ def local_frame(self, symbol=None, latex_symbol=None, from_frame=None,
11941234
11951235
"""
11961236
from .vectorframe import VectorFrame
1197-
if self._tensor_type != (1, 0):
1198-
raise NotImplementedError("local frames are not implemented for "
1199-
"tensor bundles of type {}".format(
1200-
self._tensor_type))
12011237
if domain is None:
12021238
domain = self._base_space
12031239
return VectorFrame(domain.vector_field_module(

0 commit comments

Comments
 (0)