Skip to content

Commit dfd98a7

Browse files
author
Release Manager
committed
Trac #31006: Add more typing information to manifold package
In extension of #29775, more typing information is added to the manifold package (and its dependencies). URL: https://trac.sagemath.org/31006 Reported by: gh-tobiasdiez Ticket author(s): Tobias Diez Reviewer(s): Matthias Koeppe, Tobias Diez, Michael Jung, Eric Gourgoulhon
2 parents 360ee4c + c403910 commit dfd98a7

12 files changed

+109
-44
lines changed

src/sage/manifolds/differentiable/diff_form.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1335,7 +1335,7 @@ def _init_derived(self):
13351335
"""
13361336
TensorFieldParal._init_derived(self)
13371337

1338-
def _del_derived(self, del_restrictions=True):
1338+
def _del_derived(self, del_restrictions: bool = True):
13391339
r"""
13401340
Delete the derived quantities.
13411341

src/sage/manifolds/differentiable/manifold.py

+17-8
Original file line numberDiff line numberDiff line change
@@ -440,23 +440,30 @@
440440
# ****************************************************************************
441441

442442
from __future__ import annotations
443-
from typing import Optional, TYPE_CHECKING
444-
from sage.categories.manifolds import Manifolds
443+
444+
from typing import TYPE_CHECKING, Optional, Union
445+
445446
from sage.categories.homset import Hom
447+
from sage.categories.manifolds import Manifolds
448+
from sage.manifolds.differentiable.mixed_form_algebra import MixedFormAlgebra
449+
from sage.manifolds.manifold import TopologicalManifold
446450
from sage.rings.cc import CC
447-
from sage.rings.real_mpfr import RR
448451
from sage.rings.infinity import infinity, minus_infinity
449452
from sage.rings.integer import Integer
450-
from sage.manifolds.manifold import TopologicalManifold
451-
from sage.manifolds.differentiable.mixed_form_algebra import MixedFormAlgebra
453+
from sage.rings.real_mpfr import RR
452454

453455
if TYPE_CHECKING:
454456
from sage.manifolds.differentiable.diff_map import DiffMap
455457
from sage.manifolds.differentiable.metric import PseudoRiemannianMetric
456-
from sage.manifolds.differentiable.vectorfield_module import VectorFieldModule
458+
from sage.manifolds.differentiable.vectorfield_module import (
459+
VectorFieldFreeModule,
460+
VectorFieldModule,
461+
)
462+
from sage.manifolds.differentiable.vectorframe import VectorFrame
457463

458464
###############################################################################
459465

