passagemath-schemes 10.8.1a4__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.
Files changed (312) 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.8.1a4.dist-info/METADATA +203 -0
  7. passagemath_schemes-10.8.1a4.dist-info/METADATA.bak +204 -0
  8. passagemath_schemes-10.8.1a4.dist-info/RECORD +312 -0
  9. passagemath_schemes-10.8.1a4.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.8.1a4.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 +9556 -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 +2578 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +727 -0
  29. sage/lfunctions/pari.py +971 -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 +5132 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +414 -0
  34. sage/modular/abvar/abvar_newform.py +246 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +187 -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 +721 -0
  40. sage/modular/abvar/homspace.py +989 -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 +741 -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 +1406 -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 +361 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +659 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1491 -0
  57. sage/modular/arithgroup/congroup_generic.py +630 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +266 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-314t-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1067 -0
  61. sage/modular/arithgroup/tests.py +425 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3736 -0
  64. sage/modular/btquotients/pautomorphicform.py +2564 -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 +1107 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +571 -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 +1076 -0
  77. sage/modular/hecke/algebra.py +725 -0
  78. sage/modular/hecke/all.py +19 -0
  79. sage/modular/hecke/ambient_module.py +994 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +302 -0
  82. sage/modular/hecke/hecke_operator.py +736 -0
  83. sage/modular/hecke/homspace.py +185 -0
  84. sage/modular/hecke/module.py +1744 -0
  85. sage/modular/hecke/morphism.py +139 -0
  86. sage/modular/hecke/submodule.py +970 -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 +2020 -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 +1070 -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 +817 -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 +120 -0
  101. sage/modular/modform/ambient_g1.py +199 -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 +487 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4105 -0
  108. sage/modular/modform/half_integral.py +154 -0
  109. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  110. sage/modular/modform/j_invariant.py +47 -0
  111. sage/modular/modform/l_series_gross_zagier.py +127 -0
  112. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314t-darwin.so +0 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  114. sage/modular/modform/notes.py +45 -0
  115. sage/modular/modform/numerical.py +514 -0
  116. sage/modular/modform/periods.py +14 -0
  117. sage/modular/modform/ring.py +1257 -0
  118. sage/modular/modform/space.py +1859 -0
  119. sage/modular/modform/submodule.py +118 -0
  120. sage/modular/modform/tests.py +64 -0
  121. sage/modular/modform/theta.py +110 -0
  122. sage/modular/modform/vm_basis.py +380 -0
  123. sage/modular/modform/weight1.py +221 -0
  124. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  125. sage/modular/modform_hecketriangle/abstract_space.py +2527 -0
  126. sage/modular/modform_hecketriangle/all.py +30 -0
  127. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  128. sage/modular/modform_hecketriangle/constructor.py +416 -0
  129. sage/modular/modform_hecketriangle/element.py +351 -0
  130. sage/modular/modform_hecketriangle/functors.py +752 -0
  131. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  132. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  133. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3349 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1426 -0
  135. sage/modular/modform_hecketriangle/readme.py +1214 -0
  136. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  137. sage/modular/modform_hecketriangle/space.py +1037 -0
  138. sage/modular/modform_hecketriangle/subspace.py +423 -0
  139. sage/modular/modsym/all.py +17 -0
  140. sage/modular/modsym/ambient.py +3844 -0
  141. sage/modular/modsym/boundary.py +1420 -0
  142. sage/modular/modsym/element.py +336 -0
  143. sage/modular/modsym/g1list.py +178 -0
  144. sage/modular/modsym/ghlist.py +182 -0
  145. sage/modular/modsym/hecke_operator.py +73 -0
  146. sage/modular/modsym/manin_symbol.cpython-314t-darwin.so +0 -0
  147. sage/modular/modsym/manin_symbol.pxd +5 -0
  148. sage/modular/modsym/manin_symbol.pyx +497 -0
  149. sage/modular/modsym/manin_symbol_list.py +1291 -0
  150. sage/modular/modsym/modsym.py +400 -0
  151. sage/modular/modsym/modular_symbols.py +384 -0
  152. sage/modular/modsym/p1list_nf.py +1241 -0
  153. sage/modular/modsym/relation_matrix.py +591 -0
  154. sage/modular/modsym/relation_matrix_pyx.cpython-314t-darwin.so +0 -0
  155. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  156. sage/modular/modsym/space.py +2468 -0
  157. sage/modular/modsym/subspace.py +455 -0
  158. sage/modular/modsym/tests.py +376 -0
  159. sage/modular/multiple_zeta.py +2635 -0
  160. sage/modular/multiple_zeta_F_algebra.py +789 -0
  161. sage/modular/overconvergent/all.py +6 -0
  162. sage/modular/overconvergent/genus0.py +1879 -0
  163. sage/modular/overconvergent/hecke_series.py +1187 -0
  164. sage/modular/overconvergent/weightspace.py +776 -0
  165. sage/modular/pollack_stevens/all.py +4 -0
  166. sage/modular/pollack_stevens/distributions.py +874 -0
  167. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  168. sage/modular/pollack_stevens/manin_map.py +856 -0
  169. sage/modular/pollack_stevens/modsym.py +1590 -0
  170. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  171. sage/modular/pollack_stevens/sigma0.py +534 -0
  172. sage/modular/pollack_stevens/space.py +1078 -0
  173. sage/modular/quasimodform/all.py +3 -0
  174. sage/modular/quasimodform/element.py +846 -0
  175. sage/modular/quasimodform/ring.py +826 -0
  176. sage/modular/quatalg/all.py +3 -0
  177. sage/modular/quatalg/brandt.py +1642 -0
  178. sage/modular/ssmod/all.py +8 -0
  179. sage/modular/ssmod/ssmod.py +827 -0
  180. sage/rings/all__sagemath_schemes.py +1 -0
  181. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/binary_form_reduce.py +585 -0
  183. sage/schemes/all.py +41 -0
  184. sage/schemes/berkovich/all.py +6 -0
  185. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  186. sage/schemes/berkovich/berkovich_space.py +700 -0
  187. sage/schemes/curves/affine_curve.py +2924 -0
  188. sage/schemes/curves/all.py +33 -0
  189. sage/schemes/curves/closed_point.py +434 -0
  190. sage/schemes/curves/constructor.py +397 -0
  191. sage/schemes/curves/curve.py +542 -0
  192. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  193. sage/schemes/curves/point.py +463 -0
  194. sage/schemes/curves/projective_curve.py +3203 -0
  195. sage/schemes/curves/weighted_projective_curve.py +106 -0
  196. sage/schemes/curves/zariski_vankampen.py +1931 -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 +991 -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 +1103 -0
  208. sage/schemes/elliptic_curves/constructor.py +1530 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3971 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +457 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2837 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3249 -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 +4944 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7184 -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 +1663 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7328 -0
  229. sage/schemes/elliptic_curves/height.py +2108 -0
  230. sage/schemes/elliptic_curves/hom.py +1788 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +1084 -0
  232. sage/schemes/elliptic_curves/hom_fractional.py +544 -0
  233. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  234. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  235. sage/schemes/elliptic_curves/hom_sum.py +681 -0
  236. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  237. sage/schemes/elliptic_curves/homset.py +271 -0
  238. sage/schemes/elliptic_curves/isogeny_class.py +1523 -0
  239. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  240. sage/schemes/elliptic_curves/jacobian.py +247 -0
  241. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  242. sage/schemes/elliptic_curves/kraus.py +1014 -0
  243. sage/schemes/elliptic_curves/lseries_ell.py +915 -0
  244. sage/schemes/elliptic_curves/mod5family.py +105 -0
  245. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.cpython-314t-darwin.so +0 -0
  247. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  248. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  249. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  250. sage/schemes/elliptic_curves/padics.py +1816 -0
  251. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.cpython-314t-darwin.so +0 -0
  253. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  254. sage/schemes/elliptic_curves/saturation.py +716 -0
  255. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  256. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  257. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  258. sage/schemes/hyperelliptic_curves/all.py +6 -0
  259. sage/schemes/hyperelliptic_curves/constructor.py +369 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1948 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +936 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  265. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +312 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_generic.py +437 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +878 -0
  271. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  272. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  273. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3863 -0
  274. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  275. sage/schemes/jacobians/all.py +2 -0
  276. sage/schemes/overview.py +161 -0
  277. sage/schemes/plane_conics/all.py +22 -0
  278. sage/schemes/plane_conics/con_field.py +1296 -0
  279. sage/schemes/plane_conics/con_finite_field.py +158 -0
  280. sage/schemes/plane_conics/con_number_field.py +456 -0
  281. sage/schemes/plane_conics/con_rational_field.py +406 -0
  282. sage/schemes/plane_conics/con_rational_function_field.py +581 -0
  283. sage/schemes/plane_conics/constructor.py +249 -0
  284. sage/schemes/plane_quartics/all.py +2 -0
  285. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  286. sage/schemes/plane_quartics/quartic_generic.py +53 -0
  287. sage/schemes/riemann_surfaces/all.py +1 -0
  288. sage/schemes/riemann_surfaces/riemann_surface.py +4177 -0
  289. sage_wheels/share/cremona/cremona_mini.db +0 -0
  290. sage_wheels/share/ellcurves/rank0 +30427 -0
  291. sage_wheels/share/ellcurves/rank1 +31871 -0
  292. sage_wheels/share/ellcurves/rank10 +6 -0
  293. sage_wheels/share/ellcurves/rank11 +6 -0
  294. sage_wheels/share/ellcurves/rank12 +1 -0
  295. sage_wheels/share/ellcurves/rank14 +1 -0
  296. sage_wheels/share/ellcurves/rank15 +1 -0
  297. sage_wheels/share/ellcurves/rank17 +1 -0
  298. sage_wheels/share/ellcurves/rank19 +1 -0
  299. sage_wheels/share/ellcurves/rank2 +2388 -0
  300. sage_wheels/share/ellcurves/rank20 +1 -0
  301. sage_wheels/share/ellcurves/rank21 +1 -0
  302. sage_wheels/share/ellcurves/rank22 +1 -0
  303. sage_wheels/share/ellcurves/rank23 +1 -0
  304. sage_wheels/share/ellcurves/rank24 +1 -0
  305. sage_wheels/share/ellcurves/rank28 +1 -0
  306. sage_wheels/share/ellcurves/rank3 +836 -0
  307. sage_wheels/share/ellcurves/rank4 +10 -0
  308. sage_wheels/share/ellcurves/rank5 +5 -0
  309. sage_wheels/share/ellcurves/rank6 +5 -0
  310. sage_wheels/share/ellcurves/rank7 +5 -0
  311. sage_wheels/share/ellcurves/rank8 +6 -0
  312. 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,380 @@
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.modular.modform.eis_series_cython import eisenstein_series_poly
37
+ from sage.rings.big_oh import O as bigO
38
+ from sage.rings.finite_rings.integer_mod_ring import Integers
39
+ from sage.rings.integer import Integer
40
+ from sage.rings.integer_ring import ZZ
41
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
42
+ from sage.rings.power_series_ring import PowerSeriesRing
43
+ from sage.rings.rational_field import QQ
44
+ from sage.structure.sequence import Sequence
45
+
46
+
47
+ def victor_miller_basis(k, prec=10, cusp_only=False, var='q'):
48
+ r"""
49
+ Compute and return the Victor Miller basis for modular forms of
50
+ weight `k` and level 1 to precision `O(q^{prec})`. If
51
+ ``cusp_only`` is True, return only a basis for the cuspidal
52
+ subspace.
53
+
54
+ INPUT:
55
+
56
+ - ``k`` -- integer
57
+
58
+ - ``prec`` -- (default: 10) a positive integer
59
+
60
+ - ``cusp_only`` -- boolean (default: ``False``)
61
+
62
+ - ``var`` -- string (default: ``'q'``)
63
+
64
+ OUTPUT: a sequence whose entries are power series in ``ZZ[[var]]``
65
+
66
+ EXAMPLES::
67
+
68
+ sage: victor_miller_basis(1, 6)
69
+ []
70
+ sage: victor_miller_basis(0, 6)
71
+ [1 + O(q^6)]
72
+ sage: victor_miller_basis(2, 6)
73
+ []
74
+ sage: victor_miller_basis(4, 6)
75
+ [1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + 30240*q^5 + O(q^6)]
76
+
77
+ sage: victor_miller_basis(6, 6, var='w')
78
+ [1 - 504*w - 16632*w^2 - 122976*w^3 - 532728*w^4 - 1575504*w^5 + O(w^6)]
79
+
80
+ sage: victor_miller_basis(6, 6)
81
+ [1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 - 1575504*q^5 + O(q^6)]
82
+ sage: victor_miller_basis(12, 6)
83
+ [1 + 196560*q^2 + 16773120*q^3 + 398034000*q^4 + 4629381120*q^5 + O(q^6),
84
+ q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 + O(q^6)]
85
+
86
+ sage: victor_miller_basis(12, 6, cusp_only=True)
87
+ [q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 + O(q^6)]
88
+ sage: victor_miller_basis(24, 6, cusp_only=True)
89
+ [q + 195660*q^3 + 12080128*q^4 + 44656110*q^5 + O(q^6),
90
+ q^2 - 48*q^3 + 1080*q^4 - 15040*q^5 + O(q^6)]
91
+ sage: victor_miller_basis(24, 6)
92
+ [1 + 52416000*q^3 + 39007332000*q^4 + 6609020221440*q^5 + O(q^6),
93
+ q + 195660*q^3 + 12080128*q^4 + 44656110*q^5 + O(q^6),
94
+ q^2 - 48*q^3 + 1080*q^4 - 15040*q^5 + O(q^6)]
95
+ sage: victor_miller_basis(32, 6)
96
+ [1 + 2611200*q^3 + 19524758400*q^4 + 19715347537920*q^5 + O(q^6),
97
+ q + 50220*q^3 + 87866368*q^4 + 18647219790*q^5 + O(q^6),
98
+ q^2 + 432*q^3 + 39960*q^4 - 1418560*q^5 + O(q^6)]
99
+
100
+ sage: victor_miller_basis(40,200)[1:] == victor_miller_basis(40,200,cusp_only=True)
101
+ True
102
+ sage: victor_miller_basis(200,40)[1:] == victor_miller_basis(200,40,cusp_only=True)
103
+ True
104
+
105
+ AUTHORS:
106
+
107
+ - William Stein, Craig Citro: original code
108
+
109
+ - Martin Raum (2009-08-02): use FLINT for polynomial arithmetic (instead of NTL)
110
+ """
111
+ k = Integer(k)
112
+ if k % 2 == 1 or k == 2:
113
+ return Sequence([])
114
+ elif k < 0:
115
+ raise ValueError("k must be nonnegative")
116
+ elif k == 0:
117
+ return Sequence([PowerSeriesRing(ZZ,var)(1).add_bigoh(prec)], cr=True)
118
+ e = k.mod(12)
119
+ if e == 2:
120
+ e += 12
121
+ n = (k-e) // 12
122
+
123
+ if n == 0 and cusp_only:
124
+ return Sequence([])
125
+
126
+ # If prec is less than or equal to the dimension of the space of
127
+ # cusp forms, which is just n, then we know the answer, and we
128
+ # simply return it.
129
+ if prec <= n:
130
+ q = PowerSeriesRing(ZZ,var).gen(0)
131
+ err = bigO(q**prec)
132
+ ls = [0] * (n+1)
133
+ if not cusp_only:
134
+ ls[0] = 1 + err
135
+ for i in range(1,prec):
136
+ ls[i] = q**i + err
137
+ for i in range(prec,n+1):
138
+ ls[i] = err
139
+ return Sequence(ls, cr=True)
140
+
141
+ F6 = eisenstein_series_poly(6, prec)
142
+
143
+ if e == 0:
144
+ A = Fmpz_poly(1)
145
+ elif e == 4:
146
+ A = eisenstein_series_poly(4, prec)
147
+ elif e == 6:
148
+ A = F6
149
+ elif e == 8:
150
+ A = eisenstein_series_poly(8, prec)
151
+ elif e == 10:
152
+ A = eisenstein_series_poly(10, prec)
153
+ else: # e == 14
154
+ A = eisenstein_series_poly(14, prec)
155
+
156
+ if A[0] == -1:
157
+ A = -A
158
+
159
+ if n == 0:
160
+ return Sequence([PowerSeriesRing(ZZ,var)(A.list()).add_bigoh(prec)],cr=True)
161
+
162
+ F6_squared = F6**2
163
+ F6_squared._unsafe_mutate_truncate(prec)
164
+ D = _delta_poly(prec)
165
+ Fprod = F6_squared
166
+ Dprod = D
167
+
168
+ if cusp_only:
169
+ ls = [Fmpz_poly(0)] + [A] * n
170
+ else:
171
+ ls = [A] * (n + 1)
172
+
173
+ for i in range(1, n + 1):
174
+ ls[n-i] *= Fprod
175
+ ls[i] *= Dprod
176
+ ls[n-i]._unsafe_mutate_truncate(prec)
177
+ ls[i]._unsafe_mutate_truncate(prec)
178
+
179
+ Fprod *= F6_squared
180
+ Dprod *= D
181
+ Fprod._unsafe_mutate_truncate(prec)
182
+ Dprod._unsafe_mutate_truncate(prec)
183
+
184
+ P = PowerSeriesRing(ZZ, var)
185
+ if cusp_only:
186
+ for i in range(1, n + 1):
187
+ for j in range(1, i):
188
+ ls[j] = ls[j] - ls[j][i]*ls[i]
189
+
190
+ return Sequence([P(l.list()).add_bigoh(prec) for l in ls[1:]], cr=True)
191
+
192
+ for i in range(1, n + 1):
193
+ for j in range(i):
194
+ ls[j] = ls[j] - ls[j][i] * ls[i]
195
+
196
+ return Sequence([P(l.list()).add_bigoh(prec) for l in ls], cr=True)
197
+
198
+
199
+ def _delta_poly(prec=10):
200
+ """
201
+ Return the `q`-expansion of Delta as a FLINT polynomial. Used internally by
202
+ the :func:`~delta_qexp` function. See the docstring of :func:`~delta_qexp`
203
+ for more information.
204
+
205
+ INPUT:
206
+
207
+ - ``prec`` -- integer; the absolute precision of the output
208
+
209
+ OUTPUT:
210
+
211
+ the `q`-expansion of Delta to precision ``prec``, as a FLINT
212
+ :class:`~sage.libs.flint.fmpz_poly.Fmpz_poly` object.
213
+
214
+ EXAMPLES::
215
+
216
+ sage: from sage.modular.modform.vm_basis import _delta_poly
217
+ sage: _delta_poly(7)
218
+ 7 0 1 -24 252 -1472 4830 -6048
219
+ """
220
+ if prec <= 0:
221
+ raise ValueError("prec must be positive")
222
+ v = [0] * prec
223
+
224
+ # Let F = \sum_{n >= 0} (-1)^n (2n+1) q^(floor(n(n+1)/2)).
225
+ # Then delta is F^8.
226
+
227
+ # First compute F^2 directly by naive polynomial multiplication,
228
+ # since F is very sparse.
229
+
230
+ stop = int((-1+math.sqrt(1+8*prec))/2.0)
231
+ # make list of index/value pairs for the sparse poly
232
+ values = [(n*(n+1)//2, ((-2*n-1) if (n & 1) else (2*n+1)))
233
+ for n in range(stop + 1)]
234
+
235
+ for (i1, v1) in values:
236
+ for (i2, v2) in values:
237
+ try:
238
+ v[i1 + i2] += v1 * v2
239
+ except IndexError:
240
+ break
241
+
242
+ f = Fmpz_poly(v)
243
+ t = verbose('made series')
244
+ f = f * f
245
+ f._unsafe_mutate_truncate(prec)
246
+ t = verbose('squared (2 of 3)', t)
247
+ f = f * f
248
+ f._unsafe_mutate_truncate(prec - 1)
249
+ t = verbose('squared (3 of 3)', t)
250
+ f = f.left_shift(1)
251
+ t = verbose('shifted', t)
252
+ return f
253
+
254
+
255
+ def _delta_poly_modulo(N, prec=10):
256
+ r"""
257
+ Return the `q`-expansion of `\Delta` modulo `N`. Used internally by
258
+ the :func:`~delta_qexp` function. See the docstring of :func:`~delta_qexp`
259
+ for more information.
260
+
261
+ INPUT:
262
+
263
+ - ``N`` -- positive integer modulo which we want to compute `\Delta`
264
+
265
+ - ``prec`` -- integer; the absolute precision of the output
266
+
267
+ OUTPUT:
268
+
269
+ the polynomial of degree ``prec``-1 which is the truncation
270
+ of `\Delta` modulo `N`, as an element of the polynomial
271
+ ring in `q` over the integers modulo `N`.
272
+
273
+ EXAMPLES::
274
+
275
+ sage: from sage.modular.modform.vm_basis import _delta_poly_modulo
276
+ sage: _delta_poly_modulo(5, 7)
277
+ 2*q^6 + 3*q^4 + 2*q^3 + q^2 + q
278
+ sage: _delta_poly_modulo(10, 12)
279
+ 2*q^11 + 7*q^9 + 6*q^7 + 2*q^6 + 8*q^4 + 2*q^3 + 6*q^2 + q
280
+ """
281
+ if prec <= 0:
282
+ raise ValueError("prec must be positive")
283
+ v = [0] * prec
284
+
285
+ # Let F = \sum_{n >= 0} (-1)^n (2n+1) q^(floor(n(n+1)/2)).
286
+ # Then delta is F^8.
287
+
288
+ stop = int((-1+math.sqrt(8*prec))/2.0)
289
+
290
+ for n in range(stop+1):
291
+ v[n*(n+1)//2] = ((N-1)*(2*n+1) if (n & 1) else (2*n+1))
292
+
293
+ P = PolynomialRing(Integers(N), 'q')
294
+ f = P(v)
295
+ t = verbose('made series')
296
+ # fast way of computing f*f truncated at prec
297
+ f = f._mul_trunc_(f, prec)
298
+ t = verbose('squared (1 of 3)', t)
299
+ f = f._mul_trunc_(f, prec)
300
+ t = verbose('squared (2 of 3)', t)
301
+ f = f._mul_trunc_(f, prec - 1)
302
+ t = verbose('squared (3 of 3)', t)
303
+ f = f.shift(1)
304
+ t = verbose('shifted', t)
305
+
306
+ return f
307
+
308
+
309
+ def delta_qexp(prec=10, var='q', K=ZZ):
310
+ r"""
311
+ Return the `q`-expansion of the weight 12 cusp form `\Delta` as a power
312
+ series with coefficients in the ring K (`= \ZZ` by default).
313
+
314
+ INPUT:
315
+
316
+ - ``prec`` -- integer (default: 10); the absolute precision of the output
317
+ (must be positive)
318
+
319
+ - ``var`` -- string (default: ``'q'``); variable name
320
+
321
+ - ``K`` -- ring (default: `\ZZ`); base ring of answer
322
+
323
+ OUTPUT: a power series over K in the variable ``var``
324
+
325
+ ALGORITHM:
326
+
327
+ Compute the theta series
328
+
329
+ .. MATH::
330
+
331
+ \sum_{n \ge 0} (-1)^n (2n+1) q^{n(n+1)/2},
332
+
333
+ a very simple explicit modular form whose 8th power is `\Delta`. Then
334
+ compute the 8th power. All computations are done over `\ZZ` or `\ZZ`
335
+ modulo `N` depending on the characteristic of the given coefficient
336
+ ring `K`, and coerced into `K` afterwards.
337
+
338
+ EXAMPLES::
339
+
340
+ sage: delta_qexp(7)
341
+ q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 + O(q^7)
342
+ sage: delta_qexp(7,'z')
343
+ z - 24*z^2 + 252*z^3 - 1472*z^4 + 4830*z^5 - 6048*z^6 + O(z^7)
344
+ sage: delta_qexp(-3)
345
+ Traceback (most recent call last):
346
+ ...
347
+ ValueError: prec must be positive
348
+ sage: delta_qexp(20, K = GF(3))
349
+ q + q^4 + 2*q^7 + 2*q^13 + q^16 + 2*q^19 + O(q^20)
350
+ sage: delta_qexp(20, K = GF(3^5, 'a'))
351
+ q + q^4 + 2*q^7 + 2*q^13 + q^16 + 2*q^19 + O(q^20)
352
+ sage: delta_qexp(10, K = IntegerModRing(60))
353
+ 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)
354
+
355
+ TESTS:
356
+
357
+ Test algorithm with modular arithmetic (see also :issue:`11804`)::
358
+
359
+ sage: delta_qexp(10^4).change_ring(GF(13)) == delta_qexp(10^4, K=GF(13))
360
+ True
361
+ sage: delta_qexp(1000).change_ring(IntegerModRing(5^100)) == delta_qexp(1000, K=IntegerModRing(5^100))
362
+ True
363
+
364
+ AUTHORS:
365
+
366
+ - William Stein: original code
367
+
368
+ - David Harvey (2007-05): sped up first squaring step
369
+
370
+ - Martin Raum (2009-08-02): use FLINT for polynomial arithmetic (instead of NTL)
371
+ """
372
+ R = PowerSeriesRing(K, var)
373
+ if K in (ZZ, QQ):
374
+ return R(_delta_poly(prec).list(), prec, check=False)
375
+ ch = K.characteristic()
376
+ if ch > 0 and prec > 150:
377
+ return R(_delta_poly_modulo(ch, prec), prec, check=False)
378
+ else:
379
+ # compute over ZZ and coerce
380
+ return R(_delta_poly(prec).list(), prec, check=True)