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.
- passagemath_schemes/__init__.py +3 -0
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA +41 -41
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA.bak +42 -42
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/RECORD +158 -139
- passagemath_schemes-10.6.42.dist-info/top_level.txt +3 -0
- passagemath_schemes.libs/{libflint-7dd7ad94.so.19.0.0 → libflint-edf7fb90.so.22.0.0} +0 -0
- passagemath_schemes.libs/{libgcc_s-69c45f16.so.1 → libgcc_s-2d945d6c.so.1} +0 -0
- passagemath_schemes.libs/{libgmp-8e78bd9b.so.10.5.0 → libgmp-28992bcb.so.10.5.0} +0 -0
- passagemath_schemes.libs/{libgmpxx-e6de26f1.so.4.7.0 → libgmpxx-fecb01a9.so.4.7.0} +0 -0
- passagemath_schemes.libs/{libmpfr-5ff10580.so.6.2.1 → libmpfr-1fc8ea36.so.6.2.2} +0 -0
- passagemath_schemes.libs/{libstdc++-1f1a71be.so.6.0.33 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
- sage/all__sagemath_schemes.py +3 -2
- sage/databases/all__sagemath_schemes.py +0 -10
- sage/dynamics/arithmetic_dynamics/berkovich_ds.py +4 -4
- sage/dynamics/arithmetic_dynamics/generic_ds.py +3 -3
- sage/dynamics/arithmetic_dynamics/projective_ds.py +7 -7
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-313-aarch64-linux-musl.so +0 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +18 -18
- sage/lfunctions/zero_sums.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/abvar/abvar.py +12 -11
- sage/modular/abvar/constructor.py +3 -3
- sage/modular/abvar/cuspidal_subgroup.py +5 -6
- sage/modular/abvar/finite_subgroup.py +20 -18
- sage/modular/abvar/homology.py +1 -2
- sage/modular/abvar/homspace.py +1 -1
- sage/modular/abvar/lseries.py +3 -3
- sage/modular/abvar/morphism.py +1 -1
- sage/modular/abvar/torsion_point.py +1 -1
- sage/modular/abvar/torsion_subgroup.py +1 -1
- sage/modular/arithgroup/arithgroup_element.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/arithgroup_perm.py +16 -16
- sage/modular/arithgroup/congroup.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/congroup_gamma0.py +2 -2
- sage/modular/arithgroup/congroup_gamma1.py +4 -4
- sage/modular/arithgroup/congroup_gammaH.py +2 -2
- sage/modular/arithgroup/congroup_generic.py +2 -3
- sage/modular/arithgroup/congroup_sl2z.py +3 -3
- sage/modular/arithgroup/farey_symbol.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/farey_symbol.pyx +1 -2
- sage/modular/btquotients/btquotient.py +4 -5
- sage/modular/btquotients/pautomorphicform.py +2 -2
- sage/modular/cusps.py +6 -4
- sage/modular/cusps_nf.py +7 -8
- sage/modular/dirichlet.py +34 -43
- sage/modular/drinfeld_modform/element.py +4 -4
- sage/modular/drinfeld_modform/ring.py +12 -12
- sage/modular/drinfeld_modform/tutorial.py +1 -1
- sage/modular/hecke/algebra.py +7 -5
- sage/modular/hecke/ambient_module.py +2 -2
- sage/modular/hecke/element.py +7 -2
- sage/modular/hecke/module.py +9 -9
- sage/modular/hecke/submodule.py +6 -8
- sage/modular/hypergeometric_misc.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/hypergeometric_misc.pyx +3 -2
- sage/modular/hypergeometric_motive.py +2 -2
- sage/modular/local_comp/local_comp.py +19 -11
- sage/modular/local_comp/type_space.py +10 -8
- sage/modular/modform/ambient.py +4 -3
- sage/modular/modform/cuspidal_submodule.py +2 -2
- sage/modular/modform/element.py +72 -72
- sage/modular/modform/half_integral.py +1 -1
- sage/modular/modform/l_series_gross_zagier.py +3 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.pyx +5 -2
- sage/modular/modform/ring.py +10 -12
- sage/modular/modform/space.py +18 -21
- sage/modular/modform/weight1.py +1 -2
- sage/modular/modform_hecketriangle/abstract_ring.py +7 -14
- sage/modular/modform_hecketriangle/abstract_space.py +63 -66
- sage/modular/modform_hecketriangle/graded_ring_element.py +11 -12
- sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +82 -84
- sage/modular/modform_hecketriangle/hecke_triangle_groups.py +2 -2
- sage/modular/modform_hecketriangle/readme.py +9 -11
- sage/modular/modform_hecketriangle/series_constructor.py +10 -18
- sage/modular/modform_hecketriangle/space.py +29 -30
- sage/modular/modform_hecketriangle/subspace.py +9 -7
- sage/modular/modsym/ambient.py +13 -20
- sage/modular/modsym/boundary.py +2 -2
- sage/modular/modsym/manin_symbol.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/manin_symbol_list.py +3 -7
- sage/modular/modsym/relation_matrix_pyx.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/space.py +10 -22
- sage/modular/modsym/subspace.py +5 -7
- sage/modular/multiple_zeta.py +11 -13
- sage/modular/multiple_zeta_F_algebra.py +4 -6
- sage/modular/overconvergent/genus0.py +5 -4
- sage/modular/overconvergent/hecke_series.py +2 -2
- sage/modular/pollack_stevens/distributions.py +2 -2
- sage/modular/pollack_stevens/fund_domain.py +26 -29
- sage/modular/pollack_stevens/manin_map.py +15 -10
- sage/modular/pollack_stevens/modsym.py +18 -18
- sage/modular/quasimodform/element.py +10 -10
- sage/modular/quasimodform/ring.py +22 -22
- sage/modular/ssmod/ssmod.py +5 -12
- sage/rings/polynomial/binary_form_reduce.py +1 -1
- sage/schemes/curves/affine_curve.py +4 -4
- sage/schemes/curves/plane_curve_arrangement.py +28 -24
- sage/schemes/elliptic_curves/BSD.py +1 -1
- sage/schemes/elliptic_curves/addition_formulas_ring.py +4 -0
- sage/schemes/elliptic_curves/cm.py +1 -1
- sage/schemes/elliptic_curves/constructor.py +3 -3
- sage/schemes/elliptic_curves/ell_egros.py +1 -1
- sage/schemes/elliptic_curves/ell_field.py +57 -46
- sage/schemes/elliptic_curves/ell_finite_field.py +138 -26
- sage/schemes/elliptic_curves/ell_local_data.py +9 -9
- sage/schemes/elliptic_curves/ell_number_field.py +25 -24
- sage/schemes/elliptic_curves/ell_point.py +21 -22
- sage/schemes/elliptic_curves/ell_rational_field.py +38 -28
- sage/schemes/elliptic_curves/formal_group.py +1 -1
- sage/schemes/elliptic_curves/heegner.py +11 -8
- sage/schemes/elliptic_curves/height.py +26 -23
- sage/schemes/elliptic_curves/hom.py +2 -1
- sage/schemes/elliptic_curves/hom_composite.py +11 -11
- sage/schemes/elliptic_curves/hom_frobenius.py +8 -8
- sage/schemes/elliptic_curves/hom_sum.py +7 -1
- sage/schemes/elliptic_curves/hom_velusqrt.py +13 -7
- sage/schemes/elliptic_curves/homset.py +2 -2
- sage/schemes/elliptic_curves/isogeny_small_degree.py +1 -1
- sage/schemes/elliptic_curves/mod_poly.py +12 -5
- sage/schemes/elliptic_curves/mod_sym_num.cpython-313-aarch64-linux-musl.so +0 -0
- sage/schemes/elliptic_curves/padic_lseries.py +25 -13
- sage/schemes/elliptic_curves/padics.py +71 -63
- sage/schemes/elliptic_curves/period_lattice.py +78 -27
- sage/schemes/elliptic_curves/period_lattice_region.cpython-313-aarch64-linux-musl.so +0 -0
- sage/schemes/elliptic_curves/sha_tate.py +1 -1
- sage/schemes/elliptic_curves/weierstrass_morphism.py +2 -2
- sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +1 -1
- sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +1 -1
- sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +10 -20
- sage/schemes/jacobians/abstract_jacobian.py +1 -1
- sage/schemes/plane_conics/con_field.py +42 -42
- sage/schemes/plane_conics/con_rational_field.py +1 -1
- sage/schemes/riemann_surfaces/riemann_surface.py +8 -8
- sage_wheels/share/cremona/cremona_mini.db +0 -0
- sage_wheels/share/ellcurves/rank0 +30427 -0
- sage_wheels/share/ellcurves/rank1 +31871 -0
- sage_wheels/share/ellcurves/rank10 +6 -0
- sage_wheels/share/ellcurves/rank11 +6 -0
- sage_wheels/share/ellcurves/rank12 +1 -0
- sage_wheels/share/ellcurves/rank14 +1 -0
- sage_wheels/share/ellcurves/rank15 +1 -0
- sage_wheels/share/ellcurves/rank17 +1 -0
- sage_wheels/share/ellcurves/rank19 +1 -0
- sage_wheels/share/ellcurves/rank2 +2388 -0
- sage_wheels/share/ellcurves/rank20 +1 -0
- sage_wheels/share/ellcurves/rank21 +1 -0
- sage_wheels/share/ellcurves/rank22 +1 -0
- sage_wheels/share/ellcurves/rank23 +1 -0
- sage_wheels/share/ellcurves/rank24 +1 -0
- sage_wheels/share/ellcurves/rank28 +1 -0
- sage_wheels/share/ellcurves/rank3 +836 -0
- sage_wheels/share/ellcurves/rank4 +10 -0
- sage_wheels/share/ellcurves/rank5 +5 -0
- sage_wheels/share/ellcurves/rank6 +5 -0
- sage_wheels/share/ellcurves/rank7 +5 -0
- sage_wheels/share/ellcurves/rank8 +6 -0
- sage_wheels/share/ellcurves/rank9 +7 -0
- passagemath_schemes-10.5.44.dist-info/top_level.txt +0 -2
- sage/databases/db_modular_polynomials.py +0 -250
- sage/databases/stein_watkins.py +0 -363
- sage/modular/modsym/p1list.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/p1list.pxd +0 -29
- sage/modular/modsym/p1list.pyx +0 -1372
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/WHEEL +0 -0
sage/modular/hecke/algebra.py
CHANGED
|
@@ -519,10 +519,12 @@ class HeckeAlgebra_base(CachedRepresentation, Parent):
|
|
|
519
519
|
trace_matrix[i, j] = trace_matrix[j, i] = basis[i].matrix().trace_of_product(basis[j].matrix())
|
|
520
520
|
return trace_matrix.det()
|
|
521
521
|
|
|
522
|
-
def gens(self):
|
|
522
|
+
def gens(self) -> Iterator:
|
|
523
523
|
r"""
|
|
524
|
-
Return a generator over all Hecke operator `T_n`
|
|
525
|
-
`n = 1, 2, 3, \ldots`.
|
|
524
|
+
Return a generator over all Hecke operator `T_n`
|
|
525
|
+
for `n = 1, 2, 3, \ldots`.
|
|
526
|
+
|
|
527
|
+
This is infinite.
|
|
526
528
|
|
|
527
529
|
EXAMPLES::
|
|
528
530
|
|
|
@@ -627,9 +629,9 @@ class HeckeAlgebra_full(HeckeAlgebra_base):
|
|
|
627
629
|
return NotImplemented
|
|
628
630
|
return richcmp(self.module(), other.module(), op)
|
|
629
631
|
|
|
630
|
-
def is_anemic(self):
|
|
632
|
+
def is_anemic(self) -> bool:
|
|
631
633
|
"""
|
|
632
|
-
Return False
|
|
634
|
+
Return ``False``, since this the full Hecke algebra.
|
|
633
635
|
|
|
634
636
|
EXAMPLES::
|
|
635
637
|
|
|
@@ -659,7 +659,7 @@ class AmbientHeckeModule(module.HeckeModule_free_module):
|
|
|
659
659
|
AmbientHeckeModule.new_submodule(self, p)
|
|
660
660
|
return self.__is_new[p]
|
|
661
661
|
|
|
662
|
-
def is_old(self, p=None):
|
|
662
|
+
def is_old(self, p=None) -> bool:
|
|
663
663
|
r"""
|
|
664
664
|
Return ``True`` if this module is entirely old.
|
|
665
665
|
|
|
@@ -678,7 +678,7 @@ class AmbientHeckeModule(module.HeckeModule_free_module):
|
|
|
678
678
|
self.old_submodule(p)
|
|
679
679
|
return self.__is_old[p]
|
|
680
680
|
|
|
681
|
-
def is_submodule(self, V):
|
|
681
|
+
def is_submodule(self, V) -> bool:
|
|
682
682
|
"""
|
|
683
683
|
Return ``True`` if and only if ``self`` is a submodule of ``V``.
|
|
684
684
|
|
sage/modular/hecke/element.py
CHANGED
|
@@ -25,8 +25,13 @@ AUTHORS:
|
|
|
25
25
|
# https://www.gnu.org/licenses/
|
|
26
26
|
# ****************************************************************************
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
try:
|
|
29
|
+
from typing import Self # type: ignore (Python >= 3.11)
|
|
30
|
+
except ImportError:
|
|
31
|
+
from typing_extensions import Self # type: ignore (Python 3.10)
|
|
32
|
+
|
|
29
33
|
from sage.structure.element import ModuleElement
|
|
34
|
+
from sage.structure.richcmp import op_NE, richcmp
|
|
30
35
|
|
|
31
36
|
|
|
32
37
|
def is_HeckeModuleElement(x):
|
|
@@ -210,7 +215,7 @@ class HeckeModuleElement(ModuleElement):
|
|
|
210
215
|
"""
|
|
211
216
|
return self.parent()(-self.element())
|
|
212
217
|
|
|
213
|
-
def _pos_(self):
|
|
218
|
+
def _pos_(self) -> Self:
|
|
214
219
|
"""
|
|
215
220
|
EXAMPLES::
|
|
216
221
|
|
sage/modular/hecke/module.py
CHANGED
|
@@ -321,7 +321,7 @@ class HeckeModule_generic(Module):
|
|
|
321
321
|
sage: sage.modular.hecke.module.HeckeModule_generic(QQ, 10).character() is None
|
|
322
322
|
True
|
|
323
323
|
"""
|
|
324
|
-
return
|
|
324
|
+
return
|
|
325
325
|
|
|
326
326
|
def dimension(self):
|
|
327
327
|
r"""
|
|
@@ -357,7 +357,7 @@ class HeckeModule_generic(Module):
|
|
|
357
357
|
"""
|
|
358
358
|
return algebra.HeckeAlgebra(self)
|
|
359
359
|
|
|
360
|
-
def is_zero(self):
|
|
360
|
+
def is_zero(self) -> bool:
|
|
361
361
|
"""
|
|
362
362
|
Return ``True`` if this Hecke module has dimension 0.
|
|
363
363
|
|
|
@@ -374,7 +374,7 @@ class HeckeModule_generic(Module):
|
|
|
374
374
|
"""
|
|
375
375
|
return self.dimension() == 0
|
|
376
376
|
|
|
377
|
-
def is_full_hecke_module(self):
|
|
377
|
+
def is_full_hecke_module(self) -> bool:
|
|
378
378
|
"""
|
|
379
379
|
Return ``True`` if this space is invariant under all Hecke operators.
|
|
380
380
|
|
|
@@ -405,7 +405,7 @@ class HeckeModule_generic(Module):
|
|
|
405
405
|
self._is_full_hecke_module = True
|
|
406
406
|
return True
|
|
407
407
|
|
|
408
|
-
def is_hecke_invariant(self, n):
|
|
408
|
+
def is_hecke_invariant(self, n) -> bool:
|
|
409
409
|
"""
|
|
410
410
|
Return ``True`` if ``self`` is invariant under the Hecke operator `T_n`.
|
|
411
411
|
|
|
@@ -1342,7 +1342,7 @@ class HeckeModule_free_module(HeckeModule_generic):
|
|
|
1342
1342
|
except AttributeError:
|
|
1343
1343
|
return -1
|
|
1344
1344
|
|
|
1345
|
-
def gens(self):
|
|
1345
|
+
def gens(self) -> tuple:
|
|
1346
1346
|
"""
|
|
1347
1347
|
Return a tuple of basis elements of ``self``.
|
|
1348
1348
|
|
|
@@ -1483,7 +1483,7 @@ class HeckeModule_free_module(HeckeModule_generic):
|
|
|
1483
1483
|
"""
|
|
1484
1484
|
return self.hecke_operator(n).charpoly(var)
|
|
1485
1485
|
|
|
1486
|
-
def is_simple(self):
|
|
1486
|
+
def is_simple(self) -> bool:
|
|
1487
1487
|
r"""
|
|
1488
1488
|
Return ``True`` if this space is simple as a module for the
|
|
1489
1489
|
corresponding Hecke algebra.
|
|
@@ -1500,7 +1500,7 @@ class HeckeModule_free_module(HeckeModule_generic):
|
|
|
1500
1500
|
"""
|
|
1501
1501
|
raise NotImplementedError
|
|
1502
1502
|
|
|
1503
|
-
def is_splittable(self):
|
|
1503
|
+
def is_splittable(self) -> bool:
|
|
1504
1504
|
"""
|
|
1505
1505
|
Return ``True`` if and only if only it is possible to split
|
|
1506
1506
|
off a nontrivial generalized eigenspace of ``self`` as the
|
|
@@ -1521,7 +1521,7 @@ class HeckeModule_free_module(HeckeModule_generic):
|
|
|
1521
1521
|
self.decomposition(anemic=False)
|
|
1522
1522
|
return self.__is_splittable
|
|
1523
1523
|
|
|
1524
|
-
def is_submodule(self, other):
|
|
1524
|
+
def is_submodule(self, other) -> bool:
|
|
1525
1525
|
r"""
|
|
1526
1526
|
Return ``True`` if ``self`` is a submodule of ``other``.
|
|
1527
1527
|
|
|
@@ -1540,7 +1540,7 @@ class HeckeModule_free_module(HeckeModule_generic):
|
|
|
1540
1540
|
return (self.ambient_free_module() == other.ambient_free_module() and
|
|
1541
1541
|
self.free_module().is_submodule(other.free_module()))
|
|
1542
1542
|
|
|
1543
|
-
def is_splittable_anemic(self):
|
|
1543
|
+
def is_splittable_anemic(self) -> bool:
|
|
1544
1544
|
"""
|
|
1545
1545
|
Return ``True`` if and only if only it is possible to split off a
|
|
1546
1546
|
nontrivial generalized eigenspace of ``self`` as the kernel of some
|
sage/modular/hecke/submodule.py
CHANGED
|
@@ -388,8 +388,7 @@ class HeckeSubmodule(module.HeckeModule_free_module):
|
|
|
388
388
|
break
|
|
389
389
|
|
|
390
390
|
if V.rank() + self.rank() == A.rank():
|
|
391
|
-
|
|
392
|
-
return C
|
|
391
|
+
return A.submodule(V, check=False)
|
|
393
392
|
|
|
394
393
|
# first attempt to compute the complement failed, we now try
|
|
395
394
|
# the following naive approach: decompose the ambient space,
|
|
@@ -524,8 +523,7 @@ class HeckeSubmodule(module.HeckeModule_free_module):
|
|
|
524
523
|
if self.complement.is_in_cache():
|
|
525
524
|
verbose('This module knows its complement already -- cheating in dual_free_module')
|
|
526
525
|
C = self.complement()
|
|
527
|
-
|
|
528
|
-
return V
|
|
526
|
+
return C.basis_matrix().right_kernel()
|
|
529
527
|
|
|
530
528
|
verbose("computing dual")
|
|
531
529
|
|
|
@@ -677,7 +675,7 @@ class HeckeSubmodule(module.HeckeModule_free_module):
|
|
|
677
675
|
|
|
678
676
|
return M
|
|
679
677
|
|
|
680
|
-
def is_ambient(self):
|
|
678
|
+
def is_ambient(self) -> bool:
|
|
681
679
|
r"""
|
|
682
680
|
Return ``True`` if ``self`` is an ambient space of modular symbols.
|
|
683
681
|
|
|
@@ -693,7 +691,7 @@ class HeckeSubmodule(module.HeckeModule_free_module):
|
|
|
693
691
|
"""
|
|
694
692
|
return self.free_module() == self.ambient_hecke_module().free_module()
|
|
695
693
|
|
|
696
|
-
def is_new(self, p=None):
|
|
694
|
+
def is_new(self, p=None) -> bool:
|
|
697
695
|
"""
|
|
698
696
|
Return ``True`` if this Hecke module is `p`-new. If `p` is None,
|
|
699
697
|
returns ``True`` if it is new.
|
|
@@ -715,7 +713,7 @@ class HeckeSubmodule(module.HeckeModule_free_module):
|
|
|
715
713
|
self.__is_new[p] = self.is_submodule(N)
|
|
716
714
|
return self.__is_new[p]
|
|
717
715
|
|
|
718
|
-
def is_old(self, p=None):
|
|
716
|
+
def is_old(self, p=None) -> bool:
|
|
719
717
|
"""
|
|
720
718
|
Return ``True`` if this Hecke module is `p`-old. If `p` is ``None``,
|
|
721
719
|
returns ``True`` if it is old.
|
|
@@ -740,7 +738,7 @@ class HeckeSubmodule(module.HeckeModule_free_module):
|
|
|
740
738
|
self.__is_old[p] = self.is_submodule(O)
|
|
741
739
|
return self.__is_old[p]
|
|
742
740
|
|
|
743
|
-
def is_submodule(self, V):
|
|
741
|
+
def is_submodule(self, V) -> bool:
|
|
744
742
|
"""
|
|
745
743
|
Return ``True`` if and only if ``self`` is a submodule of V.
|
|
746
744
|
|
|
Binary file
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# sage_setup: distribution = sagemath-schemes
|
|
2
2
|
"""
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Utility routines for hypergeometric motives
|
|
4
|
+
|
|
5
|
+
These are functions that benefit significantly from Cythonization.
|
|
5
6
|
"""
|
|
6
7
|
from cpython cimport array
|
|
7
8
|
from cysignals.signals cimport sig_check
|
|
@@ -1164,7 +1164,7 @@ class HypergeometricData:
|
|
|
1164
1164
|
2-d lattice polytope in 2-d lattice M
|
|
1165
1165
|
sage: P.polyhedron().f_vector()
|
|
1166
1166
|
(1, 4, 4, 1)
|
|
1167
|
-
sage: len(P.points())
|
|
1167
|
+
sage: len(P.points()) # needs palp
|
|
1168
1168
|
7
|
|
1169
1169
|
|
|
1170
1170
|
The Chebyshev example from [RV2019]_::
|
|
@@ -1172,7 +1172,7 @@ class HypergeometricData:
|
|
|
1172
1172
|
sage: H = Hyp(gamma_list=[-30, -1, 6, 10, 15])
|
|
1173
1173
|
sage: P = H.lattice_polytope(); P
|
|
1174
1174
|
3-d lattice polytope in 3-d lattice M
|
|
1175
|
-
sage: len(P.points())
|
|
1175
|
+
sage: len(P.points()) # needs palp
|
|
1176
1176
|
19
|
|
1177
1177
|
sage: P.polyhedron().f_vector()
|
|
1178
1178
|
(1, 5, 9, 6, 1)
|
|
@@ -21,22 +21,31 @@ AUTHORS:
|
|
|
21
21
|
- Jared Weinstein
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
from
|
|
26
|
-
|
|
27
|
-
from
|
|
24
|
+
try:
|
|
25
|
+
from typing import Self # type: ignore (Python >= 3.11)
|
|
26
|
+
except ImportError:
|
|
27
|
+
from typing_extensions import Self # type: ignore (Python 3.10)
|
|
28
|
+
|
|
28
29
|
from sage.misc.abstract_method import abstract_method
|
|
29
30
|
from sage.misc.cachefunc import cached_method
|
|
31
|
+
from sage.misc.flatten import flatten
|
|
30
32
|
from sage.misc.lazy_import import lazy_import
|
|
31
33
|
from sage.misc.verbose import verbose
|
|
32
|
-
from sage.misc.flatten import flatten
|
|
33
34
|
from sage.modular.modform.element import Newform
|
|
35
|
+
from sage.rings.integer_ring import ZZ
|
|
36
|
+
from sage.rings.polynomial.polynomial_ring import polygen
|
|
37
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
38
|
+
from sage.structure.sage_object import SageObject
|
|
34
39
|
from sage.structure.sequence import Sequence
|
|
35
40
|
|
|
36
41
|
lazy_import('sage.rings.qqbar', 'QQbar')
|
|
37
42
|
|
|
43
|
+
from .smoothchar import (
|
|
44
|
+
SmoothCharacterGroupQp,
|
|
45
|
+
SmoothCharacterGroupRamifiedQuadratic,
|
|
46
|
+
SmoothCharacterGroupUnramifiedQuadratic,
|
|
47
|
+
)
|
|
38
48
|
from .type_space import TypeSpace
|
|
39
|
-
from .smoothchar import SmoothCharacterGroupQp, SmoothCharacterGroupUnramifiedQuadratic, SmoothCharacterGroupRamifiedQuadratic
|
|
40
49
|
|
|
41
50
|
|
|
42
51
|
def LocalComponent(f, p, twist_factor=None):
|
|
@@ -321,7 +330,7 @@ class PrimitiveLocalComponent(LocalComponentBase):
|
|
|
321
330
|
Base class for primitive (twist-minimal) local components.
|
|
322
331
|
"""
|
|
323
332
|
|
|
324
|
-
def is_primitive(self):
|
|
333
|
+
def is_primitive(self) -> bool:
|
|
325
334
|
r"""
|
|
326
335
|
Return ``True`` if this local component is primitive (has minimal level
|
|
327
336
|
among its character twists).
|
|
@@ -333,7 +342,7 @@ class PrimitiveLocalComponent(LocalComponentBase):
|
|
|
333
342
|
"""
|
|
334
343
|
return True
|
|
335
344
|
|
|
336
|
-
def minimal_twist(self):
|
|
345
|
+
def minimal_twist(self) -> Self:
|
|
337
346
|
r"""
|
|
338
347
|
Return a twist of this local component which has the minimal possible
|
|
339
348
|
conductor.
|
|
@@ -801,8 +810,7 @@ class PrimitiveSupercuspidal(PrimitiveLocalComponent):
|
|
|
801
810
|
verbose(" chisB FAILED", level=1)
|
|
802
811
|
B_fail = 1
|
|
803
812
|
break
|
|
804
|
-
|
|
805
|
-
verbose(" Trace identity check works for both", level=1)
|
|
813
|
+
verbose(" Trace identity check works for both", level=1)
|
|
806
814
|
|
|
807
815
|
if B_fail and not A_fail:
|
|
808
816
|
chi1, chi2 = chisA
|
|
@@ -965,7 +973,7 @@ class ImprimitiveLocalComponent(LocalComponentBase):
|
|
|
965
973
|
self._min_twist = min_twist
|
|
966
974
|
self._chi = chi
|
|
967
975
|
|
|
968
|
-
def is_primitive(self):
|
|
976
|
+
def is_primitive(self) -> bool:
|
|
969
977
|
r"""
|
|
970
978
|
Return ``True`` if this local component is primitive (has minimal level
|
|
971
979
|
among its character twists).
|
|
@@ -320,19 +320,20 @@ class TypeSpace(SageObject):
|
|
|
320
320
|
# time-critical, and getting it wrong can lead to subtle bugs.
|
|
321
321
|
p = self.prime()
|
|
322
322
|
r = self.conductor()
|
|
323
|
-
d = max(self.character_conductor(), r//2)
|
|
323
|
+
d = max(self.character_conductor(), r // 2)
|
|
324
324
|
n = self.tame_level()
|
|
325
325
|
chi = self.form().character()
|
|
326
326
|
tame_H = [i for i in chi.kernel() if (i % p**r) == 1]
|
|
327
327
|
wild_H = [crt(x, 1, p**r, n) for x in range(p**r) if x % (p**d) == 1]
|
|
328
328
|
return GammaH(n * p**r, tame_H + wild_H)
|
|
329
329
|
|
|
330
|
-
|
|
331
|
-
# Testing minimality:
|
|
332
|
-
|
|
330
|
+
##########################################################################
|
|
331
|
+
# Testing minimality:
|
|
332
|
+
# is this form a twist of a form of strictly smaller level?
|
|
333
|
+
##########################################################################
|
|
333
334
|
|
|
334
335
|
@cached_method
|
|
335
|
-
def is_minimal(self):
|
|
336
|
+
def is_minimal(self) -> bool:
|
|
336
337
|
r"""
|
|
337
338
|
Return ``True`` if there exists a newform `g` of level strictly smaller
|
|
338
339
|
than `N`, and a Dirichlet character `\chi` of `p`-power conductor, such
|
|
@@ -471,13 +472,14 @@ class TypeSpace(SageObject):
|
|
|
471
472
|
g3 = [f * g2[0], g2[1], f**2 * g2[2], f*g2[3]]
|
|
472
473
|
A = self.t_space.ambient()
|
|
473
474
|
mm = A._action_on_modular_symbols(g3).restrict(self.t_space.free_module()).transpose()
|
|
474
|
-
|
|
475
|
-
return m
|
|
475
|
+
return mm / ZZ(f**(self.form().weight() - 2))
|
|
476
476
|
|
|
477
477
|
def _rho_unramified(self, g):
|
|
478
478
|
r"""
|
|
479
479
|
Calculate the action of ``g`` on the type space, in the unramified (even
|
|
480
|
-
level) case.
|
|
480
|
+
level) case.
|
|
481
|
+
|
|
482
|
+
This uses the two standard generators, and a solution of the
|
|
481
483
|
word problem in `\SL_2(\ZZ / p^u \ZZ)`.
|
|
482
484
|
|
|
483
485
|
INPUT:
|
sage/modular/modform/ambient.py
CHANGED
|
@@ -178,8 +178,9 @@ class ModularFormsAmbient(space.ModularFormsSpace,
|
|
|
178
178
|
1 + q^3 + q^4 + 2*q^5 + O(q^6)]
|
|
179
179
|
"""
|
|
180
180
|
from . import constructor
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
return constructor.ModularForms(self.group(), self.weight(),
|
|
182
|
+
base_ring, prec=self.prec(),
|
|
183
|
+
eis_only=self._eis_only)
|
|
183
184
|
|
|
184
185
|
@cached_method
|
|
185
186
|
def dimension(self):
|
|
@@ -277,7 +278,7 @@ class ModularFormsAmbient(space.ModularFormsSpace,
|
|
|
277
278
|
"""
|
|
278
279
|
return self
|
|
279
280
|
|
|
280
|
-
def is_ambient(self):
|
|
281
|
+
def is_ambient(self) -> bool:
|
|
281
282
|
"""
|
|
282
283
|
Return ``True`` if this an ambient space of modular forms.
|
|
283
284
|
|
|
@@ -99,7 +99,7 @@ class CuspidalSubmodule(ModularFormsSubmodule):
|
|
|
99
99
|
"""
|
|
100
100
|
raise NotImplementedError('q-expansion basis not implemented for "%s"' % self)
|
|
101
101
|
|
|
102
|
-
def _repr_(self):
|
|
102
|
+
def _repr_(self) -> str:
|
|
103
103
|
"""
|
|
104
104
|
Return the string representation of ``self``.
|
|
105
105
|
|
|
@@ -110,7 +110,7 @@ class CuspidalSubmodule(ModularFormsSubmodule):
|
|
|
110
110
|
"""
|
|
111
111
|
return "Cuspidal subspace of dimension %s of %s" % (self.dimension(), self.ambient_module())
|
|
112
112
|
|
|
113
|
-
def is_cuspidal(self):
|
|
113
|
+
def is_cuspidal(self) -> bool:
|
|
114
114
|
"""
|
|
115
115
|
Return ``True`` since spaces of cusp forms are cuspidal.
|
|
116
116
|
|