passagemath-schemes 10.5.44__cp313-cp313-musllinux_1_2_aarch64.whl → 10.6.42__cp313-cp313-musllinux_1_2_aarch64.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 (164) hide show
  1. passagemath_schemes/__init__.py +3 -0
  2. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA +41 -41
  3. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA.bak +42 -42
  4. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/RECORD +158 -139
  5. passagemath_schemes-10.6.42.dist-info/top_level.txt +3 -0
  6. passagemath_schemes.libs/{libflint-7dd7ad94.so.19.0.0 → libflint-edf7fb90.so.22.0.0} +0 -0
  7. passagemath_schemes.libs/{libgcc_s-69c45f16.so.1 → libgcc_s-2d945d6c.so.1} +0 -0
  8. passagemath_schemes.libs/{libgmp-8e78bd9b.so.10.5.0 → libgmp-28992bcb.so.10.5.0} +0 -0
  9. passagemath_schemes.libs/{libgmpxx-e6de26f1.so.4.7.0 → libgmpxx-fecb01a9.so.4.7.0} +0 -0
  10. passagemath_schemes.libs/{libmpfr-5ff10580.so.6.2.1 → libmpfr-1fc8ea36.so.6.2.2} +0 -0
  11. passagemath_schemes.libs/{libstdc++-1f1a71be.so.6.0.33 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
  12. sage/all__sagemath_schemes.py +3 -2
  13. sage/databases/all__sagemath_schemes.py +0 -10
  14. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +4 -4
  15. sage/dynamics/arithmetic_dynamics/generic_ds.py +3 -3
  16. sage/dynamics/arithmetic_dynamics/projective_ds.py +7 -7
  17. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-313-aarch64-linux-musl.so +0 -0
  18. sage/dynamics/arithmetic_dynamics/wehlerK3.py +18 -18
  19. sage/lfunctions/zero_sums.cpython-313-aarch64-linux-musl.so +0 -0
  20. sage/modular/abvar/abvar.py +12 -11
  21. sage/modular/abvar/constructor.py +3 -3
  22. sage/modular/abvar/cuspidal_subgroup.py +5 -6
  23. sage/modular/abvar/finite_subgroup.py +20 -18
  24. sage/modular/abvar/homology.py +1 -2
  25. sage/modular/abvar/homspace.py +1 -1
  26. sage/modular/abvar/lseries.py +3 -3
  27. sage/modular/abvar/morphism.py +1 -1
  28. sage/modular/abvar/torsion_point.py +1 -1
  29. sage/modular/abvar/torsion_subgroup.py +1 -1
  30. sage/modular/arithgroup/arithgroup_element.cpython-313-aarch64-linux-musl.so +0 -0
  31. sage/modular/arithgroup/arithgroup_perm.py +16 -16
  32. sage/modular/arithgroup/congroup.cpython-313-aarch64-linux-musl.so +0 -0
  33. sage/modular/arithgroup/congroup_gamma0.py +2 -2
  34. sage/modular/arithgroup/congroup_gamma1.py +4 -4
  35. sage/modular/arithgroup/congroup_gammaH.py +2 -2
  36. sage/modular/arithgroup/congroup_generic.py +2 -3
  37. sage/modular/arithgroup/congroup_sl2z.py +3 -3
  38. sage/modular/arithgroup/farey_symbol.cpython-313-aarch64-linux-musl.so +0 -0
  39. sage/modular/arithgroup/farey_symbol.pyx +1 -2
  40. sage/modular/btquotients/btquotient.py +4 -5
  41. sage/modular/btquotients/pautomorphicform.py +2 -2
  42. sage/modular/cusps.py +6 -4
  43. sage/modular/cusps_nf.py +7 -8
  44. sage/modular/dirichlet.py +34 -43
  45. sage/modular/drinfeld_modform/element.py +4 -4
  46. sage/modular/drinfeld_modform/ring.py +12 -12
  47. sage/modular/drinfeld_modform/tutorial.py +1 -1
  48. sage/modular/hecke/algebra.py +7 -5
  49. sage/modular/hecke/ambient_module.py +2 -2
  50. sage/modular/hecke/element.py +7 -2
  51. sage/modular/hecke/module.py +9 -9
  52. sage/modular/hecke/submodule.py +6 -8
  53. sage/modular/hypergeometric_misc.cpython-313-aarch64-linux-musl.so +0 -0
  54. sage/modular/hypergeometric_misc.pyx +3 -2
  55. sage/modular/hypergeometric_motive.py +2 -2
  56. sage/modular/local_comp/local_comp.py +19 -11
  57. sage/modular/local_comp/type_space.py +10 -8
  58. sage/modular/modform/ambient.py +4 -3
  59. sage/modular/modform/cuspidal_submodule.py +2 -2
  60. sage/modular/modform/element.py +72 -72
  61. sage/modular/modform/half_integral.py +1 -1
  62. sage/modular/modform/l_series_gross_zagier.py +3 -0
  63. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-313-aarch64-linux-musl.so +0 -0
  64. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +5 -2
  65. sage/modular/modform/ring.py +10 -12
  66. sage/modular/modform/space.py +18 -21
  67. sage/modular/modform/weight1.py +1 -2
  68. sage/modular/modform_hecketriangle/abstract_ring.py +7 -14
  69. sage/modular/modform_hecketriangle/abstract_space.py +63 -66
  70. sage/modular/modform_hecketriangle/graded_ring_element.py +11 -12
  71. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +82 -84
  72. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +2 -2
  73. sage/modular/modform_hecketriangle/readme.py +9 -11
  74. sage/modular/modform_hecketriangle/series_constructor.py +10 -18
  75. sage/modular/modform_hecketriangle/space.py +29 -30
  76. sage/modular/modform_hecketriangle/subspace.py +9 -7
  77. sage/modular/modsym/ambient.py +13 -20
  78. sage/modular/modsym/boundary.py +2 -2
  79. sage/modular/modsym/manin_symbol.cpython-313-aarch64-linux-musl.so +0 -0
  80. sage/modular/modsym/manin_symbol_list.py +3 -7
  81. sage/modular/modsym/relation_matrix_pyx.cpython-313-aarch64-linux-musl.so +0 -0
  82. sage/modular/modsym/space.py +10 -22
  83. sage/modular/modsym/subspace.py +5 -7
  84. sage/modular/multiple_zeta.py +11 -13
  85. sage/modular/multiple_zeta_F_algebra.py +4 -6
  86. sage/modular/overconvergent/genus0.py +5 -4
  87. sage/modular/overconvergent/hecke_series.py +2 -2
  88. sage/modular/pollack_stevens/distributions.py +2 -2
  89. sage/modular/pollack_stevens/fund_domain.py +26 -29
  90. sage/modular/pollack_stevens/manin_map.py +15 -10
  91. sage/modular/pollack_stevens/modsym.py +18 -18
  92. sage/modular/quasimodform/element.py +10 -10
  93. sage/modular/quasimodform/ring.py +22 -22
  94. sage/modular/ssmod/ssmod.py +5 -12
  95. sage/rings/polynomial/binary_form_reduce.py +1 -1
  96. sage/schemes/curves/affine_curve.py +4 -4
  97. sage/schemes/curves/plane_curve_arrangement.py +28 -24
  98. sage/schemes/elliptic_curves/BSD.py +1 -1
  99. sage/schemes/elliptic_curves/addition_formulas_ring.py +4 -0
  100. sage/schemes/elliptic_curves/cm.py +1 -1
  101. sage/schemes/elliptic_curves/constructor.py +3 -3
  102. sage/schemes/elliptic_curves/ell_egros.py +1 -1
  103. sage/schemes/elliptic_curves/ell_field.py +57 -46
  104. sage/schemes/elliptic_curves/ell_finite_field.py +138 -26
  105. sage/schemes/elliptic_curves/ell_local_data.py +9 -9
  106. sage/schemes/elliptic_curves/ell_number_field.py +25 -24
  107. sage/schemes/elliptic_curves/ell_point.py +21 -22
  108. sage/schemes/elliptic_curves/ell_rational_field.py +38 -28
  109. sage/schemes/elliptic_curves/formal_group.py +1 -1
  110. sage/schemes/elliptic_curves/heegner.py +11 -8
  111. sage/schemes/elliptic_curves/height.py +26 -23
  112. sage/schemes/elliptic_curves/hom.py +2 -1
  113. sage/schemes/elliptic_curves/hom_composite.py +11 -11
  114. sage/schemes/elliptic_curves/hom_frobenius.py +8 -8
  115. sage/schemes/elliptic_curves/hom_sum.py +7 -1
  116. sage/schemes/elliptic_curves/hom_velusqrt.py +13 -7
  117. sage/schemes/elliptic_curves/homset.py +2 -2
  118. sage/schemes/elliptic_curves/isogeny_small_degree.py +1 -1
  119. sage/schemes/elliptic_curves/mod_poly.py +12 -5
  120. sage/schemes/elliptic_curves/mod_sym_num.cpython-313-aarch64-linux-musl.so +0 -0
  121. sage/schemes/elliptic_curves/padic_lseries.py +25 -13
  122. sage/schemes/elliptic_curves/padics.py +71 -63
  123. sage/schemes/elliptic_curves/period_lattice.py +78 -27
  124. sage/schemes/elliptic_curves/period_lattice_region.cpython-313-aarch64-linux-musl.so +0 -0
  125. sage/schemes/elliptic_curves/sha_tate.py +1 -1
  126. sage/schemes/elliptic_curves/weierstrass_morphism.py +2 -2
  127. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +1 -1
  128. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +1 -1
  129. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +10 -20
  130. sage/schemes/jacobians/abstract_jacobian.py +1 -1
  131. sage/schemes/plane_conics/con_field.py +42 -42
  132. sage/schemes/plane_conics/con_rational_field.py +1 -1
  133. sage/schemes/riemann_surfaces/riemann_surface.py +8 -8
  134. sage_wheels/share/cremona/cremona_mini.db +0 -0
  135. sage_wheels/share/ellcurves/rank0 +30427 -0
  136. sage_wheels/share/ellcurves/rank1 +31871 -0
  137. sage_wheels/share/ellcurves/rank10 +6 -0
  138. sage_wheels/share/ellcurves/rank11 +6 -0
  139. sage_wheels/share/ellcurves/rank12 +1 -0
  140. sage_wheels/share/ellcurves/rank14 +1 -0
  141. sage_wheels/share/ellcurves/rank15 +1 -0
  142. sage_wheels/share/ellcurves/rank17 +1 -0
  143. sage_wheels/share/ellcurves/rank19 +1 -0
  144. sage_wheels/share/ellcurves/rank2 +2388 -0
  145. sage_wheels/share/ellcurves/rank20 +1 -0
  146. sage_wheels/share/ellcurves/rank21 +1 -0
  147. sage_wheels/share/ellcurves/rank22 +1 -0
  148. sage_wheels/share/ellcurves/rank23 +1 -0
  149. sage_wheels/share/ellcurves/rank24 +1 -0
  150. sage_wheels/share/ellcurves/rank28 +1 -0
  151. sage_wheels/share/ellcurves/rank3 +836 -0
  152. sage_wheels/share/ellcurves/rank4 +10 -0
  153. sage_wheels/share/ellcurves/rank5 +5 -0
  154. sage_wheels/share/ellcurves/rank6 +5 -0
  155. sage_wheels/share/ellcurves/rank7 +5 -0
  156. sage_wheels/share/ellcurves/rank8 +6 -0
  157. sage_wheels/share/ellcurves/rank9 +7 -0
  158. passagemath_schemes-10.5.44.dist-info/top_level.txt +0 -2
  159. sage/databases/db_modular_polynomials.py +0 -250
  160. sage/databases/stein_watkins.py +0 -363
  161. sage/modular/modsym/p1list.cpython-313-aarch64-linux-musl.so +0 -0
  162. sage/modular/modsym/p1list.pxd +0 -29
  163. sage/modular/modsym/p1list.pyx +0 -1372
  164. {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/WHEEL +0 -0
@@ -0,0 +1,10 @@
1
+ 234446 a 1 [1,-1,0,-79,289] 4 1
2
+ 545723 a 1 [0,0,1,-7,36] 4 1
3
+ 842596 a 1 [0,0,0,-169,841] 4 1
4
+ 926584 a 1 [0,0,0,-127,610] 4 1
5
+ 1099496 a 1 [0,0,0,-172,820] 4 1
6
+ 1109716 a 1 [0,0,0,-64,169] 4 1
7
+ 1129211 a 1 [0,0,1,-19,60] 4 1
8
+ 1142158 a 1 [1,-1,0,-1,73] 4 1
9
+ 1162928 a 1 [0,0,0,-259,2194] 4 1
10
+ 1175648 a 1 [0,0,0,-316,2080] 4 1
@@ -0,0 +1,5 @@
1
+ 19047851 a 1 [0,0,1,-79,342] 5 1
2
+ 20384311 a 1 [1,0,0,-22,219] 5 1
3
+ 22966597 a 1 [0,0,1,-247,1476] 5 1
4
+ 34672310 a 1 [1,-1,0,-415,3481] 5 1
5
+ 37396136 a 1 [0,0,0,-532,4420] 5 1
@@ -0,0 +1,5 @@
1
+ 5187563742 a 1 [1,1,0,-2582,48720] 6 1
2
+ 5258110041 a 1 [0,0,1,-7077,235516] 6 1
3
+ 5739520802 a 1 [1,-1,0,-2326,43456] 6 1
4
+ 6601024978 a 1 [1,-1,0,-16249,799549] 6 1
5
+ 6663562874 a 1 [1,-1,1,-63147,6081915] 6 1
@@ -0,0 +1,5 @@
1
+ 382623908456 a 1 [0,0,0,-10012,346900] 7 1
2
+ 536670340706 a 1 [1,0,1,-14733,694232] 7 1
3
+ 814434447535 a 1 [0,0,1,-36673,2704878] 7 1
4
+ 858426129202 a 1 [1,-1,0,-92656,10865908] 7 1
5
+ 896913586322 a 1 [1,-1,0,-18664,958204] 7 1
@@ -0,0 +1,6 @@
1
+ 249649566346838 a 1 [1,-1,0,-106384,13075804] 8 1
2
+ 292246301470558 a 1 [1,-1,0,-222751,40537273] 8 1
3
+ 314214346667560 a 1 [0,0,0,-481663,128212738] 8 1
4
+ 314658846776578 a 1 [1,-1,0,-71899,5522449] 8 1
5
+ 315734078239402 a 1 [1,-1,0,-124294,14418784] 8 1
6
+ 457532830151317 a 1 [0,0,1,-23737,960366] 8 1
@@ -0,0 +1,7 @@
1
+ 32107342006814614 a 1 [1,-1,0,-135004,97151644] 9 1
2
+ 43537345103385386 a 1 [1,-1,0,-613069,98885089] 9 1
3
+ 62986816173592807 a 1 [0,0,1,-3835819,2889890730] 9 1
4
+ 72070075910145406 a 1 [1,0,1,-1493028,701820182] 9 1
5
+ 77211251506212554 a 1 [1,0,1,-1076185,496031340] 9 1
6
+ 484154179417645171 a 1 [0,1,1,-3529920,2567473020] 9 1
7
+ 9612838979769443646330 a 1 [1,-1,1,-1608154463,25555312501831] 9 1
@@ -1,2 +0,0 @@
1
-
2
- sage
@@ -1,250 +0,0 @@
1
- # sage_setup: distribution = sagemath-schemes
2
- """
3
- Database of modular polynomials
4
-
5
- This module gives access to the database of modular polynomials. To use the
6
- database, you need to install the optional :ref:`database_kohel
7
- <spkg_database_kohel>` package by the Sage command ::
8
-
9
- sage -i database_kohel
10
-
11
- EXAMPLES::
12
-
13
- sage: # optional - database_kohel
14
- sage: DBMP = ClassicalModularPolynomialDatabase()
15
- sage: f = DBMP[29]
16
- sage: f.degree()
17
- 58
18
- sage: f.coefficient([28,28])
19
- 400152899204646997840260839128
20
-
21
- AUTHORS:
22
-
23
- - David Kohel (2006-08-04): initial version
24
- """
25
- # ****************************************************************************
26
- # Copyright (C) 2006 William Stein <wstein@gmail.com>
27
- # Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu.au>
28
- # Copyright (C) 2016 Vincent Delecroix <vincent.delecroix@labri.fr>
29
- #
30
- # Distributed under the terms of the GNU General Public License (GPL)
31
- # as published by the Free Software Foundation; either version 2 of
32
- # the License, or (at your option) any later version.
33
- # https://www.gnu.org/licenses/
34
- # ****************************************************************************
35
- import bz2
36
- import os
37
- from sage.cpython.string import bytes_to_str
38
-
39
-
40
- def _dbz_to_string(name):
41
- r"""
42
- TESTS::
43
-
44
- sage: # optional - database_kohel
45
- sage: from sage.databases.db_modular_polynomials import _dbz_to_string
46
- sage: _dbz_to_string('PolMod/Atk/pol.002.dbz')
47
- '3 0 1 \n2 1 -1 \n2 0 744 \n1 1 -1 \n1 0 184512 \n0 2 1 \n0 1 7256 \n0 0 15252992 \n'
48
- sage: _dbz_to_string('PolMod/Cls/pol.001.dbz')
49
- '1 0 1 \n'
50
- sage: _dbz_to_string('PolMod/Eta/pol.002.dbz')
51
- '3 0 1 \n2 0 48 \n1 1 -1 \n1 0 768 \n0 0 4096 \n'
52
- sage: _dbz_to_string('PolMod/EtaCrr/crr.02.002.dbz')
53
- '2 1 1 \n2 0 -48 \n1 1 2304 \n0 2 -4096 \n0 1 196608 \n'
54
- sage: _dbz_to_string('PolHeeg/Cls/0000001-0005000/pol.0000003.dbz')
55
- '0\n1\n'
56
- """
57
- from sage.env import SAGE_SHARE
58
- dblocation = os.path.join(SAGE_SHARE, 'kohel')
59
- filename = os.path.join(dblocation, name)
60
- try:
61
- with open(filename, 'rb') as f:
62
- data = bz2.decompress(f.read())
63
- except OSError:
64
- raise ValueError('file not found in the Kohel database')
65
- return bytes_to_str(data)
66
-
67
-
68
- def _dbz_to_integer_list(name):
69
- r"""
70
- TESTS::
71
-
72
- sage: # optional - database_kohel
73
- sage: from sage.databases.db_modular_polynomials import _dbz_to_integer_list
74
- sage: _dbz_to_integer_list('PolMod/Atk/pol.002.dbz')
75
- [[3, 0, 1],
76
- [2, 1, -1],
77
- [2, 0, 744],
78
- [1, 1, -1],
79
- [1, 0, 184512],
80
- [0, 2, 1],
81
- [0, 1, 7256],
82
- [0, 0, 15252992]]
83
- sage: _dbz_to_integer_list('PolMod/Cls/pol.001.dbz')
84
- [[1, 0, 1]]
85
- sage: _dbz_to_integer_list('PolMod/Eta/pol.002.dbz')
86
- [[3, 0, 1], [2, 0, 48], [1, 1, -1], [1, 0, 768], [0, 0, 4096]]
87
- """
88
- from sage.rings.integer import Integer
89
- data = _dbz_to_string(name)
90
- return [[Integer(v) for v in row.strip().split(" ")]
91
- for row in data.split("\n")[:-1]]
92
-
93
-
94
- def _dbz_to_integers(name):
95
- r"""
96
- TESTS::
97
-
98
- sage: from sage.databases.db_modular_polynomials import _dbz_to_integers
99
- sage: _dbz_to_integers('PolHeeg/Cls/0000001-0005000/pol.0000003.dbz') # optional - database_kohel
100
- [0, 1]
101
- """
102
- from sage.rings.integer import Integer
103
- return [Integer(i) for i in _dbz_to_string(name).split()]
104
-
105
-
106
- class ModularPolynomialDatabase:
107
- def _dbpath(self, level):
108
- r"""
109
- TESTS::
110
-
111
- sage: C = ClassicalModularPolynomialDatabase()
112
- sage: C._dbpath(3)
113
- 'PolMod/Cls/pol.003.dbz'
114
- sage: C._dbpath(8)
115
- 'PolMod/Cls/pol.008.dbz'
116
- """
117
- return "PolMod/%s/pol.%03d.dbz" % (self.model, level)
118
-
119
- def __repr__(self):
120
- r"""
121
- EXAMPLES::
122
-
123
- sage: ClassicalModularPolynomialDatabase()
124
- Classical modular polynomial database
125
-
126
- sage: DedekindEtaModularPolynomialDatabase()
127
- Dedekind eta modular polynomial database
128
- sage: DedekindEtaModularPolynomialDatabase()
129
- Dedekind eta modular polynomial database
130
-
131
- sage: AtkinModularPolynomialDatabase()
132
- Atkin modular polynomial database
133
- """
134
- if self.model.startswith("Cls"):
135
- head = "Classical"
136
- elif self.model.startswith("Atk"):
137
- head = "Atkin"
138
- elif self.model.startswith("Eta"):
139
- head = "Dedekind eta"
140
-
141
- if self.model.endswith("Crr"):
142
- poly = "correspondence"
143
- else:
144
- poly = "polynomial"
145
-
146
- return "%s modular %s database" % (head, poly)
147
-
148
- def __getitem__(self, level):
149
- """
150
- Return the modular polynomial of given level, or an error if
151
- there is no such polynomial in the database.
152
-
153
- EXAMPLES::
154
-
155
- sage: # optional - database_kohel
156
- sage: DBMP = ClassicalModularPolynomialDatabase()
157
- sage: f = DBMP[29]
158
- sage: f.degree()
159
- 58
160
- sage: f.coefficient([28,28])
161
- 400152899204646997840260839128
162
- sage: DBMP[50]
163
- Traceback (most recent call last):
164
- ...
165
- ValueError: file not found in the Kohel database
166
- """
167
- from sage.rings.integer import Integer
168
- from sage.rings.integer_ring import IntegerRing
169
- from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
170
-
171
- if self.model in ("Atk", "Eta"):
172
- level = Integer(level)
173
- if not level.is_prime():
174
- raise TypeError("Argument level (= %s) must be prime." % level)
175
- elif self.model in ("AtkCrr", "EtaCrr"):
176
- N = Integer(level[0])
177
- if N not in (2, 3, 5, 7, 13):
178
- raise TypeError("Argument level (= %s) must be prime." % N)
179
- modpol = self._dbpath(level)
180
- coeff_list = _dbz_to_integer_list(modpol)
181
- if self.model == "Cls":
182
- P = PolynomialRing(IntegerRing(), 2, "j")
183
- else:
184
- P = PolynomialRing(IntegerRing(), 2, "x,j")
185
- poly = {}
186
- if self.model == "Cls":
187
- if level == 1:
188
- return P({(1, 0): 1, (0, 1): -1})
189
- for cff in coeff_list:
190
- i = cff[0]
191
- j = cff[1]
192
- poly[(i, j)] = Integer(cff[2])
193
- if i != j:
194
- poly[(j, i)] = Integer(cff[2])
195
- else:
196
- for cff in coeff_list:
197
- poly[(cff[0], cff[1])] = Integer(cff[2])
198
- return P(poly)
199
-
200
-
201
- class ModularCorrespondenceDatabase(ModularPolynomialDatabase):
202
- def _dbpath(self, level):
203
- r"""
204
- TESTS::
205
-
206
- sage: DB = DedekindEtaModularCorrespondenceDatabase()
207
- sage: DB._dbpath((2,4))
208
- 'PolMod/EtaCrr/crr.02.004.dbz'
209
- """
210
- (Nlevel, crrlevel) = level
211
- return "PolMod/%s/crr.%02d.%03d.dbz" % (self.model, Nlevel, crrlevel)
212
-
213
-
214
- class ClassicalModularPolynomialDatabase(ModularPolynomialDatabase):
215
- """
216
- The database of classical modular polynomials, i.e. the polynomials
217
- Phi_N(X,Y) relating the j-functions j(q) and j(q^N).
218
- """
219
- model = "Cls"
220
-
221
-
222
- class DedekindEtaModularPolynomialDatabase(ModularPolynomialDatabase):
223
- """
224
- The database of modular polynomials Phi_N(X,Y) relating a quotient
225
- of Dedekind eta functions, well-defined on X_0(N), relating x(q) and
226
- the j-function j(q).
227
- """
228
- model = "Eta"
229
-
230
-
231
- class DedekindEtaModularCorrespondenceDatabase(ModularCorrespondenceDatabase):
232
- r"""
233
- The database of modular correspondences in `X_0(p) \times X_0(p)`, where
234
- the model of the curves `X_0(p) = \Bold{P}^1` are specified by quotients of
235
- Dedekind's eta function.
236
- """
237
- model = "EtaCrr"
238
-
239
-
240
- class AtkinModularPolynomialDatabase(ModularPolynomialDatabase):
241
- """
242
- The database of modular polynomials Phi(x,j) for `X_0(p)`, where
243
- x is a function on invariant under the Atkin-Lehner invariant,
244
- with pole of minimal order at infinity.
245
- """
246
- model = "Atk"
247
-
248
-
249
- class AtkinModularCorrespondenceDatabase(ModularCorrespondenceDatabase):
250
- model = "AtkCrr"
@@ -1,363 +0,0 @@
1
- # sage_setup: distribution = sagemath-schemes
2
- r"""
3
- The Stein-Watkins table of elliptic curves
4
-
5
- Sage gives access to the Stein-Watkins table of elliptic curves, via the
6
- optional :ref:`database_stein_watkins <spkg_database_stein_watkins>` package
7
- that you must install. This is a huge database of elliptic curves. You can
8
- install the database (a 2.6GB package) with the command ::
9
-
10
- sage -i database_stein_watkins
11
-
12
- You can also automatically download a small version, which takes much less
13
- time, via the optional :ref:`database_stein_watkins_mini <spkg_database_stein_watkins_mini>`
14
- package using the command ::
15
-
16
- sage -i database_stein_watkins_mini
17
-
18
- This database covers a wide range of conductors, but unlike the
19
- :mod:`Cremona database <sage.databases.cremona>`, this database need not list
20
- all curves of a given conductor. It lists the curves whose coefficients are not
21
- "too large" (see [SW2002]_).
22
-
23
-
24
- - The command ``SteinWatkinsAllData(n)`` returns an iterator over the curves
25
- in the `n`-th Stein-Watkins table, which contains elliptic curves of
26
- conductor between `n10^5` and `(n+1)10^5`. Here `n` can be between 0 and
27
- 999, inclusive.
28
-
29
- - The command ``SteinWatkinsPrimeData(n)`` returns an iterator over the curves
30
- in the `n`-th Stein-Watkins prime table, which contains prime conductor
31
- elliptic curves of conductor between `n10^8` and `(n+1)10^8`. Here `n`
32
- varies between 0 and 99, inclusive.
33
-
34
- EXAMPLES: We obtain the first table of elliptic curves.
35
-
36
- ::
37
-
38
- sage: d = SteinWatkinsAllData(0)
39
- sage: d
40
- Stein-Watkins Database a.0 Iterator
41
-
42
- We type ``next(d)`` to get each isogeny class of
43
- curves from ``d``::
44
-
45
- sage: # optional - database_stein_watkins
46
- sage: C = next(d)
47
- sage: C
48
- Stein-Watkins isogeny class of conductor 11
49
- sage: next(d)
50
- Stein-Watkins isogeny class of conductor 14
51
- sage: next(d)
52
- Stein-Watkins isogeny class of conductor 15
53
-
54
- An isogeny class has a number of attributes that give data about
55
- the isogeny class, such as the rank, equations of curves,
56
- conductor, leading coefficient of `L`-function, etc.
57
-
58
- ::
59
-
60
- sage: # optional - database_stein_watkins
61
- sage: C.data
62
- ['11', '[11]', '0', '0.253842', '25', '+*1']
63
- sage: C.curves
64
- [[[0, -1, 1, 0, 0], '(1)', '1', '5'],
65
- [[0, -1, 1, -10, -20], '(5)', '1', '5'],
66
- [[0, -1, 1, -7820, -263580], '(1)', '1', '1']]
67
- sage: C.conductor
68
- 11
69
- sage: C.leading_coefficient
70
- '0.253842'
71
- sage: C.modular_degree
72
- '+*1'
73
- sage: C.rank
74
- 0
75
- sage: C.isogeny_number
76
- '25'
77
-
78
- If we were to continue typing ``next(d)`` we would
79
- iterate over all curves in the Stein-Watkins database up to
80
- conductor `10^5`. We could also type ``for C in d:
81
- ...``
82
-
83
- To access the data file starting at `10^5` do the
84
- following::
85
-
86
- sage: d = SteinWatkinsAllData(1)
87
- sage: C = next(d) # optional - database_stein_watkins
88
- sage: C # optional - database_stein_watkins
89
- Stein-Watkins isogeny class of conductor 100002
90
- sage: C.curves # optional - database_stein_watkins
91
- [[[1, 1, 0, 112, 0], '(8,1,2,1)', 'X', '2'],
92
- [[1, 1, 0, -448, -560], '[4,2,1,2]', 'X', '2']]
93
-
94
- Next we access the prime-conductor data::
95
-
96
- sage: d = SteinWatkinsPrimeData(0)
97
- sage: C = next(d) # optional - database_stein_watkins
98
- sage: C # optional - database_stein_watkins
99
- Stein-Watkins isogeny class of conductor 11
100
-
101
- Each call ``next(d)`` gives another elliptic curve of
102
- prime conductor::
103
-
104
- sage: # optional - database_stein_watkins
105
- sage: C = next(d)
106
- sage: C
107
- Stein-Watkins isogeny class of conductor 17
108
- sage: C.curves
109
- [[[1, -1, 1, -1, 0], '[1]', '1', '4'],
110
- [[1, -1, 1, -6, -4], '[2]', '1', '2x'],
111
- [[1, -1, 1, -1, -14], '(4)', '1', '4'],
112
- [[1, -1, 1, -91, -310], '[1]', '1', '2']]
113
- sage: C = next(d)
114
- sage: C
115
- Stein-Watkins isogeny class of conductor 19
116
-
117
- REFERENCE:
118
-
119
- - [SW2002]_
120
- """
121
-
122
- # ****************************************************************************
123
- #
124
- # Sage: Copyright (C) 2005 William Stein <wstein@gmail.com>
125
- #
126
- # Distributed under the terms of the GNU General Public License (GPL)
127
- #
128
- # This code is distributed in the hope that it will be useful,
129
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
130
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
131
- # General Public License for more details.
132
- #
133
- # The full text of the GPL is available at:
134
- #
135
- # http://www.gnu.org/licenses/
136
- # ****************************************************************************
137
-
138
- import bz2
139
- import os
140
-
141
- from sage.env import SAGE_SHARE
142
-
143
-
144
- class SteinWatkinsIsogenyClass:
145
- def __init__(self, conductor):
146
- self.conductor = conductor
147
-
148
- def __repr__(self):
149
- return "Stein-Watkins isogeny class of conductor %s" % self.conductor
150
-
151
- def __len__(self):
152
- try:
153
- return len(self.curves)
154
- except AttributeError:
155
- return 0
156
-
157
- def __iter__(self):
158
- try:
159
- yield from self.curves
160
- except AttributeError:
161
- return
162
-
163
-
164
- def _lines(s):
165
- while True:
166
- i = s.find("\n")
167
- if i == -1:
168
- yield ""
169
- return
170
- line = s[:i]
171
- s = s[i + 1:]
172
- yield line
173
-
174
-
175
- class SteinWatkinsAllData:
176
- """
177
- Class for iterating through one of the Stein-Watkins database files
178
- for all conductors.
179
- """
180
- def __init__(self, num):
181
- num = int(num)
182
- self.num = num
183
- if num < 0:
184
- raise RuntimeError("num (=%s) must be a nonnegative integer" % num)
185
- name = str(num)
186
- name = '0' * (3 - len(name)) + name
187
- self._file = os.path.join(SAGE_SHARE, 'stein_watkins', 'a.%s.bz2' % name)
188
- self._iter = iter(self)
189
-
190
- def __repr__(self):
191
- """
192
- EXAMPLES::
193
-
194
- sage: d = SteinWatkinsAllData(1)
195
- sage: d
196
- Stein-Watkins Database a.1 Iterator
197
- """
198
- return "Stein-Watkins Database a.%s Iterator" % self.num
199
-
200
- def __iter__(self):
201
- """
202
- EXAMPLES::
203
-
204
- sage: d = SteinWatkinsAllData(0)
205
- sage: d = d[10:20] # optional - database_stein_watkins; long time
206
- sage: for C in d: # optional - database_stein_watkins; long time
207
- ....: print(C)
208
- Stein-Watkins isogeny class of conductor 11
209
- Stein-Watkins isogeny class of conductor 14
210
- Stein-Watkins isogeny class of conductor 15
211
- Stein-Watkins isogeny class of conductor 17
212
- Stein-Watkins isogeny class of conductor 19
213
- Stein-Watkins isogeny class of conductor 20
214
- """
215
- try:
216
- file = bz2.open(self._file, 'rt', encoding='utf-8')
217
- except OSError:
218
- raise OSError("The Stein-Watkins data file %s must be installed." % self._file)
219
- C = None
220
- for L in file:
221
- if len(L) == 0:
222
- continue
223
- if L[0] != '[': # new curve
224
- if C is not None:
225
- yield C
226
- x = L.split()
227
- N = int(x[0])
228
- C = SteinWatkinsIsogenyClass(N)
229
- C.rank = int(x[2])
230
- C.leading_coefficient = x[3]
231
- C.isogeny_number = x[4]
232
- C.modular_degree = x[5]
233
- C.curves = []
234
- C.data = x
235
- else:
236
- w = L.split()
237
- C.curves.append([eval(w[0]), w[1], w[2], w[3]])
238
- yield C
239
-
240
- def __next__(self):
241
- return next(self._iter)
242
-
243
- next = __next__
244
-
245
- def __getitem__(self, N):
246
- """
247
- Return the curves of conductor N in this table. (Very slow!)
248
- Return all data about curves between the given levels in this
249
- database file.
250
-
251
- EXAMPLES::
252
-
253
- sage: d = SteinWatkinsAllData(0)
254
- sage: d[15:18] # optional - database_stein_watkins; long time
255
- [Stein-Watkins isogeny class of conductor 15, Stein-Watkins isogeny
256
- class of conductor 17]
257
- """
258
- X = []
259
- if isinstance(N, slice):
260
- min_level, max_level, step = N.indices(len(list(self)))
261
- for C in self:
262
- M = C.conductor
263
- if M >= min_level and M <= max_level:
264
- X.append(C)
265
- elif M > max_level:
266
- return X
267
- else:
268
- for C in self:
269
- M = C.conductor
270
- if M == N:
271
- X.append(C)
272
- elif M > N:
273
- return X
274
- return X
275
-
276
- def iter_levels(self):
277
- """
278
- Iterate through the curve classes, but grouped into lists by
279
- level.
280
-
281
- EXAMPLES::
282
-
283
- sage: d = SteinWatkinsAllData(1)
284
- sage: E = d.iter_levels()
285
- sage: next(E) # optional - database_stein_watkins
286
- [Stein-Watkins isogeny class of conductor 100002]
287
- sage: next(E) # optional - database_stein_watkins
288
- [Stein-Watkins isogeny class of conductor 100005,
289
- Stein-Watkins isogeny class of conductor 100005]
290
- sage: next(E) # optional - database_stein_watkins
291
- [Stein-Watkins isogeny class of conductor 100007]
292
- """
293
- it = iter(self)
294
- C = []
295
- N = 0
296
- while True:
297
- try:
298
- E = next(it)
299
- except StopIteration:
300
- if C:
301
- yield C
302
- return
303
- if E.conductor != N:
304
- if C:
305
- yield C
306
- C = [E]
307
- N = E.conductor
308
- else:
309
- C.append(E)
310
- yield C
311
-
312
-
313
- class SteinWatkinsPrimeData(SteinWatkinsAllData):
314
- def __init__(self, num):
315
- num = int(num)
316
- self.num = num
317
- if num < 0:
318
- raise RuntimeError("num (=%s) must be a nonnegative integer" % num)
319
- name = str(num)
320
- name = '0' * (2 - len(name)) + name
321
- self._file = os.path.join(SAGE_SHARE, 'stein_watkins', 'p.%s.bz2' % name)
322
- self._iter = iter(self)
323
-
324
- def __repr__(self):
325
- """
326
- EXAMPLES::
327
-
328
- sage: d = SteinWatkinsPrimeData(1)
329
- sage: d
330
- Stein-Watkins Prime Conductor Database p.1 Iterator
331
- """
332
- return "Stein-Watkins Prime Conductor Database p.%s Iterator" % self.num
333
-
334
-
335
- def ecdb_num_curves(max_level=200000):
336
- r"""
337
- Return a list whose `N`-th entry, for ``0 <= N <= max_level``, is the
338
- number of elliptic curves of conductor `N` in the database.
339
-
340
- EXAMPLES::
341
-
342
- sage: sage.databases.stein_watkins.ecdb_num_curves(100) # optional - database_stein_watkins
343
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 6, 8, 0, 4, 0, 3, 4, 6, 0, 0,
344
- 6, 0, 5, 4, 0, 0, 8, 0, 4, 4, 4, 3, 4, 4, 5, 4, 4, 0, 6, 1, 2, 8, 2, 0,
345
- 6, 4, 8, 2, 2, 1, 6, 4, 6, 7, 3, 0, 0, 1, 4, 6, 4, 2, 12, 1, 0, 2, 4, 0,
346
- 6, 2, 0, 12, 1, 6, 4, 1, 8, 0, 2, 1, 6, 2, 0, 0, 1, 3, 16, 4, 3, 0, 2,
347
- 0, 8, 0, 6, 11, 4]
348
- """
349
- i = 0
350
- d = SteinWatkinsAllData(i)
351
- v = [0 for _ in range(max_level + 1)]
352
- while True:
353
- try:
354
- C = next(d)
355
- except StopIteration:
356
- i += 1
357
- d = SteinWatkinsAllData(i)
358
- continue
359
- N = C.conductor
360
- if N > max_level:
361
- break
362
- v[N] += len(C.curves)
363
- return v
@@ -1,29 +0,0 @@
1
- # sage_setup: distribution = sagemath-schemes
2
-
3
-
4
- cdef class export:
5
- cdef int c_p1_normalize_int(self, int N, int u, int v,
6
- int* uu, int* vv, int* ss,
7
- int compute_s) except -1
8
-
9
- cdef int c_p1_normalize_llong(self, int N, int u, int v,
10
- int* uu, int* vv, int* ss,
11
- int compute_s) except -1
12
-
13
-
14
- cdef class P1List:
15
- cdef int __N
16
- cdef object __list, __end_hash
17
-
18
- cdef int *g
19
- cdef int *s
20
- cdef int *t # xgcd with N table.
21
-
22
- # Here we use a pointer to a function, so the if logic
23
- # for normalizing an element does not need to be used
24
- # every time the user calls the normalize function.
25
- cdef int (*_normalize)(int N, int u, int v,
26
- int* uu, int* vv, int* ss,
27
- int compute_s) except -1
28
- cpdef index(self, int u, int v)
29
- cdef index_and_scalar(self, int u, int v, int* i, int* s)