passagemath-schemes 10.6.40__cp314-cp314-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.

Potentially problematic release.


This version of passagemath-schemes might be problematic. Click here for more details.

Files changed (314) 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.40.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.40.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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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.cpython-314-darwin.so +0 -0
  154. sage/modular/modsym/p1list.pxd +29 -0
  155. sage/modular/modsym/p1list.pyx +1372 -0
  156. sage/modular/modsym/p1list_nf.py +1241 -0
  157. sage/modular/modsym/relation_matrix.py +591 -0
  158. sage/modular/modsym/relation_matrix_pyx.cpython-314-darwin.so +0 -0
  159. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  160. sage/modular/modsym/space.py +2468 -0
  161. sage/modular/modsym/subspace.py +455 -0
  162. sage/modular/modsym/tests.py +375 -0
  163. sage/modular/multiple_zeta.py +2632 -0
  164. sage/modular/multiple_zeta_F_algebra.py +786 -0
  165. sage/modular/overconvergent/all.py +6 -0
  166. sage/modular/overconvergent/genus0.py +1878 -0
  167. sage/modular/overconvergent/hecke_series.py +1187 -0
  168. sage/modular/overconvergent/weightspace.py +778 -0
  169. sage/modular/pollack_stevens/all.py +4 -0
  170. sage/modular/pollack_stevens/distributions.py +874 -0
  171. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  172. sage/modular/pollack_stevens/manin_map.py +859 -0
  173. sage/modular/pollack_stevens/modsym.py +1593 -0
  174. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  175. sage/modular/pollack_stevens/sigma0.py +534 -0
  176. sage/modular/pollack_stevens/space.py +1076 -0
  177. sage/modular/quasimodform/all.py +3 -0
  178. sage/modular/quasimodform/element.py +845 -0
  179. sage/modular/quasimodform/ring.py +828 -0
  180. sage/modular/quatalg/all.py +3 -0
  181. sage/modular/quatalg/brandt.py +1642 -0
  182. sage/modular/ssmod/all.py +8 -0
  183. sage/modular/ssmod/ssmod.py +827 -0
  184. sage/rings/all__sagemath_schemes.py +1 -0
  185. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  186. sage/rings/polynomial/binary_form_reduce.py +585 -0
  187. sage/schemes/all.py +41 -0
  188. sage/schemes/berkovich/all.py +6 -0
  189. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  190. sage/schemes/berkovich/berkovich_space.py +748 -0
  191. sage/schemes/curves/affine_curve.py +2928 -0
  192. sage/schemes/curves/all.py +33 -0
  193. sage/schemes/curves/closed_point.py +434 -0
  194. sage/schemes/curves/constructor.py +381 -0
  195. sage/schemes/curves/curve.py +542 -0
  196. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  197. sage/schemes/curves/point.py +463 -0
  198. sage/schemes/curves/projective_curve.py +3026 -0
  199. sage/schemes/curves/zariski_vankampen.py +1932 -0
  200. sage/schemes/cyclic_covers/all.py +2 -0
  201. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  202. sage/schemes/cyclic_covers/constructor.py +137 -0
  203. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  204. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  205. sage/schemes/elliptic_curves/BSD.py +1036 -0
  206. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  207. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  208. sage/schemes/elliptic_curves/all.py +49 -0
  209. sage/schemes/elliptic_curves/cardinality.py +609 -0
  210. sage/schemes/elliptic_curves/cm.py +1102 -0
  211. sage/schemes/elliptic_curves/constructor.py +1552 -0
  212. sage/schemes/elliptic_curves/ec_database.py +175 -0
  213. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  214. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  215. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  216. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  217. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  218. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  219. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  220. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  221. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  222. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  223. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  224. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  225. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  226. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  227. sage/schemes/elliptic_curves/formal_group.py +760 -0
  228. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  229. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  230. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  231. sage/schemes/elliptic_curves/heegner.py +7335 -0
  232. sage/schemes/elliptic_curves/height.py +2109 -0
  233. sage/schemes/elliptic_curves/hom.py +1406 -0
  234. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  235. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  236. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  237. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  238. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  239. sage/schemes/elliptic_curves/homset.py +271 -0
  240. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  241. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  242. sage/schemes/elliptic_curves/jacobian.py +237 -0
  243. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  244. sage/schemes/elliptic_curves/kraus.py +1014 -0
  245. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  246. sage/schemes/elliptic_curves/mod5family.py +105 -0
  247. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  248. sage/schemes/elliptic_curves/mod_sym_num.cpython-314-darwin.so +0 -0
  249. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  250. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  251. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  252. sage/schemes/elliptic_curves/padics.py +1816 -0
  253. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  254. sage/schemes/elliptic_curves/period_lattice_region.cpython-314-darwin.so +0 -0
  255. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  256. sage/schemes/elliptic_curves/saturation.py +715 -0
  257. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  258. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  259. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  260. sage/schemes/hyperelliptic_curves/all.py +6 -0
  261. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  265. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  266. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  267. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  271. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  272. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  273. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  274. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  275. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  276. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  277. sage/schemes/jacobians/all.py +2 -0
  278. sage/schemes/overview.py +161 -0
  279. sage/schemes/plane_conics/all.py +22 -0
  280. sage/schemes/plane_conics/con_field.py +1296 -0
  281. sage/schemes/plane_conics/con_finite_field.py +158 -0
  282. sage/schemes/plane_conics/con_number_field.py +456 -0
  283. sage/schemes/plane_conics/con_rational_field.py +406 -0
  284. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  285. sage/schemes/plane_conics/constructor.py +249 -0
  286. sage/schemes/plane_quartics/all.py +2 -0
  287. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  288. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  289. sage/schemes/riemann_surfaces/all.py +1 -0
  290. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  291. sage_wheels/share/cremona/cremona_mini.db +0 -0
  292. sage_wheels/share/ellcurves/rank0 +30427 -0
  293. sage_wheels/share/ellcurves/rank1 +31871 -0
  294. sage_wheels/share/ellcurves/rank10 +6 -0
  295. sage_wheels/share/ellcurves/rank11 +6 -0
  296. sage_wheels/share/ellcurves/rank12 +1 -0
  297. sage_wheels/share/ellcurves/rank14 +1 -0
  298. sage_wheels/share/ellcurves/rank15 +1 -0
  299. sage_wheels/share/ellcurves/rank17 +1 -0
  300. sage_wheels/share/ellcurves/rank19 +1 -0
  301. sage_wheels/share/ellcurves/rank2 +2388 -0
  302. sage_wheels/share/ellcurves/rank20 +1 -0
  303. sage_wheels/share/ellcurves/rank21 +1 -0
  304. sage_wheels/share/ellcurves/rank22 +1 -0
  305. sage_wheels/share/ellcurves/rank23 +1 -0
  306. sage_wheels/share/ellcurves/rank24 +1 -0
  307. sage_wheels/share/ellcurves/rank28 +1 -0
  308. sage_wheels/share/ellcurves/rank3 +836 -0
  309. sage_wheels/share/ellcurves/rank4 +10 -0
  310. sage_wheels/share/ellcurves/rank5 +5 -0
  311. sage_wheels/share/ellcurves/rank6 +5 -0
  312. sage_wheels/share/ellcurves/rank7 +5 -0
  313. sage_wheels/share/ellcurves/rank8 +6 -0
  314. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,375 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint sage.libs.pari
