@@ -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