// Make newform 784.4.a.z in Magma, downloaded from the LMFDB on 28 March 2024. // To make the character of type GrpDrchElt, type "MakeCharacter_784_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_784_4_a_z();". // 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_784_4_a_z();". // 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 := [-22, 0, 1]; Kf := NumberField(Polynomial([elt : elt in poly])); AssignNames(~Kf, ["nu"]); end if; Rf_num := [[1, 0], [0, 2]]; 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_784_a();" function MakeCharacter_784_a() N := 784; order := 1; char_gens := [687, 197, 689]; 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_784_a_Hecke(Kf) return MakeCharacter_784_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, 1], [0, 1], [0, 0], [-20, 0], [0, 7], [0, 6], [0, -1], [-48, 0], [-166, 0], [0, 22], [-78, 0], [0, 42], [-436, 0], [0, -22], [62, 0], [0, 71], [0, 29], [-580, 0], [544, 0], [0, -64], [680, 0], [0, -21], [0, -160], [0, -70], [0, 13], [0, 146], [260, 0], [1882, 0], [-1286, 0], [-2312, 0], [0, 27], [-1114, 0], [0, -147], [-946, 0], [-832, 0], [0, 307], [-636, 0], [0, 70], [0, 71], [3228, 0], [0, -301], [2136, 0], [1658, 0], [-978, 0], [0, 526], [-1556, 0], [0, -308], [0, 211], [0, 295], [-6490, 0], [4296, 0], [0, 482], [0, -595], [0, -160], [400, 0], [0, -29], [0, -736], [-6770, 0], [1878, 0], [0, -41], [0, -399], [0, -77], [0, -776], [0, 162], [2358, 0], [-2372, 0], [-250, 0], [-9540, 0], [0, -609], [0, 468], [-1840, 0], [0, 316], [3982, 0], [-2676, 0], [0, -750], [8658, 0], [0, -965], [-5706, 0], [0, 258], [0, 161], [-16770, 0], [-1336, 0], [0, -1190], [0, 384], [-6348, 0], [7170, 0], [6866, 0], [0, 147], [-2648, 0], [0, 1315], [0, 1422], [-13936, 0], [12276, 0], [2220, 0], [0, 1204], [0, -1693], [0, 1238], [0, -1345], [1798, 0], [-1276, 0], [2694, 0], [0, 1681], [12606, 0], [-6852, 0], [0, 1532], [0, -2023], [0, 876], [19104, 0], [0, 2296], [0, -1464], [28034, 0], [-8258, 0], [0, 547], [-912, 0], [-890, 0], [0, 3129], [0, -1266], [-21526, 0], [-23452, 0], [0, -2843], [-13858, 0], [0, 3459], [27812, 0], [0, 139], [22906, 0], [-15086, 0], [0, 2190], [0, 770], [0, 3137], [-32668, 0], [37056, 0], [19608, 0], [19378, 0], [0, -1490], [0, 910], [0, -3123], [0, -1469], [0, -3717], [14034, 0], [0, 707], [28622, 0], [-24688, 0], [30756, 0], [0, 2477], [0, 2562], [0, -2513], [0, 2610], [0, 3513], [-40872, 0], [-12006, 0], [0, 3808], [-19588, 0], [0, 4290], [-15868, 0], [-39832, 0], [30528, 0], [0, -1770], [0, 3192], [0, 573], [-45212, 0], [34218, 0], [-14464, 0], [0, -4033], [42062, 0], [0, 4586], [-21272, 0], [0, 13], [-39926, 0], [0, 4635], [25908, 0], [0, 5103], [42288, 0], [-23514, 0], [0, 358], [0, 5348], [25828, 0], [258, 0], [0, -2884], [0, 5993], [-26424, 0], [0, 2485], [-30798, 0], [0, -636], [12664, 0], [0, -1765], [-10186, 0], [0, 2031], [-23738, 0], [0, -398], [0, 1660], [-24460, 0], [-70580, 0], [0, -3681], [-5620, 0], [0, 2260], [-53306, 0], [34810, 0], [0, 6328], [0, 6096], [47942, 0], [0, -5446], [0, 1177], [0, 3688], [0, -2121], [0, -6567], [0, 1714], [61524, 0], [90946, 0], [0, -7951], [63510, 0], [0, 8757], [18464, 0], [0, 7167], [0, -496], [0, -818], [56792, 0], [0, 1014], [95712, 0], [-15622, 0], [15490, 0], [0, 3024], [-34686, 0], [-93176, 0], [0, 2919], [49394, 0], [0, -272], [32600, 0], [0, 4164], [-32388, 0], [19242, 0], [0, 2941], [-61672, 0], [72218, 0], [0, 9555], [0, -11080], [0, -370], [-10802, 0], [102884, 0], [0, -6916], [11348, 0], [0, -7337], [0, 9836], [27782, 0], [0, -504], [0, -10578], [0, 11872], [0, 7407], [65612, 0], [-56968, 0], [-5850, 0], [0, 5860], [22128, 0], [0, 10304], [0, -4467], [-108884, 0], [55922, 0], [0, -2519], [0, -4515], [0, 1786], [-112664, 0], [39380, 0], [0, 3541], [0, 7161], [0, 13362], [0, -7519], [-17610, 0], [0, 1512], [-37676, 0], [75634, 0], [0, 2031], [-34684, 0], [0, 76], [115928, 0], [0, -10136], [0, -4852], [26524, 0], [16918, 0], [69250, 0], [0, 1959], [0, 8212], [-26480, 0], [0, -8414], [0, -10367], [0, -8765], [83448, 0], [53234, 0], [-145122, 0], [0, -2414], [0, 10668], [-86682, 0], [0, 407], [1518, 0], [0, -3073], [-6858, 0], [0, -757], [0, -1184], [0, -6965], [0, 5697], [0, -7763], [0, -15910], [-9990, 0], [-5368, 0], [-86172, 0], [17340, 0], [72158, 0], [-90404, 0], [0, -16583], [-29280, 0], [148798, 0], [0, -3396], [36546, 0], [-43170, 0], [-50588, 0], [-66544, 0], [0, 3520], [0, 8897], [110440, 0], [0, -13552], [95566, 0], [0, 19181], [-77386, 0], [0, -9471], [101960, 0], [-27406, 0], [0, -15798], [33300, 0], [0, -10809], [96216, 0], [78626, 0], [-11194, 0], [-112806, 0], [0, 5586], [0, 13105], [-19676, 0], [0, 6391], [-167606, 0], [0, -11164], [0, 4900], [0, 14202], [22910, 0], [40350, 0], [0, 5243], [137856, 0], [-87046, 0], [-6876, 0], [0, -7281], [-40900, 0], [0, -20412], [0, -9771], [0, -7911], [124634, 0], [97190, 0], [0, -22630], [-189442, 0], [0, -6524], [0, -14106], [0, 2003], [221458, 0], [-169472, 0], [115838, 0], [0, 12216], [-63048, 0], [-146908, 0], [0, 2143], [43518, 0], [0, 6447], [-94688, 0], [61826, 0], [-149652, 0], [0, 1805], [242152, 0], [-36370, 0], [0, 22072], [96550, 0], [0, -13201], [-55288, 0], [0, 1840], [0, 15226], [0, -3430], [0, -14337], [28338, 0], [140880, 0], [-11614, 0], [0, -10843], [0, -19536], [-41208, 0], [0, -7911], [-235388, 0], [0, 13818], [-106090, 0], [0, 11957], [-274364, 0], [0, -12083], [78128, 0], [-73802, 0], [0, 6966], [0, -5418], [-206348, 0], [-145902, 0], [0, -28391], [92098, 0], [-36056, 0], [0, 7946], [0, -4929], [0, 19970], [-48938, 0], [-223158, 0], [0, -20383], [0, 6369], [0, 5944], [-227886, 0], [-118148, 0], [216812, 0], [-142938, 0], [0, 13959], [129816, 0], [0, -19550], [0, -15358], [0, 19284], [114890, 0], [0, 869], [139032, 0], [0, 31437], [0, -19390], [0, -2815], [39012, 0], [-187626, 0], [0, 11173], [0, 12062]]; aps := ConvertToHeckeField(raw_aps); chi := MakeCharacter_784_a_Hecke(Universe(aps)); return ExtendMultiplicatively(weight, aps, chi); end function; // To make the newform (type ModFrm), type "MakeNewformModFrm_784_4_a_z();". // 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_784_4_a_z(:prec:=2) chi := MakeCharacter_784_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_784_4_a_z();". // 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_784_4_a_z( : sign := -1) R := PolynomialRing(Rationals()); chi := MakeCharacter_784_a(); // SetVerbose("ModularSymbols", true); Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,4,sign))); Vf := Kernel([<3,R![-88, 0, 1]>,<5,R![-88, 0, 1]>],Snew); return Vf; end function;