The Stein-Watkins table of elliptic curves - Databases

Skip to content
Back to top
View this page
Edit this page

# The Stein-Watkins table of elliptic curves

Sage gives access to the Stein-Watkins table of elliptic curves, via the optional database_stein_watkins package that you must install. This is a huge database of elliptic curves. You can install the database (a 2.6GB package) with the command

    sage -i database_stein_watkins

You can also automatically download a small version, which takes much less time, via the optional database_stein_watkins_mini package using the command

    sage -i database_stein_watkins_mini

This database covers a wide range of conductors, but unlike the `Cremona database`, this database need not list all curves of a given conductor. It lists the curves whose coefficients are not “too large” (see [SW2002]).

- The command `SteinWatkinsAllData(n)` returns an iterator over the curves in the \(n\)-th Stein-Watkins table, which contains elliptic curves of conductor between \(n10^5\) and \((n+1)10^5\). Here \(n\) can be between 0 and 999, inclusive.

- The command `SteinWatkinsPrimeData(n)` returns an iterator over the curves in the \(n\)-th Stein-Watkins prime table, which contains prime conductor elliptic curves of conductor between \(n10^8\) and \((n+1)10^8\). Here \(n\) varies between 0 and 99, inclusive.

EXAMPLES: We obtain the first table of elliptic curves.

Sage

    sage: d = SteinWatkinsAllData(0)
    sage: d
    Stein-Watkins Database a.0 Iterator

Python

    >>> from sage.all import *
    >>> d = SteinWatkinsAllData(Integer(0))
    >>> d
    Stein-Watkins Database a.0 Iterator

We type `next(d)` to get each isogeny class of curves from `d`:

Sage

    sage: C = next(d)
    sage: C
    Stein-Watkins isogeny class of conductor 11
    sage: next(d)
    Stein-Watkins isogeny class of conductor 14
    sage: next(d)
    Stein-Watkins isogeny class of conductor 15

[Python]

    >>> from sage.all import *
    >>> C = next(d)
    >>> C
    Stein-Watkins isogeny class of conductor 11
    >>> next(d)
    Stein-Watkins isogeny class of conductor 14
    >>> next(d)
    Stein-Watkins isogeny class of conductor 15

An isogeny class has a number of attributes that give data about the isogeny class, such as the rank, equations of curves, conductor, leading coefficient of \(L\)-function, etc.

Sage

    sage: C.data
    ['11', '[11]', '0', '0.253842', '25', '+*1']
    sage: C.curves
    [[[0, -1, 1, 0, 0], '(1)', '1', '5'],
     [[0, -1, 1, -10, -20], '(5)', '1', '5'],
     [[0, -1, 1, -7820, -263580], '(1)', '1', '1']]
    sage: C.conductor
    11
    sage: C.leading_coefficient
    '0.253842'
    sage: C.modular_degree
    '+*1'
    sage: C.rank
    0
    sage: C.isogeny_number
    '25'

Python

    >>> from sage.all import *
    >>> C.data
    ['11', '[11]', '0', '0.253842', '25', '+*1']
    >>> C.curves
    [[[0, -1, 1, 0, 0], '(1)', '1', '5'],
     [[0, -1, 1, -10, -20], '(5)', '1', '5'],
     [[0, -1, 1, -7820, -263580], '(1)', '1', '1']]
    >>> C.conductor
    11
    >>> C.leading_coefficient
    '0.253842'
    >>> C.modular_degree
    '+*1'
    >>> C.rank
    0
    >>> C.isogeny_number
    '25'

If we were to continue typing `next(d)` we would iterate over all curves in the Stein-Watkins database up to conductor \(10^5\). We could also type `for C in d: ...`

To access the data file starting at \(10^5\) do the following:

Sage

    sage: d = SteinWatkinsAllData(1)
    sage: C = next(d)
    sage: C
    Stein-Watkins isogeny class of conductor 100002
    sage: C.curves
    [[[1, 1, 0, 112, 0], '(8,1,2,1)', 'X', '2'],
     [[1, 1, 0, -448, -560], '[4,2,1,2]', 'X', '2']]

[Python]

    >>> from sage.all import *
    >>> d = SteinWatkinsAllData(Integer(1))
    >>> C = next(d)
    >>> C
    Stein-Watkins isogeny class of conductor 100002
    >>> C.curves
    [[[1, 1, 0, 112, 0], '(8,1,2,1)', 'X', '2'],
     [[1, 1, 0, -448, -560], '[4,2,1,2]', 'X', '2']]

Next we access the prime-conductor data:

Sage

    sage: d = SteinWatkinsPrimeData(0)
    sage: C = next(d)
    sage: C
    Stein-Watkins isogeny class of conductor 11

