passagemath-schemes 10.6.47__cp312-cp312-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.
Files changed (311) hide show
  1. passagemath_schemes/.dylibs/libflint.22.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.47.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
  9. passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.47.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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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_nf.py +1241 -0
  154. sage/modular/modsym/relation_matrix.py +591 -0
  155. sage/modular/modsym/relation_matrix_pyx.cpython-312-darwin.so +0 -0
  156. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  157. sage/modular/modsym/space.py +2468 -0
  158. sage/modular/modsym/subspace.py +455 -0
  159. sage/modular/modsym/tests.py +375 -0
  160. sage/modular/multiple_zeta.py +2632 -0
  161. sage/modular/multiple_zeta_F_algebra.py +786 -0
  162. sage/modular/overconvergent/all.py +6 -0
  163. sage/modular/overconvergent/genus0.py +1878 -0
  164. sage/modular/overconvergent/hecke_series.py +1187 -0
  165. sage/modular/overconvergent/weightspace.py +778 -0
  166. sage/modular/pollack_stevens/all.py +4 -0
  167. sage/modular/pollack_stevens/distributions.py +874 -0
  168. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  169. sage/modular/pollack_stevens/manin_map.py +859 -0
  170. sage/modular/pollack_stevens/modsym.py +1593 -0
  171. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  172. sage/modular/pollack_stevens/sigma0.py +534 -0
  173. sage/modular/pollack_stevens/space.py +1076 -0
  174. sage/modular/quasimodform/all.py +3 -0
  175. sage/modular/quasimodform/element.py +845 -0
  176. sage/modular/quasimodform/ring.py +828 -0
  177. sage/modular/quatalg/all.py +3 -0
  178. sage/modular/quatalg/brandt.py +1642 -0
  179. sage/modular/ssmod/all.py +8 -0
  180. sage/modular/ssmod/ssmod.py +827 -0
  181. sage/rings/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  183. sage/rings/polynomial/binary_form_reduce.py +585 -0
  184. sage/schemes/all.py +41 -0
  185. sage/schemes/berkovich/all.py +6 -0
  186. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  187. sage/schemes/berkovich/berkovich_space.py +748 -0
  188. sage/schemes/curves/affine_curve.py +2928 -0
  189. sage/schemes/curves/all.py +33 -0
  190. sage/schemes/curves/closed_point.py +434 -0
  191. sage/schemes/curves/constructor.py +381 -0
  192. sage/schemes/curves/curve.py +542 -0
  193. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  194. sage/schemes/curves/point.py +463 -0
  195. sage/schemes/curves/projective_curve.py +3026 -0
  196. sage/schemes/curves/zariski_vankampen.py +1932 -0
  197. sage/schemes/cyclic_covers/all.py +2 -0
  198. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  199. sage/schemes/cyclic_covers/constructor.py +137 -0
  200. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  201. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  202. sage/schemes/elliptic_curves/BSD.py +1036 -0
  203. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  204. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  205. sage/schemes/elliptic_curves/all.py +49 -0
  206. sage/schemes/elliptic_curves/cardinality.py +609 -0
  207. sage/schemes/elliptic_curves/cm.py +1102 -0
  208. sage/schemes/elliptic_curves/constructor.py +1552 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  214. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  215. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  216. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  217. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  218. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  219. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  221. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  222. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  223. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  224. sage/schemes/elliptic_curves/formal_group.py +760 -0
  225. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  226. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7335 -0
  229. sage/schemes/elliptic_curves/height.py +2109 -0
  230. sage/schemes/elliptic_curves/hom.py +1406 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  232. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  233. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  234. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  235. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  236. sage/schemes/elliptic_curves/homset.py +271 -0
  237. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  238. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  239. sage/schemes/elliptic_curves/jacobian.py +237 -0
  240. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  241. sage/schemes/elliptic_curves/kraus.py +1014 -0
  242. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  243. sage/schemes/elliptic_curves/mod5family.py +105 -0
  244. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  245. sage/schemes/elliptic_curves/mod_sym_num.cpython-312-darwin.so +0 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  247. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  248. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  249. sage/schemes/elliptic_curves/padics.py +1816 -0
  250. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  251. sage/schemes/elliptic_curves/period_lattice_region.cpython-312-darwin.so +0 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  253. sage/schemes/elliptic_curves/saturation.py +715 -0
  254. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  255. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  256. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  257. sage/schemes/hyperelliptic_curves/all.py +6 -0
  258. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  259. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  264. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  265. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  270. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  271. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  272. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  273. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  274. sage/schemes/jacobians/all.py +2 -0
  275. sage/schemes/overview.py +161 -0
  276. sage/schemes/plane_conics/all.py +22 -0
  277. sage/schemes/plane_conics/con_field.py +1296 -0
  278. sage/schemes/plane_conics/con_finite_field.py +158 -0
  279. sage/schemes/plane_conics/con_number_field.py +456 -0
  280. sage/schemes/plane_conics/con_rational_field.py +406 -0
  281. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  282. sage/schemes/plane_conics/constructor.py +249 -0
  283. sage/schemes/plane_quartics/all.py +2 -0
  284. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  285. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  286. sage/schemes/riemann_surfaces/all.py +1 -0
  287. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  288. sage_wheels/share/cremona/cremona_mini.db +0 -0
  289. sage_wheels/share/ellcurves/rank0 +30427 -0
  290. sage_wheels/share/ellcurves/rank1 +31871 -0
  291. sage_wheels/share/ellcurves/rank10 +6 -0
  292. sage_wheels/share/ellcurves/rank11 +6 -0
  293. sage_wheels/share/ellcurves/rank12 +1 -0
  294. sage_wheels/share/ellcurves/rank14 +1 -0
  295. sage_wheels/share/ellcurves/rank15 +1 -0
  296. sage_wheels/share/ellcurves/rank17 +1 -0
  297. sage_wheels/share/ellcurves/rank19 +1 -0
  298. sage_wheels/share/ellcurves/rank2 +2388 -0
  299. sage_wheels/share/ellcurves/rank20 +1 -0
  300. sage_wheels/share/ellcurves/rank21 +1 -0
  301. sage_wheels/share/ellcurves/rank22 +1 -0
  302. sage_wheels/share/ellcurves/rank23 +1 -0
  303. sage_wheels/share/ellcurves/rank24 +1 -0
  304. sage_wheels/share/ellcurves/rank28 +1 -0
  305. sage_wheels/share/ellcurves/rank3 +836 -0
  306. sage_wheels/share/ellcurves/rank4 +10 -0
  307. sage_wheels/share/ellcurves/rank5 +5 -0
  308. sage_wheels/share/ellcurves/rank6 +5 -0
  309. sage_wheels/share/ellcurves/rank7 +5 -0
  310. sage_wheels/share/ellcurves/rank8 +6 -0
  311. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,580 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.gap
