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.
- passagemath_schemes/__init__.py +3 -0
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA +41 -41
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/METADATA.bak +42 -42
- {passagemath_schemes-10.5.44.dist-info → passagemath_schemes-10.6.42.dist-info}/RECORD +158 -139
- passagemath_schemes-10.6.42.dist-info/top_level.txt +3 -0
- passagemath_schemes.libs/{libflint-7dd7ad94.so.19.0.0 → libflint-edf7fb90.so.22.0.0} +0 -0
- passagemath_schemes.libs/{libgcc_s-69c45f16.so.1 → libgcc_s-2d945d6c.so.1} +0 -0
- passagemath_schemes.libs/{libgmp-8e78bd9b.so.10.5.0 → libgmp-28992bcb.so.10.5.0} +0 -0
- passagemath_schemes.libs/{libgmpxx-e6de26f1.so.4.7.0 → libgmpxx-fecb01a9.so.4.7.0} +0 -0
- passagemath_schemes.libs/{libmpfr-5ff10580.so.6.2.1 → libmpfr-1fc8ea36.so.6.2.2} +0 -0
- passagemath_schemes.libs/{libstdc++-1f1a71be.so.6.0.33 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
- sage/all__sagemath_schemes.py +3 -2
- sage/databases/all__sagemath_schemes.py +0 -10
- sage/dynamics/arithmetic_dynamics/berkovich_ds.py +4 -4
- sage/dynamics/arithmetic_dynamics/generic_ds.py +3 -3
- sage/dynamics/arithmetic_dynamics/projective_ds.py +7 -7
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-313-aarch64-linux-musl.so +0 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +18 -18
- sage/lfunctions/zero_sums.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/abvar/abvar.py +12 -11
- sage/modular/abvar/constructor.py +3 -3
- sage/modular/abvar/cuspidal_subgroup.py +5 -6
- sage/modular/abvar/finite_subgroup.py +20 -18
- sage/modular/abvar/homology.py +1 -2
- sage/modular/abvar/homspace.py +1 -1
- sage/modular/abvar/lseries.py +3 -3
- sage/modular/abvar/morphism.py +1 -1
- sage/modular/abvar/torsion_point.py +1 -1
- sage/modular/abvar/torsion_subgroup.py +1 -1
- sage/modular/arithgroup/arithgroup_element.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/arithgroup_perm.py +16 -16
- sage/modular/arithgroup/congroup.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/congroup_gamma0.py +2 -2
- sage/modular/arithgroup/congroup_gamma1.py +4 -4
- sage/modular/arithgroup/congroup_gammaH.py +2 -2
- sage/modular/arithgroup/congroup_generic.py +2 -3
- sage/modular/arithgroup/congroup_sl2z.py +3 -3
- sage/modular/arithgroup/farey_symbol.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/arithgroup/farey_symbol.pyx +1 -2
- sage/modular/btquotients/btquotient.py +4 -5
- sage/modular/btquotients/pautomorphicform.py +2 -2
- sage/modular/cusps.py +6 -4
- sage/modular/cusps_nf.py +7 -8
- sage/modular/dirichlet.py +34 -43
- sage/modular/drinfeld_modform/element.py +4 -4
- sage/modular/drinfeld_modform/ring.py +12 -12
- sage/modular/drinfeld_modform/tutorial.py +1 -1
- sage/modular/hecke/algebra.py +7 -5
- sage/modular/hecke/ambient_module.py +2 -2
- sage/modular/hecke/element.py +7 -2
- sage/modular/hecke/module.py +9 -9
- sage/modular/hecke/submodule.py +6 -8
- sage/modular/hypergeometric_misc.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/hypergeometric_misc.pyx +3 -2
- sage/modular/hypergeometric_motive.py +2 -2
- sage/modular/local_comp/local_comp.py +19 -11
- sage/modular/local_comp/type_space.py +10 -8
- sage/modular/modform/ambient.py +4 -3
- sage/modular/modform/cuspidal_submodule.py +2 -2
- sage/modular/modform/element.py +72 -72
- sage/modular/modform/half_integral.py +1 -1
- sage/modular/modform/l_series_gross_zagier.py +3 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.pyx +5 -2
- sage/modular/modform/ring.py +10 -12
- sage/modular/modform/space.py +18 -21
- sage/modular/modform/weight1.py +1 -2
- sage/modular/modform_hecketriangle/abstract_ring.py +7 -14
- sage/modular/modform_hecketriangle/abstract_space.py +63 -66
- sage/modular/modform_hecketriangle/graded_ring_element.py +11 -12
- sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +82 -84
- sage/modular/modform_hecketriangle/hecke_triangle_groups.py +2 -2
- sage/modular/modform_hecketriangle/readme.py +9 -11
- sage/modular/modform_hecketriangle/series_constructor.py +10 -18
- sage/modular/modform_hecketriangle/space.py +29 -30
- sage/modular/modform_hecketriangle/subspace.py +9 -7
- sage/modular/modsym/ambient.py +13 -20
- sage/modular/modsym/boundary.py +2 -2
- sage/modular/modsym/manin_symbol.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/manin_symbol_list.py +3 -7
- sage/modular/modsym/relation_matrix_pyx.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/space.py +10 -22
- sage/modular/modsym/subspace.py +5 -7
- sage/modular/multiple_zeta.py +11 -13
- sage/modular/multiple_zeta_F_algebra.py +4 -6
- sage/modular/overconvergent/genus0.py +5 -4
- sage/modular/overconvergent/hecke_series.py +2 -2
- sage/modular/pollack_stevens/distributions.py +2 -2
- sage/modular/pollack_stevens/fund_domain.py +26 -29
- sage/modular/pollack_stevens/manin_map.py +15 -10
- sage/modular/pollack_stevens/modsym.py +18 -18
- sage/modular/quasimodform/element.py +10 -10
- sage/modular/quasimodform/ring.py +22 -22
- sage/modular/ssmod/ssmod.py +5 -12
- sage/rings/polynomial/binary_form_reduce.py +1 -1
- sage/schemes/curves/affine_curve.py +4 -4
- sage/schemes/curves/plane_curve_arrangement.py +28 -24
- sage/schemes/elliptic_curves/BSD.py +1 -1
- sage/schemes/elliptic_curves/addition_formulas_ring.py +4 -0
- sage/schemes/elliptic_curves/cm.py +1 -1
- sage/schemes/elliptic_curves/constructor.py +3 -3
- sage/schemes/elliptic_curves/ell_egros.py +1 -1
- sage/schemes/elliptic_curves/ell_field.py +57 -46
- sage/schemes/elliptic_curves/ell_finite_field.py +138 -26
- sage/schemes/elliptic_curves/ell_local_data.py +9 -9
- sage/schemes/elliptic_curves/ell_number_field.py +25 -24
- sage/schemes/elliptic_curves/ell_point.py +21 -22
- sage/schemes/elliptic_curves/ell_rational_field.py +38 -28
- sage/schemes/elliptic_curves/formal_group.py +1 -1
- sage/schemes/elliptic_curves/heegner.py +11 -8
- sage/schemes/elliptic_curves/height.py +26 -23
- sage/schemes/elliptic_curves/hom.py +2 -1
- sage/schemes/elliptic_curves/hom_composite.py +11 -11
- sage/schemes/elliptic_curves/hom_frobenius.py +8 -8
- sage/schemes/elliptic_curves/hom_sum.py +7 -1
- sage/schemes/elliptic_curves/hom_velusqrt.py +13 -7
- sage/schemes/elliptic_curves/homset.py +2 -2
- sage/schemes/elliptic_curves/isogeny_small_degree.py +1 -1
- sage/schemes/elliptic_curves/mod_poly.py +12 -5
- sage/schemes/elliptic_curves/mod_sym_num.cpython-313-aarch64-linux-musl.so +0 -0
- sage/schemes/elliptic_curves/padic_lseries.py +25 -13
- sage/schemes/elliptic_curves/padics.py +71 -63
- sage/schemes/elliptic_curves/period_lattice.py +78 -27
- sage/schemes/elliptic_curves/period_lattice_region.cpython-313-aarch64-linux-musl.so +0 -0
- sage/schemes/elliptic_curves/sha_tate.py +1 -1
- sage/schemes/elliptic_curves/weierstrass_morphism.py +2 -2
- sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +1 -1
- sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +1 -1
- sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +10 -20
- sage/schemes/jacobians/abstract_jacobian.py +1 -1
- sage/schemes/plane_conics/con_field.py +42 -42
- sage/schemes/plane_conics/con_rational_field.py +1 -1
- sage/schemes/riemann_surfaces/riemann_surface.py +8 -8
- sage_wheels/share/cremona/cremona_mini.db +0 -0
- sage_wheels/share/ellcurves/rank0 +30427 -0
- sage_wheels/share/ellcurves/rank1 +31871 -0
- sage_wheels/share/ellcurves/rank10 +6 -0
- sage_wheels/share/ellcurves/rank11 +6 -0
- sage_wheels/share/ellcurves/rank12 +1 -0
- sage_wheels/share/ellcurves/rank14 +1 -0
- sage_wheels/share/ellcurves/rank15 +1 -0
- sage_wheels/share/ellcurves/rank17 +1 -0
- sage_wheels/share/ellcurves/rank19 +1 -0
- sage_wheels/share/ellcurves/rank2 +2388 -0
- sage_wheels/share/ellcurves/rank20 +1 -0
- sage_wheels/share/ellcurves/rank21 +1 -0
- sage_wheels/share/ellcurves/rank22 +1 -0
- sage_wheels/share/ellcurves/rank23 +1 -0
- sage_wheels/share/ellcurves/rank24 +1 -0
- sage_wheels/share/ellcurves/rank28 +1 -0
- sage_wheels/share/ellcurves/rank3 +836 -0
- sage_wheels/share/ellcurves/rank4 +10 -0
- sage_wheels/share/ellcurves/rank5 +5 -0
- sage_wheels/share/ellcurves/rank6 +5 -0
- sage_wheels/share/ellcurves/rank7 +5 -0
- sage_wheels/share/ellcurves/rank8 +6 -0
- sage_wheels/share/ellcurves/rank9 +7 -0
- passagemath_schemes-10.5.44.dist-info/top_level.txt +0 -2
- sage/databases/db_modular_polynomials.py +0 -250
- sage/databases/stein_watkins.py +0 -363
- sage/modular/modsym/p1list.cpython-313-aarch64-linux-musl.so +0 -0
- sage/modular/modsym/p1list.pxd +0 -29
- sage/modular/modsym/p1list.pyx +0 -1372
- {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,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,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"
|
sage/databases/stein_watkins.py
DELETED
|
@@ -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
|
|
Binary file
|
sage/modular/modsym/p1list.pxd
DELETED
|
@@ -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)
|