Esempio n. 1
0
 def _hecke_tp_charpoly(self, p, var='x', algorithm='linbox'):
     a = p ** (self.wt - 2) + 1
     N = self.klingeneisensteinAndCuspForms()
     S = CuspForms(1, self.wt)
     m = S.dimension()
     R = PolynomialRing(QQ, names=var)
     x = R.gens()[0]
     f = R(S.hecke_matrix(p).charpoly(var=var, algorithm=algorithm))
     f1 = f.subs({x: a ** (-1) * x}) * a ** m
     g = R(N.hecke_matrix(p).charpoly(var=var, algorithm=algorithm))
     return R(g / f1)
Esempio n. 2
0
    def _hecke_tp2_charpoly(self, p, var='x', algorithm='linbox'):
        u = p ** (self.wt - 2)
        N = self.klingeneisensteinAndCuspForms()
        S = CuspForms(1, self.wt)
        m = S.dimension()
        R = PolynomialRing(QQ, names=var)
        x = R.gens()[0]
        f = R(S.hecke_matrix(p).charpoly(var=var, algorithm=algorithm))
        g = R(N.hecke_matrix(p ** 2).charpoly(var=var, algorithm=algorithm))

        def morph(a, b, f, m):
            G = (-1) ** m * f.subs({x: -x}) * f
            alst = [[k // 2, v] for k, v in G.dict().iteritems()]
            F = sum([v * x ** k for k, v in alst])
            return a ** m * F.subs({x: (x - b) / a})
        f1 = morph(u ** 2 + u + 1, -p * u ** 3 - u ** 2 - p * u, f, m)
        return R(g / f1)