passagemath-schemes 10.6.47__cp312-cp312-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.6.47.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
  9. passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.47.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-312-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-312-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +720 -0
  40. sage/modular/abvar/homspace.py +998 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-312-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-312-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-312-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-312-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2017 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1071 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +815 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-312-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-312-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list_nf.py +1241 -0
  154. sage/modular/modsym/relation_matrix.py +591 -0
  155. sage/modular/modsym/relation_matrix_pyx.cpython-312-darwin.so +0 -0
  156. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  157. sage/modular/modsym/space.py +2468 -0
  158. sage/modular/modsym/subspace.py +455 -0
  159. sage/modular/modsym/tests.py +375 -0
  160. sage/modular/multiple_zeta.py +2632 -0
  161. sage/modular/multiple_zeta_F_algebra.py +786 -0
  162. sage/modular/overconvergent/all.py +6 -0
  163. sage/modular/overconvergent/genus0.py +1878 -0
  164. sage/modular/overconvergent/hecke_series.py +1187 -0
  165. sage/modular/overconvergent/weightspace.py +778 -0
  166. sage/modular/pollack_stevens/all.py +4 -0
  167. sage/modular/pollack_stevens/distributions.py +874 -0
  168. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  169. sage/modular/pollack_stevens/manin_map.py +859 -0
  170. sage/modular/pollack_stevens/modsym.py +1593 -0
  171. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  172. sage/modular/pollack_stevens/sigma0.py +534 -0
  173. sage/modular/pollack_stevens/space.py +1076 -0
  174. sage/modular/quasimodform/all.py +3 -0
  175. sage/modular/quasimodform/element.py +845 -0
  176. sage/modular/quasimodform/ring.py +828 -0
  177. sage/modular/quatalg/all.py +3 -0
  178. sage/modular/quatalg/brandt.py +1642 -0
  179. sage/modular/ssmod/all.py +8 -0
  180. sage/modular/ssmod/ssmod.py +827 -0
  181. sage/rings/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  183. sage/rings/polynomial/binary_form_reduce.py +585 -0
  184. sage/schemes/all.py +41 -0
  185. sage/schemes/berkovich/all.py +6 -0
  186. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  187. sage/schemes/berkovich/berkovich_space.py +748 -0
  188. sage/schemes/curves/affine_curve.py +2928 -0
  189. sage/schemes/curves/all.py +33 -0
  190. sage/schemes/curves/closed_point.py +434 -0
  191. sage/schemes/curves/constructor.py +381 -0
  192. sage/schemes/curves/curve.py +542 -0
  193. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  194. sage/schemes/curves/point.py +463 -0
  195. sage/schemes/curves/projective_curve.py +3026 -0
  196. sage/schemes/curves/zariski_vankampen.py +1932 -0
  197. sage/schemes/cyclic_covers/all.py +2 -0
  198. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  199. sage/schemes/cyclic_covers/constructor.py +137 -0
  200. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  201. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  202. sage/schemes/elliptic_curves/BSD.py +1036 -0
  203. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  204. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  205. sage/schemes/elliptic_curves/all.py +49 -0
  206. sage/schemes/elliptic_curves/cardinality.py +609 -0
  207. sage/schemes/elliptic_curves/cm.py +1102 -0
  208. sage/schemes/elliptic_curves/constructor.py +1552 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  214. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  215. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  216. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  217. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  218. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  219. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  221. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  222. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  223. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  224. sage/schemes/elliptic_curves/formal_group.py +760 -0
  225. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  226. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7335 -0
  229. sage/schemes/elliptic_curves/height.py +2109 -0
  230. sage/schemes/elliptic_curves/hom.py +1406 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  232. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  233. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  234. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  235. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  236. sage/schemes/elliptic_curves/homset.py +271 -0
  237. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  238. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  239. sage/schemes/elliptic_curves/jacobian.py +237 -0
  240. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  241. sage/schemes/elliptic_curves/kraus.py +1014 -0
  242. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  243. sage/schemes/elliptic_curves/mod5family.py +105 -0
  244. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  245. sage/schemes/elliptic_curves/mod_sym_num.cpython-312-darwin.so +0 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  247. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  248. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  249. sage/schemes/elliptic_curves/padics.py +1816 -0
  250. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  251. sage/schemes/elliptic_curves/period_lattice_region.cpython-312-darwin.so +0 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  253. sage/schemes/elliptic_curves/saturation.py +715 -0
  254. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  255. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  256. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  257. sage/schemes/hyperelliptic_curves/all.py +6 -0
  258. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  259. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  264. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  265. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  270. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  271. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  272. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  273. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  274. sage/schemes/jacobians/all.py +2 -0
  275. sage/schemes/overview.py +161 -0
  276. sage/schemes/plane_conics/all.py +22 -0
  277. sage/schemes/plane_conics/con_field.py +1296 -0
  278. sage/schemes/plane_conics/con_finite_field.py +158 -0
  279. sage/schemes/plane_conics/con_number_field.py +456 -0
  280. sage/schemes/plane_conics/con_rational_field.py +406 -0
  281. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  282. sage/schemes/plane_conics/constructor.py +249 -0
  283. sage/schemes/plane_quartics/all.py +2 -0
  284. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  285. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  286. sage/schemes/riemann_surfaces/all.py +1 -0
  287. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  288. sage_wheels/share/cremona/cremona_mini.db +0 -0
  289. sage_wheels/share/ellcurves/rank0 +30427 -0
  290. sage_wheels/share/ellcurves/rank1 +31871 -0
  291. sage_wheels/share/ellcurves/rank10 +6 -0
  292. sage_wheels/share/ellcurves/rank11 +6 -0
  293. sage_wheels/share/ellcurves/rank12 +1 -0
  294. sage_wheels/share/ellcurves/rank14 +1 -0
  295. sage_wheels/share/ellcurves/rank15 +1 -0
  296. sage_wheels/share/ellcurves/rank17 +1 -0
  297. sage_wheels/share/ellcurves/rank19 +1 -0
  298. sage_wheels/share/ellcurves/rank2 +2388 -0
  299. sage_wheels/share/ellcurves/rank20 +1 -0
  300. sage_wheels/share/ellcurves/rank21 +1 -0
  301. sage_wheels/share/ellcurves/rank22 +1 -0
  302. sage_wheels/share/ellcurves/rank23 +1 -0
  303. sage_wheels/share/ellcurves/rank24 +1 -0
  304. sage_wheels/share/ellcurves/rank28 +1 -0
  305. sage_wheels/share/ellcurves/rank3 +836 -0
  306. sage_wheels/share/ellcurves/rank4 +10 -0
  307. sage_wheels/share/ellcurves/rank5 +5 -0
  308. sage_wheels/share/ellcurves/rank6 +5 -0
  309. sage_wheels/share/ellcurves/rank7 +5 -0
  310. sage_wheels/share/ellcurves/rank8 +6 -0
  311. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,1295 @@
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
+ import sage.modular.modsym.p1list as p1list
36
+ import sage.modular.modsym.g1list as g1list
37
+ import sage.modular.modsym.ghlist as ghlist
38
+ from sage.rings.integer import Integer
39
+ from sage.structure.parent import Parent
40
+ from sage.misc.persist import register_unpickle_override
41
+ from sage.misc.cachefunc import cached_method
42
+ from sage.structure.richcmp import richcmp_method, richcmp
43
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
44
+
45
+ from .apply import apply_to_monomial
46
+
47
+ from sage.modular.modsym.manin_symbol import ManinSymbol
48
+
49
+
50
+ @richcmp_method
51
+ class ManinSymbolList(Parent):
52
+ """
53
+ Base class for lists of all Manin symbols for a given weight, group or character.
54
+ """
55
+
56
+ Element = ManinSymbol
57
+
58
+ def __init__(self, weight, lst):
59
+ """
60
+ Constructor for a ManinSymbolList.
61
+
62
+ INPUT:
63
+
64
+ - ``weight`` -- the weight of the symbols
65
+
66
+ - ``lst`` -- the list of symbols
67
+
68
+ On construction, a ManinSymbolList constructs a dict for
69
+ rapid determination of the index of any given symbol.
70
+
71
+ This is a base class only; users will only directly construct
72
+ objects in the derived classes ManinSymbolList_gamma0,
73
+ ManinSymbolList_gamma1, ManinSymbolList_gamma_h,
74
+ ManinSymbolList_gamma_character. Many standard methods are
75
+ only implemented in the derived classes.
76
+
77
+ EXAMPLES::
78
+
79
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
80
+ sage: ManinSymbolList(6,P1List(11))
81
+ <sage.modular.modsym.manin_symbol_list.ManinSymbolList_with_category object at ...>
82
+ """
83
+ self._weight = weight
84
+ self._symbol_list = lst
85
+ self._index = {x: i for i,x in enumerate(lst)}
86
+ Parent.__init__(self, category=FiniteEnumeratedSets())
87
+
88
+ def _element_constructor_(self, x):
89
+ """
90
+ Construct an element of ``self``.
91
+
92
+ TESTS::
93
+
94
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
95
+ sage: m = ManinSymbolList(6, P1List(11))
96
+ sage: x = m((2, 3, 5)); x
97
+ [X^2*Y^2,(3,5)]
98
+ sage: m(x) == x
99
+ True
100
+ """
101
+ if isinstance(x, ManinSymbol):
102
+ x = x.tuple()
103
+ return self.element_class(self, x)
104
+
105
+ def __richcmp__(self, right, op):
106
+ """
107
+ Comparison function for ManinSymbolList objects.
108
+
109
+ EXAMPLES::
110
+
111
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
112
+ sage: m1 = ManinSymbolList(6,P1List(11))
113
+ sage: m2 = ManinSymbolList(6,P1List(13))
114
+ sage: m3 = ManinSymbolList(4,P1List(11))
115
+ sage: m1 < m2
116
+ True
117
+ sage: m2 < m3
118
+ False
119
+ sage: m1 < m3
120
+ False
121
+ """
122
+ if not isinstance(right, ManinSymbolList):
123
+ return NotImplemented
124
+ return richcmp((self._weight, self._symbol_list),
125
+ (right._weight, right._symbol_list), op)
126
+
127
+ def symbol_list(self):
128
+ """
129
+ Return the list of symbols of ``self``.
130
+
131
+ EXAMPLES::
132
+
133
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
134
+ sage: m = ManinSymbolList(6, P1List(11))
135
+ """
136
+ return list(self._symbol_list) # This makes a shallow copy
137
+
138
+ def __len__(self):
139
+ """
140
+ Return the length of this :class:`ManinSymbolList`.
141
+
142
+ EXAMPLES::
143
+
144
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
145
+ sage: m = ManinSymbolList(6,P1List(11))
146
+ sage: len(m)
147
+ 12
148
+ """
149
+ return len(self._symbol_list)
150
+
151
+ def apply(self, j, X):
152
+ """
153
+ Apply the matrix `X = [a, b; c, d]` to the `j`-th Manin symbol.
154
+
155
+ Implemented in derived classes.
156
+
157
+ EXAMPLES::
158
+
159
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
160
+ sage: m = ManinSymbolList(6,P1List(11))
161
+ sage: m.apply(10, [1,2,0,1])
162
+ Traceback (most recent call last):
163
+ ...
164
+ NotImplementedError: Only implemented in derived classes
165
+ """
166
+ raise NotImplementedError("Only implemented in derived classes")
167
+
168
+ def _apply_S_only_0pm1(self) -> bool:
169
+ """
170
+ Return ``True`` if the coefficient when applying the S relation is
171
+ always 0, 1, or -1. This is useful for optimizing code in
172
+ relation_matrix.py.
173
+
174
+ EXAMPLES::
175
+
176
+ sage: eps = DirichletGroup(4).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
+ True
180
+ sage: eps = DirichletGroup(7).gen(0)
181
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
182
+ sage: ManinSymbolList_character(eps,2)._apply_S_only_0pm1()
183
+ False
184
+ """
185
+ return False # derived classes could overload and put True
186
+
187
+ def apply_S(self, j):
188
+ """
189
+ Apply the matrix `S = [0, -1; 1, 0]` to the `j`-th Manin symbol.
190
+
191
+ Implemented in derived classes.
192
+
193
+ EXAMPLES::
194
+
195
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
196
+ sage: m = ManinSymbolList(6,P1List(11))
197
+ sage: m.apply_S(10)
198
+ Traceback (most recent call last):
199
+ ...
200
+ NotImplementedError: Only implemented in derived classes
201
+ """
202
+ raise NotImplementedError("Only implemented in derived classes")
203
+
204
+ def apply_I(self, j):
205
+ """
206
+ Apply the matrix `I = [-1, 0; 0, 1]` to the `j`-th Manin symbol.
207
+
208
+ Implemented in derived classes.
209
+
210
+ EXAMPLES::
211
+
212
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
213
+ sage: m = ManinSymbolList(6,P1List(11))
214
+ sage: m.apply_I(10)
215
+ Traceback (most recent call last):
216
+ ...
217
+ NotImplementedError: Only implemented in derived classes
218
+ """
219
+ raise NotImplementedError("Only implemented in derived classes")
220
+
221
+ def apply_T(self, j):
222
+ """
223
+ Apply the matrix `T = [0, 1; -1, -1]` to the `j`-th Manin symbol.
224
+
225
+ Implemented in derived classes.
226
+
227
+ EXAMPLES::
228
+
229
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
230
+ sage: m = ManinSymbolList(6,P1List(11))
231
+ sage: m.apply_T(10)
232
+ Traceback (most recent call last):
233
+ ...
234
+ NotImplementedError: Only implemented in derived classes
235
+ """
236
+ raise NotImplementedError("Only implemented in derived classes")
237
+
238
+ def apply_TT(self, j):
239
+ """
240
+ Apply the matrix `TT = T^2 = [-1, -1; 0, 1]` to the `j`-th
241
+ Manin symbol.
242
+
243
+ Implemented in derived classes.
244
+
245
+ EXAMPLES::
246
+
247
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
248
+ sage: m = ManinSymbolList(6,P1List(11))
249
+ sage: m.apply_TT(10)
250
+ Traceback (most recent call last):
251
+ ...
252
+ NotImplementedError: Only implemented in derived classes
253
+ """
254
+ raise NotImplementedError("Only implemented in derived classes")
255
+
256
+ def index(self, x):
257
+ """
258
+ Return the index of ``x`` in the list of Manin symbols.
259
+
260
+ INPUT:
261
+
262
+ - ``x`` -- a triple of integers `(i, u, v)` defining a valid
263
+ Manin symbol, which need not be normalized
264
+
265
+ OUTPUT:
266
+
267
+ integer -- the index of the normalized Manin symbol equivalent
268
+ to `(i, u, v)`. If ``x`` is not in ``self``, -1 is returned.
269
+
270
+ EXAMPLES::
271
+
272
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
273
+ sage: m = ManinSymbolList(6,P1List(11))
274
+ sage: m.index(m.symbol_list()[2])
275
+ 2
276
+ sage: S = m.symbol_list()
277
+ sage: all(i == m.index(S[i]) for i in range(len(S)))
278
+ True
279
+ """
280
+ if x in self._index:
281
+ return self._index[x]
282
+ x = self.normalize(x)
283
+ try:
284
+ return self._index[x]
285
+ except KeyError:
286
+ return -1
287
+
288
+ @cached_method
289
+ def manin_symbol_list(self):
290
+ """
291
+ Return all the Manin symbols in ``self`` as a list.
292
+
293
+ Cached for subsequent calls.
294
+
295
+ OUTPUT:
296
+
297
+ A list of :class:`ManinSymbol` objects, which is a copy of the
298
+ complete list of Manin symbols.
299
+
300
+ EXAMPLES::
301
+
302
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
303
+ sage: m = ManinSymbolList(6,P1List(11))
304
+ sage: m.manin_symbol_list() # not implemented for the base class
305
+
306
+ ::
307
+
308
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
309
+ sage: m = ManinSymbolList_gamma0(6, 4)
310
+ sage: m.manin_symbol_list()
311
+ [[Y^2,(0,1)],
312
+ [Y^2,(1,0)],
313
+ [Y^2,(1,1)],
314
+ ...
315
+ [X^2,(3,1)],
316
+ [X^2,(3,2)]]
317
+ """
318
+ return [self.manin_symbol(i) for i in range(len(self))]
319
+
320
+ list = manin_symbol_list
321
+
322
+ def manin_symbol(self, i):
323
+ """
324
+ Return the ``i``-th Manin symbol in this :class:`ManinSymbolList`.
325
+
326
+ INPUT:
327
+
328
+ - ``i`` -- integer; a valid index of a symbol in this list
329
+
330
+ OUTPUT:
331
+
332
+ :class:`ManinSymbol` -- the `i`-th Manin symbol in the list.
333
+
334
+ EXAMPLES::
335
+
336
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
337
+ sage: m = ManinSymbolList(6,P1List(11))
338
+ sage: m.manin_symbol(3) # not implemented for base class
339
+
340
+ ::
341
+
342
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
343
+ sage: m = ManinSymbolList_gamma0(6, 4)
344
+ sage: s = m.manin_symbol(3); s
345
+ [Y^2,(1,2)]
346
+ sage: type(s)
347
+ <class 'sage.modular.modsym.manin_symbol.ManinSymbol'>
348
+ """
349
+ return self.element_class(self, self._symbol_list[i])
350
+
351
+ def normalize(self, x):
352
+ """
353
+ Return a normalized Manin symbol from ``x``.
354
+
355
+ To be implemented in derived classes.
356
+
357
+ EXAMPLES::
358
+
359
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList
360
+ sage: m = ManinSymbolList(6,P1List(11))
361
+ sage: m.normalize((0,6,7)) # not implemented in base class
362
+ """
363
+ raise NotImplementedError("Only implemented in derived classes")
364
+
365
+ def weight(self):
366
+ """
367
+ Return the weight of the Manin symbols in this :class:`ManinSymbolList`.
368
+
369
+ OUTPUT: integer; the weight of the Manin symbols in the list
370
+
371
+ EXAMPLES::
372
+
373
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
374
+ sage: m = ManinSymbolList_gamma0(6, 4)
375
+ sage: m.weight()
376
+ 4
377
+ """
378
+ return self._weight
379
+
380
+
381
+ class ManinSymbolList_group(ManinSymbolList):
382
+ """
383
+ Base class for Manin symbol lists for a given group.
384
+
385
+ INPUT:
386
+
387
+ - ``level`` -- integer level
388
+
389
+ - ``weight`` -- integer weight
390
+
391
+ - ``syms`` -- something with ``normalize`` and ``list`` methods,
392
+ e.g. :class:`~sage.modular.modsym.p1list.P1List`
393
+
394
+ EXAMPLES::
395
+
396
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_group
397
+ sage: ManinSymbolList_group(11, 2, P1List(11))
398
+ <sage.modular.modsym.manin_symbol_list.ManinSymbolList_group_with_category object at ...>
399
+ """
400
+ def __init__(self, level, weight, syms):
401
+ """
402
+ Constructor for class ManinSymbolList_group.
403
+
404
+ INPUT:
405
+
406
+ - ``level`` -- integer level
407
+
408
+ - ``weight`` -- integer weight
409
+
410
+ - ``syms`` -- something with ``normalize`` and ``list``
411
+ methods, e.g. :class:`~sage.modular.modsym.p1list.P1List`
412
+
413
+ EXAMPLES::
414
+
415
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_group
416
+ sage: L = ManinSymbolList_group(11, 2, P1List(11)); L
417
+ <sage.modular.modsym.manin_symbol_list.ManinSymbolList_group_with_category object at ...>
418
+ """
419
+ self.__level = level
420
+ self.__syms = syms # syms is anything with a normalize and list method.
421
+
422
+ # The list returned from P1List is guaranteed to be sorted.
423
+ # Thus each list constructed below is also sorted. This is
424
+ # important since the index function assumes the list is sorted.
425
+ L = [(i, u, v) for i in range(weight - 2 + 1)
426
+ for u, v in syms.list()]
427
+ ManinSymbolList.__init__(self, weight, L)
428
+
429
+ def level(self):
430
+ """
431
+ Return the level of this :class:`ManinSymbolList`.
432
+
433
+ EXAMPLES::
434
+
435
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
436
+ sage: ManinSymbolList_gamma0(5,2).level()
437
+ 5
438
+
439
+ ::
440
+
441
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
442
+ sage: ManinSymbolList_gamma1(51,2).level()
443
+ 51
444
+
445
+ ::
446
+
447
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma_h
448
+ sage: ManinSymbolList_gamma_h(GammaH(117, [4]),2).level()
449
+ 117
450
+ """
451
+ return self.__level
452
+
453
+ def apply_S(self, j):
454
+ """
455
+ Apply the matrix `S = [0, -1; 1, 0]` to the `j`-th Manin symbol.
456
+
457
+ INPUT:
458
+
459
+ - ``j`` -- integer; a symbol index
460
+
461
+ OUTPUT:
462
+
463
+ ``(k, s)`` where k is the index of the symbol obtained by acting on the
464
+ `j`-th symbol with `S`, and `s` is the parity of the `j`-th symbol
465
+ (a Python ``int``, either 1 or -1).
466
+
467
+ EXAMPLES::
468
+
469
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
470
+ sage: m = ManinSymbolList_gamma0(5,8)
471
+ sage: m.apply_S(4)
472
+ (40, 1)
473
+ sage: [m.apply_S(i) for i in range(len(m))]
474
+ [(37, 1),
475
+ (36, 1),
476
+ (41, 1),
477
+ (39, 1),
478
+ (40, 1),
479
+ (38, 1),
480
+ (31, -1),
481
+ (30, -1),
482
+ (35, -1),
483
+ (33, -1),
484
+ (34, -1),
485
+ (32, -1),
486
+ ...
487
+ (4, 1),
488
+ (2, 1)]
489
+ """
490
+ i, u, v = self._symbol_list[j]
491
+ k = self.index((self._weight - 2 - i, v, -u))
492
+ return k, -1 if i % 2 else 1
493
+
494
+ def _apply_S_only_0pm1(self):
495
+ """
496
+ Return ``True`` if the coefficient when applying the S relation is
497
+ always 0, 1, or -1. This is useful for optimizing code in
498
+ relation_matrix.py.
499
+
500
+ EXAMPLES::
501
+
502
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
503
+ sage: ManinSymbolList_gamma0(5,8)._apply_S_only_0pm1()
504
+ True
505
+ """
506
+ return True
507
+
508
+ def apply_I(self, j):
509
+ """
510
+ Apply the matrix `I=[-1,0,0,1]` to the `j`-th Manin symbol.
511
+
512
+ INPUT:
513
+
514
+ - ``j`` -- integer; a symbol index
515
+
516
+ OUTPUT:
517
+
518
+ ``(k, s)`` where k is the index of the symbol obtained by acting on the
519
+ `j`-th symbol with `I`, and `s` is the parity of the `j`-th symbol
520
+ (a Python ``int``, either 1 or -1)
521
+
522
+ EXAMPLES::
523
+
524
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
525
+ sage: m = ManinSymbolList_gamma0(5,8)
526
+ sage: m.apply_I(4)
527
+ (3, 1)
528
+ sage: [m.apply_I(i) for i in range(10)]
529
+ [(0, 1),
530
+ (1, 1),
531
+ (5, 1),
532
+ (4, 1),
533
+ (3, 1),
534
+ (2, 1),
535
+ (6, -1),
536
+ (7, -1),
537
+ (11, -1),
538
+ (10, -1)]
539
+ """
540
+ i, u, v = self._symbol_list[j]
541
+ k = self.index((i, -u, v))
542
+ if i % 2 == 0:
543
+ return k, 1
544
+ else:
545
+ return k, -1
546
+
547
+ def apply_T(self, j):
548
+ """
549
+ Apply the matrix `T=[0,1,-1,-1]` to the `j`-th Manin symbol.
550
+
551
+ INPUT:
552
+
553
+ - ``j`` -- integer; a symbol index
554
+
555
+ OUTPUT: see documentation for apply()
556
+
557
+ EXAMPLES::
558
+
559
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
560
+ sage: m = ManinSymbolList_gamma0(5,8)
561
+ sage: m.apply_T(4)
562
+ [(3, 1), (9, -6), (15, 15), (21, -20), (27, 15), (33, -6), (39, 1)]
563
+ sage: [m.apply_T(i) for i in range(10)]
564
+ [[(5, 1), (11, -6), (17, 15), (23, -20), (29, 15), (35, -6), (41, 1)],
565
+ [(0, 1), (6, -6), (12, 15), (18, -20), (24, 15), (30, -6), (36, 1)],
566
+ [(4, 1), (10, -6), (16, 15), (22, -20), (28, 15), (34, -6), (40, 1)],
567
+ [(2, 1), (8, -6), (14, 15), (20, -20), (26, 15), (32, -6), (38, 1)],
568
+ [(3, 1), (9, -6), (15, 15), (21, -20), (27, 15), (33, -6), (39, 1)],
569
+ [(1, 1), (7, -6), (13, 15), (19, -20), (25, 15), (31, -6), (37, 1)],
570
+ [(5, 1), (11, -5), (17, 10), (23, -10), (29, 5), (35, -1)],
571
+ [(0, 1), (6, -5), (12, 10), (18, -10), (24, 5), (30, -1)],
572
+ [(4, 1), (10, -5), (16, 10), (22, -10), (28, 5), (34, -1)],
573
+ [(2, 1), (8, -5), (14, 10), (20, -10), (26, 5), (32, -1)]]
574
+ """
575
+ k = self._weight
576
+ i, u, v = self._symbol_list[j]
577
+ u, v = self.__syms.normalize(v,-u-v)
578
+ if (k-2) % 2 == 0:
579
+ s = 1
580
+ else:
581
+ s = -1
582
+ z = []
583
+ a = Integer(k-2-i)
584
+ for j in range(k-2-i+1):
585
+ m = self.index((j, u, v))
586
+ z.append((m, s * a.binomial(j)))
587
+ s *= -1
588
+ return z
589
+
590
+ def apply_TT(self, j):
591
+ """
592
+ Apply the matrix `TT=[-1,-1,0,1]` to the `j`-th Manin symbol.
593
+
594
+ INPUT:
595
+
596
+ - ``j`` -- integer; a symbol index
597
+
598
+ OUTPUT: see documentation for apply()
599
+
600
+ EXAMPLES::
601
+
602
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
603
+ sage: m = ManinSymbolList_gamma0(5,8)
604
+ sage: m.apply_TT(4)
605
+ [(38, 1)]
606
+ sage: [m.apply_TT(i) for i in range(10)]
607
+ [[(37, 1)],
608
+ [(41, 1)],
609
+ [(39, 1)],
610
+ [(40, 1)],
611
+ [(38, 1)],
612
+ [(36, 1)],
613
+ [(31, -1), (37, 1)],
614
+ [(35, -1), (41, 1)],
615
+ [(33, -1), (39, 1)],
616
+ [(34, -1), (40, 1)]]
617
+ """
618
+ k = self._weight
619
+ i, u, v = self._symbol_list[j]
620
+ u, v = self.__syms.normalize(-u-v,u)
621
+ if (k-2-i) % 2 == 0:
622
+ s = 1
623
+ else:
624
+ s = -1
625
+ z = []
626
+ a = Integer(i)
627
+ for j in range(i+1):
628
+ m = self.index((k-2-i+j, u, v))
629
+ z.append((m, s * a.binomial(j)))
630
+ s *= -1
631
+ return z
632
+
633
+ def apply(self, j, m):
634
+ r"""
635
+ Apply the matrix `m = [a, b; c, d]` to the `j`-th Manin symbol.
636
+
637
+ INPUT:
638
+
639
+ - ``j`` -- integer; a symbol index
640
+
641
+ - ``m = [a, b, c, d]`` a list of 4 integers, which defines a 2x2 matrix
642
+
643
+ OUTPUT:
644
+
645
+ a list of pairs `(j_i, \alpha_i)`, where each `\alpha_i` is a nonzero
646
+ integer, `j_i` is an integer (index of the `j_i`-th Manin symbol), and
647
+ `\sum_i \alpha_i\*x_{j_i}` is the image of the `j`-th Manin symbol under
648
+ the right action of the matrix [a,b;c,d]. Here the right action of
649
+ `g = [a, b; c, d]` on a Manin symbol `[P(X,Y),(u,v)]` is
650
+ `[P(aX+bY,cX+dY),(u,v)\*g]`.
651
+
652
+ EXAMPLES::
653
+
654
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
655
+ sage: m = ManinSymbolList_gamma0(5,8)
656
+ sage: m.apply(40, [2,3,1,1])
657
+ [(0, 729), (6, 2916), (12, 4860), (18, 4320),
658
+ (24, 2160), (30, 576), (36, 64)]
659
+ """
660
+ a, b, c, d = m[0], m[1], m[2], m[3]
661
+ i, u, v = self._symbol_list[j]
662
+ P = apply_to_monomial(i, self._weight-2, a, b, c, d)
663
+ m = self.index((0, u*a+v*c, u*b+v*d))
664
+ if m == -1:
665
+ return []
666
+ r = len(self.__syms)
667
+ return [(m + r*k, P[k]) for k in range(self._weight-2+1)
668
+ if P[k] != 0]
669
+
670
+ def normalize(self, x):
671
+ """
672
+ Return the normalization of the Manin symbol ``x`` with
673
+ respect to this list.
674
+
675
+ INPUT:
676
+
677
+ - ``x`` -- (3-tuple of ints) a tuple defining a ManinSymbol
678
+
679
+ OUTPUT:
680
+
681
+ ``(i,u,v)`` -- (3-tuple of ints) another tuple defining the associated
682
+ normalized ManinSymbol
683
+
684
+ EXAMPLES::
685
+
686
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
687
+ sage: m = ManinSymbolList_gamma0(5,8)
688
+ sage: [m.normalize(s.tuple()) for s in m.manin_symbol_list()][:10]
689
+ [(0, 0, 1),
690
+ (0, 1, 0),
691
+ (0, 1, 1),
692
+ (0, 1, 2),
693
+ (0, 1, 3),
694
+ (0, 1, 4),
695
+ (1, 0, 1),
696
+ (1, 1, 0),
697
+ (1, 1, 1),
698
+ (1, 1, 2)]
699
+ """
700
+ u,v = self.__syms.normalize(x[1],x[2])
701
+ return (x[0],u,v)
702
+
703
+
704
+ class ManinSymbolList_gamma0(ManinSymbolList_group):
705
+ r"""
706
+ Class for Manin symbols for `\Gamma_0(N)`.
707
+
708
+ INPUT:
709
+
710
+ - ``level`` -- integer; the level
711
+
712
+ - ``weight`` -- integer; the weight
713
+
714
+ EXAMPLES::
715
+
716
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
717
+ sage: m = ManinSymbolList_gamma0(5,2); m
718
+ Manin Symbol List of weight 2 for Gamma0(5)
719
+ sage: m.manin_symbol_list()
720
+ [(0,1), (1,0), (1,1), (1,2), (1,3), (1,4)]
721
+ sage: m = ManinSymbolList_gamma0(6,4); m
722
+ Manin Symbol List of weight 4 for Gamma0(6)
723
+ sage: len(m)
724
+ 36
725
+ """
726
+ def __init__(self, level, weight):
727
+ """
728
+ Constructor for a ModularSymbolList for Gamma_0(N).
729
+
730
+ EXAMPLES::
731
+
732
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
733
+ sage: M11 = ManinSymbolList_gamma0(11,2)
734
+ sage: M11
735
+ Manin Symbol List of weight 2 for Gamma0(11)
736
+ sage: M11 == loads(dumps(M11))
737
+ True
738
+ """
739
+ ManinSymbolList_group.__init__(self, level, weight, p1list.P1List(level))
740
+
741
+ def __repr__(self):
742
+ """
743
+ String representation.
744
+
745
+ EXAMPLES::
746
+
747
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
748
+ sage: M11 = ManinSymbolList_gamma0(11,2)
749
+ sage: str(M11)
750
+ 'Manin Symbol List of weight 2 for Gamma0(11)'
751
+ """
752
+ return "Manin Symbol List of weight %s for Gamma0(%s)" % (
753
+ self.weight(), self.level())
754
+
755
+
756
+ class ManinSymbolList_gamma1(ManinSymbolList_group):
757
+ r"""
758
+ Class for Manin symbols for `\Gamma_1(N)`.
759
+
760
+ INPUT:
761
+
762
+ - ``level`` -- integer; the level
763
+
764
+ - ``weight`` -- integer; the weight
765
+
766
+ EXAMPLES::
767
+
768
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
769
+ sage: m = ManinSymbolList_gamma1(5,2); m
770
+ Manin Symbol List of weight 2 for Gamma1(5)
771
+ sage: m.manin_symbol_list()
772
+ [(0,1),
773
+ (0,2),
774
+ (0,3),
775
+ ...
776
+ (4,3),
777
+ (4,4)]
778
+ sage: m = ManinSymbolList_gamma1(6,4); m
779
+ Manin Symbol List of weight 4 for Gamma1(6)
780
+ sage: len(m)
781
+ 72
782
+ sage: m == loads(dumps(m))
783
+ True
784
+ """
785
+ def __init__(self, level, weight):
786
+ r"""
787
+ Constructor for a ModularSymbolList for `\Gamma_0(N)`.
788
+
789
+ EXAMPLES::
790
+
791
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
792
+ sage: M11 = ManinSymbolList_gamma1(11,2)
793
+ sage: M11
794
+ Manin Symbol List of weight 2 for Gamma1(11)
795
+ """
796
+ ManinSymbolList_group.__init__(self, level, weight, g1list.G1list(level))
797
+
798
+ def __repr__(self):
799
+ """
800
+ Return the string representation of this :class:`ManinSymbolList`.
801
+
802
+ EXAMPLES::
803
+
804
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
805
+ sage: M11 = ManinSymbolList_gamma1(11,4)
806
+ sage: str(M11)
807
+ 'Manin Symbol List of weight 4 for Gamma1(11)'
808
+ """
809
+ return "Manin Symbol List of weight %s for Gamma1(%s)" % (
810
+ self.weight(), self.level())
811
+
812
+
813
+ class ManinSymbolList_gamma_h(ManinSymbolList_group):
814
+ r"""
815
+ Class for Manin symbols for `\Gamma_H(N)`.
816
+
817
+ INPUT:
818
+
819
+ - ``group`` -- integer; the congruence subgroup
820
+
821
+ - ``weight`` -- integer; the weight
822
+
823
+ EXAMPLES::
824
+
825
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma_h
826
+ sage: G = GammaH(117, [4])
827
+ sage: m = ManinSymbolList_gamma_h(G,2); m
828
+ Manin Symbol List of weight 2 for Congruence Subgroup Gamma_H(117) with H generated by [4]
829
+ sage: m.manin_symbol_list()[100:110]
830
+ [(1,88),
831
+ (1,89),
832
+ (1,90),
833
+ (1,91),
834
+ (1,92),
835
+ (1,93),
836
+ (1,94),
837
+ (1,95),
838
+ (1,96),
839
+ (1,97)]
840
+ sage: len(m.manin_symbol_list())
841
+ 2016
842
+ sage: m == loads(dumps(m))
843
+ True
844
+ """
845
+ def __init__(self, group, weight):
846
+ r"""
847
+ Constructor for Manin symbols for `\Gamma_H(N)`.
848
+
849
+ EXAMPLES::
850
+
851
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma_h
852
+ sage: G = GammaH(117, [4])
853
+ sage: m = ManinSymbolList_gamma_h(G,2); m
854
+ Manin Symbol List of weight 2 for Congruence Subgroup Gamma_H(117) with H generated by [4]
855
+ """
856
+ self.__group = group
857
+ ManinSymbolList_group.__init__(self, group.level(), weight, ghlist.GHlist(group))
858
+
859
+ def group(self):
860
+ """
861
+ Return the group associated to ``self``.
862
+
863
+ EXAMPLES::
864
+
865
+ sage: ModularSymbols(GammaH(12, [5]), 2).manin_symbols().group()
866
+ Congruence Subgroup Gamma_H(12) with H generated by [5]
867
+ """
868
+ return self.__group
869
+
870
+ def __repr__(self):
871
+ """
872
+ Return the string representation of ``self``.
873
+
874
+ EXAMPLES::
875
+
876
+ sage: ModularSymbols(GammaH(12, [5]), 2).manin_symbols().__repr__()
877
+ 'Manin Symbol List of weight 2 for Congruence Subgroup Gamma_H(12) with H generated by [5]'
878
+ """
879
+ return "Manin Symbol List of weight %s for %s" % (
880
+ self.weight(), self.group())
881
+
882
+
883
+ class ManinSymbolList_character(ManinSymbolList):
884
+ """
885
+ List of Manin symbols with character.
886
+
887
+ INPUT:
888
+
889
+ - ``character`` -- (DirichletCharacter) the Dirichlet character
890
+
891
+ - ``weight`` -- integer; the weight
892
+
893
+ EXAMPLES::
894
+
895
+ sage: # needs sage.rings.number_field
896
+ sage: eps = DirichletGroup(4).gen(0)
897
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
898
+ sage: m = ManinSymbolList_character(eps,2); m
899
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
900
+ sage: m.manin_symbol_list()
901
+ [(0,1), (1,0), (1,1), (1,2), (1,3), (2,1)]
902
+ sage: m == loads(dumps(m))
903
+ True
904
+ """
905
+ def __init__(self, character, weight):
906
+ """
907
+ Constructor for :class:`ManinSymbolList_character` objects.
908
+
909
+ INPUT:
910
+
911
+ - ``character`` -- (DirichletCharacter) the Dirichlet character
912
+
913
+ - ``weight`` -- integer; the weight
914
+
915
+ EXAMPLES::
916
+
917
+ sage: # needs sage.rings.number_field
918
+ sage: eps = DirichletGroup(4).gen(0)
919
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
920
+ sage: m = ManinSymbolList_character(eps,2); m
921
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
922
+ sage: m.manin_symbol_list()
923
+ [(0,1), (1,0), (1,1), (1,2), (1,3), (2,1)]
924
+ sage: TestSuite(m).run()
925
+ """
926
+ self.__level = character.modulus()
927
+ self.__P1 = p1list.P1List(self.level())
928
+
929
+ # We make a copy of the character *only* to program around what seems
930
+ # to be a bug in the cPickle module in some obscure case.
931
+ # If we don't due this, then this doctest fails.
932
+ # sage: M = ModularSymbols(DirichletGroup(5).0)
933
+ # sage: loads(dumps(M)) == M
934
+
935
+ self.__character = character.__copy__()
936
+
937
+ # The list returned from P1List is guaranteed to be sorted.
938
+ # Thus each list constructed below is also sorted. This is
939
+ # important since the index function assumes the list is sorted.
940
+ L = [(i, u, v) for i in range(weight - 2 + 1)
941
+ for u, v in self.__P1.list()]
942
+ self.__list = L
943
+ ManinSymbolList.__init__(self, weight, L)
944
+
945
+ def __repr__(self):
946
+ """
947
+ Standard function returning string representation.
948
+
949
+ EXAMPLES::
950
+
951
+ sage: # needs sage.rings.number_field
952
+ sage: eps = DirichletGroup(4).gen(0)
953
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
954
+ sage: m = ManinSymbolList_character(eps,2); m
955
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
956
+ sage: str(m) # indirect doctest
957
+ 'Manin Symbol List of weight 2 for Gamma1(4) with character [-1]'
958
+ """
959
+ return "Manin Symbol List of weight %s for Gamma1(%s) with character %s" % (
960
+ self.weight(), self.level(), self.character()._repr_short_())
961
+
962
+ def level(self):
963
+ """
964
+ Return the level of this :class:`ManinSymbolList`.
965
+
966
+ OUTPUT: integer; the level of the symbols in this list
967
+
968
+ EXAMPLES::
969
+
970
+ sage: # needs sage.rings.number_field
971
+ sage: eps = DirichletGroup(4).gen(0)
972
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
973
+ sage: ManinSymbolList_character(eps,4).level()
974
+ 4
975
+ """
976
+ return self.__level
977
+
978
+ def apply(self, j, m):
979
+ """
980
+ Apply the integer matrix `m=[a,b;c,d]` to the `j`-th Manin symbol.
981
+
982
+ INPUT:
983
+
984
+ - ``j`` -- integer; the index of the symbol to act on
985
+
986
+ - ``m`` -- list of integers `[a,b,c,d]` where `m = [a, b; c, d]` is the
987
+ matrix to be applied
988
+
989
+ OUTPUT:
990
+
991
+ A list of pairs `(j, c_i)`, where each `c_i` is an
992
+ integer, `j` is an integer (the `j`-th Manin symbol), and the
993
+ sum `c_i*x_i` is the image of ``self`` under the right action
994
+ of the matrix `[a,b;c,d]`. Here the right action of
995
+ `g = [a,b;c,d]` on a Manin symbol `[P(X,Y),(u,v)]` is by
996
+ definition `[P(aX+bY,cX+dY),(u,v)*g]`.
997
+
998
+ EXAMPLES::
999
+
1000
+ sage: # needs sage.rings.number_field
1001
+ sage: eps = DirichletGroup(4).gen(0)
1002
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1003
+ sage: m = ManinSymbolList_character(eps,4)
1004
+ sage: m[6]
1005
+ [X*Y,(0,1)]
1006
+ sage: m.apply(4, [1,0,0,1])
1007
+ [(4, 1)]
1008
+ sage: m.apply(1, [-1,0,0,1])
1009
+ [(1, -1)]
1010
+ """
1011
+ a, b, c, d = m[0], m[1], m[2], m[3]
1012
+ i, u, v = self._symbol_list[j]
1013
+ P = apply_to_monomial(i, self._weight-2, a, b, c, d)
1014
+ m, s = self.index((0, u*a+v*c, u*b+v*d))
1015
+ if m == -1 or s == 0:
1016
+ return []
1017
+ r = len(self.__P1)
1018
+ return [(m + r*k, s*P[k]) for k in range(self._weight-2+1)
1019
+ if P[k] != 0]
1020
+
1021
+ def apply_S(self, j):
1022
+ """
1023
+ Apply the matrix `S=[0,1;-1,0]` to the `j`-th Manin symbol.
1024
+
1025
+ INPUT:
1026
+
1027
+ - ``j`` -- integer; a symbol index
1028
+
1029
+ OUTPUT:
1030
+
1031
+ ``(k, s)`` where `k` is the index of the symbol obtained by acting
1032
+ on the `j`-th symbol with `S`, and `s` is the parity of the
1033
+ `j`-th symbol.
1034
+
1035
+ EXAMPLES::
1036
+
1037
+ sage: # needs sage.rings.number_field
1038
+ sage: eps = DirichletGroup(4).gen(0)
1039
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1040
+ sage: m = ManinSymbolList_character(eps,2); m
1041
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1042
+ sage: m.apply_S(4)
1043
+ (2, -1)
1044
+ sage: [m.apply_S(i) for i in range(len(m))]
1045
+ [(1, 1), (0, -1), (4, 1), (5, -1), (2, -1), (3, 1)]
1046
+ """
1047
+ i, u, v = self._symbol_list[j]
1048
+ k, s = self.index((self._weight - 2 - i, v, -u))
1049
+ if i % 2 == 0:
1050
+ return k, s
1051
+ else:
1052
+ return k, -s
1053
+
1054
+ def _apply_S_only_0pm1(self):
1055
+ """
1056
+ Return ``True`` if the coefficient when applying the S relation is
1057
+ always 0, 1, or -1. This is useful for optimizing code in
1058
+ relation_matrix.py.
1059
+
1060
+ EXAMPLES::
1061
+
1062
+ sage: # needs sage.rings.number_field
1063
+ sage: eps = DirichletGroup(4).gen(0)
1064
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1065
+ sage: ManinSymbolList_character(eps,2)._apply_S_only_0pm1()
1066
+ True
1067
+ sage: ManinSymbolList_character(DirichletGroup(13).0,2)._apply_S_only_0pm1()
1068
+ False
1069
+ """
1070
+ return self.__character.order() <= 2
1071
+
1072
+ def apply_I(self, j):
1073
+ """
1074
+ Apply the matrix `I=[-1,0,0,1]` to the `j`-th Manin symbol.
1075
+
1076
+ INPUT:
1077
+
1078
+ - ``j`` -- integer; a symbol index
1079
+
1080
+ OUTPUT:
1081
+
1082
+ ``(k, s)`` where `k` is the index of the symbol obtained by acting
1083
+ on the `j`-th symbol with `I`, and `s` is the parity of the
1084
+ `j`-th symbol.
1085
+
1086
+ EXAMPLES::
1087
+
1088
+ sage: # needs sage.rings.number_field
1089
+ sage: eps = DirichletGroup(4).gen(0)
1090
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1091
+ sage: m = ManinSymbolList_character(eps,2); m
1092
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1093
+ sage: m.apply_I(4)
1094
+ (2, -1)
1095
+ sage: [m.apply_I(i) for i in range(len(m))]
1096
+ [(0, 1), (1, -1), (4, -1), (3, -1), (2, -1), (5, 1)]
1097
+ """
1098
+ i, u, v = self._symbol_list[j]
1099
+ k, s = self.index((i, -u, v))
1100
+ if i % 2 == 0:
1101
+ return k, s
1102
+ else:
1103
+ return k, -s
1104
+
1105
+ def apply_T(self, j):
1106
+ """
1107
+ Apply the matrix `T=[0,1,-1,-1]` to the `j`-th Manin symbol.
1108
+
1109
+ INPUT:
1110
+
1111
+ - ``j`` -- integer; a symbol index
1112
+
1113
+ OUTPUT:
1114
+
1115
+ A list of pairs `(j, c_i)`, where each `c_i` is an
1116
+ integer, `j` is an integer (the `j`-th Manin symbol), and the
1117
+ sum `c_i*x_i` is the image of ``self`` under the right action
1118
+ of the matrix `T`.
1119
+
1120
+ EXAMPLES::
1121
+
1122
+ sage: # needs sage.rings.number_field
1123
+ sage: eps = DirichletGroup(4).gen(0)
1124
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1125
+ sage: m = ManinSymbolList_character(eps,2); m
1126
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1127
+ sage: m.apply_T(4)
1128
+ [(1, -1)]
1129
+ sage: [m.apply_T(i) for i in range(len(m))]
1130
+ [[(4, 1)], [(0, -1)], [(3, 1)], [(5, 1)], [(1, -1)], [(2, 1)]]
1131
+ """
1132
+ k = self._weight
1133
+ i, u, v = self._symbol_list[j]
1134
+ u, v, r = self.__P1.normalize_with_scalar(v,-u-v)
1135
+ r = self.__character(r)
1136
+ if (k-2) % 2 == 0:
1137
+ s = r
1138
+ else:
1139
+ s = -r
1140
+ z = []
1141
+ a = Integer(k-2-i)
1142
+ for j in range(k-2-i+1):
1143
+ m, r = self.index((j, u, v))
1144
+ z.append((m, s * r * a.binomial(j)))
1145
+ s *= -1
1146
+ return z
1147
+
1148
+ def apply_TT(self, j):
1149
+ """
1150
+ Apply the matrix `TT=[-1,-1,0,1]` to the `j`-th Manin symbol.
1151
+
1152
+ INPUT:
1153
+
1154
+ - ``j`` -- integer; a symbol index
1155
+
1156
+ OUTPUT:
1157
+
1158
+ A list of pairs `(j, c_i)`, where each `c_i` is an
1159
+ integer, `j` is an integer (the `j`-th Manin symbol), and the
1160
+ sum `c_i*x_i` is the image of ``self`` under the right action
1161
+ of the matrix `T^2`.
1162
+
1163
+ EXAMPLES::
1164
+
1165
+ sage: # needs sage.rings.number_field
1166
+ sage: eps = DirichletGroup(4).gen(0)
1167
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1168
+ sage: m = ManinSymbolList_character(eps,2); m
1169
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1170
+ sage: m.apply_TT(4)
1171
+ [(0, 1)]
1172
+ sage: [m.apply_TT(i) for i in range(len(m))]
1173
+ [[(1, -1)], [(4, -1)], [(5, 1)], [(2, 1)], [(0, 1)], [(3, 1)]]
1174
+ """
1175
+ k = self._weight
1176
+ i, u, v = self._symbol_list[j]
1177
+ u, v, r = self.__P1.normalize_with_scalar(-u-v,u)
1178
+ r = self.__character(r)
1179
+ if (k-2-i) % 2 == 0:
1180
+ s = r
1181
+ else:
1182
+ s = -r
1183
+ z = []
1184
+ a = Integer(i)
1185
+ for j in range(i+1):
1186
+ m, r = self.index((k-2-i+j, u, v))
1187
+ z.append((m, s * r * a.binomial(j)))
1188
+ s *= -1
1189
+ return z
1190
+
1191
+ def character(self):
1192
+ """
1193
+ Return the character of this :class:`ManinSymbolList_character` object.
1194
+
1195
+ OUTPUT: the Dirichlet character of this Manin symbol list
1196
+
1197
+ EXAMPLES::
1198
+
1199
+ sage: # needs sage.rings.number_field
1200
+ sage: eps = DirichletGroup(4).gen(0)
1201
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1202
+ sage: m = ManinSymbolList_character(eps,2); m
1203
+ Manin Symbol List of weight 2 for Gamma1(4) with character [-1]
1204
+ sage: m.character()
1205
+ Dirichlet character modulo 4 of conductor 4 mapping 3 |--> -1
1206
+ """
1207
+ return self.__character
1208
+
1209
+ def index(self, x):
1210
+ """
1211
+ Return the index of a standard Manin symbol equivalent to
1212
+ ``x``, together with a scaling factor.
1213
+
1214
+ INPUT:
1215
+
1216
+ - ``x`` -- 3-tuple of integers defining an element of this
1217
+ list of Manin symbols, which need not be normalized
1218
+
1219
+ OUTPUT:
1220
+
1221
+ A pair ``(i, s)`` where ``i`` is the index of the Manin symbol
1222
+ equivalent to ``x`` and ``s`` is the scalar (an element of the
1223
+ base field). If there is no Manin symbol equivalent to ``x``
1224
+ in the list, then ``(-1, 0)`` is returned.
1225
+
1226
+ EXAMPLES::
1227
+
1228
+ sage: # needs sage.rings.number_field
1229
+ sage: eps = DirichletGroup(4).gen(0)
1230
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1231
+ sage: m = ManinSymbolList_character(eps,4); m
1232
+ Manin Symbol List of weight 4 for Gamma1(4) with character [-1]
1233
+ sage: [m.index(s.tuple()) for s in m.manin_symbol_list()]
1234
+ [(0, 1),
1235
+ (1, 1),
1236
+ (2, 1),
1237
+ (3, 1),
1238
+ ...
1239
+ (16, 1),
1240
+ (17, 1)]
1241
+ """
1242
+ if x in self._index:
1243
+ return self._index[x], 1
1244
+ x, s = self.normalize(x)
1245
+ try:
1246
+ return self._index[x], s
1247
+ except KeyError:
1248
+ return -1, 0
1249
+
1250
+ def normalize(self, x):
1251
+ """
1252
+ Return the normalization of the Manin Symbol ``x`` with
1253
+ respect to this list, together with the normalizing scalar.
1254
+
1255
+ INPUT:
1256
+
1257
+ - ``x`` -- 3-tuple of integers ``(i,u,v)``, defining an element of this
1258
+ list of Manin symbols, which need not be normalized
1259
+
1260
+ OUTPUT:
1261
+
1262
+ ``((i,u,v),s)``, where ``(i,u,v)`` is the normalized Manin symbol equivalent
1263
+ to ``x``, and ``s`` is the normalizing scalar.
1264
+
1265
+ EXAMPLES::
1266
+
1267
+ sage: # needs sage.rings.number_field
1268
+ sage: eps = DirichletGroup(4).gen(0)
1269
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_character
1270
+ sage: m = ManinSymbolList_character(eps,4); m
1271
+ Manin Symbol List of weight 4 for Gamma1(4) with character [-1]
1272
+ sage: [m.normalize(s.tuple()) for s in m.manin_symbol_list()]
1273
+ [((0, 0, 1), 1),
1274
+ ((0, 1, 0), 1),
1275
+ ((0, 1, 1), 1),
1276
+ ...
1277
+ ((2, 1, 3), 1),
1278
+ ((2, 2, 1), 1)]
1279
+ """
1280
+ u,v,s = self.__P1.normalize_with_scalar(x[1],x[2])
1281
+ return (x[0],u,v), self.__character(s)
1282
+
1283
+
1284
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1285
+ 'ManinSymbolList', ManinSymbolList)
1286
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1287
+ 'ManinSymbolList_group', ManinSymbolList_group)
1288
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1289
+ 'ManinSymbolList_gamma0', ManinSymbolList_gamma0)
1290
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1291
+ 'ManinSymbolList_gamma1', ManinSymbolList_gamma1)
1292
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1293
+ 'ManinSymbolList_gamma_h', ManinSymbolList_gamma_h)
1294
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
1295
+ 'ManinSymbolList_character', ManinSymbolList_character)