// Make newform 900.3.c.u in Magma, downloaded from the LMFDB on 28 March 2024. // To make the character of type GrpDrchElt, type "MakeCharacter_900_c();" // To make the character of type GrpDrchElt with Codomain the HeckeField, type "MakeCharacter_900_c_Hecke();" // To make the coeffs of the qexp of the newform in the Hecke field type "qexpCoeffs();" // To make the newform (type ModFrm), type "MakeNewformModFrm_900_3_c_u();". // This may take a long time! To see verbose output, uncomment the SetVerbose lines below. // The precision argument determines an initial guess on how many Fourier coefficients to use. // This guess is increased enough to uniquely determine the newform. // To make the Hecke irreducible modular symbols subspace (type ModSym) // containing the newform, type "MakeNewformModSym_900_3_c_u();". // This may take a long time! To see verbose output, uncomment the SetVerbose line below. // The default sign is -1. You can change this with the optional parameter "sign". function ConvertToHeckeField(input: pass_field := false, Kf := []) if not pass_field then poly := [16, -8, -8, 2, 3, 1, -2, -1, 1]; Kf := NumberField(Polynomial([elt : elt in poly])); AssignNames(~Kf, ["nu"]); end if; Rf_num := [[1, 0, 0, 0, 0, 0, 0, 0], [-1, 2, 2, 0, 0, 0, 0, 0], [8, 24, 8, -17, -9, 4, 3, -1], [8, 24, -8, -17, 7, 4, 3, -1], [0, 8, 0, -1, -1, 4, 3, -1], [-40, -24, 24, 5, -3, -4, 1, 5], [-9, 0, 3, 2, -1, -1, 0, 1], [296, 40, -88, -43, 29, 44, -15, -27]]; Rf_basisdens := [1, 1, 16, 16, 8, 16, 1, 16]; Rf_basisnums := ChangeUniverse([[z : z in elt] : elt in Rf_num], Kf); Rfbasis := [Rf_basisnums[i]/Rf_basisdens[i] : i in [1..Degree(Kf)]]; inp_vec := Vector(Rfbasis)*ChangeRing(Transpose(Matrix([[elt : elt in row] : row in input])),Kf); return Eltseq(inp_vec); end function; // To make the character of type GrpDrchElt, type "MakeCharacter_900_c();" function MakeCharacter_900_c() N := 900; order := 2; char_gens := [451, 101, 577]; v := [1, 2, 2]; // chi(gens[i]) = zeta^v[i] assert UnitGenerators(DirichletGroup(N)) eq char_gens; F := CyclotomicField(order); chi := DirichletCharacterFromValuesOnUnitGenerators(DirichletGroup(N,F),[F|F.1^e:e in v]); return MinimalBaseRingCharacter(chi); end function; // To make the character of type GrpDrchElt with Codomain the HeckeField, type "MakeCharacter_900_c_Hecke();" function MakeCharacter_900_c_Hecke(Kf) N := 900; order := 2; char_gens := [451, 101, 577]; char_values := [[-1, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0]]; assert UnitGenerators(DirichletGroup(N)) eq char_gens; values := ConvertToHeckeField(char_values : pass_field := true, Kf := Kf); // the value of chi on the gens as elements in the Hecke field F := Universe(values);// the Hecke field chi := DirichletCharacterFromValuesOnUnitGenerators(DirichletGroup(N,F),values); return chi; end function; function ExtendMultiplicatively(weight, aps, character) prec := NextPrime(NthPrime(#aps)) - 1; // we will able to figure out a_0 ... a_prec primes := PrimesUpTo(prec); prime_powers := primes; assert #primes eq #aps; log_prec := Floor(Log(prec)/Log(2)); // prec < 2^(log_prec+1) F := Universe(aps); FXY := PolynomialRing(F, 2); // 1/(1 - a_p T + p^(weight - 1) * char(p) T^2) = 1 + a_p T + a_{p^2} T^2 + ... R := PowerSeriesRing(FXY : Precision := log_prec + 1); recursion := Coefficients(1/(1 - X*T + Y*T^2)); coeffs := [F!0: i in [1..(prec+1)]]; coeffs[1] := 1; //a_1 for i := 1 to #primes do p := primes[i]; coeffs[p] := aps[i]; b := p^(weight - 1) * F!character(p); r := 2; p_power := p * p; //deals with powers of p while p_power le prec do Append(~prime_powers, p_power); coeffs[p_power] := Evaluate(recursion[r + 1], [aps[i], b]); p_power *:= p; r +:= 1; end while; end for; Sort(~prime_powers); for pp in prime_powers do for k := 1 to Floor(prec/pp) do if GCD(k, pp) eq 1 then coeffs[pp*k] := coeffs[pp]*coeffs[k]; end if; end for; end for; return coeffs; end function; function qexpCoeffs() // To make the coeffs of the qexp of the newform in the Hecke field type "qexpCoeffs();" weight := 3; raw_aps := [[1, 0, 0, 0, 0, -1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [-1, 0, 0, -1, 0, 1, 1, 0], [1, 0, -1, 0, -1, -2, 1, 1], [-1, -1, -2, -2, 0, -1, -1, -1], [1, 0, -4, 1, 2, 2, 0, 1], [4, -5, 1, 2, 1, -2, 3, 3], [-8, 5, 1, -8, 1, 6, -1, -3], [-5, 2, 5, 2, 3, -9, 2, 0], [0, 3, -5, 8, -5, 0, -1, -3], [17, 1, -8, 4, 6, 3, 1, 3], [2, 2, 2, 4, 2, 0, 2, 2], [0, -3, 0, 11, 0, 7, -1, -4], [-2, 5, -7, 6, -7, 0, 1, -3], [43, 2, 3, 4, 1, 1, 2, 2], [1, 4, -5, 0, -5, -6, 1, 1], [-28, -2, -8, 0, -4, 18, -2, 2], [-2, 11, -10, 1, -10, -7, -1, -2], [-6, 4, 2, -16, 2, 0, 2, 2], [32, -2, 8, -8, -4, -14, -2, -6], [-24, 19, 1, -10, 1, 22, -13, -17], [6, -15, 14, -13, 14, -1, 5, 10], [12, -2, -24, -4, 20, -22, -2, -2], [-54, 2, 20, -2, -4, -18, 2, -4], [23, 0, -7, 4, -1, 17, 0, 4], [-17, 4, 12, -17, 12, 21, -7, -8], [26, -5, -8, 15, -8, -33, -1, 12], [52, 4, 22, 0, 2, -30, 4, -4], [-33, -4, 14, -15, -8, -24, -4, -11], [3, -14, 16, -7, 16, 7, -1, 4], [7, 4, -5, 22, -5, -4, -13, -7], [-53, 4, 20, 3, -2, -14, 4, -1], [-26, -7, 5, -6, 5, 42, 19, -9], [85, 2, 7, 2, 1, -7, 2, 0], [-10, -5, 9, -28, 9, 8, 13, 7], [39, -1, -16, -8, 26, -51, -1, -7], [-38, 3, 10, -31, 10, 45, 15, -10], [-16, -13, 17, -30, 17, 24, 17, 5], [15, -2, 1, -14, 15, -57, -2, -12], [-47, 42, -3, -36, -3, 30, -17, -25], [-104, 8, 42, 12, -18, 10, 8, 4], [14, -22, -2, 18, -2, -2, 20, 10], [168, 0, 28, -6, -16, -8, 0, -6], [123, 0, -5, 6, -7, 31, 0, 6], [18, -23, 25, -14, 25, -10, -5, 15], [2, 19, 5, -36, 5, -28, -19, 7], [23, 0, -2, -27, -2, -49, 5, 26], [-32, 15, 20, -27, 20, 37, -23, -20], [18, -6, 46, -28, -26, -44, -6, -22], [57, 0, -18, 11, -4, 48, 0, 11], [2, -20, 8, 38, 8, 30, -2, -12], [54, 4, -64, 24, 40, 28, 4, 20], [59, -34, 3, 48, 3, -46, -7, 21], [51, -12, 2, -23, -28, 20, -12, -11], [20, -79, 39, 6, 39, 32, 47, 27], [111, -6, 33, -14, -41, 27, -6, -8], [26, -13, -23, 32, -23, -28, 25, 15], [49, -5, 22, -16, -20, -9, -5, -11], [84, 8, -20, 22, 24, 8, 8, 14], [-22, -39, 38, -1, 38, 71, 13, -10], [-45, -4, -41, -2, 21, -1, -4, 2], [-68, 51, 14, -41, 14, 63, -43, -46], [-54, 70, -16, -36, -16, 20, -36, -36], [-184, 16, 56, 22, -4, -20, 16, 6], [135, -16, -13, -30, -23, 15, -16, -14], [-36, 59, -49, 56, -49, 28, -25, -51], [-92, -2, -12, 0, 0, 14, -2, 2], [-12, 11, 2, 19, 2, 23, -23, -22], [68, -6, -4, 8, -48, 122, -6, 14], [-3, 16, 42, 19, 16, -52, 16, 3], [-40, -18, -32, 50, -32, 78, 70, -20], [15, 20, -14, -11, -14, -45, -11, 10], [-61, -21, 36, -44, -74, 45, -21, -23], [14, -5, -21, 86, -21, 14, -11, -23], [30, -21, -23, 16, -23, -38, 43, 29], [101, -24, -29, -48, -19, -5, -24, -24], [301, 3, -56, 14, 46, -11, 3, 11], [152, -10, -18, -34, 26, -92, -10, -24], [-70, 4, -72, 28, 40, 44, 4, 24], [-21, 80, -25, -62, -25, -52, -41, -7], [34, -10, -90, -16, 62, -56, -10, -6], [4, 16, 4, -80, 4, -52, 8, 32], [-164, -10, -44, 0, -16, 86, -10, 10], [-10, 45, -7, -110, -7, -66, 3, 31], [56, 9, 12, -53, 12, -109, -33, 44], [76, 20, -62, 72, 38, 110, 20, 52], [-138, 22, 152, 18, -56, -26, 22, -4], [45, -6, -29, -18, 29, -59, -6, -12], [49, 4, 30, 3, 30, -59, -77, 6], [62, -37, -24, 51, -24, -61, 35, 36], [30, -34, 22, -18, 22, -26, 12, 30], [61, -68, 0, 9, 0, -53, 67, 60], [-69, -58, 89, -106, 89, 124, 41, 3], [112, -147, -5, 118, -5, -38, 113, 73], [-102, 71, -19, -28, -19, 94, -13, -63], [-129, 16, -43, 56, 27, 85, 16, 40], [16, 8, 14, 28, -22, 78, 8, 20], [122, -123, 24, 77, 24, -71, 49, 72], [112, 20, 82, 16, 6, -82, 20, -4], [-28, 39, 0, -11, 0, 17, -39, -28], [-73, -6, -139, 18, 67, 47, -6, 24], [24, -71, 58, -31, 58, 13, 23, 34], [-724, 18, 30, 30, 18, -24, 18, 12], [-44, -105, 123, -64, 123, 148, 27, 1], [-398, -26, -96, -66, 72, -154, -26, -40], [-102, 99, -12, -125, -12, 35, -17, -32], [115, -28, -130, -11, -16, 168, -28, 17], [44, -42, -52, 26, -52, -58, 106, 56], [54, 52, 68, 76, 92, -152, 52, 24], [41, 46, 12, -25, 12, -91, -95, 4], [-111, 23, 72, 70, -74, 193, 23, 47], [-443, 12, -22, 15, 64, -88, 12, 3], [130, 5, -55, 110, -55, -170, -45, 35], [4, -3, -23, 96, -23, 32, -11, -33], [-178, -8, 118, -34, -98, 18, -8, -26], [-214, 83, 30, -187, 30, 201, 31, -70], [34, 121, -89, -20, -89, -166, -55, 11], [11, -8, -95, 20, 7, 129, -8, 28], [83, 52, -95, 56, -95, -170, -5, 35], [476, 6, -20, 4, 48, -74, 6, -2], [-48, 30, -156, 68, 200, -138, 30, 38], [563, 24, 41, 68, -33, 137, 24, 44], [62, 9, -20, 89, -20, -63, -59, -8], [60, 3, -37, -84, -37, -152, 63, 89], [-409, -36, -63, -16, -121, 309, -36, 20], [-66, 42, -34, 72, 142, -148, 42, 30], [152, -90, -6, 124, -6, -124, 6, 62], [25, -68, 24, 93, 24, 55, 7, -12], [165, -1, 114, 4, -128, 151, -1, 5], [-152, 85, 7, -206, 7, 86, 41, -19], [98, -133, -49, 146, -49, -32, 151, 67], [-184, 143, 35, -260, 35, 92, -45, -51], [-119, 23, 250, 16, -144, 47, 23, -7], [148, 4, -22, -40, 126, -314, 4, -44], [-534, 8, 152, 24, -152, 192, 8, 16], [-705, -4, 115, -34, -71, -37, -4, -30], [106, -37, -64, 79, -64, -133, 59, 64], [823, 2, 13, -30, 59, -193, 2, -32], [-522, -44, -186, -102, 126, -226, -44, -58], [-162, 75, -47, -84, -47, 140, 81, -53], [375, -22, -99, -58, 83, -161, -22, -36], [57, -126, 106, 17, 106, 39, -7, 30], [156, -13, -24, -15, -24, -247, -15, 104], [228, -32, 6, -76, -46, -34, -32, -44], [-108, -58, 56, 14, 56, 226, 50, -60], [-423, 3, -84, 70, -38, 297, 3, 67], [-627, 0, 36, -35, 34, -174, 0, -35], [-34, -53, 87, -190, 87, 26, 61, 61], [192, -131, 21, 76, 21, -174, 31, 113], [363, 19, 44, 28, 14, -35, 19, 9], [-460, 26, -108, 148, -32, 442, 26, 122], [126, -37, -38, 93, -38, -143, 3, 54], [-204, 127, 89, -110, 89, 232, -167, -155], [-80, -79, 106, -159, 106, 133, 79, 26], [-52, -34, -18, 100, -18, 136, 54, -50], [-124, -51, 83, -102, 83, 202, 65, -27], [-148, -4, 206, 12, -254, 330, -4, 16], [-366, -24, 12, -80, 4, -156, -24, -56], [1277, 16, 31, 12, 41, -105, 16, -4], [-48, -141, 38, 91, 38, 207, 133, -18], [95, 72, 224, 119, -30, 2, 72, 47], [-21, 50, -70, 83, -70, 13, -1, -42], [51, 94, 15, -268, 15, -250, -55, 105], [-379, -24, 168, -143, -26, -378, -24, -119], [-122, 151, 11, -202, 11, 12, -81, -41], [34, -31, 95, -80, 95, -28, -73, 25], [479, -55, 112, -130, -182, 47, -55, -75]]; aps := ConvertToHeckeField(raw_aps); chi := MakeCharacter_900_c_Hecke(Universe(aps)); return ExtendMultiplicatively(weight, aps, chi); end function; // To make the newform (type ModFrm), type "MakeNewformModFrm_900_3_c_u();". // This may take a long time! To see verbose output, uncomment the SetVerbose lines below. // The precision argument determines an initial guess on how many Fourier coefficients to use. // This guess is increased enough to uniquely determine the newform. function MakeNewformModFrm_900_3_c_u(:prec:=8) chi := MakeCharacter_900_c(); f_vec := qexpCoeffs(); Kf := Universe(f_vec); // SetVerbose("ModularForms", true); // SetVerbose("ModularSymbols", true); S := CuspidalSubspace(ModularForms(chi, 3)); S := BaseChange(S, Kf); maxprec := NextPrime(997) - 1; while true do trunc_vec := Vector(Kf, [0] cat [f_vec[i]: i in [1..prec]]); B := Basis(S, prec + 1); S_basismat := Matrix([AbsEltseq(g): g in B]); if Rank(S_basismat) eq Min(NumberOfRows(S_basismat), NumberOfColumns(S_basismat)) then S_basismat := ChangeRing(S_basismat,Kf); f_lincom := Solution(S_basismat,trunc_vec); f := &+[f_lincom[i]*Basis(S)[i] : i in [1..#Basis(S)]]; return f; end if; error if prec eq maxprec, "Unable to distinguish newform within newspace"; prec := Min(Ceiling(1.25 * prec), maxprec); end while; end function; // To make the Hecke irreducible modular symbols subspace (type ModSym) // containing the newform, type "MakeNewformModSym_900_3_c_u();". // This may take a long time! To see verbose output, uncomment the SetVerbose line below. // The default sign is -1. You can change this with the optional parameter "sign". function MakeNewformModSym_900_3_c_u( : sign := -1) R := PolynomialRing(Rationals()); chi := MakeCharacter_900_c(); // SetVerbose("ModularSymbols", true); Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,3,sign))); Vf := Kernel([<7,R![65536, 0, 188416, 0, 12032, 0, 224, 0, 1]>,<13,R![-12464, -5792, -472, 8, 1]>,<17,R![-8816, 3840, -424, 0, 1]>],Snew); return Vf; end function;