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 # Tests/ and examples/, using all CPU cores
make check-slow # Tests/slow/ and examples/slow/
make check/<testfile.m> # one file; check/slow/<testfile.m> for a slow file
make debug/<testfile.m> # run a single test with debug-on-error
make clean # clear cached precomputed dataCI runs Tests/ and examples/ on master pushes and pushes to ready PRs without merge conflicts.
Files taking over about 20 minutes belong in Tests/slow/ or examples/slow/, run nightly on master.
Start the Tests workflow from the Actions tab to run both tiers on any branch.
CI skips known failures whose filenames start with an underscore.
Each 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/holds the papers' worked examples;examples/slow/holds the expensive cases, run nightly. Seeexamples/README.mdfor the files by paper section.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.