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
@@ -2531,7 +2531,7 @@ class HeegnerPoints_level_disc_cond(HeegnerPoints_level, HeegnerPoints_level_dis
2531
2531
 
2532
2532
  sage: len(heegner_points(389,-20,1))
2533
2533
  4
2534
- sage: QQ[sqrt(-20)].class_number()
2534
+ sage: QQ[sqrt(-20)].class_number() # needs sage.symbolic
2535
2535
  2
2536
2536
  """
2537
2537
  return len(self.points())
@@ -3356,7 +3356,7 @@ class HeegnerPointOnEllipticCurve(HeegnerPoint):
3356
3356
  the discriminant below is strong confirmation -- but not proof
3357
3357
  -- that this polynomial is correct::
3358
3358
 
3359
- sage: f = P.numerical_approx(70)[0].algdep(6); f # needs fpylll
3359
+ sage: f = P.numerical_approx(70)[0].algebraic_dependency(6); f # needs fpylll
3360
3360
  1225*x^6 + 1750*x^5 - 21675*x^4 - 380*x^3 + 110180*x^2 - 129720*x + 48771
3361
3361
  sage: f.discriminant().factor() # needs fpylll
3362
3362
  2^6 * 3^2 * 5^11 * 7^4 * 13^2 * 19^6 * 199^2 * 719^2 * 26161^2
@@ -3461,7 +3461,7 @@ class HeegnerPointOnEllipticCurve(HeegnerPoint):
3461
3461
 
3462
3462
  if algorithm == 'lll':
3463
3463
  P = self.numerical_approx(prec)
3464
- f = P[0].algdep(n)
3464
+ f = P[0].algebraic_dependency(n)
3465
3465
  if f.is_irreducible() and self._check_poly_discriminant(f):
3466
3466
  return f.monic()
3467
3467
  else:
@@ -3544,7 +3544,7 @@ class HeegnerPointOnEllipticCurve(HeegnerPoint):
3544
3544
  sage: z = P.point_exact(200, optimize=True)
3545
3545
  sage: z[1].charpoly()
3546
3546
  x^12 + 6*x^11 + 90089/1715*x^10 + 71224/343*x^9 + 52563964/588245*x^8 - 483814934/588245*x^7 - 156744579/16807*x^6 - 2041518032/84035*x^5 + 1259355443184/14706125*x^4 + 3094420220918/14706125*x^3 + 123060442043827/367653125*x^2 + 82963044474852/367653125*x + 211679465261391/1838265625
3547
- sage: f = P.numerical_approx(500)[1].algdep(12); f / f.leading_coefficient()
3547
+ sage: f = P.numerical_approx(500)[1].algebraic_dependency(12); f / f.leading_coefficient()
3548
3548
  x^12 + 6*x^11 + 90089/1715*x^10 + 71224/343*x^9 + 52563964/588245*x^8 - 483814934/588245*x^7 - 156744579/16807*x^6 - 2041518032/84035*x^5 + 1259355443184/14706125*x^4 + 3094420220918/14706125*x^3 + 123060442043827/367653125*x^2 + 82963044474852/367653125*x + 211679465261391/1838265625
3549
3549
 
3550
3550
  sage: E = EllipticCurve('5077a')
@@ -4227,13 +4227,14 @@ class KolyvaginPoint(HeegnerPoint):
4227
4227
  if E.root_number() == -1:
4228
4228
  return self._recognize_point_over_QQ(P, 2*self.index())
4229
4229
  else:
4230
- # root number +1. We use algdep to recognize the x
4230
+ # root number +1. We use algebraic_dependency
4231
+ # to recognize the x
4231
4232
  # coordinate, stick it in the appropriate quadratic
4232
4233
  # field, then make sure that we got the right
4233
4234
  # embedding, and if not fix things so we do.
4234
4235
  x = P[0]
4235
4236
  C = x.parent()
4236
- f = x.algdep(2)
4237
+ f = x.algebraic_dependency(2)
4237
4238
  K = self.quadratic_field()
4238
4239
  roots = [r[0] for r in f.roots(K)]
4239
4240
  if not roots:
@@ -6424,7 +6425,7 @@ def ell_heegner_point(self, D, c=ZZ(1), f=None, check=True):
6424
6425
  Working out the details manually::
6425
6426
 
6426
6427
  sage: P = E.heegner_point(-47).numerical_approx(prec=200)
6427
- sage: f = algdep(P[0], 5); f
6428
+ sage: f = algebraic_dependency(P[0], 5); f
6428
6429
  x^5 - x^4 + x^3 + x^2 - 2*x + 1
6429
6430
  sage: f.discriminant().factor()
6430
6431
  47^2
@@ -6819,6 +6820,7 @@ def _adjust_heegner_index(self, a):
6819
6820
 
6820
6821
  EXAMPLES::
6821
6822
 
6823
+ sage: # needs sage.symbolic
6822
6824
  sage: E = EllipticCurve('11a1')
6823
6825
  sage: a = RIF(sqrt(2)) - RIF(1.4142135623730951)
6824
6826
  sage: E._adjust_heegner_index(a)
@@ -7242,7 +7244,7 @@ def _heegner_forms_list(self, D, beta=None, expected_count=None):
7242
7244
  -195
7243
7245
  sage: len(E._heegner_forms_list(-195))
7244
7246
  4
7245
- sage: QQ[sqrt(-195)].class_number()
7247
+ sage: QQ[sqrt(-195)].class_number() # needs sage.symbolic
7246
7248
  4
7247
7249
 
7248
7250
  sage: E = EllipticCurve('389a')
@@ -7286,6 +7288,7 @@ def _heegner_best_tau(self, D, prec=None):
7286
7288
 
7287
7289
  EXAMPLES::
7288
7290
 
7291
+ sage: # needs sage.symbolic
7289
7292
  sage: E = EllipticCurve('37a')
7290
7293
  sage: E._heegner_best_tau(-7)
7291
7294
  1/74*sqrt(-7) - 17/74
@@ -1035,7 +1035,7 @@ class EllipticCurveCanonicalHeight:
1035
1035
 
1036
1036
  EXAMPLES::
1037
1037
 
1038
- sage: # needs sage.rings.number_field
1038
+ sage: # needs sage.rings.number_field sage.symbolic
1039
1039
  sage: K.<i> = QuadraticField(-1)
1040
1040
  sage: E = EllipticCurve([0, 0, 0, 1+5*i, 3+i])
1041
1041
  sage: H = E.height_function()
@@ -1109,7 +1109,7 @@ class EllipticCurveCanonicalHeight:
1109
1109
 
1110
1110
  In [Tho2010]_ the value is given as 0.772::
1111
1111
 
1112
- sage: RealField(12)( H.B(5, 0.01) ) # needs sage.rings.number_field
1112
+ sage: RealField(12)( H.B(5, 0.01) ) # needs sage.rings.number_field sage.symbolic
1113
1113
  0.777
1114
1114
  """
1115
1115
  K = self.K
@@ -1320,9 +1320,9 @@ class EllipticCurveCanonicalHeight:
1320
1320
  height strictly greater than 0.2, but fail to prove the same
1321
1321
  for 0.3::
1322
1322
 
1323
- sage: H.real_intersection_is_empty([H.B(n,0.2) for n in srange(1,10)], v)
1323
+ sage: H.real_intersection_is_empty([H.B(n,0.2) for n in srange(1,10)], v) # needs sage.symbolic
1324
1324
  True
1325
- sage: H.real_intersection_is_empty([H.B(n,0.3) for n in srange(1,10)], v)
1325
+ sage: H.real_intersection_is_empty([H.B(n,0.3) for n in srange(1,10)], v) # needs sage.symbolic
1326
1326
  False
1327
1327
 
1328
1328
  An example over a number field::
@@ -1339,9 +1339,9 @@ class EllipticCurveCanonicalHeight:
1339
1339
  height strictly greater than 0.07, but fail to prove the same
1340
1340
  for 0.08::
1341
1341
 
1342
- sage: H.real_intersection_is_empty([H.B(n,0.07) for n in srange(1,5)], v) # long time, needs sage.rings.number_field
1342
+ sage: H.real_intersection_is_empty([H.B(n,0.07) for n in srange(1,5)], v) # long time, needs sage.rings.number_field sage.symbolic
1343
1343
  True
1344
- sage: H.real_intersection_is_empty([H.B(n,0.08) for n in srange(1,5)], v) # needs sage.rings.number_field
1344
+ sage: H.real_intersection_is_empty([H.B(n,0.08) for n in srange(1,5)], v) # needs sage.rings.number_field sage.symbolic
1345
1345
  False
1346
1346
  """
1347
1347
  return UnionOfIntervals.intersection([self.Sn(-B, B, k+1, v) for k,B in enumerate(Bk)]).is_empty()
@@ -1628,7 +1628,7 @@ class EllipticCurveCanonicalHeight:
1628
1628
  The array of values on the grid shows symmetry, since `\wp` is
1629
1629
  even::
1630
1630
 
1631
- sage: H.wp_on_grid(v,4)
1631
+ sage: H.wp_on_grid(v, 4) # needs sage.symbolic
1632
1632
  array([[25.43920182, 5.28760943, 5.28760943, 25.43920182],
1633
1633
  [ 6.05099485, 1.83757786, 1.83757786, 6.05099485],
1634
1634
  [ 6.05099485, 1.83757786, 1.83757786, 6.05099485],
@@ -1636,7 +1636,7 @@ class EllipticCurveCanonicalHeight:
1636
1636
 
1637
1637
  The array of values on the half-grid::
1638
1638
 
1639
- sage: H.wp_on_grid(v,4,True)
1639
+ sage: H.wp_on_grid(v, 4, True) # needs sage.symbolic
1640
1640
  array([[25.43920182, 5.28760943],
1641
1641
  [ 6.05099485, 1.83757786],
1642
1642
  [ 6.05099485, 1.83757786],
@@ -1693,18 +1693,18 @@ class EllipticCurveCanonicalHeight:
1693
1693
  for 0.03. For the first proof, using only `n=1,2,3` is not
1694
1694
  sufficient::
1695
1695
 
1696
- sage: H.complex_intersection_is_empty([H.B(n,0.02) for n in [1,2,3]], v) # long time, needs sage.rings.number_field
1696
+ sage: H.complex_intersection_is_empty([H.B(n, 0.02) for n in [1,2,3]], v) # long time, needs sage.rings.number_field sage.symbolic
1697
1697
  False
1698
- sage: H.complex_intersection_is_empty([H.B(n,0.02) for n in [1,2,3,4]], v) # needs sage.rings.number_field
1698
+ sage: H.complex_intersection_is_empty([H.B(n, 0.02) for n in [1,2,3,4]], v) # needs sage.rings.number_field sage.symbolic
1699
1699
  True
1700
- sage: H.complex_intersection_is_empty([H.B(n,0.03) for n in [1,2,3,4]], v) # long time, needs sage.rings.number_field
1700
+ sage: H.complex_intersection_is_empty([H.B(n, 0.03) for n in [1,2,3,4]], v) # long time, needs sage.rings.number_field sage.symbolic
1701
1701
  False
1702
1702
 
1703
1703
  Using `n\le6` enables us to prove the lower bound 0.03. Note
1704
1704
  that it takes longer when the result is ``False`` than when it
1705
1705
  is ``True``::
1706
1706
 
1707
- sage: H.complex_intersection_is_empty([H.B(n,0.03) for n in [1..6]], v) # needs sage.rings.number_field
1707
+ sage: H.complex_intersection_is_empty([H.B(n, 0.03) for n in [1..6]], v) # needs sage.rings.number_field sage.symbolic
1708
1708
  True
1709
1709
  """
1710
1710
  from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
@@ -1818,11 +1818,11 @@ class EllipticCurveCanonicalHeight:
1818
1818
  Using `N=5` we can prove that 0.1 is a lower bound (in fact we
1819
1819
  only need `N=2`), but not that 0.2 is::
1820
1820
 
1821
- sage: H.test_mu(0.1, 5) # needs sage.rings.number_field
1821
+ sage: H.test_mu(0.1, 5) # needs sage.rings.number_field sage.symbolic
1822
1822
  B_1(0.100000000000000) = 1.51580969677387
1823
1823
  B_2(0.100000000000000) = 0.932072561526720
1824
1824
  True
1825
- sage: H.test_mu(0.2, 5) # needs sage.rings.number_field
1825
+ sage: H.test_mu(0.2, 5) # needs sage.rings.number_field sage.symbolic
1826
1826
  B_1(0.200000000000000) = 2.04612906979932
1827
1827
  B_2(0.200000000000000) = 3.09458988474327
1828
1828
  B_3(0.200000000000000) = 27.6251108409484
@@ -1903,7 +1903,7 @@ class EllipticCurveCanonicalHeight:
1903
1903
  given)::
