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
|
@@ -1737,7 +1737,7 @@ class DynamicalSystem_projective(SchemeMorphism_polynomial_projective_space,
|
|
|
1737
1737
|
res = (f.lc() ** (d - g.degree()) * g.lc() ** (d - f.degree())
|
|
1738
1738
|
* f.__pari__().polresultant(g, x))
|
|
1739
1739
|
return self.domain().base_ring()(res)
|
|
1740
|
-
except (TypeError, PariError):
|
|
1740
|
+
except (TypeError, PariError): # type: ignore
|
|
1741
1741
|
pass
|
|
1742
1742
|
#Otherwise, use Macaulay
|
|
1743
1743
|
R = F[0].parent()
|
|
@@ -2121,9 +2121,9 @@ class DynamicalSystem_projective(SchemeMorphism_polynomial_projective_space,
|
|
|
2121
2121
|
h = max([R(emb(c).abs()) for c in poly.coefficients()])
|
|
2122
2122
|
else: #non-archimedean
|
|
2123
2123
|
if BR == QQ:
|
|
2124
|
-
h = max(
|
|
2124
|
+
h = max(R(v)**(-R(c.valuation(v))) for c in poly.coefficients())
|
|
2125
2125
|
else:
|
|
2126
|
-
h = max(
|
|
2126
|
+
h = max(R(c.abs_non_arch(v, prec=prec)) for c in poly.coefficients())
|
|
2127
2127
|
maxh = max(h, maxh)
|
|
2128
2128
|
if maxh == 0:
|
|
2129
2129
|
maxh = 1 #avoid division by 0
|
|
@@ -5001,7 +5001,7 @@ class DynamicalSystem_projective(SchemeMorphism_polynomial_projective_space,
|
|
|
5001
5001
|
r"""
|
|
5002
5002
|
Compute the ``n`` multiplier spectra of this dynamical system.
|
|
5003
5003
|
|
|
5004
|
-
This is the set of multipliers of all
|
|
5004
|
+
This is the set of multipliers of all periodic points of
|
|
5005
5005
|
period ``n`` included with the appropriate multiplicity.
|
|
5006
5006
|
User can also specify to compute the formal ``n`` multiplier spectra
|
|
5007
5007
|
instead which includes the multipliers of all formal periodic points
|
|
@@ -5417,7 +5417,7 @@ class DynamicalSystem_projective(SchemeMorphism_polynomial_projective_space,
|
|
|
5417
5417
|
|
|
5418
5418
|
\prod_{P \text{ period n}} ( w - c(P,t)),
|
|
5419
5419
|
|
|
5420
|
-
where `c(P,t)` is the
|
|
5420
|
+
where `c(P,t)` is the characteristic polynomial (variable `t`) of the
|
|
5421
5421
|
multiplier at `P`. Note that in dimension 1, only the coefficients
|
|
5422
5422
|
of the constant term is returned.
|
|
5423
5423
|
|
|
@@ -6847,14 +6847,14 @@ class DynamicalSystem_projective(SchemeMorphism_polynomial_projective_space,
|
|
|
6847
6847
|
def Lattes_to_curve(self, return_conjugation=False, check_lattes=False):
|
|
6848
6848
|
r"""
|
|
6849
6849
|
Finds a Short Weierstrass Model Elliptic curve of self
|
|
6850
|
-
self assumed to be Lattes map and not in
|
|
6850
|
+
self assumed to be Lattes map and not in characteristic 2 or 3
|
|
6851
6851
|
|
|
6852
6852
|
INPUT:
|
|
6853
6853
|
|
|
6854
6854
|
``return_conjugation`` -- (default: ``False``) if ``True``, then
|
|
6855
6855
|
return the conjugation that moves self to a map that comes from a
|
|
6856
6856
|
Short Weierstrass Model Elliptic curve
|
|
6857
|
-
``check_lattes
|
|
6857
|
+
``check_lattes`` -- (default: ``False``) if ``True``, then will ValueError if not Lattes
|
|
6858
6858
|
|
|
6859
6859
|
OUTPUT: a Short Weierstrass Model Elliptic curve which is isogenous to
|
|
6860
6860
|
the Elliptic curve of 'self',
|
|
Binary file
|
|
@@ -1141,20 +1141,20 @@ class WehlerK3Surface_ring(AlgebraicScheme_subscheme_product_projective):
|
|
|
1141
1141
|
raise TypeError("%s fails to convert into the map's domain %s, but a `pushforward` method is not properly implemented" % (P, self))
|
|
1142
1142
|
pt = list(P[0]) + [0, 0, 0]
|
|
1143
1143
|
if P[1][0] != 0:
|
|
1144
|
-
|
|
1144
|
+
a, b, c = [P[1][0]*self.Gpoly(1, 0)(*pt),
|
|
1145
1145
|
-1*P[1][0]*self.Hpoly(1, 0, 1)(*pt) - P[1][1]*self.Gpoly(1, 0)(*pt),
|
|
1146
1146
|
-P[1][0]*self.Hpoly(1, 0, 2)(*pt) - P[1][2]*self.Gpoly(1, 0)(*pt)]
|
|
1147
1147
|
elif P[1][1] != 0:
|
|
1148
|
-
|
|
1148
|
+
a, b, c = [-1*P[1][1]*self.Hpoly(1, 0, 1)(*pt)-P[1][0]*self.Gpoly(1, 1)(*pt),
|
|
1149
1149
|
P[1][1]*self.Gpoly(1, 1)(*pt),
|
|
1150
1150
|
-P[1][1]*self.Hpoly(1, 1, 2)(*pt)-P[1][2]*self.Gpoly(1, 1)(*pt)]
|
|
1151
1151
|
else:
|
|
1152
|
-
|
|
1152
|
+
a, b, c = [-1*P[1][2]*self.Hpoly(1, 0, 2)(*pt) - P[1][0]*self.Gpoly(1, 2)(*pt),
|
|
1153
1153
|
-P[1][2]*self.Hpoly(1, 1, 2)(*pt) - P[1][1]*self.Gpoly(1, 2)(*pt),
|
|
1154
1154
|
P[1][2]*self.Gpoly(1, 2)(*pt)]
|
|
1155
1155
|
Point = [P[0][0], P[0][1], P[0][2], a, b, c]
|
|
1156
1156
|
|
|
1157
|
-
if [a,b,c]
|
|
1157
|
+
if any([a, b, c]):
|
|
1158
1158
|
if normalize:
|
|
1159
1159
|
Point = self.point(Point,False)
|
|
1160
1160
|
Point.normalize_coordinates()
|
|
@@ -1238,7 +1238,7 @@ class WehlerK3Surface_ring(AlgebraicScheme_subscheme_product_projective):
|
|
|
1238
1238
|
if len(V) == 2:
|
|
1239
1239
|
for D in V:
|
|
1240
1240
|
if D[s] != 0:
|
|
1241
|
-
|
|
1241
|
+
a, b, c = [D[z0], D[z1], D[z2]]
|
|
1242
1242
|
else:
|
|
1243
1243
|
newT = [phi(tee) for tee in T]
|
|
1244
1244
|
for i in range(2):
|
|
@@ -1279,9 +1279,9 @@ class WehlerK3Surface_ring(AlgebraicScheme_subscheme_product_projective):
|
|
|
1279
1279
|
raise ValueError("cannot distinguish points in the degenerate fiber")
|
|
1280
1280
|
|
|
1281
1281
|
if len(V) == 1:
|
|
1282
|
-
|
|
1282
|
+
a, b, c = [V[0][z0], V[0][z1], V[0][z2]]
|
|
1283
1283
|
|
|
1284
|
-
if len(V) == 0 or [a,b,c]
|
|
1284
|
+
if len(V) == 0 or not any([a, b, c]):
|
|
1285
1285
|
SS = PolynomialRing(BR, 3, 'z0, z1, z2', order='lex')
|
|
1286
1286
|
z0,z1,z2 = SS.gens()
|
|
1287
1287
|
phi = RR.hom([1, 0, z0, z1, z2], SS)
|
|
@@ -1291,7 +1291,7 @@ class WehlerK3Surface_ring(AlgebraicScheme_subscheme_product_projective):
|
|
|
1291
1291
|
V = phi(I).variety()
|
|
1292
1292
|
if len(V) > 1:
|
|
1293
1293
|
raise ValueError( "cannot distinguish points in the degenerate fiber")
|
|
1294
|
-
|
|
1294
|
+
a, b, c = [V[0][z0], V[0][z1], V[0][z2]]
|
|
1295
1295
|
|
|
1296
1296
|
Point = [P[0][0], P[0][1], P[0][2], a, b, c]
|
|
1297
1297
|
if normalize:
|
|
@@ -1385,19 +1385,19 @@ class WehlerK3Surface_ring(AlgebraicScheme_subscheme_product_projective):
|
|
|
1385
1385
|
raise TypeError("%s fails to convert into the map's domain %s, but a `pushforward` method is not properly implemented" % (P, self))
|
|
1386
1386
|
pt = [0, 0, 0] + list(P[1])
|
|
1387
1387
|
if P[0][0] != 0:
|
|
1388
|
-
|
|
1388
|
+
a, b, c = [P[0][0]*self.Gpoly(0, 0)(*pt),
|
|
1389
1389
|
-1*P[0][0]*self.Hpoly(0, 0, 1)(*pt) - P[0][1]*self.Gpoly(0, 0)(*pt),
|
|
1390
1390
|
-P[0][0]*self.Hpoly(0, 0, 2)(*pt) - P[0][2]*self.Gpoly(0, 0)(*pt)]
|
|
1391
1391
|
elif P[0][1] != 0:
|
|
1392
|
-
|
|
1392
|
+
a, b, c = [-1*P[0][1]*self.Hpoly(0, 0, 1)(*pt) - P[0][0]*self.Gpoly(0, 1)(*pt),
|
|
1393
1393
|
P[0][1]*self.Gpoly(0, 1)(*pt),
|
|
1394
1394
|
-P[0][1]*self.Hpoly(0, 1, 2)(*pt) - P[0][2]*self.Gpoly(0, 1)(*pt)]
|
|
1395
1395
|
else:
|
|
1396
|
-
|
|
1396
|
+
a, b, c = [-1*P[0][2]*self.Hpoly(0, 0, 2)(*pt) - P[0][0]*self.Gpoly(0, 2)(*pt),
|
|
1397
1397
|
- P[0][2]*self.Hpoly(0, 1, 2)(*pt) - P[0][1]*self.Gpoly(0, 2)(*pt),
|
|
1398
1398
|
P[0][2]*self.Gpoly(0, 2)(*pt)]
|
|
1399
1399
|
Point = [a, b, c, P[1][0], P[1][1], P[1][2]]
|
|
1400
|
-
if [a, b, c]
|
|
1400
|
+
if any([a, b, c]):
|
|
1401
1401
|
if normalize:
|
|
1402
1402
|
Point = self.point(Point, False)
|
|
1403
1403
|
Point.normalize_coordinates()
|
|
@@ -1521,10 +1521,10 @@ class WehlerK3Surface_ring(AlgebraicScheme_subscheme_product_projective):
|
|
|
1521
1521
|
if len(V) > 1:
|
|
1522
1522
|
raise ValueError("cannot distinguish points in the degenerate fiber")
|
|
1523
1523
|
if len(V) == 1:
|
|
1524
|
-
|
|
1525
|
-
if len(V) == 0 or [a,b,c]
|
|
1524
|
+
a, b, c = [V[0][z0], V[0][z1], V[0][z2]]
|
|
1525
|
+
if len(V) == 0 or not any([a, b, c]):
|
|
1526
1526
|
SS = PolynomialRing(BR, 3, 'z0, z1, z2', order='lex')
|
|
1527
|
-
z0,z1,z2 = SS.gens()
|
|
1527
|
+
z0, z1, z2 = SS.gens()
|
|
1528
1528
|
phi = RR.hom([1, 0, z0, z1, z2], SS)
|
|
1529
1529
|
J = phi(I)
|
|
1530
1530
|
if J.dimension() > 0:
|
|
@@ -1532,7 +1532,7 @@ class WehlerK3Surface_ring(AlgebraicScheme_subscheme_product_projective):
|
|
|
1532
1532
|
V = phi(I).variety()
|
|
1533
1533
|
if len(V) > 1:
|
|
1534
1534
|
raise ValueError("cannot distinguish points in the degenerate fiber")
|
|
1535
|
-
|
|
1535
|
+
a, b, c = [V[0][z0], V[0][z1], V[0][z2]]
|
|
1536
1536
|
|
|
1537
1537
|
Point = [a, b, c, P[1][0], P[1][1], P[1][2]]
|
|
1538
1538
|
if normalize:
|
|
@@ -2067,8 +2067,8 @@ class WehlerK3Surface_ring(AlgebraicScheme_subscheme_product_projective):
|
|
|
2067
2067
|
Points = []
|
|
2068
2068
|
|
|
2069
2069
|
if (self.Gpoly(component,0)(P0) != 0):
|
|
2070
|
-
|
|
2071
|
-
|
|
2070
|
+
# We are using the quadratic formula, we need this check
|
|
2071
|
+
# to ensure that the points will be rational
|
|
2072
2072
|
T0 = (self.Hpoly(component, 0, 1)(P0)**2 - 4*self.Gpoly(component, 0)(P0)*self.Gpoly(component, 1)(P0))
|
|
2073
2073
|
T1 = (self.Hpoly(component, 0, 2)(P0)**2 - 4*self.Gpoly(component, 0)(P0)*self.Gpoly(component, 2)(P0))
|
|
2074
2074
|
if (T0.is_square() and T1.is_square()):
|
|
Binary file
|
sage/modular/abvar/abvar.py
CHANGED
|
@@ -1610,7 +1610,7 @@ class ModularAbelianVariety_abstract(Parent):
|
|
|
1610
1610
|
|
|
1611
1611
|
return H(Morphism(H, mat))
|
|
1612
1612
|
|
|
1613
|
-
def is_subvariety_of_ambient_jacobian(self):
|
|
1613
|
+
def is_subvariety_of_ambient_jacobian(self) -> bool:
|
|
1614
1614
|
"""
|
|
1615
1615
|
Return ``True`` if ``self`` is (presented as) a subvariety of the ambient
|
|
1616
1616
|
product Jacobian.
|
|
@@ -2769,7 +2769,7 @@ class ModularAbelianVariety_abstract(Parent):
|
|
|
2769
2769
|
sage: t.order()
|
|
2770
2770
|
4
|
|
2771
2771
|
sage: t.gens()
|
|
2772
|
-
[
|
|
2772
|
+
([(1/2, 0, 0, -1/2, 0, 0)], [(0, 0, 1/2, 0, 1/2, -1/2)])
|
|
2773
2773
|
"""
|
|
2774
2774
|
try:
|
|
2775
2775
|
return self.__rational_torsion_subgroup
|
|
@@ -2788,7 +2788,7 @@ class ModularAbelianVariety_abstract(Parent):
|
|
|
2788
2788
|
sage: J = J0(54)
|
|
2789
2789
|
sage: C = J.cuspidal_subgroup()
|
|
2790
2790
|
sage: C.gens()
|
|
2791
|
-
[
|
|
2791
|
+
([(1/3, 0, 0, 0, 0, 1/3, 0, 2/3)], [(0, 1/3, 0, 0, 0, 2/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 1/9, 1/9, 1/9, 2/9)], [(0, 0, 0, 1/3, 0, 1/3, 0, 0)], [(0, 0, 0, 0, 1/3, 1/3, 0, 1/3)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)])
|
|
2792
2792
|
sage: C.invariants()
|
|
2793
2793
|
[3, 3, 3, 3, 3, 9]
|
|
2794
2794
|
sage: J1(13).cuspidal_subgroup()
|
|
@@ -2900,7 +2900,7 @@ class ModularAbelianVariety_abstract(Parent):
|
|
|
2900
2900
|
sage: CQ = J.rational_cusp_subgroup(); CQ
|
|
2901
2901
|
Finite subgroup with invariants [3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
|
|
2902
2902
|
sage: CQ.gens()
|
|
2903
|
-
[
|
|
2903
|
+
([(1/3, 0, 0, 1/3, 2/3, 1/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 7/9, 7/9, 1/9, 8/9)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)])
|
|
2904
2904
|
sage: factor(CQ.order())
|
|
2905
2905
|
3^4
|
|
2906
2906
|
sage: CQ.invariants()
|
|
@@ -2961,7 +2961,7 @@ class ModularAbelianVariety_abstract(Parent):
|
|
|
2961
2961
|
sage: CQ = J.rational_cuspidal_subgroup(); CQ
|
|
2962
2962
|
Finite subgroup with invariants [3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
|
|
2963
2963
|
sage: CQ.gens()
|
|
2964
|
-
[
|
|
2964
|
+
([(1/3, 0, 0, 1/3, 2/3, 1/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 7/9, 7/9, 1/9, 8/9)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)])
|
|
2965
2965
|
sage: factor(CQ.order())
|
|
2966
2966
|
3^4
|
|
2967
2967
|
sage: CQ.invariants()
|
|
@@ -3109,7 +3109,7 @@ class ModularAbelianVariety_abstract(Parent):
|
|
|
3109
3109
|
sage: G.order()
|
|
3110
3110
|
625
|
|
3111
3111
|
sage: G.gens()
|
|
3112
|
-
[
|
|
3112
|
+
([(1/5, 0, 0, 0)], [(0, 1/5, 0, 0)], [(0, 0, 1/5, 0)], [(0, 0, 0, 1/5)])
|
|
3113
3113
|
sage: A = J0(23)
|
|
3114
3114
|
sage: A.torsion_subgroup(2).order()
|
|
3115
3115
|
16
|
|
@@ -3232,10 +3232,11 @@ class ModularAbelianVariety_abstract(Parent):
|
|
|
3232
3232
|
else:
|
|
3233
3233
|
raise ValueError("self must be simple")
|
|
3234
3234
|
|
|
3235
|
-
def is_simple(self, none_if_not_known=False):
|
|
3235
|
+
def is_simple(self, none_if_not_known=False) -> bool:
|
|
3236
3236
|
"""
|
|
3237
|
-
Return whether or not this modular abelian variety is simple
|
|
3238
|
-
|
|
3237
|
+
Return whether or not this modular abelian variety is simple.
|
|
3238
|
+
|
|
3239
|
+
This means that it has no proper nonzero abelian subvarieties.
|
|
3239
3240
|
|
|
3240
3241
|
INPUT:
|
|
3241
3242
|
|
|
@@ -4243,7 +4244,7 @@ class ModularAbelianVariety_modsym_abstract(ModularAbelianVariety_abstract):
|
|
|
4243
4244
|
"""
|
|
4244
4245
|
return self.modular_symbols().group()
|
|
4245
4246
|
|
|
4246
|
-
def is_subvariety(self, other):
|
|
4247
|
+
def is_subvariety(self, other) -> bool:
|
|
4247
4248
|
"""
|
|
4248
4249
|
Return ``True`` if ``self`` is a subvariety of ``other``.
|
|
4249
4250
|
|
|
@@ -4296,7 +4297,7 @@ class ModularAbelianVariety_modsym_abstract(ModularAbelianVariety_abstract):
|
|
|
4296
4297
|
return ModularAbelianVariety_abstract.is_subvariety(self, other)
|
|
4297
4298
|
return self.modular_symbols().is_submodule(other.modular_symbols())
|
|
4298
4299
|
|
|
4299
|
-
def is_ambient(self):
|
|
4300
|
+
def is_ambient(self) -> bool:
|
|
4300
4301
|
"""
|
|
4301
4302
|
Return ``True`` if this abelian variety attached to a modular symbols
|
|
4302
4303
|
space is attached to the cuspidal subspace of the ambient
|
|
@@ -6,11 +6,11 @@ AUTHORS:
|
|
|
6
6
|
|
|
7
7
|
- William Stein (2007-03)
|
|
8
8
|
"""
|
|
9
|
-
|
|
9
|
+
# #########################################################################
|
|
10
10
|
# Copyright (C) 2007 William Stein <wstein@gmail.com> #
|
|
11
11
|
# Distributed under the terms of the GNU General Public License (GPL) #
|
|
12
|
-
#
|
|
13
|
-
|
|
12
|
+
# https://www.gnu.org/licenses/ #
|
|
13
|
+
# #########################################################################
|
|
14
14
|
|
|
15
15
|
import weakref
|
|
16
16
|
|
|
@@ -12,7 +12,7 @@ EXAMPLES: We compute the cuspidal subgroup of `J_1(13)`::
|
|
|
12
12
|
sage: C = A.cuspidal_subgroup(); C
|
|
13
13
|
Finite subgroup with invariants [19, 19] over QQ of Abelian variety J1(13) of dimension 2
|
|
14
14
|
sage: C.gens()
|
|
15
|
-
[
|
|
15
|
+
([(1/19, 0, 9/19, 9/19)], [(0, 1/19, 0, 9/19)])
|
|
16
16
|
sage: C.order()
|
|
17
17
|
361
|
|
18
18
|
sage: C.invariants()
|
|
@@ -24,7 +24,7 @@ We compute the cuspidal subgroup of `J_0(54)`::
|
|
|
24
24
|
sage: C = A.cuspidal_subgroup(); C
|
|
25
25
|
Finite subgroup with invariants [3, 3, 3, 3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
|
|
26
26
|
sage: C.gens()
|
|
27
|
-
[
|
|
27
|
+
([(1/3, 0, 0, 0, 0, 1/3, 0, 2/3)], [(0, 1/3, 0, 0, 0, 2/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 1/9, 1/9, 1/9, 2/9)], [(0, 0, 0, 1/3, 0, 1/3, 0, 0)], [(0, 0, 0, 0, 1/3, 1/3, 0, 1/3)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)])
|
|
28
28
|
sage: C.order()
|
|
29
29
|
2187
|
|
30
30
|
sage: C.invariants()
|
|
@@ -38,7 +38,7 @@ rational cusps.
|
|
|
38
38
|
sage: C = J0(54).rational_cusp_subgroup(); C
|
|
39
39
|
Finite subgroup with invariants [3, 3, 9] over QQ of Abelian variety J0(54) of dimension 4
|
|
40
40
|
sage: C.gens()
|
|
41
|
-
[
|
|
41
|
+
([(1/3, 0, 0, 1/3, 2/3, 1/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 7/9, 7/9, 1/9, 8/9)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)])
|
|
42
42
|
sage: C.order()
|
|
43
43
|
81
|
|
44
44
|
sage: C.invariants()
|
|
@@ -181,8 +181,7 @@ class CuspidalSubgroup_generic(FiniteSubgroup):
|
|
|
181
181
|
B = Cusp.free_module().basis_matrix().stack(Eis.free_module().basis_matrix())
|
|
182
182
|
X = B.solve_left(cusp_matrix)
|
|
183
183
|
X = X.matrix_from_columns(range(Cusp.dimension()))
|
|
184
|
-
|
|
185
|
-
return lattice
|
|
184
|
+
return X.row_module(ZZ) + A.lattice()
|
|
186
185
|
|
|
187
186
|
|
|
188
187
|
class CuspidalSubgroup(CuspidalSubgroup_generic):
|
|
@@ -338,7 +337,7 @@ class RationalCuspidalSubgroup(CuspidalSubgroup_generic):
|
|
|
338
337
|
return lattice
|
|
339
338
|
|
|
340
339
|
|
|
341
|
-
def is_rational_cusp_gamma0(c, N, data):
|
|
340
|
+
def is_rational_cusp_gamma0(c, N, data) -> bool:
|
|
342
341
|
"""
|
|
343
342
|
Return ``True`` if the rational number c is a rational cusp of level N.
|
|
344
343
|
|
|
@@ -28,7 +28,7 @@ EXAMPLES::
|
|
|
28
28
|
sage: C.order()
|
|
29
29
|
100
|
|
30
30
|
sage: C.gens()
|
|
31
|
-
[
|
|
31
|
+
([(1/10, 0, 1/10, 1/10, 1/10, 3/10)], [(0, 1/5, 1/10, 0, 1/10, 9/10)], [(0, 0, 1/2, 0, 1/2, 1/2)])
|
|
32
32
|
sage: C.0 + C.1
|
|
33
33
|
[(1/10, 1/5, 1/5, 1/10, 1/5, 6/5)]
|
|
34
34
|
sage: 10*(C.0 + C.1)
|
|
@@ -36,7 +36,7 @@ EXAMPLES::
|
|
|
36
36
|
sage: G = C.subgroup([C.0 + C.1]); G
|
|
37
37
|
Finite subgroup with invariants [10] over QQbar of Abelian variety J0(33) of dimension 3
|
|
38
38
|
sage: G.gens()
|
|
39
|
-
[
|
|
39
|
+
([(1/10, 1/5, 1/5, 1/10, 1/5, 1/5)],)
|
|
40
40
|
sage: G.order()
|
|
41
41
|
10
|
|
42
42
|
sage: G <= C
|
|
@@ -264,10 +264,10 @@ class FiniteSubgroup(Module):
|
|
|
264
264
|
# order gets reversed in passing to lattices.
|
|
265
265
|
return lx._echelon_matrix_richcmp(rx, op)
|
|
266
266
|
|
|
267
|
-
def is_subgroup(self, other):
|
|
267
|
+
def is_subgroup(self, other) -> bool:
|
|
268
268
|
"""
|
|
269
|
-
Return ``True`` exactly if ``self`` is a subgroup of ``other``,
|
|
270
|
-
defined as subgroups of the same ambient abelian variety.
|
|
269
|
+
Return ``True`` exactly if ``self`` is a subgroup of ``other``,
|
|
270
|
+
and both are defined as subgroups of the same ambient abelian variety.
|
|
271
271
|
|
|
272
272
|
EXAMPLES::
|
|
273
273
|
|
|
@@ -299,7 +299,7 @@ class FiniteSubgroup(Module):
|
|
|
299
299
|
|
|
300
300
|
sage: C = J0(22).cuspidal_subgroup()
|
|
301
301
|
sage: C.gens()
|
|
302
|
-
[
|
|
302
|
+
([(1/5, 1/5, 4/5, 0)], [(0, 0, 0, 1/5)])
|
|
303
303
|
sage: A = C.subgroup([C.0]); B = C.subgroup([C.1])
|
|
304
304
|
sage: A + B == C
|
|
305
305
|
True
|
|
@@ -580,22 +580,24 @@ class FiniteSubgroup(Module):
|
|
|
580
580
|
self.__order = o
|
|
581
581
|
return o
|
|
582
582
|
|
|
583
|
-
def gens(self):
|
|
583
|
+
def gens(self) -> tuple:
|
|
584
584
|
"""
|
|
585
|
-
Return generators for this finite subgroup.
|
|
585
|
+
Return a tuple of the generators for this finite subgroup.
|
|
586
586
|
|
|
587
|
-
EXAMPLES:
|
|
587
|
+
EXAMPLES:
|
|
588
|
+
|
|
589
|
+
We list generators for several cuspidal subgroups::
|
|
588
590
|
|
|
589
591
|
sage: J0(11).cuspidal_subgroup().gens()
|
|
590
|
-
[
|
|
592
|
+
([(0, 1/5)],)
|
|
591
593
|
sage: J0(37).cuspidal_subgroup().gens()
|
|
592
|
-
[
|
|
594
|
+
([(0, 0, 0, 1/3)],)
|
|
593
595
|
sage: J0(43).cuspidal_subgroup().gens()
|
|
594
|
-
[
|
|
596
|
+
([(0, 1/7, 0, 6/7, 0, 5/7)],)
|
|
595
597
|
sage: J1(13).cuspidal_subgroup().gens()
|
|
596
|
-
[
|
|
598
|
+
([(1/19, 0, 9/19, 9/19)], [(0, 1/19, 0, 9/19)])
|
|
597
599
|
sage: J0(22).torsion_subgroup(6).gens()
|
|
598
|
-
[
|
|
600
|
+
([(1/6, 0, 0, 0)], [(0, 1/6, 0, 0)], [(0, 0, 1/6, 0)], [(0, 0, 0, 1/6)])
|
|
599
601
|
"""
|
|
600
602
|
try:
|
|
601
603
|
return self.__gens
|
|
@@ -603,7 +605,7 @@ class FiniteSubgroup(Module):
|
|
|
603
605
|
pass
|
|
604
606
|
|
|
605
607
|
B = [self.element_class(self, v) for v in self.lattice().basis() if v.denominator() > 1]
|
|
606
|
-
self.__gens =
|
|
608
|
+
self.__gens = tuple(B)
|
|
607
609
|
return self.__gens
|
|
608
610
|
|
|
609
611
|
def gen(self, n):
|
|
@@ -615,7 +617,7 @@ class FiniteSubgroup(Module):
|
|
|
615
617
|
sage: J = J0(23)
|
|
616
618
|
sage: C = J.torsion_subgroup(3)
|
|
617
619
|
sage: C.gens()
|
|
618
|
-
[
|
|
620
|
+
([(1/3, 0, 0, 0)], [(0, 1/3, 0, 0)], [(0, 0, 1/3, 0)], [(0, 0, 0, 1/3)])
|
|
619
621
|
sage: C.gen(0)
|
|
620
622
|
[(1/3, 0, 0, 0)]
|
|
621
623
|
sage: C.gen(3)
|
|
@@ -623,7 +625,7 @@ class FiniteSubgroup(Module):
|
|
|
623
625
|
sage: C.gen(4)
|
|
624
626
|
Traceback (most recent call last):
|
|
625
627
|
...
|
|
626
|
-
IndexError:
|
|
628
|
+
IndexError: tuple index out of range
|
|
627
629
|
|
|
628
630
|
Negative indices wrap around::
|
|
629
631
|
|
|
@@ -707,7 +709,7 @@ class FiniteSubgroup(Module):
|
|
|
707
709
|
sage: G2 = J0(27).cuspidal_subgroup(); G2
|
|
708
710
|
Finite subgroup with invariants [3, 3] over QQ of Abelian variety J0(27) of dimension 1
|
|
709
711
|
sage: G2.gens()
|
|
710
|
-
[
|
|
712
|
+
([(1/3, 0)], [(0, 1/3)])
|
|
711
713
|
|
|
712
714
|
Now we check whether various elements are in `G_1` and `G_2`::
|
|
713
715
|
|
sage/modular/abvar/homology.py
CHANGED
|
@@ -404,8 +404,7 @@ class IntegralHomology(Homology_abvar):
|
|
|
404
404
|
"""
|
|
405
405
|
n = Integer(n)
|
|
406
406
|
M = self.abelian_variety().modular_symbols(sign=1)
|
|
407
|
-
|
|
408
|
-
return f
|
|
407
|
+
return (M.hecke_polynomial(n, var)**2).change_ring(ZZ)
|
|
409
408
|
|
|
410
409
|
|
|
411
410
|
class RationalHomology(Homology_abvar):
|
sage/modular/abvar/homspace.py
CHANGED
sage/modular/abvar/lseries.py
CHANGED
|
@@ -17,11 +17,11 @@ TESTS::
|
|
|
17
17
|
True
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
# #########################################################################
|
|
21
21
|
# Copyright (C) 2007 William Stein <wstein@gmail.com> #
|
|
22
22
|
# Distributed under the terms of the GNU General Public License (GPL) #
|
|
23
|
-
#
|
|
24
|
-
|
|
23
|
+
# https://www.gnu.org/licenses/ #
|
|
24
|
+
# #########################################################################
|
|
25
25
|
|
|
26
26
|
from sage.structure.sage_object import SageObject
|
|
27
27
|
from sage.rings.integer_ring import ZZ
|
sage/modular/abvar/morphism.py
CHANGED
|
@@ -118,7 +118,7 @@ class Morphism_abstract(sage.modules.matrix_morphism.MatrixMorphism_abstract):
|
|
|
118
118
|
iM, denom = iM._clear_denom()
|
|
119
119
|
return Morphism(self.parent().reversed(), iM)
|
|
120
120
|
|
|
121
|
-
def is_isogeny(self):
|
|
121
|
+
def is_isogeny(self) -> bool:
|
|
122
122
|
"""
|
|
123
123
|
Return ``True`` if this morphism is an isogeny of abelian varieties.
|
|
124
124
|
|
|
@@ -16,7 +16,7 @@ AUTHORS:
|
|
|
16
16
|
# Distributed under the terms of the GNU General Public License (GPL)
|
|
17
17
|
# as published by the Free Software Foundation; either version 2 of
|
|
18
18
|
# the License, or (at your option) any later version.
|
|
19
|
-
#
|
|
19
|
+
# https://www.gnu.org/licenses/
|
|
20
20
|
# ****************************************************************************
|
|
21
21
|
|
|
22
22
|
from sage.structure.element import ModuleElement
|
|
Binary file
|
|
@@ -1117,7 +1117,7 @@ class ArithmeticSubgroup_Permutation_class(ArithmeticSubgroup):
|
|
|
1117
1117
|
# Group stuff
|
|
1118
1118
|
#
|
|
1119
1119
|
|
|
1120
|
-
def is_normal(self):
|
|
1120
|
+
def is_normal(self) -> bool:
|
|
1121
1121
|
r"""
|
|
1122
1122
|
Test whether the group is normal.
|
|
1123
1123
|
|
|
@@ -1135,9 +1135,9 @@ class ArithmeticSubgroup_Permutation_class(ArithmeticSubgroup):
|
|
|
1135
1135
|
G = self.relabel(inplace=False)
|
|
1136
1136
|
s2 = G._S2
|
|
1137
1137
|
s3 = G._S3
|
|
1138
|
-
ss2 = [None]*N
|
|
1139
|
-
ss3 = [None]*N
|
|
1140
|
-
for j in [s2[0],s3[0]]:
|
|
1138
|
+
ss2 = [None] * N
|
|
1139
|
+
ss3 = [None] * N
|
|
1140
|
+
for j in [s2[0], s3[0]]:
|
|
1141
1141
|
m = G._canonical_rooted_labels(j)
|
|
1142
1142
|
for i in range(N):
|
|
1143
1143
|
ss2[m[i]] = m[s2[i]]
|
|
@@ -1333,7 +1333,7 @@ class ArithmeticSubgroup_Permutation_class(ArithmeticSubgroup):
|
|
|
1333
1333
|
from .congroup_generic import CongruenceSubgroup_constructor as CS
|
|
1334
1334
|
return CS(N, [x.matrix() for x in self.gens()])
|
|
1335
1335
|
|
|
1336
|
-
def is_congruence(self):
|
|
1336
|
+
def is_congruence(self) -> bool:
|
|
1337
1337
|
r"""
|
|
1338
1338
|
Return ``True`` if this is a congruence subgroup, and ``False``
|
|
1339
1339
|
otherwise.
|
|
@@ -1434,14 +1434,14 @@ class ArithmeticSubgroup_Permutation_class(ArithmeticSubgroup):
|
|
|
1434
1434
|
True
|
|
1435
1435
|
"""
|
|
1436
1436
|
from sage.misc.verbose import verbose
|
|
1437
|
-
if self.index() == 1:
|
|
1437
|
+
if self.index() == 1: # the group is SL2Z (trivial case)
|
|
1438
1438
|
return True
|
|
1439
1439
|
|
|
1440
|
-
L = self.L()
|
|
1441
|
-
R = self.R()
|
|
1440
|
+
L = self.L() # action of L
|
|
1441
|
+
R = self.R() # action of R
|
|
1442
1442
|
|
|
1443
1443
|
if self.is_even():
|
|
1444
|
-
N = L.order()
|
|
1444
|
+
N = L.order() # generalised level of the group
|
|
1445
1445
|
else:
|
|
1446
1446
|
N = 2 * L.order()
|
|
1447
1447
|
|
|
@@ -1452,13 +1452,13 @@ class ArithmeticSubgroup_Permutation_class(ArithmeticSubgroup):
|
|
|
1452
1452
|
if e == 1:
|
|
1453
1453
|
# N is odd
|
|
1454
1454
|
# this only gets called if self is even
|
|
1455
|
-
onehalf = ZZ(2).inverse_mod(N)
|
|
1455
|
+
onehalf = ZZ(2).inverse_mod(N) # i.e. 2^(-1) mod N
|
|
1456
1456
|
rel = (R*R*L**(-onehalf))**3
|
|
1457
1457
|
return rel.is_one()
|
|
1458
1458
|
|
|
1459
1459
|
elif m == 1:
|
|
1460
1460
|
# N is a power of 2
|
|
1461
|
-
onefifth = ZZ(5).inverse_mod(N)
|
|
1461
|
+
onefifth = ZZ(5).inverse_mod(N) # i.e. 5^(-1) mod N
|
|
1462
1462
|
S = L**20*R**onefifth*L**(-4)*~R
|
|
1463
1463
|
|
|
1464
1464
|
# congruence if the three below permutations are trivial
|
|
@@ -1631,7 +1631,7 @@ class OddArithmeticSubgroup_Permutation(ArithmeticSubgroup_Permutation_class):
|
|
|
1631
1631
|
return (OddArithmeticSubgroup_Permutation,
|
|
1632
1632
|
(self._S2,self._S3,self._L,self._R,canonical_labels))
|
|
1633
1633
|
|
|
1634
|
-
def is_odd(self):
|
|
1634
|
+
def is_odd(self) -> bool:
|
|
1635
1635
|
r"""
|
|
1636
1636
|
Test whether the group is odd.
|
|
1637
1637
|
|
|
@@ -1643,7 +1643,7 @@ class OddArithmeticSubgroup_Permutation(ArithmeticSubgroup_Permutation_class):
|
|
|
1643
1643
|
"""
|
|
1644
1644
|
return True
|
|
1645
1645
|
|
|
1646
|
-
def is_even(self):
|
|
1646
|
+
def is_even(self) -> bool:
|
|
1647
1647
|
r"""
|
|
1648
1648
|
Test whether the group is even.
|
|
1649
1649
|
|
|
@@ -1948,7 +1948,7 @@ class EvenArithmeticSubgroup_Permutation(ArithmeticSubgroup_Permutation_class):
|
|
|
1948
1948
|
return (EvenArithmeticSubgroup_Permutation,
|
|
1949
1949
|
(self._S2, self._S3, self._L, self._R, canonical_labels))
|
|
1950
1950
|
|
|
1951
|
-
def is_odd(self):
|
|
1951
|
+
def is_odd(self) -> bool:
|
|
1952
1952
|
r"""
|
|
1953
1953
|
Return ``True`` if this subgroup does not contain the matrix `-Id`.
|
|
1954
1954
|
|
|
@@ -1960,7 +1960,7 @@ class EvenArithmeticSubgroup_Permutation(ArithmeticSubgroup_Permutation_class):
|
|
|
1960
1960
|
"""
|
|
1961
1961
|
return False
|
|
1962
1962
|
|
|
1963
|
-
def is_even(self):
|
|
1963
|
+
def is_even(self) -> bool:
|
|
1964
1964
|
r"""
|
|
1965
1965
|
Return ``True`` if this subgroup contains the matrix `-Id`.
|
|
1966
1966
|
|
|
@@ -2489,7 +2489,7 @@ class EvenArithmeticSubgroup_Permutation(ArithmeticSubgroup_Permutation_class):
|
|
|
2489
2489
|
sage: Go == G
|
|
2490
2490
|
True
|
|
2491
2491
|
|
|
2492
|
-
|
|
2492
|
+
Starting from `\Gamma(6)` we get a different group::
|
|
2493
2493
|
|
|
2494
2494
|
sage: G = Gamma(6).as_permutation_group()
|
|
2495
2495
|
sage: G.is_odd(), G.index()
|
|
Binary file
|
|
@@ -245,7 +245,7 @@ class Gamma0_class(GammaH_class):
|
|
|
245
245
|
"""
|
|
246
246
|
return [Gamma0_constructor(M) for M in self.level().divisors()]
|
|
247
247
|
|
|
248
|
-
def is_even(self):
|
|
248
|
+
def is_even(self) -> bool:
|
|
249
249
|
r"""
|
|
250
250
|
Return ``True`` precisely if this subgroup contains the matrix -1.
|
|
251
251
|
|
|
@@ -261,7 +261,7 @@ class Gamma0_class(GammaH_class):
|
|
|
261
261
|
"""
|
|
262
262
|
return True
|
|
263
263
|
|
|
264
|
-
def is_subgroup(self, right):
|
|
264
|
+
def is_subgroup(self, right) -> bool:
|
|
265
265
|
"""
|
|
266
266
|
Return ``True`` if ``self`` is a subgroup of ``right``.
|
|
267
267
|
|