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,423 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.combinat sage.graphs
3
+ r"""
4
+ Subspaces of modular forms for Hecke triangle groups
5
+
6
+ AUTHORS:
7
+
8
+ - Jonas Jermann (2013): initial version
9
+ """
10
+
11
+ # ****************************************************************************
12
+ # Copyright (C) 2013-2014 Jonas Jermann <jjermann2@gmail.com>
13
+ #
14
+ # Distributed under the terms of the GNU General Public License (GPL)
15
+ # as published by the Free Software Foundation; either version 2 of
16
+ # the License, or (at your option) any later version.
17
+ # https://www.gnu.org/licenses/
18
+ # ****************************************************************************
19
+
20
+ from sage.modules.module import Module
21
+ from sage.structure.unique_representation import UniqueRepresentation
22
+ from sage.misc.cachefunc import cached_method
23
+ from sage.matrix.constructor import matrix
24
+
25
+ from .abstract_space import FormsSpace_abstract
26
+
27
+
28
+ def canonical_parameters(ambient_space, basis, check=True):
29
+ r"""
30
+ Return a canonical version of the parameters.
31
+ In particular the list/tuple ``basis`` is replaced by a
32
+ tuple of linearly independent elements in the ambient space.
33
+
34
+ If ``check=False`` (default: ``True``) then ``basis``
35
+ is assumed to already be a basis.
36
+
37
+ EXAMPLES::
38
+
39
+ sage: from sage.modular.modform_hecketriangle.subspace import canonical_parameters
40
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
41
+ sage: MF = ModularForms(n=6, k=12, ep=1)
42
+ sage: canonical_parameters(MF, [MF.Delta().as_ring_element(), MF.gen(0), 2*MF.gen(0)])
43
+ (ModularForms(n=6, k=12, ep=1) over Integer Ring,
44
+ (q + 30*q^2 + 333*q^3 + 1444*q^4 + O(q^5),
45
+ 1 + 26208*q^3 + 530712*q^4 + O(q^5)))
46
+ """
47
+ if check:
48
+ coord_matrix = matrix([ambient_space(v).ambient_coordinate_vector() for v in basis])
49
+ pivots = coord_matrix.transpose().pivots()
50
+ new_basis = [ambient_space(basis[l]) for l in pivots]
51
+ basis = tuple(new_basis)
52
+ else:
53
+ basis = [ambient_space(v) for v in basis]
54
+ basis = tuple(basis)
55
+
56
+ return (ambient_space, basis)
57
+
58
+
59
+ def ModularFormsSubSpace(*args, **kwargs):
60
+ r"""
61
+ Create a modular forms subspace generated by the supplied arguments if possible.
62
+ Instead of a list of generators also multiple input arguments can be used.
63
+ If ``reduce=True`` then the corresponding ambient space is chosen as small as possible.
64
+ If no subspace is available then the ambient space is returned.
65
+
66
+ EXAMPLES::
67
+
68
+ sage: from sage.modular.modform_hecketriangle.subspace import ModularFormsSubSpace
69
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
70
+ sage: MF = ModularForms()
71
+ sage: subspace = ModularFormsSubSpace(MF.E4()^3, MF.E6()^2+MF.Delta(), MF.Delta())
72
+ sage: subspace
73
+ Subspace of dimension 2 of ModularForms(n=3, k=12, ep=1) over Integer Ring
74
+ sage: subspace.ambient_space()
75
+ ModularForms(n=3, k=12, ep=1) over Integer Ring
76
+ sage: subspace.gens()
77
+ (1 + 720*q + 179280*q^2 + 16954560*q^3 + 396974160*q^4 + O(q^5),
78
+ 1 - 1007*q + 220728*q^2 + 16519356*q^3 + 399516304*q^4 + O(q^5))
79
+ sage: ModularFormsSubSpace(MF.E4()^3-MF.E6()^2, reduce=True).ambient_space()
80
+ CuspForms(n=3, k=12, ep=1) over Integer Ring
81
+ sage: ModularFormsSubSpace(MF.E4()^3-MF.E6()^2, MF.J_inv()*MF.E4()^3, reduce=True)
82
+ WeakModularForms(n=3, k=12, ep=1) over Integer Ring
83
+ """
84
+
85
+ generators = []
86
+ for arg in args:
87
+ if isinstance(arg, (list, tuple)):
88
+ generators += arg
89
+ else:
90
+ generators.append(arg)
91
+ if ("reduce" in kwargs) and kwargs["reduce"]:
92
+ generators = [gen.full_reduce() for gen in generators]
93
+
94
+ if len(generators) == 0:
95
+ raise ValueError("No generators specified")
96
+
97
+ el = False
98
+ for gen in generators:
99
+ if el:
100
+ el += gen
101
+ else:
102
+ el = gen
103
+
104
+ ambient_space = el.parent()
105
+
106
+ try:
107
+ # This works if and only if ambient_space supports subspaces
108
+ ambient_space.coordinate_vector(el)
109
+
110
+ generators = [ambient_space(gen) for gen in generators]
111
+ return SubSpaceForms(ambient_space, generators)
112
+ except (NotImplementedError, AttributeError):
113
+ return ambient_space
114
+
115
+
116
+ class SubSpaceForms(FormsSpace_abstract, Module, UniqueRepresentation):
117
+ r"""
118
+ Submodule of (Hecke) forms in the given ambient space for the given basis.
119
+ """
120
+
121
+ @staticmethod
122
+ def __classcall__(cls, ambient_space, basis=(), check=True):
123
+ r"""
124
+ Return a (cached) instance with canonical parameters.
125
+
126
+ EXAMPLES::
127
+
128
+ sage: from sage.modular.modform_hecketriangle.subspace import (canonical_parameters, SubSpaceForms)
129
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
130
+ sage: MF = ModularForms(n=6, k=12, ep=1)
131
+ sage: (ambient_space, basis) = canonical_parameters(MF, [MF.Delta().as_ring_element(), MF.gen(0)])
132
+ sage: SubSpaceForms(MF, [MF.Delta().as_ring_element(), MF.gen(0)]) == SubSpaceForms(ambient_space, basis)
133
+ True
134
+ """
135
+ (ambient_space, basis) = canonical_parameters(ambient_space, basis, check)
136
+
137
+ # we return check=True to ensure only one cached instance
138
+ return super().__classcall__(cls, ambient_space=ambient_space, basis=basis, check=True)
139
+
140
+ def __init__(self, ambient_space, basis, check):
141
+ r"""
142
+ Return the Submodule of (Hecke) forms in ``ambient_space`` for the
143
+ given ``basis``.
144
+
145
+ INPUT:
146
+
147
+ - ``ambient_space`` -- an ambient forms space
148
+
149
+ - ``basis`` -- a tuple of (not necessarily linearly independent)
150
+ elements of ``ambient_space``
151
+
152
+ - ``check`` -- if ``True`` (default) then a maximal linearly
153
+ independent subset of ``basis`` is chosen. Otherwise it is assumed
154
+ that ``basis`` is linearly independent.
155
+
156
+ OUTPUT: the corresponding submodule
157
+
158
+ EXAMPLES::
159
+
160
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms, QuasiCuspForms
161
+ sage: MF = ModularForms(n=6, k=20, ep=1)
162
+ sage: MF
163
+ ModularForms(n=6, k=20, ep=1) over Integer Ring
164
+ sage: MF.dimension()
165
+ 4
166
+ sage: subspace = MF.subspace([MF.Delta()*MF.E4()^2, MF.gen(0), 2*MF.gen(0)])
167
+ sage: subspace
168
+ Subspace of dimension 2 of ModularForms(n=6, k=20, ep=1) over Integer Ring
169
+ sage: subspace.analytic_type()
170
+ modular
171
+ sage: subspace.category()
172
+ Category of modules over Integer Ring
173
+ sage: subspace in subspace.category()
174
+ True
175
+ sage: subspace.module()
176
+ Vector space of degree 4 and dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring
177
+ Basis matrix:
178
+ [ 1 0 0 0]
179
+ [ 0 1 13/(18*d) 103/(432*d^2)]
180
+ sage: subspace.ambient_module()
181
+ Vector space of dimension 4 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring
182
+ sage: subspace.ambient_module() == MF.module()
183
+ True
184
+ sage: subspace.ambient_space() == MF
185
+ True
186
+ sage: subspace.basis()
187
+ [q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5), 1 + 360360*q^4 + O(q^5)]
188
+ sage: subspace.basis()[0].parent() == MF
189
+ True
190
+ sage: subspace.gens()
191
+ (q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5),
192
+ 1 + 360360*q^4 + O(q^5))
193
+ sage: subspace.gens()[0].parent() == subspace
194
+ True
195
+ sage: subspace.is_ambient()
196
+ False
197
+
198
+ sage: MF = QuasiCuspForms(n=infinity, k=12, ep=1)
199
+ sage: MF.dimension()
200
+ 4
201
+ sage: subspace = MF.subspace([MF.Delta(), MF.E4()*MF.f_inf()*MF.E2()*MF.f_i(), MF.E4()*MF.f_inf()*MF.E2()^2, MF.E4()*MF.f_inf()*(MF.E4()-MF.E2()^2)])
202
+ sage: subspace.default_prec(3)
203
+ sage: subspace
204
+ Subspace of dimension 3 of QuasiCuspForms(n=+Infinity, k=12, ep=1) over Integer Ring
205
+ sage: subspace.gens()
206
+ (q + 24*q^2 + O(q^3), q - 24*q^2 + O(q^3), q - 8*q^2 + O(q^3))
207
+ """
208
+ FormsSpace_abstract.__init__(self, group=ambient_space.group(), base_ring=ambient_space.base_ring(), k=ambient_space.weight(), ep=ambient_space.ep(), n=ambient_space.hecke_n())
209
+ Module.__init__(self, base=ambient_space.base_ring())
210
+
211
+ self._ambient_space = ambient_space
212
+ self._basis = list(basis)
213
+ # self(v) instead would somehow mess up the coercion model
214
+ self._gens = tuple(self._element_constructor_(v) for v in basis)
215
+ self._module = ambient_space._module.submodule([ambient_space.coordinate_vector(v) for v in basis])
216
+ # TODO: get the analytic type from the basis
217
+ # self._analytic_type=self.AT(["quasi", "mero"])
218
+ self._analytic_type = ambient_space._analytic_type
219
+
220
+ def _repr_(self):
221
+ r"""
222
+ Return the string representation of ``self``.
223
+
224
+ EXAMPLES::
225
+
226
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
227
+ sage: MF = ModularForms(n=6, k=20, ep=1)
228
+ sage: subspace = MF.subspace([MF.Delta()*MF.E4()^2, MF.gen(0)])
229
+ sage: subspace
230
+ Subspace of dimension 2 of ModularForms(n=6, k=20, ep=1) over Integer Ring
231
+ """
232
+
233
+ # If we list the basis the representation usually gets too long...
234
+ # return "Subspace with basis {} of {}".format([v.as_ring_element() for v in self.basis()], self._ambient_space)
235
+ return f"Subspace of dimension {len(self._basis)} of {self._ambient_space}"
236
+
237
+ def change_ring(self, new_base_ring):
238
+ r"""
239
+ Return the same space as ``self`` but over a new base ring ``new_base_ring``.
240
+
241
+ EXAMPLES::
242
+
243
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
244
+ sage: MF = ModularForms(n=6, k=20, ep=1)
245
+ sage: subspace = MF.subspace([MF.Delta()*MF.E4()^2, MF.gen(0)])
246
+ sage: subspace.change_ring(QQ)
247
+ Subspace of dimension 2 of ModularForms(n=6, k=20, ep=1) over Rational Field
248
+ sage: subspace.change_ring(CC)
249
+ Traceback (most recent call last):
250
+ ...
251
+ NotImplementedError
252
+ """
253
+
254
+ return self.__class__.__base__(self._ambient_space.change_ring(new_base_ring), self._basis, check=False)
255
+
256
+ def change_ambient_space(self, new_ambient_space):
257
+ r"""
258
+ Return a new subspace with the same basis but inside a different ambient space
259
+ (if possible).
260
+
261
+ EXAMPLES::
262
+
263
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms, QuasiModularForms
264
+ sage: MF = ModularForms(n=6, k=20, ep=1)
265
+ sage: subspace = MF.subspace([MF.Delta()*MF.E4()^2, MF.gen(0)])
266
+ sage: new_ambient_space = QuasiModularForms(n=6, k=20, ep=1)
267
+ sage: subspace.change_ambient_space(new_ambient_space) # long time
268
+ Subspace of dimension 2 of QuasiModularForms(n=6, k=20, ep=1) over Integer Ring
269
+ """
270
+ return self.__class__.__base__(new_ambient_space, self._basis, check=False)
271
+
272
+ @cached_method
273
+ def contains_coeff_ring(self):
274
+ r"""
275
+ Return whether ``self`` contains its coefficient ring.
276
+
277
+ EXAMPLES::
278
+
279
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
280
+ sage: MF = ModularForms(k=0, ep=1, n=8)
281
+ sage: subspace = MF.subspace([1])
282
+ sage: subspace.contains_coeff_ring()
283
+ True
284
+ sage: subspace = MF.subspace([])
285
+ sage: subspace.contains_coeff_ring()
286
+ False
287
+ sage: MF = ModularForms(k=0, ep=-1, n=8)
288
+ sage: subspace = MF.subspace([])
289
+ sage: subspace.contains_coeff_ring()
290
+ False
291
+ """
292
+ return (super().contains_coeff_ring() and self.dimension() == 1)
293
+
294
+ @cached_method
295
+ def basis(self):
296
+ r"""
297
+ Return the basis of ``self`` in the ambient space.
298
+
299
+ EXAMPLES::
300
+
301
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
302
+ sage: MF = ModularForms(n=6, k=20, ep=1)
303
+ sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
304
+ sage: subspace.basis()
305
+ [q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5), 1 + 360360*q^4 + O(q^5)]
306
+ sage: subspace.basis()[0].parent() == MF
307
+ True
308
+ """
309
+ return self._basis
310
+
311
+ @cached_method
312
+ def gens(self) -> tuple:
313
+ r"""
314
+ Return the basis of ``self``.
315
+
316
+ EXAMPLES::
317
+
318
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
319
+ sage: MF = ModularForms(n=6, k=20, ep=1)
320
+ sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
321
+ sage: subspace.gens()
322
+ (q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5),
323
+ 1 + 360360*q^4 + O(q^5))
324
+ sage: subspace.gens()[0].parent() == subspace
325
+ True
326
+ """
327
+ return self._gens
328
+
329
+ @cached_method
330
+ def dimension(self):
331
+ r"""
332
+ Return the dimension of ``self``.
333
+
334
+ EXAMPLES::
335
+
336
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
337
+ sage: MF = ModularForms(n=6, k=20, ep=1)
338
+ sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
339
+ sage: subspace.dimension()
340
+ 2
341
+ sage: subspace.dimension() == len(subspace.gens())
342
+ True
343
+ """
344
+ return len(self.basis())
345
+
346
+ @cached_method
347
+ def degree(self):
348
+ r"""
349
+ Return the degree of ``self``.
350
+
351
+ EXAMPLES::
352
+
353
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
354
+ sage: MF = ModularForms(n=6, k=20, ep=1)
355
+ sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
356
+ sage: subspace.degree()
357
+ 4
358
+ sage: subspace.degree() == subspace.ambient_space().degree()
359
+ True
360
+ """
361
+ return self._ambient_space.degree()
362
+
363
+ @cached_method
364
+ def rank(self):
365
+ r"""
366
+ Return the rank of ``self``.
367
+
368
+ EXAMPLES::
369
+
370
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms
371
+ sage: MF = ModularForms(n=6, k=20, ep=1)
372
+ sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
373
+ sage: subspace.rank()
374
+ 2
375
+ sage: subspace.rank() == subspace.dimension()
376
+ True
377
+ """
378
+ return len(self.gens())
379
+
380
+ @cached_method
381
+ def coordinate_vector(self, v):
382
+ r"""
383
+ Return the coordinate vector of ``v`` with respect to
384
+ the basis ``self.gens()``.
385
+
386
+ INPUT:
387
+
388
+ - ``v`` -- an element of ``self``
389
+
390
+ OUTPUT:
391
+
392
+ The coordinate vector of ``v`` with respect
393
+ to the basis ``self.gens()``.
394
+
395
+ Note: The coordinate vector is not an element of ``self.module()``.
396
+
397
+ EXAMPLES::
398
+
399
+ sage: from sage.modular.modform_hecketriangle.space import ModularForms, QuasiCuspForms
400
+ sage: MF = ModularForms(n=6, k=20, ep=1)
401
+ sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
402
+ sage: subspace.coordinate_vector(MF.gen(0) + MF.Delta()*MF.E4()^2).parent()
403
+ Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring
404
+ sage: subspace.coordinate_vector(MF.gen(0) + MF.Delta()*MF.E4()^2)
405
+ (1, 1)
406
+
407
+ sage: MF = ModularForms(n=4, k=24, ep=-1)
408
+ sage: subspace = MF.subspace([MF.gen(0), MF.gen(2)])
409
+ sage: subspace.coordinate_vector(subspace.gen(0)).parent()
410
+ Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring
411
+ sage: subspace.coordinate_vector(subspace.gen(0))
412
+ (1, 0)
413
+
414
+ sage: MF = QuasiCuspForms(n=infinity, k=12, ep=1)
415
+ sage: subspace = MF.subspace([MF.Delta(), MF.E4()*MF.f_inf()*MF.E2()*MF.f_i(), MF.E4()*MF.f_inf()*MF.E2()^2, MF.E4()*MF.f_inf()*(MF.E4()-MF.E2()^2)])
416
+ sage: el = MF.E4()*MF.f_inf()*(7*MF.E4() - 3*MF.E2()^2)
417
+ sage: subspace.coordinate_vector(el)
418
+ (7, 0, -3)
419
+ sage: subspace.ambient_coordinate_vector(el)
420
+ (7, 21/(8*d), 0, -3)
421
+ """
422
+
423
+ return self._module.coordinate_vector(self.ambient_coordinate_vector(v))
@@ -0,0 +1,17 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ from sage.modular.modsym.all__sagemath_flint import *
3
+
4
+ from sage.misc.lazy_import import lazy_import
5
+
6
+ from sage.modular.modsym.element import set_modsym_print_mode
7
+
8
+ from sage.modular.modsym.modsym import ModularSymbols, ModularSymbols_clear_cache
9
+
10
+ lazy_import('sage.modular.modsym.heilbronn', ['HeilbronnCremona', 'HeilbronnMerel'])
11
+
12
+ from sage.modular.modsym.p1list_nf import P1NFList, MSymbol
13
+
14
+ from sage.modular.modsym.ghlist import GHlist
15
+
16
+ from sage.modular.modsym.g1list import G1list
17
+ del lazy_import