1904
1904
 
1905
1905
  sage: E = EllipticCurve([1, 0, 1, 421152067, 105484554028056]) # 60490d1
1906
- sage: E.height_function().min_gr(.0001, 5)
1906
+ sage: E.height_function().min_gr(.0001, 5) # needs sage.symbolic
1907
1907
  1.98684388146518
1908
1908
 
1909
1909
  Example 10.1 from [Tho2010]_ (where a lower bound of 0.18 was
@@ -1913,7 +1913,7 @@ class EllipticCurveCanonicalHeight:
1913
1913
  sage: K.<i> = QuadraticField(-1)
1914
1914
  sage: E = EllipticCurve([0, 0, 0, 91 - 26*i, -144 - 323*i])
1915
1915
  sage: H = E.height_function()
1916
- sage: H.min_gr(0.1, 4) # long time
1916
+ sage: H.min_gr(0.1, 4) # long time, needs sage.symbolic
1917
1917
  0.1621049443313762
1918
1918
 
1919
1919
  Example 10.2 from [Tho2010]_::
@@ -1922,7 +1922,7 @@ class EllipticCurveCanonicalHeight:
1922
1922
  sage: K.<i> = QuadraticField(-1)
1923
1923
  sage: E = EllipticCurve([0, 1 - i, i, -i, 0])
1924
1924
  sage: H = E.height_function()
1925
- sage: H.min_gr(0.01, 5) # long time
1925
+ sage: H.min_gr(0.01, 5) # long time, needs sage.symbolic
1926
1926
  0.020153685521979152
1927
1927
 
1928
1928
  In this example the point `P=(0,0)` has height 0.023 so our
@@ -1938,10 +1938,11 @@ class EllipticCurveCanonicalHeight:
1938
1938
  given)::
