Select the correct newform via traces in CMF GP and Magma code snippets - #7164
Open
roed-math wants to merge 5 commits into
Open
Select the correct newform via traces in CMF GP and Magma code snippets#7164roed-math wants to merge 5 commits into
roed-math wants to merge 5 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.
LMFDB uses American spelling, so "randomised" becomes "randomized" and "Normalise" becomes "Normalize". The latter comment describes the normalize() defined on the next line, which was already American. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #5403.
Closes #6060.
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 #6059).Following the Sage snippet from #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 from
mfeigenbasiswith 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; a
snippet_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).Ported from roed-math#28, where the full write-up and comment history live.
🤖 Generated with Claude Code