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,118 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.pari
3
+ """
4
+ Submodules of spaces of modular forms
5
+
6
+ EXAMPLES::
7
+
8
+ sage: M = ModularForms(Gamma1(13),2); M
9
+ Modular Forms space of dimension 13 for
10
+ Congruence Subgroup Gamma1(13) of weight 2 over Rational Field
11
+ sage: M.eisenstein_subspace()
12
+ Eisenstein subspace of dimension 11 of Modular Forms space of dimension 13 for
13
+ Congruence Subgroup Gamma1(13) of weight 2 over Rational Field
14
+ sage: M == loads(dumps(M))
15
+ True
16
+ sage: M.cuspidal_subspace()
17
+ Cuspidal subspace of dimension 2 of Modular Forms space of dimension 13 for
18
+ Congruence Subgroup Gamma1(13) of weight 2 over Rational Field
19
+ """
20
+
21
+ #########################################################################
22
+ # Copyright (C) 2004--2006 William Stein <wstein@gmail.com>
23
+ #
24
+ # Distributed under the terms of the GNU General Public License (GPL)
25
+ #
26
+ # http://www.gnu.org/licenses/
27
+ #########################################################################
28
+
29
+ from .space import ModularFormsSpace
30
+
31
+ import sage.modular.hecke.submodule
32
+
33
+
34
+ class ModularFormsSubmodule(ModularFormsSpace,
35
+ sage.modular.hecke.submodule.HeckeSubmodule):
36
+ """
37
+ A submodule of an ambient space of modular forms.
38
+ """
39
+ def __init__(self, ambient_module, submodule, dual=None, check=False):
40
+ """
41
+ INPUT:
42
+
43
+ - ``ambient_module`` -- ModularFormsSpace
44
+ - ``submodule`` -- a submodule of the ambient space
45
+ - ``dual_module`` -- (default: ``None``) ignored
46
+ - ``check`` -- boolean (default: ``False``); whether to check that the
47
+ submodule is Hecke equivariant
48
+
49
+ EXAMPLES::
50
+
51
+ sage: M = ModularForms(Gamma1(13),2); M
52
+ Modular Forms space of dimension 13 for Congruence Subgroup Gamma1(13) of weight 2 over Rational Field
53
+ sage: M.eisenstein_subspace()
54
+ Eisenstein subspace of dimension 11 of Modular Forms space of dimension 13 for Congruence Subgroup Gamma1(13) of weight 2 over Rational Field
55
+ """
56
+ A = ambient_module
57
+ sage.modular.hecke.submodule.HeckeSubmodule.__init__(self, A, submodule, check=check)
58
+ ModularFormsSpace.__init__(self, A.group(), A.weight(),
59
+ A.character(), A.base_ring())
60
+
61
+ def _repr_(self):
62
+ """
63
+ EXAMPLES::
64
+
65
+ sage: ModularForms(Gamma1(13),2).eisenstein_subspace()._repr_()
66
+ 'Eisenstein subspace of dimension 11 of Modular Forms space of dimension 13 for Congruence Subgroup Gamma1(13) of weight 2 over Rational Field'
67
+ """
68
+ return "Modular Forms subspace of dimension %s of %s" % (self.dimension(), self.ambient_module())
69
+
70
+ def _compute_coefficients(self, element, X):
71
+ """
72
+ Compute all coefficients of the modular form element in ``self`` for
73
+ indices in X.
74
+
75
+ TODO: Implement this function.
76
+
77
+ EXAMPLES::
78
+
79
+ sage: M = ModularForms(6,4).cuspidal_subspace()
80
+ sage: M._compute_coefficients( M.basis()[0], range(1,100) )
81
+ Traceback (most recent call last):
82
+ ...
83
+ NotImplementedError
84
+ """
85
+ raise NotImplementedError
86
+
87
+ def _compute_q_expansion_basis(self, prec):
88
+ """
89
+ Compute ``q_expansions`` to precision ``prec`` for each element in
90
+ ``self.basis()``.
91
+
92
+ EXAMPLES::
93
+
94
+ sage: M = ModularForms(Gamma1(13),2); M
95
+ Modular Forms space of dimension 13 for Congruence Subgroup Gamma1(13) of weight 2 over Rational Field
96
+ sage: S = M.eisenstein_subspace(); S
97
+ Eisenstein subspace of dimension 11 of Modular Forms space of dimension 13 for Congruence Subgroup Gamma1(13) of weight 2 over Rational Field
98
+ sage: S._compute_q_expansion_basis(5)
99
+ [1 + O(q^5),
100
+ q + O(q^5),
101
+ q^2 + O(q^5),
102
+ q^3 + O(q^5),
103
+ q^4 + O(q^5),
104
+ O(q^5),
105
+ O(q^5),
106
+ O(q^5),
107
+ O(q^5),
108
+ O(q^5),
109
+ O(q^5)]
110
+ """
111
+ A = self.ambient_module()
112
+ return [A._q_expansion(element=f.element(), prec=prec)
113
+ for f in self.basis()]
114
+
115
+
116
+ # TODO
117
+ class ModularFormsSubmoduleWithBasis(ModularFormsSubmodule):
118
+ pass
@@ -0,0 +1,64 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.pari
3
+ """
4
+ TESTS:
5
+
6
+ Test consistency between modular forms and modular symbols Eisenstein
7
+ series charpolys, which are computed in completely separate ways. ::
8
+
9
+ sage: for N in range(25,33):
10
+ ....: m = ModularForms(N)
11
+ ....: e = m.eisenstein_subspace()
12
+ ....: f = e.hecke_polynomial(2)
13
+ ....: g = ModularSymbols(N).eisenstein_submodule().hecke_polynomial(2)
14
+ ....: print("{} {}".format(N, f == g))
15
+ 25 True
16
+ 26 True
17
+ 27 True
18
+ 28 True
19
+ 29 True
20
+ 30 True
21
+ 31 True
22
+ 32 True
23
+
24
+ Another similar consistency check::
25
+
26
+ sage: for N in range(1,26):
27
+ ....: eps = (N > 2 and DirichletGroup(N,QQ).0) or N
28
+ ....: m = ModularForms(eps)
29
+ ....: e = m.eisenstein_subspace()
30
+ ....: f = e.hecke_polynomial(2)
31
+ ....: g = ModularSymbols(eps).eisenstein_submodule().hecke_polynomial(2)
32
+ ....: print("{} {}".format(N, f == g))
33
+ 1 True
34
+ 2 True
35
+ 3 True
36
+ 4 True
37
+ 5 True
38
+ 6 True
39
+ 7 True
40
+ 8 True
41
+ 9 True
42
+ 10 True
43
+ 11 True
44
+ 12 True
45
+ 13 True
46
+ 14 True
47
+ 15 True
48
+ 16 True
49
+ 17 True
50
+ 18 True
51
+ 19 True
52
+ 20 True
53
+ 21 True
54
+ 22 True
55
+ 23 True
56
+ 24 True
57
+ 25 True
58
+
59
+ We check that bug :issue:`8541` (traced to a linear algebra problem) is fixed::
60
+
61
+ sage: f = CuspForms(DirichletGroup(5).0,5).0
62
+ sage: f[15]
63
+ 30*zeta4 - 210
64
+ """
@@ -0,0 +1,110 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ `q`-expansions of theta series
4
+
5
+ AUTHOR:
6
+
7
+ - William Stein
8
+ """
9
+ from sage.rings.integer import Integer
10
+ from sage.rings.integer_ring import ZZ
11
+ from sage.rings.power_series_ring import PowerSeriesRing
12
+
13
+ from math import sqrt
14
+
15
+
16
+ def theta2_qexp(prec=10, var='q', K=ZZ, sparse=False):
17
+ r"""
18
+ Return the `q`-expansion of the series `\theta_2 = \sum_{n \text{ odd}} q^{n^2}`.
19
+
20
+ INPUT:
21
+
22
+ - ``prec`` -- integer; the absolute precision of the output
23
+ - ``var`` -- (default: ``'q'``) variable name
24
+ - ``K`` -- (default: ZZ) base ring of answer
25
+
26
+ OUTPUT: a power series over K
27
+
28
+ EXAMPLES::
29
+
30
+ sage: theta2_qexp(18)
31
+ q + q^9 + O(q^18)
32
+ sage: theta2_qexp(49)
33
+ q + q^9 + q^25 + O(q^49)
34
+ sage: theta2_qexp(100, 'q', QQ)
35
+ q + q^9 + q^25 + q^49 + q^81 + O(q^100)
36
+ sage: f = theta2_qexp(100, 't', GF(3)); f
37
+ t + t^9 + t^25 + t^49 + t^81 + O(t^100)
38
+ sage: parent(f)
39
+ Power Series Ring in t over Finite Field of size 3
40
+ sage: theta2_qexp(200)
41
+ q + q^9 + q^25 + q^49 + q^81 + q^121 + q^169 + O(q^200)
42
+ sage: f = theta2_qexp(20,sparse=True); f
43
+ q + q^9 + O(q^20)
44
+ sage: parent(f)
45
+ Sparse Power Series Ring in q over Integer Ring
46
+ """
47
+ prec = Integer(prec)
48
+ if prec <= 0:
49
+ raise ValueError("prec must be positive")
50
+ if sparse:
51
+ v = {}
52
+ else:
53
+ v = [Integer(0)] * prec
54
+ one = Integer(1)
55
+ n = int(sqrt(prec))
56
+ if n*n < prec:
57
+ n += 1
58
+ for m in range(1, n, 2):
59
+ v[m*m] = one
60
+ R = PowerSeriesRing(K, sparse=sparse, names=var)
61
+ return R(v, prec=prec)
62
+
63
+
64
+ def theta_qexp(prec=10, var='q', K=ZZ, sparse=False):
65
+ r"""
66
+ Return the `q`-expansion of the standard `\theta` series
67
+ `\theta = 1 + 2\sum_{n=1}^{\infty} q^{n^2}`.
68
+
69
+ INPUT:
70
+
71
+ - ``prec`` -- integer; the absolute precision of the output
72
+ - ``var`` -- (default: ``'q'``) variable name
73
+ - ``K`` -- (default: ZZ) base ring of answer
74
+
75
+ OUTPUT: a power series over K
76
+
77
+ EXAMPLES::
78
+
79
+ sage: theta_qexp(25)
80
+ 1 + 2*q + 2*q^4 + 2*q^9 + 2*q^16 + O(q^25)
81
+ sage: theta_qexp(10)
82
+ 1 + 2*q + 2*q^4 + 2*q^9 + O(q^10)
83
+ sage: theta_qexp(100)
84
+ 1 + 2*q + 2*q^4 + 2*q^9 + 2*q^16 + 2*q^25 + 2*q^36 + 2*q^49 + 2*q^64 + 2*q^81 + O(q^100)
85
+ sage: theta_qexp(100, 't')
86
+ 1 + 2*t + 2*t^4 + 2*t^9 + 2*t^16 + 2*t^25 + 2*t^36 + 2*t^49 + 2*t^64 + 2*t^81 + O(t^100)
87
+ sage: theta_qexp(100, 't', GF(2))
88
+ 1 + O(t^100)
89
+ sage: f = theta_qexp(20,sparse=True); f
90
+ 1 + 2*q + 2*q^4 + 2*q^9 + 2*q^16 + O(q^20)
91
+ sage: parent(f)
92
+ Sparse Power Series Ring in q over Integer Ring
93
+ """
94
+ prec = Integer(prec)
95
+ if prec <= 0:
96
+ raise ValueError("prec must be positive")
97
+ if sparse:
98
+ v = {}
99
+ else:
100
+ v = [Integer(0)] * prec
101
+ v[0] = Integer(1)
102
+ two = Integer(2)
103
+ n = int(sqrt(prec))
104
+ if n*n != prec:
105
+ n += 1
106
+ for m in range(1, n):
107
+ v[m*m] = two
108
+
109
+ R = PowerSeriesRing(K, sparse=sparse, names=var)
110
+ return R(v, prec=prec)
@@ -0,0 +1,381 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint
3
+ r"""
4
+ The Victor Miller basis
5
+
6
+ This module contains functions for quick calculation of a basis of
7
+ `q`-expansions for the space of modular forms of level 1 and any weight. The
8
+ basis returned is the Victor Miller basis, which is the unique basis of
9
+ elliptic modular forms `f_1, \dots, f_d` for which `a_i(f_j) = \delta_{ij}`
10
+ for `1 \le i, j \le d` (where `d` is the dimension of the space).
11
+
12
+ This basis is calculated using a standard set of generators for the ring of
13
+ modular forms, using the fast multiplication algorithms for polynomials and
14
+ power series provided by the FLINT library. (This is far quicker than using
15
+ modular symbols).
16
+
17
+ TESTS::
18
+
19
+ sage: ModularSymbols(1, 36, 1).cuspidal_submodule().q_expansion_basis(30) == victor_miller_basis(36, 30, cusp_only=True)
20
+ True
21
+ """
22
+
23
+ # ****************************************************************************
24
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
25
+ #
26
+ # Distributed under the terms of the GNU General Public License (GPL)
27
+ # as published by the Free Software Foundation; either version 2 of
28
+ # the License, or (at your option) any later version.
29
+ # https://www.gnu.org/licenses/
30
+ # ****************************************************************************
31
+
32
+ import math
33
+
34
+ from sage.libs.flint.fmpz_poly_sage import Fmpz_poly
35
+ from sage.misc.verbose import verbose
36
+ from sage.rings.big_oh import O as bigO
37
+ from sage.rings.finite_rings.integer_mod_ring import Integers
38
+ from sage.rings.integer import Integer
39
+ from sage.rings.integer_ring import ZZ
40
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
41
+ from sage.rings.power_series_ring import PowerSeriesRing
42
+ from sage.rings.rational_field import QQ
43
+ from sage.structure.all import Sequence
44
+
45
+ from .eis_series_cython import eisenstein_series_poly
46
+
47
+
48
+ def victor_miller_basis(k, prec=10, cusp_only=False, var='q'):
49
+ r"""
50
+ Compute and return the Victor Miller basis for modular forms of
51
+ weight `k` and level 1 to precision `O(q^{prec})`. If
52
+ ``cusp_only`` is True, return only a basis for the cuspidal
53
+ subspace.
54
+
55
+ INPUT:
56
+
57
+ - ``k`` -- integer
58
+
59
+ - ``prec`` -- (default: 10) a positive integer
60
+
61
+ - ``cusp_only`` -- boolean (default: ``False``)
62
+
63
+ - ``var`` -- string (default: ``'q'``)
64
+
65
+ OUTPUT: a sequence whose entries are power series in ``ZZ[[var]]``
66
+
67
+ EXAMPLES::
68
+
69
+ sage: victor_miller_basis(1, 6)
70
+ []
71
+ sage: victor_miller_basis(0, 6)
72
+ [1 + O(q^6)]
73
+ sage: victor_miller_basis(2, 6)
74
+ []
75
+ sage: victor_miller_basis(4, 6)
76
+ [1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + 30240*q^5 + O(q^6)]
77
+
78
+ sage: victor_miller_basis(6, 6, var='w')
79
+ [1 - 504*w - 16632*w^2 - 122976*w^3 - 532728*w^4 - 1575504*w^5 + O(w^6)]
80
+
81
+ sage: victor_miller_basis(6, 6)
82
+ [1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 - 1575504*q^5 + O(q^6)]
83
+ sage: victor_miller_basis(12, 6)
84
+ [1 + 196560*q^2 + 16773120*q^3 + 398034000*q^4 + 4629381120*q^5 + O(q^6),
85
+ q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 + O(q^6)]
86
+
87
+ sage: victor_miller_basis(12, 6, cusp_only=True)
88
+ [q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 + O(q^6)]
89
+ sage: victor_miller_basis(24, 6, cusp_only=True)
90
+ [q + 195660*q^3 + 12080128*q^4 + 44656110*q^5 + O(q^6),
91
+ q^2 - 48*q^3 + 1080*q^4 - 15040*q^5 + O(q^6)]
92
+ sage: victor_miller_basis(24, 6)
93
+ [1 + 52416000*q^3 + 39007332000*q^4 + 6609020221440*q^5 + O(q^6),
94
+ q + 195660*q^3 + 12080128*q^4 + 44656110*q^5 + O(q^6),
95
+ q^2 - 48*q^3 + 1080*q^4 - 15040*q^5 + O(q^6)]
96
+ sage: victor_miller_basis(32, 6)
97
+ [1 + 2611200*q^3 + 19524758400*q^4 + 19715347537920*q^5 + O(q^6),
98
+ q + 50220*q^3 + 87866368*q^4 + 18647219790*q^5 + O(q^6),
99
+ q^2 + 432*q^3 + 39960*q^4 - 1418560*q^5 + O(q^6)]
100
+
101
+ sage: victor_miller_basis(40,200)[1:] == victor_miller_basis(40,200,cusp_only=True)
102
+ True
103
+ sage: victor_miller_basis(200,40)[1:] == victor_miller_basis(200,40,cusp_only=True)
104
+ True
105
+
106
+ AUTHORS:
107
+
108
+ - William Stein, Craig Citro: original code
109
+
110
+ - Martin Raum (2009-08-02): use FLINT for polynomial arithmetic (instead of NTL)
111
+ """
112
+ k = Integer(k)
113
+ if k % 2 == 1 or k == 2:
114
+ return Sequence([])
115
+ elif k < 0:
116
+ raise ValueError("k must be nonnegative")
117
+ elif k == 0:
118
+ return Sequence([PowerSeriesRing(ZZ,var)(1).add_bigoh(prec)], cr=True)
119
+ e = k.mod(12)
120
+ if e == 2:
121
+ e += 12
122
+ n = (k-e) // 12
123
+
124
+ if n == 0 and cusp_only:
125
+ return Sequence([])
126
+
127
+ # If prec is less than or equal to the dimension of the space of
128
+ # cusp forms, which is just n, then we know the answer, and we
129
+ # simply return it.
130
+ if prec <= n:
131
+ q = PowerSeriesRing(ZZ,var).gen(0)
132
+ err = bigO(q**prec)
133
+ ls = [0] * (n+1)
134
+ if not cusp_only:
135
+ ls[0] = 1 + err
136
+ for i in range(1,prec):
137
+ ls[i] = q**i + err
138
+ for i in range(prec,n+1):
139
+ ls[i] = err
140
+ return Sequence(ls, cr=True)
141
+
142
+ F6 = eisenstein_series_poly(6, prec)
143
+
144
+ if e == 0:
145
+ A = Fmpz_poly(1)
146
+ elif e == 4:
147
+ A = eisenstein_series_poly(4, prec)
148
+ elif e == 6:
149
+ A = F6
150
+ elif e == 8:
151
+ A = eisenstein_series_poly(8, prec)
152
+ elif e == 10:
153
+ A = eisenstein_series_poly(10, prec)
154
+ else: # e == 14
155
+ A = eisenstein_series_poly(14, prec)
156
+
157
+ if A[0] == -1:
158
+ A = -A
159
+
160
+ if n == 0:
161
+ return Sequence([PowerSeriesRing(ZZ,var)(A.list()).add_bigoh(prec)],cr=True)
162
+
163
+ F6_squared = F6**2
164
+ F6_squared._unsafe_mutate_truncate(prec)
165
+ D = _delta_poly(prec)
166
+ Fprod = F6_squared
167
+ Dprod = D
168
+
169
+ if cusp_only:
170
+ ls = [Fmpz_poly(0)] + [A] * n
171
+ else:
172
+ ls = [A] * (n + 1)
173
+
174
+ for i in range(1, n + 1):
175
+ ls[n-i] *= Fprod
176
+ ls[i] *= Dprod
177
+ ls[n-i]._unsafe_mutate_truncate(prec)
178
+ ls[i]._unsafe_mutate_truncate(prec)
179
+
180
+ Fprod *= F6_squared
181
+ Dprod *= D
182
+ Fprod._unsafe_mutate_truncate(prec)
183
+ Dprod._unsafe_mutate_truncate(prec)
184
+
185
+ P = PowerSeriesRing(ZZ, var)
186
+ if cusp_only:
187
+ for i in range(1, n + 1):
188
+ for j in range(1, i):
189
+ ls[j] = ls[j] - ls[j][i]*ls[i]
190
+
191
+ return Sequence([P(l.list()).add_bigoh(prec) for l in ls[1:]], cr=True)
192
+
193
+ for i in range(1, n + 1):
194
+ for j in range(i):
195
+ ls[j] = ls[j] - ls[j][i] * ls[i]
196
+
197
+ return Sequence([P(l.list()).add_bigoh(prec) for l in ls], cr=True)
198
+
199
+
200
+ def _delta_poly(prec=10):
201
+ """
202
+ Return the `q`-expansion of Delta as a FLINT polynomial. Used internally by
203
+ the :func:`~delta_qexp` function. See the docstring of :func:`~delta_qexp`
204
+ for more information.
205
+
206
+ INPUT:
207
+
208
+ - ``prec`` -- integer; the absolute precision of the output
209
+
210
+ OUTPUT:
211
+
212
+ the `q`-expansion of Delta to precision ``prec``, as a FLINT
213
+ :class:`~sage.libs.flint.fmpz_poly.Fmpz_poly` object.
214
+
215
+ EXAMPLES::
216
+
217
+ sage: from sage.modular.modform.vm_basis import _delta_poly
218
+ sage: _delta_poly(7)
219
+ 7 0 1 -24 252 -1472 4830 -6048
220
+ """
221
+ if prec <= 0:
222
+ raise ValueError("prec must be positive")
223
+ v = [0] * prec
224
+
225
+ # Let F = \sum_{n >= 0} (-1)^n (2n+1) q^(floor(n(n+1)/2)).
226
+ # Then delta is F^8.
227
+
228
+ # First compute F^2 directly by naive polynomial multiplication,
229
+ # since F is very sparse.
230
+
231
+ stop = int((-1+math.sqrt(1+8*prec))/2.0)
232
+ # make list of index/value pairs for the sparse poly
233
+ values = [(n*(n+1)//2, ((-2*n-1) if (n & 1) else (2*n+1)))
234
+ for n in range(stop + 1)]
235
+
236
+ for (i1, v1) in values:
237
+ for (i2, v2) in values:
238
+ try:
239
+ v[i1 + i2] += v1 * v2
240
+ except IndexError:
241
+ break
242
+
243
+ f = Fmpz_poly(v)
244
+ t = verbose('made series')
245
+ f = f * f
246
+ f._unsafe_mutate_truncate(prec)
247
+ t = verbose('squared (2 of 3)', t)
248
+ f = f * f
249
+ f._unsafe_mutate_truncate(prec - 1)
250
+ t = verbose('squared (3 of 3)', t)
251
+ f = f.left_shift(1)
252
+ t = verbose('shifted', t)
253
+ return f
254
+
255
+
256
+ def _delta_poly_modulo(N, prec=10):
257
+ r"""
258
+ Return the `q`-expansion of `\Delta` modulo `N`. Used internally by
259
+ the :func:`~delta_qexp` function. See the docstring of :func:`~delta_qexp`
260
+ for more information.
261
+
262
+ INPUT:
263
+
264
+ - ``N`` -- positive integer modulo which we want to compute `\Delta`
265
+
266
+ - ``prec`` -- integer; the absolute precision of the output
267
+
268
+ OUTPUT:
269
+
270
+ the polynomial of degree ``prec``-1 which is the truncation
271
+ of `\Delta` modulo `N`, as an element of the polynomial
272
+ ring in `q` over the integers modulo `N`.
273
+
274
+ EXAMPLES::
275
+
276
+ sage: from sage.modular.modform.vm_basis import _delta_poly_modulo
277
+ sage: _delta_poly_modulo(5, 7)
278
+ 2*q^6 + 3*q^4 + 2*q^3 + q^2 + q
279
+ sage: _delta_poly_modulo(10, 12)
280
+ 2*q^11 + 7*q^9 + 6*q^7 + 2*q^6 + 8*q^4 + 2*q^3 + 6*q^2 + q
281
+ """
282
+ if prec <= 0:
283
+ raise ValueError("prec must be positive")
284
+ v = [0] * prec
285
+
286
+ # Let F = \sum_{n >= 0} (-1)^n (2n+1) q^(floor(n(n+1)/2)).
287
+ # Then delta is F^8.
288
+
289
+ stop = int((-1+math.sqrt(8*prec))/2.0)
290
+
291
+ for n in range(stop+1):
292
+ v[n*(n+1)//2] = ((N-1)*(2*n+1) if (n & 1) else (2*n+1))
293
+
294
+ P = PolynomialRing(Integers(N), 'q')
295
+ f = P(v)
296
+ t = verbose('made series')
297
+ # fast way of computing f*f truncated at prec
298
+ f = f._mul_trunc_(f, prec)
299
+ t = verbose('squared (1 of 3)', t)
300
+ f = f._mul_trunc_(f, prec)
301
+ t = verbose('squared (2 of 3)', t)
302
+ f = f._mul_trunc_(f, prec - 1)
303
+ t = verbose('squared (3 of 3)', t)
304
+ f = f.shift(1)
305
+ t = verbose('shifted', t)
306
+
307
+ return f
308
+
309
+
310
+ def delta_qexp(prec=10, var='q', K=ZZ):
311
+ r"""
312
+ Return the `q`-expansion of the weight 12 cusp form `\Delta` as a power
313
+ series with coefficients in the ring K (`= \ZZ` by default).
314
+
315
+ INPUT:
316
+
317
+ - ``prec`` -- integer (default: 10); the absolute precision of the output
318
+ (must be positive)
319
+
320
+ - ``var`` -- string (default: ``'q'``); variable name
321
+
322
+ - ``K`` -- ring (default: `\ZZ`); base ring of answer
323
+
324
+ OUTPUT: a power series over K in the variable ``var``
325
+
326
+ ALGORITHM:
327
+
328
+ Compute the theta series
329
+
330
+ .. MATH::
331
+
332
+ \sum_{n \ge 0} (-1)^n (2n+1) q^{n(n+1)/2},
333
+
334
+ a very simple explicit modular form whose 8th power is `\Delta`. Then
335
+ compute the 8th power. All computations are done over `\ZZ` or `\ZZ`
336
+ modulo `N` depending on the characteristic of the given coefficient
337
+ ring `K`, and coerced into `K` afterwards.
338
+
339
+ EXAMPLES::
340
+
341
+ sage: delta_qexp(7)
342
+ q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 + O(q^7)
343
+ sage: delta_qexp(7,'z')
344
+ z - 24*z^2 + 252*z^3 - 1472*z^4 + 4830*z^5 - 6048*z^6 + O(z^7)
345
+ sage: delta_qexp(-3)
346
+ Traceback (most recent call last):
347
+ ...
348
+ ValueError: prec must be positive
349
+ sage: delta_qexp(20, K = GF(3))
350
+ q + q^4 + 2*q^7 + 2*q^13 + q^16 + 2*q^19 + O(q^20)
351
+ sage: delta_qexp(20, K = GF(3^5, 'a'))
352
+ q + q^4 + 2*q^7 + 2*q^13 + q^16 + 2*q^19 + O(q^20)
353
+ sage: delta_qexp(10, K = IntegerModRing(60))
354
+ q + 36*q^2 + 12*q^3 + 28*q^4 + 30*q^5 + 12*q^6 + 56*q^7 + 57*q^9 + O(q^10)
355
+
356
+ TESTS:
357
+
358
+ Test algorithm with modular arithmetic (see also :issue:`11804`)::
359
+
360
+ sage: delta_qexp(10^4).change_ring(GF(13)) == delta_qexp(10^4, K=GF(13))
361
+ True
362
+ sage: delta_qexp(1000).change_ring(IntegerModRing(5^100)) == delta_qexp(1000, K=IntegerModRing(5^100))
363
+ True
364
+
365
+ AUTHORS:
366
+
367
+ - William Stein: original code
368
+
369
+ - David Harvey (2007-05): sped up first squaring step
370
+
371
+ - Martin Raum (2009-08-02): use FLINT for polynomial arithmetic (instead of NTL)
372
+ """
373
+ R = PowerSeriesRing(K, var)
374
+ if K in (ZZ, QQ):
375
+ return R(_delta_poly(prec).list(), prec, check=False)
376
+ ch = K.characteristic()
377
+ if ch > 0 and prec > 150:
378
+ return R(_delta_poly_modulo(ch, prec), prec, check=False)
379
+ else:
380
+ # compute over ZZ and coerce
381
+ return R(_delta_poly(prec).list(), prec, check=True)