passagemath-schemes 10.6.38__cp314-cp314t-macosx_13_0_arm64.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.

Potentially problematic release.


This version of passagemath-schemes might be problematic. Click here for more details.

Files changed (314) hide show
  1. passagemath_schemes/.dylibs/libflint.21.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.6.38.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.38.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.38.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.38.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.38.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314t-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-314t-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +720 -0
  40. sage/modular/abvar/homspace.py +998 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-314t-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-314t-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-314t-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-314t-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2017 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1071 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +815 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314t-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-314t-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list.cpython-314t-darwin.so +0 -0
  154. sage/modular/modsym/p1list.pxd +29 -0
  155. sage/modular/modsym/p1list.pyx +1372 -0
  156. sage/modular/modsym/p1list_nf.py +1241 -0
  157. sage/modular/modsym/relation_matrix.py +591 -0
  158. sage/modular/modsym/relation_matrix_pyx.cpython-314t-darwin.so +0 -0
  159. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  160. sage/modular/modsym/space.py +2468 -0
  161. sage/modular/modsym/subspace.py +455 -0
  162. sage/modular/modsym/tests.py +375 -0
  163. sage/modular/multiple_zeta.py +2632 -0
  164. sage/modular/multiple_zeta_F_algebra.py +786 -0
  165. sage/modular/overconvergent/all.py +6 -0
  166. sage/modular/overconvergent/genus0.py +1878 -0
  167. sage/modular/overconvergent/hecke_series.py +1187 -0
  168. sage/modular/overconvergent/weightspace.py +778 -0
  169. sage/modular/pollack_stevens/all.py +4 -0
  170. sage/modular/pollack_stevens/distributions.py +874 -0
  171. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  172. sage/modular/pollack_stevens/manin_map.py +859 -0
  173. sage/modular/pollack_stevens/modsym.py +1593 -0
  174. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  175. sage/modular/pollack_stevens/sigma0.py +534 -0
  176. sage/modular/pollack_stevens/space.py +1076 -0
  177. sage/modular/quasimodform/all.py +3 -0
  178. sage/modular/quasimodform/element.py +845 -0
  179. sage/modular/quasimodform/ring.py +828 -0
  180. sage/modular/quatalg/all.py +3 -0
  181. sage/modular/quatalg/brandt.py +1642 -0
  182. sage/modular/ssmod/all.py +8 -0
  183. sage/modular/ssmod/ssmod.py +827 -0
  184. sage/rings/all__sagemath_schemes.py +1 -0
  185. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  186. sage/rings/polynomial/binary_form_reduce.py +585 -0
  187. sage/schemes/all.py +41 -0
  188. sage/schemes/berkovich/all.py +6 -0
  189. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  190. sage/schemes/berkovich/berkovich_space.py +748 -0
  191. sage/schemes/curves/affine_curve.py +2928 -0
  192. sage/schemes/curves/all.py +33 -0
  193. sage/schemes/curves/closed_point.py +434 -0
  194. sage/schemes/curves/constructor.py +381 -0
  195. sage/schemes/curves/curve.py +542 -0
  196. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  197. sage/schemes/curves/point.py +463 -0
  198. sage/schemes/curves/projective_curve.py +3026 -0
  199. sage/schemes/curves/zariski_vankampen.py +1932 -0
  200. sage/schemes/cyclic_covers/all.py +2 -0
  201. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  202. sage/schemes/cyclic_covers/constructor.py +137 -0
  203. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  204. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  205. sage/schemes/elliptic_curves/BSD.py +1036 -0
  206. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  207. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  208. sage/schemes/elliptic_curves/all.py +49 -0
  209. sage/schemes/elliptic_curves/cardinality.py +609 -0
  210. sage/schemes/elliptic_curves/cm.py +1102 -0
  211. sage/schemes/elliptic_curves/constructor.py +1552 -0
  212. sage/schemes/elliptic_curves/ec_database.py +175 -0
  213. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  214. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  215. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  216. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  217. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  218. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  219. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  220. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  221. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  222. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  223. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  224. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  225. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  226. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  227. sage/schemes/elliptic_curves/formal_group.py +760 -0
  228. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  229. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  230. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  231. sage/schemes/elliptic_curves/heegner.py +7335 -0
  232. sage/schemes/elliptic_curves/height.py +2109 -0
  233. sage/schemes/elliptic_curves/hom.py +1406 -0
  234. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  235. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  236. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  237. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  238. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  239. sage/schemes/elliptic_curves/homset.py +271 -0
  240. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  241. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  242. sage/schemes/elliptic_curves/jacobian.py +237 -0
  243. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  244. sage/schemes/elliptic_curves/kraus.py +1014 -0
  245. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  246. sage/schemes/elliptic_curves/mod5family.py +105 -0
  247. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  248. sage/schemes/elliptic_curves/mod_sym_num.cpython-314t-darwin.so +0 -0
  249. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  250. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  251. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  252. sage/schemes/elliptic_curves/padics.py +1816 -0
  253. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  254. sage/schemes/elliptic_curves/period_lattice_region.cpython-314t-darwin.so +0 -0
  255. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  256. sage/schemes/elliptic_curves/saturation.py +715 -0
  257. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  258. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  259. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  260. sage/schemes/hyperelliptic_curves/all.py +6 -0
  261. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  265. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  266. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  267. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  271. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  272. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  273. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  274. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  275. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  276. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  277. sage/schemes/jacobians/all.py +2 -0
  278. sage/schemes/overview.py +161 -0
  279. sage/schemes/plane_conics/all.py +22 -0
  280. sage/schemes/plane_conics/con_field.py +1296 -0
  281. sage/schemes/plane_conics/con_finite_field.py +158 -0
  282. sage/schemes/plane_conics/con_number_field.py +456 -0
  283. sage/schemes/plane_conics/con_rational_field.py +406 -0
  284. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  285. sage/schemes/plane_conics/constructor.py +249 -0
  286. sage/schemes/plane_quartics/all.py +2 -0
  287. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  288. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  289. sage/schemes/riemann_surfaces/all.py +1 -0
  290. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  291. sage_wheels/share/cremona/cremona_mini.db +0 -0
  292. sage_wheels/share/ellcurves/rank0 +30427 -0
  293. sage_wheels/share/ellcurves/rank1 +31871 -0
  294. sage_wheels/share/ellcurves/rank10 +6 -0
  295. sage_wheels/share/ellcurves/rank11 +6 -0
  296. sage_wheels/share/ellcurves/rank12 +1 -0
  297. sage_wheels/share/ellcurves/rank14 +1 -0
  298. sage_wheels/share/ellcurves/rank15 +1 -0
  299. sage_wheels/share/ellcurves/rank17 +1 -0
  300. sage_wheels/share/ellcurves/rank19 +1 -0
  301. sage_wheels/share/ellcurves/rank2 +2388 -0
  302. sage_wheels/share/ellcurves/rank20 +1 -0
  303. sage_wheels/share/ellcurves/rank21 +1 -0
  304. sage_wheels/share/ellcurves/rank22 +1 -0
  305. sage_wheels/share/ellcurves/rank23 +1 -0
  306. sage_wheels/share/ellcurves/rank24 +1 -0
  307. sage_wheels/share/ellcurves/rank28 +1 -0
  308. sage_wheels/share/ellcurves/rank3 +836 -0
  309. sage_wheels/share/ellcurves/rank4 +10 -0
  310. sage_wheels/share/ellcurves/rank5 +5 -0
  311. sage_wheels/share/ellcurves/rank6 +5 -0
  312. sage_wheels/share/ellcurves/rank7 +5 -0
  313. sage_wheels/share/ellcurves/rank8 +6 -0
  314. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,14 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ #########################################################################
