
# q-expansion of newform 784.4.a.m, downloaded from the LMFDB on 19 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 = 784
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], [4], [-20], [0], [-44], [-44], [72], [-100], [120], [218], [280], [-30], [120], [-220], [-88], [110], [-580], [380], [980], [112], [-640], [488], [-660], [320], [248], [220], [-1336], [-100], [682], [370], [160], [300], [1190], [-2220], [2414], [-2056], [1060], [1980], [-488], [3476], [84], [2180], [-696], [2690], [5310], [-3080], [4], [2416], [4972], [-4460], [4550], [2112], [-4840], [4340], [-3520], [2560], [6820], [-3520], [-8690], [3894], [6556], [-2484], [-308], [-1760], [24], [-4890], [-8108], [2990], [7860], [-6060], [-3024], [-5896], [-2192], [-3410], [-5916], [-2040], [11778], [4708], [-5874], [14040], [7940], [5214], [-10384], [6520], [11520], [-13380], [4098], [-16390], [9540], [8920], [8428], [14520], [10520], [5436], [-18348], [20944], [260], [14600], [-6820], [12166], [-22660], [-8490], [-14300], [18294], [14388], [25232], [-16060], [-23856], [-3168], [-12320], [8928], [-4510], [5830], [24460], [-15216], [12478], [-15996], [5880], [-7510], [16508], [-1220], [-13090], [15108], [-1540], [-5780], [-10406], [28642], [-7560], [20360], [23276], [-3172], [6600], [16416], [36850], [-37400], [-5720], [7356], [38572], [7812], [45018], [-2740], [1454], [-37120], [7260], [-11140], [-8760], [820], [-1320], [-42780], [-29880], [28170], [20800], [20900], [-11640], [37580], [40832], [-42768], [-8760], [49632], [-36900], [33340], [5610], [25160], [-1060], [-38770], [24296], [1672], [45628], [-2222], [46980], [-30756], [11220], [-23904], [-13530], [-53480], [-5200], [19036], [21474], [38960], [1580], [19920], [51700], [-1950], [50160], [22480], [26180], [-43450], [-49764], [3718], [28360], [14800], [20780], [68884], [-36300], [-49420], [-44816], [-36146], [1690], [-70688], [-32256], [-53866], [82280], [18700], [21280], [-43140], [32748], [-58040], [-21540], [65626], [-58300], [-54450], [-72420], [-49960], [84348], [-24640], [-20120], [-2200], [13320], [-51840], [-93670], [31042], [25920], [97602], [25600], [-84612], [-28366], [-55616], [75152], [-52272], [-14652], [-6390], [-19340], [74888], [14234], [19596], [-36832], [72680], [10990], [40652], [26480], [101180], [32380], [-34576], [-69514], [-36384], [74040], [45760], [54780], [-49132], [-85000], [-29370], [-73040], [-9360], [103040], [-50820], [26308], [-31438], [-20540], [58812], [30712], [8800], [45980], [46300], [-12276], [-53160], [73700], [95862], [-97440], [-131540], [123970], [85620], [39980], [33616], [8096], [63520], [-80464], [-64700], [-111674], [-24806], [-87780], [-126896], [-145664], [-138680], [-92660], [80332], [116016], [-65230], [48270], [50440], [23760], [-75114], [79772], [-153450], [-86020], [-25290], [-84700], [15040], [-14204], [-66300], [17908], [173624], [137610], [134168], [-42900], [-57084], [59870], [-133580], [-179060], [76824], [-111650], [6000], [-57198], [35358], [77740], [55760], [-103040], [-86620], [-79016], [108416], [-36338], [76340], [64310], [86220], [-148120], [-112870], [-9480], [163692], [129180], [240], [-30910], [-111562], [124410], [103560], [-156956], [131452], [49468], [-6662], [-146320], [-50960], [-123288], [76910], [29430], [-158620], [78816], [-131110], [-99924], [167700], [-202540], [-60720], [-116772], [119460], [132890], [92246], [-40984], [13838], [-83600], [-153000], [117740], [84370], [216520], [16670], [25440], [-176640], [29612], [-173540], [-105210], [119988], [73480], [198506], [-213324], [123860], [68200], [145838], [-65120], [108550], [45980], [104384], [138304], [18040], [-8008], [148500], [-225030], [161280], [-154270], [224180], [-115776], [137544], [-82932], [130540], [261672], [65822], [199964], [55228], [44980], [226664], [206710], [-54120], [175560], [40876], [67122], [-219860], [-60350], [-61160], [129272], [27060], [218120], [4150], [63954], [110660], [177060], [-217184], [-3630], [-143660], [104852], [132870], [-275340], [270072], [-18680], [-78760], [-53424], [121178], [-144100], [-167880], [-63180], [-288424], [23468], [-290100], [-152394], [158740], [13880]]
