// Make newform 1521.4.a.l in Magma, downloaded from the LMFDB on 29 March 2024. // To make the character of type GrpDrchElt, type "MakeCharacter_1521_a();" // To make the coeffs of the qexp of the newform in the Hecke field type "qexpCoeffs();" // To make the newform (type ModFrm), type "MakeNewformModFrm_1521_4_a_l();". // 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_1521_4_a_l();". // 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 := [-4, -1, 1]; Kf := NumberField(Polynomial([elt : elt in poly])); AssignNames(~Kf, ["nu"]); end if; Rfbasis := [Kf.1^i : i in [0..Degree(Kf)-1]]; 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_1521_a();" function MakeCharacter_1521_a() N := 1521; order := 1; char_gens := [677, 847]; v := [1, 1]; // 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; function MakeCharacter_1521_a_Hecke(Kf) return MakeCharacter_1521_a(); 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 := 4; raw_aps := [[-2, -1], [0, 0], [-10, 5], [-7, -1], [1, 15], [0, 0], [-43, 16], [73, -5], [-89, 33], [13, -60], [120, -100], [73, 44], [259, 20], [179, 97], [100, -140], [-190, -165], [-377, -55], [351, -200], [283, -91], [11, 105], [-250, -85], [140, -40], [180, -100], [523, -125], [-27, 469], [-151, -320], [-1080, -320], [367, 601], [230, 260], [-659, 388], [1853, -481], [-820, 840], [663, -16], [-297, 245], [-1913, 40], [-960, 540], [254, 417], [781, 1103], [993, -1721], [-1771, -223], [-473, 445], [-970, 105], [-2159, 335], [1421, -352], [-1313, 1731], [-2157, 1325], [-111, -945], [1111, 33], [1823, -1051], [-330, -1700], [4162, 276], [5576, -300], [989, -2680], [-5691, -45], [1493, -116], [3831, -1587], [2553, 45], [-3921, -695], [-5093, -804], [-7990, 725], [2601, 303], [3359, -3148], [300, -2120], [-5080, -1120], [-3450, -1980], [-630, -2355], [-3299, 2815], [2690, -1295], [4717, -349], [-1323, -815], [3511, -3552], [5304, -1200], [-807, -3081], [-2069, 5088], [-193, -5355], [-4729, 1653], [-3890, 3135], [-6287, 3189], [1139, -280], [-5163, 1020], [-11373, -395], [-8862, -625], [-10251, 2455], [-2021, -2488], [7677, 975], [11260, -2100], [-337, 4295], [-3143, 7016], [5299, -5860], [-14120, 1080], [6920, -5220], [-3867, -2225], [-7763, 1111], [59, -1175], [3220, -6500], [-3951, 1027], [9287, 4540], [-6738, 6575], [-6299, 5243], [3110, -7785], [5860, -6020], [-15133, -3004], [-12631, -3513], [1253, 3645], [5620, -2880], [3214, 4047], [11853, -5001], [6522, 81], [-6380, 1600], [14291, -3080], [11363, -3351], [-18799, -1492], [14607, 2876], [-14420, 2840], [-4619, 9175], [16029, -4840], [20949, -3973], [-9997, -2011], [2229, -3743], [-14027, -5585], [-16479, 6000], [-1081, 8612], [-19210, -4580], [20711, -5967], [12519, 8305], [14150, -8220], [6413, -1720], [8753, 1575], [8920, -5860], [-6890, 17855], [-20157, 2225], [19709, -8193], [-3671, -3645], [3747, -5649], [-249, 5415], [16833, -3255], [-1361, 13907], [15053, -941], [53, -7471], [10573, -8660], [-13968, 1700], [-33641, 2795], [-4621, 7197], [-9236, -13728], [5843, 7220], [-14293, -4055], [-4590, 5755], [18630, -8065], [-4820, 4480], [16192, 11516], [-38583, 3176], [-11691, -8140], [-11140, 15140], [-46117, 2349], [-3143, -13149], [-25760, -3420], [-11737, 13765], [-24973, 160], [-21350, 3605], [10390, 1760], [1033, 2499], [1261, 8693], [2160, -10040], [-25699, 10135], [-7113, 15716], [-26640, 8500], [3069, 3695], [-7393, 1496], [22970, 7380], [-8942, 22259], [-25340, -1200], [-1319, 9640], [-15919, -9745], [-16691, -2648], [40824, -800], [-6867, -4400], [14291, -18435], [8830, 10745], [-29059, 15603], [4307, -12505], [35300, 8260], [25828, -16300], [-52850, 6145], [47350, -13260], [19049, 3367], [-27507, 27460], [22090, 3820], [8620, 8880], [-807, -80], [-3381, 22505], [18491, -25172], [-62949, 2853], [-9160, 7720], [-17921, -11125], [-2227, -11541], [-8239, 10753], [62330, -4805], [5191, 2428], [370, 6505], [-72960, -1160], [-33957, 19580], [5431, 2025], [12437, -12384], [-16590, 28425], [37077, -3365], [12557, -20764], [-45060, 5580], [-24579, -11637], [-39677, 17440], [3519, -8855], [-66793, 8636], [22370, 11120], [61789, -1773], [66767, 6021], [-7057, 85], [-44338, -17025], [4120, -17600], [-47351, -5820], [35573, -10241], [-1502, 6804], [21891, -7540], [-7736, 2700], [-7050, 33905], [-54739, 21283], [12107, -23559], [41750, 3345], [-53191, 21612], [-48383, 8895], [-18857, 22009], [12040, -30460], [59911, -23192], [-58907, 14055], [-18409, 20725], [-42270, 4455], [17812, -3224], [-2544, 12688], [-33027, 7565], [63451, 11288], [-64807, 23835], [6219, -30895], [821, -4077], [-60851, 3275], [3499, -32983], [8437, 36580], [839, 17792], [-50504, -6700], [-31983, 23691], [-77659, -125], [22593, 27795], [-21401, 47937], [66517, -8879], [3131, 27195], [2096, 46508], [18823, -10100], [-19930, 30740], [42943, 15005], [-28101, -37145], [-22333, 3581], [46710, -36340], [56497, -13064], [-19792, -5716], [42563, 15509], [54250, 755], [-741, -22508], [-87993, 9636], [16067, 31265], [13947, -18225], [43810, -43595], [101769, -8693], [37389, 6972], [-69290, -7475], [-22924, -11552], [-41539, 62608], [30707, -16875], [68243, 7219], [20479, 12497], [10607, -45179], [-22126, 875], [-76071, -14140], [-40291, -12425], [-40621, 56977], [-136581, 2205], [-39740, 15780], [37881, -45640], [-78916, 51332], [37912, -33300], [105002, -15179], [-23930, -19235], [-46847, 34415], [37717, -22540], [110229, 11825], [126693, -2661], [-49, 15548], [96599, -11475], [3991, -39837], [20330, 22435], [-28680, 50460], [-47019, -26292], [-52273, 4425], [74287, -15619], [60379, 20132], [49610, -58215], [-59567, -12505], [-50268, 27236], [-103681, 42145], [-82647, 33204], [13200, 46580], [-59290, -29255], [-3767, 7415], [129230, 11065], [1801, 23643], [41363, -44625], [103750, -45885], [-41591, -10073], [31887, 24681], [15823, 13700], [-52477, 30885], [-156560, 8800], [-23911, -4943], [164133, -19380], [-49900, -16740], [28970, -23060], [-7551, -22300], [-95581, 40617], [-65830, -13040], [-114641, -2700], [59140, -77140], [-97979, -14197], [4327, 3641], [-32871, 19332], [-12419, -65520], [59850, -88725], [10377, -31285], [-22809, -35107], [-121981, -13655], [-157820, -12200], [43017, 58620], [-35521, 35847], [48469, 51360], [-72456, -28188], [-142930, 2100], [56993, -12376], [25746, 27825], [2249, 37475], [163051, -177], [-500, -69260], [70678, -16875], [117117, -55169], [-70651, -2405], [152497, 18941], [-41600, 23640], [79497, -37639], [-137089, -19660], [-15349, -19087], [95587, 15580], [-35010, 53555], [-64893, 23785], [-13121, 14025], [138270, -13205], [-148160, 9180], [39257, 9696], [176209, 4220], [-92737, -22211], [179993, -4965], [-31443, 44371], [40171, -15597], [1827, -85929], [-3031, -20033], [-5710, -28455], [24929, 37535], [64387, -36035], [-102880, -37740], [-157390, 27415], [155289, 235], [-24013, 73676], [-83016, -25600], [-70639, 54815], [101209, -77023], [176673, -43820], [-108517, -59636], [16562, 20900], [2811, 71508], [-42880, -67800], [21710, 52020], [42097, -64765], [26481, -26097], [-37219, 7575], [-61270, -28140], [-73120, -2580], [47197, -77809], [37937, -31560], [60499, 42852], [78980, -6100], [-36363, 68151], [5619, -17815], [137739, 5747], [110603, -7875], [-130730, 38880], [73540, 41160], [121691, 28240], [45837, -30055], [41689, 46177], [192483, -7351], [-39286, 28297], [-167593, -16840], [86019, 53045], [-122307, 96889], [84459, -96680], [-236100, -20540], [160937, -70165], [-33910, -24215], [14697, 75916], [59329, 62667], [77831, -46315], [-14597, 73904], [88390, 84475], [20923, 6045], [-35440, -42880], [159847, 10191], [-79039, 136543], [77957, 57640], [-44230, 93535], [-28203, 94191], [15324, 9300], [70309, -62323], [81287, 55836], [-68380, -16900], [86050, 41605], [-60891, -12365], [38857, 74235]]; aps := ConvertToHeckeField(raw_aps); chi := MakeCharacter_1521_a_Hecke(Universe(aps)); return ExtendMultiplicatively(weight, aps, chi); end function; // To make the newform (type ModFrm), type "MakeNewformModFrm_1521_4_a_l();". // 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_1521_4_a_l(:prec:=2) chi := MakeCharacter_1521_a(); f_vec := qexpCoeffs(); Kf := Universe(f_vec); // SetVerbose("ModularForms", true); // SetVerbose("ModularSymbols", true); S := CuspidalSubspace(ModularForms(chi, 4)); S := BaseChange(S, Kf); maxprec := NextPrime(2999) - 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_1521_4_a_l();". // 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_1521_4_a_l( : sign := -1) R := PolynomialRing(Rationals()); chi := MakeCharacter_1521_a(); // SetVerbose("ModularSymbols", true); Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,4,sign))); Vf := Kernel([<2,R![2, 5, 1]>,<5,R![-50, 15, 1]>,<7,R![52, 15, 1]>],Snew); return Vf; end function;