# 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: d = SteinWatkinsAllData(0)
sage: d
Stein-Watkins Database a.0 Iterator

>>> 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: # optional - database_stein_watkins
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

>>> from sage.all import *
>>> # optional - database_stein_watkins
>>> 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: # optional - database_stein_watkins
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
'0.253842'
sage: C.modular_degree
'+*1'
sage: C.rank
0
sage: C.isogeny_number
'25'

>>> from sage.all import *
>>> # optional - database_stein_watkins
>>> 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
'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: d = SteinWatkinsAllData(1)
sage: C = next(d)                                  # optional - database_stein_watkins
sage: C                                            # optional - database_stein_watkins
Stein-Watkins isogeny class of conductor 100002
sage: C.curves                                     # optional - database_stein_watkins
[[[1, 1, 0, 112, 0], '(8,1,2,1)', 'X', '2'],
[[1, 1, 0, -448, -560], '[4,2,1,2]', 'X', '2']]

>>> from sage.all import *
>>> d = SteinWatkinsAllData(Integer(1))
>>> C = next(d)                                  # optional - database_stein_watkins
>>> C                                            # optional - database_stein_watkins
Stein-Watkins isogeny class of conductor 100002
>>> C.curves                                     # optional - database_stein_watkins
[[[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: d = SteinWatkinsPrimeData(0)
sage: C = next(d)                                  # optional - database_stein_watkins
sage: C                                            # optional - database_stein_watkins
Stein-Watkins isogeny class of conductor 11

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


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

sage: # optional - database_stein_watkins
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

>>> from sage.all import *
>>> # optional - database_stein_watkins
>>> 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:

class sage.databases.stein_watkins.SteinWatkinsAllData(num)[source]#

Bases: object

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

iter_levels()[source]#

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

EXAMPLES:

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

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

next()[source]#
class sage.databases.stein_watkins.SteinWatkinsIsogenyClass(conductor)[source]#

Bases: object

class sage.databases.stein_watkins.SteinWatkinsPrimeData(num)[source]#
sage.databases.stein_watkins.ecdb_num_curves(max_level=200000)[source]#

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.databases.stein_watkins.ecdb_num_curves(100) # optional - database_stein_watkins
[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]

>>> from sage.all import *
>>> sage.databases.stein_watkins.ecdb_num_curves(Integer(100)) # optional - database_stein_watkins
[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]