@@ -222,7 +222,8 @@ class TensorBundle(DifferentiableVectorBundle):
222222 (`k` is called the *contravariant* and `l` the *covariant* rank of the
223223 tensor bundle).
224224
225- The trivializations are directly given by charts on the codomain of `\Phi`.
225+ The trivializations are directly given by charts on the codomain (called
226+ *ambient domain*) of `\Phi`.
226227 In particular, let `(V, \varphi)` be a chart of `N` with components
227228 `(x^1, \dots, x^n)` such that `q=\Phi(p) \in V`. Then, the matrix entries of
228229 `t \in T_q^{(k,l)}N` are given by
@@ -830,13 +831,11 @@ def frames(self):
830831 manifold R along the Differentiable map Phi from the 1-dimensional
831832 differentiable manifold R to the 2-dimensional differentiable
832833 manifold M
833- sage: f = PhiT11.local_frame('f', from_frame=e_cart ); f
834- Vector frame (R, (f_0,f_1 )) with values on the 2-dimensional
834+ sage: f = PhiT11.local_frame(); f
835+ Vector frame (R, (d/dx,d/dy )) with values on the 2-dimensional
835836 differentiable manifold M
836837 sage: PhiT11.frames()
837838 [Vector frame (R, (d/dx,d/dy)) with values on the 2-dimensional
838- differentiable manifold M,
839- Vector frame (R, (f_0,f_1)) with values on the 2-dimensional
840839 differentiable manifold M]
841840
842841 """
@@ -1183,11 +1182,17 @@ def local_frame(self, symbol=None, latex_symbol=None, from_frame=None,
11831182 latex_symbol_dual = None , domain = None ):
11841183 r"""
11851184 Define a vector frame on ``domain``, possibly with values in the
1186- tangent bundle of the codomain of the destination map. This
1187- automatically induces a local frame on the tensor bundle ``self``.
1185+ tangent bundle of the ambient domain.
11881186
1189- More precisely, if `e: U \to \Phi^*TN` is a vector frame on
1190- `U \subset M` with values in `\Phi^*TN` along the destination map
1187+ If the basis specified by the given symbol already exists, it is
1188+ simply returned.
1189+ If no argument is provided the vector field module's default frame is
1190+ returned.
1191+
1192+ Notice, that a vector frame automatically induces a local frame on the
1193+ tensor bundle ``self``. More precisely, if `e: U \to \Phi^*TN` is a
1194+ vector frame on `U \subset M` with values in `\Phi^*TN` along the
1195+ destination map
11911196
11921197 .. MATH::
11931198
@@ -1224,7 +1229,7 @@ def local_frame(self, symbol=None, latex_symbol=None, from_frame=None,
12241229 if ``None``, ``symbol`` is used in place of ``latex_symbol``
12251230 - ``from_frame`` -- (default: ``None``) vector frame `\tilde{e}`
12261231 on the codomain `N` of the destination map `\Phi`; the returned
1227- frame `e` is then such that for all `p \in M `,
1232+ frame `e` is then such that for all `p \in U `,
12281233 we have `e(p) = \tilde{e}(\Phi(p))`
12291234 - ``indices`` -- (default: ``None``; used only if ``symbol`` is a
12301235 single string) tuple of strings representing the indices labelling
@@ -1277,15 +1282,74 @@ def local_frame(self, symbol=None, latex_symbol=None, from_frame=None,
12771282 :class:`~sage.manifolds.differentiable.vectorframe.VectorFrame`.
12781283
12791284 """
1280- from .vectorframe import VectorFrame
12811285 if domain is None :
12821286 domain = self ._base_space
1283- return VectorFrame (domain .vector_field_module (
1284- dest_map = self ._dest_map .restrict (domain ),
1285- force_free = True ),
1286- symbol = symbol , latex_symbol = latex_symbol ,
1287- from_frame = from_frame , indices = indices ,
1288- latex_indices = latex_indices , symbol_dual = symbol_dual ,
1289- latex_symbol_dual = latex_symbol_dual )
1287+ vmodule = domain .vector_field_module (
1288+ dest_map = self ._dest_map .restrict (domain ),
1289+ force_free = True )
1290+ return vmodule .basis (symbol = symbol , latex_symbol = latex_symbol ,
1291+ from_frame = from_frame ,
1292+ indices = indices , latex_indices = latex_indices ,
1293+ symbol_dual = symbol_dual ,
1294+ latex_symbol_dual = latex_symbol_dual )
12901295
12911296 vector_frame = local_frame
1297+
1298+ def ambient_domain (self ):
1299+ r"""
1300+ Return the codomain of the destination map.
1301+
1302+ OUTPUT:
1303+
1304+ - a :class:`~sage.manifolds.differentiable.manifold.DifferentiableManifold`
1305+ representing the codomain of the destination map
1306+
1307+ EXAMPLES::
1308+
1309+ sage: M = Manifold(2, 'M')
1310+ sage: c_cart.<x,y> = M.chart()
1311+ sage: e_cart = c_cart.frame() # standard basis
1312+ sage: R = Manifold(1, 'R')
1313+ sage: T.<t> = R.chart() # canonical chart on R
1314+ sage: Phi = R.diff_map(M, [cos(t), sin(t)], name='Phi') ; Phi
1315+ Differentiable map Phi from the 1-dimensional differentiable
1316+ manifold R to the 2-dimensional differentiable manifold M
1317+ sage: Phi.display()
1318+ Phi: R --> M
1319+ t |--> (x, y) = (cos(t), sin(t))
1320+ sage: PhiT11 = R.tensor_bundle(1, 1, dest_map=Phi)
1321+ sage: PhiT11.ambient_domain()
1322+ 2-dimensional differentiable manifold M
1323+
1324+ """
1325+ return self ._ambient_domain
1326+
1327+ def destination_map (self ):
1328+ r"""
1329+ Return the the destination map.
1330+
1331+ OUTPUT:
1332+
1333+ - a :class:`~sage.manifolds.differentiable.diff_map.DifferentialMap`
1334+ representing the destination map
1335+
1336+ EXAMPLES::
1337+
1338+ sage: M = Manifold(2, 'M')
1339+ sage: c_cart.<x,y> = M.chart()
1340+ sage: e_cart = c_cart.frame() # standard basis
1341+ sage: R = Manifold(1, 'R')
1342+ sage: T.<t> = R.chart() # canonical chart on R
1343+ sage: Phi = R.diff_map(M, [cos(t), sin(t)], name='Phi') ; Phi
1344+ Differentiable map Phi from the 1-dimensional differentiable
1345+ manifold R to the 2-dimensional differentiable manifold M
1346+ sage: Phi.display()
1347+ Phi: R --> M
1348+ t |--> (x, y) = (cos(t), sin(t))
1349+ sage: PhiT11 = R.tensor_bundle(1, 1, dest_map=Phi)
1350+ sage: PhiT11.destination_map()
1351+ Differentiable map Phi from the 1-dimensional differentiable
1352+ manifold R to the 2-dimensional differentiable manifold M
1353+
1354+ """
1355+ return self ._dest_map
0 commit comments