Watkins symmetric power \(L\)-function calculator¶
SYMPOW is a package to compute special values of symmetric power elliptic curve \(L\)-functions. It can compute up to about 64 digits of precision. This interface provides complete access to sympow, which is a standard part of Sage (and includes the extra data files).
Note
Each call to sympow runs a complete
sympow process. This incurs about 0.2 seconds
overhead.
AUTHORS:
Mark Watkins (2005-2006): wrote and released sympow
William Stein (2006-03-05): wrote Sage interface
ACKNOWLEDGEMENT (from sympow readme):
The quad-double package was modified from David Bailey’s package: http://crd.lbl.gov/~dhbailey/mpdist/
The
squfofimplementation was modified from Allan Steel’s version of Arjen Lenstra’s original LIP-based code.The
ec_apcode was originally written for the kernel of MAGMA, but was modified to use small integers when possible.SYMPOW was originally developed using PARI, but due to licensing difficulties, this was eliminated. SYMPOW also does not use the standard math libraries unless Configure is run with the -lm option. SYMPOW still uses GP to compute the meshes of inverse Mellin transforms (this is done when a new symmetric power is added to datafiles).
- class sage.lfunctions.sympow.Sympow[source]¶
Bases:
SageObjectWatkins Symmetric Power \(L\)-function Calculator.
Type
sympow.[tab]for a list of useful commands that are implemented using the command line interface, but return objects that make sense in Sage.You can also use the complete command-line interface of sympow via this class. Type
sympow.help()for a list of commands and how to call them.- L(E, n, prec)[source]¶
Return \(L(\mathrm{Sym}^{(n)}(E, \text{edge}))\) to prec digits of precision, where edge is the right edge. Here \(n\) must be even.
INPUT:
E– elliptic curven– even integerprec– integer
OUTPUT: real number to prec digits of precision as a string
Note
Before using this function for the first time for a given \(n\), you may have to type
sympow('-new_data n'), wherenis replaced by your value of \(n\).If you would like to see the extensive output sympow prints when running this function, just type
set_verbose(2).EXAMPLES:
These examples only work if you run
sympow -new_data 2in a Sage shell first. Alternatively, within Sage, execute:sage: sympow('-new_data 2') # not tested
>>> from sage.all import * >>> sympow('-new_data 2') # not tested
This command precomputes some data needed for the following examples.
sage: a = sympow.L(EllipticCurve('11a'), 2, 16) # not tested sage: a # not tested '1.057599244590958E+00' sage: RR(a) # not tested 1.05759924459096
>>> from sage.all import * >>> a = sympow.L(EllipticCurve('11a'), Integer(2), Integer(16)) # not tested >>> a # not tested '1.057599244590958E+00' >>> RR(a) # not tested 1.05759924459096
- Lderivs(E, n, prec, d)[source]¶
Return \(0\)-th to \(d\)-th derivatives of \(L(\mathrm{Sym}^{(n)}(E,s)\) to prec digits of precision, where \(s\) is the right edge if \(n\) is even and the center if \(n\) is odd.
INPUT:
E– elliptic curven– integer (even or odd)prec– integerd– integer
OUTPUT: string, exactly as output by sympow
Note
To use this function you may have to run a few commands like
sympow('-new_data 1d2'), each which takes a few minutes. If this function fails it will indicate what commands have to be run.EXAMPLES:
sage: print(sympow.Lderivs(EllipticCurve('11a'), 1, 16, 2)) # not tested ... 1n0: 2.538418608559107E-01 1w0: 2.538418608559108E-01 1n1: 1.032321840884568E-01 1w1: 1.059251499158892E-01 1n2: 3.238743180659171E-02 1w2: 3.414818600982502E-02
>>> from sage.all import * >>> print(sympow.Lderivs(EllipticCurve('11a'), Integer(1), Integer(16), Integer(2))) # not tested ... 1n0: 2.538418608559107E-01 1w0: 2.538418608559108E-01 1n1: 1.032321840884568E-01 1w1: 1.059251499158892E-01 1n2: 3.238743180659171E-02 1w2: 3.414818600982502E-02
- analytic_rank(E)[source]¶
Return the analytic rank and leading \(L\)-value of the elliptic curve \(E\).
INPUT:
E– elliptic curve over Q
OUTPUT:
integer– analytic rankstring– leading coefficient (as string)
Note
The analytic rank is not computed provably correctly in general.
Note
In computing the analytic rank we consider \(L^{(r)}(E,1)\) to be \(0\) if \(L^{(r)}(E,1)/\Omega_E > 0.0001\).
EXAMPLES: We compute the analytic ranks of the lowest known conductor curves of the first few ranks:
sage: sympow.analytic_rank(EllipticCurve('11a')) (0, '2.53842e-01') sage: sympow.analytic_rank(EllipticCurve('37a')) (1, '3.06000e-01') sage: sympow.analytic_rank(EllipticCurve('389a')) (2, '7.59317e-01') sage: sympow.analytic_rank(EllipticCurve('5077a')) (3, '1.73185e+00') sage: sympow.analytic_rank(EllipticCurve([1, -1, 0, -79, 289])) (4, '8.94385e+00') sage: sympow.analytic_rank(EllipticCurve([0, 0, 1, -79, 342])) # long time (5, '3.02857e+01') sage: sympow.analytic_rank(EllipticCurve([1, 1, 0, -2582, 48720])) # long time (6, '3.20781e+02') sage: sympow.analytic_rank(EllipticCurve([0, 0, 0, -10012, 346900])) # long time (7, '1.32517e+03')
>>> from sage.all import * >>> sympow.analytic_rank(EllipticCurve('11a')) (0, '2.53842e-01') >>> sympow.analytic_rank(EllipticCurve('37a')) (1, '3.06000e-01') >>> sympow.analytic_rank(EllipticCurve('389a')) (2, '7.59317e-01') >>> sympow.analytic_rank(EllipticCurve('5077a')) (3, '1.73185e+00') >>> sympow.analytic_rank(EllipticCurve([Integer(1), -Integer(1), Integer(0), -Integer(79), Integer(289)])) (4, '8.94385e+00') >>> sympow.analytic_rank(EllipticCurve([Integer(0), Integer(0), Integer(1), -Integer(79), Integer(342)])) # long time (5, '3.02857e+01') >>> sympow.analytic_rank(EllipticCurve([Integer(1), Integer(1), Integer(0), -Integer(2582), Integer(48720)])) # long time (6, '3.20781e+02') >>> sympow.analytic_rank(EllipticCurve([Integer(0), Integer(0), Integer(0), -Integer(10012), Integer(346900)])) # long time (7, '1.32517e+03')
- modular_degree(E)[source]¶
Return the modular degree of the elliptic curve E, assuming the Stevens conjecture.
INPUT:
E– elliptic curve over Q
OUTPUT:
integer– modular degree
EXAMPLES: We compute the modular degrees of the lowest known conductor curves of the first few ranks:
sage: sympow.modular_degree(EllipticCurve('11a')) 1 sage: sympow.modular_degree(EllipticCurve('37a')) 2 sage: sympow.modular_degree(EllipticCurve('389a')) 40 sage: sympow.modular_degree(EllipticCurve('5077a')) 1984 sage: sympow.modular_degree(EllipticCurve([1, -1, 0, -79, 289])) 334976
>>> from sage.all import * >>> sympow.modular_degree(EllipticCurve('11a')) 1 >>> sympow.modular_degree(EllipticCurve('37a')) 2 >>> sympow.modular_degree(EllipticCurve('389a')) 40 >>> sympow.modular_degree(EllipticCurve('5077a')) 1984 >>> sympow.modular_degree(EllipticCurve([Integer(1), -Integer(1), Integer(0), -Integer(79), Integer(289)])) 334976