1939
1939
 
1940
1940
  sage: # needs sage.rings.number_field
1941
+ sage: x = polygen(ZZ, 'x')
1941
1942
  sage: K.<a> = NumberField(x^3 - 2)
1942
1943
  sage: E = EllipticCurve([0, 0, 0, -3*a - a^2, a^2])
1943
1944
  sage: H = E.height_function()
1944
- sage: H.min_gr(0.1, 5) # long time
1945
+ sage: H.min_gr(0.1, 5) # long time, needs sage.symbolic
1945
1946
  0.25
1946
1947
 
1947
1948
  TESTS:
@@ -1949,10 +1950,11 @@ class EllipticCurveCanonicalHeight:
1949
1950
  This example from the LMFDB gave problems before the fix in :issue:`8829`::
1950
1951
 
1951
1952
  sage: # needs sage.rings.number_field
1953
+ sage: x = polygen(ZZ, 'x')
1952
1954
  sage: K.<phi> = NumberField(x^2 - x - 1)
1953
1955
  sage: E = EllipticCurve([phi + 1, -phi + 1, 1, 20*phi - 39, 196*phi + 237])
1954
1956
  sage: H = E.height_function()
1955
- sage: H.min_gr(.1, 5, verbose=True) # long time
1957
+ sage: H.min_gr(.1, 5, verbose=True) # long time, needs sage.symbolic
1956
1958
  B_1(1) = 1540.199246369678
1957
1959
  ...
1958
1960
  halving mu to 0.25 and increasing n_max to 6
@@ -2028,7 +2030,7 @@ class EllipticCurveCanonicalHeight:
2028
2030
  given)::
2029
2031
 
2030
2032
  sage: E = EllipticCurve([1, 0, 1, 421152067, 105484554028056]) # 60490d1