3
+ # Copyright (C) 2004--2006 William Stein <wstein@gmail.com>
4
+ #
5
+ # Distributed under the terms of the GNU General Public License (GPL)
6
+ #
7
+ # http://www.gnu.org/licenses/
8
+ #########################################################################
9
+
10
+ # The default precision for computation and display of q-expansions of
11
+ # modular forms.
12
+ from sage.rings.integer import Integer
13
+ DEFAULT_PRECISION = Integer(6)
14
+ DEFAULT_VARIABLE = 'q'
@@ -0,0 +1,505 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint sage.libs.pari
3
+ """
4
+ Eisenstein series
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2004-2006 William Stein <wstein@gmail.com>
8
+ #
9
+ # This program is free software: you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation, either version 2 of the License, or
12
+ # (at your option) any later version.
13
+ # https://www.gnu.org/licenses/
14
+ # ****************************************************************************
15
+
16
+ from sage.arith.functions import lcm
17
+ from sage.arith.misc import bernoulli, divisors, is_squarefree
18
+ from sage.misc.lazy_import import lazy_import
19
+ from sage.misc.timing import cputime
20
+ from sage.modular.arithgroup.congroup_gammaH import GammaH_class
21
+ from sage.modular.dirichlet import DirichletGroup
22
+ from sage.rings.integer import Integer
23
+ from sage.rings.integer_ring import ZZ
24
+ from sage.rings.power_series_ring import PowerSeriesRing
25
+ from sage.rings.rational_field import QQ
26
+
27
+ lazy_import('sage.modular.modform.eis_series_cython', ['eisenstein_series_poly', 'Ek_ZZ'])
28
+ lazy_import('sage.rings.number_field.number_field', 'CyclotomicField')
29
+
30
+
31
+ def eisenstein_series_qexp(k, prec=10, K=QQ, var='q', normalization='linear'):
32
+ r"""
33
+ Return the `q`-expansion of the normalized weight `k` Eisenstein series on
34
+ `\SL_2(\ZZ)` to precision ``prec`` in the ring `K`. Three normalizations
35
+ are available, depending on the parameter ``normalization``; the default
36
+ normalization is the one for which the linear coefficient is 1.
37
+
38
+ INPUT:
39
+
40
+ - ``k`` -- an even positive integer
41
+
42
+ - ``prec`` -- (default: 10) a nonnegative integer
43
+
44
+ - ``K`` -- (default: `\QQ`) a ring
45
+
46
+ - ``var`` -- (default: ``'q'``) variable name to use for `q`-expansion
47
+
48
+ - ``normalization`` -- (default: ``'linear'``) normalization to use. If this
49
+ is ``'linear'``, then the series will be normalized so that the linear
50
+ term is 1. If it is ``'constant'``, the series will be normalized to have
51
+ constant term 1. If it is ``'integral'``, then the series will be
52
+ normalized to have integer coefficients and no common factor, and linear
53
+ term that is positive. Note that ``'integral'`` will work over arbitrary
54
+ base rings, while ``'linear'`` or ``'constant'`` will fail if the
55
+ denominator (resp. numerator) of `B_k / 2k` is invertible.
56
+
57
+ ALGORITHM:
58
+
59
+ We know `E_k = \text{constant} + \sum_n \sigma_{k-1}(n) q^n`. So we
60
+ compute all the `\sigma_{k-1}(n)` simultaneously, using the fact that
61
+ `\sigma` is multiplicative.
62
+
63
+ EXAMPLES::
64
+
65
+ sage: eisenstein_series_qexp(2,5)
66
+ -1/24 + q + 3*q^2 + 4*q^3 + 7*q^4 + O(q^5)
67
+ sage: eisenstein_series_qexp(2,0)
68
+ O(q^0)
69
+ sage: eisenstein_series_qexp(2,5,GF(7))
70
+ 2 + q + 3*q^2 + 4*q^3 + O(q^5)
71
+ sage: eisenstein_series_qexp(2,5,GF(7),var='T')
72
+ 2 + T + 3*T^2 + 4*T^3 + O(T^5)
73
+
74
+ We illustrate the use of the ``normalization`` parameter::
75
+
76
+ sage: eisenstein_series_qexp(12, 5, normalization='integral')
77
+ 691 + 65520*q + 134250480*q^2 + 11606736960*q^3 + 274945048560*q^4 + O(q^5)
78
+ sage: eisenstein_series_qexp(12, 5, normalization='constant')
79
+ 1 + 65520/691*q + 134250480/691*q^2 + 11606736960/691*q^3 + 274945048560/691*q^4 + O(q^5)
80
+ sage: eisenstein_series_qexp(12, 5, normalization='linear')
81
+ 691/65520 + q + 2049*q^2 + 177148*q^3 + 4196353*q^4 + O(q^5)
82
+ sage: eisenstein_series_qexp(12, 50, K=GF(13), normalization='constant')
83
+ 1 + O(q^50)
84
+
85
+ TESTS:
86
+
87
+ Test that :issue:`5102` is fixed::
88
+
89
+ sage: eisenstein_series_qexp(10, 30, GF(17))
90
+ 15 + q + 3*q^2 + 15*q^3 + 7*q^4 + 13*q^5 + 11*q^6 + 11*q^7 + 15*q^8 + 7*q^9 + 5*q^10 + 7*q^11 + 3*q^12 + 14*q^13 + 16*q^14 + 8*q^15 + 14*q^16 + q^17 + 4*q^18 + 3*q^19 + 6*q^20 + 12*q^21 + 4*q^22 + 12*q^23 + 4*q^24 + 4*q^25 + 8*q^26 + 14*q^27 + 9*q^28 + 6*q^29 + O(q^30)
91
+
92
+ This shows that the bug reported at :issue:`8291` is fixed::
93
+
94
+ sage: eisenstein_series_qexp(26, 10, GF(13))
95
+ 7 + q + 3*q^2 + 4*q^3 + 7*q^4 + 6*q^5 + 12*q^6 + 8*q^7 + 2*q^8 + O(q^10)
96
+
97
+ We check that the function behaves properly over finite-characteristic base rings::
98
+
99
+ sage: eisenstein_series_qexp(12, 5, K = Zmod(691), normalization='integral')
100
+ 566*q + 236*q^2 + 286*q^3 + 194*q^4 + O(q^5)
101
+ sage: eisenstein_series_qexp(12, 5, K = Zmod(691), normalization='constant')
102
+ Traceback (most recent call last):
103
+ ...
104
+ ValueError: The numerator of -B_k/(2*k) (=691) must be invertible in the ring Ring of integers modulo 691
105
+ sage: eisenstein_series_qexp(12, 5, K = Zmod(691), normalization='linear')
106
+ q + 667*q^2 + 252*q^3 + 601*q^4 + O(q^5)
107
+
108
+ sage: eisenstein_series_qexp(12, 5, K = Zmod(2), normalization='integral')
109
+ 1 + O(q^5)
110
+ sage: eisenstein_series_qexp(12, 5, K = Zmod(2), normalization='constant')
111
+ 1 + O(q^5)
112
+ sage: eisenstein_series_qexp(12, 5, K = Zmod(2), normalization='linear')
113
+ Traceback (most recent call last):
114
+ ...
115
+ ValueError: The denominator of -B_k/(2*k) (=65520) must be invertible in the ring Ring of integers modulo 2
116
+
117
+ AUTHORS:
118
+
119
+ - William Stein: original implementation
120
+
121
+ - Craig Citro (2007-06-01): rewrote for massive speedup
122
+
123
+ - Martin Raum (2009-08-02): port to cython for speedup
124
+
125
+ - David Loeffler (2010-04-07): work around an integer overflow when `k` is large
126
+
127
+ - David Loeffler (2012-03-15): add options for alternative normalizations
128
+ (motivated by :issue:`12043`)
129
+ """
130
+ # we use this to prevent computation if it would fail anyway.
131
+ if k <= 0 or k % 2 == 1:
132
+ raise ValueError("k must be positive and even")
133
+
134
+ a0 = - bernoulli(k) / (2*k)
135
+
136
+ if normalization == 'linear':
137
+ a0den = a0.denominator()
138
+ try:
139
+ a0fac = K(1/a0den)
140
+ except ZeroDivisionError:
141
+ raise ValueError("The denominator of -B_k/(2*k) (=%s) must be invertible in the ring %s" % (a0den, K))
142
+ elif normalization == 'constant':
143
+ a0num = a0.numerator()
144
+ try:
145
+ a0fac = K(1/a0num)
146
+ except ZeroDivisionError:
147
+ raise ValueError("The numerator of -B_k/(2*k) (=%s) must be invertible in the ring %s" % (a0num, K))
148
+ elif normalization == 'integral':
149
+ a0fac = None
150
+ else:
151
+ raise ValueError("Normalization (=%s) must be one of 'linear', 'constant', 'integral'" % normalization)
152
+
153
+ R = PowerSeriesRing(K, var)
154
+ if K == QQ and normalization == 'linear':
155
+ ls = Ek_ZZ(k, prec)
156
+ # The following is *dramatically* faster than doing the more natural
157
+ # "R(ls)" would be:
158
+ E = ZZ[var](ls, prec=prec, check=False).change_ring(QQ)
159
+ if len(ls) > 0:
160
+ E._unsafe_mutate(0, a0)
161
+ return R(E, prec)
162
+ # The following is an older slower alternative to the above three lines:
163
+ # return a0fac*R(eisenstein_series_poly(k, prec).list(), prec=prec, check=False)
164
+ else:
165
+ # This used to work with check=False, but that can only be regarded as
166
+ # an improbable lucky miracle. Enabling checking is a noticeable speed
167
+ # regression; the morally right fix would be to expose FLINT's
168
+ # fmpz_poly_to_nmod_poly command (at least for word-sized N).
169
+ if a0fac is not None:
170
+ return a0fac*R(eisenstein_series_poly(k, prec).list(), prec=prec, check=True)
171
+ else:
172
+ return R(eisenstein_series_poly(k, prec).list(), prec=prec, check=True)
173
+
174
+
175
+ def __common_minimal_basering(chi, psi):
176
+ """
177
+ Find the smallest basering over which chi and psi are valued, and
178
+ return new chi and psi valued in that ring.
179
+
180
+ EXAMPLES::
181
+
182
+ sage: # needs sage.rings.number_field
183
+ sage: sage.modular.modform.eis_series.__common_minimal_basering(DirichletGroup(1)[0], DirichletGroup(1)[0])
184
+ (Dirichlet character modulo 1 of conductor 1,
185
+ Dirichlet character modulo 1 of conductor 1)
186
+ sage: sage.modular.modform.eis_series.__common_minimal_basering(DirichletGroup(3).0, DirichletGroup(5).0)
187
+ (Dirichlet character modulo 3 of conductor 3 mapping 2 |--> -1,
188
+ Dirichlet character modulo 5 of conductor 5 mapping 2 |--> zeta4)
189
+ sage: sage.modular.modform.eis_series.__common_minimal_basering(DirichletGroup(12).0, DirichletGroup(36).0)
190
+ (Dirichlet character modulo 12 of conductor 4 mapping 7 |--> -1, 5 |--> 1,
191
+ Dirichlet character modulo 36 of conductor 4 mapping 19 |--> -1, 29 |--> 1)
192
+ """
193
+ chi = chi.minimize_base_ring()
194
+ psi = psi.minimize_base_ring()
195
+ n = lcm(chi.base_ring().zeta().multiplicative_order(),
196
+ psi.base_ring().zeta().multiplicative_order())
197
+ if n <= 2:
198
+ K = QQ
199
+ else:
200
+ K = CyclotomicField(n)
201
+ chi = chi.change_ring(K)
202
+ psi = psi.change_ring(K)
203
+ return chi, psi
204
+
205
+
206
+ def __find_eisen_chars(character, k):
207
+ r"""
208
+ Find all triples `(\psi_1, \psi_2, t)` that give rise to an Eisenstein series of the given weight and character.
209
+
210
+ EXAMPLES::
211
+
212
+ sage: sage.modular.modform.eis_series.__find_eisen_chars(DirichletGroup(36).0, 4)
213
+ []
214
+
215
+ sage: pars = sage.modular.modform.eis_series.__find_eisen_chars(DirichletGroup(36).0, 5)
216
+ sage: [(x[0].values_on_gens(), x[1].values_on_gens(), x[2]) for x in pars]
217
+ [((1, 1), (-1, 1), 1),
218
+ ((1, 1), (-1, 1), 3),
219
+ ((1, 1), (-1, 1), 9),
220
+ ((1, -1), (-1, -1), 1),
221
+ ((-1, 1), (1, 1), 1),
222
+ ((-1, 1), (1, 1), 3),
223
+ ((-1, 1), (1, 1), 9),
224
+ ((-1, -1), (1, -1), 1)]
225
+ """
226
+ from sage.misc.verbose import verbose
227
+
228
+ N = character.modulus()
229
+ if character.is_trivial():
230
+ if k % 2:
231
+ return []
232
+ char_inv = ~character
233
+ V = [(character, char_inv, t) for t in divisors(N) if t > 1]
234
+ if k != 2:
235
+ V.insert(0, (character, char_inv, 1))
236
+ if is_squarefree(N):
237
+ return V
238
+ # Now include all pairs (chi,chi^(-1)) such that cond(chi)^2 divides N:
239
+ # TODO: Optimize -- this is presumably way too hard work below.
240
+ G = DirichletGroup(N)
241
+ for chi in G:
242
+ if not chi.is_trivial():
243
+ f = chi.conductor()
244
+ if N % (f**2) == 0:
245
+ chi = chi.minimize_base_ring()
246
+ chi_inv = ~chi
247
+ for t in divisors(N//(f**2)):
248
+ V.insert(0, (chi, chi_inv, t))
249
+ return V
250
+
251
+ eps = character
252
+ if eps(-1) != (-1)**k:
253
+ return []
254
+ eps = eps.maximize_base_ring()
255
+ G = eps.parent()
256
+
257
+ # Find all pairs chi, psi such that:
258
+ #
259
+ # (1) cond(chi)*cond(psi) divides the level, and
260
+ #
261
+ # (2) chi*psi == eps, where eps is the nebentypus character of self.
262
+ #
263
+ # See [Miyake, Modular Forms] Lemma 7.1.1.
264
+
265
+ C = {}
266
+
267
+ t0 = cputime()
268
+
269
+ for e in G:
270
+ m = Integer(e.conductor())
271
+ if m in C:
272
+ C[m].append(e)
273
+ else:
274
+ C[m] = [e]
275
+
276
+ verbose("Enumeration with conductors.", t0)
277
+
278
+ params = []
279
+ for L in divisors(N):
280
+ verbose("divisor %s" % L)
281
+ if L not in C:
282
+ continue
283
+ GL = C[L]
284
+ for R in divisors(N // L):
285
+ if R not in C:
286
+ continue
287
+ GR = C[R]
288
+ for chi in GL:
289
+ for psi in GR:
290
+ if chi*psi == eps:
291
+ chi0, psi0 = __common_minimal_basering(chi, psi)
292
+ for t in divisors(N//(R*L)):
293
+ if k != 1 or (psi0, chi0, t) not in params:
294
+ params.append((chi0, psi0, t))
295
+ return params
296
+
297
+
298
+ def __find_eisen_chars_gammaH(N, H, k):
299
+ r"""
300
+ Find all triples `(\psi_1, \psi_2, t)` that give rise to an Eisenstein series of weight `k` on
301
+ `\Gamma_H(N)`.
302
+
303
+ EXAMPLES::
304
+
305
+ sage: pars = sage.modular.modform.eis_series.__find_eisen_chars_gammaH(15, [2], 5)
306
+ sage: [(x[0].values_on_gens(), x[1].values_on_gens(), x[2]) for x in pars]
307
+ [((1, 1), (-1, -1), 1), ((-1, 1), (1, -1), 1), ((1, -1), (-1, 1), 1), ((-1, -1), (1, 1), 1)]
308
+ """
309
+ params = []
310
+ for chi in DirichletGroup(N):
311
+ if all(chi(h) == 1 for h in H):
312
+ params += __find_eisen_chars(chi, k)
313
+ return params
314
+
315
+
316
+ def __find_eisen_chars_gamma1(N, k):
317
+ r"""
318
+ Find all triples `(\psi_1, \psi_2, t)` that give rise to an Eisenstein series of weight `k` on
319
+ `\Gamma_1(N)`.
320
+
321
+ EXAMPLES::
322
+
323
+ sage: pars = sage.modular.modform.eis_series.__find_eisen_chars_gamma1(12, 4)
324
+ sage: [(x[0].values_on_gens(), x[1].values_on_gens(), x[2]) for x in pars]
325
+ [((1, 1), (1, 1), 1),
326
+ ((1, 1), (1, 1), 2),
327
+ ((1, 1), (1, 1), 3),
328
+ ((1, 1), (1, 1), 4),
329
+ ((1, 1), (1, 1), 6),
330
+ ((1, 1), (1, 1), 12),
331
+ ((1, 1), (-1, -1), 1),
332
+ ((-1, -1), (1, 1), 1),
333
+ ((-1, 1), (1, -1), 1),
334
+ ((1, -1), (-1, 1), 1)]
335
+
336
+ sage: pars = sage.modular.modform.eis_series.__find_eisen_chars_gamma1(12, 5)
337
+ sage: [(x[0].values_on_gens(), x[1].values_on_gens(), x[2]) for x in pars]
338
+ [((1, 1), (-1, 1), 1),
339
+ ((1, 1), (-1, 1), 3),
340
+ ((-1, 1), (1, 1), 1),
341
+ ((-1, 1), (1, 1), 3),
342
+ ((1, 1), (1, -1), 1),
343
+ ((1, 1), (1, -1), 2),
344
+ ((1, 1), (1, -1), 4),
345
+ ((1, -1), (1, 1), 1),
346
+ ((1, -1), (1, 1), 2),
347
+ ((1, -1), (1, 1), 4)]
348
+ """
349
+ pairs = []
350
+ s = (-1)**k
351
+ G = DirichletGroup(N)
352
+ E = list(G)
353
+ parity = [c(-1) for c in E]
354
+ for i in range(len(E)):
355
+ for j in range(i,len(E)):
356
+ if parity[i]*parity[j] == s and N % (E[i].conductor()*E[j].conductor()) == 0:
357
+ chi, psi = __common_minimal_basering(E[i], E[j])
358
+ if k != 1:
359
+ pairs.append((chi, psi))
360
+ if i != j:
361
+ pairs.append((psi, chi))
362
+ else:
363
+ # if weight is 1 then (chi, psi) and (chi, psi) are the
364
+ # same form
365
+ if psi.is_trivial() and not chi.is_trivial():
366
+ # need to put the trivial character first to get the L-value right
367
+ pairs.append((psi, chi))
368
+ else:
369
+ pairs.append((chi, psi))
370
+
371
+ triples = []
372
+ for chi, psi in pairs:
373
+ c_chi = chi.conductor()
374
+ c_psi = psi.conductor()
375
+ D = divisors(N // (c_chi * c_psi))
376
+ if k == 2 and chi.is_trivial() and psi.is_trivial():
377
+ D.remove(1)
378
+ chi, psi = __common_minimal_basering(chi, psi)
379
+ triples.extend((chi, psi, t) for t in D)
380
+
381
+ return triples
382
+
383
+
384
+ def eisenstein_series_lseries(weight, prec=53,
385
+ max_imaginary_part=0,
386
+ max_asymp_coeffs=40):
387
+ r"""
388
+ Return the `L`-series of the weight `2k` Eisenstein series `E_{2k}`
389
+ on `\SL_2(\ZZ)`.
390
+
391
+ This actually returns an interface to Tim Dokchitser's program
392
+ for computing with the `L`-series of the Eisenstein series.
393
+ See :class:`~sage.lfunctions.dokchitser.Dokchitser`.
394
+
395
+ INPUT:
396
+
397
+ - ``weight`` -- even integer
398
+
399
+ - ``prec`` -- integer (bits precision)
400
+
401
+ - ``max_imaginary_part`` -- real number
402
+
403
+ - ``max_asymp_coeffs`` -- integer
404
+
405
+ OUTPUT: the `L`-series of the Eisenstein series. This can be
406
+ evaluated at argument `s`, or have
407
+ :meth:`~sage.lfunctions.dokchitser.Dokchitser.derivative` called, etc.
408
+
409
+ EXAMPLES:
410
+
411
+ We compute with the `L`-series of `E_{16}` and then `E_{20}`::
412
+
413
+ sage: L = eisenstein_series_lseries(16)
414
+ sage: L(1)
415
+ -0.291657724743874
416
+ sage: L.derivative(1)
417
+ 0.0756072194360656
418
+ sage: L = eisenstein_series_lseries(20)
419
+ sage: L(2)
420
+ -5.02355351645998
421
+
422
+ Now with higher precision::
423
+
424
+ sage: L = eisenstein_series_lseries(20, prec=200)
425
+ sage: L(2)
426
+ -5.0235535164599797471968418348135050804419155747868718371029
427
+ """
428
+ f = eisenstein_series_qexp(weight, prec)
429
+ from sage.lfunctions.dokchitser import Dokchitser
430
+ j = weight
431
+ L = Dokchitser(conductor=1,
432
+ gammaV=[0, 1],
433
+ weight=j,
434
+ eps=(-1)**Integer(j // 2),
435
+ poles=[j],
436
+ # Using a string for residues is a hack but it works well
437
+ # since this will make PARI/GP compute sqrt(pi) with the
438
+ # right precision.
439
+ residues='[sqrt(Pi)*(%s)]' % ((-1)**Integer(j // 2) * bernoulli(j) / j),
440
+ prec=prec)
441
+
442
+ s = 'coeff = %s;' % f.list()
443
+ L.init_coeffs('coeff[k+1]', pari_precode=s,
444
+ max_imaginary_part=max_imaginary_part,
445
+ max_asymp_coeffs=max_asymp_coeffs)
446
+ L.check_functional_equation()
447
+ L.rename('L-series associated to the weight %s Eisenstein series %s on SL_2(Z)' % (j, f))
448
+ return L
449
+
450
+
451
+ def compute_eisenstein_params(character, k):
452
+ r"""
453
+ Compute and return a list of all parameters `(\chi,\psi,t)` that
454
+ define the Eisenstein series with given character and weight `k`.
455
+
456
+ Only the parity of `k` is relevant (unless k = 1, which is a slightly different case).
457
+
458
+ If ``character`` is an integer `N`, then the parameters for
459
+ `\Gamma_1(N)` are computed instead. Then the condition is that
460
+ `\chi(-1)*\psi(-1) =(-1)^k`.
461
+
462
+ If ``character`` is a list of integers, the parameters for `\Gamma_H(N)` are
463
+ computed, where `H` is the subgroup of `(\ZZ/N\ZZ)^\times` generated by the
464
+ integers in the given list.
465
+
466
+ EXAMPLES::
467
+
468
+ sage: sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(30)(1), 3)
469
+ []
470
+
471
+ sage: pars = sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(30)(1), 4)
472
+ sage: [(x[0].values_on_gens(), x[1].values_on_gens(), x[2]) for x in pars]
473
+ [((1, 1), (1, 1), 1),
474
+ ((1, 1), (1, 1), 2),
475
+ ((1, 1), (1, 1), 3),
476
+ ((1, 1), (1, 1), 5),
477
+ ((1, 1), (1, 1), 6),
478
+ ((1, 1), (1, 1), 10),
479
+ ((1, 1), (1, 1), 15),
480
+ ((1, 1), (1, 1), 30)]
481
+
482
+ sage: pars = sage.modular.modform.eis_series.compute_eisenstein_params(15, 1)
483
+ sage: [(x[0].values_on_gens(), x[1].values_on_gens(), x[2]) for x in pars]
484
+ [((1, 1), (-1, 1), 1),
485
+ ((1, 1), (-1, 1), 5),
486
+ ((1, 1), (1, zeta4), 1),
487
+ ((1, 1), (1, zeta4), 3),
488
+ ((1, 1), (-1, -1), 1),
489
+ ((1, 1), (1, -zeta4), 1),
490
+ ((1, 1), (1, -zeta4), 3),
491
+ ((-1, 1), (1, -1), 1)]
492
+
493
+ sage: sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(15).0, 1)
494
+ [(Dirichlet character modulo 15 of conductor 1 mapping 11 |--> 1, 7 |--> 1, Dirichlet character modulo 15 of conductor 3 mapping 11 |--> -1, 7 |--> 1, 1),
495
+ (Dirichlet character modulo 15 of conductor 1 mapping 11 |--> 1, 7 |--> 1, Dirichlet character modulo 15 of conductor 3 mapping 11 |--> -1, 7 |--> 1, 5)]
496
+
497
+ sage: len(sage.modular.modform.eis_series.compute_eisenstein_params(GammaH(15, [4]), 3))
498
+ 8
499
+ """
500
+ if isinstance(character, (int, Integer)):
501
+ return __find_eisen_chars_gamma1(character, k)
502
+ elif isinstance(character, GammaH_class):
503
+ return __find_eisen_chars_gammaH(character.level(), character._generators_for_H(), k)
504
+ else:
505
+ return __find_eisen_chars(character, k)