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,1291 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Manin symbol lists
4
+
5
+ There are various different classes holding lists of Manin symbols of
6
+ different types. The hierarchy is as follows:
7
+
8
+ - :class:`ManinSymbolList`
9
+
10
+ - :class:`ManinSymbolList_group`
11
+
12
+ - :class:`ManinSymbolList_gamma0`
13
+ - :class:`ManinSymbolList_gamma1`
14
+ - :class:`ManinSymbolList_gamma_h`
15
+
16
+ - :class:`ManinSymbolList_character`
17
+ """
18
+ # ****************************************************************************
19
+ # Sage: Open Source Mathematical Software
20
+ #
21
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
22
+ #
23
+ # Distributed under the terms of the GNU General Public License (GPL)
24
+ #
25
+ # This code is distributed in the hope that it will be useful,
26
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
27
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28
+ # General Public License for more details.
29
+ #
30
+ # The full text of the GPL is available at:
31
+ #
32
+ # https://www.gnu.org/licenses/
33
+ # ****************************************************************************
34
+
35
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
36
+ from sage.misc.cachefunc import cached_method
37
+ from sage.misc.persist import register_unpickle_override
38
+ from sage.modular.modsym import g1list, ghlist, p1list
39
+ from sage.modular.modsym.apply import apply_to_monomial
40
+ from sage.modular.modsym.manin_symbol import ManinSymbol
41
+ from sage.rings.integer import Integer
42
+ from sage.structure.parent import Parent
43
+ from sage.structure.richcmp import richcmp, richcmp_method
44
+
45
+
46
+ @richcmp_method
47
+ class ManinSymbolList(Parent):
48
+ """
49
+ Base class for lists of all Manin symbols for a given weight, group or character.
50
+ """
51
+
52
+ Element = ManinSymbol
53
+
54
+ def __init__(self, weight, lst):
55
+ """
56
+ Constructor for a ManinSymbolList.
57
+
58
+ INPUT:
59
+
60
+ - ``weight`` -- the weight of the symbols
61
+
62
+ - ``lst`` -- the list of symbols
63
+
64
+ On construction, a ManinSymbolList constructs a dict for
65
+ rapid determination of the index of any given symbol.
66
+
67
+ This is a base class only; users will only directly construct
68
+ objects in the derived classes ManinSymbolList_gamma0,
69
+ ManinSymbolList_gamma1, ManinSymbolList_gamma_h,
70
+ ManinSymbolList_gamma_character. Many standard methods are
71
+ only implemented in the derived classes.
72
+
73
+ EXAMPLES::
74
+
75
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
76
+ sage: ManinSymbolList(6,P1List(11))
77
+ <sage.modular.modsym.manin_symbol_list.ManinSymbolList_with_category object at ...>
78
+ """
79
+ self._weight = weight
80
+ self._symbol_list = lst
81
+ self._index = {x: i for i,x in enumerate(lst)}
82
+ Parent.__init__(self, category=FiniteEnumeratedSets())
83
+
84
+ def _element_constructor_(self, x):
85
+ """
86
+ Construct an element of ``self``.
87
+
88
+ TESTS::
89
+
90
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
91
+ sage: m = ManinSymbolList(6, P1List(11))
92
+ sage: x = m((2, 3, 5)); x
93
+ [X^2*Y^2,(3,5)]
94
+ sage: m(x) == x
95
+ True
96
+ """
97
+ if isinstance(x, ManinSymbol):
98
+ x = x.tuple()
99
+ return self.element_class(self, x)
100
+
101
+ def __richcmp__(self, right, op):
102
+ """
103
+ Comparison function for ManinSymbolList objects.
104
+
105
+ EXAMPLES::
106
+
107
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
108
+ sage: m1 = ManinSymbolList(6,P1List(11))
109
+ sage: m2 = ManinSymbolList(6,P1List(13))
110
+ sage: m3 = ManinSymbolList(4,P1List(11))
111
+ sage: m1 < m2
112
+ True
113
+ sage: m2 < m3
114
+ False
115
+ sage: m1 < m3
116
+ False
117
+ """
118
+ if not isinstance(right, ManinSymbolList):
119
+ return NotImplemented
120
+ return richcmp((self._weight, self._symbol_list),
121
+ (right._weight, right._symbol_list), op)
122
+
123
+ def symbol_list(self):
124
+ """
125
+ Return the list of symbols of ``self``.
126
+
127
+ EXAMPLES::
128
+
129
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
130
+ sage: m = ManinSymbolList(6, P1List(11))
131
+ """
132
+ return list(self._symbol_list) # This makes a shallow copy
133
+
134
+ def __len__(self):
135
+ """
136
+ Return the length of this :class:`ManinSymbolList`.
137
+
138
+ EXAMPLES::
139
+
140
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
141
+ sage: m = ManinSymbolList(6,P1List(11))
142
+ sage: len(m)
143
+ 12
144
+ """
145
+ return len(self._symbol_list)
146
+
147
+ def apply(self, j, X):
148
+ """
149
+ Apply the matrix `X = [a, b; c, d]` to the `j`-th Manin symbol.
150
+
151
+ Implemented in derived classes.
152
+
153
+ EXAMPLES::
154
+
155
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
156
+ sage: m = ManinSymbolList(6,P1List(11))
157
+ sage: m.apply(10, [1,2,0,1])
158
+ Traceback (most recent call last):
159
+ ...
160
+ NotImplementedError: Only implemented in derived classes
161
+ """
162
+ raise NotImplementedError("Only implemented in derived classes")
163
+
164
+ def _apply_S_only_0pm1(self) -> bool:
165
+ """
166
+ Return ``True`` if the coefficient when applying the S relation is
167
+ always 0, 1, or -1. This is useful for optimizing code in
168
+ relation_matrix.py.
169
+
170
+ EXAMPLES::
171
+
172
+ sage: eps = DirichletGroup(4).gen(0)
173
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
174
+ sage: ManinSymbolList_character(eps,2)._apply_S_only_0pm1()
175
+ True
176
+ sage: eps = DirichletGroup(7).gen(0)
177
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
178
+ sage: ManinSymbolList_character(eps,2)._apply_S_only_0pm1()
179
+ False
180
+ """
181
+ return False # derived classes could overload and put True
182
+
183
+ def apply_S(self, j):
184
+ """
185
+ Apply the matrix `S = [0, -1; 1, 0]` to the `j`-th Manin symbol.
186
+
187
+ Implemented in derived classes.
188
+
189
+ EXAMPLES::
190
+
191
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
192
+ sage: m = ManinSymbolList(6,P1List(11))
193
+ sage: m.apply_S(10)
194
+ Traceback (most recent call last):
195
+ ...
196
+ NotImplementedError: Only implemented in derived classes
197
+ """
198
+ raise NotImplementedError("Only implemented in derived classes")
199
+
200
+ def apply_I(self, j):
201
+ """
202
+ Apply the matrix `I = [-1, 0; 0, 1]` to the `j`-th Manin symbol.
203
+
204
+ Implemented in derived classes.
205
+
206
+ EXAMPLES::
207
+
208
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
209
+ sage: m = ManinSymbolList(6,P1List(11))
210
+ sage: m.apply_I(10)
211
+ Traceback (most recent call last):
212
+ ...
213
+ NotImplementedError: Only implemented in derived classes
214
+ """
215
+ raise NotImplementedError("Only implemented in derived classes")
216
+
217
+ def apply_T(self, j):
218
+ """
219
+ Apply the matrix `T = [0, 1; -1, -1]` to the `j`-th Manin symbol.
220
+
221
+ Implemented in derived classes.
222
+
223
+ EXAMPLES::
224
+
225
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
226
+ sage: m = ManinSymbolList(6,P1List(11))
227
+ sage: m.apply_T(10)
228
+ Traceback (most recent call last):
229
+ ...
230
+ NotImplementedError: Only implemented in derived classes
231
+ """
232
+ raise NotImplementedError("Only implemented in derived classes")
233
+
234
+ def apply_TT(self, j):
235
+ """
236
+ Apply the matrix `TT = T^2 = [-1, -1; 0, 1]` to the `j`-th
237
+ Manin symbol.
238
+
239
+ Implemented in derived classes.
240
+
241
+ EXAMPLES::
242
+
243
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
244
+ sage: m = ManinSymbolList(6,P1List(11))
245
+ sage: m.apply_TT(10)
246
+ Traceback (most recent call last):
247
+ ...
248
+ NotImplementedError: Only implemented in derived classes
249
+ """
250
+ raise NotImplementedError("Only implemented in derived classes")
251
+
252
+ def index(self, x):
253
+ """
254
+ Return the index of ``x`` in the list of Manin symbols.
255
+
256
+ INPUT:
257
+
258
+ - ``x`` -- a triple of integers `(i, u, v)` defining a valid
259
+ Manin symbol, which need not be normalized
260
+
261
+ OUTPUT:
262
+
263
+ integer -- the index of the normalized Manin symbol equivalent
264
+ to `(i, u, v)`. If ``x`` is not in ``self``, -1 is returned.
265
+
266
+ EXAMPLES::
267
+
268
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
269
+ sage: m = ManinSymbolList(6,P1List(11))
270
+ sage: m.index(m.symbol_list()[2])
271
+ 2
272
+ sage: S = m.symbol_list()
273
+ sage: all(i == m.index(S[i]) for i in range(len(S)))
274
+ True
275
+ """
276
+ if x in self._index:
277
+ return self._index[x]
278
+ x = self.normalize(x)
279
+ try:
280
+ return self._index[x]
281
+ except KeyError:
282
+ return -1
283
+
284
+ @cached_method
285
+ def manin_symbol_list(self):
286
+ """
287
+ Return all the Manin symbols in ``self`` as a list.
288
+
289
+ Cached for subsequent calls.
290
+
291
+ OUTPUT:
292
+
293
+ A list of :class:`ManinSymbol` objects, which is a copy of the
294
+ complete list of Manin symbols.
295
+
296
+ EXAMPLES::
297
+
298
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
299
+ sage: m = ManinSymbolList(6,P1List(11))
300
+ sage: m.manin_symbol_list() # not implemented for the base class
301
+
302
+ ::
303
+
304
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
305
+ sage: m = ManinSymbolList_gamma0(6, 4)
306
+ sage: m.manin_symbol_list()
307
+ [[Y^2,(0,1)],
308
+ [Y^2,(1,0)],
309
+ [Y^2,(1,1)],
310
+ ...
311
+ [X^2,(3,1)],
312
+ [X^2,(3,2)]]
313
+ """
314
+ return [self.manin_symbol(i) for i in range(len(self))]
315
+
316
+ list = manin_symbol_list
317
+
318
+ def manin_symbol(self, i):
319
+ """
320
+ Return the ``i``-th Manin symbol in this :class:`ManinSymbolList`.
321
+
322
+ INPUT:
323
+
324
+ - ``i`` -- integer; a valid index of a symbol in this list
325
+
326
+ OUTPUT:
327
+
328
+ :class:`ManinSymbol` -- the `i`-th Manin symbol in the list.
329
+
330
+ EXAMPLES::
331
+
332
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
333
+ sage: m = ManinSymbolList(6,P1List(11))
334
+ sage: m.manin_symbol(3) # not implemented for base class
335
+
336
+ ::
337
+
338
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
339
+ sage: m = ManinSymbolList_gamma0(6, 4)
340
+ sage: s = m.manin_symbol(3); s
341
+ [Y^2,(1,2)]
342
+ sage: type(s)
343
+ <class 'sage.modular.modsym.manin_symbol.ManinSymbol'>
344
+ """
345
+ return self.element_class(self, self._symbol_list[i])
346
+
347
+ def normalize(self, x):
348
+ """
349
+ Return a normalized Manin symbol from ``x``.
350
+
351
+ To be implemented in derived classes.
352
+
353
+ EXAMPLES::
354
+
355
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
356
+ sage: m = ManinSymbolList(6,P1List(11))
357
+ sage: m.normalize((0,6,7)) # not implemented in base class
358
+ """
359
+ raise NotImplementedError("Only implemented in derived classes")
360
+
361
+ def weight(self):
362
+ """
363
+ Return the weight of the Manin symbols in this :class:`ManinSymbolList`.
364
+
365
+ OUTPUT: integer; the weight of the Manin symbols in the list
366
+
367
+ EXAMPLES::
368
+
369
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
370
+ sage: m = ManinSymbolList_gamma0(6, 4)
371
+ sage: m.weight()
372
+ 4
373
+ """
374
+ return self._weight
375
+
376
+
377
+ class ManinSymbolList_group(ManinSymbolList):
378
+ """
379
+ Base class for Manin symbol lists for a given group.
380
+
381
+ INPUT:
382
+
383
+ - ``level`` -- integer level
384
+
385
+ - ``weight`` -- integer weight
386
+
387
+ - ``syms`` -- something with ``normalize`` and ``list`` methods,
388
+ e.g. :class:`~sage.modular.modsym.p1list.P1List`
389
+
390
+ EXAMPLES::
391
+
392
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_group
393
+ sage: ManinSymbolList_group(11, 2, P1List(11))
394
+ <sage.modular.modsym.manin_symbol_list.ManinSymbolList_group_with_category object at ...>
395
+ """
396
+ def __init__(self, level, weight, syms):
397
+ """
398
+ Constructor for class ManinSymbolList_group.
399
+
400
+ INPUT:
401
+
402
+ - ``level`` -- integer level
403
+
404
+ - ``weight`` -- integer weight
405
+
406
+ - ``syms`` -- something with ``normalize`` and ``list``
407
+ methods, e.g. :class:`~sage.modular.modsym.p1list.P1List`
408
+
409
+ EXAMPLES::
410
+
411
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_group
412
+ sage: L = ManinSymbolList_group(11, 2, P1List(11)); L
413
+ <sage.modular.modsym.manin_symbol_list.ManinSymbolList_group_with_category object at ...>
414
+ """
415
+ self.__level = level
416
+ self.__syms = syms # syms is anything with a normalize and list method.
417
+
418
+ # The list returned from P1List is guaranteed to be sorted.
419
+ # Thus each list constructed below is also sorted. This is
420
+ # important since the index function assumes the list is sorted.
421
+ L = [(i, u, v) for i in range(weight - 2 + 1)
422
+ for u, v in syms.list()]
423
+ ManinSymbolList.__init__(self, weight, L)
424
+
425
+ def level(self):
426
+ """
427
+ Return the level of this :class:`ManinSymbolList`.
428
+
429
+ EXAMPLES::
430
+
431
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
432
+ sage: ManinSymbolList_gamma0(5,2).level()
433
+ 5
434
+
435
+ ::
436
+
437
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
438
+ sage: ManinSymbolList_gamma1(51,2).level()
439
+ 51
440
+
441
+ ::
442
+
443
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma_h
444
+ sage: ManinSymbolList_gamma_h(GammaH(117, [4]),2).level()
445
+ 117
446
+ """
447
+ return self.__level
448
+
449
+ def apply_S(self, j):
450
+ """
451
+ Apply the matrix `S = [0, -1; 1, 0]` to the `j`-th Manin symbol.
452
+
453
+ INPUT:
454
+
455
+ - ``j`` -- integer; a symbol index
456
+
457
+ OUTPUT:
458
+
459
+ ``(k, s)`` where k is the index of the symbol obtained by acting on the
460
+ `j`-th symbol with `S`, and `s` is the parity of the `j`-th symbol
461
+ (a Python ``int``, either 1 or -1).
462
+
463
+ EXAMPLES::
464
+
465
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
466
+ sage: m = ManinSymbolList_gamma0(5,8)
467
+ sage: m.apply_S(4)
468
+ (40, 1)
469
+ sage: [m.apply_S(i) for i in range(len(m))]
470
+ [(37, 1),
471
+ (36, 1),
472
+ (41, 1),
473
+ (39, 1),
474
+ (40, 1),
475
+ (38, 1),
476
+ (31, -1),
477
+ (30, -1),
478
+ (35, -1),
479
+ (33, -1),
480
+ (34, -1),
481
+ (32, -1),
482
+ ...
483
+ (4, 1),
484
+ (2, 1)]
485
+ """
486
+ i, u, v = self._symbol_list[j]
487
+ k = self.index((self._weight - 2 - i, v, -u))
488
+ return k, -1 if i % 2 else 1
489
+
490
+ def _apply_S_only_0pm1(self):
491
+ """
492
+ Return ``True`` if the coefficient when applying the S relation is
493
+ always 0, 1, or -1. This is useful for optimizing code in
494
+ relation_matrix.py.
495
+
496
+ EXAMPLES::
497
+
498
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
499
+ sage: ManinSymbolList_gamma0(5,8)._apply_S_only_0pm1()
500
+ True
501
+ """
502
+ return True
503
+
504
+ def apply_I(self, j):
505
+ """
506
+ Apply the matrix `I=[-1,0,0,1]` to the `j`-th Manin symbol.
507
+
508
+ INPUT:
509
+
510
+ - ``j`` -- integer; a symbol index
511
+
512
+ OUTPUT:
513
+
514
+ ``(k, s)`` where k is the index of the symbol obtained by acting on the
515
+ `j`-th symbol with `I`, and `s` is the parity of the `j`-th symbol
516
+ (a Python ``int``, either 1 or -1)
517
+
518
+ EXAMPLES::
519
+
520
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
521
+ sage: m = ManinSymbolList_gamma0(5,8)
522
+ sage: m.apply_I(4)
523
+ (3, 1)
524
+ sage: [m.apply_I(i) for i in range(10)]
525
+ [(0, 1),
526
+ (1, 1),
527
+ (5, 1),
528
+ (4, 1),
529
+ (3, 1),
530
+ (2, 1),
531
+ (6, -1),
532
+ (7, -1),
533
+ (11, -1),
534
+ (10, -1)]
535
+ """
536
+ i, u, v = self._symbol_list[j]
537
+ k = self.index((i, -u, v))
538
+ if i % 2 == 0:
539
+ return k, 1
540
+ else:
541
+ return k, -1
542
+
543
+ def apply_T(self, j):
544
+ """
545
+ Apply the matrix `T=[0,1,-1,-1]` to the `j`-th Manin symbol.
546
+
547
+ INPUT:
548
+
549
+ - ``j`` -- integer; a symbol index
550
+
551
+ OUTPUT: see documentation for apply()
552
+
553
+ EXAMPLES::
554
+
555
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
556
+ sage: m = ManinSymbolList_gamma0(5,8)
557
+ sage: m.apply_T(4)
558
+ [(3, 1), (9, -6), (15, 15), (21, -20), (27, 15), (33, -6), (39, 1)]
559
+ sage: [m.apply_T(i) for i in range(10)]
560
+ [[(5, 1), (11, -6), (17, 15), (23, -20), (29, 15), (35, -6), (41, 1)],
561
+ [(0, 1), (6, -6), (12, 15), (18, -20), (24, 15), (30, -6), (36, 1)],
562
+ [(4, 1), (10, -6), (16, 15), (22, -20), (28, 15), (34, -6), (40, 1)],
563
+ [(2, 1), (8, -6), (14, 15), (20, -20), (26, 15), (32, -6), (38, 1)],
564
+ [(3, 1), (9, -6), (15, 15), (21, -20), (27, 15), (33, -6), (39, 1)],
565
+ [(1, 1), (7, -6), (13, 15), (19, -20), (25, 15), (31, -6), (37, 1)],
566
+ [(5, 1), (11, -5), (17, 10), (23, -10), (29, 5), (35, -1)],
567
+ [(0, 1), (6, -5), (12, 10), (18, -10), (24, 5), (30, -1)],
568
+ [(4, 1), (10, -5), (16, 10), (22, -10), (28, 5), (34, -1)],
569
+ [(2, 1), (8, -5), (14, 10), (20, -10), (26, 5), (32, -1)]]
570
+ """
571
+ k = self._weight
572
+ i, u, v = self._symbol_list[j]
573
+ u, v = self.__syms.normalize(v,-u-v)
574
+ if (k-2) % 2 == 0:
575
+ s = 1
576
+ else:
577
+ s = -1
578
+ z = []
579
+ a = Integer(k-2-i)
580
+ for j in range(k-2-i+1):
581
+ m = self.index((j, u, v))
582
+ z.append((m, s * a.binomial(j)))
583
+ s *= -1
584
+ return z
585
+
586
+ def apply_TT(self, j):
587
+ """
588
+ Apply the matrix `TT=[-1,-1,0,1]` to the `j`-th Manin symbol.
589
+
590
+ INPUT:
591
+
592
+ - ``j`` -- integer; a symbol index
593
+
594
+ OUTPUT: see documentation for apply()
595
+
596
+ EXAMPLES::
597
+
598
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
599
+ sage: m = ManinSymbolList_gamma0(5,8)
600
+ sage: m.apply_TT(4)
601
+ [(38, 1)]
602
+ sage: [m.apply_TT(i) for i in range(10)]
603
+ [[(37, 1)],
604
+ [(41, 1)],
605
+ [(39, 1)],
606
+ [(40, 1)],
607
+ [(38, 1)],
608
+ [(36, 1)],
609
+ [(31, -1), (37, 1)],
610
+ [(35, -1), (41, 1)],
611
+ [(33, -1), (39, 1)],
612
+ [(34, -1), (40, 1)]]
613
+ """
614
+ k = self._weight
615
+ i, u, v = self._symbol_list[j]
616
+ u, v = self.__syms.normalize(-u-v,u)
617
+ if (k-2-i) % 2 == 0:
618
+ s = 1
619
+ else:
620
+ s = -1
621
+ z = []
622
+ a = Integer(i)
623
+ for j in range(i+1):
624
+ m = self.index((k-2-i+j, u, v))
625
+ z.append((m, s * a.binomial(j)))
626
+ s *= -1
627
+ return z
628
+
629
+ def apply(self, j, m):
630
+ r"""
631
+ Apply the matrix `m = [a, b; c, d]` to the `j`-th Manin symbol.
632
+
633
+ INPUT:
634
+
635
+ - ``j`` -- integer; a symbol index
636
+
637
+ - ``m = [a, b, c, d]`` a list of 4 integers, which defines a 2x2 matrix
638
+
639
+ OUTPUT:
640
+
641
+ a list of pairs `(j_i, \alpha_i)`, where each `\alpha_i` is a nonzero
642
+ integer, `j_i` is an integer (index of the `j_i`-th Manin symbol), and
643
+ `\sum_i \alpha_i\*x_{j_i}` is the image of the `j`-th Manin symbol under
644
+ the right action of the matrix [a,b;c,d]. Here the right action of
645
+ `g = [a, b; c, d]` on a Manin symbol `[P(X,Y),(u,v)]` is
646
+ `[P(aX+bY,cX+dY),(u,v)\*g]`.
647
+
648
+ EXAMPLES::
649
+
650
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
651
+ sage: m = ManinSymbolList_gamma0(5,8)
652
+ sage: m.apply(40, [2,3,1,1])
653
+ [(0, 729), (6, 2916), (12, 4860), (18, 4320),
654
+ (24, 2160), (30, 576), (36, 64)]
655
+ """
656
+ a, b, c, d = m[0], m[1], m[2], m[3]
657
+ i, u, v = self._symbol_list[j]
658
+ P = apply_to_monomial(i, self._weight-2, a, b, c, d)
659
+ m = self.index((0, u*a+v*c, u*b+v*d))
660
+ if m == -1:
661
+ return []
662
+ r = len(self.__syms)
663
+ return [(m + r*k, P[k]) for k in range(self._weight-2+1)
664
+ if P[k] != 0]
665
+
666
+ def normalize(self, x):
667
+ """
668
+ Return the normalization of the Manin symbol ``x`` with
669
+ respect to this list.
670
+
671
+ INPUT:
672
+
673
+ - ``x`` -- (3-tuple of ints) a tuple defining a ManinSymbol
674
+
675
+ OUTPUT:
676
+
677
+ ``(i,u,v)`` -- (3-tuple of ints) another tuple defining the associated
678
+ normalized ManinSymbol
679
+
680
+ EXAMPLES::
681
+
682
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
683
+ sage: m = ManinSymbolList_gamma0(5,8)
684
+ sage: [m.normalize(s.tuple()) for s in m.manin_symbol_list()][:10]
685
+ [(0, 0, 1),
686
+ (0, 1, 0),
687
+ (0, 1, 1),
688
+ (0, 1, 2),
689
+ (0, 1, 3),
690
+ (0, 1, 4),
691
+ (1, 0, 1),
692
+ (1, 1, 0),
693
+ (1, 1, 1),
694
+ (1, 1, 2)]
695
+ """
696
+ u,v = self.__syms.normalize(x[1],x[2])
697
+ return (x[0],u,v)
698
+
699
+
700
+ class ManinSymbolList_gamma0(ManinSymbolList_group):
701
+ r"""
702
+ Class for Manin symbols for `\Gamma_0(N)`.
703
+
704
+ INPUT:
705
+
706
+ - ``level`` -- integer; the level
707
+
708
+ - ``weight`` -- integer; the weight
709
+
710
+ EXAMPLES::
711
+
712
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
713
+ sage: m = ManinSymbolList_gamma0(5,2); m
714
+ Manin Symbol List of weight 2 for Gamma0(5)
715
+ sage: m.manin_symbol_list()
716
+ [(0,1), (1,0), (1,1), (1,2), (1,3), (1,4)]
717
+ sage: m = ManinSymbolList_gamma0(6,4); m
718
+ Manin Symbol List of weight 4 for Gamma0(6)
719
+ sage: len(m)
720
+ 36
721
+ """
722
+ def __init__(self, level, weight):
723
+ """
724
+ Constructor for a ModularSymbolList for Gamma_0(N).
725
+
726
+ EXAMPLES::
727
+
728
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
729
+ sage: M11 = ManinSymbolList_gamma0(11,2)
730
+ sage: M11
731
+ Manin Symbol List of weight 2 for Gamma0(11)
732
+ sage: M11 == loads(dumps(M11))
733
+ True
734
+ """
735
+ ManinSymbolList_group.__init__(self, level, weight, p1list.P1List(level))
736
+
737
+ def __repr__(self):
738
+ """
739
+ String representation.
740
+
741
+ EXAMPLES::
742
+
743
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
744
+ sage: M11 = ManinSymbolList_gamma0(11,2)
745
+ sage: str(M11)
746
+ 'Manin Symbol List of weight 2 for Gamma0(11)'
747
+ """
748
+ return "Manin Symbol List of weight %s for Gamma0(%s)" % (
749
+ self.weight(), self.level())
750
+
751
+
752
+ class ManinSymbolList_gamma1(ManinSymbolList_group):
753
+ r"""
754
+ Class for Manin symbols for `\Gamma_1(N)`.
755
+
756
+ INPUT:
757
+
758
+ - ``level`` -- integer; the level
759
+
760
+ - ``weight`` -- integer; the weight
761
+
762
+ EXAMPLES::
763
+
764
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
765
+ sage: m = ManinSymbolList_gamma1(5,2); m
766
+ Manin Symbol List of weight 2 for Gamma1(5)
767
+ sage: m.manin_symbol_list()
768
+ [(0,1),
769
+ (0,2),
770
+ (0,3),
771
+ ...
772
+ (4,3),
773
+ (4,4)]
774
+ sage: m = ManinSymbolList_gamma1(6,4); m
775
+ Manin Symbol List of weight 4 for Gamma1(6)
776
+ sage: len(m)
777
+ 72
778
+ sage: m == loads(dumps(m))
779
+ True
780
+ """
781
+ def __init__(self, level, weight):
782
+ r"""
783
+ Constructor for a ModularSymbolList for `\Gamma_0(N)`.
784
+
785
+ EXAMPLES::
786
+
787
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
788
+ sage: M11 = ManinSymbolList_gamma1(11,2)
789
+ sage: M11
790
+ Manin Symbol List of weight 2 for Gamma1(11)
791
+ """
792
+ ManinSymbolList_group.__init__(self, level, weight, g1list.G1list(level))
793
+
794
+ def __repr__(self):
795
+ """
796
+ Return the string representation of this :class:`ManinSymbolList`.
797
+
798
+ EXAMPLES::
799
+
800
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
801
+ sage: M11 = ManinSymbolList_gamma1(11,4)
802
+ sage: str(M11)
803
+ 'Manin Symbol List of weight 4 for Gamma1(11)'
804
+ """
805
+ return "Manin Symbol List of weight %s for Gamma1(%s)" % (
806
+ self.weight(), self.level())
807
+
808
+
809
+ class ManinSymbolList_gamma_h(ManinSymbolList_group):
810
+ r"""
811
+ Class for Manin symbols for `\Gamma_H(N)`.
812
+
813
+ INPUT:
814
+
815
+ - ``group`` -- integer; the congruence subgroup
816
+
817
+ - ``weight`` -- integer; the weight
818
+
819
+ EXAMPLES::
820
+
821
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma_h
822
+ sage: G = GammaH(117, [4])
823
+ sage: m = ManinSymbolList_gamma_h(G,2); m
824
+ Manin Symbol List of weight 2 for Congruence Subgroup Gamma_H(117) with H generated by [4]
825
+ sage: m.manin_symbol_list()[100:110]
826
+ [(1,88),
827
+ (1,89),
828
+ (1,90),
829
+ (1,91),
830
+ (1,92),
831
+ (1,93),
832
+ (1,94),
833
+ (1,95),
834
+ (1,96),
835
+ (1,97)]
836
+ sage: len(m.manin_symbol_list())
837
+ 2016
838
+ sage: m == loads(dumps(m))
839
+ True
840
+ """
841
+ def __init__(self, group, weight):
842
+ r"""
843
+ Constructor for Manin symbols for `\Gamma_H(N)`.
844
+
845
+ EXAMPLES::
846
+
847
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma_h
848
+ sage: G = GammaH(117, [4])
849
+ sage: m = ManinSymbolList_gamma_h(G,2); m
850
+ Manin Symbol List of weight 2 for Congruence Subgroup Gamma_H(117) with H generated by [4]
851
+ """
852
+ self.__group = group
853
+ ManinSymbolList_group.__init__(self, group.level(), weight, ghlist.GHlist(group))
854
+
855
+ def group(self):
856
+ """
857
+ Return the group associated to ``self``.
858
+
859
+ EXAMPLES::
860
+
861
+ sage: ModularSymbols(GammaH(12, [5]), 2).manin_symbols().group()
862
+ Congruence Subgroup Gamma_H(12) with H generated by [5]
863
+ """
864
+ return self.__group
865
+
866
+ def __repr__(self):
867
+ """
868
+ Return the string representation of ``self``.
869
+
870
+ EXAMPLES::
871
+
872
+ sage: ModularSymbols(GammaH(12, [5]), 2).manin_symbols().__repr__()
873
+ 'Manin Symbol List of weight 2 for Congruence Subgroup Gamma_H(12) with H generated by [5]'
874
+ """
875
+ return "Manin Symbol List of weight %s for %s" % (
876
+ self.weight(), self.group())
877
+
878
+
879
+ class ManinSymbolList_character(ManinSymbolList):
880
+ """
881
+ List of Manin symbols with character.
882
+
883
+ INPUT:
884
+
885
+ - ``character`` -- (DirichletCharacter) the Dirichlet character
886
+
887
+ - ``weight`` -- integer; the weight
888
+
889
+ EXAMPLES::
890
+
891
+ sage: # needs sage.rings.number_field
892
+ sage: eps = DirichletGroup(4).gen(0)
893
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
894
+ sage: m = ManinSymbolList_character(eps,2); m
895
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
896
+ sage: m.manin_symbol_list()
897
+ [(0,1), (1,0), (1,1), (1,2), (1,3), (2,1)]
898
+ sage: m == loads(dumps(m))
899
+ True
900
+ """
901
+ def __init__(self, character, weight):
902
+ """
903
+ Constructor for :class:`ManinSymbolList_character` objects.
904
+
905
+ INPUT:
906
+
907
+ - ``character`` -- (DirichletCharacter) the Dirichlet character
908
+
909
+ - ``weight`` -- integer; the weight
910
+
911
+ EXAMPLES::
912
+
913
+ sage: # needs sage.rings.number_field
914
+ sage: eps = DirichletGroup(4).gen(0)
915
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
916
+ sage: m = ManinSymbolList_character(eps,2); m
917
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
918
+ sage: m.manin_symbol_list()
919
+ [(0,1), (1,0), (1,1), (1,2), (1,3), (2,1)]
920
+ sage: TestSuite(m).run()
921
+ """
922
+ self.__level = character.modulus()
923
+ self.__P1 = p1list.P1List(self.level())
924
+
925
+ # We make a copy of the character *only* to program around what seems
926
+ # to be a bug in the cPickle module in some obscure case.
927
+ # If we don't due this, then this doctest fails.
928
+ # sage: M = ModularSymbols(DirichletGroup(5).0)
929
+ # sage: loads(dumps(M)) == M
930
+
931
+ self.__character = character.__copy__()
932
+
933
+ # The list returned from P1List is guaranteed to be sorted.
934
+ # Thus each list constructed below is also sorted. This is
935
+ # important since the index function assumes the list is sorted.
936
+ L = [(i, u, v) for i in range(weight - 2 + 1)
937
+ for u, v in self.__P1.list()]
938
+ self.__list = L
939
+ ManinSymbolList.__init__(self, weight, L)
940
+
941
+ def __repr__(self):
942
+ """
943
+ Standard function returning string representation.
944
+
945
+ EXAMPLES::
946
+
947
+ sage: # needs sage.rings.number_field
948
+ sage: eps = DirichletGroup(4).gen(0)
949
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
950
+ sage: m = ManinSymbolList_character(eps,2); m
951
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
952
+ sage: str(m) # indirect doctest
953
+ 'Manin Symbol List of weight 2 for Gamma1(4) with character [-1]'
954
+ """
955
+ return "Manin Symbol List of weight %s for Gamma1(%s) with character %s" % (
956
+ self.weight(), self.level(), self.character()._repr_short_())
957
+
958
+ def level(self):
959
+ """
960
+ Return the level of this :class:`ManinSymbolList`.
961
+
962
+ OUTPUT: integer; the level of the symbols in this list
963
+
964
+ EXAMPLES::
965
+
966
+ sage: # needs sage.rings.number_field
967
+ sage: eps = DirichletGroup(4).gen(0)
968
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
969
+ sage: ManinSymbolList_character(eps,4).level()
970
+ 4
971
+ """
972
+ return self.__level
973
+
974
+ def apply(self, j, m):
975
+ """
976
+ Apply the integer matrix `m=[a,b;c,d]` to the `j`-th Manin symbol.
977
+
978
+ INPUT:
979
+
980
+ - ``j`` -- integer; the index of the symbol to act on
981
+
982
+ - ``m`` -- list of integers `[a,b,c,d]` where `m = [a, b; c, d]` is the
983
+ matrix to be applied
984
+
985
+ OUTPUT:
986
+
987
+ A list of pairs `(j, c_i)`, where each `c_i` is an
988
+ integer, `j` is an integer (the `j`-th Manin symbol), and the
989
+ sum `c_i*x_i` is the image of ``self`` under the right action
990
+ of the matrix `[a,b;c,d]`. Here the right action of
991
+ `g = [a,b;c,d]` on a Manin symbol `[P(X,Y),(u,v)]` is by
992
+ definition `[P(aX+bY,cX+dY),(u,v)*g]`.
993
+
994
+ EXAMPLES::
995
+
996
+ sage: # needs sage.rings.number_field
997
+ sage: eps = DirichletGroup(4).gen(0)
998
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
999
+ sage: m = ManinSymbolList_character(eps,4)
1000
+ sage: m[6]
1001
+ [X*Y,(0,1)]
1002
+ sage: m.apply(4, [1,0,0,1])
1003
+ [(4, 1)]
1004
+ sage: m.apply(1, [-1,0,0,1])
1005
+ [(1, -1)]
1006
+ """
1007
+ a, b, c, d = m[0], m[1], m[2], m[3]
1008
+ i, u, v = self._symbol_list[j]
1009
+ P = apply_to_monomial(i, self._weight-2, a, b, c, d)
1010
+ m, s = self.index((0, u*a+v*c, u*b+v*d))
1011
+ if m == -1 or s == 0:
1012
+ return []
1013
+ r = len(self.__P1)
1014
+ return [(m + r*k, s*P[k]) for k in range(self._weight-2+1)
1015
+ if P[k] != 0]
1016
+
1017
+ def apply_S(self, j):
1018
+ """
1019
+ Apply the matrix `S=[0,1;-1,0]` to the `j`-th Manin symbol.
1020
+
1021
+ INPUT:
1022
+
1023
+ - ``j`` -- integer; a symbol index
1024
+
1025
+ OUTPUT:
1026
+
1027
+ ``(k, s)`` where `k` is the index of the symbol obtained by acting
1028
+ on the `j`-th symbol with `S`, and `s` is the parity of the
1029
+ `j`-th symbol.
1030
+
1031
+ EXAMPLES::
1032
+
1033
+ sage: # needs sage.rings.number_field
1034
+ sage: eps = DirichletGroup(4).gen(0)
1035
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1036
+ sage: m = ManinSymbolList_character(eps,2); m
1037
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1038
+ sage: m.apply_S(4)
1039
+ (2, -1)
1040
+ sage: [m.apply_S(i) for i in range(len(m))]
1041
+ [(1, 1), (0, -1), (4, 1), (5, -1), (2, -1), (3, 1)]
1042
+ """
1043
+ i, u, v = self._symbol_list[j]
1044
+ k, s = self.index((self._weight - 2 - i, v, -u))
1045
+ if i % 2 == 0:
1046
+ return k, s
1047
+ else:
1048
+ return k, -s
1049
+
1050
+ def _apply_S_only_0pm1(self):
1051
+ """
1052
+ Return ``True`` if the coefficient when applying the S relation is
1053
+ always 0, 1, or -1. This is useful for optimizing code in
1054
+ relation_matrix.py.
1055
+
1056
+ EXAMPLES::
1057
+
1058
+ sage: # needs sage.rings.number_field
1059
+ sage: eps = DirichletGroup(4).gen(0)
1060
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1061
+ sage: ManinSymbolList_character(eps,2)._apply_S_only_0pm1()
1062
+ True
1063
+ sage: ManinSymbolList_character(DirichletGroup(13).0,2)._apply_S_only_0pm1()
1064
+ False
1065
+ """
1066
+ return self.__character.order() <= 2
1067
+
1068
+ def apply_I(self, j):
1069
+ """
1070
+ Apply the matrix `I=[-1,0,0,1]` to the `j`-th Manin symbol.
1071
+
1072
+ INPUT:
1073
+
1074
+ - ``j`` -- integer; a symbol index
1075
+
1076
+ OUTPUT:
1077
+
1078
+ ``(k, s)`` where `k` is the index of the symbol obtained by acting
1079
+ on the `j`-th symbol with `I`, and `s` is the parity of the
1080
+ `j`-th symbol.
1081
+
1082
+ EXAMPLES::
1083
+
1084
+ sage: # needs sage.rings.number_field
1085
+ sage: eps = DirichletGroup(4).gen(0)
1086
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1087
+ sage: m = ManinSymbolList_character(eps,2); m
1088
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1089
+ sage: m.apply_I(4)
1090
+ (2, -1)
1091
+ sage: [m.apply_I(i) for i in range(len(m))]
1092
+ [(0, 1), (1, -1), (4, -1), (3, -1), (2, -1), (5, 1)]
1093
+ """
1094
+ i, u, v = self._symbol_list[j]
1095
+ k, s = self.index((i, -u, v))
1096
+ if i % 2 == 0:
1097
+ return k, s
1098
+ else:
1099
+ return k, -s
1100
+
1101
+ def apply_T(self, j):
1102
+ """
1103
+ Apply the matrix `T=[0,1,-1,-1]` to the `j`-th Manin symbol.
1104
+
1105
+ INPUT:
1106
+
1107
+ - ``j`` -- integer; a symbol index
1108
+
1109
+ OUTPUT:
1110
+
1111
+ A list of pairs `(j, c_i)`, where each `c_i` is an
1112
+ integer, `j` is an integer (the `j`-th Manin symbol), and the
1113
+ sum `c_i*x_i` is the image of ``self`` under the right action
1114
+ of the matrix `T`.
1115
+
1116
+ EXAMPLES::
1117
+
1118
+ sage: # needs sage.rings.number_field
1119
+ sage: eps = DirichletGroup(4).gen(0)
1120
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1121
+ sage: m = ManinSymbolList_character(eps,2); m
1122
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1123
+ sage: m.apply_T(4)
1124
+ [(1, -1)]
1125
+ sage: [m.apply_T(i) for i in range(len(m))]
1126
+ [[(4, 1)], [(0, -1)], [(3, 1)], [(5, 1)], [(1, -1)], [(2, 1)]]
1127
+ """
1128
+ k = self._weight
1129
+ i, u, v = self._symbol_list[j]
1130
+ u, v, r = self.__P1.normalize_with_scalar(v,-u-v)
1131
+ r = self.__character(r)
1132
+ if (k-2) % 2 == 0:
1133
+ s = r
1134
+ else:
1135
+ s = -r
1136
+ z = []
1137
+ a = Integer(k-2-i)
1138
+ for j in range(k-2-i+1):
1139
+ m, r = self.index((j, u, v))
1140
+ z.append((m, s * r * a.binomial(j)))
1141
+ s *= -1
1142
+ return z
1143
+
1144
+ def apply_TT(self, j):
1145
+ """
1146
+ Apply the matrix `TT=[-1,-1,0,1]` to the `j`-th Manin symbol.
1147
+
1148
+ INPUT:
1149
+
1150
+ - ``j`` -- integer; a symbol index
1151
+
1152
+ OUTPUT:
1153
+
1154
+ A list of pairs `(j, c_i)`, where each `c_i` is an
1155
+ integer, `j` is an integer (the `j`-th Manin symbol), and the
1156
+ sum `c_i*x_i` is the image of ``self`` under the right action
1157
+ of the matrix `T^2`.
1158
+
1159
+ EXAMPLES::
1160
+
1161
+ sage: # needs sage.rings.number_field
1162
+ sage: eps = DirichletGroup(4).gen(0)
1163
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1164
+ sage: m = ManinSymbolList_character(eps,2); m
1165
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1166
+ sage: m.apply_TT(4)
1167
+ [(0, 1)]
1168
+ sage: [m.apply_TT(i) for i in range(len(m))]
1169
+ [[(1, -1)], [(4, -1)], [(5, 1)], [(2, 1)], [(0, 1)], [(3, 1)]]
1170
+ """
1171
+ k = self._weight
1172
+ i, u, v = self._symbol_list[j]
1173
+ u, v, r = self.__P1.normalize_with_scalar(-u-v,u)
1174
+ r = self.__character(r)
1175
+ if (k-2-i) % 2 == 0:
1176
+ s = r
1177
+ else:
1178
+ s = -r
1179
+ z = []
1180
+ a = Integer(i)
1181
+ for j in range(i+1):
1182
+ m, r = self.index((k-2-i+j, u, v))
1183
+ z.append((m, s * r * a.binomial(j)))
1184
+ s *= -1
1185
+ return z
1186
+
1187
+ def character(self):
1188
+ """
1189
+ Return the character of this :class:`ManinSymbolList_character` object.
1190
+
1191
+ OUTPUT: the Dirichlet character of this Manin symbol list
1192
+
1193
+ EXAMPLES::
1194
+
1195
+ sage: # needs sage.rings.number_field
1196
+ sage: eps = DirichletGroup(4).gen(0)
1197
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1198
+ sage: m = ManinSymbolList_character(eps,2); m
1199
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1200
+ sage: m.character()
1201
+ Dirichlet character modulo 4 of conductor 4 mapping 3 |--> -1
1202
+ """
1203
+ return self.__character
1204
+
1205
+ def index(self, x):
1206
+ """
1207
+ Return the index of a standard Manin symbol equivalent to
1208
+ ``x``, together with a scaling factor.
1209
+
1210
+ INPUT:
1211
+
1212
+ - ``x`` -- 3-tuple of integers defining an element of this
1213
+ list of Manin symbols, which need not be normalized
1214
+
1215
+ OUTPUT:
1216
+
1217
+ A pair ``(i, s)`` where ``i`` is the index of the Manin symbol
1218
+ equivalent to ``x`` and ``s`` is the scalar (an element of the
1219
+ base field). If there is no Manin symbol equivalent to ``x``
1220
+ in the list, then ``(-1, 0)`` is returned.
1221
+
1222
+ EXAMPLES::
1223
+
1224
+ sage: # needs sage.rings.number_field
1225
+ sage: eps = DirichletGroup(4).gen(0)
1226
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1227
+ sage: m = ManinSymbolList_character(eps,4); m
1228
+ Manin Symbol List of weight 4 for Gamma1(4) with character [-1]
1229
+ sage: [m.index(s.tuple()) for s in m.manin_symbol_list()]
1230
+ [(0, 1),
1231
+ (1, 1),
1232
+ (2, 1),
1233
+ (3, 1),
1234
+ ...
1235
+ (16, 1),
1236
+ (17, 1)]
1237
+ """
1238
+ if x in self._index:
1239
+ return self._index[x], 1
1240
+ x, s = self.normalize(x)
1241
+ try:
1242
+ return self._index[x], s
1243
+ except KeyError:
1244
+ return -1, 0
1245
+
1246
+ def normalize(self, x):
1247
+ """
1248
+ Return the normalization of the Manin Symbol ``x`` with
1249
+ respect to this list, together with the normalizing scalar.
1250
+
1251
+ INPUT:
1252
+
1253
+ - ``x`` -- 3-tuple of integers ``(i,u,v)``, defining an element of this
1254
+ list of Manin symbols, which need not be normalized
1255
+
1256
+ OUTPUT:
1257
+
1258
+ ``((i,u,v),s)``, where ``(i,u,v)`` is the normalized Manin symbol equivalent
1259
+ to ``x``, and ``s`` is the normalizing scalar.
1260
+
1261
+ EXAMPLES::
1262
+
1263
+ sage: # needs sage.rings.number_field
1264
+ sage: eps = DirichletGroup(4).gen(0)
1265
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1266
+ sage: m = ManinSymbolList_character(eps,4); m
1267
+ Manin Symbol List of weight 4 for Gamma1(4) with character [-1]
1268
+ sage: [m.normalize(s.tuple()) for s in m.manin_symbol_list()]
1269
+ [((0, 0, 1), 1),
1270
+ ((0, 1, 0), 1),
1271
+ ((0, 1, 1), 1),
1272
+ ...
1273
+ ((2, 1, 3), 1),
1274
+ ((2, 2, 1), 1)]
1275
+ """
1276
+ u,v,s = self.__P1.normalize_with_scalar(x[1],x[2])
1277
+ return (x[0],u,v), self.__character(s)
1278
+
1279
+
1280
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1281
+ 'ManinSymbolList', ManinSymbolList)
1282
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1283
+ 'ManinSymbolList_group', ManinSymbolList_group)
1284
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1285
+ 'ManinSymbolList_gamma0', ManinSymbolList_gamma0)
1286
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1287
+ 'ManinSymbolList_gamma1', ManinSymbolList_gamma1)
1288
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1289
+ 'ManinSymbolList_gamma_h', ManinSymbolList_gamma_h)
1290
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1291
+ 'ManinSymbolList_character', ManinSymbolList_character)