// Make newform 1152.4.a.l in Magma, downloaded from the LMFDB on 29 March 2024. // To make the character of type GrpDrchElt, type "MakeCharacter_1152_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_1152_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_1152_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 Kf := Rationals(); end if; return [Kf!elt[1] : elt in input]; end function; // To make the character of type GrpDrchElt, type "MakeCharacter_1152_a();" function MakeCharacter_1152_a() N := 1152; order := 1; char_gens := [127, 901, 641]; 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_1152_a_Hecke(Kf) return MakeCharacter_1152_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], [8], [10], [68], [46], [74], [-16], [-20], [228], [162], [-262], [-30], [-264], [124], [-204], [340], [-950], [436], [-780], [518], [1010], [852], [686], [-806], [-636], [-1586], [92], [-2010], [2062], [1046], [-1884], [-2374], [2156], [-2952], [3410], [666], [704], [1648], [-360], [-1956], [-218], [680], [4510], [796], [-986], [4196], [2502], [324], [-2194], [4230], [6672], [-1490], [7380], [1998], [-3768], [-7964], [-2330], [-2154], [5598], [-1884], [2788], [-9180], [-8032], [214], [-1428], [2708], [-6338], [1980], [7418], [3438], [2372], [-6046], [-9238], [-2936], [-12600], [3112], [2130], [1554], [-8942], [-6908], [7862], [12100], [12882], [-10818], [-852], [-5222], [-11598], [-4088], [-15394], [3092], [9612], [-13606], [2020], [-19348], [596], [4300], [-9158], [10040], [-1906], [10264], [-15856], [-19764], [-6302], [764], [-10618], [4036], [24750], [-4908], [22062], [-12986], [24986], [3230], [-15500], [16874], [978], [-1992], [-3588], [-7536], [-3684], [4418], [-158], [10736], [-6132], [-28320], [23420], [-13634], [-4044], [25842], [33414], [-21708], [12488], [13522], [-10178], [482], [-6706], [-40788], [29720], [20736], [9834], [-4176], [1996], [14386], [33836], [16358], [-26244], [-39854], [2706], [17728], [20056], [-26534], [45838], [23200], [-25272], [-42448], [-49776], [3042], [11490], [19882], [-41336], [35036], [-9814], [26006], [17404], [-44526], [47480], [18866], [-17550], [-1798], [352], [-10572], [-48102], [23176], [37418], [-1078], [26190], [-4380], [-24904], [35998], [-2990], [-44254], [-12732], [-11274], [42734], [22008], [-58176], [22294], [24332], [-43226], [59968], [61906], [-60300], [-43124], [27632], [43220], [-49346], [-28042], [34118], [6358], [47712], [42488], [-16658], [-71986], [64414], [30660], [17484], [-17362], [-47140], [33958], [-85184], [830], [25312], [-36754], [-22780], [-23604], [-25238], [74346], [52178], [28608], [70104], [31918], [16950], [-4998], [54966], [-89356], [18370], [-103586], [48044], [86078], [78068], [-99674], [-69064], [21886], [-73810], [-37696], [-76196], [-52102], [-53944], [-76308], [-51828], [-12852], [-102412], [-103870], [-47974], [57062], [940], [-42758], [28836], [32740], [7320], [-26826], [68990], [-90260], [-84998], [-78188], [-28748], [26830], [60204], [79548], [4506], [-75242], [-61844], [-15650], [-8294], [-19158], [74460], [-108032], [-10074], [-45920], [-30280], [1738], [20516], [-2630], [-26630], [26274], [-114170], [-31388], [100674], [-82098], [-145452], [89516], [-108290], [69252], [-58198], [81088], [12568], [51262], [-14784], [51002], [-100690], [100000], [38556], [-17970], [-7548], [-47518], [3720], [34526], [-10556], [97236], [44344], [116246], [26160], [-38838], [-43212], [154120], [107502], [149876], [52742], [-123540], [-6454], [117544], [45204], [185874], [91168], [44912], [-87318], [-53252], [-46796], [-3858], [-145562], [187484], [-139066], [60468], [194290], [144018], [-44182], [-62544], [52760], [-127504], [95608], [-130570], [-82536], [110806], [-155724], [137212], [76884], [-84710], [-197978], [7302], [45214], [-9022], [117130], [70836], [173678], [10860], [-48404], [-169706], [-178092], [-14604], [-211508], [-48008], [3218], [-73380], [-142962], [-153038], [94486], [135840], [-67884], [131874], [-146016], [-133510], [-53394], [215784], [-51308], [129316], [120254], [-158572], [1730], [-88054], [224972], [-16520], [-92208], [5364], [-31150], [101270], [-145028], [72], [127138], [-39606], [-55466], [93736], [142818], [-199886], [-5394], [-242840], [45792], [-156238], [-99178], [188684], [-81596], [11698], [-75504], [-42004], [211312], [94760], [176962], [166166], [-137062], [-62808], [-159912], [37314], [-34518], [121134], [-136734], [-241404], [-71862], [-30218], [-269742], [86048], [-184964], [582], [147984], [-26716], [130976], [-65866], [193076], [-125816], [-86702], [226290], [263724], [-153560], [72594], [226472], [33996], [75078], [-69948], [197396], [-150978], [-95856], [-77940]]; aps := ConvertToHeckeField(raw_aps); chi := MakeCharacter_1152_a_Hecke(Universe(aps)); return ExtendMultiplicatively(weight, aps, chi); end function; // To make the newform (type ModFrm), type "MakeNewformModFrm_1152_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_1152_4_a_l(:prec:=1) chi := MakeCharacter_1152_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_1152_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_1152_4_a_l( : sign := -1) R := PolynomialRing(Rationals()); chi := MakeCharacter_1152_a(); // SetVerbose("ModularSymbols", true); Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,4,sign))); Vf := Kernel([<5,R![-8, 1]>,<7,R![-10, 1]>,<13,R![-46, 1]>],Snew); return Vf; end function;