Select the correct newform via traces in CMF GP and Magma code snippets (LMFDB#5403, LMFDB#6060) - #28
Select the correct newform via traces in CMF GP and Magma code snippets (LMFDB#5403, LMFDB#6060)#28roed-math wants to merge 4 commits into
Conversation
LMFDB#6060) The GP snippet took f = lf[1] and Magma had no selection, although the GP/Magma eigenbasis order often differs from the LMFDB order (PARI reverses 37.2.a and 34.2.c; Magma reverses 80.5.h from LMFDB#6059). Following the Sage snippet, select the orbit whose absolute eigenvalue traces up to the newspace trace bound match the stored traces: in GP via mfeigenbasis with an abstrace helper (rescaling by field degrees since PARI represents coefficients in subtowers), in Magma via the modular symbols NewformDecomposition, because Newforms(CuspForms(chi,k)) in Magma V2.29-4 silently returns wrong eigenvalues in many character spaces (32.2.g, 110.2.f, 102.2.h). Weight 1 keeps no Magma snippet (Magma has no weight 1 newforms). Adds a snippet_test section so the snippet CI covers newform pages. Verified by running the rendered snippets and full code downloads in gp and Magma for 19 newforms (incl. order-mismatch, nested-coefficient- field, trace_bound 0 and weight 1 cases), comparing traces beyond the selection window with the database; selection costs 0-1 ms in GP and at most ~0.2 s in Magma. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The initialize-newspace-common anchor still ran
S := CuspForms(chi, k);
N := Newforms(S);
before the modular symbols selector, so every downloaded Magma script
executed the computation that this branch identifies as unreliable, left
N unused, and labelled it "Compute space of new eigenforms". Move the
Magma character construction and the NewformDecomposition into
initialize-newspace-weight-not-1, and let the newform block only select
the matching component of the already computed decomposition.
Weight 1 previously dropped Magma from just the newform and qexp
sections, so the inherited init block, the "Show commands" selector, the
Magma commands download and download_code all still offered a Magma
script that cannot work. Drop Magma from every section and from both
language lists instead, expose the result as WebNewform.code_langs so
that the downloads list cannot drift from the snippets, and let
download_code return 404 rather than a header-only script.
Add a Magma snippet log for 80.5.h.b, the regression case of LMFDB#6059:
Magma lists that orbit before 80.5.h.a, and the selected component
matches the stored traces well past the selection window. Since the
scheduled snippet workflow ignores Magma, also assert at the text level
that the download uses NewformDecomposition and the trace comprehension,
and never CuspForms or Newforms(S).
Move wrap_traces to module level and unit test it on 675.1.g.a, whose
trace bound of 46 makes the trace list wrap: each language gets a valid
multiline assignment, gp keeps its trailing backslash, and all three
round-trip to the stored traces.
Along the way, two fixes to generate_snippet_tests.py: -o gp selected
nothing, because pari was renamed to gp only after --only and --ignore
were applied; and Magma seeds its random number generator from the
clock, so a randomised NewformDecomposition printed a or -a from run to
run and no Magma log was reproducible. Reset the seed per snippet file,
and raise parisizemax, which the 8MB default makes too small for mfinit
of a weight 1 newspace of moderate level.
Magma seeds its RNG from the clock and several of its algorithms are randomised, so a Magma snippet log is not reproducible: 80.5.h.b prints its q-expansion in terms of a or -a depending on the run, and the committed elliptic curve log is equally unstable (four runs of the 37.a1 snippet gave (0 : -1 : 1) three times and (0 : 0 : 1) once). SetSeed does fix this, but it fixes it to a different generator than the one that happens to be in the committed logs, so turning it on requires regenerating every Magma log in the repository. That is a repository wide change and does not belong in a PR about the CMF snippets, so leave the behaviour alone and just record the finding where the rest of the Magma handling is explained.
|
Addressed the review (commits b21812d and e50df0e, on top of dd9ce8a). 1. Magma no longer computes
|
|
Filed the two findings upstream:
The third item, |
|
GPT signed off. |
|
Superseded by LMFDB#7164, opened upstream from this same branch. Closing here; review continues upstream. |
The Pari/GP snippet on newform pages took
f = lf[1]("index may be different") and Magma had no selection at all, even though the eigenbasis order of GP/Magma often differs from the LMFDB order (e.g. PARI reverses 37.2.a and 34.2.c; Magma reverses 80.5.h from LMFDB#6059). Following the Sage snippet from LMFDB#6515, the GP and Magma snippets now select the newform whose absolute Hecke eigenvalue traces up to the newspace's trace bound match the stored traces. The GP version computes traces frommfeigenbasiswith a smallabstracehelper (rescaling by degrees since PARI represents coefficients in subtowers); the Magma version selects fromNewformDecomposition(NewSubspace(CuspidalSubspace(ModularSymbols(chi,k,-1))))becauseNewforms(CuspForms(chi,k))in current Magma (V2.29-4) silently returns wrong eigenvalues in many character spaces (e.g. 32.2.g, 110.2.f, 102.2.h; verified against LMFDB data, PARI and Magma's own modular symbols). Selection adds 0-1 ms in GP and at most ~0.2 s in Magma on all 19 tested labels, verified by running the generated snippets in both systems and comparing traces beyond the selection window; asnippet_testsection now lets the snippet CI cover newform pages. For weight 1 the Magma snippet is omitted since Magma has no weight-1 newforms (its init already errors there). Addresses LMFDB#5403. Addresses LMFDB#6060.🤖 Generated with Claude Code