
# q-expansion of newform 1008.4.a.m, 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 = 1008
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], [4], [7], [62], [-62], [-84], [-100], [-42], [10], [48], [-246], [248], [-68], [324], [-258], [120], [622], [-904], [-678], [-642], [-740], [468], [-200], [-1266], [-232], [1792], [-1906], [-90], [-458], [-804], [812], [-414], [1620], [-2370], [568], [-266], [272], [-1876], [152], [610], [1042], [-2038], [-2602], [-2354], [-1680], [668], [1832], [4944], [-5470], [2802], [-1170], [-2338], [2792], [-7024], [2438], [6780], [1928], [5554], [-1942], [-4828], [6152], [-5884], [9132], [-9382], [-3114], [-1532], [-4166], [-11366], [9310], [8572], [-4790], [-5424], [1838], [4260], [9048], [11490], [-1866], [-13662], [-13210], [6960], [8162], [16602], [7738], [840], [6618], [-3090], [5914], [15968], [1172], [5304], [5740], [-8944], [-5558], [19820], [1848], [-340], [-10212], [9332], [-8998], [3416], [526], [-6712], [-4190], [-3032], [5434], [464], [-11748], [7650], [-22878], [-704], [24958], [8826], [-21220], [3268], [-13062], [28012], [3844], [28482], [-9330], [8782], [-10562], [26016], [8898], [-30572], [30618], [-8130], [-27840], [-14624], [-20862], [13920], [25578], [-33472], [25934], [-26952], [23450], [-39568], [12356], [21736], [38310], [-2132], [-5002], [3612], [-27666], [12890], [-9340], [-33082], [-7544], [-8180], [10518], [14134], [-6492], [-38228], [-43076], [32236], [-46518], [-17840], [-7000], [36114], [4748], [42694], [16742], [9956], [-26388], [786], [51888], [51928], [-386], [-48050], [-30808], [35430], [-46218], [-31758], [51638], [-44360], [28100], [3728], [5938], [1992], [-34490], [21556], [17052], [19298], [-56644], [-41082], [15440], [37774], [-9508], [2950], [-9448], [-4802], [-6642], [-24812], [24768], [55214], [2532], [11102], [-50982], [53496], [-5772], [51590], [43048], [69114], [-24290], [43060], [-17944], [21960], [52038], [51990], [-59092], [-2526], [-31812], [-79888], [-74836], [-47060], [30562], [24856], [96148], [10934], [-70278], [-64978], [-9280], [-36010], [32272], [14764], [-99430], [-17288], [5710], [74176], [-29118], [-32762], [96500], [90328], [76438], [-29988], [54144], [31150], [-84778], [50130], [47032], [-62022], [26748], [105072], [60730], [51672], [32300], [9056], [98032], [87560], [83478], [73934], [-94452], [-41806], [29710], [-127208], [-108290], [125762], [-55044], [-117984], [22274], [46972], [-20006], [104450], [-11842], [-52444], [-40700], [-103650], [-6932], [4832], [110242], [-77858], [-55004], [-22322], [-101720], [-125066], [-87488], [-115786], [-51270], [52222], [-23168], [85288], [-62412], [-81296], [71182], [-26444], [53562], [-101582], [-113994], [-101600], [-121440], [9238], [-26596], [20682], [-24048], [65638], [-40280], [-149752], [131852], [-44840], [-65204], [-30822], [-76134], [42980], [-72562], [-10872], [64794], [-105486], [-42630], [106250], [104338], [35688], [-139510], [-80862], [-47268], [-90026], [-80290], [143340], [5022], [-1082], [59610], [72988], [151174], [71568], [-26648], [-184338], [-104618], [-32200], [-62588], [-9806], [-43038], [-79538], [-167694], [17560], [-178992], [-32992], [-126376], [4550], [175632], [42422], [103256], [59278], [-4534], [540], [105488], [-221158], [-6130], [-30518], [-183604], [-184488], [164696], [223988], [-118026], [-36842], [-20328], [-184370], [-48988], [-105360], [203292], [-105274], [-137502], [119694], [-114272], [-99126], [13990], [74596], [-57722], [-223084], [-234028], [243342], [248682], [-49140], [-1902], [52950], [25408], [-26726], [-151060], [-30178], [-127942], [-96420], [-182706], [-89872], [104982], [-79744], [136166], [104940], [222208], [47248], [-63446], [41152], [-44436], [-144770], [88932], [1950], [-104924], [-128438], [-72302], [113240], [-148140], [-211632], [-45222], [159950], [58022], [28556], [236136], [-221100], [62888], [65994], [163598], [-6788], [85440], [-111742], [104786], [65938], [148628], [229494], [265428], [248310], [1576], [54756], [122028], [212490], [-220946], [231514], [77380], [-129622], [194136], [171098], [-307830], [-95292], [-152580]]
