/* This code can be loaded, or copied and pasted, into Magma. It will load the data associated to the HMF, including the field, level, and Hecke and Atkin-Lehner eigenvalue data. At the *bottom* of the file, there is code to recreate the Hilbert modular form in Magma, by creating the HMF space and cutting out the corresponding Hecke irreducible subspace. From there, you can ask for more eigenvalues or modify as desired. It is commented out, as this computation may be lengthy. */ P := PolynomialRing(Rationals()); g := P![-80, -1, 1]; F := NumberField(g); ZF := Integers(F); NN := ideal; primesArray := [ [2, 2, w], [2, 2, w + 1], [3, 3, -2*w + 19], [5, 5, w], [5, 5, w + 4], [13, 13, w + 1], [13, 13, w + 11], [17, 17, w + 3], [17, 17, w + 13], [19, 19, w + 6], [19, 19, w + 12], [37, 37, w + 2], [37, 37, w + 34], [49, 7, -7], [59, 59, -4*w - 33], [59, 59, 4*w - 37], [61, 61, w + 28], [61, 61, w + 32], [71, 71, w + 22], [71, 71, w + 48], [79, 79, 2*w - 21], [79, 79, 2*w + 19], [107, 107, 12*w - 113], [113, 113, w + 17], [113, 113, w + 95], [121, 11, -11], [131, 131, w + 18], [131, 131, w + 112], [151, 151, w + 43], [151, 151, w + 107], [163, 163, 2*w - 23], [163, 163, -2*w - 21], [167, 167, w + 66], [167, 167, w + 100], [173, 173, w + 59], [173, 173, w + 113], [179, 179, w + 60], [179, 179, w + 118], [191, 191, w + 21], [191, 191, w + 169], [193, 193, 32*w - 303], [193, 193, 8*w - 77], [199, 199, w + 45], [199, 199, w + 153], [223, 223, w + 52], [223, 223, w + 170], [241, 241, w + 85], [241, 241, w + 155], [257, 257, 2*w - 9], [257, 257, -2*w - 7], [269, 269, w + 101], [269, 269, w + 167], [271, 271, w + 104], [271, 271, w + 166], [281, 281, -10*w + 93], [281, 281, 38*w - 359], [283, 283, w + 98], [283, 283, w + 184], [311, 311, w + 26], [311, 311, w + 284], [313, 313, w + 36], [313, 313, w + 276], [317, 317, 2*w - 3], [317, 317, -2*w - 1], [331, 331, w + 131], [331, 331, w + 199], [337, 337, w + 127], [337, 337, w + 209], [347, 347, w + 46], [347, 347, w + 300], [353, 353, 34*w - 321], [353, 353, -14*w + 131], [359, 359, w + 156], [359, 359, w + 202], [373, 373, w + 67], [373, 373, w + 305], [389, 389, 6*w - 53], [389, 389, 6*w + 47], [397, 397, 4*w + 39], [397, 397, -4*w + 43], [401, 401, -18*w + 169], [401, 401, 30*w - 283], [419, 419, w + 126], [419, 419, w + 292], [421, 421, w + 65], [421, 421, w + 355], [439, 439, 10*w - 97], [439, 439, -10*w - 87], [443, 443, 4*w - 31], [443, 443, -4*w - 27], [449, 449, w + 182], [449, 449, w + 266], [457, 457, w + 135], [457, 457, w + 321], [463, 463, 2*w - 29], [463, 463, -2*w - 27], [479, 479, w + 193], [479, 479, w + 285], [491, 491, w + 99], [491, 491, w + 391], [521, 521, w + 33], [521, 521, w + 487], [529, 23, -23], [547, 547, w + 74], [547, 547, w + 472], [557, 557, w + 58], [557, 557, w + 498], [563, 563, w + 253], [563, 563, w + 309], [571, 571, w + 241], [571, 571, w + 329], [577, 577, w + 96], [577, 577, w + 480], [593, 593, w + 248], [593, 593, w + 344], [617, 617, w + 61], [617, 617, w + 555], [641, 641, w + 143], [641, 641, w + 497], [643, 643, w + 51], [643, 643, w + 591], [647, 647, 8*w - 71], [647, 647, 8*w + 63], [659, 659, 4*w - 27], [659, 659, -4*w - 23], [661, 661, 44*w - 417], [661, 661, 20*w - 191], [691, 691, w + 91], [691, 691, w + 599], [701, 701, w + 38], [701, 701, w + 662], [719, 719, w + 303], [719, 719, w + 415], [727, 727, w + 295], [727, 727, w + 431], [773, 773, -6*w - 43], [773, 773, 6*w - 49], [809, 809, w + 220], [809, 809, w + 588], [811, 811, -10*w - 89], [811, 811, 10*w - 99], [821, 821, w + 41], [821, 821, w + 779], [827, 827, w + 177], [827, 827, w + 649], [841, 29, -29], [859, 859, w + 318], [859, 859, w + 540], [863, 863, w + 42], [863, 863, w + 820], [883, 883, w + 173], [883, 883, w + 709], [887, 887, w + 73], [887, 887, w + 813], [911, 911, 8*w - 69], [911, 911, 8*w + 61], [929, 929, w + 251], [929, 929, w + 677], [937, 937, w + 372], [937, 937, w + 564], [947, 947, 12*w + 97], [947, 947, 12*w - 109], [953, 953, 6*w - 47], [953, 953, -6*w - 41], [961, 31, -31], [967, 967, w + 388], [967, 967, w + 578], [971, 971, w + 176], [971, 971, w + 794], [983, 983, w + 140], [983, 983, w + 842], [997, 997, w + 399], [997, 997, w + 597]]; primes := [ideal : I in primesArray]; heckePol := x^4 - 3*x^3 - x^2 + 7*x - 3; K := NumberField(heckePol); heckeEigenvaluesArray := [e, -1, e^3 - 2*e^2 - 3*e + 4, e^3 - 2*e^2 - 3*e + 6, e^3 - e^2 - 2*e, -e^3 + 5*e - 1, 4*e^3 - 6*e^2 - 11*e + 11, 2*e^3 - 4*e^2 - 4*e + 9, 2*e^3 - 5*e^2 - 6*e + 12, -2*e - 1, -e^3 + 7*e - 1, 5*e^3 - 9*e^2 - 10*e + 14, -2*e^3 + 6*e^2 + 4*e - 10, -e^3 + 2*e^2 + 3*e - 13, 2*e^3 - 2*e^2 - 4*e + 3, -7*e^3 + 11*e^2 + 22*e - 21, 4*e^2 - 2*e - 13, 3*e^2 - 2*e - 4, -e^3 - e^2 + 3*e - 3, e^3 + e^2 - 8*e, e^3 - 4*e - 7, -3*e^3 + 4*e^2 + 3*e - 1, -5*e^3 + 9*e^2 + 14*e - 24, -2*e^3 + e^2 + 12*e + 3, 5*e^3 - 3*e^2 - 20*e + 3, -2*e^3 + 5*e^2 + 4*e - 7, -3*e^3 + 4*e^2 + 4*e + 3, -5*e^3 + 4*e^2 + 20*e - 3, -3*e^3 + e^2 + 10*e - 4, -5*e^3 + 10*e^2 + 8*e - 16, -6*e^3 + 18*e^2 + 7*e - 28, -e^3 - e^2 + 2*e + 5, 8*e^3 - 14*e^2 - 22*e + 33, 4*e^3 - 4*e^2 - 10*e, -9*e^3 + 15*e^2 + 21*e - 24, -2*e^3 + 9*e + 6, -6*e^3 + 7*e^2 + 20*e - 18, 3*e^3 - 9*e^2 - 8*e + 27, -3*e^3 + 7*e^2 + 12*e - 6, -3*e^3 + 2*e^2 + 5*e + 18, 4*e^3 - 3*e^2 - 16*e + 17, 13*e^3 - 26*e^2 - 28*e + 44, -3*e^3 + 5*e^2 + 11*e - 4, -8*e^3 + 12*e^2 + 27*e - 25, 2*e^3 - 10*e^2 - e + 20, -9*e^3 + 15*e^2 + 29*e - 25, -10*e^3 + 18*e^2 + 25*e - 31, -e^3 + 4*e^2 - 7*e - 16, 2*e^3 - 10*e^2 - e + 12, -12*e^3 + 22*e^2 + 30*e - 45, -e^3 + e^2 - 2*e + 3, -3*e^3 + 14*e^2 + 3*e - 24, 11*e^3 - 20*e^2 - 28*e + 32, -7*e^3 + 6*e^2 + 27*e - 7, -7*e^3 + 16*e^2 + 21*e - 18, 5*e^3 - 5*e^2 - 15*e, -13*e^3 + 16*e^2 + 39*e - 22, -3*e^3 + 6*e^2 + 7*e - 16, -17*e^3 + 27*e^2 + 45*e - 48, -3*e^3 + 8*e^2 + 7*e, -5*e^3 - 6*e^2 + 30*e + 17, -2*e^3 + 12*e - 10, -5*e^3 + 7*e^2 + 7*e + 6, e^3 + 4*e^2 - 15*e, -e^3 + 2*e^2 - 3*e - 19, 5*e^2 - 3*e - 19, -9*e^3 + 20*e^2 + 27*e - 31, 6*e^3 - 16*e^2 - 19*e + 44, -4*e^3 + 4*e^2 + 13*e - 6, e^3 + 9*e^2 - 22*e - 21, -5*e^3 + 12*e^2 + 4*e - 3, 15*e^3 - 33*e^2 - 35*e + 51, -5*e^3 + 17*e^2 + 17*e - 36, -4*e^3 + 14*e^2 - 33, 5*e^3 - 13*e^2 - 20*e + 29, 13*e^3 - 10*e^2 - 45*e + 14, -4*e^3 + 3*e^2 + 28*e - 12, -8*e + 15, -7*e^3 + 23*e^2 + 9*e - 43, 3*e^3 - 11*e^2 + 8*e + 14, 10*e^3 - 22*e^2 - 37*e + 48, 10*e^3 - 2*e^2 - 39*e - 9, 16*e^3 - 28*e^2 - 32*e + 45, -9*e^3 + 12*e^2 + 33*e - 21, 2*e^3 - 13*e^2 - 4*e + 38, -6*e^3 + 10*e^2 + 28*e - 31, 14*e^3 - 26*e^2 - 39*e + 35, e^3 - 4*e^2 - 10, 17*e^3 - 27*e^2 - 45*e + 45, 5*e^3 - 10*e^2 - 18*e + 36, -11*e^3 + 17*e^2 + 24*e - 24, 16*e^3 - 33*e^2 - 44*e + 48, 20*e^3 - 38*e^2 - 67*e + 83, -5*e^3 + 22*e - 22, -27*e^3 + 48*e^2 + 64*e - 79, 12*e^3 - 14*e^2 - 44*e + 47, -11*e^3 + 17*e^2 + 30*e - 12, 6*e^3 - 9*e^2 - 21*e + 12, e^3 + 10*e - 9, 14*e^3 - 23*e^2 - 33*e + 33, 8*e^3 - 4*e^2 - 31*e + 6, -11*e^3 + 7*e^2 + 40*e - 6, 2*e^3 + 4*e^2 - 14*e - 4, 10*e^3 - 19*e^2 - 21*e + 35, -e^2 - 9*e + 26, -10*e^3 + 17*e^2 + 25*e - 6, -7*e^3 + 36*e + 3, -4*e^3 - 10*e^2 + 35*e + 27, -9*e^3 + 13*e^2 + 44*e - 30, 2*e^3 - 16*e^2 + 16*e + 38, -4*e^3 + 9*e^2 + e - 7, 6*e^3 - e^2 - 14*e - 28, -20*e^3 + 45*e^2 + 44*e - 67, 4*e^3 - 9*e^2 - 10*e + 9, 10*e^3 - 26*e^2 - 23*e + 27, -7*e^3 + 15*e^2 + 14*e - 21, -8*e^3 + 7*e^2 + 42*e - 21, -2*e^3 + 9*e^2 + 7*e - 15, -e^3 + 6*e^2 - e + 15, 7*e^3 - 17*e^2 - 29*e + 56, -2*e^3 - 3*e^2 + 3*e + 41, 2*e^3 + e^2 - 2*e - 12, -30*e^3 + 44*e^2 + 89*e - 87, 7*e^3 - 9*e^2 - 36*e + 27, -18*e^3 + 34*e^2 + 65*e - 87, 5*e^3 - 22*e^2 - e + 44, 12*e^3 - 14*e^2 - 46*e + 26, 4*e^3 + 4*e^2 - 11*e - 31, 5*e^3 - 6*e^2 - 10, 18*e^3 - 24*e^2 - 69*e + 51, 4*e^3 - 6*e^2 - 26*e + 27, -19*e^3 + 44*e^2 + 41*e - 57, -4*e^3 + 22*e^2 + 12*e - 57, -15*e^3 + 12*e^2 + 34*e + 23, -e^3 + 3*e^2 + 4*e + 5, 12*e^3 - 26*e^2 - 17*e + 24, -7*e^3 - 6*e^2 + 38*e + 12, 14*e^3 - 16*e^2 - 40*e, 16*e^3 - 30*e^2 - 37*e + 60, -5*e^3 + 8*e^2 + 10*e - 10, -13*e^3 + 11*e^2 + 44*e - 22, -25*e^3 + 39*e^2 + 67*e - 54, 12*e^3 - 37*e^2 - 25*e + 63, -10*e^3 + 6*e^2 + 44*e - 27, e^3 - 13*e + 24, -12*e^3 + 20*e^2 + 26*e - 46, 5*e^2 - e - 19, -3*e^3 + 6*e^2 + 17*e - 55, -4*e^3 + 22*e^2 + e - 42, -11*e^3 + 30*e^2 + 36*e - 69, -7*e^2 + 16*e + 8, -18*e^3 + 26*e^2 + 42*e - 52, 12*e^3 - 11*e^2 - 54*e + 39, -37*e^3 + 62*e^2 + 88*e - 96, -23*e^3 + 29*e^2 + 68*e - 42, 7*e^3 - 8*e^2 - 34*e + 21, 25*e^3 - 32*e^2 - 68*e + 45, -8*e^3 + 5*e^2 + 22*e - 6, 14*e^3 - 20*e^2 - 50*e + 17, 24*e^3 - 42*e^2 - 62*e + 62, -27*e^3 + 54*e^2 + 62*e - 78, 3*e^3 + 6*e^2 - 23*e + 6, 20*e^3 - 22*e^2 - 61*e + 21, 9*e^3 - 6*e^2 - 11*e - 12, -8*e^3 + 3*e^2 + 25*e - 4, 17*e^3 - 25*e^2 - 63*e + 41, -10*e^3 + 22*e^2 + 33*e - 49, 2*e^3 - 15*e^2 + 10*e + 27, 11*e^3 + 8*e^2 - 59*e - 15, 4*e^3 - 23*e^2 + 16*e + 57, -16*e^3 + 25*e^2 + 41*e - 66, 21*e^3 - 39*e^2 - 44*e + 68, 2*e^3 + 4*e^2 + 9*e - 28]; heckeEigenvalues := AssociativeArray(); for i := 1 to #heckeEigenvaluesArray do heckeEigenvalues[primes[i]] := heckeEigenvaluesArray[i]; end for; ALEigenvalues := AssociativeArray(); ALEigenvalues[ideal] := 1; // EXAMPLE: // pp := Factorization(2*ZF)[1][1]; // heckeEigenvalues[pp]; print "To reconstruct the Hilbert newform f, type f, iso := Explode(make_newform());"; function make_newform(); M := HilbertCuspForms(F, NN); S := NewSubspace(M); // SetVerbose("ModFrmHil", 1); NFD := NewformDecomposition(S); newforms := [* Eigenform(U) : U in NFD *]; if #newforms eq 0 then; print "No Hilbert newforms at this level"; return 0; end if; print "Testing ", #newforms, " possible newforms"; newforms := [* f: f in newforms | IsIsomorphic(BaseField(f), K) *]; print #newforms, " newforms have the correct Hecke field"; if #newforms eq 0 then; print "No Hilbert newform found with the correct Hecke field"; return 0; end if; autos := Automorphisms(K); xnewforms := [* *]; for f in newforms do; if K eq RationalField() then; Append(~xnewforms, [* f, autos[1] *]); else; flag, iso := IsIsomorphic(K,BaseField(f)); for a in autos do; Append(~xnewforms, [* f, a*iso *]); end for; end if; end for; newforms := xnewforms; for P in primes do; xnewforms := [* *]; for f_iso in newforms do; f, iso := Explode(f_iso); if HeckeEigenvalue(f,P) eq iso(heckeEigenvalues[P]) then; Append(~xnewforms, f_iso); end if; end for; newforms := xnewforms; if #newforms eq 0 then; print "No Hilbert newform found which matches the Hecke eigenvalues"; return 0; else if #newforms eq 1 then; print "success: unique match"; return newforms[1]; end if; end if; end for; print #newforms, "Hilbert newforms found which match the Hecke eigenvalues"; return newforms[1]; end function;