
# q-expansion of newform 720.4.a.f, downloaded from the LMFDB on 25 April 2024.

# We generate the q-expansion using the Hecke eigenvalues a_p at the primes.
# Each a_p is given as a linear combination
# of the following basis for the coefficient ring.

def make_data():

    from sage.all import prod, floor, prime_powers, gcd, QQ, primes_first_n, next_prime, RR

    def discrete_log(elts, gens, mod):
        # algorithm 2.2, page 16 of https://arxiv.org/abs/0903.2785
        def table_gens(gens, mod):
            T = [1]
            n = len(gens)
            r = [None]*n
            s = [None]*n
            for i in range(n):
                beta = gens[i]
                r[i] = 1
                N = len(T)
                while beta not in T:
                    for Tj in T[:N]:
                        T.append((beta*Tj) % mod)
                    beta = (beta*gens[i]) % mod
                    r[i] += 1
                s[i] = T.index(beta)
            return T, r, s
        T, r, s = table_gens(gens, mod)
        n = len(gens)
        N = [ prod(r[:j]) for j in range(n) ]
        Z = lambda s: [ (floor(s/N[j]) % r[j]) for j in range(n)]
        return [Z(T.index(elt % mod)) for elt in elts]
    def extend_multiplicatively(an):
        for pp in prime_powers(len(an)-1):
            for k in range(1, (len(an) - 1)//pp + 1):
                if gcd(k, pp) == 1:
                    an[pp*k] = an[pp]*an[k]
    from sage.all import PolynomialRing, NumberField
    R = PolynomialRing(QQ, "x")
    f = R(poly_data)
    K = NumberField(f, "a")
    betas = [K.gens()[0]**i for i in range(len(poly_data))]
    convert_elt_to_field = lambda elt: sum(c*beta for c, beta in zip(elt, betas))
    # convert aps to K elements
    primes = primes_first_n(len(aps_data))
    good_primes = [p for p in primes if not p.divides(level)]
    aps = map(convert_elt_to_field, aps_data)
    if not hecke_ring_character_values:
        # trivial character
        char_values = dict(zip(good_primes, [1]*len(good_primes)))
    else:
        gens = [elt[0] for elt in hecke_ring_character_values]
        gens_values = [convert_elt_to_field(elt[1]) for elt in hecke_ring_character_values]
        char_values = dict([(
            p,prod(g**k for g, k in zip(gens_values, elt)))
            for p, elt in zip(good_primes, discrete_log(good_primes, gens, level))
            ])
    an_list_bound = next_prime(primes[-1])
    an = [0]*an_list_bound
    an[1] = 1
    
    from sage.all import PowerSeriesRing
    PS = PowerSeriesRing(K, "q")
    for p, ap in zip(primes, aps):
        if p.divides(level):
            euler_factor = [1, -ap]
        else:
            euler_factor = [1, -ap, p**(weight - 1) * char_values[p]]
        k = RR(an_list_bound).log(p).floor() + 1
        foo = (1/PS(euler_factor)).padded_list(k)
        for i in range(1, k):
            an[p**i] = foo[i]
    extend_multiplicatively(an)
    return PS(an)
level = 720
weight = 4
poly_data = [0, 1]

# The basis for the coefficient ring is just the power basis
# in the root of the defining polynomial above.
hecke_ring_character_values = None
aps_data = [[0], [0], [-5], [-8], [20], [22], [14], [-76], [56], [154], [-160], [-162], [390], [-388], [-544], [210], [-380], [-794], [148], [-840], [858], [-144], [316], [-1098], [994], [834], [-1672], [-732], [-970], [-1938], [528], [636], [-1754], [2508], [-1486], [-2120], [-1850], [1172], [-1656], [2666], [1132], [-2866], [1888], [1282], [-350], [3400], [-4652], [-4016], [2316], [94], [4230], [2064], [4562], [2532], [-3522], [-2232], [-2806], [-4848], [7790], [118], [6508], [8770], [4292], [-9464], [9578], [186], [492], [2290], [-6092], [5766], [9374], [-3528], [-7616], [3406], [12284], [5424], [-3486], [-3626], [-5874], [-12662], [6396], [8286], [-4112], [5330], [-11272], [14196], [5886], [-7526], [-8502], [-12672], [16540], [8864], [-3688], [-16140], [-1580], [15000], [-20486], [-7706], [3932], [-23930], [-11468], [11498], [16988], [17366], [24860], [-26302], [7812], [-7986], [-21048], [1738], [-18576], [-13602], [-19578], [-12308], [8600], [-6978], [7668], [-15384], [2186], [-1524], [-4242], [24354], [322], [-7932], [-20684], [-25222], [23678], [8432], [-8312], [-26298], [-16956], [-17880], [-22032], [11534], [-38250], [19330], [40674], [-7004], [-12198], [25734], [-15668], [34450], [38792], [-20460], [5542], [25240], [-37330], [3894], [-20324], [6288], [-24650], [-9426], [9316], [6968], [35964], [47888], [12760], [25054], [28282], [30634], [48572], [-12906], [5880], [55444], [-32050], [29880], [-5216], [6750], [52178], [-37678], [-15356], [-11546], [-9224], [-9958], [5872], [-39690], [-13828], [7874], [13688], [17206], [39376], [12924], [48446], [-4250], [-7712], [-13774], [5702], [532], [-61702], [55136], [62594], [-7260], [-428], [38810], [-47668], [3782], [31506], [-13530], [50174], [41032], [-22710], [80336], [32366], [-45150], [-44844], [61754], [65504], [-83188], [8358], [-76820], [-19598], [10802], [-45656], [59892], [54968], [-58182], [9920], [78158], [-18024], [-67430], [12062], [-7816], [-27842], [-80640], [91356], [-83474], [-36490], [66592], [-52904], [61300], [-13322], [-82092], [1792], [85606], [-54564], [-48960], [13554], [1074], [-72988], [103896], [-93796], [-29668], [-55336], [-93290], [19982], [89800], [28784], [-119396], [5612], [-85952], [-41178], [-95810], [63144], [-37606], [39242], [11532], [90158], [61836], [29442], [-80982], [47792], [29356], [-32322], [13382], [2270], [134084], [8362], [-3690], [14988], [-42590], [28502], [-117340], [-141558], [105088], [7634], [45256], [85844], [-78874], [136922], [85548], [7824], [106632], [25912], [57022], [51260], [127184], [64946], [106674], [-71400], [-156834], [-129494], [77628], [-15018], [-17580], [39958], [89754], [-96224], [-61422], [-137212], [171924], [15642], [94602], [158320], [59452], [-72132], [-8222], [140580], [-120074], [157032], [-82690], [-108832], [155826], [123102], [53204], [-135416], [161722], [-9940], [-40608], [74818], [144526], [121876], [-59446], [22938], [4496], [42502], [-61614], [40676], [46828], [-189968], [1602], [-94090], [-145094], [-149152], [86732], [3884], [-201036], [25670], [80670], [-133766], [24192], [89678], [-1962], [-54494], [-60632], [-209702], [-155332], [103390], [80156], [66480], [10962], [209348], [-14694], [214474], [-68288], [123374], [-104522], [57312], [213812], [-189458], [-188456], [213182], [35878], [-155264], [-45084], [227124], [-14726], [-213654], [20824], [-180790], [-166692], [123820], [142336], [36306], [-52584], [-89626], [13452], [120256], [-133534], [37422], [-93718], [-67462], [-58778], [-122232], [-190818], [-66108], [38120], [-152656], [-177906], [263052], [-208048], [2434], [11874], [-252300], [-153436], [-186392], [-247414], [-130496], [-91770], [-64052], [86610], [-145050], [174462], [-63904], [81846], [-84990], [185928], [281782], [-66834], [-66076], [-72420], [-61262], [-243534], [-259244], [-173788], [-41990], [-229782], [53696], [-104584], [213582], [159672], [28890], [-213794], [-223648], [136580], [-169254], [-47862], [205500], [-30090], [-33092], [-148952]]
