// Make newform 1728.4.a.bj in Magma, downloaded from the LMFDB on 29 March 2024. // To make the character of type GrpDrchElt, type "MakeCharacter_1728_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_1728_4_a_bj();". // 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_1728_4_a_bj();". // 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 := [-1, -1, 1]; Kf := NumberField(Polynomial([elt : elt in poly])); AssignNames(~Kf, ["nu"]); end if; Rf_num := [[1, 0], [-6, 12]]; Rf_basisdens := [1, 1]; 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_1728_a();" function MakeCharacter_1728_a() N := 1728; order := 1; char_gens := [703, 325, 1217]; v := [1, 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_1728_a_Hecke(Kf) return MakeCharacter_1728_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 := [[0, 0], [0, 0], [-2, -1], [3, -2], [26, -3], [-13, 2], [94, -1], [-37, -8], [-74, -5], [-144, -8], [124, -8], [-171, -10], [0, -32], [-128, -4], [-66, -1], [-476, -14], [-502, 21], [17, 34], [-433, -16], [-388, 30], [937, -12], [-91, 26], [-668, -46], [438, -21], [-19, 88], [720, 72], [95, 50], [366, 103], [-130, 100], [-1434, 35], [1004, 92], [-440, -92], [-294, 29], [-171, 100], [-724, 118], [-2711, -14], [2114, -60], [453, -48], [-354, -81], [-1152, -32], [876, -10], [1815, -182], [-1806, 121], [1343, 28], [294, -13], [983, -126], [241, -196], [-2188, -256], [-1452, -150], [3614, 184], [-2824, -164], [-4468, 134], [57, 52], [-3080, 348], [-860, -302], [-812, -342], [3650, -31], [5857, 26], [3638, -348], [-3392, -32], [-4456, 4], [-3894, -155], [2088, -172], [210, -87], [4611, -204], [156, 206], [-6595, -4], [4101, -16], [-156, -302], [933, -294], [-380, -158], [-4254, -303], [5399, -70], [-3731, 366], [2135, 468], [1296, -216], [-2834, 599], [2290, -492], [10668, -330], [1833, 16], [7986, -151], [-3773, 258], [-11242, -437], [490, 156], [36, 504], [5812, 346], [7106, 753], [2318, 1004], [-1118, -303], [-365, 462], [1794, 337], [-12124, 178], [371, -1030], [-7122, 7], [7344, -424], [-5706, 283], [-6330, -189], [12034, -207], [6631, 520], [2979, -186], [-1867, -212], [20242, 105], [-3472, 1304], [9182, -321], [-14109, -884], [-12541, -788], [-682, -357], [7556, 1122], [15408, -872], [-1838, -644], [-13853, 234], [2953, -806], [-12942, 329], [-2549, -408], [-1087, 378], [-1468, -990], [-3552, 996], [17168, -856], [4452, -78], [132, 1410], [-1559, -1406], [-2549, 832], [20518, -749], [6968, 188], [1808, 1044], [-18702, 217], [-11309, -1210], [9892, 722], [-18372, -192], [-15650, 1228], [25880, -228], [-12026, 1795], [15477, -578], [-10661, 902], [-4898, 2655], [-33841, -480], [15708, -1490], [-11069, -112], [-11384, -1244], [4828, -338], [-6512, -2916], [-6762, 907], [-20951, 1470], [-38270, -559], [1583, 898], [-33852, -830], [-7931, -1350], [8796, 366], [-31527, -1028], [-23858, -313], [-4755, 62], [-5246, 209], [21125, 1748], [1124, -1358], [-16721, -1224], [-5864, -2004], [6140, -912], [-2420, 2022], [-3981, -3036], [-7926, 1349], [13446, -1997], [-8082, 3303], [1789, -538], [-3378, -169], [-39324, -878], [20370, 873], [40871, -982], [36938, 324], [9101, 772], [18010, 397], [4884, -2326], [-10542, 1692], [-5698, -1153], [17485, -1800], [-27713, -1422], [39004, 238], [6152, 700], [-10542, -791], [31133, 2658], [30154, -2312], [-6563, 738], [-47588, -978], [1302, 2684], [-58614, 181], [-12840, 780], [17868, 1798], [-28945, -2354], [40113, 684], [5965, -932], [2526, 1199], [16657, -1660], [28644, 3058], [-3791, 2256], [17458, -1639], [246, -4757], [-4886, -3323], [-22973, -3172], [13607, 410], [23086, -3097], [-10212, -1906], [-8494, -119], [-3167, 1954], [-30833, -1818], [14821, -3632], [43032, 1388], [3732, -4470], [2737, -2858], [5106, -2647], [53170, -439], [-18137, 948], [37479, 472], [-40290, -689], [-2563, -482], [6754, 3233], [3896, 2620], [-24769, 2376], [64060, 312], [-54490, -1373], [-60780, 298], [6204, 958], [-32273, 962], [-43308, -816], [-14568, 4012], [44692, -2872], [35790, 3223], [76585, 518], [2598, -3357], [43998, -1745], [5751, -2210], [19034, -2531], [27, -5182], [22024, 2976], [-25508, -5004], [-41782, -3051], [-23463, 5216], [18458, 1709], [-5659, -6060], [-43406, 4121], [-15116, 3322], [-59828, -3930], [-12228, 4414], [-5413, -700], [35177, -2694], [8453, 2074], [24174, -3609], [26258, 41], [-54211, -986], [-40752, -280], [24064, 5360], [-10024, 2604], [33870, 1908], [-18294, -4299], [-22714, 4739], [-12467, -1500], [66366, 3327], [-20106, -4373], [-39233, -3030], [-60920, 2292], [68544, 3040], [35074, 1940], [56699, 2930], [20382, 6847], [17723, -2514], [47073, -6222], [44516, 5682], [-6520, -772], [46826, -1291], [-56708, -674], [2456, -2008], [24770, -8863], [32033, 1002], [-13183, 5388], [1318, 2352], [-48451, 3262], [32950, 2908], [-73745, -1614], [108354, -687], [-115646, 788], [-26030, -6460], [-28168, -5156], [-61250, -129], [126860, -460], [-114560, -1664], [23413, -5906], [-31615, 4676], [-33638, -6835], [80681, -4092], [-31140, -2706], [-28877, 3114], [-60110, -6743], [108622, 967], [2280, 2900], [18452, 7690], [98208, -2704], [-51222, -184], [10096, 728], [9307, 4134], [-23202, -7313], [-74136, 6292], [82739, 5988], [76475, -536], [2096, -7496], [-38324, 10360], [9632, 688], [88497, -4852], [-93946, 4780], [63582, -6625], [129571, -1930], [28640, 2416], [5917, -6594], [69918, -4337], [39192, -1844], [-24296, 4172], [-5795, -948], [-30758, 8941], [-66322, 5620], [-149982, -2751], [-30642, -921], [36326, 3140], [-151470, 2233], [70423, 2740], [86563, -3192], [41828, -10158], [-130828, -3764], [-100972, 2826], [-41163, -5852], [5856, -8228], [-648, -13408], [-148046, -743], [29634, 6913], [-130741, -658], [48120, 3484], [-81687, 4546], [-49272, -2684], [-96720, -208], [-60348, 3042], [25541, -9778], [-138222, 4057], [-53170, 3420], [1980, 3156], [-25003, 4998], [65514, -3995], [-63924, 4550], [-14115, 9934], [-113720, 4868], [5006, 7479], [-77730, -3736], [115432, 844], [127740, -2882], [494, 9143], [-64317, 3060], [54881, -6908], [36400, 5336], [22740, -2064], [4285, -5614], [30778, -3667], [143428, 5634], [91576, 1628], [-13576, 6812], [-31980, -12470], [76249, -2374], [51864, 6124], [-111588, -2418], [-13598, 4865], [-105983, 3920], [-49449, 11316], [11682, -10735], [242075, 554], [-40337, -6812], [-172130, 1023], [-158295, -436], [-6064, 14024], [-55400, 5868], [5579, 15498], [-58325, 11758], [-73638, -12355], [-36480, 13888], [47455, -13692], [-36444, 9810], [-152539, -7284], [-88674, 9711], [106096, -5384], [-99183, -2730], [38988, -3130], [-7949, -364], [-14724, -6722], [163092, -1884], [-151769, -7026], [-103811, 6948], [-125742, -1527], [68062, 4016], [56320, 3264], [-24534, -2203], [-26253, 5668], [-87018, 9067], [51889, 3896], [-171663, -786], [-103206, 93], [59168, -4], [-50120, -12292], [27442, -14164], [-18312, 2140], [141764, -896], [53440, 13824], [153868, -2138], [128300, -352], [73319, -1746], [-155988, -5066], [97661, -9952], [191766, 2459], [110090, -4068], [-133460, 2806], [-138830, 2793], [-48107, 3200], [225513, 988], [57130, 11989], [-75426, 3151], [69625, 1038], [-54000, -8824], [32780, 16230], [-16906, -7493], [139642, -7844], [-124714, 2443], [74440, 1636], [-45902, -1012], [-43744, -6000], [-132430, -7799], [-205236, -218], [-14352, 13868], [136984, -6420]]; aps := ConvertToHeckeField(raw_aps); chi := MakeCharacter_1728_a_Hecke(Universe(aps)); return ExtendMultiplicatively(weight, aps, chi); end function; // To make the newform (type ModFrm), type "MakeNewformModFrm_1728_4_a_bj();". // 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_1728_4_a_bj(:prec:=2) chi := MakeCharacter_1728_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_1728_4_a_bj();". // 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_1728_4_a_bj( : sign := -1) R := PolynomialRing(Rationals()); chi := MakeCharacter_1728_a(); // SetVerbose("ModularSymbols", true); Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,4,sign))); Vf := Kernel([<5,R![-176, 4, 1]>,<7,R![-711, -6, 1]>,<11,R![-944, -52, 1]>],Snew); return Vf; end function;