A Magma package for computing with Hilbert modular forms over totally real number fields, and with Hilbert modular surfaces. It extends Magma's built-in ModFrmHil with q-expansion bases, surface invariants, Hirzebruch–Zagier divisors, and canonical rings.
This package accompanies two papers:
- Computing with Fourier expansions of Hilbert modular forms (in preparation).
- A database of basic numerical invariants of Hilbert modular surfaces, LuCaNT proceedings; arXiv:2301.10302.
Requires Magma. Attach the package via its top-level spec file:
AttachSpec("spec");
A convenience file config.m is also provided, which attaches the spec and sets a few sensible defaults (e.g. SetClassGroupBounds("GRH")).
Tests live in Tests/ and are run via the included Makefile:
make check # run all tests in parallel (uses all CPU cores)
make check/<testfile.m> # run a single test
make debug/<testfile.m> # run a single test with debug-on-error
make clean # clear cached precomputed dataEach test file is a Magma script that uses assert. Individual tests can also be run directly:
magma -b filename:=Tests/<testfile.m> exitsignal:='' run_tests.mBrief explanations of each top-level directory.
Patches and extensions to Magma's built-in Hilbert modular forms implementation (Hecke and diamond operators, the definite case, precomputation hooks).
The core of the package — the D stands for Dartmouth, where the project originated. The type hierarchy is
ModFrmHilDGRng > ModFrmHilD > ModFrmHilDElt > ModFrmHilDEltComp
with subdirectories for form creation (Creation/ — Eisenstein, theta, base change, dihedral, trace forms), canonical rings (CanonicalRing/), and trace formula data (Trace/).
Formulas for Hilbert series of Hilbert modular surfaces.
Code to verify computed equations against equations in the literature.
Package specification files; see the Magma handbook section on packages.
examples/contains worked examples (e.g.paper-examples.m).WorkInProgress/contains demonstrations and exploratory scripts that may or may not currently run end-to-end.
Scripts in scripts/ generate data for hilbertmodularsurfacesdata, which in turn feeds https://alpha.lmfdb.xyz/HilbertModularSurface/Q/. Each script documents its calling convention at the top of the file. For example:
magma -b D:=13 ambient:=SL gamma:=Gamma0 scripts/generate_hs.mFor parallel runs across many discriminants we use GNU Parallel, e.g.:
A=GL; G=Gamma0; t=hs
parallel -j 64 magma -b D:={} ambient:=$A gamma:=$G scripts/generate_${t}.m ::: {1..3000}BSD 3-Clause. See LICENSE.