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,416 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.combinat sage.graphs
3
+ r"""
4
+ Constructor for spaces of modular forms for Hecke triangle groups based on a type
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.rings.integer_ring import ZZ
21
+ from sage.rings.rational_field import QQ
22
+ from sage.rings.infinity import infinity
23
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
24
+ from sage.rings.fraction_field import FractionField
25
+
26
+
27
+ def rational_type(f, n=ZZ(3), base_ring=ZZ):
28
+ r"""
29
+ Return the basic analytic properties that can be determined
30
+ directly from the specified rational function ``f``
31
+ which is interpreted as a representation of an
32
+ element of a FormsRing for the Hecke Triangle group
33
+ with parameter ``n`` and the specified ``base_ring``.
34
+
35
+ In particular the following degree of the generators is assumed:
36
+
37
+ `deg(1) := (0, 1)`
38
+ `deg(x) := (4/(n-2), 1)`
39
+ `deg(y) := (2n/(n-2), -1)`
40
+ `deg(z) := (2, -1)`
41
+
42
+ The meaning of homogeneous elements changes accordingly.
43
+
44
+ INPUT:
45
+
46
+ - ``f`` -- a rational function in ``x,y,z,d`` over ``base_ring``
47
+
48
+ - ``n`` -- integer greater or equal to `3` corresponding
49
+ to the ``HeckeTriangleGroup`` with that parameter (default: `3`)
50
+
51
+ - ``base_ring`` -- the base ring of the corresponding forms ring, resp.
52
+ polynomial ring (default: ``ZZ``)
53
+
54
+ OUTPUT:
55
+
56
+ A tuple ``(elem, homo, k, ep, analytic_type)`` describing the basic
57
+ analytic properties of `f` (with the interpretation indicated above).
58
+
59
+ - ``elem`` -- ``True`` if `f` has a homogeneous denominator
60
+
61
+ - ``homo`` -- ``True`` if `f` also has a homogeneous numerator
62
+
63
+ - ``k`` -- ``None`` if `f` is not homogeneous, otherwise
64
+ the weight of `f` (which is the first component of its degree)
65
+
66
+ - ``ep`` -- ``None`` if `f` is not homogeneous, otherwise
67
+ the multiplier of `f` (which is the second component of its degree)
68
+
69
+ - ``analytic_type`` -- the :class:`AnalyticType` of `f`
70
+
71
+ For the zero function the degree `(0, 1)` is chosen.
72
+
73
+ This function is (heavily) used to determine the type of elements
74
+ and to check if the element really is contained in its parent.
75
+
76
+ EXAMPLES::
77
+
78
+ sage: from sage.modular.modform_hecketriangle.constructor import rational_type
79
+
80
+ sage: rational_type(0, n=4)
81
+ (True, True, 0, 1, zero)
82
+ sage: rational_type(1, n=12)
83
+ (True, True, 0, 1, modular)
84
+
85
+ sage: # needs sage.symbolic
86
+ sage: (x,y,z,d) = var("x,y,z,d")
87
+ sage: rational_type(x^3 - y^2)
88
+ (True, True, 12, 1, cuspidal)
89
+ sage: rational_type(x * z, n=7)
90
+ (True, True, 14/5, -1, quasi modular)
91
+ sage: rational_type(1/(x^3 - y^2) + z/d)
92
+ (True, False, None, None, quasi weakly holomorphic modular)
93
+ sage: rational_type(x^3/(x^3 - y^2))
94
+ (True, True, 0, 1, weakly holomorphic modular)
95
+ sage: rational_type(1/(x + z))
96
+ (False, False, None, None, None)
97
+ sage: rational_type(1/x + 1/z)
98
+ (True, False, None, None, quasi meromorphic modular)
99
+ sage: rational_type(d/x, n=10)
100
+ (True, True, -1/2, 1, meromorphic modular)
101
+ sage: rational_type(1.1 * z * (x^8-y^2), n=8, base_ring=CC)
102
+ (True, True, 22/3, -1, quasi cuspidal)
103
+ sage: rational_type(x-y^2, n=infinity)
104
+ (True, True, 4, 1, modular)
105
+ sage: rational_type(x*(x-y^2), n=infinity)
106
+ (True, True, 8, 1, cuspidal)
107
+ sage: rational_type(1/x, n=infinity)
108
+ (True, True, -4, 1, weakly holomorphic modular)
109
+ """
110
+
111
+ from .analytic_type import AnalyticType
112
+ AT = AnalyticType()
113
+
114
+ # Determine whether f is zero
115
+ if (f == 0):
116
+ # elem, homo, k, ep, analytic_type
117
+ return (True, True, QQ(0), ZZ(1), AT([]))
118
+
119
+ analytic_type = AT(["quasi", "mero"])
120
+
121
+ R = PolynomialRing(base_ring, 'x,y,z,d')
122
+ F = FractionField(R)
123
+ x, y, z, d = R.gens()
124
+ R2 = PolynomialRing(PolynomialRing(base_ring, 'd'), 'x,y,z')
125
+ dhom = R.hom(R2.gens() + (R2.base().gen(),), R2)
126
+
127
+ f = F(f)
128
+
129
+ num = R(f.numerator())
130
+ denom = R(f.denominator())
131
+ ep_num = {ZZ.one() - 2*((sum([g.exponents()[0][m] for m in [1, 2]])) % 2) for g in dhom(num).monomials()}
132
+ ep_denom = {ZZ.one() - 2*((sum([g.exponents()[0][m] for m in [1, 2]])) % 2) for g in dhom(denom).monomials()}
133
+
134
+ if (n == infinity):
135
+ hom_num = R(num.subs(x=x**4, y=y**2, z=z**2))
136
+ hom_denom = R(denom.subs(x=x**4, y=y**2, z=z**2))
137
+ else:
138
+ n = ZZ(n)
139
+ hom_num = R(num.subs(x=x**4, y=y**(2*n), z=z**(2*(n-2))))
140
+ hom_denom = R(denom.subs(x=x**4, y=y**(2*n), z=z**(2*(n-2))))
141
+
142
+ # Determine whether the denominator of f is homogeneous
143
+ if (len(ep_denom) == 1 and dhom(hom_denom).is_homogeneous()):
144
+ elem = True
145
+ else:
146
+ # elem, homo, k, ep, analytic_type
147
+ return (False, False, None, None, None)
148
+
149
+ # Determine whether f is homogeneous
150
+ if len(ep_num) == 1 and dhom(hom_num).is_homogeneous():
151
+ homo = True
152
+ if n == infinity:
153
+ weight = (dhom(hom_num).degree() - dhom(hom_denom).degree())
154
+ else:
155
+ weight = (dhom(hom_num).degree() - dhom(hom_denom).degree()) / (n-2)
156
+ ep = ep_num.pop() / ep_denom.pop()
157
+ # TODO: decompose f (resp. its degrees) into homogeneous parts
158
+ else:
159
+ homo = False
160
+ weight = None
161
+ ep = None
162
+
163
+ # Note that we intentionally leave out the d-factor!
164
+ if n == infinity:
165
+ finf_pol = (x-y**2)
166
+ else:
167
+ finf_pol = x**n-y**2
168
+
169
+ # Determine whether f is modular
170
+ if not (num.degree(z) > 0 or denom.degree(z) > 0):
171
+ analytic_type = analytic_type.reduce_to("mero")
172
+
173
+ # Determine whether f is holomorphic
174
+ if dhom(denom).is_constant():
175
+ analytic_type = analytic_type.reduce_to(["quasi", "holo"])
176
+ # Determine whether f is cuspidal in the sense that finf divides it...
177
+ # Bug in singular: finf_pol.divides(1.0) fails over RR
178
+ if (not dhom(num).is_constant() and finf_pol.divides(num)):
179
+ if (n != infinity or x.divides(num)):
180
+ analytic_type = analytic_type.reduce_to(["quasi", "cusp"])
181
+ else:
182
+ # -> Because of a bug with singular in some cases
183
+ try:
184
+ while finf_pol.divides(denom):
185
+ # a simple "denom /= finf_pol" is strangely not enough for non-exact rings
186
+ # and dividing would/may result with an element of the quotient ring of the polynomial ring
187
+ denom = denom.quo_rem(finf_pol)[0]
188
+ denom = R(denom)
189
+ if (n == infinity):
190
+ while (x.divides(denom)):
191
+ # a simple "denom /= x" is strangely not enough for non-exact rings
192
+ # and dividing would/may result with an element of the quotient ring of the polynomial ring
193
+ denom = denom.quo_rem(x)[0]
194
+ denom = R(denom)
195
+ except TypeError:
196
+ pass
197
+
198
+ # Determine whether f is weakly holomorphic in the sense that at most powers of finf occur in denom
199
+ if (dhom(denom).is_constant()):
200
+ analytic_type = analytic_type.reduce_to(["quasi", "weak"])
201
+
202
+ return (elem, homo, weight, ep, analytic_type)
203
+
204
+
205
+ def FormsSpace(analytic_type, group=3, base_ring=ZZ, k=QQ(0), ep=None):
206
+ r"""
207
+ Return the FormsSpace with the given ``analytic_type``, ``group``
208
+ ``base_ring`` and degree (``k``, ``ep``).
209
+
210
+ INPUT:
211
+
212
+ - ``analytic_type`` -- an element of ``AnalyticType()`` describing
213
+ the analytic type of the space
214
+
215
+ - ``group`` -- the index of the (Hecke triangle) group of the space (default: `3`)
216
+
217
+ - ``base_ring`` -- the base ring of the space (default: ``ZZ``)
218
+
219
+ - ``k`` -- the weight of the space, a rational number (default: ``0``)
220
+
221
+ - ``ep`` -- the multiplier of the space, `1`, `-1` or ``None``
222
+ (in which case ``ep`` should be determined from ``k``). Default: ``None``.
223
+
224
+ For the variables ``group``, ``base_ring``, ``k``, ``ep``
225
+ the same arguments as for the class ``FormsSpace_abstract`` can be used.
226
+ The variables will then be put in canonical form.
227
+ In particular the multiplier ``ep`` is calculated
228
+ as usual from ``k`` if ``ep == None``.
229
+
230
+ OUTPUT: the FormsSpace with the given properties
231
+
232
+ EXAMPLES::
233
+
234
+ sage: from sage.modular.modform_hecketriangle.constructor import FormsSpace
235
+ sage: FormsSpace([])
236
+ ZeroForms(n=3, k=0, ep=1) over Integer Ring
237
+ sage: FormsSpace(["quasi"]) # not implemented
238
+
239
+ sage: FormsSpace("cusp", group=5, base_ring=CC, k=12, ep=1)
240
+ CuspForms(n=5, k=12, ep=1) over Complex Field with 53 bits of precision
241
+
242
+ sage: FormsSpace("holo")
243
+ ModularForms(n=3, k=0, ep=1) over Integer Ring
244
+
245
+ sage: FormsSpace("weak", group=6, base_ring=ZZ, k=0, ep=-1)
246
+ WeakModularForms(n=6, k=0, ep=-1) over Integer Ring
247
+
248
+ sage: FormsSpace("mero", group=7, base_ring=ZZ, k=2, ep=-1)
249
+ MeromorphicModularForms(n=7, k=2, ep=-1) over Integer Ring
250
+
251
+ sage: FormsSpace(["quasi", "cusp"], group=5, base_ring=CC, k=12, ep=1)
252
+ QuasiCuspForms(n=5, k=12, ep=1) over Complex Field with 53 bits of precision
253
+
254
+ sage: FormsSpace(["quasi", "holo"])
255
+ QuasiModularForms(n=3, k=0, ep=1) over Integer Ring
256
+
257
+ sage: FormsSpace(["quasi", "weak"], group=6, base_ring=ZZ, k=0, ep=-1)
258
+ QuasiWeakModularForms(n=6, k=0, ep=-1) over Integer Ring
259
+
260
+ sage: FormsSpace(["quasi", "mero"], group=7, base_ring=ZZ, k=2, ep=-1)
261
+ QuasiMeromorphicModularForms(n=7, k=2, ep=-1) over Integer Ring
262
+
263
+ sage: FormsSpace(["quasi", "cusp"], group=infinity, base_ring=ZZ, k=2, ep=-1)
264
+ QuasiCuspForms(n=+Infinity, k=2, ep=-1) over Integer Ring
265
+ """
266
+
267
+ from .space import canonical_parameters
268
+ (group, base_ring, k, ep, n) = canonical_parameters(group, base_ring, k, ep)
269
+
270
+ from .analytic_type import AnalyticType
271
+ AT = AnalyticType()
272
+ analytic_type = AT(analytic_type)
273
+
274
+ if analytic_type <= AT("mero"):
275
+ if analytic_type <= AT("weak"):
276
+ if analytic_type <= AT("holo"):
277
+ if analytic_type <= AT("cusp"):
278
+ if analytic_type <= AT([]):
279
+ from .space import ZeroForm
280
+ return ZeroForm(group=group, base_ring=base_ring, k=k, ep=ep)
281
+ else:
282
+ from .space import CuspForms
283
+ return CuspForms(group=group, base_ring=base_ring, k=k, ep=ep)
284
+ else:
285
+ from .space import ModularForms
286
+ return ModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
287
+ else:
288
+ from .space import WeakModularForms
289
+ return WeakModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
290
+ else:
291
+ from .space import MeromorphicModularForms
292
+ return MeromorphicModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
293
+ elif analytic_type <= AT(["mero", "quasi"]):
294
+ if analytic_type <= AT(["weak", "quasi"]):
295
+ if analytic_type <= AT(["holo", "quasi"]):
296
+ if analytic_type <= AT(["cusp", "quasi"]):
297
+ if analytic_type <= AT(["quasi"]):
298
+ raise ValueError("There should be only non-quasi ZeroForms. That could be changed but then this exception should be removed.")
299
+ from .space import ZeroForm
300
+ return ZeroForm(group=group, base_ring=base_ring, k=k, ep=ep)
301
+ else:
302
+ from .space import QuasiCuspForms
303
+ return QuasiCuspForms(group=group, base_ring=base_ring, k=k, ep=ep)
304
+ else:
305
+ from .space import QuasiModularForms
306
+ return QuasiModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
307
+ else:
308
+ from .space import QuasiWeakModularForms
309
+ return QuasiWeakModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
310
+ else:
311
+ from .space import QuasiMeromorphicModularForms
312
+ return QuasiMeromorphicModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
313
+ else:
314
+ raise NotImplementedError("Analytic type not implemented.")
315
+
316
+
317
+ def FormsRing(analytic_type, group=3, base_ring=ZZ, red_hom=False):
318
+ r"""
319
+ Return the FormsRing with the given ``analytic_type``, ``group``
320
+ ``base_ring`` and variable ``red_hom``.
321
+
322
+ INPUT:
323
+
324
+ - ``analytic_type`` -- an element of ``AnalyticType()`` describing
325
+ the analytic type of the space
326
+
327
+ - ``group`` -- the index of the (Hecke triangle) group of the space
328
+ (default: 3`)
329
+
330
+ - ``base_ring`` -- the base ring of the space (default: ``ZZ``)
331
+
332
+ - ``red_hom`` -- the (boolean) variable ``red_hom`` of the space
333
+ (default: ``False``)
334
+
335
+ For the variables ``group``, ``base_ring``, ``red_hom``
336
+ the same arguments as for the class :class:`FormsRing_abstract` can be used.
337
+ The variables will then be put in canonical form.
338
+
339
+ OUTPUT: the FormsRing with the given properties
340
+
341
+ EXAMPLES::
342
+
343
+ sage: from sage.modular.modform_hecketriangle.constructor import FormsRing
344
+ sage: FormsRing("cusp", group=5, base_ring=CC)
345
+ CuspFormsRing(n=5) over Complex Field with 53 bits of precision
346
+
347
+ sage: FormsRing("holo")
348
+ ModularFormsRing(n=3) over Integer Ring
349
+
350
+ sage: FormsRing("weak", group=6, base_ring=ZZ, red_hom=True)
351
+ WeakModularFormsRing(n=6) over Integer Ring
352
+
353
+ sage: FormsRing("mero", group=7, base_ring=ZZ)
354
+ MeromorphicModularFormsRing(n=7) over Integer Ring
355
+
356
+ sage: FormsRing(["quasi", "cusp"], group=5, base_ring=CC)
357
+ QuasiCuspFormsRing(n=5) over Complex Field with 53 bits of precision
358
+
359
+ sage: FormsRing(["quasi", "holo"])
360
+ QuasiModularFormsRing(n=3) over Integer Ring
361
+
362
+ sage: FormsRing(["quasi", "weak"], group=6, base_ring=ZZ, red_hom=True)
363
+ QuasiWeakModularFormsRing(n=6) over Integer Ring
364
+
365
+ sage: FormsRing(["quasi", "mero"], group=7, base_ring=ZZ, red_hom=True)
366
+ QuasiMeromorphicModularFormsRing(n=7) over Integer Ring
367
+
368
+ sage: FormsRing(["quasi", "cusp"], group=infinity)
369
+ QuasiCuspFormsRing(n=+Infinity) over Integer Ring
370
+ """
371
+
372
+ from .graded_ring import canonical_parameters
373
+ (group, base_ring, red_hom, n) = canonical_parameters(group, base_ring, red_hom)
374
+
375
+ from .analytic_type import AnalyticType
376
+ AT = AnalyticType()
377
+ analytic_type = AT(analytic_type)
378
+
379
+ if analytic_type <= AT("mero"):
380
+ if analytic_type <= AT("weak"):
381
+ if analytic_type <= AT("holo"):
382
+ if analytic_type <= AT("cusp"):
383
+ if analytic_type <= AT([]):
384
+ raise ValueError("Analytic type Zero is not valid for forms rings.")
385
+ else:
386
+ from .graded_ring import CuspFormsRing
387
+ return CuspFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
388
+ else:
389
+ from .graded_ring import ModularFormsRing
390
+ return ModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
391
+ else:
392
+ from .graded_ring import WeakModularFormsRing
393
+ return WeakModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
394
+ else:
395
+ from .graded_ring import MeromorphicModularFormsRing
396
+ return MeromorphicModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
397
+ elif analytic_type <= AT(["mero", "quasi"]):
398
+ if analytic_type <= AT(["weak", "quasi"]):
399
+ if analytic_type <= AT(["holo", "quasi"]):
400
+ if analytic_type <= AT(["cusp", "quasi"]):
401
+ if analytic_type <= AT(["quasi"]):
402
+ raise ValueError("Analytic type Zero is not valid for forms rings.")
403
+ else:
404
+ from .graded_ring import QuasiCuspFormsRing
405
+ return QuasiCuspFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
406
+ else:
407
+ from .graded_ring import QuasiModularFormsRing
408
+ return QuasiModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
409
+ else:
410
+ from .graded_ring import QuasiWeakModularFormsRing
411
+ return QuasiWeakModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
412
+ else:
413
+ from .graded_ring import QuasiMeromorphicModularFormsRing
414
+ return QuasiMeromorphicModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
415
+ else:
416
+ raise NotImplementedError("Analytic type not implemented.")