/* 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 + x^3 + 4*x^2 - 3*x + 9; K := NumberField(heckePol); heckeEigenvaluesArray := [e, -1/4*e^3 - e + 3/4, -2, 1/4*e^3 + e^2 + e - 3/4, -1/4*e^3 - e^2 - e - 9/4, 1/12*e^3 + 1/3*e^2 - 5/3*e + 3/4, 5/12*e^3 - 1/3*e^2 + 5/3*e - 5/4, 3/4*e^3 + e^2 + 3*e - 9/4, -1/4*e^3 - e^2 - 3*e - 9/4, -7/12*e^3 - 1/3*e^2 - 7/3*e + 7/4, 1/12*e^3 + 1/3*e^2 + 7/3*e + 3/4, -7/12*e^3 - 7/3*e^2 - 7/3*e + 7/4, 7/12*e^3 + 7/3*e^2 + 7/3*e + 21/4, -1/2*e^3 + 19/2, -1/2*e^3 + 15/2, -1/2*e^3 + 15/2, -5/12*e^3 - 5/3*e^2 + 1/3*e - 15/4, -1/12*e^3 + 5/3*e^2 - 1/3*e + 1/4, -3/4*e^3 + e^2 - 3*e + 9/4, -1/4*e^3 - e^2 + 3*e - 9/4, 1/2*e^3 - 11/2, 1/2*e^3 - 11/2, 18, -1/4*e^3 - e^2 - e - 9/4, 1/4*e^3 + e^2 + e - 3/4, -3/2*e^3 + 37/2, 1/4*e^3 + 3*e^2 + e - 3/4, -3/4*e^3 - 3*e^2 - e - 27/4, -19/12*e^3 - 19/3*e^2 - 19/3*e + 19/4, 19/12*e^3 + 19/3*e^2 + 19/3*e + 57/4, -3/2*e^3 + 13/2, -3/2*e^3 + 13/2, -1/4*e^3 - e^2 - 7*e - 9/4, 7/4*e^3 + e^2 + 7*e - 21/4, -5/4*e^3 - 5*e^2 - 5*e - 45/4, 5/4*e^3 + 5*e^2 + 5*e - 15/4, -3/4*e^3 - e^2 - 3*e + 9/4, 1/4*e^3 + e^2 + 3*e + 9/4, -3/4*e^3 - 3*e^2 - 17*e - 27/4, 17/4*e^3 + 3*e^2 + 17*e - 51/4, -e^3 + 5, -e^3 + 5, -25/12*e^3 - 13/3*e^2 - 25/3*e + 25/4, 13/12*e^3 + 13/3*e^2 + 25/3*e + 39/4, -5/12*e^3 - 5/3*e^2 + 19/3*e - 15/4, -19/12*e^3 + 5/3*e^2 - 19/3*e + 19/4, -1/12*e^3 - 1/3*e^2 - 1/3*e + 1/4, 1/12*e^3 + 1/3*e^2 + 1/3*e + 3/4, e^3 + 3, e^3 + 3, -15/4*e^3 - 3*e^2 - 15*e + 45/4, 3/4*e^3 + 3*e^2 + 15*e + 27/4, -43/12*e^3 - 19/3*e^2 - 43/3*e + 43/4, 19/12*e^3 + 19/3*e^2 + 43/3*e + 57/4, 3*e^3 - 21, 3*e^3 - 21, -5/12*e^3 - 5/3*e^2 - 41/3*e - 15/4, 41/12*e^3 + 5/3*e^2 + 41/3*e - 41/4, -11/4*e^3 - 3*e^2 - 11*e + 33/4, 3/4*e^3 + 3*e^2 + 11*e + 27/4, 1/12*e^3 + 1/3*e^2 - 17/3*e + 3/4, 17/12*e^3 - 1/3*e^2 + 17/3*e - 17/4, e^3 - 3, e^3 - 3, -23/12*e^3 - 23/3*e^2 - 17/3*e - 69/4, 17/12*e^3 + 23/3*e^2 + 17/3*e - 17/4, -5/12*e^3 - 5/3*e^2 - 23/3*e - 15/4, 23/12*e^3 + 5/3*e^2 + 23/3*e - 23/4, -11/4*e^3 - 5*e^2 - 11*e + 33/4, 5/4*e^3 + 5*e^2 + 11*e + 45/4, 6, 6, 9/4*e^3 + 5*e^2 + 9*e - 27/4, -5/4*e^3 - 5*e^2 - 9*e - 45/4, 5/12*e^3 - 7/3*e^2 + 5/3*e - 5/4, 7/12*e^3 + 7/3*e^2 - 5/3*e + 21/4, 1/2*e^3 + 21/2, 1/2*e^3 + 21/2, 3/2*e^3 - 41/2, 3/2*e^3 - 41/2, -3/2*e^3 - 3/2, -3/2*e^3 - 3/2, -1/4*e^3 - e^2 - 13*e - 9/4, 13/4*e^3 + e^2 + 13*e - 39/4, -19/12*e^3 - 7/3*e^2 - 19/3*e + 19/4, 7/12*e^3 + 7/3*e^2 + 19/3*e + 21/4, -2*e^3 + 8, -2*e^3 + 8, 3*e^3 - 3, 3*e^3 - 3, 1/4*e^3 + e^2 - 9*e + 9/4, 9/4*e^3 - e^2 + 9*e - 27/4, -17/12*e^3 - 17/3*e^2 - 17/3*e - 51/4, 17/12*e^3 + 17/3*e^2 + 17/3*e - 17/4, -e^3 - 13, -e^3 - 13, 11/4*e^3 + 7*e^2 + 11*e - 33/4, -7/4*e^3 - 7*e^2 - 11*e - 63/4, 5/4*e^3 + 5*e^2 + 11*e + 45/4, -11/4*e^3 - 5*e^2 - 11*e + 33/4, -3/4*e^3 - 3*e^2 - 15*e - 27/4, 15/4*e^3 + 3*e^2 + 15*e - 45/4, 6*e^3 - 28, -5/12*e^3 - 5/3*e^2 - 17/3*e - 15/4, 17/12*e^3 + 5/3*e^2 + 17/3*e - 17/4, 15/4*e^3 + 9*e^2 + 15*e - 45/4, -9/4*e^3 - 9*e^2 - 15*e - 81/4, 7/4*e^3 - 3*e^2 + 7*e - 21/4, 3/4*e^3 + 3*e^2 - 7*e + 27/4, 23/12*e^3 - 1/3*e^2 + 23/3*e - 23/4, 1/12*e^3 + 1/3*e^2 - 23/3*e + 3/4, 83/12*e^3 + 17/3*e^2 + 83/3*e - 83/4, -17/12*e^3 - 17/3*e^2 - 83/3*e - 51/4, 9/4*e^3 + 3*e^2 + 9*e - 27/4, -3/4*e^3 - 3*e^2 - 9*e - 27/4, 5/4*e^3 + 5*e^2 - e + 45/4, 1/4*e^3 - 5*e^2 + e - 3/4, -13/4*e^3 - e^2 - 13*e + 39/4, 1/4*e^3 + e^2 + 13*e + 9/4, 41/12*e^3 - 7/3*e^2 + 41/3*e - 41/4, 7/12*e^3 + 7/3*e^2 - 41/3*e + 21/4, 7/2*e^3 - 45/2, 7/2*e^3 - 45/2, -2*e^3 + 24, -2*e^3 + 24, 2*e^3 - 40, 2*e^3 - 40, -73/12*e^3 - 31/3*e^2 - 73/3*e + 73/4, 31/12*e^3 + 31/3*e^2 + 73/3*e + 93/4, 9/4*e^3 + 9*e^2 + 9*e - 27/4, -9/4*e^3 - 9*e^2 - 9*e - 81/4, 11/4*e^3 + 11*e^2 + 15*e + 99/4, -15/4*e^3 - 11*e^2 - 15*e + 45/4, -11/12*e^3 - 11/3*e^2 + 37/3*e - 33/4, -37/12*e^3 + 11/3*e^2 - 37/3*e + 37/4, -5/2*e^3 + 63/2, -5/2*e^3 + 63/2, 3/4*e^3 + 3*e^2 + 3*e - 9/4, -3/4*e^3 - 3*e^2 - 3*e - 27/4, -16, -16, 1/4*e^3 + e^2 + 7*e + 9/4, -7/4*e^3 - e^2 - 7*e + 21/4, -3/4*e^3 + e^2 - 3*e + 9/4, -1/4*e^3 - e^2 + 3*e - 9/4, 32, 41/12*e^3 + 35/3*e^2 + 41/3*e - 41/4, -35/12*e^3 - 35/3*e^2 - 41/3*e - 105/4, -3/4*e^3 - 9*e^2 - 3*e + 9/4, 9/4*e^3 + 9*e^2 + 3*e + 81/4, -7/12*e^3 - 7/3*e^2 - 7/3*e + 7/4, 7/12*e^3 + 7/3*e^2 + 7/3*e + 21/4, 1/4*e^3 + e^2 - e + 9/4, 1/4*e^3 - e^2 + e - 3/4, 3/2*e^3 - 69/2, 3/2*e^3 - 69/2, -5/4*e^3 - 5*e^2 - 17*e - 45/4, 17/4*e^3 + 5*e^2 + 17*e - 51/4, 29/12*e^3 + 47/3*e^2 + 29/3*e - 29/4, -47/12*e^3 - 47/3*e^2 - 29/3*e - 141/4, -2*e^3 + 6, -2*e^3 + 6, 5/2*e^3 - 63/2, 5/2*e^3 - 63/2, -10, -49/12*e^3 - 7/3*e^2 - 49/3*e + 49/4, 7/12*e^3 + 7/3*e^2 + 49/3*e + 21/4, 3/4*e^3 + 3*e^2 - 15*e + 27/4, 15/4*e^3 - 3*e^2 + 15*e - 45/4, -31/4*e^3 - 11*e^2 - 31*e + 93/4, 11/4*e^3 + 11*e^2 + 31*e + 99/4, 1/12*e^3 + 1/3*e^2 - 53/3*e + 3/4, 53/12*e^3 - 1/3*e^2 + 53/3*e - 53/4]; heckeEigenvalues := AssociativeArray(); for i := 1 to #heckeEigenvaluesArray do heckeEigenvalues[primes[i]] := heckeEigenvaluesArray[i]; end for; ALEigenvalues := AssociativeArray(); // 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;