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

Commit c4738d7

Browse files
author
Release Manager
committed
Trac #28159: Vector Bundles
Implementation of topological and differentiable vector bundles over manifolds. **Features:** - abstract vector bundles on topological manifolds - trivializations - local frames - simple sections - vector bundle fibers - differentiable vector bundles and tensor bundles **Improvements in the preexisting code** - restriction of vectorframes depended on some strange order: fixed! - ~~`SR` enforcement for automorphism field inversion removed (due to ticket #28189)~~ - `is_unit()` method superficially implemented for scalar fields to ensure division free matrix inversion for changes of frames (may be removed when #28629 is solved) **Planned in the farther future** - sections of general tensor products and automorphism fields on vector bundles - tensor products and Whitney sums of vector bundles - better zero treatment as in #28562 - `TensorField` inherits from `Section`, `VectorFrame` inherits from `LocalFrame` - total space comes with induced charts URL: https://trac.sagemath.org/28159 Reported by: gh-DeRhamSource Ticket author(s): Michael Jung Reviewer(s): Eric Gourgoulhon, Travis Scrimshaw
2 parents 7f4acc3 + 4ae4ca3 commit c4738d7

22 files changed

+9139
-13
lines changed

src/doc/en/reference/categories/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ Individual Categories
181181
sage/categories/triangular_kac_moody_algebras
182182
sage/categories/unique_factorization_domains
183183
sage/categories/unital_algebras
184+
sage/categories/vector_bundles
184185
sage/categories/vector_spaces
185186
sage/categories/weyl_groups
186187

src/doc/en/reference/manifolds/diff_manifold.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,5 @@ Differentiable Manifolds
2929
sage/manifolds/differentiable/affine_connection
3030

3131
sage/manifolds/differentiable/differentiable_submanifold
32+
33+
diff_vector_bundle
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Differentiable Vector Bundles
2+
=============================
3+
4+
.. toctree::
5+
:maxdepth: 2
6+
7+
sage/manifolds/differentiable/vector_bundle

src/doc/en/reference/manifolds/manifold.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ Topological Manifolds
1919
continuous_map
2020

2121
sage/manifolds/topological_submanifold
22+
23+
vector_bundle
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Topological Vector Bundles
2+
==========================
3+
4+
.. toctree::
5+
:maxdepth: 2
6+
7+
sage/manifolds/vector_bundle
8+
9+
sage/manifolds/vector_bundle_fiber
10+
11+
sage/manifolds/vector_bundle_fiber_element
12+
13+
sage/manifolds/trivialization
14+
15+
sage/manifolds/local_frame
16+
17+
sage/manifolds/section_module
18+
19+
sage/manifolds/section
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
r"""
2+
Vector Bundles
3+
"""
4+
#*****************************************************************************
5+
# Copyright (C) 2019 Michael Jung <micjung at uni-potsdam.de>
6+
#
7+
# Distributed under the terms of the GNU General Public License (GPL)
8+
# http://www.gnu.org/licenses/
9+
#******************************************************************************
10+
11+
from sage.categories.category_types import Category_over_base_ring
12+
from sage.categories.category_with_axiom import CategoryWithAxiom_over_base_ring
13+
from sage.misc.cachefunc import cached_method
14+
from sage.categories.sets_cat import Sets
15+
from sage.categories.fields import Fields
16+
17+
class VectorBundles(Category_over_base_ring):
18+
r"""
19+
The category of vector bundles over any base space and base field.
20+
21+
.. SEEALSO:: :class:`~sage.manifolds.vector_bundle.TopologicalVectorBundle`
22+
23+
EXAMPLES::
24+
25+
sage: M = Manifold(2, 'M', structure='top')
26+
sage: from sage.categories.vector_bundles import VectorBundles
27+
sage: C = VectorBundles(M, RR); C
28+
Category of vector bundles over Real Field with 53 bits of precision
29+
with base space 2-dimensional topological manifold M
30+
sage: C.super_categories()
31+
[Category of topological spaces]
32+
33+
TESTS::
34+
35+
sage: TestSuite(C).run(skip="_test_category_over_bases")
36+
37+
"""
38+
def __init__(self, base_space, base_field, name=None):
39+
r"""
40+
Initialize ``self``.
41+
42+
EXAMPLES::
43+
44+
sage: M = Manifold(2, 'M')
45+
sage: from sage.categories.vector_bundles import VectorBundles
46+
sage: C = VectorBundles(M, RR)
47+
sage: TestSuite(C).run(skip="_test_category_over_bases")
48+
49+
"""
50+
if base_field not in Fields().Topological():
51+
raise ValueError("base field must be a topological field")
52+
self._base_space = base_space
53+
Category_over_base_ring.__init__(self, base_field, name)
54+
55+
@cached_method
56+
def super_categories(self):
57+
r"""
58+
EXAMPLES::
59+
60+
sage: M = Manifold(2, 'M')
61+
sage: from sage.categories.vector_bundles import VectorBundles
62+
sage: VectorBundles(M, RR).super_categories()
63+
[Category of topological spaces]
64+
65+
"""
66+
return [Sets().Topological()]
67+
68+
def base_space(self):
69+
r"""
70+
Return the base space of this category.
71+
72+
EXAMPLES::
73+
74+
sage: M = Manifold(2, 'M', structure='top')
75+
sage: from sage.categories.vector_bundles import VectorBundles
76+
sage: VectorBundles(M, RR).base_space()
77+
2-dimensional topological manifold M
78+
79+
"""
80+
return self._base_space
81+
82+
def _repr_object_names(self):
83+
r"""
84+
Return the name of the objects of this category.
85+
86+
.. SEEALSO:: :meth:`Category._repr_object_names`
87+
88+
EXAMPLES::
89+
90+
sage: M = Manifold(2, 'M')
91+
sage: from sage.categories.vector_bundles import VectorBundles
92+
sage: VectorBundles(M, RR)._repr_object_names()
93+
'vector bundles over Real Field with 53 bits of precision with base
94+
space 2-dimensional differentiable manifold M'
95+
96+
"""
97+
base_space = self._base_space
98+
return Category_over_base_ring._repr_object_names(self) + \
99+
" with base space %s"%base_space
100+
101+
class SubcategoryMethods:
102+
@cached_method
103+
def Differentiable(self):
104+
r"""
105+
Return the subcategory of the differentiable objects
106+
of ``self``.
107+
108+
EXAMPLES::
109+
110+
sage: M = Manifold(2, 'M')
111+
sage: from sage.categories.vector_bundles import VectorBundles
112+
sage: VectorBundles(M, RR).Differentiable()
113+
Category of differentiable vector bundles over Real Field with
114+
53 bits of precision with base space 2-dimensional
115+
differentiable manifold M
116+
117+
TESTS::
118+
119+
sage: TestSuite(VectorBundles(M, RR).Differentiable()).run()
120+
sage: VectorBundles(M, RR).Differentiable.__module__
121+
'sage.categories.vector_bundles'
122+
123+
"""
124+
return self._with_axiom('Differentiable')
125+
126+
@cached_method
127+
def Smooth(self):
128+
"""
129+
Return the subcategory of the smooth objects of ``self``.
130+
131+
EXAMPLES::
132+
133+
sage: M = Manifold(2, 'M')
134+
sage: from sage.categories.vector_bundles import VectorBundles
135+
sage: VectorBundles(M, RR).Smooth()
136+
Category of smooth vector bundles over Real Field with 53 bits
137+
of precision with base space 2-dimensional differentiable
138+
manifold M
139+
140+
TESTS::
141+
142+
sage: TestSuite(VectorBundles(M, RR).Smooth()).run()
143+
sage: VectorBundles(M, RR).Smooth.__module__
144+
'sage.categories.vector_bundles'
145+
146+
"""
147+
return self._with_axiom('Smooth')
148+
149+
class Differentiable(CategoryWithAxiom_over_base_ring):
150+
"""
151+
The category of differentiable vector bundles.
152+
153+
A differentiable vector bundle is a differentiable manifold with
154+
differentiable surjective projection on a differentiable base space.
155+
156+
"""
157+
158+
class Smooth(CategoryWithAxiom_over_base_ring):
159+
"""
160+
The category of smooth vector bundles.
161+
162+
A smooth vector bundle is a smooth manifold with
163+
smooth surjective projection on a smooth base space.
164+
165+
"""

src/sage/manifolds/chart_func.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,27 @@ def is_trivial_zero(self):
855855
curr = self._calc_method._current
856856
return self._calc_method.is_trivial_zero(self.expr(curr))
857857

858+
# TODO: Remove this method as soon as ticket #28629 is solved?
859+
def is_unit(self):
860+
r"""
861+
Return ``True`` iff ``self`` is not trivially zero since most chart
862+
functions are invertible and an actual computation would take too much
863+
time.
864+
865+
EXAMPLES::
866+
867+
sage: M = Manifold(2, 'M', structure='topological')
868+
sage: X.<x,y> = M.chart()
869+
sage: f = X.function(x^2+3*y+1)
870+
sage: f.is_unit()
871+
True
872+
sage: zero = X.function(0)
873+
sage: zero.is_unit()
874+
False
875+
876+
"""
877+
return not self.is_trivial_zero()
878+
858879
def copy(self):
859880
r"""
860881
Return an exact copy of the object.
@@ -2645,7 +2666,7 @@ def _repr_(self):
26452666
"""
26462667
return "Ring of chart functions on {}".format(self._chart)
26472668

2648-
def is_integral_domain(self):
2669+
def is_integral_domain(self, proof=True):
26492670
"""
26502671
Return ``False`` as ``self`` is not an integral domain.
26512672

0 commit comments

Comments
 (0)