2031
- sage: E.height_function().min(.0001, 5)
2033
+ sage: E.height_function().min(.0001, 5) # needs sage.symbolic
2032
2034
  0.0011263287309893311
2033
2035
 
2034
2036
  Example 10.1 from [Tho2010]_ (where a lower bound of 0.18 was
@@ -2061,6 +2063,7 @@ class EllipticCurveCanonicalHeight:
2061
2063
  given)::
2062
2064
 
2063
2065
  sage: # needs sage.rings.number_field
2066
+ sage: x = polygen(ZZ, 'x')
2064
2067
  sage: K.<a> = NumberField(x^3 - 2)
2065
2068
  sage: E = EllipticCurve([0, 0, 0, -3*a - a^2, a^2])
2066
2069
  sage: H = E.height_function()
@@ -2071,7 +2074,7 @@ class EllipticCurveCanonicalHeight:
2071
2074
 
2072
2075
  sage: E = EllipticCurve('37a')
2073
2076
  sage: h = E.height_function()
2074
- sage: h.min(.01, 5)
2077
+ sage: h.min(.01, 5) # needs sage.symbolic
2075
2078
  0.03987318057488725
2076
2079
  sage: E.gen(0).height()
2077
2080
  0.0511114082399688
@@ -2079,12 +2082,12 @@ class EllipticCurveCanonicalHeight:
2079
2082
  After base change the lower bound can decrease::
2080
2083
 
2081
2084
  sage: K.<a> = QuadraticField(-5) # needs sage.rings.number_field
2082
- sage: E.change_ring(K).height_function().min(0.5, 10) # long time, needs sage.rings.number_field
2085
+ sage: E.change_ring(K).height_function().min(0.5, 10) # long time, needs sage.rings.number_field sage.symbolic
2083
2086
  0.04419417382415922
2084
2087
 
2085
2088
  sage: E = EllipticCurve('389a')
2086
2089
  sage: h = E.height_function()
2087
- sage: h.min(0.1, 5)
2090
+ sage: h.min(0.1, 5) # needs sage.symbolic
2088
2091
  0.05731275270029196
2089
2092
  sage: [P.height() for P in E.gens()]
2090
2093
  [0.686667083305587, 0.327000773651605]
@@ -1162,7 +1162,7 @@ def compare_via_evaluation(left, right):
1162
1162
  sage: from sage.schemes.elliptic_curves.hom_composite import EllipticCurveHom_composite
1163
1163
  sage: mu = EllipticCurveHom_composite.from_factors([phi, psi])
1164
1164
  sage: from sage.schemes.elliptic_curves.hom import compare_via_evaluation
1165
- sage: compare_via_evaluation(mu, E.scalar_multiplication(7))
1165
+ sage: compare_via_evaluation(mu, E.scalar_multiplication(7)) # needs sage.symbolic
1166
1166
  True
1167
1167
 
1168
1168
  .. SEEALSO::
@@ -1344,6 +1344,7 @@ def compute_trace_generic(phi):
1344
1344
  the result for Frobenius matches
1345
1345
  :meth:`~sage.schemes.elliptic_curves.ell_finite_field.EllipticCurve_finite_field.trace_of_frobenius`::
1346
1346
 
1347
+ sage: # needs sage.symbolic
1347
1348
  sage: from sage.schemes.elliptic_curves.hom import compute_trace_generic
1348
1349
  sage: p = random_prime(10^3)
1349
1350
  sage: e = randrange(1, ceil(log(10^5,p)))
@@ -64,7 +64,7 @@ Equality is decided correctly (and, in some cases, much faster than
64
64
  comparing :meth:`EllipticCurveHom.rational_maps`) even when distinct
65
65
  factorizations of the same isogeny are compared::
66
66
 
67
- sage: psi == EllipticCurveIsogeny(E, P) # needs sage.rings.finite_rings
67
+ sage: psi == EllipticCurveIsogeny(E, P) # needs sage.rings.finite_rings sage.symbolic
68
68
  True
69
69
 
70
70
  We can easily obtain the individual factors of the composite map::
@@ -464,7 +464,7 @@ class EllipticCurveHom_composite(EllipticCurveHom):
464
464
  sage: P, = E.gens()
465
465
  sage: phi = EllipticCurveHom_composite(E, P)
466
466
  sage: psi = EllipticCurveHom_composite.from_factors(phi.factors())
467
- sage: psi == phi
467
+ sage: psi == phi # needs sage.symbolic
468
468
  True
469
469
 
470
470
  TESTS::
@@ -479,7 +479,7 @@ class EllipticCurveHom_composite(EllipticCurveHom):
479
479
  sage: E = EllipticCurve(GF(419), [1,0])
480
480
  sage: P, = E.gens()
481
481
  sage: phi = EllipticCurveHom_composite(E, P)
482
- sage: EllipticCurveHom_composite.from_factors(phi.factors()) == phi
482
+ sage: EllipticCurveHom_composite.from_factors(phi.factors()) == phi # needs sage.symbolic
483
483
  True