Python

    >>> from sage.all import *
    >>> d = SteinWatkinsPrimeData(Integer(0))
    >>> C = next(d)
    >>> C
    Stein-Watkins isogeny class of conductor 11

Each call `next(d)` gives another elliptic curve of prime conductor:

Sage

    sage: C = next(d)
    sage: C
    Stein-Watkins isogeny class of conductor 17
    sage: C.curves
    [[[1, -1, 1, -1, 0], '[1]', '1', '4'],
     [[1, -1, 1, -6, -4], '[2]', '1', '2x'],
     [[1, -1, 1, -1, -14], '(4)', '1', '4'],
     [[1, -1, 1, -91, -310], '[1]', '1', '2']]
    sage: C = next(d)
    sage: C
    Stein-Watkins isogeny class of conductor 19

[Python]

    >>> from sage.all import *
    >>> C = next(d)
    >>> C
    Stein-Watkins isogeny class of conductor 17
    >>> C.curves
    [[[1, -1, 1, -1, 0], '[1]', '1', '4'],
     [[1, -1, 1, -6, -4], '[2]', '1', '2x'],
     [[1, -1, 1, -1, -14], '(4)', '1', '4'],
     [[1, -1, 1, -91, -310], '[1]', '1', '2']]
    >>> C = next(d)
    >>> C
    Stein-Watkins isogeny class of conductor 19

REFERENCE:

- [SW2002]

class sage.databases.stein_watkins.SteinWatkinsAllData(num)

  Bases: `object`

  Class for iterating through one of the Stein-Watkins database files for all conductors.

  iter_levels()

    Iterate through the curve classes, but grouped into lists by level.

    EXAMPLES:

    Sage

        sage: d = SteinWatkinsAllData(1)
        sage: E = d.iter_levels()
        sage: next(E)
        [Stein-Watkins isogeny class of conductor 100002]
        sage: next(E)
        [Stein-Watkins isogeny class of conductor 100005,
        Stein-Watkins isogeny class of conductor 100005]
        sage: next(E)
        [Stein-Watkins isogeny class of conductor 100007]

    Python

        >>> from sage.all import *
        >>> d = SteinWatkinsAllData(Integer(1))
        >>> E = d.iter_levels()
        >>> next(E)
        [Stein-Watkins isogeny class of conductor 100002]
        >>> next(E)
        [Stein-Watkins isogeny class of conductor 100005,
        Stein-Watkins isogeny class of conductor 100005]
        >>> next(E)
        [Stein-Watkins isogeny class of conductor 100007]

  next()

class sage.databases.stein_watkins.SteinWatkinsIsogenyClass(conductor)

  Bases: `object`

class sage.databases.stein_watkins.SteinWatkinsPrimeData(num)

  Bases: `SteinWatkinsAllData`

sage.databases.stein_watkins.ecdb_num_curves(max_level=200000)

  Return a list whose \(N\)-th entry, for `0 <= N <= max_level`, is the number of elliptic curves of conductor \(N\) in the database.

  EXAMPLES:

  Sage

      sage: sage.databases.stein_watkins.ecdb_num_curves(100)
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 6, 8, 0, 4, 0, 3, 4, 6, 0, 0,
       6, 0, 5, 4, 0, 0, 8, 0, 4, 4, 4, 3, 4, 4, 5, 4, 4, 0, 6, 1, 2, 8, 2, 0,
       6, 4, 8, 2, 2, 1, 6, 4, 6, 7, 3, 0, 0, 1, 4, 6, 4, 2, 12, 1, 0, 2, 4, 0,
       6, 2, 0, 12, 1, 6, 4, 1, 8, 0, 2, 1, 6, 2, 0, 0, 1, 3, 16, 4, 3, 0, 2,
       0, 8, 0, 6, 11, 4]

  Python

      >>> from sage.all import *
      >>> sage.databases.stein_watkins.ecdb_num_curves(Integer(100))
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 6, 8, 0, 4, 0, 3, 4, 6, 0, 0,
       6, 0, 5, 4, 0, 0, 8, 0, 4, 4, 4, 3, 4, 4, 5, 4, 4, 0, 6, 1, 2, 8, 2, 0,
       6, 4, 8, 2, 2, 1, 6, 4, 6, 7, 3, 0, 0, 1, 4, 6, 4, 2, 12, 1, 0, 2, 4, 0,
       6, 2, 0, 12, 1, 6, 4, 1, 8, 0, 2, 1, 6, 2, 0, 0, 1, 3, 16, 4, 3, 0, 2,
       0, 8, 0, 6, 11, 4]