3
+ r"""
4
+ Series constructor for modular forms for Hecke triangle groups
5
+
6
+ AUTHORS:
7
+
8
+ - Based on the thesis of John Garrett Leo (2008)
9
+ - Jonas Jermann (2013): initial version
10
+
11
+ .. NOTE::
12
+
13
+ ``J_inv_ZZ`` is the main function used to determine all Fourier expansions.
14
+ """
15
+
16
+ # ****************************************************************************
17
+ # Copyright (C) 2013-2014 Jonas Jermann <jjermann2@gmail.com>
18
+ #
19
+ # Distributed under the terms of the GNU General Public License (GPL)
20
+ # as published by the Free Software Foundation; either version 2 of
21
+ # the License, or (at your option) any later version.
22
+ # https://www.gnu.org/licenses/
23
+ # ****************************************************************************
24
+
25
+ from sage.arith.misc import bernoulli, sigma, rising_factorial
26
+ from sage.misc.cachefunc import cached_method
27
+ from sage.rings.big_oh import O
28
+ from sage.rings.infinity import infinity
29
+ from sage.rings.integer_ring import ZZ
30
+ from sage.rings.power_series_ring import PowerSeriesRing
31
+ from sage.rings.rational_field import QQ
32
+ from sage.structure.sage_object import SageObject
33
+ from sage.structure.unique_representation import UniqueRepresentation
34
+
35
+ from .hecke_triangle_groups import HeckeTriangleGroup
36
+
37
+
38
+ class MFSeriesConstructor(SageObject, UniqueRepresentation):
39
+ r"""
40
+ Constructor for the Fourier expansion of some
41
+ (specific, basic) modular forms.
42
+
43
+ The constructor is used by forms elements in case
44
+ their Fourier expansion is needed or requested.
45
+ """
46
+
47
+ @staticmethod
48
+ def __classcall__(cls, group=HeckeTriangleGroup(3), prec=ZZ(10)):
49
+ r"""
50
+ Return a (cached) instance with canonical parameters.
51
+
52
+ .. NOTE::
53
+
54
+ For each choice of group and precision the constructor is
55
+ cached (only) once. Further calculations with different
56
+ base rings and possibly numerical parameters are based on
57
+ the same cached instance.
58
+
59
+ EXAMPLES::
60
+
61
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
62
+ sage: MFSeriesConstructor() == MFSeriesConstructor(3, 10)
63
+ True
64
+ sage: MFSeriesConstructor(group=4).hecke_n()
65
+ 4
66
+ sage: MFSeriesConstructor(group=5, prec=12).prec()
67
+ 12
68
+ """
69
+ if (group == infinity):
70
+ group = HeckeTriangleGroup(infinity)
71
+ else:
72
+ try:
73
+ group = HeckeTriangleGroup(ZZ(group))
74
+ except TypeError:
75
+ group = HeckeTriangleGroup(group.n())
76
+ prec = ZZ(prec)
77
+ # We don't need this assumption the precision may in principle also be negative.
78
+ # if (prec<1):
79
+ # raise Exception("prec must be an Integer >=1")
80
+
81
+ return super().__classcall__(cls, group, prec)
82
+
83
+ def __init__(self, group, prec):
84
+ r"""
85
+ Constructor for the Fourier expansion of some
86
+ (specific, basic) modular forms.
87
+
88
+ INPUT:
89
+
90
+ - ``group`` -- a Hecke triangle group (default: HeckeTriangleGroup(3))
91
+
92
+ - ``prec`` -- integer (default: 10), the default precision used in
93
+ calculations in the LaurentSeriesRing or PowerSeriesRing
94
+
95
+ OUTPUT: the constructor for Fourier expansion with the specified settings
96
+
97
+ EXAMPLES::
98
+
99
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
100
+ sage: MFC = MFSeriesConstructor()
101
+ sage: MFC
102
+ Power series constructor for Hecke modular forms for n=3 with (basic series) precision 10
103
+ sage: MFC.group()
104
+ Hecke triangle group for n = 3
105
+ sage: MFC.prec()
106
+ 10
107
+ sage: MFC._series_ring
108
+ Power Series Ring in q over Rational Field
109
+
110
+ sage: MFSeriesConstructor(group=4)
111
+ Power series constructor for Hecke modular forms for n=4 with (basic series) precision 10
112
+ sage: MFSeriesConstructor(group=5, prec=12)
113
+ Power series constructor for Hecke modular forms for n=5 with (basic series) precision 12
114
+ sage: MFSeriesConstructor(group=infinity)
115
+ Power series constructor for Hecke modular forms for n=+Infinity with (basic series) precision 10
116
+ """
117
+ self._group = group
118
+ self._prec = prec
119
+ self._series_ring = PowerSeriesRing(QQ, 'q', default_prec=self._prec)
120
+
121
+ def _repr_(self):
122
+ r"""
123
+ Return the string representation of ``self``.
124
+
125
+ EXAMPLES::
126
+
127
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
128
+ sage: MFSeriesConstructor(group=4)
129
+ Power series constructor for Hecke modular forms for n=4 with (basic series) precision 10
130
+
131
+ sage: MFSeriesConstructor(group=5, prec=12)
132
+ Power series constructor for Hecke modular forms for n=5 with (basic series) precision 12
133
+ """
134
+
135
+ return "Power series constructor for Hecke modular forms for n={} with (basic series) precision {}".\
136
+ format(self._group.n(), self._prec)
137
+
138
+ def group(self):
139
+ r"""
140
+ Return the (Hecke triangle) group of ``self``.
141
+
142
+ EXAMPLES::
143
+
144
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
145
+ sage: MFSeriesConstructor(group=4).group()
146
+ Hecke triangle group for n = 4
147
+ """
148
+ return self._group
149
+
150
+ def hecke_n(self):
151
+ r"""
152
+ Return the parameter ``n`` of the (Hecke triangle) group of ``self``.
153
+
154
+ EXAMPLES::
155
+
156
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
157
+ sage: MFSeriesConstructor(group=4).hecke_n()
158
+ 4
159
+ """
160
+ return self._group.n()
161
+
162
+ def prec(self):
163
+ r"""
164
+ Return the used default precision for the PowerSeriesRing or LaurentSeriesRing.
165
+
166
+ EXAMPLES::
167
+
168
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
169
+ sage: MFSeriesConstructor(group=5).prec()
170
+ 10
171
+ sage: MFSeriesConstructor(group=5, prec=20).prec()
172
+ 20
173
+ """
174
+ return self._prec
175
+
176
+ @cached_method
177
+ def J_inv_ZZ(self):
178
+ r"""
179
+ Return the rational Fourier expansion of ``J_inv``,
180
+ where the parameter ``d`` is replaced by ``1``.
181
+
182
+ This is the main function used to determine all Fourier expansions!
183
+
184
+ .. NOTE::
185
+
186
+ The Fourier expansion of ``J_inv`` for ``d!=1``
187
+ is given by ``J_inv_ZZ(q/d)``.
188
+
189
+ .. TODO::
190
+
191
+ The functions that are used in this implementation are
192
+ products of hypergeometric series with other, elementary,
193
+ functions. Implement them and clean up this representation.
194
+
195
+ EXAMPLES::
196
+
197
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
198
+ sage: MFSeriesConstructor(prec=3).J_inv_ZZ()
199
+ q^-1 + 31/72 + 1823/27648*q + O(q^2)
200
+ sage: MFSeriesConstructor(group=5, prec=3).J_inv_ZZ()
201
+ q^-1 + 79/200 + 42877/640000*q + O(q^2)
202
+ sage: MFSeriesConstructor(group=5, prec=3).J_inv_ZZ().parent()
203
+ Laurent Series Ring in q over Rational Field
204
+
205
+ sage: MFSeriesConstructor(group=infinity, prec=3).J_inv_ZZ()
206
+ q^-1 + 3/8 + 69/1024*q + O(q^2)
207
+ """
208
+ def F1(a, b):
209
+ return self._series_ring(
210
+ [ZZ.zero()]
211
+ + [rising_factorial(a, k) * rising_factorial(b, k) / (ZZ(k).factorial())**2
212
+ * sum(ZZ.one()/(a+j) + ZZ.one()/(b+j) - ZZ(2)/ZZ(1+j)
213
+ for j in range(k))
214
+ for k in range(1, self._prec + 1)
215
+ ],
216
+ ZZ(self._prec + 1)
217
+ )
218
+
219
+ def F(a, b, c):
220
+ return self._series_ring(
221
+ [rising_factorial(a, k) * rising_factorial(b, k) / rising_factorial(c, k) / ZZ(k).factorial()
222
+ for k in range(self._prec + 1)],
223
+ ZZ(self._prec + 1)
224
+ )
225
+
226
+ a = self._group.alpha()
227
+ b = self._group.beta()
228
+ Phi = F1(a, b) / F(a, b, ZZ.one())
229
+ q = self._series_ring.gen()
230
+
231
+ # the current implementation of power series reversion is slow
232
+ # J_inv_ZZ = ZZ(1) / ((q*Phi.exp()).reverse())
233
+
234
+ temp_f = (q * Phi.exp()).polynomial()
235
+ new_f = temp_f.revert_series(temp_f.degree() + 1)
236
+ return ZZ.one() / (new_f + O(q**(temp_f.degree() + 1)))
237
+
238
+ @cached_method
239
+ def f_rho_ZZ(self):
240
+ r"""
241
+ Return the rational Fourier expansion of ``f_rho``,
242
+ where the parameter ``d`` is replaced by ``1``.
243
+
244
+ .. NOTE::
245
+
246
+ The Fourier expansion of ``f_rho`` for ``d!=1``
247
+ is given by ``f_rho_ZZ(q/d)``.
248
+
249
+ EXAMPLES::
250
+
251
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
252
+ sage: MFSeriesConstructor(prec=3).f_rho_ZZ()
253
+ 1 + 5/36*q + 5/6912*q^2 + O(q^3)
254
+ sage: MFSeriesConstructor(group=5, prec=3).f_rho_ZZ()
255
+ 1 + 7/100*q + 21/160000*q^2 + O(q^3)
256
+ sage: MFSeriesConstructor(group=5, prec=3).f_rho_ZZ().parent()
257
+ Power Series Ring in q over Rational Field
258
+
259
+ sage: MFSeriesConstructor(group=infinity, prec=3).f_rho_ZZ()
260
+ 1
261
+ """
262
+
263
+ q = self._series_ring.gen()
264
+ n = self.hecke_n()
265
+ if (n == infinity):
266
+ f_rho_ZZ = self._series_ring(1)
267
+ else:
268
+ temp_expr = ((-q*self.J_inv_ZZ().derivative())**2/(self.J_inv_ZZ()*(self.J_inv_ZZ()-1))).power_series()
269
+ f_rho_ZZ = (temp_expr.log()/(n-2)).exp()
270
+ return f_rho_ZZ
271
+
272
+ @cached_method
273
+ def f_i_ZZ(self):
274
+ r"""
275
+ Return the rational Fourier expansion of ``f_i``,
276
+ where the parameter ``d`` is replaced by ``1``.
277
+
278
+ .. NOTE::
279
+
280
+ The Fourier expansion of ``f_i`` for ``d!=1``
281
+ is given by ``f_i_ZZ(q/d)``.
282
+
283
+ EXAMPLES::
284
+
285
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
286
+ sage: MFSeriesConstructor(prec=3).f_i_ZZ()
287
+ 1 - 7/24*q - 77/13824*q^2 + O(q^3)
288
+ sage: MFSeriesConstructor(group=5, prec=3).f_i_ZZ()
289
+ 1 - 13/40*q - 351/64000*q^2 + O(q^3)
290
+ sage: MFSeriesConstructor(group=5, prec=3).f_i_ZZ().parent()
291
+ Power Series Ring in q over Rational Field
292
+
293
+ sage: MFSeriesConstructor(group=infinity, prec=3).f_i_ZZ()
294
+ 1 - 3/8*q + 3/512*q^2 + O(q^3)
295
+ """
296
+
297
+ q = self._series_ring.gen()
298
+ n = self.hecke_n()
299
+ if (n == infinity):
300
+ f_i_ZZ = (-q*self.J_inv_ZZ().derivative()/self.J_inv_ZZ()).power_series()
301
+ else:
302
+ temp_expr = ((-q*self.J_inv_ZZ().derivative())**n/(self.J_inv_ZZ()**(n-1)*(self.J_inv_ZZ()-1))).power_series()
303
+ f_i_ZZ = (temp_expr.log()/(n-2)).exp()
304
+ return f_i_ZZ
305
+
306
+ @cached_method
307
+ def f_inf_ZZ(self):
308
+ r"""
309
+ Return the rational Fourier expansion of ``f_inf``,
310
+ where the parameter ``d`` is replaced by ``1``.
311
+
312
+ .. NOTE::
313
+
314
+ The Fourier expansion of ``f_inf`` for ``d!=1``
315
+ is given by ``d*f_inf_ZZ(q/d)``.
316
+
317
+ EXAMPLES::
318
+
319
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
320
+ sage: MFSeriesConstructor(prec=3).f_inf_ZZ()
321
+ q - 1/72*q^2 + 7/82944*q^3 + O(q^4)
322
+ sage: MFSeriesConstructor(group=5, prec=3).f_inf_ZZ()
323
+ q - 9/200*q^2 + 279/640000*q^3 + O(q^4)
324
+ sage: MFSeriesConstructor(group=5, prec=3).f_inf_ZZ().parent()
325
+ Power Series Ring in q over Rational Field
326
+
327
+ sage: MFSeriesConstructor(group=infinity, prec=3).f_inf_ZZ()
328
+ q - 1/8*q^2 + 7/1024*q^3 + O(q^4)
329
+ """
330
+
331
+ q = self._series_ring.gen()
332
+ n = self.hecke_n()
333
+ if (n == infinity):
334
+ f_inf_ZZ = ((-q*self.J_inv_ZZ().derivative())**2/(self.J_inv_ZZ()**2*(self.J_inv_ZZ()-1))).power_series()
335
+ else:
336
+ temp_expr = ((-q*self.J_inv_ZZ().derivative())**(2*n)/(self.J_inv_ZZ()**(2*n-2)*(self.J_inv_ZZ()-1)**n)/q**(n-2)).power_series()
337
+ f_inf_ZZ = (temp_expr.log()/(n-2)).exp()*q
338
+ return f_inf_ZZ
339
+
340
+ @cached_method
341
+ def G_inv_ZZ(self):
342
+ r"""
343
+ Return the rational Fourier expansion of ``G_inv``,
344
+ where the parameter ``d`` is replaced by ``1``.
345
+
346
+ .. NOTE::
347
+
348
+ The Fourier expansion of ``G_inv`` for ``d!=1``
349
+ is given by ``d*G_inv_ZZ(q/d)``.
350
+
351
+ EXAMPLES::
352
+
353
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
354
+ sage: MFSeriesConstructor(group=4, prec=3).G_inv_ZZ()
355
+ q^-1 - 3/32 - 955/16384*q + O(q^2)
356
+ sage: MFSeriesConstructor(group=8, prec=3).G_inv_ZZ()
357
+ q^-1 - 15/128 - 15139/262144*q + O(q^2)
358
+ sage: MFSeriesConstructor(group=8, prec=3).G_inv_ZZ().parent()
359
+ Laurent Series Ring in q over Rational Field
360
+
361
+ sage: MFSeriesConstructor(group=infinity, prec=3).G_inv_ZZ()
362
+ q^-1 - 1/8 - 59/1024*q + O(q^2)
363
+ """
364
+ n = self.hecke_n()
365
+ # Note that G_inv is not a weakly holomorphic form (because of
366
+ # the behavior at -1)
367
+ if n == infinity:
368
+ q = self._series_ring.gen()
369
+ temp_expr = (self.J_inv_ZZ()/self.f_inf_ZZ()*q**2).power_series()
370
+ return 1/q*self.f_i_ZZ()*(temp_expr.log()/2).exp()
371
+ if (ZZ(2).divides(n)):
372
+ return self.f_i_ZZ()*(self.f_rho_ZZ()**(ZZ(n/ZZ(2))))/self.f_inf_ZZ()
373
+ raise ValueError("G_inv doesn't exist for n={}.".format(self.hecke_n()))
374
+
375
+ @cached_method
376
+ def E4_ZZ(self):
377
+ r"""
378
+ Return the rational Fourier expansion of ``E_4``,
379
+ where the parameter ``d`` is replaced by ``1``.
380
+
381
+ .. NOTE::
382
+
383
+ The Fourier expansion of ``E4`` for ``d!=1``
384
+ is given by ``E4_ZZ(q/d)``.
385
+
386
+ EXAMPLES::
387
+
388
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
389
+ sage: MFSeriesConstructor(prec=3).E4_ZZ()
390
+ 1 + 5/36*q + 5/6912*q^2 + O(q^3)
391
+ sage: MFSeriesConstructor(group=5, prec=3).E4_ZZ()
392
+ 1 + 21/100*q + 483/32000*q^2 + O(q^3)
393
+ sage: MFSeriesConstructor(group=5, prec=3).E4_ZZ().parent()
394
+ Power Series Ring in q over Rational Field
395
+
396
+ sage: MFSeriesConstructor(group=infinity, prec=3).E4_ZZ()
397
+ 1 + 1/4*q + 7/256*q^2 + O(q^3)
398
+ """
399
+ q = self._series_ring.gen()
400
+ return ((-q*self.J_inv_ZZ().derivative())**2 / (self.J_inv_ZZ()*(self.J_inv_ZZ()-1))).power_series()
401
+
402
+ @cached_method
403
+ def E6_ZZ(self):
404
+ r"""
405
+ Return the rational Fourier expansion of ``E_6``,
406
+ where the parameter ``d`` is replaced by ``1``.
407
+
408
+ .. NOTE::
409
+
410
+ The Fourier expansion of ``E6`` for ``d!=1``
411
+ is given by ``E6_ZZ(q/d)``.
412
+
413
+ EXAMPLES::
414
+
415
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
416
+ sage: MFSeriesConstructor(prec=3).E6_ZZ()
417
+ 1 - 7/24*q - 77/13824*q^2 + O(q^3)
418
+ sage: MFSeriesConstructor(group=5, prec=3).E6_ZZ()
419
+ 1 - 37/200*q - 14663/320000*q^2 + O(q^3)
420
+ sage: MFSeriesConstructor(group=5, prec=3).E6_ZZ().parent()
421
+ Power Series Ring in q over Rational Field
422
+
423
+ sage: MFSeriesConstructor(group=infinity, prec=3).E6_ZZ()
424
+ 1 - 1/8*q - 31/512*q^2 + O(q^3)
425
+ """
426
+ q = self._series_ring.gen()
427
+ return ((-q*self.J_inv_ZZ().derivative())**3 / (self.J_inv_ZZ()**2*(self.J_inv_ZZ()-1))).power_series()
428
+
429
+ @cached_method
430
+ def Delta_ZZ(self):
431
+ r"""
432
+ Return the rational Fourier expansion of ``Delta``,
433
+ where the parameter ``d`` is replaced by ``1``.
434
+
435
+ .. NOTE::
436
+
437
+ The Fourier expansion of ``Delta`` for ``d!=1``
438
+ is given by ``d*Delta_ZZ(q/d)``.
439
+
440
+ EXAMPLES::
441
+
442
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
443
+ sage: MFSeriesConstructor(prec=3).Delta_ZZ()
444
+ q - 1/72*q^2 + 7/82944*q^3 + O(q^4)
445
+ sage: MFSeriesConstructor(group=5, prec=3).Delta_ZZ()
446
+ q + 47/200*q^2 + 11367/640000*q^3 + O(q^4)
447
+ sage: MFSeriesConstructor(group=5, prec=3).Delta_ZZ().parent()
448
+ Power Series Ring in q over Rational Field
449
+
450
+ sage: MFSeriesConstructor(group=infinity, prec=3).Delta_ZZ()
451
+ q + 3/8*q^2 + 63/1024*q^3 + O(q^4)
452
+ """
453
+
454
+ return (self.f_inf_ZZ()**3*self.J_inv_ZZ()**2/(self.f_rho_ZZ()**6)).power_series()
455
+
456
+ @cached_method
457
+ def E2_ZZ(self):
458
+ r"""
459
+ Return the rational Fourier expansion of ``E2``,
460
+ where the parameter ``d`` is replaced by ``1``.
461
+
462
+ .. NOTE::
463
+
464
+ The Fourier expansion of ``E2`` for ``d!=1``
465
+ is given by ``E2_ZZ(q/d)``.
466
+
467
+ EXAMPLES::
468
+
469
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
470
+ sage: MFSeriesConstructor(prec=3).E2_ZZ()
471
+ 1 - 1/72*q - 1/41472*q^2 + O(q^3)
472
+ sage: MFSeriesConstructor(group=5, prec=3).E2_ZZ()
473
+ 1 - 9/200*q - 369/320000*q^2 + O(q^3)
474
+ sage: MFSeriesConstructor(group=5, prec=3).E2_ZZ().parent()
475
+ Power Series Ring in q over Rational Field
476
+
477
+ sage: MFSeriesConstructor(group=infinity, prec=3).E2_ZZ()
478
+ 1 - 1/8*q - 1/512*q^2 + O(q^3)
479
+ """
480
+ q = self._series_ring.gen()
481
+ return (q * self.f_inf_ZZ().derivative()) / self.f_inf_ZZ()
482
+
483
+ @cached_method
484
+ def EisensteinSeries_ZZ(self, k):
485
+ r"""
486
+ Return the rational Fourier expansion of the normalized Eisenstein series
487
+ of weight ``k``, where the parameter ``d`` is replaced by ``1``.
488
+
489
+ Only arithmetic groups with ``n < infinity`` are supported!
490
+
491
+ .. NOTE::
492
+
493
+ THe Fourier expansion of the series is given by ``EisensteinSeries_ZZ(q/d)``.
494
+
495
+ INPUT:
496
+
497
+ - ``k`` -- a nonnegative even integer, namely the weight
498
+
499
+ EXAMPLES::
500
+
501
+ sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor
502
+ sage: MFC = MFSeriesConstructor(prec=6)
503
+ sage: MFC.EisensteinSeries_ZZ(k=0)
504
+ 1
505
+ sage: MFC.EisensteinSeries_ZZ(k=2)
506
+ 1 - 1/72*q - 1/41472*q^2 - 1/53747712*q^3 - 7/371504185344*q^4 - 1/106993205379072*q^5 + O(q^6)
507
+ sage: MFC.EisensteinSeries_ZZ(k=6)
508
+ 1 - 7/24*q - 77/13824*q^2 - 427/17915904*q^3 - 7399/123834728448*q^4 - 3647/35664401793024*q^5 + O(q^6)
509
+ sage: MFC.EisensteinSeries_ZZ(k=12)
510
+ 1 + 455/8292*q + 310765/4776192*q^2 + 20150585/6189944832*q^3 + 1909340615/42784898678784*q^4 + 3702799555/12322050819489792*q^5 + O(q^6)
511
+ sage: MFC.EisensteinSeries_ZZ(k=12).parent()
512
+ Power Series Ring in q over Rational Field
513
+
514
+ sage: MFC = MFSeriesConstructor(group=4, prec=5)
515
+ sage: MFC.EisensteinSeries_ZZ(k=2)
516
+ 1 - 1/32*q - 5/8192*q^2 - 1/524288*q^3 - 13/536870912*q^4 + O(q^5)
517
+ sage: MFC.EisensteinSeries_ZZ(k=4)
518
+ 1 + 3/16*q + 39/4096*q^2 + 21/262144*q^3 + 327/268435456*q^4 + O(q^5)
519
+ sage: MFC.EisensteinSeries_ZZ(k=6)
520
+ 1 - 7/32*q - 287/8192*q^2 - 427/524288*q^3 - 9247/536870912*q^4 + O(q^5)
521
+ sage: MFC.EisensteinSeries_ZZ(k=12)
522
+ 1 + 63/11056*q + 133119/2830336*q^2 + 2790081/181141504*q^3 + 272631807/185488900096*q^4 + O(q^5)
523
+
524
+ sage: MFC = MFSeriesConstructor(group=6, prec=5)
525
+ sage: MFC.EisensteinSeries_ZZ(k=2)
526
+ 1 - 1/18*q - 1/648*q^2 - 7/209952*q^3 - 7/22674816*q^4 + O(q^5)
527
+ sage: MFC.EisensteinSeries_ZZ(k=4)
528
+ 1 + 2/9*q + 1/54*q^2 + 37/52488*q^3 + 73/5668704*q^4 + O(q^5)
529
+ sage: MFC.EisensteinSeries_ZZ(k=6)
530
+ 1 - 1/6*q - 11/216*q^2 - 271/69984*q^3 - 1057/7558272*q^4 + O(q^5)
531
+ sage: MFC.EisensteinSeries_ZZ(k=12)
532
+ 1 + 182/151329*q + 62153/2723922*q^2 + 16186807/882550728*q^3 + 381868123/95315478624*q^4 + O(q^5)
533
+ """
534
+
535
+ try:
536
+ if k < 0:
537
+ raise TypeError(None)
538
+ k = 2*ZZ(k/2)
539
+ except TypeError:
540
+ raise TypeError("k={} has to be a nonnegative even integer!".format(k))
541
+
542
+ if (not self.group().is_arithmetic() or self.group().n() == infinity):
543
+ # Exceptional cases should be called manually (see in FormsRing_abstract)
544
+ raise NotImplementedError("Eisenstein series are only supported in the finite arithmetic cases!")
545
+
546
+ # Trivial case
547
+ if k == 0:
548
+ return self._series_ring(1)
549
+
550
+ M = ZZ(self.group().lam()**2)
551
+ lamk = M**(ZZ(k/2))
552
+ dval = self.group().dvalue()
553
+
554
+ def coeff(m):
555
+ m = ZZ(m)
556
+ if m < 0:
557
+ return ZZ(0)
558
+ elif m == 0:
559
+ return ZZ(1)
560
+
561
+ factor = -2*k / QQ(bernoulli(k)) / lamk
562
+ sum1 = sigma(m, k-1)
563
+ if M.divides(m):
564
+ sum2 = (lamk-1) * sigma(ZZ(m/M), k-1)
565
+ else:
566
+ sum2 = ZZ(0)
567
+ if (M == 1):
568
+ sum3 = ZZ(0)
569
+ else:
570
+ if (m == 1):
571
+ N = ZZ(1)
572
+ else:
573
+ N = ZZ(m / M**ZZ(m.valuation(M)))
574
+ sum3 = -sigma(ZZ(N), k-1) * ZZ(m/N)**(k-1) / (lamk + 1)
575
+
576
+ return factor * (sum1 + sum2 + sum3) * dval**m
577
+
578
+ q = self._series_ring.gen()
579
+
580
+ return sum([coeff(m)*q**m for m in range(self.prec())]).add_bigoh(self.prec())