484
484
  """
485
485
  maps = tuple(maps)
@@ -713,14 +713,14 @@ class EllipticCurveHom_composite(EllipticCurveHom):
713
713
 
714
714
  ::
715
715
 
716
- sage: # needs sage.rings.finite_rings
716
+ sage: # needs sage.rings.finite_rings sage.rings.number_field sage.symbolic
717
717
  sage: E = EllipticCurve(GF(431**2), [1,0])
718
718
  sage: P,Q = E.gens()
719
- sage: phi1 = EllipticCurveHom_composite(E, P) # needs sage.rings.number_field
720
- sage: phi2 = EllipticCurveHom_composite(phi1.codomain(), phi1(Q)) # needs sage.rings.number_field
721
- sage: psi1 = EllipticCurveHom_composite(E, Q) # needs sage.rings.number_field
722
- sage: psi2 = EllipticCurveHom_composite(psi1.codomain(), psi1(P)) # needs sage.rings.number_field
723
- sage: phi2 * phi1 == psi2 * psi1 # needs sage.rings.number_field
719
+ sage: phi1 = EllipticCurveHom_composite(E, P)
720
+ sage: phi2 = EllipticCurveHom_composite(phi1.codomain(), phi1(Q))
721
+ sage: psi1 = EllipticCurveHom_composite(E, Q)
722
+ sage: psi2 = EllipticCurveHom_composite(psi1.codomain(), psi1(P))
723
+ sage: phi2 * phi1 == psi2 * psi1
724
724
  True
725
725
  """
726
726
  if op != op_EQ:
@@ -845,9 +845,9 @@ class EllipticCurveHom_composite(EllipticCurveHom):
845
845
  over Finite Field of size 65537
846
846
  To: Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5
847
847
  over Finite Field of size 65537
848
- sage: psi * phi == phi.domain().scalar_multiplication(phi.degree())
848
+ sage: psi * phi == phi.domain().scalar_multiplication(phi.degree()) # needs sage.symbolic
849
849
  True
850
- sage: phi * psi == psi.domain().scalar_multiplication(psi.degree())
850
+ sage: phi * psi == psi.domain().scalar_multiplication(psi.degree()) # needs sage.symbolic
851
851
  True
852
852
  """
853
853
  phis = (phi.dual() for phi in self._phis[::-1])
@@ -431,18 +431,18 @@ class EllipticCurveHom_frobenius(EllipticCurveHom):
431
431
  sage: from sage.schemes.elliptic_curves.hom_frobenius import EllipticCurveHom_frobenius
432
432
  sage: E = EllipticCurve(GF(31), [0,1])
433
433
  sage: f = EllipticCurveHom_frobenius(E)
434
- sage: f.dual() * f == EllipticCurveHom_scalar(f.domain(), 31)
434
+ sage: f.dual() * f == EllipticCurveHom_scalar(f.domain(), 31) # needs sage.symbolic
435
435
  True
436
- sage: f * f.dual() == EllipticCurveHom_scalar(f.codomain(), 31)
436
+ sage: f * f.dual() == EllipticCurveHom_scalar(f.codomain(), 31) # needs sage.symbolic
437
437
  True
438
438
 
439
439
  A supersingular example::
440
440
 
441
441
  sage: E = EllipticCurve(GF(31), [1,0])
442
442
  sage: f = EllipticCurveHom_frobenius(E)
443
- sage: f.dual() * f == EllipticCurveHom_scalar(f.domain(), 31)
443
+ sage: f.dual() * f == EllipticCurveHom_scalar(f.domain(), 31) # needs sage.symbolic
444
444
  True
445
- sage: f * f.dual() == EllipticCurveHom_scalar(f.codomain(), 31)
445
+ sage: f * f.dual() == EllipticCurveHom_scalar(f.codomain(), 31) # needs sage.symbolic
446
446
  True
447
447
 
448
448
  TESTS:
@@ -459,13 +459,13 @@ class EllipticCurveHom_frobenius(EllipticCurveHom):
459
459
  ....: except ArithmeticError:
460
460
  ....: pass
461
461
  sage: f = EllipticCurveHom_frobenius(E, n)
462
- sage: f.dual() * f == EllipticCurveHom_scalar(E, p**n)
462
+ sage: f.dual() * f == EllipticCurveHom_scalar(E, p**n) # needs sage.symbolic
463
463
  True
464
- sage: f * f.dual() == EllipticCurveHom_scalar(f.codomain(), p**n)
464
+ sage: f * f.dual() == EllipticCurveHom_scalar(f.codomain(), p**n) # needs sage.symbolic
465
465
  True
466
- sage: f.dual().dual() == f # known bug -- broken in characteristic 2,3
466
+ sage: f.dual().dual() == f # known bug -- broken in characteristic 2,3 # needs sage.symbolic
467
467
  True
468
- sage: p in (2,3) or f.dual().dual() == f
468
+ sage: p in (2,3) or f.dual().dual() == f # needs sage.symbolic
469
469
  True
470
470
 
471
471
  ALGORITHM:
@@ -20,7 +20,12 @@ EXAMPLES::
20
20
  Sum morphism:
21
21
  From: Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Finite Field of size 101
22
22
  To: Elliptic Curve defined by y^2 = x^3 + 12*x + 98 over Finite Field of size 101
23
- Via: (Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Finite Field of size 101 to Elliptic Curve defined by y^2 = x^3 + 12*x + 98 over Finite Field of size 101, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Finite Field of size 101 to Elliptic Curve defined by y^2 = x^3 + 12*x + 98 over Finite Field of size 101)
23
+ Via: (Isogeny of degree 7
24
+ from Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Finite Field of size 101
25
+ to Elliptic Curve defined by y^2 = x^3 + 12*x + 98 over Finite Field of size 101,
26
+ Isogeny of degree 7
27
+ from Elliptic Curve defined by y^2 = x^3 + 5*x + 5 over Finite Field of size 101
28
+ to Elliptic Curve defined by y^2 = x^3 + 12*x + 98 over Finite Field of size 101)
24
29
  sage: phi + phi == phi * E.scalar_multiplication(2) # needs sage.symbolic
25
30
  True
26
31
  sage: phi + phi + phi == phi * E.scalar_multiplication(3) # needs sage.symbolic
@@ -28,6 +33,7 @@ EXAMPLES::
28
33
 
29
34
  An example of computing with a supersingular endomorphism ring::
30
35
 
36
+ sage: # needs sage.symbolic
31
37
  sage: E = EllipticCurve(GF(419^2), [1,0])
32
38
  sage: i = E.automorphisms()[-1]
33
39
  sage: j = E.frobenius_isogeny()
@@ -47,7 +47,7 @@ However, they are certainly separable isogenies with the same kernel
47
47
  and must therefore be equal *up to post-isomorphism*::
48
48
 
49
49
  sage: isos = psi.codomain().isomorphisms(phi.codomain())
50
- sage: sum(iso * psi == phi for iso in isos)
50
+ sage: sum(iso * psi == phi for iso in isos) # needs sage.symbolic
51
51
  1
52
52
 
53
53
  Just like
@@ -1034,7 +1034,7 @@ class EllipticCurveHom_velusqrt(EllipticCurveHom):
1034
1034
  Elliptic-curve isogeny (using square-root Vélu) of degree 59:
1035
1035
  From: Elliptic Curve defined by y^2 + 5*x*y + 5*y = x^3 + 5*x^2 + 5*x + 5 over Finite Field of size 101
1036
1036
  To: Elliptic Curve defined by y^2 = x^3 + 15*x + 25 over Finite Field of size 101
1037
- sage: phi == psi
1037
+ sage: phi == psi # needs sage.symbolic
1038
1038
  True
1039
1039
  """
