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,376 @@
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 sage.misc.timing import cputime
33
+ from sage.modular import dirichlet
34
+ from sage.modular.arithgroup.congroup_gamma0 import Gamma0_constructor
35
+ from sage.modular.arithgroup.congroup_gamma1 import Gamma1_constructor
36
+ from sage.modular.modsym import modsym
37
+
38
+
39
+ class Test:
40
+ """
41
+ Modular symbol testing class.
42
+ """
43
+ def __init__(self, levels=20, weights=4, onlyg0=False, onlyg1=False,
44
+ onlychar=False):
45
+ """
46
+ Create a modular symbol testing object.
47
+
48
+ INPUT:
49
+
50
+ - ``levels`` -- list or integer
51
+ - ``weights`` -- list or integer
52
+ - ``onlyg0`` -- boolean; if ``True`` only select Gamma0 spaces for testing
53
+ - ``onlyg1`` -- boolean; if ``True`` only select Gamma1 spaces for testing
54
+ - ``onlychar`` -- boolean; if ``True`` only selects spaces with character for testing
55
+
56
+ EXAMPLES::
57
+
58
+ sage: from sage.modular.modsym.tests import Test
59
+ sage: Test()
60
+ Modular symbols testing class
61
+ sage: T = Test(weights=[3,5,7])
62
+ sage: T.weights
63
+ [3, 5, 7]
64
+ sage: T = Test(levels=5) ; T.levels
65
+ [1, 2, 3, 4, 5]
66
+ """
67
+ if not isinstance(levels, list):
68
+ levels = list(range(1, int(levels) + 1))
69
+ if not isinstance(weights, list):
70
+ weights = list(range(2, int(weights) + 1))
71
+ self.levels = levels
72
+ self.weights = weights
73
+ if not levels:
74
+ raise RuntimeError("levels must have positive length")
75
+ if not weights:
76
+ raise RuntimeError("weights must have positive length")
77
+ self.current_space = None
78
+ self.onlyg0 = onlyg0
79
+ self.onlyg1 = onlyg1
80
+ self.onlychar = onlychar
81
+
82
+ def __repr__(self):
83
+ """
84
+ Return the string representation of ``self``.
85
+
86
+ EXAMPLES::
87
+
88
+ sage: from sage.modular.modsym.tests import Test
89
+ sage: Test().__repr__()
90
+ 'Modular symbols testing class'
91
+ """
92
+ return "Modular symbols testing class"
93
+
94
+ def _modular_symbols_space(self):
95
+ """
96
+ Generate a random space of modular symbols subject to
97
+ the conditions of ``self``.
98
+
99
+ EXAMPLES::
100
+
101
+ sage: from sage.modular.modsym.tests import Test
102
+ sage: T = Test(levels=[5],weights=[2], onlychar=True)
103
+
104
+ Note that the sign of the generated space is always arbitrary.
105
+ sage: T._modular_symbols_space()
106
+ character
107
+ level = 5, weight = 2, sign = ...
108
+ ...
109
+ """
110
+ if self.onlyg0:
111
+ which = 0
112
+ elif self.onlyg1:
113
+ which = 1
114
+ elif self.onlychar:
115
+ which = 2
116
+ else:
117
+ which = random.randrange(0, 3)
118
+ if which == 0:
119
+ print("gamma0")
120
+ M = self._modular_symbols_space_gamma0()
121
+ elif which == 1:
122
+ print("gamma1")
123
+ M = self._modular_symbols_space_gamma1()
124
+ else:
125
+ print("character")
126
+ M = self._modular_symbols_space_character()
127
+ print("\t", M)
128
+ return M
129
+
130
+ def _level_weight_sign(self):
131
+ """
132
+ Return a triple containing a random choice of level from
133
+ self.levels, weights from self.weights, and sign chosen
134
+ randomly from [1, 0, -1].
135
+
136
+ EXAMPLES::
137
+
138
+ sage: from sage.modular.modsym.tests import Test
139
+ sage: Test()._level_weight_sign() # random
140
+ level = 4, weight = 3, sign = 1
141
+ (4, 3, 1)
142
+ """
143
+ level = random.choice(self.levels)
144
+ weight = random.choice(self.weights)
145
+ sign = random.choice([-1, 0, 1])
146
+ print("level = %s, weight = %s, sign = %s" % (level, weight, sign))
147
+ return level, weight, sign
148
+
149
+ def _modular_symbols_space_gamma0(self):
150
+ """
151
+ Return a space of modular symbols for Gamma0, with level a
152
+ random choice from self.levels, weight from self.weights, and
153
+ sign chosen randomly from [1, 0, -1].
154
+
155
+ EXAMPLES::
156
+
157
+ sage: from sage.modular.modsym.tests import Test
158
+ sage: Test()._modular_symbols_space_gamma0() # random
159
+ level = 1, weight = 3, sign = 0
160
+ Modular Symbols space of dimension 0 for Gamma_0(1) of weight 3 with sign 0 over Rational Field
161
+ """
162
+ level, weight, sign = self._level_weight_sign()
163
+ M = modsym.ModularSymbols(Gamma0_constructor(level), weight, sign)
164
+ self.current_space = M
165
+ return M
166
+
167
+ def _modular_symbols_space_gamma1(self):
168
+ """
169
+ Return a space of modular symbols for Gamma1, with level a
170
+ random choice from self.levels, weight from self.weights, and
171
+ sign chosen randomly from [1, 0, -1].
172
+
173
+ EXAMPLES::
174
+
175
+ sage: from sage.modular.modsym.tests import Test
176
+ sage: Test()._modular_symbols_space_gamma1() # random
177
+ level = 3, weight = 4, sign = 0
178
+ Modular Symbols space of dimension 2 for Gamma_1(3) of weight 4 with sign 0 over Rational Field
179
+ """
180
+ level, weight, sign = self._level_weight_sign()
181
+ M = modsym.ModularSymbols(Gamma1_constructor(level), weight, sign)
182
+ self.current_space = M
183
+ return M
184
+
185
+ def _modular_symbols_space_character(self):
186
+ """
187
+ Return a random space of modular symbols for Gamma1, with
188
+ (possibly trivial) character, random sign, and weight a
189
+ random choice from self.weights.
190
+
191
+ EXAMPLES::
192
+
193
+ sage: # needs sage.rings.number_field
194
+ sage: from sage.modular.modsym.tests import Test
195
+ sage: Test()._modular_symbols_space_character() # random
196
+ level = 18, weight = 3, sign = 0
197
+ Modular Symbols space of dimension 0
198
+ and level 18, weight 3, character [1, zeta6 - 1], sign 0,
199
+ over Cyclotomic Field of order 6 and degree 2
200
+ """
201
+ level, weight, sign = self._level_weight_sign()
202
+ G = dirichlet.DirichletGroup(level)
203
+ eps = G.random_element()
204
+ M = modsym.ModularSymbols(eps, weight, sign)
205
+ self.current_space = M
206
+ return M
207
+
208
+ def _do(self, name):
209
+ """
210
+ Perform the test 'test_name', where name is specified as an
211
+ argument. This function exists to avoid a call to eval.
212
+
213
+ EXAMPLES::
214
+
215
+ sage: from sage.modular.modsym.tests import Test
216
+ sage: Test()._do("random")
217
+ test_random
218
+ ...
219
+ """
220
+ print("test_%s" % name)
221
+ Test.__dict__["test_%s" % name](self)
222
+
223
+ #################################################################
224
+ # The tests
225
+ #################################################################
226
+ def random(self, seconds=0):
227
+ """
228
+ Perform random tests for a given number of seconds, or
229
+ indefinitely if seconds is not specified.
230
+
231
+ EXAMPLES::
232
+
233
+ sage: from sage.modular.modsym.tests import Test
234
+ sage: Test().random(1)
235
+ test_random
236
+ ...
237
+ """
238
+ self.test("random", seconds)
239
+
240
+ def test(self, name, seconds=0):
241
+ """
242
+ Repeatedly run 'test_name', where name is passed as an
243
+ argument. If seconds is nonzero, run for that many seconds. If
244
+ seconds is 0, run indefinitely.
245
+
246
+ EXAMPLES::
247
+
248
+ sage: from sage.modular.modsym.tests import Test
249
+ sage: Test().test('cs_dimension',seconds=1)
250
+ test_cs_dimension
251
+ ...
252
+ sage: Test().test('csnew_dimension',seconds=1)
253
+ test_csnew_dimension
254
+ ...
255
+ """
256
+ seconds = float(seconds)
257
+ total = cputime()
258
+ n = 1
259
+ while seconds == 0 or cputime(total) < seconds:
260
+ s = "** test_dimension: number %s" % n
261
+ if seconds > 0:
262
+ s += " (will stop after about %s seconds)" % seconds
263
+ t = cputime()
264
+ self._do(name)
265
+ print("\ttime=%s\telapsed=%s" % (cputime(t), cputime(total)))
266
+ n += 1
267
+
268
+ def test_cs_dimension(self):
269
+ """
270
+ Compute the cuspidal subspace (this implicitly checks that the
271
+ dimension is correct using formulas).
272
+
273
+ EXAMPLES::
274
+
275
+ sage: from sage.modular.modsym.tests import Test
276
+ sage: Test().test_cs_dimension() # random
277
+ gamma0
278
+ level = 16, weight = 3, sign = -1
279
+ Modular Symbols space of dimension 0 for Gamma_0(16) of weight 3
280
+ with sign -1 over Rational Field
281
+ """
282
+ self._modular_symbols_space().cuspidal_submodule()
283
+
284
+ def test_csnew_dimension(self):
285
+ """
286
+ Compute the new cuspidal subspace and verify that the
287
+ dimension is correct using a dimension formula.
288
+
289
+ EXAMPLES::
290
+
291
+ sage: from sage.modular.modsym.tests import Test
292
+ sage: Test().test_csnew_dimension() # random
293
+ gamma0
294
+ level = 3, weight = 3, sign = 1
295
+ Modular Symbols space of dimension 0 for Gamma_0(3) of weight 3
296
+ with sign 1 over Rational Field
297
+ """
298
+ M = self._modular_symbols_space()
299
+ V = M.cuspidal_submodule().new_submodule()
300
+ d = V.dimension()
301
+ d2 = M._cuspidal_new_submodule_dimension_formula()
302
+ assert d == d2, \
303
+ "Test failed for M=\"%s\", where computed dimension is %s but formula dimension is %s." % (M, d, d2)
304
+
305
+ def test_csns_nscs(self):
306
+ """
307
+ Compute new cuspidal subspace in two ways and verify that the
308
+ results are the same.
309
+
310
+ EXAMPLES::
311
+
312
+ sage: from sage.modular.modsym.tests import Test
313
+ sage: Test().test_csns_nscs() # random
314
+ gamma0
315
+ level = 5, weight = 4, sign = 1
316
+ Modular Symbols space of dimension 3 for Gamma_0(5) of weight 4 with sign 1 over Rational Field
317
+ """
318
+ M = self._modular_symbols_space()
319
+ V1 = M.cuspidal_submodule().new_submodule()
320
+ V2 = M.new_submodule().cuspidal_submodule()
321
+ assert V1 == V2, "Test failed for M=\"%s\", where the new cuspidal and cuspidal new spaces are computed differently." % M
322
+ d = M._cuspidal_new_submodule_dimension_formula()
323
+ assert d == V1.dimension(), \
324
+ "Test failed for M=\"%s\", where computed dimension is %s but formula dimension is %s." % (
325
+ M, V1.dimension(), d)
326
+
327
+ def test_decomposition(self):
328
+ """
329
+ Compute the decomposition of a modular symbols space, and
330
+ verify that the sum of the dimensions of its components equals
331
+ the dimension of the original space.
332
+
333
+ EXAMPLES::
334
+
335
+ sage: from sage.modular.modsym.tests import Test
336
+ sage: Test().test_decomposition() # random
337
+ gamma1
338
+ level = 10, weight = 4, sign = 0
339
+ Modular Symbols space of dimension 18 for Gamma_1(10) of weight 4 with sign 0 over Rational Field
340
+ """
341
+ M = self._modular_symbols_space()
342
+ D = M.decomposition()
343
+ assert M.dimension() == sum([A.dimension() for A in D])
344
+
345
+ def test_dimension(self):
346
+ """
347
+ Compute the dimension of a modular symbols space.
348
+
349
+ EXAMPLES::
350
+
351
+ sage: from sage.modular.modsym.tests import Test
352
+ sage: Test().test_dimension() # random
353
+ gamma1
354
+ level = 14, weight = 2, sign = -1
355
+ Modular Symbols space of dimension 1 for Gamma_1(14) of weight 2 with sign -1 over Rational Field
356
+ """
357
+ self._modular_symbols_space().dimension()
358
+
359
+ def test_random(self):
360
+ """
361
+ Do a random test from all the possible tests.
362
+
363
+ EXAMPLES::
364
+
365
+ sage: from sage.modular.modsym.tests import Test
366
+ sage: Test().test_random() # random
367
+ Doing random test test_csnew_dimension
368
+ character
369
+ level = 18, weight = 4, sign = -1
370
+ Modular Symbols space of dimension 0 and level 18, weight 4, character [1, -1], sign -1, over Rational Field
371
+ """
372
+ tests = [a for a in Test.__dict__
373
+ if a[:5] == "test_" and a != "test_random"]
374
+ name = random.choice(tests)
375
+ print("Doing random test %s" % name)
376
+ Test.__dict__[name](self)