
// Make newform 484.6.a.a in Magma, downloaded from the LMFDB on 07 January 2026.
// To make the character of type GrpDrchElt, type "MakeCharacter_484_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_484_6_a_a();".
// 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_484_6_a_a();".
// 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_484_a();"
function MakeCharacter_484_a()
    N := 484;
    order := 1;
    char_gens := [243, 365];
    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_484_a_Hecke( : Kf := Kf)
    return MakeCharacter_484_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<X, Y> := 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<T> := PowerSeriesRing(FXY : Precision := log_prec + 1);
    recursion := Coefficients(1/(1 - X*T + Y*T^2));
    coeffs := [F!0: i in [1..prec]];
    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 := 6;
    raw_aps := [[0], [-12], [54], [88], [0], [418], [-594], [-836], [-4104], [594], [4256], [-298], [-17226], [12100], [-1296], [19494], [-7668], [34738], [21812], [-46872], [-67562], [76912], [-67716], [29754], [-122398], [-11286], [-27256], [-122364], [-99902], [-29646], [-336512], [-100980], [-317142], [148324], [-196614], [-74360], [120878], [-111340], [491832], [-707454], [493668], [-559450], [-724032], [-7106], [530442], [56168], [339196], [779360], [744876], [-272746], [153846], [-1154736], [-657074], [1341900], [132354], [-943272], [967518], [518320], [-2222726], [196614], [1552276], [1072170], [-1585892], [-730728], [584858], [-2482866], [377948], [-639122], [2904660], [3991570], [1429218], [-1161864], [-1089232], [-3505766], [4043852], [5187456], [-950346], [-520738], [764370], [-2640506], [-4980204], [-237994], [3882384], [-66958], [6501352], [-4607604], [3776706], [3180694], [-6685470], [-4351216], [7079940], [-3221856], [2297096], [-2821500], [-4136284], [-8332632], [4341006], [-6741846], [7721956], [682066], [-2157716], [2675970], [3553308], [12922470], [6083572], [-15824062], [4602204], [-8611218], [-7982280], [-10174010], [9958432], [-4195862], [9125514], [6457340], [-14051368], [8471682], [488564], [2481192], [-5291298], [-4724676], [-6174202], [9409246], [-15008598], [-12970692], [22655588], [-19016910], [15131126], [-15032304], [-7412296], [2779282], [12104620], [-4469256], [28846256], [9608678], [-4545882], [21592318], [-14840010], [24878524], [31607982], [3100086], [-1871804], [20018394], [15311768], [-9593100], [25220942], [-17762328], [486970], [1926342], [22353836], [18583776], [29104834], [-3146958], [15999524], [34587432], [17439644], [-2595888], [17641096], [39678498], [-39341258], [-46250622], [-37902492], [26646246], [-40979048], [-27203364], [25355538], [11913912], [29193056], [17300074], [12462670], [-28953882], [32851764], [-21039346], [-17290152], [25455958], [8922704], [19246842], [-48992108], [11072214], [57475000], [-46249214], [12346688], [46069452], [10666358], [35898390], [18687888], [66442950], [48740626], [55364564], [-15786122], [-1406592], [1504898], [-84185244], [-80043580], [-35808210], [27451116], [50139594], [85692046], [5076686], [77252670], [-1912680], [-44929566], [-41069072], [41705798], [-27181154], [-5714820], [-108262386], [-18949888], [-33745140], [90204246], [-48526564], [36644014], [38153862], [-93148936], [-65608596], [-111617352], [64060490], [-21451760], [-131402898], [-35429832], [-33076242], [58800874], [-57591512], [-50605182], [-610864], [9341244], [119711482], [-69458310], [-48837600], [49842232], [11111364], [117736574], [-126062948], [-47123648], [-59863914], [-30453028], [62607600], [98610962], [-4777542], [-67134420], [-165863160], [25147044], [-65004236], [175185320], [98507870], [-33302610], [28799496], [91532960], [11632788], [161689924], [-58349808], [-32794190], [94625982], [42378984], [-166992406], [66723426], [-176309892], [-43319098], [20760916], [157452822], [27836710], [168099712], [-125249652], [-115157174], [125589970], [-160513758], [109357844], [-117999234], [124788762], [119367028], [117467658], [5307422], [81948932], [17147066], [-54706784], [174740302], [-1696168], [160552908], [-199927310], [141303382], [-60266052], [55151712], [-167792824], [-189003672], [-190849142], [126279076], [56931984], [-8071534], [-154674630], [36301880], [-89418978], [-269321922], [-97012188], [-66169818], [438372], [109777954], [-191105838], [-40364512], [320850342], [181817460], [-221418164], [-60331370], [273264354], [68290288], [-164157948], [-66058708], [-107264158], [-10048644], [18584510], [-291191976], [38397898], [-265337424], [200070], [33011550], [184199828], [-303141960], [-92517194], [66299364], [17696448], [-240858814], [-114295698], [-335261828], [178361402], [-197929710], [18262496], [13421430], [134777906], [-144158092], [-401277460], [23864544], [330632874], [-378884990], [-164939058], [-178904000], [328718412], [-435745244], [-395060436], [184669550], [-196129890], [-246059254], [119437648], [-471237658], [-188368038], [168161994], [-301462360], [390326958], [-461168532], [68774870], [115789244], [49387536], [299219238], [468618700], [492784874], [-80899938], [351403888], [196632634], [-291709242], [308735712], [-130669308], [173665998], [220175064], [-268699574], [-148422186], [-388824624], [-520442604], [-74380780], [-510145846], [31758210], [-105572456], [-456207290], [305643348], [-408087172], [550761552], [37068570], [-451661144], [-217492210], [-86510268], [352664928], [347350366], [-450233586], [-492583322], [-299705778], [274215402], [58582216], [259187742], [-76679636], [-253261944], [535268912], [13876070], [605712052], [465409152], [278041730], [-597877578], [450866844], [-109527100], [531649656], [251635846], [299883232], [440321994], [-674775748], [-577403046], [120093490], [274222530], [16529392], [-519548742], [685455210], [200467960], [216363710], [-178780338], [461086628], [-86178060], [-53969234], [417637242], [336904812], [-642828692], [176340406], [291547134], [461191104], [533159912], [-654726510], [327434184], [146815470], [-222196502], [459707184], [260225460], [312737834], [65646558], [622539972], [303070086], [-771646228], [416629224]];
    aps := ConvertToHeckeField(raw_aps);
    chi := MakeCharacter_484_a_Hecke( : Kf := Universe(aps));
    return ExtendMultiplicatively(weight, aps, chi);
end function;


// To make the newform (type ModFrm), type "MakeNewformModFrm_484_6_a_a();".
// 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_484_6_a_a(:prec:=1)
    chi := MakeCharacter_484_a();
    f_vec := qexpCoeffs();
    Kf := Universe(f_vec);
    // SetVerbose("ModularForms", true);
    // SetVerbose("ModularSymbols", true);
    S := CuspidalSubspace(ModularForms(chi, 6));
    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_484_6_a_a();".
// 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_484_6_a_a( : sign := -1)
    R<x> := PolynomialRing(Rationals());
    chi := MakeCharacter_484_a();
    // SetVerbose("ModularSymbols", true);
    Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,6,sign)));
    Vf := Kernel([<3,R![12, 1]>,<7,R![-88, 1]>],Snew);
    return Vf;
end function;