1040
1040
  if op != op_EQ:
@@ -1089,13 +1089,19 @@ class EllipticCurveHom_velusqrt(EllipticCurveHom):
1089
1089
  sage: K = E.cardinality() // 11 * E.gens()[0]
1090
1090
  sage: phi = E.isogeny(K, algorithm='velusqrt'); phi
1091
1091
  Elliptic-curve isogeny (using square-root Vélu) of degree 11:
1092
- From: Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 + x + 1 over Finite Field in z2 of size 101^2
1093
- To: Elliptic Curve defined by y^2 = x^3 + 39*x + 40 over Finite Field in z2 of size 101^2
1092
+ From: Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 + x + 1
1093
+ over Finite Field in z2 of size 101^2
1094
+ To: Elliptic Curve defined by y^2 = x^3 + 39*x + 40
1095
+ over Finite Field in z2 of size 101^2
1094
1096
  sage: phi.dual()
1095
- Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + 39*x + 40 over Finite Field in z2 of size 101^2 to Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 + x + 1 over Finite Field in z2 of size 101^2
1096
- sage: phi.dual() * phi == phi.domain().scalar_multiplication(11)
1097
+ Isogeny of degree 11
1098
+ from Elliptic Curve defined by y^2 = x^3 + 39*x + 40
1099
+ over Finite Field in z2 of size 101^2
1100
+ to Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 + x + 1
1101
+ over Finite Field in z2 of size 101^2
1102
+ sage: phi.dual() * phi == phi.domain().scalar_multiplication(11) # needs sage.symbolic
1097
1103
  True
1098
- sage: phi * phi.dual() == phi.codomain().scalar_multiplication(11)
1104
+ sage: phi * phi.dual() == phi.codomain().scalar_multiplication(11) # needs sage.symbolic
1099
1105
  True
1100
1106
  """
1101
1107
  # FIXME: This code fails if the degree is divisible by the characteristic.
@@ -39,7 +39,7 @@ the endomorphism ring as scalar multiplications::
39
39
  True
40
40
  sage: (1 + omega + omega^2) == 0
41
41
  True
42
- sage: (2*omega + 1)^2 == -3
42
+ sage: (2*omega + 1)^2 == -3 # needs sage.symbolic
43
43
  True
44
44
 
45
45
  AUTHORS:
@@ -94,7 +94,7 @@ class EllipticCurveHomset(SchemeHomset_generic):
94
94
 
95
95
  sage: E = EllipticCurve(GF(101), [1,1])
96
96
  sage: H = End(E)
97
- sage: TestSuite(H).run(skip='_test_elements')
97
+ sage: TestSuite(H).run(skip='_test_elements') # needs sage.symbolic
98
98
 
99
99
  ::
100
100
 
@@ -1142,7 +1142,7 @@ def isogenies_7_0(E, minimal_models=True):
1142
1142
  to Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r
1143
1143
  with defining polynomial x^2 + 3 with r = 1.732050807568878?*I]
1144
1144
 
1145
- sage: # needs sage.rings.number_field
1145
+ sage: # needs sage.rings.number_field sage.symbolic
1146
1146
  sage: x = polygen(QQ, 'x')
1147
1147
  sage: K.<a> = NumberField(x^6 + 1512*x^3 - 21168)
1148
1148
  sage: E = EllipticCurve(K, [0,1])
@@ -19,8 +19,7 @@ from sage.rings.integer_ring import ZZ
19
19
  from sage.libs.pari import pari
20
20
  from cypari2.handle_error import PariError
21
21
 
22
- from sage.databases.db_modular_polynomials import ClassicalModularPolynomialDatabase
23
- _db = ClassicalModularPolynomialDatabase()
22
+ _db = None
24
23
 
25
24
  _cache_bound = 100
26
25
  _cache = {}
@@ -106,6 +105,7 @@ def classical_modular_polynomial(l, j=None):
106
105
  sage: classical_modular_polynomial(l, j) == classical_modular_polynomial(l)(j, Y)
107
106
  True
108
107
  """
