Home | Trees | Index | Help |
|
---|
Package sage :: Package ellcurve :: Module ellcurve :: Class EllipticCurve_RationalField |
|
object
--+ |EllipticCurve
--+ |EllipticCurve_generic
--+ | EllipticCurve_RationalField
Method Summary | |
---|---|
__init__(self,
ainvs,
extra)
| |
The n-th Fourier coefficient of the modular form corresponding to this elliptic curve, where n is a positive integer. | |
analytic_rank(self)
| |
The Fourier coefficients up to and including a_n of the modular form attached to this elliptic curve. | |
The p-th Fourier coefficient of the modular form corresponding to this elliptic curve, where p is prime. | |
Return the area of a fundamental domain for the period lattice of the elliptic curve. | |
Returns the conductor of the elliptic curve. | |
Return the Cremona-Prickett-Siksek height bound. | |
cremona_label(self,
space)
| |
Return the curve in the elliptic curve database isomorphic to this curve, if possible. | |
eval_modular_form(self,
points,
prec)
| |
formal_group(self,
prec)
| |
formal_inverse(self,
prec)
| |
formal_log(self,
prec)
| |
formal_mult(self,
n,
prec)
| |
formal_n_isogeny(self,
n,
prec)
| |
Return the formal power series w(t) = t^3 + ... | |
Return the formal power series x(t) in terms of the local parameter t = -x/y at infinity. | |
Return the formal power series y(t) in terms of the local parameter t = -x/y at infinity. | |
Compute and return generators for the Mordell-Weil group E(Q) modulo torsion. | |
has_cm(self)
| |
heegner_discriminants(self,
bound)
| |
List of the first n Heegner discriminants for self. | |
Assume self has rank 0. | |
Assume self has rank 0. | |
Use the Gross-Zagier formula to compute the Neron-Tate canonical height over K of the Heegner point corresponding to D, as an Interval (since it's computed to some precision using L-functions). | |
is_semistable(self)
| |
Return True if the mod-p representation attached to E is surjective, False if it is not, or None if we were unable to determine whether it is or not. | |
Return all curves in the isogeny class of this elliptic curve. | |
Local Kodaira type of the elliptic curve at p. | |
Returns whether or not L(E,1) = 0. | |
Returns the ratio L(E,1)/Omega as an exact rational number. | |
Returns the value of the Lambda-series of the elliptic curve E at s can be any complex number. | |
Returns the value of the L-series of the elliptic curve E at s, where s must be a real number. | |
Compute L(E,1) using k terms of the series for L(E,1) form page 406 of Henri Cohen's book "A Course in Computational Algebraic Number Theory". | |
Compute L'(E,1) using k terms of the series for L'(E,1) form page 406 of Henri Cohen's book"A Course in Computational Algebraic Number Theory". | |
Returns the value of the L-series of the elliptic curve E at s can be any complex number using prec terms of the power series expansion. | |
minimal_model(self)
| |
Return the modular degree of this elliptic curve. | |
Computes and returns ... | |
mwrank_curve(self,
verbose)
| |
Returns the newform attached to this elliptic curve. | |
ngens(self)
| |
Returns a list of primes p such that the mod-p representation rho_{E,p} *might* not be surjective (this list usually contains 2, because of shortcomings of the algorithm). | |
The number of points on E modulo p, where p is a prime of good reduction. | |
Returns the real period. | |
Returns the p-adic sigma function of the elliptic curve as a power series in t to precision prec. | |
Return the PARI curve corresponding to this elliptic curve. | |
Return the PARI curve corresponding to a minimal model for this elliptic curve. | |
Return a basis for the period lattice of the elliptic curve over Q as a 2-tuple. | |
Search for points on a curve up to an input bound on the naive logarithmic height. | |
quadratic_twist(self,
D)
| |
Return the rank of this elliptic curve, assuming no conjectures. | |
Returns 1 if there is 1 real component and 2 if there are 2. | |
Returns the regulator of this curve, which must be defined over Q. | |
Returns the root number of this elliptic curve. | |
Returns True precisely when D is a fundamental discriminant that satisfies the Heegner hypothesis for this elliptic curve. | |
Given a list of rational points on E, compute the saturation in E(Q) of the subgroup they generate. | |
Bound on the rank of the curve, computed using the 2-selmer group. | |
Returns the Birch and Swinnerton-Dyer conjectural order of Sha, unless the analytic rank is > 1, in which case this function returns 0. | |
Compute a provably correct bound on the order of the Shafarevich-Tate group of this curve. | |
Returns a list p of primes such tha theorems of Kato's and others (e.g., as explained in a paper/thesis of Grigor Grigorov) imply that if p divides #Sha(E) then p is in the list. | |
Given a fundamental discriminant D (=-3,-4) that satisfies the Heegner hypothesis, return a list of primes so that Kolyvagin's theorem (as in Gross's paper) implies that any prime divisor of #Sha is in this list. | |
Returns the value of the Weierstrass sigma function of the lattice associated to this elliptic curve E. | |
Return the Silverman height bound. | |
The Tamagawa number of the elliptic curve at p. | |
Returns the product of the Tamagawa numbers. | |
Return the order of the torsion subgroup. | |
Returns the torsion subgroup of this elliptic curve. | |
Compute 2-descent data for this curve. | |
Returns a bound on the dimension of Sha(E)[2], computed using a 2-descent. | |
two_torsion_rank(self)
| |
Inherited from EllipticCurve_generic | |
Create a point on the elliptic curve, if possible. | |
Returns True if and only if P defines is a point on the elliptic curve. | |
| |
String representation of elliptic curve. | |
EXAMPLES: | |
EXAMPLES: | |
EXAMPLES: | |
EXAMPLES: | |
EXAMPLES: | |
The a-invariants of this elliptic curve. | |
The a-invariants of this elliptic curve. | |
The b-invariants of this elliptic curve. | |
Returns the base ring of the elliptic curves. | |
Returns the base ring of the elliptic curves. | |
The c-invariants of this elliptic curve. | |
Returns the discriminant of this elliptic curve. | |
Returns the n-th torsion polynomial (a.k.a., division polynomial). | |
Returns the j-invariant of this elliptic curve. | |
Returns the n-th torsion polynomial (a.k.a., division polynomial). | |
| |
Inherited from EllipticCurve | |
(Static method) | |
Inherited from object | |
x.__delattr__('name') <==> del x.name | |
x.__getattribute__('name') <==> x.name | |
x.__hash__() <==> hash(x) | |
helper for pickle | |
helper for pickle | |
x.__setattr__('name', value) <==> x.name = value | |
x.__str__() <==> str(x) |
Instance Method Details |
---|
an(self, n)The n-th Fourier coefficient of the modular form corresponding to this elliptic curve, where n is a positive integer. |
anlist(self, n)The Fourier coefficients up to and including a_n of the modular form attached to this elliptic curve. The ith element of the return list is a[i]. EXAMPLES:>>> E = EllipticCurve([0, -1, 1, -10, -20]) >>> E.anlist(3) [0, 1, -2, -1] >>> E = EllipticCurve([0,1]) >>> E.anlist(20) [0, 1, 0, 0, 0, 0, 0, -4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 8, 0] |
ap(self, p)The p-th Fourier coefficient of the modular form corresponding to this elliptic curve, where p is prime. |
complex_area(self)Return the area of a fundamental domain for the period lattice of the elliptic curve. |
conductor(self)Returns the conductor of the elliptic curve. EXAMPLE:>>> E = EllipticCurve([1, -1, 1, -29372, -1932937]) >>> E.conductor() # known bug in PARI causes this to output 14377604814 3006 |
CPS_height_bound(self)Return the Cremona-Prickett-Siksek height bound. This is a floating point number B such that if P is a point on the curve, then the naive logarithmetic height of P is off from the canonical height by at most B. WARNING: We assume the model is minimal! |
database_curve(self)Return the curve in the elliptic curve database isomorphic to this curve, if possible. Otherwise raise a RuntimeError exception. EXAMPLES: We assume the elliptic curve database is installed. >> E = EllipticCurve([1,2,3,4,5]) >> E.database_curve() 10351A1: invs=[1, -1, 0, 4, 3], rank=1, tors=1, cp={11: 1, 941: 1} We can also create an elliptic curve from a curve in the database: >> EllipticCurve(E.database_curve()) Elliptic Curve defined by y^2 + x*y = x^3 - x^2 + 4*x + 3 over Rational Field The database curve can come directly from the database. >> import sage.tables.elliptic_curves as T >> db = T.Database() >> f = db[37][0][0] >> f 37A1: invs=[0, 0, 1, -1, 0], rank=1, tors=1, cp={37: 1} >> EllipticCurve(f) Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field NOTES: 1. The model of the curve in the database can be different than the Weierstrass model for this curve, since database models are always minimal. 2. The curve C returned from the database is not of type sage.ellcurve.EllipticCurve; it has a few data members, and very few methods. |
formal_w(self, prec=20)Return the formal power series w(t) = t^3 + ... to precision O(t^prec) of Proposition IV.1.1 of [Silverman AEC1]. This is the formal expansion of w = -1/y about the formal parameter t = -x/y at infinity. We compute w using the recursive procedure (4.1) on page 18 of Bluher's `A leisurely introduction to formal groups and elliptic curves', which I downloaded from http://www.math.uiuc.edu/Algebraic-Number-Theory/0076/ |
formal_x(self, prec=20)Return the formal power series x(t) in terms of the local parameter t = -x/y at infinity. |
formal_y(self, prec=20)Return the formal power series y(t) in terms of the local parameter t = -x/y at infinity. |
gens(self, verbose=False)Compute and return generators for the Mordell-Weil group E(Q) modulo torsion. INPUT: verbose -- (default: None), if specified changes the verbosity of mwrank computations. OUTPUT: generators -- List of generators for the Mordell-Weil group. IMPLEMENTATION: Uses Cremona's mwrank C library. |
heegner_discriminants_list(self, n)List of the first n Heegner discriminants for self. |
heegner_index(self, D, min_p=3, prec=5, verbose=True)Assume self has rank 0. Return (an interval that contains) the square of the odd part of the index of the Heegner point in the group of K-rational points *modulo torsion* on the twist of the elliptic curve by D. If 0 is in the interval of the height of the Heegner point computed to the given prec, then this function returns 0. INPUT: D (int) -- Heegner discriminant min_p (int) -- (default: 3) only rule out primes >= min_p dividing the index. verbose (bool) -- (default: True) prec (int) -- (default: 5), use prec*sqrt(N) + 20 terms of L-series in computations, where N is the conductor. OUTPUT: Interval. |
heegner_index_bound(self, D=0, prec=5, verbose=True, max_height=21)Assume self has rank 0. Return a list v of primes such that if an odd prime p divides the index of the the Heegner point in the group of rational points *modulo torsion*, then p is in v. If 0 is in the interval of the height of the Heegner point computed to the given prec, then this function returns v = 0. This does not mean that the Heegner point is torsion, just that it is very likely torsion. If we obtain no information from a search up to max_height, e.g., if the Siksek et al. bound is bigger than max_height, then we return v = -1. INPUT: D (int) -- (deault: 0) Heegner discriminant; if 0, use the first discriminant < -4 that satisfies the Heegner hypothesis verbose (bool) -- (default: True) prec (int) -- (default: 5), use prec*sqrt(N) + 20 terms of L-series in computations, where N is the conductor. max_height (float) -- should be <= 21; bound on logarithmic naive height used in point searches. Make smaller to make this function faster, at the expense of possibly obtaining a worse answer. A good range is between 13 and 21. OUTPUT: v -- list or int (bad primes or 0 or -1) D -- the discriminant that was used (this is useful if D was automatically selected). |
heegner_point_height(self, D, prec=2)Use the Gross-Zagier formula to compute the Neron-Tate canonical height over K of the Heegner point corresponding to D, as an Interval (since it's computed to some precision using L-functions). INPUT: D (int) -- fundamental discriminant prec (int) -- (default: 2), use prec*sqrt(N) + 20 terms of L-series in computations, where N is the conductor. OUTPUT: Interval that contains the height of the Heegner point. |
is_surjective(self, p, A=1000)Return True if the mod-p representation attached to E is surjective, False if it is not, or None if we were unable to determine whether it is or not. INPUT: p -- int (a prime number) A -- int (a bound on the number of a_p to use) OUTPUT: a 2-tuple: -- surjective or (probably) not -- information about what it is if not surjective EXAMPLES: REMARKS: 1. If p >= 5 then the mod-p representation is surjective if and only if the p-adic representation is surjective. When p = 2, 3 there are counterexamples. See a very recent paper of Elkies for more details when p=3. 2. When p <= 3 this function always gives the correct result irregardless of A, since it explicitly determines the p-division polynomial. |
isogeny_class(self)Return all curves in the isogeny class of this elliptic curve. NOTE: Currently implemented only using the database. |
kodaira_type(self, p)Local Kodaira type of the elliptic curve at p. 1 means good reduction (type I_0), 2, 3 and 4 mean types II, III and IV, respectively, 4 + nu with nu > 0 means type I_{nu}; finally the opposite values -1, -2, etc. refer to the starred types I_0^*, II^*, etc. |
L1_vanishes(self)Returns whether or not L(E,1) = 0. The result is provably correct if the Manin constant of the associated optimal quotient is <= 2. This hypothesis on the Manin constant is true for all curves of conductor <= 40000 (by Cremona) and all semistable curves (i.e., squarefree conductor). EXAMPLES:>>> E = EllipticCurve([0, -1, 1, -10, -20]) # 11A = X_0(11) >>> E.L1_vanishes() False >>> E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11) >>> E.L1_vanishes() False >>> E = EllipticCurve([0, 0, 1, -1, 0]) # 37A (rank 1) >>> E.L1_vanishes() True >>> E = EllipticCurve([0, 1, 1, -2, 0]) # 389A (rank 2) >>> E.L1_vanishes() True >>> E = EllipticCurve([0, 0, 1, -38, 90]) # 361A (CM curve)) >>> E.L1_vanishes() True >>> E = EllipticCurve([0,-1,1,-2,-1]) # 141C (13-isogeny) >>> E.L1_vanishes() False WARNING: It's conceivable that machine floats are not large enough precision for the computation; if this could be the case a RuntimeError is raised. The curve's real period would have to be very small for this to occur. ALGORITHM: Compute the root number. If it is -1 then L(E,s) vanishes to odd order at 1, hence vanishes. If it is +1, use a result about modular symbols and Mazur's "Rational Isogenies" paper to determine a provably correct bound (assuming Manin constant is <= 2) so that we can determine whether L(E,1) = 0. AUTHOR: William Stein, 2005-04-20. |
L_ratio(self)Returns the ratio L(E,1)/Omega as an exact rational number. The result is *provably* correct if the Manin constant of the associated optimal quotient is <= 2. This hypothesis on the Manin constant is true for all curves of conductor <= 40000 (by Cremona) and all semistable curves (i.e., squarefree conductor). EXAMPLES:>>> E = EllipticCurve([0, -1, 1, -10, -20]) # 11A = X_0(11) >>> E.L_ratio() 1/5 >>> E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11) >>> E.L_ratio() 1/25 >>> E = EllipticCurve([0, 0, 1, -1, 0]) # 37A (rank 1) >>> E.L_ratio() 0 >>> E = EllipticCurve([0, 1, 1, -2, 0]) # 389A (rank 2) >>> E.L_ratio() 0 >>> E = EllipticCurve([0, 0, 1, -38, 90]) # 361A (CM curve)) >>> E.L_ratio() 0 >>> E = EllipticCurve([0,-1,1,-2,-1]) # 141C (13-isogeny) >>> E.L_ratio() 1 WARNING: It's conceivable that machine floats are not large enough precision for the computation; if this could be the case a RuntimeError is raised. The curve's real period would have to be very small for this to occur. This does not occur for any optimal curve of conductor <= 40000. ALGORITHM: Compute the root number. If it is -1 then L(E,s) vanishes to odd order at 1, hence vanishes. If it is +1, use a result about modular symbols and Mazur's "Rational Isogenies" paper to determine a provably correct bound (assuming Manin constant is <= 2) so that we can determine whether L(E,1) = 0. AUTHOR: William Stein, 2005-04-20. |
Lambda(self, s, prec)Returns the value of the Lambda-series of the elliptic curve E at s can be any complex number. Use Lambda(s) if s is real, since it will be much faster. WARNING: This function uses sage.functions.transcendental.gamma_inc, which currently calls mathematica. EXAMPLES: |
Lseries(self, s)Returns the value of the L-series of the elliptic curve E at s, where s must be a real number. NOTES: (1) If the conductor of the curve is large, say > 10^12, then this function will take a long time, since it uses an O(sqrt(N)) algorithm. (2) There is an algorithm to compute L(E,s) for any complex s, but it involves computing the incomplete Gamma function, which is not implemented in SAGE. EXAMPLES: >>> E = EllipticCurve([1,2,3,4,5]) >> E.Lseries(1) 0.E-19 The following may have low order bits that are different on your machine. >> E.Lseries(1.1) 0.28549100767814812844289234320 |
Lseries_at1(self, k=0)Compute L(E,1) using k terms of the series for L(E,1) form page 406 of Henri Cohen's book "A Course in Computational Algebraic Number Theory". If the k argument is not specified, then it defaults to sqrt(N), where N is the conductor. The real precision of the computation is the precision of Python floats. INPUT: k -- (optional) an integer, defaults to sqrt(N). OUTPUT: float -- L(E,1) float -- a bound on the error in the approximation; this is a proveably correct upper bound on the sum of the tail end of the series used to compute L(E,1). EXAMPLES: ALGORITHM: 1. Compute the root number eps. If it is -1, return 0. 2. Compute the Fourier coefficients a_n, for n up to and including k. 3. Compute the sum 2 * sum_{n=1}^{k} (a_n / n) * exp(-2*pi*n/Sqrt(N)), where N is the conductor of E. 4. Compute a bound on the tail end of the series, which is 2 * e^(-2 * pi * (k+1) / sqrt(N)) / (1 - e^(-2*pi/sqrt(N))). For a proof see [Grigov-Jorza-Patrascu-Patrikis-Stein]. |
Lseries_deriv_at1(self, k=0)Compute L'(E,1) using k terms of the series for L'(E,1) form page 406 of Henri Cohen's book"A Course in Computational Algebraic Number Theory". The real precision of the computation is the precision of Python floats. INPUT: OUTPUT: ALGORITHM: 1. Compute the root number eps. If it is 1, return 0. 2. Compute the Fourier coefficients a_n, for n up to and including k. 3. Compute the sum 2 * sum_{n=1}^{k} (a_n / n) * E_1(2*pi*n/Sqrt(N)), where N is the conductor of E, and E_1 is the exponential integral function. 4. Compute a bound on the tail end of the series, which is 2 * e^(-2 * pi * (k+1) / sqrt(N)) / (1 - e^(-2*pi/sqrt(N))). For a proof see [Grigov-Jorza-Patrascu-Patrikis-Stein]. This is exactly the same as the bound for the approximation to L(E,1) produced by Lseries_at1. |
Lseries_extended(self, s, prec)Returns the value of the L-series of the elliptic curve E at s can be any complex number using prec terms of the power series expansion. WARNING: This function uses sage.functions.transcendental.gamma_inc, which currently calls mathematica. EXAMPLES: |
modular_degree(self)Return the modular degree of this elliptic curve. NOTE: This function only currently works if this curve is in the elliptic curves tables, its a J_0(N)-optimal quotient, and you've installed those tables. In particular, this is (currently) not an implementation of Watkins's algorithm. |
modular_parametrization(self)Computes and returns ... |
newform(self)Returns the newform attached to this elliptic curve. |
non_surjective(self, A=1000)Returns a list of primes p such that the mod-p representation rho_{E,p} *might* not be surjective (this list usually contains 2, because of shortcomings of the algorithm). If p is not in the returned list, then rho_{E,p} is provably surjective (see A. Cojocaru's paper). If the curve has CM then infinitely many representations are not surjective, so we simply return the sequence [(0,"cm")] and do no further computation. INPUT: A -- an integer OUTPUT: list -- if curve has CM, returns [(0,"cm")]. Otherwise, returns a list of primes where mod-p representation very likely not surjective. At any prime not in this list, the representation is definitely surjective. EXAMPLES: >>> E = EllipticCurve([0, 0, 1, -38, 90]) # 361A >>> E.non_surjective() # CM curve [(0, 'cm')] >>> E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11) >>> E.non_surjective() [(5, '5-torsion')] >>> E = EllipticCurve([0, 0, 1, -1, 0]) # 37A >>> E.non_surjective() [] >>> E = EllipticCurve([0,-1,1,-2,-1]) # 141C >>> E.non_surjective() [(13, [1])] ALGORITHM: When p<=3 use division polynomials. For 5 <= p <= B, where B is Cojocaru's bound, use the results in Section 2 of Serre's inventiones paper"Sur Les Representations Modulaires Deg Degre 2 de Galqbar Over Q." |
Np(self, p)The number of points on E modulo p, where p is a prime of good reduction. EXAMPLES:>>> E = EllipticCurve([0, -1, 1, -10, -20]) >>> E.Np(2) 5 >>> E.Np(3) 5 >>> E.conductor() 11 >>> E.Np(11) Traceback (most recent call last): ... ArithmeticError: p (=11) must be a prime of good reduction |
omega(self)Returns the real period. This is the correct period in the BSD conjecture, i.e., it is the least real period * 2 when the period lattice is rectangular. |
padic_sigma(self, p, prec=20)Returns the p-adic sigma function of the elliptic curve as a power series in t to precision prec. |
pari_curve(self)Return the PARI curve corresponding to this elliptic curve. EXAMPLES:>>> E = EllipticCurve([0, 0,1,-1,0]) >>> e = E.pari_curve() >>> type(e) <type '_py_pari.gen'> >>> e.type() 't_VEC' >>> e.ellan(10) [1, -2, -3, 2, -2, 6, -1, 0, 6, 4] >>> E = EllipticCurve(RationalField(), ['1/3', '2/3']) >>> e = E.pari_curve() >>> e.type() 't_VEC' >>> e[:5] [0, 0, 0, 1/3, 2/3] |
pari_mincurve(self)Return the PARI curve corresponding to a minimal model for this elliptic curve. EXAMPLES:>>> E = EllipticCurve(RationalField(), ['1/3', '2/3']) >>> e = E.pari_mincurve() >>> e[:5] [0, 0, 0, 27, 486] >>> E.conductor() 47232 >>> e.ellglobalred() [47232, [1, 0, 0, 0], 2] |
period_lattice(self)Return a basis for the period lattice of the elliptic curve over Q as a 2-tuple. The basis has the form [omega_1, omega_2], where Im(omega_1/omega_2) > 0 and omega_1 is real. INPUT: -- an elliptic curve OUTPUT: omega_1 -- complex number omega_2 -- complex number |
point_search(self, height_limit, verbose=True)Search for points on a curve up to an input bound on the naive logarithmic height. INPUT: height_limit (float) -- bound on naive height (at most 21, or mwrank overflows) verbose (bool) -- (default: True) OUTPUT: points (list) -- list of points found IMPLEMENTATION: Uses Cremona's mwrank package. |
rank(self, use_database=False, verbose=False)Return the rank of this elliptic curve, assuming no conjectures. If we fail to provably compute the rank, raises a RuntimeError exception. INPUT: use_database (bool) -- (default: False), if True, try to look up the regulator in the Cremona database. proof (bool) -- (default: True), if True then rank is proven correct; otherwise, computation of rank is not certain. verbose -- (default: None), if specified changes the verbosity of mwrank computations. OUTPUT: rank (int) -- the rank of the elliptic curve. IMPLEMENTATION: Uses L-functions and Cremona's mwrank C library. |
real_components(self)Returns 1 if there is 1 real component and 2 if there are 2. |
regulator(self, use_database=False, verbose=None)Returns the regulator of this curve, which must be defined over Q. INPUT: use_database -- bool (default: False), if True, try to look up the regulator in the Cremona database. verbose -- (default: None), if specified changes the verbosity of mwrank computations. |
root_number(self)Returns the root number of this elliptic curve. This is 1 if the order of vanishing of the L-function L(E,s) at 1 is even, and -1 if it is odd. |
satisfies_heegner_hypothesis(self, D)Returns True precisely when D is a fundamental discriminant that satisfies the Heegner hypothesis for this elliptic curve. |
saturation(self, points, verbose=False, max_prime=0, odd_primes_only=False)Given a list of rational points on E, compute the saturation in E(Q) of the subgroup they generate. INPUT: points (list) -- list of points on E verbose (bool) -- (default: False), if True, give verbose output max_prime (int) -- (default: 0), saturation is performed for all primes up to max_prime. If max_prime==0, perform saturation at *all* primes, i.e., compute the true saturation. odd_primes_only (bool) -- only do saturation at odd primes OUTPUT: saturation (list) -- points that form a basis for the saturation index (int) -- the index of the group generated by points in their saturation regulator (float) -- regulator of saturated points. IMPLEMENTATION: Uses Cremona's mwrank package. With max_prime=0, we call mwrank with successively larger prime bounds until the full saturation is provably found. The results of saturation at the previous primes is stored in each case, so this should be reasonably fast. |
selmer_rank_bound(self)Bound on the rank of the curve, computed using the 2-selmer group. This is the rank of the curve minus the rank of the 2-torsion, minus a number determined by whatever mwrank was able to determine related to Sha[2]. Thus in many cases, this is the actual rank of the curve. EXAMPLE: The following is the curve 960D1, which has rank 0, but Sha of order 4.>>> E = EllipticCurve([0, -1, 0, -900, -10098]) >>> E.selmer_rank_bound() 0It gives 0 instead of 2, because it knows Sha is nontrivial. In contrast, for the curve 571A, also with rank 0 and Sha of order 4, we get a worse bound: >>> E = EllipticCurve([0, -1, 1, -929, -10595]) >>> E.selmer_rank_bound() 2 >>> E.rank() 0 |
sha_an(self, use_database=False)Returns the Birch and Swinnerton-Dyer conjectural order of Sha, unless the analytic rank is > 1, in which case this function returns 0. This result is proved correct if the order of vanishing is 0 and the Manin constant is <= 2 (this Manin constant condition is true if the conductor is squarefree or <= 40000). If the optional parameter use_database is True (default: False), this function returns the analytic order of Sha as listed in Cremona's tables, if this curve appears in Cremona's tables (i.e., is a curve over Q of conductor <= 40000). EXAMPLES: >>> E = EllipticCurve([0, -1, 1, -10, -20]) # 11A = X_0(11) >>> E.sha_an() 1 >>> E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11) >>> E.sha_an() 1 The smallest conductor curve with nontrivial Sha: >>> E = EllipticCurve([1,1,1,-352,-2689]) # 66B3 >>> E.sha_an() 4 The four optimal quotients with nontrivial Sha and conductor <= 1000: >>> E = EllipticCurve([0, -1, 1, -929, -10595]) # 571A >>> E.sha_an() 4 >>> E = EllipticCurve([1, 1, 0, -1154, -15345]) # 681B >>> E.sha_an() 9 >>> E = EllipticCurve([0, -1, 0, -900, -10098]) # 960D >>> E.sha_an() 4 >>> E = EllipticCurve([0, 1, 0, -20, -42]) # 960N >>> E.sha_an() 4 The smallest conductor curve of rank > 1: >>> E = EllipticCurve([0, 1, 1, -2, 0]) # 389A (rank 2) >>> E.sha_an() 0 The following two examples require the mwrank package, for computation of a regulator. >> e = EllipticCurve([1, 0, 0, -19491080, -33122512122]) # 15834T2 >> e.sha_an() # takes about 22 seconds 25 >> E = EllipticCurve([0, 0, 1, -1, 0]) # 37A (rank 1) >> E.sha_an() 1 |
shabound(self)Compute a provably correct bound on the order of the Shafarevich-Tate group of this curve. The bound is a either False (no bound) or a list B of primes such that any divisor of Sha is in this list. |
shabound_kato(self)Returns a list p of primes such tha theorems of Kato's and others (e.g., as explained in a paper/thesis of Grigor Grigorov) imply that if p divides #Sha(E) then p is in the list. If L(E,1) = 0, then Kato's theorem gives no information, so this function returns False. THEOREM (Kato): Suppose p >= 5 is a prime so the p-adic representation rho_{E,p} is surjective. Then ord_p(#Sha(E)) divides ord_p(L(E,1)/Omega_E). EXAMPLES: >>> E = EllipticCurve([0, -1, 1, -10, -20]) # 11A = X_0(11) >>> E.shabound_kato() [2, 3, 5] >>> E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11) >>> E.shabound_kato() [2, 3, 5] >>> E = EllipticCurve([1,1,1,-352,-2689]) # 66B3 >>> E.shabound_kato() [2, 3] For the following curve one really has 25 | #Sha (by Grigorov-Stein paper): >> E = EllipticCurve([1, -1, 0, -332311, -73733731]) # 1058D1 >> E.shabound_kato() [2, 3, 5] >> E.non_surjective() [] For this one, Sha is divisible by 7. >> E = EllipticCurve([0, 0, 0, -4062871, -3152083138]) # 3364C1 >> E.shabound_kato() [2, 3, 7] No information about curves of rank > 0: >>> E = EllipticCurve([0, 0, 1, -1, 0]) # 37A (rank 1) >>> E.shabound_kato() False |
shabound_kolyvagin(self, D=0, regulator=None, ignore_nonsurj_hypothesis=False)Given a fundamental discriminant D (=-3,-4) that satisfies the Heegner hypothesis, return a list of primes so that Kolyvagin's theorem (as in Gross's paper) implies that any prime divisor of #Sha is in this list. INPUT: D -- (optional) a fundamental discriminant < -4 that satisfies the Heegner hypothesis for E; if not given, use the first such D regulator -- (optional) regulator of E(K); if not given, will be computed (which could take a long time) ignore_nonsurj_hypothesis (optional: default False) -- If True, then gives the bound coming from Heegner point index, but without any hypothesis on surjectivity of the mod-p representation. OUTPUT: bound and index More precisely: 0 -- if E/K has complex multiplication or analytic rank >= 2 or B -- list of primes such that if p divides Sha(E/K), then p is in B. and I -- the odd part of the index of the Heegner point in the full group of K-rational points on E. (If E has CM, returns 0.) REMARKS: (1) We do not have to assume that the Manin constant is 1 (or a power of 2). If the Manin constant were divisible by a prime, that prime would get included in the list of bad primes. (2) We assume the Gross-Zagier theorem is True under the hypothesis that gcd(N,D) = 1, instead of the stronger hypothesis gcd(2*N,D)=1 that is in the original Gross-Zagier paper. That Gross-Zagier is true when gcd(N,D)=1 is"well-known" to the experts, but doesn't seem to written up well in the literature. (3) Correctness of the computation is guaranteed using interval arithmetic, under the assumption that the regulator, square root, and period lattice are computed to precision at least 10^(-10), i.e., they are correct up to addition or a real number with absolute value less than 10^(-10). |
sigma(self, z, flag=0)Returns the value of the Weierstrass sigma function of the lattice associated to this elliptic curve E. INPUT: z -- a complex number flag -- 0 - default ??? 1 - computes an arbitrary determination of log(sigma(z)) 2, 3 - same using the product expansion instead of theta series. ??? OUTPUT: a complex number NOTE: The reason for the ???'s above, is that the PARI documentation for ellsigma is very vague. |
silverman_height_bound(self)Return the Silverman height bound. This is a floating point number B such that if P is a point on the curve, then the naive logarithmetic height of P is off from the canonical height by at most B. Note that the CPS_height_bound is typically much better than the Silverman bound. |
tamagawa_number(self, p)The Tamagawa number of the elliptic curve at p. |
tamagawa_product(self)Returns the product of the Tamagawa numbers. |
torsion_order(self)Return the order of the torsion subgroup. |
torsion_subgroup(self, flag=0)Returns the torsion subgroup of this elliptic curve. The flag is passed onto PARI and has the same algorithm meaning as there. So: If flag = 0, use Doud's algorithm; if flag = 1, use Lutz-Nagell. |
two_descent(self, verbose=True, sel=False, first_limit=20, second_limit=5, n_aux=-1, second_descent=1)Compute 2-descent data for this curve. The actual data is part of self.mwrank_curve(). INPUT: verbose -- (default: True) print what mwrank is doing sel -- (default: False) ?? first_limit -- (default: 20) ?? second_limit-- (default: 5) ?? n_aux -- (default: -1) ?? second_descent -- (default: 1) ?? |
two_selmer_shabound(self)Returns a bound on the dimension of Sha(E)[2], computed using a 2-descent. |
Home | Trees | Index | Help |
|
---|
Generated by Epydoc 2.1 on Fri May 20 19:41:04 2005 | http://epydoc.sf.net |