This is a database of isogeny graphs of supersingular elltipic curves over curve_to_endring(E)
, and endring_to_curve(O)
.
The database is an extension of Florit and Finol's Isogeny Database to include endomorphism rings.
I am in the process of writing a document explaining how these computations were made, and hope to upload it soon.
Note: Rational maps of endomorphisms are not included, only quaternion bases. Also, a choice of Galois conjugate has been made. If you use the wrong conjugate, you'll need to conjugate the assignment of endomorphism rings in the graphs.
Clone the repository with:
git clone https://github.com/jtcc2/isogeny-database-with-end-rings.git
Ensure the database_utils.sage
is available to Sage, for example in the Sage installation directory or your current working directory.
Edit the database_utils.sage
and set the database_root
at the top of the file. This should be the path to the isogeny_database
directory. For example, if on Windows and using Sage through WSL with the database in your documents this should be:
database_root = "/mnt/c/Users/<username>/Documents/isogeny_database/"
In Sage, import the functions with load("database_utils.sage")
. For example:
load("database_utils.sage")
p = 5569
G, js, endrings = get_isog_graph(p, [2,3], True, True)
See the functions available below.
The following functions are available in database_utils.sage
:
-
get_isog_graph(p, L_list, include_jinvariants=True, include_endrings=True, Fp2=None, B=None, degrees_as_edge_weights=True)
Returns an$L$ -isogeny graph together with$j$ -invariants and endomorphism rings, for example:
G, js, endrings = get_isog_graph(5569, [2,3], True, True)
They are ordered such that for indext
, graph vertexG.vertices()[t]
represents curves with$j$ -invariantjs[t]
and endomorphism ringendrings[t]
. -
get_all_supersingular_j_invariants(p)
returns all supersingular$j$ -invariants for a given prime. -
get_all_maximal_orders(p)
returns all maximal quaternion orders for a given prime. - Functions
curve_to_endring(E)
andendring_to_curve(O)
work as you'd expect for switching between curves and their endomorphism rings. - Similarily for working with
$j$ -invariants instead of curves usej_to_endring(p, j)
andendring_to_j(O)
.
Note that if the methods above are given
If you want to work with the database files directly without using Sage, it follows the same directory structure as Florit's Isogeny Database. Each prime {p}_nodes.txt
file listing all supersingular {p}_{l}.npz
files which store the adjacency matrices of
The difference is the addition of endomorphism ring files. For each prime you'll find a {p}_endrings.txt
file. Each line of this file represents an endomorphism ring. Lines are ordered so the ith endomorphism ring corresponds to the ith {p}_nodes.txt
file. An endomorphism ring is represented as a array of basis elements of a maximal quaternion order, each element being listed in terms of coefficients of B.<i,j,k>=QuaternionAlgebra(p)
. All orders are stored using the basis of the right order of the equivalent connecting left-ideal with smallest norm from B.maximal_order()
.
Code to recompute Florit's isogeny database is available here. Alternatively there are other options for computing isogeny graphs on elliptic curves, such as Sage's built-in algorithm or using a faster Pari implementation.
Assuming you are starting from Florit's database, the code to compute endomorphism rings and attach them to elliptic curves is given in the compute_database.sage
file. It uses the same database_root
as database_utils.sage
. Also there a few primes where constructive Deuring correspondence code is needed.
The underlying isogeny database is released under the Open Data Commons Attribution License, with details here.