108
+ global _db
109
109
  l = ZZ(l)
110
110
 
111
111
  if j is None:
@@ -118,13 +118,17 @@ def classical_modular_polynomial(l, j=None):
118
118
  pass
119
119
 
120
120
  try:
121
+ if _db is None:
122
+ from sage.databases.db_modular_polynomials import ClassicalModularPolynomialDatabase
123
+ _db = ClassicalModularPolynomialDatabase()
121
124
  Phi = ZZ['X,Y'](_db[l])
122
- except ValueError:
125
+ except (FileNotFoundError, ImportError, ValueError):
123
126
  try:
124
127
  pari_Phi = pari.polmodular(l)
125
128
  except PariError:
126
129
  raise NotImplementedError('modular polynomial is not in database and computing it on the fly is not yet implemented')
127
- d = {(i, j): c for i,f in enumerate(pari_Phi) for j, c in enumerate(f)}
130
+ d = {(i, j): c for i, f in enumerate(pari_Phi)
131
+ for j, c in enumerate(f)}
128
132
  Phi = ZZ['X,Y'](d)
129
133
 
130
134
  if l <= _cache_bound:
@@ -140,8 +144,11 @@ def classical_modular_polynomial(l, j=None):
140
144
  if l in _cache:
141
145
  return _cache[l](j, Y)
142
146
  try:
147
+ if _db is None:
148
+ from sage.databases.db_modular_polynomials import ClassicalModularPolynomialDatabase
149
+ _db = ClassicalModularPolynomialDatabase()
143
150
  Phi = _db[l]
144
- except ValueError:
151
+ except (ValueError, ImportError, FileNotFoundError):
145
152
  pass
146
153
  else:
147
154
  if l <= _cache_bound:
@@ -127,18 +127,24 @@ class pAdicLseries(SageObject):
127
127
 
128
128
  An example showing the calculation of nontrivial Teichmueller twists::
129
129
 
130
+ sage: # needs sage.graphs
130
131
  sage: E = EllipticCurve('11a1')
131
132
  sage: lp = E.padic_lseries(7)
132
- sage: lp.series(4,eta=1)
133
- 3 + 7^3 + 6*7^4 + 3*7^5 + O(7^6) + (2*7 + 7^2 + O(7^3))*T + (1 + 5*7^2 + O(7^3))*T^2 + (4 + 4*7 + 4*7^2 + O(7^3))*T^3 + (4 + 3*7 + 7^2 + O(7^3))*T^4 + O(T^5)
134
- sage: lp.series(4,eta=2)
135
- 5 + 6*7 + 4*7^2 + 2*7^3 + 3*7^4 + 2*7^5 + O(7^6) + (6 + 4*7 + 7^2 + O(7^3))*T + (3 + 2*7^2 + O(7^3))*T^2 + (1 + 4*7 + 7^2 + O(7^3))*T^3 + (6 + 6*7 + 6*7^2 + O(7^3))*T^4 + O(T^5)
136
- sage: lp.series(4,eta=3)
137
- O(7^6) + (5 + 4*7 + 2*7^2 + O(7^3))*T + (6 + 5*7 + 2*7^2 + O(7^3))*T^2 + (5*7 + O(7^3))*T^3 + (7 + 4*7^2 + O(7^3))*T^4 + O(T^5)
133
+ sage: lp.series(4, eta=1)
134
+ 3 + 7^3 + 6*7^4 + 3*7^5 + O(7^6)
135
+ + (2*7 + 7^2 + O(7^3))*T + (1 + 5*7^2 + O(7^3))*T^2
136
+ + (4 + 4*7 + 4*7^2 + O(7^3))*T^3 + (4 + 3*7 + 7^2 + O(7^3))*T^4 + O(T^5)
137
+ sage: lp.series(4, eta=2)
138
+ 5 + 6*7 + 4*7^2 + 2*7^3 + 3*7^4 + 2*7^5 + O(7^6)
139
+ + (6 + 4*7 + 7^2 + O(7^3))*T + (3 + 2*7^2 + O(7^3))*T^2
140
+ + (1 + 4*7 + 7^2 + O(7^3))*T^3 + (6 + 6*7 + 6*7^2 + O(7^3))*T^4 + O(T^5)
141
+ sage: lp.series(4, eta=3)
142
+ O(7^6) + (5 + 4*7 + 2*7^2 + O(7^3))*T + (6 + 5*7 + 2*7^2 + O(7^3))*T^2
143
+ + (5*7 + O(7^3))*T^3 + (7 + 4*7^2 + O(7^3))*T^4 + O(T^5)
138
144
 
139
145
  (Note that the last series vanishes at `T = 0`, which is consistent with ::
140
146
 
141
- sage: E.quadratic_twist(-7).rank()
147
+ sage: E.quadratic_twist(-7).rank() # needs sage.graphs
142
148
  1
143
149
 
144
150
  This proves that `E` has rank 1 over `\QQ(\zeta_7)`.)
@@ -311,7 +317,7 @@ class pAdicLseries(SageObject):
311
317
  sage: Et = E.quadratic_twist(-4)
312
318
  sage: lpt = Et.padic_lseries(5)
313
319
  sage: eta = lpt._quotient_of_periods_to_twist(-4)
