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,2 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ from sage.modular.drinfeld_modform.ring import DrinfeldModularForms
@@ -0,0 +1,446 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Elements of Drinfeld modular forms rings
4
+
5
+ This module defines the elements of the class
6
+ :class:`~sage.modular.drinfeld_modform.ring.DrinfeldModularForms`.
7
+
8
+ AUTHORS:
9
+
10
+ - David Ayotte (2022): initial version
11
+ """
12
+
13
+ # ****************************************************************************
14
+ # Copyright (C) 2022 DAVID AYOTTE <da.ayotte@outlook.com>
15
+ #
16
+ # This program is free software: you can redistribute it and/or modify
17
+ # it under the terms of the GNU General Public License as published by
18
+ # the Free Software Foundation, either version 3 of the License, or
19
+ # (at your option) any later version.
20
+ # https://www.gnu.org/licenses/
21
+ # ****************************************************************************
22
+
23
+ from sage.structure.element import ModuleElement
24
+ from sage.structure.richcmp import richcmp, op_NE, op_EQ
25
+
26
+ from sage.rings.integer_ring import ZZ
27
+ from sage.rings.polynomial.multi_polynomial import MPolynomial
28
+
29
+
30
+ class DrinfeldModularFormsElement(ModuleElement):
31
+ r"""
32
+ Element class of rings of Drinfeld modular forms.
33
+
34
+ Recall that a *graded Drinfeld form* is a sum of Drinfeld modular
35
+ forms having potentially different weights:
36
+
37
+ .. MATH::
38
+
39
+ F = f_{k_1} + f_{k_2} + \cdots + f_{k_n}
40
+
41
+ where `f_{k_i}` is a Drinfeld modular form of weight `k_i`. We also
42
+ say that `f_{k_i}` is an *homogeneous component of weight* `k_i`. If
43
+ `n=1`, then we say that `F` is *homogeneous of weight* `k_1`.
44
+
45
+ EXAMPLES: use the ``inject_variable`` method of the parent to
46
+ quickly assign variables names to the generators::
47
+
48
+ sage: A = GF(3)['T']
49
+ sage: K.<T> = Frac(A)
50
+ sage: M = DrinfeldModularForms(K, 2)
51
+ sage: M.inject_variables()
52
+ Defining g1, g2
53
+ sage: g1 in M
54
+ True
55
+ sage: g2.parent()
56
+ Ring of Drinfeld modular forms of rank 2 over Fraction Field of Univariate Polynomial Ring in T over Finite Field of size 3
57
+
58
+ Next, via algebraic combination of the generator, we may create any
59
+ element of the ring::
60
+
61
+ sage: F = g1*g2 + g2
62
+ sage: F
63
+ g1*g2 + g2
64
+ sage: F.is_homogeneous()
65
+ False
66
+ sage: F.homogeneous_components()
67
+ {8: g2, 10: g1*g2}
68
+
69
+ If the created form is homogeneous, we can ask for its weight in
70
+ which case it will be a Drinfeld modular form::
71
+
72
+ sage: H = g1^4*g2^9 + T*g1^8*g2^8 + (T^2 - 1)*g1^28*g2^3
73
+ sage: H.is_homogeneous()
74
+ True
75
+ sage: H.weight()
76
+ 80
77
+
78
+ You can also construct an element by simply passing a multivariate
79
+ polynomial to the parent::
80
+
81
+ sage: f1, f2 = polygens(K, 2, 'f1, f2')
82
+ sage: M(f1)
83
+ g1
84
+ sage: M(f2)
85
+ g2
86
+ sage: M(T*f1 + f2^3 + T^2 + 1)
87
+ g2^3 + T*g1 + (T^2 + 1)
88
+
89
+ .. NOTE::
90
+
91
+ This class should not be directly instantiated, instead create
92
+ an instance of the parent
93
+ :class:`~sage.modular.drinfeld_modform.ring.DrinfeldModularForms`
94
+ and access its elements using the relevant methods.
95
+ """
96
+ def __init__(self, parent, polynomial):
97
+ if not isinstance(polynomial, MPolynomial):
98
+ raise TypeError("input must be a multivariate polynomial")
99
+ if not parent.base_ring().has_coerce_map_from(polynomial.base_ring()):
100
+ raise ValueError("unable to coerce base ring of the given "
101
+ "polynomial into Drinfeld modular form ring")
102
+ poly = parent._poly_ring(polynomial)
103
+ self._polynomial = poly
104
+
105
+ super().__init__(parent)
106
+
107
+ def _repr_(self):
108
+ r"""
109
+ Return the string representation of ``self``.
110
+
111
+ TESTS::
112
+
113
+ sage: A = GF(3)['T']; K = Frac(A)
114
+ sage: M = DrinfeldModularForms(K, 2)
115
+ sage: (M.0)._repr_()
116
+ 'g1'
117
+ sage: M.0 + M.1
118
+ g2 + g1
119
+ """
120
+ return str(self._polynomial)
121
+
122
+ def _add_(self, other):
123
+ r"""
124
+ Return the addition of ``self`` with ``other``.
125
+
126
+ TESTS::
127
+
128
+ sage: A = GF(3)['T']; K = Frac(A)
129
+ sage: M = DrinfeldModularForms(K, 2)
130
+ sage: M.0 + M.1 # indirect doctest
131
+ g2 + g1
132
+ """
133
+ return self.__class__(self.parent(), self._polynomial + other._polynomial)
134
+
135
+ def _mul_(self, other):
136
+ r"""
137
+ Return the multiplication of ``self`` with ``other``.
138
+
139
+ TESTS::
140
+
141
+ sage: A = GF(3)['T']; K = Frac(A)
142
+ sage: M = DrinfeldModularForms(K, 2)
143
+ sage: M.0*M.1 # indirect doctest
144
+ g1*g2
145
+ sage: M.0*(M.0 + M.1)
146
+ g1*g2 + g1^2
147
+ sage: (M.0 + M.1)*M.0
148
+ g1*g2 + g1^2
149
+ """
150
+ return self.__class__(self.parent(), self._polynomial*other._polynomial)
151
+
152
+ def _lmul_(self, c):
153
+ r"""
154
+ Return the scalar multiplication of ``self`` by `c`.
155
+
156
+ TESTS::
157
+
158
+ sage: A = GF(3)['T']; K = Frac(A); T = K.gen()
159
+ sage: M = DrinfeldModularForms(K, 2)
160
+ sage: (T^2 + T + 2) * M.0 # indirect doctest
161
+ (T^2 + T - 1)*g1
162
+ sage: M.1 * (T^5 + T^2)
163
+ (T^5 + T^2)*g2
164
+ sage: 0 * M.1
165
+ 0
166
+ sage: M.0 * 0
167
+ 0
168
+ """
169
+ return self.__class__(self.parent(), c*self._polynomial)
170
+
171
+ def __neg__(self):
172
+ r"""
173
+ Return the negation of ``self``.
174
+
175
+ TESTS::
176
+
177
+ sage: A = GF(3)['T']; K = Frac(A)
178
+ sage: M = DrinfeldModularForms(K, 2)
179
+ sage: -M.0 # indirect doctest
180
+ -g1
181
+ """
182
+ return self.__class__(self.parent(), -self._polynomial)
183
+
184
+ def __bool__(self):
185
+ r"""
186
+ Return ``True`` whether ``self`` is nonzero.
187
+
188
+ TESTS::
189
+
190
+ sage: A = GF(3)['T']; K = Frac(A)
191
+ sage: M = DrinfeldModularForms(K, 2)
192
+ sage: bool(M.0)
193
+ True
194
+ """
195
+ return bool(self._polynomial)
196
+
197
+ def _latex_(self):
198
+ r"""
199
+ Return the LaTeX expression of ``self``.
200
+
201
+ TESTS::
202
+
203
+ sage: A = GF(3)['T']; K.<T> = Frac(A)
204
+ sage: M = DrinfeldModularForms(K, 2)
205
+ sage: M.inject_variables()
206
+ Defining g1, g2
207
+ sage: latex(g1)
208
+ g_{1}
209
+ sage: latex(g2)
210
+ g_{2}
211
+ sage: latex(1/T*g1^5 + g2*g1)
212
+ \frac{1}{T} g_{1}^{5} + g_{1} g_{2}
213
+ """
214
+ return self._polynomial._latex_()
215
+
216
+ def _richcmp_(self, other, op):
217
+ r"""
218
+ Return the comparison of ``self`` with ``other``.
219
+
220
+ TESTS::
221
+
222
+ sage: A = GF(3)['T']; K = Frac(A)
223
+ sage: M = DrinfeldModularForms(K, 2)
224
+ sage: M.0 == M.1
225
+ False
226
+ sage: M.0 != M.1
227
+ True
228
+ sage: M.0 == M.0
229
+ True
230
+ sage: M.0 < M.1
231
+ Traceback (most recent call last):
232
+ ...
233
+ TypeError: '<' not supported between instances of 'DrinfeldModularForms_with_category.element_class' and 'DrinfeldModularForms_with_category.element_class'
234
+ """
235
+ if op != op_EQ and op != op_NE:
236
+ return NotImplemented
237
+ return richcmp(self._polynomial, other._polynomial, op)
238
+
239
+ def rank(self):
240
+ r"""
241
+ Return the rank of this graded Drinfeld form.
242
+
243
+ Note that the rank is independent of the chosen form and depends
244
+ only on the parent.
245
+
246
+ EXAMPLES::
247
+
248
+ sage: A = GF(3)['T']; K = Frac(A)
249
+ sage: M2 = DrinfeldModularForms(K, 2)
250
+ sage: (M2.0).rank()
251
+ 2
252
+ sage: M5 = DrinfeldModularForms(K, 5)
253
+ sage: (M5.0 + M5.3).rank()
254
+ 5
255
+ """
256
+ return self.parent()._rank
257
+
258
+ def is_one(self) -> bool:
259
+ r"""
260
+ Return ``True`` whether this graded Drinfeld form is the
261
+ multiplicative identity.
262
+
263
+ EXAMPLES::
264
+
265
+ sage: A = GF(3)['T']; K = Frac(A)
266
+ sage: M = DrinfeldModularForms(K, 2)
267
+ sage: u = M.one()
268
+ sage: u.is_one()
269
+ True
270
+ sage: (M.0).is_one()
271
+ False
272
+ """
273
+ return self._polynomial.is_one()
274
+
275
+ def is_zero(self) -> bool:
276
+ r"""
277
+ Return ``True`` whether this graded Drinfeld form is the
278
+ additive identity.
279
+
280
+ EXAMPLES::
281
+
282
+ sage: A = GF(3)['T']; K = Frac(A)
283
+ sage: M = DrinfeldModularForms(K, 2)
284
+ sage: z = M.zero()
285
+ sage: z.is_zero()
286
+ True
287
+ sage: f = M.0
288
+ sage: f.is_zero()
289
+ False
290
+ sage: (f - f).is_zero()
291
+ True
292
+ sage: (0 * M.0).is_zero()
293
+ True
294
+ """
295
+ return not bool(self)
296
+
297
+ def is_homogeneous(self) -> bool:
298
+ r"""
299
+ Return whether the graded form is homogeneous in the weight.
300
+
301
+ We recall that elements of Drinfeld modular forms ring are not
302
+ necessarily modular forms as they may have mixed weight
303
+ components.
304
+
305
+ EXAMPLES::
306
+
307
+ sage: A = GF(3)['T']; K = Frac(A)
308
+ sage: M = DrinfeldModularForms(K, 2)
309
+ sage: M.inject_variables()
310
+ Defining g1, g2
311
+ sage: f = g1^5*g2^2 # homogeneous polynomial
312
+ sage: f.is_homogeneous()
313
+ True
314
+ sage: g = g1 + g2 # mixed weight components
315
+ sage: g.is_homogeneous()
316
+ False
317
+ """
318
+ return self._polynomial.is_homogeneous()
319
+
320
+ def homogeneous_components(self):
321
+ r"""
322
+ Return the homogeneous components of this graded Drinfeld
323
+ form.
324
+
325
+ EXAMPLES::
326
+
327
+ sage: A = GF(3)['T']; K = Frac(A)
328
+ sage: M = DrinfeldModularForms(K, 2)
329
+ sage: M.inject_variables()
330
+ Defining g1, g2
331
+ sage: F = g1 + g1^2 + g1*g2^2 + g2^4
332
+ sage: D = F.homogeneous_components(); D
333
+ {2: g1, 4: g1^2, 18: g1*g2^2, 32: g2^4}
334
+ sage: D[32]
335
+ g2^4
336
+ """
337
+ M = self.parent()
338
+ components = self._polynomial.homogeneous_components().items()
339
+ return {k: self.__class__(M, p) for k, p in components}
340
+
341
+ def polynomial(self):
342
+ r"""
343
+ Return this graded Drinfeld forms as a multivariate polynomial
344
+ over the generators of the ring.
345
+
346
+ OUTPUT: a multivariate polynomial over the base ring
347
+
348
+ EXAMPLES::
349
+
350
+ sage: A = GF(3)['T']; K = Frac(A)
351
+ sage: M = DrinfeldModularForms(K, 2)
352
+ sage: M.inject_variables()
353
+ Defining g1, g2
354
+ sage: P1 = g1.polynomial();
355
+ sage: P2 = g2.polynomial();
356
+ sage: P2^2 + P1^2 + P1
357
+ g2^2 + g1^2 + g1
358
+ sage: P1.parent()
359
+ Multivariate Polynomial Ring in g1, g2 over Fraction Field of Univariate Polynomial Ring in T over Finite Field of size 3
360
+
361
+ The degree of each variables corresponds to the weight of the
362
+ generator::
363
+
364
+ sage: P1.degree()
365
+ 2
366
+ sage: P2.degree()
367
+ 8
368
+ """
369
+ return self._polynomial
370
+
371
+ def type(self):
372
+ r"""
373
+ Return the type of this graded Drinfeld form.
374
+
375
+ Recall that the *type* is the integer `0 \leq m \leq q-1` such that
376
+
377
+ .. MATH::
378
+
379
+ f(\gamma(w)) = \mathrm{det}(\gamma)^m j(\gamma, w)^k f(w).
380
+
381
+ EXAMPLES::
382
+
383
+ sage: A = GF(11)['T']; K = Frac(A)
384
+ sage: M = DrinfeldModularForms(K, 2, has_type=True)
385
+ sage: M.inject_variables()
386
+ Defining g1, h2
387
+ sage: F = g1*h2^9
388
+ sage: F.type()
389
+ 9
390
+ sage: (h2^11).type()
391
+ 1
392
+ sage: g1.type()
393
+ 0
394
+
395
+ The type only makes sense when the form is homogeneous::
396
+
397
+ sage: F = g1^4 + h2
398
+ sage: F.type()
399
+ Traceback (most recent call last):
400
+ ...
401
+ ValueError: the graded form is not homogeneous
402
+
403
+ TESTS::
404
+
405
+ sage: A = GF(2)['T']; K = Frac(A)
406
+ sage: M = DrinfeldModularForms(K, 2, has_type=False)
407
+ sage: (M.1).type()
408
+ 0
409
+ """
410
+ if not self.is_homogeneous():
411
+ raise ValueError("the graded form is not homogeneous")
412
+ if not self.parent()._has_type:
413
+ return ZZ(0)
414
+ q = self.base_ring().base_ring().cardinality()
415
+ return self.polynomial().degrees()[-1] % (q-1)
416
+
417
+ def weight(self):
418
+ r"""
419
+ Return the weight of this graded Drinfeld modular form.
420
+
421
+ EXAMPLES::
422
+
423
+ sage: A = GF(3)['T']; K = Frac(A)
424
+ sage: M = DrinfeldModularForms(K, 2)
425
+ sage: M.inject_variables()
426
+ Defining g1, g2
427
+ sage: g1.weight()
428
+ 2
429
+ sage: g2.weight()
430
+ 8
431
+ sage: f = g1^5*g2^2
432
+ sage: f.weight()
433
+ 26
434
+
435
+ If the form is not homogeneous, then the method returns an
436
+ error::
437
+
438
+ sage: f = g1 + g2
439
+ sage: f.weight()
440
+ Traceback (most recent call last):
441
+ ...
442
+ ValueError: the graded form is not homogeneous
443
+ """
444
+ if not self.is_homogeneous():
445
+ raise ValueError("the graded form is not homogeneous")
446
+ return self._polynomial.degree()