passagemath-schemes 10.5.44__cp313-cp313-musllinux_1_2_aarch64.whl → 10.6.42__cp313-cp313-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. passagemath_schemes/__init__.py +3 -0
  2. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA +41 -41
  3. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA.bak +42 -42
  4. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/RECORD +158 -139
  5. passagemath_schemes-10.6.42.dist-info/top_level.txt +3 -0
  6. passagemath_schemes.libs/{libflint-7dd7ad94.so.19.0.0 → libflint-edf7fb90.so.22.0.0} +0 -0
  7. passagemath_schemes.libs/{libgcc_s-69c45f16.so.1 → libgcc_s-2d945d6c.so.1} +0 -0
  8. passagemath_schemes.libs/{libgmp-8e78bd9b.so.10.5.0 → libgmp-28992bcb.so.10.5.0} +0 -0
  9. passagemath_schemes.libs/{libgmpxx-e6de26f1.so.4.7.0 → libgmpxx-fecb01a9.so.4.7.0} +0 -0
  10. passagemath_schemes.libs/{libmpfr-5ff10580.so.6.2.1 → libmpfr-1fc8ea36.so.6.2.2} +0 -0
  11. passagemath_schemes.libs/{libstdc++-1f1a71be.so.6.0.33 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
  12. sage/all__sagemath_schemes.py +3 -2
  13. sage/databases/all__sagemath_schemes.py +0 -10
  14. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +4 -4
  15. sage/dynamics/arithmetic_dynamics/generic_ds.py +3 -3
  16. sage/dynamics/arithmetic_dynamics/projective_ds.py +7 -7
  17. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-313-aarch64-linux-musl.so +0 -0
  18. sage/dynamics/arithmetic_dynamics/wehlerK3.py +18 -18
  19. sage/lfunctions/zero_sums.cpython-313-aarch64-linux-musl.so +0 -0
  20. sage/modular/abvar/abvar.py +12 -11
  21. sage/modular/abvar/constructor.py +3 -3
  22. sage/modular/abvar/cuspidal_subgroup.py +5 -6
  23. sage/modular/abvar/finite_subgroup.py +20 -18
  24. sage/modular/abvar/homology.py +1 -2
  25. sage/modular/abvar/homspace.py +1 -1
  26. sage/modular/abvar/lseries.py +3 -3
  27. sage/modular/abvar/morphism.py +1 -1
  28. sage/modular/abvar/torsion_point.py +1 -1
  29. sage/modular/abvar/torsion_subgroup.py +1 -1
  30. sage/modular/arithgroup/arithgroup_element.cpython-313-aarch64-linux-musl.so +0 -0
  31. sage/modular/arithgroup/arithgroup_perm.py +16 -16
  32. sage/modular/arithgroup/congroup.cpython-313-aarch64-linux-musl.so +0 -0
  33. sage/modular/arithgroup/congroup_gamma0.py +2 -2
  34. sage/modular/arithgroup/congroup_gamma1.py +4 -4
  35. sage/modular/arithgroup/congroup_gammaH.py +2 -2
  36. sage/modular/arithgroup/congroup_generic.py +2 -3
  37. sage/modular/arithgroup/congroup_sl2z.py +3 -3
  38. sage/modular/arithgroup/farey_symbol.cpython-313-aarch64-linux-musl.so +0 -0
  39. sage/modular/arithgroup/farey_symbol.pyx +1 -2
  40. sage/modular/btquotients/btquotient.py +4 -5
  41. sage/modular/btquotients/pautomorphicform.py +2 -2
  42. sage/modular/cusps.py +6 -4
  43. sage/modular/cusps_nf.py +7 -8
  44. sage/modular/dirichlet.py +34 -43
  45. sage/modular/drinfeld_modform/element.py +4 -4
  46. sage/modular/drinfeld_modform/ring.py +12 -12
  47. sage/modular/drinfeld_modform/tutorial.py +1 -1
  48. sage/modular/hecke/algebra.py +7 -5
  49. sage/modular/hecke/ambient_module.py +2 -2
  50. sage/modular/hecke/element.py +7 -2
  51. sage/modular/hecke/module.py +9 -9
  52. sage/modular/hecke/submodule.py +6 -8
  53. sage/modular/hypergeometric_misc.cpython-313-aarch64-linux-musl.so +0 -0
  54. sage/modular/hypergeometric_misc.pyx +3 -2
  55. sage/modular/hypergeometric_motive.py +2 -2
  56. sage/modular/local_comp/local_comp.py +19 -11
  57. sage/modular/local_comp/type_space.py +10 -8
  58. sage/modular/modform/ambient.py +4 -3
  59. sage/modular/modform/cuspidal_submodule.py +2 -2
  60. sage/modular/modform/element.py +72 -72
  61. sage/modular/modform/half_integral.py +1 -1
  62. sage/modular/modform/l_series_gross_zagier.py +3 -0
  63. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-313-aarch64-linux-musl.so +0 -0
  64. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +5 -2
  65. sage/modular/modform/ring.py +10 -12
  66. sage/modular/modform/space.py +18 -21
  67. sage/modular/modform/weight1.py +1 -2
  68. sage/modular/modform_hecketriangle/abstract_ring.py +7 -14
  69. sage/modular/modform_hecketriangle/abstract_space.py +63 -66
  70. sage/modular/modform_hecketriangle/graded_ring_element.py +11 -12
  71. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +82 -84
  72. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +2 -2
  73. sage/modular/modform_hecketriangle/readme.py +9 -11
  74. sage/modular/modform_hecketriangle/series_constructor.py +10 -18
  75. sage/modular/modform_hecketriangle/space.py +29 -30
  76. sage/modular/modform_hecketriangle/subspace.py +9 -7
  77. sage/modular/modsym/ambient.py +13 -20
  78. sage/modular/modsym/boundary.py +2 -2
  79. sage/modular/modsym/manin_symbol.cpython-313-aarch64-linux-musl.so +0 -0
  80. sage/modular/modsym/manin_symbol_list.py +3 -7
  81. sage/modular/modsym/relation_matrix_pyx.cpython-313-aarch64-linux-musl.so +0 -0
  82. sage/modular/modsym/space.py +10 -22
  83. sage/modular/modsym/subspace.py +5 -7
  84. sage/modular/multiple_zeta.py +11 -13
  85. sage/modular/multiple_zeta_F_algebra.py +4 -6
  86. sage/modular/overconvergent/genus0.py +5 -4
  87. sage/modular/overconvergent/hecke_series.py +2 -2
  88. sage/modular/pollack_stevens/distributions.py +2 -2
  89. sage/modular/pollack_stevens/fund_domain.py +26 -29
  90. sage/modular/pollack_stevens/manin_map.py +15 -10
  91. sage/modular/pollack_stevens/modsym.py +18 -18
  92. sage/modular/quasimodform/element.py +10 -10
  93. sage/modular/quasimodform/ring.py +22 -22
  94. sage/modular/ssmod/ssmod.py +5 -12
  95. sage/rings/polynomial/binary_form_reduce.py +1 -1
  96. sage/schemes/curves/affine_curve.py +4 -4
  97. sage/schemes/curves/plane_curve_arrangement.py +28 -24
  98. sage/schemes/elliptic_curves/BSD.py +1 -1
  99. sage/schemes/elliptic_curves/addition_formulas_ring.py +4 -0
  100. sage/schemes/elliptic_curves/cm.py +1 -1
  101. sage/schemes/elliptic_curves/constructor.py +3 -3
  102. sage/schemes/elliptic_curves/ell_egros.py +1 -1
  103. sage/schemes/elliptic_curves/ell_field.py +57 -46
  104. sage/schemes/elliptic_curves/ell_finite_field.py +138 -26
  105. sage/schemes/elliptic_curves/ell_local_data.py +9 -9
  106. sage/schemes/elliptic_curves/ell_number_field.py +25 -24
  107. sage/schemes/elliptic_curves/ell_point.py +21 -22
  108. sage/schemes/elliptic_curves/ell_rational_field.py +38 -28
  109. sage/schemes/elliptic_curves/formal_group.py +1 -1
  110. sage/schemes/elliptic_curves/heegner.py +11 -8
  111. sage/schemes/elliptic_curves/height.py +26 -23
  112. sage/schemes/elliptic_curves/hom.py +2 -1
  113. sage/schemes/elliptic_curves/hom_composite.py +11 -11
  114. sage/schemes/elliptic_curves/hom_frobenius.py +8 -8
  115. sage/schemes/elliptic_curves/hom_sum.py +7 -1
  116. sage/schemes/elliptic_curves/hom_velusqrt.py +13 -7
  117. sage/schemes/elliptic_curves/homset.py +2 -2
  118. sage/schemes/elliptic_curves/isogeny_small_degree.py +1 -1
  119. sage/schemes/elliptic_curves/mod_poly.py +12 -5
  120. sage/schemes/elliptic_curves/mod_sym_num.cpython-313-aarch64-linux-musl.so +0 -0
  121. sage/schemes/elliptic_curves/padic_lseries.py +25 -13
  122. sage/schemes/elliptic_curves/padics.py +71 -63
  123. sage/schemes/elliptic_curves/period_lattice.py +78 -27
  124. sage/schemes/elliptic_curves/period_lattice_region.cpython-313-aarch64-linux-musl.so +0 -0
  125. sage/schemes/elliptic_curves/sha_tate.py +1 -1
  126. sage/schemes/elliptic_curves/weierstrass_morphism.py +2 -2
  127. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +1 -1
  128. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +1 -1
  129. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +10 -20
  130. sage/schemes/jacobians/abstract_jacobian.py +1 -1
  131. sage/schemes/plane_conics/con_field.py +42 -42
  132. sage/schemes/plane_conics/con_rational_field.py +1 -1
  133. sage/schemes/riemann_surfaces/riemann_surface.py +8 -8
  134. sage_wheels/share/cremona/cremona_mini.db +0 -0
  135. sage_wheels/share/ellcurves/rank0 +30427 -0
  136. sage_wheels/share/ellcurves/rank1 +31871 -0
  137. sage_wheels/share/ellcurves/rank10 +6 -0
  138. sage_wheels/share/ellcurves/rank11 +6 -0
  139. sage_wheels/share/ellcurves/rank12 +1 -0
  140. sage_wheels/share/ellcurves/rank14 +1 -0
  141. sage_wheels/share/ellcurves/rank15 +1 -0
  142. sage_wheels/share/ellcurves/rank17 +1 -0
  143. sage_wheels/share/ellcurves/rank19 +1 -0
  144. sage_wheels/share/ellcurves/rank2 +2388 -0
  145. sage_wheels/share/ellcurves/rank20 +1 -0
  146. sage_wheels/share/ellcurves/rank21 +1 -0
  147. sage_wheels/share/ellcurves/rank22 +1 -0
  148. sage_wheels/share/ellcurves/rank23 +1 -0
  149. sage_wheels/share/ellcurves/rank24 +1 -0
  150. sage_wheels/share/ellcurves/rank28 +1 -0
  151. sage_wheels/share/ellcurves/rank3 +836 -0
  152. sage_wheels/share/ellcurves/rank4 +10 -0
  153. sage_wheels/share/ellcurves/rank5 +5 -0
  154. sage_wheels/share/ellcurves/rank6 +5 -0
  155. sage_wheels/share/ellcurves/rank7 +5 -0
  156. sage_wheels/share/ellcurves/rank8 +6 -0
  157. sage_wheels/share/ellcurves/rank9 +7 -0
  158. passagemath_schemes-10.5.44.dist-info/top_level.txt +0 -2
  159. sage/databases/db_modular_polynomials.py +0 -250
  160. sage/databases/stein_watkins.py +0 -363
  161. sage/modular/modsym/p1list.cpython-313-aarch64-linux-musl.so +0 -0
  162. sage/modular/modsym/p1list.pxd +0 -29
  163. sage/modular/modsym/p1list.pyx +0 -1372
  164. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/WHEEL +0 -0
@@ -137,7 +137,7 @@ class Gamma1_class(GammaH_class):
137
137
  """
138
138
  return Gamma1_constructor, (self.level(),)
139
139
 
140
- def _latex_(self):
140
+ def _latex_(self) -> str:
141
141
  r"""
142
142
  Return the \LaTeX representation of ``self``.
143
143
 
@@ -150,7 +150,7 @@ class Gamma1_class(GammaH_class):
150
150
  """
151
151
  return "\\Gamma_1(%s)" % self.level()
152
152
 
153
- def is_even(self):
153
+ def is_even(self) -> bool:
154
154
  """
155
155
  Return ``True`` precisely if this subgroup contains the matrix -1.
156
156
 
@@ -163,9 +163,9 @@ class Gamma1_class(GammaH_class):
163
163
  sage: Gamma1(15).is_even()
164
164
  False
165
165
  """
166
- return self.level() in [1,2]
166
+ return self.level() in [1, 2]
167
167
 
168
- def is_subgroup(self, right):
168
+ def is_subgroup(self, right) -> bool:
169
169
  """
170
170
  Return ``True`` if ``self`` is a subgroup of ``right``.
171
171
 
@@ -435,7 +435,7 @@ class GammaH_class(CongruenceSubgroup):
435
435
  """
436
436
  return self.__Hlist
437
437
 
438
- def is_even(self):
438
+ def is_even(self) -> bool:
439
439
  """
440
440
  Return ``True`` precisely if this subgroup contains the matrix -1.
441
441
 
@@ -1002,7 +1002,7 @@ class GammaH_class(CongruenceSubgroup):
1002
1002
  for t in reps2:
1003
1003
  yield SL2Z(t) * r
1004
1004
 
1005
- def is_subgroup(self, other):
1005
+ def is_subgroup(self, other) -> bool:
1006
1006
  r"""
1007
1007
  Return ``True`` if ``self`` is a subgroup of ``right``, and ``False``
1008
1008
  otherwise.
@@ -181,16 +181,15 @@ class CongruenceSubgroupBase(ArithmeticSubgroup):
181
181
  N = self.level()
182
182
  return self([1-N, -N, N, 1+N])
183
183
 
184
- def is_congruence(self):
184
+ def is_congruence(self) -> bool:
185
185
  r"""
186
- Return True, since this is a congruence subgroup.
186
+ Return ``True``, since this is a congruence subgroup.
187
187
 
188
188
  EXAMPLES::
189
189
 
190
190
  sage: Gamma0(7).is_congruence()
191
191
  True
192
192
  """
193
-
194
193
  return True
195
194
 
196
195
  def level(self):
@@ -15,7 +15,7 @@ AUTHORS:
15
15
  #
16
16
  # The full text of the GPL is available at:
17
17
  #
18
- # http://www.gnu.org/licenses/
18
+ # https://www.gnu.org/licenses/
19
19
  #
20
20
  ################################################################################
21
21
 
@@ -141,7 +141,7 @@ class SL2Z_class(Gamma0_class):
141
141
  """
142
142
  return "Modular Group SL(2,Z)"
143
143
 
144
- def _latex_(self):
144
+ def _latex_(self) -> str:
145
145
  r"""
146
146
  Return the \LaTeX representation of ``self``.
147
147
 
@@ -154,7 +154,7 @@ class SL2Z_class(Gamma0_class):
154
154
  """
155
155
  return "\\mbox{\\rm SL}_2(%s)" % (ZZ._latex_())
156
156
 
157
- def is_subgroup(self, right):
157
+ def is_subgroup(self, right) -> bool:
158
158
  """
159
159
  Return ``True`` if ``self`` is a subgroup of ``right``.
160
160
 
@@ -1,7 +1,7 @@
1
1
  # sage_setup: distribution = sagemath-schemes
2
2
  # distutils: sources = sage/modular/arithgroup/sl2z.cpp sage/modular/arithgroup/farey.cpp
3
3
  # distutils: language = c++
4
- # distutils: extra_compile_args = -std=c++11
4
+ # distutils: extra_compile_args = -std=c++17
5
5
  # sage.doctest: needs sage.libs.pari
6
6
  r"""
7
7
  Farey symbol for arithmetic subgroups of `\PSL_2(\ZZ)`
@@ -48,7 +48,6 @@ from sage.structure.richcmp cimport richcmp_not_equal
48
48
 
49
49
  cdef extern from "sl2z.hpp":
50
50
  cppclass cpp_SL2Z "SL2Z":
51
- mpz_class a, b, c, d
52
51
  cpp_SL2Z(int, int, int, int)
53
52
  cpp_SL2Z(mpz_class, mpz_class, mpz_class, mpz_class)
54
53
  mpz_class a()
@@ -1715,7 +1715,7 @@ class BruhatTitsQuotient(SageObject, UniqueRepresentation):
1715
1715
  Compute certain invariants from the level data of the quotient
1716
1716
  which allow one to compute the genus of the curve.
1717
1717
 
1718
- Details to be found in Theorem 9 of [FM2014]_.
1718
+ Details to be found in Theorem 3.8 of [FM2014]_.
1719
1719
 
1720
1720
  EXAMPLES::
1721
1721
 
@@ -2121,7 +2121,7 @@ class BruhatTitsQuotient(SageObject, UniqueRepresentation):
2121
2121
  my_args.update(kwargs)
2122
2122
  return S.plot(*args, **my_args)
2123
2123
 
2124
- def is_admissible(self, D):
2124
+ def is_admissible(self, D) -> bool:
2125
2125
  r"""
2126
2126
  Test whether the imaginary quadratic field of
2127
2127
  discriminant `D` embeds in the quaternion algebra. It
@@ -2456,7 +2456,7 @@ class BruhatTitsQuotient(SageObject, UniqueRepresentation):
2456
2456
 
2457
2457
  INPUT:
2458
2458
 
2459
- - ``g`` -- a row vector of size `4` whose entries represent a
2459
+ - ``g`` -- a column vector of size `4` whose entries represent a
2460
2460
  quaternion in our basis
2461
2461
 
2462
2462
  - ``exact`` -- boolean (default: ``False``); if True, tries to embed
@@ -3099,8 +3099,7 @@ class BruhatTitsQuotient(SageObject, UniqueRepresentation):
3099
3099
  Vertex of Bruhat-Tits tree for p = 3
3100
3100
  """
3101
3101
  try:
3102
- tmp = self._cached_paths[v1]
3103
- return tmp
3102
+ return self._cached_paths[v1]
3104
3103
  except KeyError:
3105
3104
  pass
3106
3105
  chain, v = self._BT.find_path(v1, self.get_vertex_dict())
@@ -863,7 +863,7 @@ class BruhatTitsHarmonicCocycles(AmbientHeckeModule, UniqueRepresentation):
863
863
  # return BruhatTitsHarmonicCocyclesSubmodule(self, v)
864
864
  raise NotImplementedError
865
865
 
866
- def is_simple(self):
866
+ def is_simple(self) -> bool:
867
867
  r"""
868
868
  Whether ``self`` is irreducible.
869
869
 
@@ -2498,7 +2498,7 @@ class pAdicAutomorphicForms(Module, UniqueRepresentation):
2498
2498
  sage: H = X.harmonic_cocycles(2,prec = 5)
2499
2499
  sage: A = X.padic_automorphic_forms(2,prec = 5)
2500
2500
  sage: h = H.basis()[0]
2501
- sage: A.lift(h) # indirect doctest long time
2501
+ sage: A.lift(h) # indirect doctest, long time
2502
2502
  p-adic automorphic form of cohomological weight 0
2503
2503
  """
2504
2504
  S = self._source.get_stabilizers()
sage/modular/cusps.py CHANGED
@@ -27,6 +27,7 @@ EXAMPLES::
27
27
  #
28
28
  # https://www.gnu.org/licenses/
29
29
  # ****************************************************************************
30
+ from typing import Any
30
31
 
31
32
  from sage.misc.cachefunc import cached_method
32
33
  from sage.misc.fast_methods import Singleton
@@ -318,7 +319,7 @@ class Cusp(Element):
318
319
  o = right._rational_()
319
320
  return richcmp(s, o, op)
320
321
 
321
- def is_infinity(self):
322
+ def is_infinity(self) -> bool:
322
323
  """
323
324
  Return ``True`` if this is the cusp infinity.
324
325
 
@@ -466,7 +467,8 @@ class Cusp(Element):
466
467
  """
467
468
  return Cusp(-self.__a, self.__b)
468
469
 
469
- def is_gamma0_equiv(self, other, N, transformation=None):
470
+ def is_gamma0_equiv(self, other, N,
471
+ transformation=None) -> bool | tuple[bool, Any]:
470
472
  r"""
471
473
  Return whether ``self`` and ``other`` are equivalent modulo the action of
472
474
  `\Gamma_0(N)` via linear fractional transformations.
@@ -647,7 +649,7 @@ class Cusp(Element):
647
649
  A = A % (u2 * v1 * M)
648
650
  return (True, A)
649
651
 
650
- def is_gamma1_equiv(self, other, N):
652
+ def is_gamma1_equiv(self, other, N) -> tuple[bool, int]:
651
653
  r"""
652
654
  Return whether ``self`` and ``other`` are equivalent modulo the action of
653
655
  `\Gamma_1(N)` via linear fractional transformations.
@@ -702,7 +704,7 @@ class Cusp(Element):
702
704
  return True, -1
703
705
  return False, 0
704
706
 
705
- def is_gamma_h_equiv(self, other, G):
707
+ def is_gamma_h_equiv(self, other, G) -> tuple[bool, int]:
706
708
  r"""
707
709
  Return a pair ``(b, t)``, where ``b`` is ``True`` or ``False`` as
708
710
  ``self`` and ``other`` are equivalent under the action of `G`, and `t`
sage/modular/cusps_nf.py CHANGED
@@ -73,14 +73,14 @@ List representatives for Gamma_0(N) - equivalence classes of cusps::
73
73
  # Distributed under the terms of the GNU General Public License (GPL)
74
74
  # https://www.gnu.org/licenses/
75
75
  # ****************************************************************************
76
+ from typing import Any
76
77
 
78
+ from sage.misc.cachefunc import cached_method, cached_function
77
79
  from sage.structure.parent import Parent
78
80
  from sage.structure.element import Element, InfinityElement
79
81
  from sage.structure.richcmp import richcmp, rich_to_bool
80
82
  from sage.structure.unique_representation import UniqueRepresentation
81
83
 
82
- from sage.misc.cachefunc import cached_method, cached_function
83
-
84
84
 
85
85
  @cached_function
86
86
  def list_of_representatives(N):
@@ -598,7 +598,7 @@ class NFCusp(Element):
598
598
  """
599
599
  return self.parent().number_field()
600
600
 
601
- def is_infinity(self):
601
+ def is_infinity(self) -> bool:
602
602
  """
603
603
  Return ``True`` if this is the cusp infinity.
604
604
 
@@ -823,7 +823,7 @@ class NFCusp(Element):
823
823
  k = self.number_field()
824
824
  return k.ideal(self.__a, self.__b)
825
825
 
826
- def ABmatrix(self):
826
+ def ABmatrix(self) -> list:
827
827
  """
828
828
  Return AB-matrix associated to the cusp ``self``.
829
829
 
@@ -898,11 +898,10 @@ class NFCusp(Element):
898
898
  r = A1.element_1_mod(A2)
899
899
  b1 = -(1 - r) / a2 * g
900
900
  b2 = (r / a1) * g
901
- ABM = [a1, b1, a2, b2]
902
-
903
- return ABM
901
+ return [a1, b1, a2, b2]
904
902
 
905
- def is_Gamma0_equivalent(self, other, N, Transformation=False):
903
+ def is_Gamma0_equivalent(self, other, N,
904
+ Transformation=False) -> bool | tuple[bool, Any]:
906
905
  r"""
907
906
  Check if cusps ``self`` and ``other`` are `\Gamma_0(N)`- equivalent.
908
907
 
sage/modular/dirichlet.py CHANGED
@@ -192,7 +192,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
192
192
  """
193
193
  A Dirichlet character.
194
194
  """
195
- def __init__(self, parent, x, check=True):
195
+ def __init__(self, parent, x, check=True) -> None:
196
196
  r"""
197
197
  Create a Dirichlet character with specified values on
198
198
  generators of `(\ZZ/n\ZZ)^*`.
@@ -402,7 +402,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
402
402
  G = self.parent().change_ring(R)
403
403
  return G.element_class(G, [R(x) for x in self.values_on_gens()])
404
404
 
405
- def _richcmp_(self, other, op):
405
+ def _richcmp_(self, other, op) -> bool:
406
406
  """
407
407
  Compare ``self`` to ``other``.
408
408
 
@@ -430,7 +430,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
430
430
  """
431
431
  return richcmp(self.values_on_gens(), other.values_on_gens(), op)
432
432
 
433
- def __hash__(self):
433
+ def __hash__(self) -> int:
434
434
  """
435
435
  Return the hash of ``self``.
436
436
 
@@ -528,7 +528,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
528
528
  x = tuple(z**n for z in self.values_on_gens())
529
529
  return G.element_class(G, x, check=False)
530
530
 
531
- def _repr_short_(self):
531
+ def _repr_short_(self) -> str:
532
532
  r"""
533
533
  A short string representation of ``self``, often used in string representations of modular forms.
534
534
 
@@ -540,7 +540,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
540
540
  """
541
541
  return str(list(self.values_on_gens()))
542
542
 
543
- def _repr_(self):
543
+ def _repr_(self) -> str:
544
544
  """
545
545
  String representation of ``self``.
546
546
 
@@ -570,7 +570,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
570
570
  s += str(self.parent().unit_gens()[i]) + ' |--> ' + str(self.values_on_gens()[i])
571
571
  return s
572
572
 
573
- def _latex_(self):
573
+ def _latex_(self) -> str:
574
574
  r"""
575
575
  LaTeX representation of ``self``.
576
576
 
@@ -1049,7 +1049,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1049
1049
  return NumberField(self.fixed_field_polynomial(), 'a')
1050
1050
 
1051
1051
  @cached_method
1052
- def decomposition(self):
1052
+ def decomposition(self) -> list:
1053
1053
  r"""
1054
1054
  Return the decomposition of ``self`` as a product of Dirichlet
1055
1055
  characters of prime power modulus, where the prime powers exactly
@@ -1230,7 +1230,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1230
1230
  G, v = self._pari_init_()
1231
1231
  return pari.znconreyexp(G, v).sage()
1232
1232
 
1233
- def lmfdb_page(self):
1233
+ def lmfdb_page(self) -> None:
1234
1234
  r"""
1235
1235
  Open the LMFDB web page of the character in a browser.
1236
1236
 
@@ -1247,7 +1247,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1247
1247
  url = lmfdb_url.format(self.modulus(), self.conrey_number())
1248
1248
  webbrowser.open(url)
1249
1249
 
1250
- def galois_orbit(self, sort=True):
1250
+ def galois_orbit(self, sort=True) -> list:
1251
1251
  r"""
1252
1252
  Return the orbit of this character under the action of the absolute
1253
1253
  Galois group of the prime subfield of the base ring.
@@ -1549,7 +1549,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1549
1549
 
1550
1550
  And sums where exactly one character is nontrivial (see :issue:`6393`)::
1551
1551
 
1552
- sage: G = DirichletGroup(5); X = G.list(); Y=X[0]; Z=X[1]
1552
+ sage: G = DirichletGroup(5); X = G.list(); Y = X[0]; Z = X[1]
1553
1553
  sage: Y.jacobi_sum(Z)
1554
1554
  -1
1555
1555
  sage: Z.jacobi_sum(Y)
@@ -1704,7 +1704,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1704
1704
  return g
1705
1705
 
1706
1706
  @cached_method
1707
- def is_even(self):
1707
+ def is_even(self) -> bool:
1708
1708
  r"""
1709
1709
  Return ``True`` if and only if `\varepsilon(-1) = 1`.
1710
1710
 
@@ -1748,7 +1748,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1748
1748
  return self(-1) == R.one()
1749
1749
 
1750
1750
  @cached_method
1751
- def is_odd(self):
1751
+ def is_odd(self) -> bool:
1752
1752
  r"""
1753
1753
  Return ``True`` if and only if `\varepsilon(-1) = -1`.
1754
1754
 
@@ -1788,7 +1788,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1788
1788
  return self(-1) == R(-1)
1789
1789
 
1790
1790
  @cached_method
1791
- def is_primitive(self):
1791
+ def is_primitive(self) -> bool:
1792
1792
  """
1793
1793
  Return ``True`` if and only if this character is
1794
1794
  primitive, i.e., its conductor equals its modulus.
@@ -1813,7 +1813,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1813
1813
  return (self.conductor() == self.modulus())
1814
1814
 
1815
1815
  @cached_method
1816
- def is_trivial(self):
1816
+ def is_trivial(self) -> bool:
1817
1817
  r"""
1818
1818
  Return ``True`` if this is the trivial character,
1819
1819
  i.e., has order 1.
@@ -1831,7 +1831,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
1831
1831
  one = self.base_ring().one()
1832
1832
  return all(x == one for x in self.values_on_gens())
1833
1833
 
1834
- def kernel(self):
1834
+ def kernel(self) -> list:
1835
1835
  r"""
1836
1836
  Return the kernel of this character.
1837
1837
 
@@ -2045,7 +2045,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
2045
2045
  return H(self)
2046
2046
 
2047
2047
  @cached_method
2048
- def values(self):
2048
+ def values(self) -> list:
2049
2049
  """
2050
2050
  Return a list of the values of this character on each integer
2051
2051
  between 0 and the modulus.
@@ -2133,7 +2133,7 @@ class DirichletCharacter(MultiplicativeGroupElement):
2133
2133
  i += 1
2134
2134
 
2135
2135
  @cached_method(do_pickle=True)
2136
- def values_on_gens(self):
2136
+ def values_on_gens(self) -> tuple:
2137
2137
  r"""
2138
2138
  Return a tuple of the values of ``self`` on the standard
2139
2139
  generators of `(\ZZ/N\ZZ)^*`, where `N` is the modulus.
@@ -2459,6 +2459,12 @@ class DirichletGroupFactory(UniqueFactory):
2459
2459
 
2460
2460
  sage: DirichletGroup(60) is DirichletGroup(60)
2461
2461
  True
2462
+
2463
+ Test for pickling::
2464
+
2465
+ sage: G = DirichletGroup(9)
2466
+ sage: loads(dumps(G)) is G
2467
+ True
2462
2468
  """
2463
2469
  def create_key(self, N, base_ring=None, zeta=None, zeta_order=None,
2464
2470
  names=None, integral=False):
@@ -2566,7 +2572,7 @@ class DirichletGroupFactory(UniqueFactory):
2566
2572
  DirichletGroup = DirichletGroupFactory("DirichletGroup")
2567
2573
 
2568
2574
 
2569
- def is_DirichletGroup(x):
2575
+ def is_DirichletGroup(x) -> bool:
2570
2576
  """
2571
2577
  Return ``True`` if ``x`` is a Dirichlet group.
2572
2578
 
@@ -2595,7 +2601,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
2595
2601
 
2596
2602
  Element = DirichletCharacter
2597
2603
 
2598
- def __init__(self, base_ring, modulus, zeta, zeta_order):
2604
+ def __init__(self, base_ring, modulus, zeta, zeta_order) -> None:
2599
2605
  """
2600
2606
  Create a Dirichlet group.
2601
2607
 
@@ -2634,21 +2640,6 @@ class DirichletGroup_class(WithEqualityById, Parent):
2634
2640
  self._modulus = modulus
2635
2641
  self._integers = IntegerModRing(modulus)
2636
2642
 
2637
- def __setstate__(self, state):
2638
- """
2639
- Used for unpickling old instances.
2640
-
2641
- TESTS::
2642
-
2643
- sage: G = DirichletGroup(9)
2644
- sage: loads(dumps(G)) is G
2645
- True
2646
- """
2647
- self._set_element_constructor()
2648
- if '_zeta_order' in state:
2649
- state['_zeta_order'] = Integer(state['_zeta_order'])
2650
- super().__setstate__(state)
2651
-
2652
2643
  @property
2653
2644
  def _module(self):
2654
2645
  """
@@ -2689,7 +2680,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
2689
2680
  return w
2690
2681
 
2691
2682
  @property
2692
- def _zeta_dlog(self):
2683
+ def _zeta_dlog(self) -> dict:
2693
2684
  """
2694
2685
  Return a dictionary that can be used to compute discrete
2695
2686
  logarithms in the value group of this Dirichlet group.
@@ -2873,7 +2864,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
2873
2864
  a.append(R(x(v)))
2874
2865
  return self.element_class(self, a)
2875
2866
 
2876
- def _coerce_map_from_(self, X):
2867
+ def _coerce_map_from_(self, X) -> bool:
2877
2868
  """
2878
2869
  Decide whether there is a coercion map from `X`.
2879
2870
 
@@ -2918,7 +2909,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
2918
2909
  """
2919
2910
  return self.order()
2920
2911
 
2921
- def _repr_(self):
2912
+ def _repr_(self) -> str:
2922
2913
  """
2923
2914
  Return a print representation of this group, which can be renamed.
2924
2915
 
@@ -2938,7 +2929,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
2938
2929
  return s
2939
2930
 
2940
2931
  @cached_method
2941
- def decomposition(self):
2932
+ def decomposition(self) -> list:
2942
2933
  r"""
2943
2934
  Return the Dirichlet groups of prime power modulus corresponding
2944
2935
  to primes dividing modulus.
@@ -3107,7 +3098,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
3107
3098
  return g[n]
3108
3099
 
3109
3100
  @cached_method
3110
- def gens(self):
3101
+ def gens(self) -> tuple:
3111
3102
  """
3112
3103
  Return generators of ``self``.
3113
3104
 
@@ -3120,7 +3111,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
3120
3111
  g = []
3121
3112
  ord = self.zeta_order()
3122
3113
  M = self._module
3123
- zero = M(0)
3114
+ zero = M.zero()
3124
3115
  orders = self.integers_mod().unit_group().gens_orders()
3125
3116
  for i in range(len(self.unit_gens())):
3126
3117
  z = zero.__copy__()
@@ -3143,7 +3134,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
3143
3134
 
3144
3135
  __iter__ = multiplicative_iterator
3145
3136
 
3146
- def list(self):
3137
+ def list(self) -> list:
3147
3138
  """
3148
3139
  Return a list of the Dirichlet characters in this group.
3149
3140
 
@@ -3169,7 +3160,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
3169
3160
  """
3170
3161
  return self._modulus
3171
3162
 
3172
- def ngens(self):
3163
+ def ngens(self) -> int:
3173
3164
  """
3174
3165
  Return the number of generators of ``self``.
3175
3166
 
@@ -3247,7 +3238,7 @@ class DirichletGroup_class(WithEqualityById, Parent):
3247
3238
  e *= g**n
3248
3239
  return e
3249
3240
 
3250
- def unit_gens(self):
3241
+ def unit_gens(self) -> tuple:
3251
3242
  r"""
3252
3243
  Return the minimal generators for the units of
3253
3244
  `(\ZZ/N\ZZ)^*`, where `N` is the
@@ -88,7 +88,7 @@ class DrinfeldModularFormsElement(ModuleElement):
88
88
 
89
89
  .. NOTE::
90
90
 
91
- This class should not be directly instanciated, instead create
91
+ This class should not be directly instantiated, instead create
92
92
  an instance of the parent
93
93
  :class:`~sage.modular.drinfeld_modform.ring.DrinfeldModularForms`
94
94
  and access its elements using the relevant methods.
@@ -255,7 +255,7 @@ class DrinfeldModularFormsElement(ModuleElement):
255
255
  """
256
256
  return self.parent()._rank
257
257
 
258
- def is_one(self):
258
+ def is_one(self) -> bool:
259
259
  r"""
260
260
  Return ``True`` whether this graded Drinfeld form is the
261
261
  multiplicative identity.
@@ -272,7 +272,7 @@ class DrinfeldModularFormsElement(ModuleElement):
272
272
  """
273
273
  return self._polynomial.is_one()
274
274
 
275
- def is_zero(self):
275
+ def is_zero(self) -> bool:
276
276
  r"""
277
277
  Return ``True`` whether this graded Drinfeld form is the
278
278
  additive identity.
@@ -294,7 +294,7 @@ class DrinfeldModularFormsElement(ModuleElement):
294
294
  """
295
295
  return not bool(self)
296
296
 
297
- def is_homogeneous(self):
297
+ def is_homogeneous(self) -> bool:
298
298
  r"""
299
299
  Return whether the graded form is homogeneous in the weight.
300
300
 
@@ -103,7 +103,7 @@ class DrinfeldModularForms(Parent, UniqueRepresentation):
103
103
 
104
104
  If this parameter is a single character, for example ``f``, and a
105
105
  rank is specified, then the names will be of the form
106
- ``f1, f2, ..., fr``. Finally, if this parameter is a list, a tupe
106
+ ``f1, f2, ..., fr``. Finally, if this parameter is a list, a tuple
107
107
  or a string of comma separated characters, then each character
108
108
  will corresponds to a generator. Note that in this case, it not
109
109
  necessary to specify the rank.
@@ -120,7 +120,7 @@ class DrinfeldModularForms(Parent, UniqueRepresentation):
120
120
  Use the :meth:`gens` method to obtain the generators of the ring::
121
121
 
122
122
  sage: M.gens()
123
- [g1, g2, g3]
123
+ (g1, g2, g3)
124
124
  sage: M.inject_variables() # assign the variable g1, g2, g3
125
125
  Defining g1, g2, g3
126
126
  sage: T*g1*g2 + g3
@@ -131,29 +131,29 @@ class DrinfeldModularForms(Parent, UniqueRepresentation):
131
131
 
132
132
  sage: M.<F, G, H> = DrinfeldModularForms(K)
133
133
  sage: M.gens()
134
- [F, G, H]
134
+ (F, G, H)
135
135
  sage: M = DrinfeldModularForms(K, 5, names='f') # must specify the rank
136
136
  sage: M.gens()
137
- [f1, f2, f3, f4, f5]
137
+ (f1, f2, f3, f4, f5)
138
138
  sage: M = DrinfeldModularForms(K, names='u, v, w, x')
139
139
  sage: M.gens()
140
- [u, v, w, x]
140
+ (u, v, w, x)
141
141
  sage: M = DrinfeldModularForms(K, names=['F', 'G', 'H'])
142
142
  sage: M.gens()
143
- [F, G, H]
143
+ (F, G, H)
144
144
 
145
145
  Set the keyword parameter ``has_type`` to ``True`` in order to create
146
146
  the ring of Drinfeld modular forms of arbitrary type::
147
147
 
148
148
  sage: M = DrinfeldModularForms(K, 4, has_type=True)
149
149
  sage: M.gens()
150
- [g1, g2, g3, h4]
150
+ (g1, g2, g3, h4)
151
151
  sage: h4 = M.3
152
152
  sage: h4.type()
153
153
  1
154
154
 
155
155
  To obtain a generating set of the subspace of forms of a fixed
156
- weight, use the methode :meth:`basis_of_weight`::
156
+ weight, use the method :meth:`basis_of_weight`::
157
157
 
158
158
  sage: M = DrinfeldModularForms(K, 2)
159
159
  sage: M.basis_of_weight(q^3 - 1) # needs sage.combinat
@@ -619,18 +619,18 @@ class DrinfeldModularForms(Parent, UniqueRepresentation):
619
619
  """
620
620
  return self(self._poly_ring.gen(n))
621
621
 
622
- def gens(self):
622
+ def gens(self) -> tuple:
623
623
  r"""
624
- Return a list of generators of this ring.
624
+ Return a tuple of generators of this ring.
625
625
 
626
626
  EXAMPLES::
627
627
 
628
628
  sage: A = GF(3)['T']; K = Frac(A); T = K.gen()
629
629
  sage: M = DrinfeldModularForms(K, 5)
630
630
  sage: M.gens()
631
- [g1, g2, g3, g4, g5]
631
+ (g1, g2, g3, g4, g5)
632
632
  """
633
- return [self(g) for g in self._poly_ring.gens()]
633
+ return tuple(self(g) for g in self._poly_ring.gens())
634
634
 
635
635
  def ngens(self):
636
636
  r"""
@@ -214,7 +214,7 @@ keyword argument ``has_type=True``::
214
214
 
215
215
  sage: M = DrinfeldModularForms(K, 4, has_type=True)
216
216
  sage: M.gens()
217
- [g1, g2, g3, h4]
217
+ (g1, g2, g3, h4)
218
218
  sage: h4 = M.3
219
219
  sage: h4.weight()
220
220
  40