314
- sage: lpt.modular_symbol(0) == lp.modular_symbol(0,quadratic_twist=-4) / eta
320
+ sage: lpt.modular_symbol(0) == lp.modular_symbol(0, quadratic_twist=-4) / eta # needs sage.graphs
315
321
  True
316
322
  """
317
323
  if quadratic_twist == +1:
@@ -397,9 +403,10 @@ class pAdicLseries(SageObject):
397
403
  sage: L.measure(1,2, quadratic_twist=-4, prec=15) # needs sage.graphs
398
404
  4 + 4*5 + 4*5^2 + 3*5^3 + 2*5^4 + 5^5 + 3*5^6 + 5^8 + 2*5^9 + 3*5^12 + 2*5^13 + 4*5^14 + O(5^15)
399
405
 
406
+ sage: # needs sage.graphs
400
407
  sage: E = EllipticCurve('11a1')
401
- sage: a = E.quadratic_twist(-3).padic_lseries(5).measure(1,2,prec=15)
402
- sage: b = E.padic_lseries(5).measure(1,2, quadratic_twist=-3,prec=15)
408
+ sage: a = E.quadratic_twist(-3).padic_lseries(5).measure(1,2, prec=15)
409
+ sage: b = E.padic_lseries(5).measure(1,2, quadratic_twist=-3, prec=15)
403
410
  sage: a == b * E.padic_lseries(5)._quotient_of_periods_to_twist(-3)
404
411
  True
405
412
  """
@@ -819,13 +826,14 @@ class pAdicLseriesOrdinary(pAdicLseries):
819
826
  sage: lp = E.padic_lseries(3)
820
827
  sage: lp.series(2, quadratic_twist=-19) # needs sage.graphs
821
828
  2 + 2*3 + 2*3^2 + O(3^4) + (1 + O(3))*T + (1 + O(3))*T^2 + O(T^3)
822
- sage: E.quadratic_twist(-19).label() # optional -- database_cremona_ellcurve
829
+ sage: E.quadratic_twist(-19).label() # optional -- database_cremona_ellcurve, needs sage.graphs
823
830
  '15523a1'
824
831
 
825
832
  This proves that the rank of '15523a1' is zero, even if ``mwrank`` cannot determine this.
826
833
 
827
834
  We calculate the `L`-series in the nontrivial Teichmueller components::
828
835
 
836
+ sage: # needs sage.graphs
829
837
  sage: L = EllipticCurve('110a1').padic_lseries(5, implementation='sage')
830
838
  sage: for j in [0..3]: print(L.series(4, eta=j))
831
839
  O(5^6) + (2 + 2*5 + 2*5^2 + O(5^3))*T + (5 + 5^2 + O(5^3))*T^2 + (4 + 4*5 + 2*5^2 + O(5^3))*T^3 + (1 + 5 + 3*5^2 + O(5^3))*T^4 + O(T^5)
@@ -837,16 +845,17 @@ class pAdicLseriesOrdinary(pAdicLseries):
837
845
 
838
846
  sage: E = EllipticCurve("53a1")
839
847
  sage: lp = E.padic_lseries(2)
840
- sage: lp.series(7)
848
+ sage: lp.series(7) # needs sage.graphs
841
849
  O(2^8) + (1 + 2^2 + 2^3 + O(2^5))*T + (1 + 2^3 + O(2^4))*T^2 + (2^2 + 2^3 + O(2^4))*T^3 + (2 + 2^2 + O(2^3))*T^4 + O(T^5)
842
850
 
843
851
  sage: E = EllipticCurve("109a1")
844
852
  sage: lp = E.padic_lseries(2)
845
- sage: lp.series(6)
853
+ sage: lp.series(6) # needs sage.graphs
846
854
  2^2 + 2^6 + O(2^7) + (2 + O(2^4))*T + O(2^3)*T^2 + (2^2 + O(2^3))*T^3 + (2 + O(2^2))*T^4 + O(T^5)
847
855
 
848
856
  Check that twists by odd Teichmuller characters are ok (:issue:`32258`)::
849
857
 
858
+ sage: # needs sage.graphs
850
859
  sage: E = EllipticCurve("443c1")
851
860
  sage: lp = E.padic_lseries(17, implementation='num')
852
861
  sage: l8 = lp.series(2,eta=8,prec=3)
@@ -1025,6 +1034,7 @@ class pAdicLseriesOrdinary(pAdicLseries):
1025
1034
 
1026
1035
  EXAMPLES::
1027
1036
 
1037
+ sage: # needs sage.graphs
1028
1038
  sage: E = EllipticCurve('11a1')
1029
1039
  sage: Lp = E.padic_lseries(5)
1030
1040
  sage: Lp._c_bound()
@@ -1470,6 +1480,7 @@ class pAdicLseriesSupersingular(pAdicLseries):
1470
1480
 
1471
1481
  EXAMPLES::
1472
1482
 
1483
+ sage: # needs sage.symbolic
1473
1484
  sage: E = EllipticCurve('14a')
1474
1485
  sage: L = E.padic_lseries(5)
1475
1486
  sage: phi = L.frobenius(5)
@@ -1714,6 +1725,7 @@ class pAdicLseriesSupersingular(pAdicLseries):
1714
1725
 
1715
1726
  EXAMPLES::
1716
1727
 
1728
+ sage: # needs sage.symbolic
1717
1729
  sage: E = EllipticCurve('43a')
1718
1730
  sage: L = E.padic_lseries(7)
1719
1731
  sage: L.Dp_valued_regulator(7)