466+
460467
class DifferentiableManifold(TopologicalManifold):
461468
r"""
462469
Differentiable manifold over a topological field `K`.
@@ -1225,7 +1232,9 @@ def tensor_bundle(self, k, l, dest_map=None):
12251232
l, dest_map=dest_map)
12261233
return self._tensor_bundles[dest_map][(k, l)]
12271234

1228-
def vector_field_module(self, dest_map: Optional[DiffMap] = None, force_free: bool = False) -> VectorFieldModule:
1235+
def vector_field_module(
1236+
self, dest_map: Optional[DiffMap] = None, force_free: bool = False
1237+
) -> Union[VectorFieldModule, VectorFieldFreeModule]:
12291238
r"""
12301239
Return the set of vector fields defined on ``self``, possibly
12311240
with values in another differentiable manifold, as a module over the
@@ -3029,7 +3038,7 @@ def set_change_of_frame(self, frame1, frame2, change_of_frame,
30293038
for sdom in self.open_supersets():
30303039
sdom._frame_changes[(frame2, frame1)] = change_of_frame.inverse()
30313040

3032-
def vector_frame(self, *args, **kwargs):
3041+
def vector_frame(self, *args, **kwargs) -> VectorFrame:
30333042
r"""
30343043
Define a vector frame on ``self``.
30353044

src/sage/manifolds/differentiable/tensorfield.py

+14-6
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,9 @@
5151
# the License, or (at your option) any later version.
5252
# https://www.gnu.org/licenses/
5353
# *****************************************************************************
54-
5554
from __future__ import annotations
5655

57-
from typing import TYPE_CHECKING, Optional, Tuple, Union
56+
from typing import TYPE_CHECKING, Optional, Tuple, TypeVar, Union
5857

5958
from sage.rings.integer import Integer
6059
from sage.rings.integer_ring import ZZ
@@ -73,6 +72,9 @@
7372

7473

7574
TensorType = Tuple[int, int]
75+
T = TypeVar("T", bound="TensorField")
76+
77+
7678
class TensorField(ModuleElementWithMutability):
7779
r"""
7880
Tensor field along a differentiable manifold.
@@ -406,6 +408,12 @@ class TensorField(ModuleElementWithMutability):
406408
407409
"""
408410

411+
_name: Optional[str]
412+
_latex_name: Optional[str]
413+
_vmodule: VectorFieldModule
414+
_domain: DifferentiableManifold
415+
_ambient_domain: DifferentiableManifold
416+
409417
def __init__(
410418
self,
411419
vector_field_module: VectorFieldModule,
@@ -616,7 +624,7 @@ def _latex_(self):
616624
else:
617625
return self._latex_name
618626

619-
def set_name(self, name=None, latex_name=None):
627+
def set_name(self, name: Optional[str] = None, latex_name: Optional[str] = None):
620628
r"""
621629
Set (or change) the text name and LaTeX name of ``self``.
622630
@@ -684,7 +692,7 @@ def _new_instance(self):
684692
return type(self)(self._vmodule, self._tensor_type, sym=self._sym,
685693
antisym=self._antisym, parent=self.parent())
686694

687-
def _final_repr(self, description):
695+
def _final_repr(self, description: str) -> str:
688696
r"""
689697
Part of string representation common to all derived classes of
690698
:class:`TensorField`.
@@ -1048,8 +1056,8 @@ def set_restriction(self, rst: TensorField):
10481056
self._is_zero = False # a priori
10491057

10501058
def restrict(
1051-
self, subdomain: DifferentiableManifold, dest_map: Optional[DiffMap] = None
1052-
) -> TensorField:
1059+
self: T, subdomain: DifferentiableManifold, dest_map: Optional[DiffMap] = None
1060+
) -> T:
10531061
r"""
10541062
Return the restriction of ``self`` to some subdomain.
10551063

src/sage/manifolds/differentiable/tensorfield_paral.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@
305305

306306
from __future__ import annotations
307307

308-
from typing import TYPE_CHECKING
308+
from typing import TYPE_CHECKING, Optional, Union
309309

310310
from sage.manifolds.chart import Chart
311311
from sage.manifolds.differentiable.tensorfield import TensorField
@@ -315,8 +315,12 @@
315315
from sage.tensor.modules.free_module_tensor import FreeModuleTensor
316316

317317
if TYPE_CHECKING:
318+
from sage.manifolds.differentiable.diff_map import DiffMap
319+
from sage.manifolds.differentiable.manifold import DifferentiableManifold
320+
from sage.symbolic.expression import Expression
318321
from sage.tensor.modules.comp import Components
319322

323+
320324
class TensorFieldParal(FreeModuleTensor, TensorField):
321325
r"""
322326
Tensor field along a differentiable manifold, with values on a
@@ -713,7 +717,7 @@ def _init_derived(self):
713717
self._extensions_graph = {self._domain: self}
714718
self._restrictions_graph = {self._domain: self}
715719

716-
def _del_derived(self, del_restrictions=True):
720+
def _del_derived(self, del_restrictions: bool = True):
717721
r"""
718722
Delete the derived quantities.
719723
@@ -1517,7 +1521,7 @@ def paral_lie_deriv(a, b , coord_frame, chart_cp, local_list_ind):
15171521

15181522
lie_der = lie_derivative
15191523

1520-
def restrict(self, subdomain, dest_map=None):
1524+
def restrict(self, subdomain: DifferentiableManifold, dest_map: Optional[DiffMap] = None):
15211525
r"""
15221526
Return the restriction of ``self`` to some subdomain.
15231527
@@ -1746,7 +1750,7 @@ def __call__(self, *args):
17461750
# Call of the FreeModuleTensor version
17471751
return FreeModuleTensor.__call__(self_r, *args_r)
17481752

1749-
def contract(self, *args):
1753+
def contract(self, *args: Union[int, TensorField]) -> TensorFieldParal:
17501754
r"""
17511755
Contraction with another tensor field, on one or more indices.
17521756
@@ -2265,7 +2269,7 @@ def along(self, mapping):
22652269
comp_resu._comp[ind] = val_resu
22662270
return resu
22672271

2268-
def series_expansion(self, symbol, order):
2272+
def series_expansion(self, symbol: Expression, order: int) -> list[TensorFieldParal]:
22692273
r"""
22702274
Expand the tensor field in power series with respect to a small
22712275
parameter.
@@ -2410,7 +2414,7 @@ def truncate(self, symbol, order):
24102414
series = self.series_expansion(symbol, order)
24112415
return sum(symbol**i * s for i, s in enumerate(series))
24122416

2413-
def set_calc_order(self, symbol, order, truncate=False):
2417+
def set_calc_order(self, symbol: Expression, order: int, truncate: bool = False):
24142418
r"""
24152419
Trigger a power series expansion with respect to a small parameter in
24162420
computations involving the tensor field.

src/sage/manifolds/differentiable/vectorfield_module.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
from typing import TYPE_CHECKING, Optional
4444

4545
from sage.categories.modules import Modules
46-
from sage.manifolds.differentiable.diff_map import DiffMap
4746
from sage.manifolds.differentiable.vectorfield import VectorField, VectorFieldParal
4847
from sage.misc.cachefunc import cached_method
4948
from sage.rings.integer import Integer
@@ -52,6 +51,7 @@
5251
from sage.tensor.modules.finite_rank_free_module import FiniteRankFreeModule
5352

5453
if TYPE_CHECKING:
54+
from sage.manifolds.differentiable.diff_map import DiffMap
5555
from sage.manifolds.differentiable.manifold import DifferentiableManifold
5656

5757

src/sage/manifolds/differentiable/vectorframe.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,8 @@ def set_name(self, symbol, latex_symbol=None, indices=None,
462462
self._latex_name = r"\left({}, {}\right)".format(
463463
self._domain._latex_name, self._latex_name)
464464

465-
#******************************************************************************
465+
# ******************************************************************************
466+
466467

467468
class VectorFrame(FreeModuleBasis):
468469
r"""

src/sage/manifolds/manifold.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -348,9 +348,11 @@
348348
from sage.structure.global_options import GlobalOptions
349349

350350
if TYPE_CHECKING:
351+
from sage.manifolds.chart import Chart
351352
from sage.manifolds.continuous_map import ContinuousMap
352353
from sage.manifolds.differentiable.diff_map import DiffMap
353354
from sage.manifolds.differentiable.manifold import DifferentiableManifold
355+
from sage.manifolds.scalarfield import ScalarField
354356

355357

356358
#############################################################################
@@ -1206,7 +1208,7 @@ def index_generator(self, nb_indices):
12061208
ind[pos] = si
12071209
ret = 1
12081210

1209-
def atlas(self):
1211+
def atlas(self) -> list[Chart]:
12101212
r"""
12111213
Return the list of charts that have been defined on the manifold.
12121214
@@ -1458,8 +1460,13 @@ def is_manifestly_coordinate_domain(self):
14581460
"""
14591461
return bool(self._covering_charts)
14601462

1461-
def chart(self, coordinates='', names=None, calc_method=None,
1462-
coord_restrictions=None):
1463+
def chart(
1464+
self,
1465+
coordinates: str = "",
1466+
names=None,
1467+
calc_method=None,
1468+
coord_restrictions=None,
1469+
) -> Chart:
14631470
r"""
14641471
Define a chart, the domain of which is the manifold.
14651472
@@ -1939,8 +1946,9 @@ def scalar_field_algebra(self):
19391946
"""
19401947
return self._scalar_field_algebra
19411948

1942-
def scalar_field(self, coord_expression=None, chart=None, name=None,
1943-
latex_name=None):
1949+
def scalar_field(
1950+
self, coord_expression=None, chart=None, name=None, latex_name=None
1951+
) -> ScalarField:
19441952
r"""
19451953
Define a scalar field on the manifold.
19461954

src/sage/manifolds/subset.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,9 @@ class :class:`~sage.structure.parent.Parent`.
151151

152152
Element = ManifoldPoint
153153

154-
def __init__(self, manifold, name, latex_name=None, category=None):
154+
_name: str
155+
156+
def __init__(self, manifold, name: str, latex_name=None, category=None):
155157
r"""
156158
Construct a manifold subset.
157159

src/sage/symbolic/function_factory.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
# version 2 or any later version. The full text of the GPL is available at:
1010
# https://www.gnu.org/licenses/
1111
###############################################################################
12+
from __future__ import annotations
13+
from typing import Union
1214

1315
from sage.symbolic.function import (SymbolicFunction, sfunctions_funcs,
1416
unpickle_wrapper)
@@ -148,7 +150,7 @@ def unpickle_function(name, nargs, latex_name, conversions, evalf_params_first,
148150
return function_factory(*args)
149151

150152

151-
def function(s, **kwds):
153+
def function(s, **kwds) -> Union[SymbolicFunction, list[SymbolicFunction]]:
152154
r"""
153155
Create a formal symbolic function with the name *s*.
154156

src/sage/tensor/modules/finite_rank_free_module.py

+21-8
Original file line numberDiff line numberDiff line change
@@ -529,16 +529,20 @@ class :class:`~sage.modules.free_module.FreeModule_generic`
529529
# the License, or (at your option) any later version.
530530
# https://www.gnu.org/licenses/
531531
#******************************************************************************
532+
from __future__ import annotations
532533

533-
from sage.misc.cachefunc import cached_method
534-
from sage.structure.unique_representation import UniqueRepresentation
535-
from sage.structure.parent import Parent
534+
from typing import Generator, Optional
535+
536+
from sage.categories.fields import Fields
536537
from sage.categories.modules import Modules
537538
from sage.categories.rings import Rings
538-
from sage.categories.fields import Fields
539+
from sage.misc.cachefunc import cached_method
539540
from sage.rings.integer import Integer
541+
from sage.structure.parent import Parent
542+
from sage.structure.unique_representation import UniqueRepresentation
540543
from sage.tensor.modules.free_module_element import FiniteRankFreeModuleElement
541544

545+
542546
class FiniteRankFreeModule(UniqueRepresentation, Parent):
543547
r"""
544548
Free module of finite rank over a commutative ring.
@@ -749,6 +753,7 @@ class :class:`~sage.modules.module.Module`.
749753
"""
750754

751755
Element = FiniteRankFreeModuleElement
756+
_sindex: int
752757

753758
@staticmethod
754759
def __classcall_private__(cls, ring, rank, name=None, latex_name=None, start_index=0,
@@ -777,8 +782,16 @@ def __classcall_private__(cls, ring, rank, name=None, latex_name=None, start_ind
777782
return super(FiniteRankFreeModule, cls).__classcall__(
778783
cls, ring, rank, name, latex_name, start_index, output_formatter, category)
779784

780-
def __init__(self, ring, rank, name=None, latex_name=None, start_index=0,
781-
output_formatter=None, category=None):
785+
def __init__(
786+
self,
787+
ring,
788+
rank,
789+
name=None,
790+
latex_name=None,
791+
start_index: int = 0,
792+
output_formatter=None,
793+
category=None,
794+
):
782795
r"""
783796
See :class:`FiniteRankFreeModule` for documentation and examples.
784797
@@ -1963,7 +1976,7 @@ def _latex_(self):
19631976
else:
19641977
return self._latex_name
19651978

1966-
def rank(self):
1979+
def rank(self) -> int:
19671980
r"""
19681981
Return the rank of the free module ``self``.
19691982
@@ -2083,7 +2096,7 @@ def dual(self):
20832096
"""
20842097
return self.dual_exterior_power(1)
20852098

2086-
def irange(self, start=None):
2099+
def irange(self, start: Optional[int] = None) -> Generator[int, None, None]:
20872100
r"""
20882101
Single index generator, labelling the elements of a basis of ``self``.
20892102

0 commit comments

Comments
 (0)