3
+ """
4
+ Testing modular symbols spaces
5
+
6
+ TESTS::
7
+
8
+ sage: m = ModularSymbols(389)
9
+ sage: [(g.degree(), e) for g, e in m.T(2).fcp()]
10
+ [(1, 1), (1, 2), (2, 2), (3, 2), (6, 2), (20, 2)]
11
+ """
12
+
13
+ # ****************************************************************************
14
+ # Sage: Open Source Mathematical Software
15
+ #
16
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
17
+ #
18
+ # Distributed under the terms of the GNU General Public License (GPL)
19
+ #
20
+ # This code is distributed in the hope that it will be useful,
21
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23
+ # General Public License for more details.
24
+ #
25
+ # The full text of the GPL is available at:
26
+ #
27
+ # https://www.gnu.org/licenses/
28
+ # ****************************************************************************
29
+
30
+ import random
31
+
32
+ from . import modsym
33
+ import sage.modular.dirichlet as dirichlet
34
+ import sage.modular.arithgroup.all as arithgroup
35
+ from sage.misc.timing import cputime
36
+
37
+
38
+ class Test:
39
+ """
40
+ Modular symbol testing class.
41
+ """
42
+ def __init__(self, levels=20, weights=4, onlyg0=False, onlyg1=False,
43
+ onlychar=False):
44
+ """
45
+ Create a modular symbol testing object.
46
+
47
+ INPUT:
48
+
49
+ - ``levels`` -- list or integer
50
+ - ``weights`` -- list or integer
51
+ - ``onlyg0`` -- boolean; if ``True`` only select Gamma0 spaces for testing
52
+ - ``onlyg1`` -- boolean; if ``True`` only select Gamma1 spaces for testing
53
+ - ``onlychar`` -- boolean; if ``True`` only selects spaces with character for testing
54
+
55
+ EXAMPLES::
56
+
57
+ sage: from sage.modular.modsym.tests import Test
58
+ sage: Test()
59
+ Modular symbols testing class
60
+ sage: T = Test(weights=[3,5,7])
61
+ sage: T.weights
62
+ [3, 5, 7]
63
+ sage: T = Test(levels=5) ; T.levels
64
+ [1, 2, 3, 4, 5]
65
+ """
66
+ if not isinstance(levels, list):
67
+ levels = list(range(1, int(levels) + 1))
68
+ if not isinstance(weights, list):
69
+ weights = list(range(2, int(weights) + 1))
70
+ self.levels = levels
71
+ self.weights = weights
72
+ if not levels:
73
+ raise RuntimeError("levels must have positive length")
74
+ if not weights:
75
+ raise RuntimeError("weights must have positive length")
76
+ self.current_space = None
77
+ self.onlyg0 = onlyg0
78
+ self.onlyg1 = onlyg1
79
+ self.onlychar = onlychar
80
+
81
+ def __repr__(self):
82
+ """
83
+ Return the string representation of ``self``.
84
+
85
+ EXAMPLES::
86
+
87
+ sage: from sage.modular.modsym.tests import Test
88
+ sage: Test().__repr__()
89
+ 'Modular symbols testing class'
90
+ """
91
+ return "Modular symbols testing class"
92
+
93
+ def _modular_symbols_space(self):
94
+ """
95
+ Generate a random space of modular symbols subject to
96
+ the conditions of ``self``.
97
+
98
+ EXAMPLES::
99
+
100
+ sage: from sage.modular.modsym.tests import Test
101
+ sage: T = Test(levels=[5],weights=[2], onlychar=True)
102
+
103
+ Note that the sign of the generated space is always arbitrary.
104
+ sage: T._modular_symbols_space()
105
+ character
106
+ level = 5, weight = 2, sign = ...
107
+ ...
108
+ """
109
+ if self.onlyg0:
110
+ which = 0
111
+ elif self.onlyg1:
112
+ which = 1
113
+ elif self.onlychar:
114
+ which = 2
115
+ else:
116
+ which = random.randrange(0, 3)
117
+ if which == 0:
118
+ print("gamma0")
119
+ M = self._modular_symbols_space_gamma0()
120
+ elif which == 1:
121
+ print("gamma1")
122
+ M = self._modular_symbols_space_gamma1()
123
+ else:
124
+ print("character")
125
+ M = self._modular_symbols_space_character()
126
+ print("\t", M)
127
+ return M
128
+
129
+ def _level_weight_sign(self):
130
+ """
131
+ Return a triple containing a random choice of level from
132
+ self.levels, weights from self.weights, and sign chosen
133
+ randomly from [1, 0, -1].
134
+
135
+ EXAMPLES::
136
+
137
+ sage: from sage.modular.modsym.tests import Test
138
+ sage: Test()._level_weight_sign() # random
139
+ level = 4, weight = 3, sign = 1
140
+ (4, 3, 1)
141
+ """
142
+ level = random.choice(self.levels)
143
+ weight = random.choice(self.weights)
144
+ sign = random.choice([-1, 0, 1])
145
+ print("level = %s, weight = %s, sign = %s" % (level, weight, sign))
146
+ return level, weight, sign
147
+
148
+ def _modular_symbols_space_gamma0(self):
149
+ """
150
+ Return a space of modular symbols for Gamma0, with level a
151
+ random choice from self.levels, weight from self.weights, and
152
+ sign chosen randomly from [1, 0, -1].
153
+
154
+ EXAMPLES::
155
+
156
+ sage: from sage.modular.modsym.tests import Test
157
+ sage: Test()._modular_symbols_space_gamma0() # random
158
+ level = 1, weight = 3, sign = 0
159
+ Modular Symbols space of dimension 0 for Gamma_0(1) of weight 3 with sign 0 over Rational Field
160
+ """
161
+ level, weight, sign = self._level_weight_sign()
162
+ M = modsym.ModularSymbols(arithgroup.Gamma0(level), weight, sign)
163
+ self.current_space = M
164
+ return M
165
+
166
+ def _modular_symbols_space_gamma1(self):
167
+ """
168
+ Return a space of modular symbols for Gamma1, with level a
169
+ random choice from self.levels, weight from self.weights, and
170
+ sign chosen randomly from [1, 0, -1].
171
+
172
+ EXAMPLES::
173
+
174
+ sage: from sage.modular.modsym.tests import Test
175
+ sage: Test()._modular_symbols_space_gamma1() # random
176
+ level = 3, weight = 4, sign = 0
177
+ Modular Symbols space of dimension 2 for Gamma_1(3) of weight 4 with sign 0 over Rational Field
178
+ """
179
+ level, weight, sign = self._level_weight_sign()
180
+ M = modsym.ModularSymbols(arithgroup.Gamma1(level), weight, sign)
181
+ self.current_space = M
182
+ return M
183
+
184
+ def _modular_symbols_space_character(self):
185
+ """
186
+ Return a random space of modular symbols for Gamma1, with
187
+ (possibly trivial) character, random sign, and weight a
188
+ random choice from self.weights.
189
+
190
+ EXAMPLES::
191
+
192
+ sage: # needs sage.rings.number_field
193
+ sage: from sage.modular.modsym.tests import Test
194
+ sage: Test()._modular_symbols_space_character() # random
195
+ level = 18, weight = 3, sign = 0
196
+ Modular Symbols space of dimension 0
197
+ and level 18, weight 3, character [1, zeta6 - 1], sign 0,
198
+ over Cyclotomic Field of order 6 and degree 2
199
+ """
200
+ level, weight, sign = self._level_weight_sign()
201
+ G = dirichlet.DirichletGroup(level)
202
+ eps = G.random_element()
203
+ M = modsym.ModularSymbols(eps, weight, sign)
204
+ self.current_space = M
205
+ return M
206
+
207
+ def _do(self, name):
208
+ """
209
+ Perform the test 'test_name', where name is specified as an
210
+ argument. This function exists to avoid a call to eval.
211
+
212
+ EXAMPLES::
213
+
214
+ sage: from sage.modular.modsym.tests import Test
215
+ sage: Test()._do("random")
216
+ test_random
217
+ ...
218
+ """
219
+ print("test_%s" % name)
220
+ Test.__dict__["test_%s" % name](self)
221
+
222
+ #################################################################
223
+ # The tests
224
+ #################################################################
225
+ def random(self, seconds=0):
226
+ """
227
+ Perform random tests for a given number of seconds, or
228
+ indefinitely if seconds is not specified.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: from sage.modular.modsym.tests import Test
233
+ sage: Test().random(1)
234
+ test_random
235
+ ...
236
+ """
237
+ self.test("random", seconds)
238
+
239
+ def test(self, name, seconds=0):
240
+ """
241
+ Repeatedly run 'test_name', where name is passed as an
242
+ argument. If seconds is nonzero, run for that many seconds. If
243
+ seconds is 0, run indefinitely.
244
+
245
+ EXAMPLES::
246
+
247
+ sage: from sage.modular.modsym.tests import Test
248
+ sage: Test().test('cs_dimension',seconds=1)
249
+ test_cs_dimension
250
+ ...
251
+ sage: Test().test('csnew_dimension',seconds=1)
252
+ test_csnew_dimension
253
+ ...
254
+ """
255
+ seconds = float(seconds)
256
+ total = cputime()
257
+ n = 1
258
+ while seconds == 0 or cputime(total) < seconds:
259
+ s = "** test_dimension: number %s" % n
260
+ if seconds > 0:
261
+ s += " (will stop after about %s seconds)" % seconds
262
+ t = cputime()
263
+ self._do(name)
264
+ print("\ttime=%s\telapsed=%s" % (cputime(t), cputime(total)))
265
+ n += 1
266
+
267
+ def test_cs_dimension(self):
268
+ """
269
+ Compute the cuspidal subspace (this implicitly checks that the
270
+ dimension is correct using formulas).
271
+
272
+ EXAMPLES::
273
+
274
+ sage: from sage.modular.modsym.tests import Test
275
+ sage: Test().test_cs_dimension() # random
276
+ gamma0
277
+ level = 16, weight = 3, sign = -1
278
+ Modular Symbols space of dimension 0 for Gamma_0(16) of weight 3
279
+ with sign -1 over Rational Field
280
+ """
281
+ self._modular_symbols_space().cuspidal_submodule()
282
+
283
+ def test_csnew_dimension(self):
284
+ """
285
+ Compute the new cuspidal subspace and verify that the
286
+ dimension is correct using a dimension formula.
287
+
288
+ EXAMPLES::
289
+
290
+ sage: from sage.modular.modsym.tests import Test
291
+ sage: Test().test_csnew_dimension() # random
292
+ gamma0
293
+ level = 3, weight = 3, sign = 1
294
+ Modular Symbols space of dimension 0 for Gamma_0(3) of weight 3
295
+ with sign 1 over Rational Field
296
+ """
297
+ M = self._modular_symbols_space()
298
+ V = M.cuspidal_submodule().new_submodule()
299
+ d = V.dimension()
300
+ d2 = M._cuspidal_new_submodule_dimension_formula()
301
+ assert d == d2, \
302
+ "Test failed for M=\"%s\", where computed dimension is %s but formula dimension is %s." % (M, d, d2)
303
+
304
+ def test_csns_nscs(self):
305
+ """
306
+ Compute new cuspidal subspace in two ways and verify that the
307
+ results are the same.
308
+
309
+ EXAMPLES::
310
+
311
+ sage: from sage.modular.modsym.tests import Test
312
+ sage: Test().test_csns_nscs() # random
313
+ gamma0
314
+ level = 5, weight = 4, sign = 1
315
+ Modular Symbols space of dimension 3 for Gamma_0(5) of weight 4 with sign 1 over Rational Field
316
+ """
317
+ M = self._modular_symbols_space()
318
+ V1 = M.cuspidal_submodule().new_submodule()
319
+ V2 = M.new_submodule().cuspidal_submodule()
320
+ assert V1 == V2, "Test failed for M=\"%s\", where the new cuspidal and cuspidal new spaces are computed differently." % M
321
+ d = M._cuspidal_new_submodule_dimension_formula()
322
+ assert d == V1.dimension(), \
323
+ "Test failed for M=\"%s\", where computed dimension is %s but formula dimension is %s." % (
324
+ M, V1.dimension(), d)
325
+
326
+ def test_decomposition(self):
327
+ """
328
+ Compute the decomposition of a modular symbols space, and
329
+ verify that the sum of the dimensions of its components equals
330
+ the dimension of the original space.
331
+
332
+ EXAMPLES::
333
+
334
+ sage: from sage.modular.modsym.tests import Test
335
+ sage: Test().test_decomposition() # random
336
+ gamma1
337
+ level = 10, weight = 4, sign = 0
338
+ Modular Symbols space of dimension 18 for Gamma_1(10) of weight 4 with sign 0 over Rational Field
339
+ """
340
+ M = self._modular_symbols_space()
341
+ D = M.decomposition()
342
+ assert M.dimension() == sum([A.dimension() for A in D])
343
+
344
+ def test_dimension(self):
345
+ """
346
+ Compute the dimension of a modular symbols space.
347
+
348
+ EXAMPLES::
349
+
350
+ sage: from sage.modular.modsym.tests import Test
351
+ sage: Test().test_dimension() # random
352
+ gamma1
353
+ level = 14, weight = 2, sign = -1
354
+ Modular Symbols space of dimension 1 for Gamma_1(14) of weight 2 with sign -1 over Rational Field
355
+ """
356
+ self._modular_symbols_space().dimension()
357
+
358
+ def test_random(self):
359
+ """
360
+ Do a random test from all the possible tests.
361
+
362
+ EXAMPLES::
363
+
364
+ sage: from sage.modular.modsym.tests import Test
365
+ sage: Test().test_random() # random
366
+ Doing random test test_csnew_dimension
367
+ character
368
+ level = 18, weight = 4, sign = -1
369
+ Modular Symbols space of dimension 0 and level 18, weight 4, character [1, -1], sign -1, over Rational Field
370
+ """
371
+ tests = [a for a in Test.__dict__
372
+ if a[:5] == "test_" and a != "test_random"]
373
+ name = random.choice(tests)
374
+ print("Doing random test %s" % name)
375
+ Test.__dict__[name](self)