def _fourier_coefficient(self, content, det_4): def zeta(s): k = ZZ(1 - s) return -bernoulli(k) / k k = self.wt if det_4 < 0: return 0 elif det_4 == 0: return 2 / zeta(1 - k) * sum([d ** (k - 1) for d in divisors(content)]) else: return 2 * quadratic_L_function__exact(2 - k, -det_4) *\ self._fc__unramfactor(content, det_4)\ / (zeta(1 - k) * zeta(3 - 2 * k))
def _product_of_l_part(self, mat): '''Factor of Fourier coefficient except unramified factors. ''' mat_det = self._mat_det_full_rank(mat) n = self.degree k = self.weight if n % 2 == 0: quadl = quadratic_L_function__exact( 1 + n // 2 - k, (-1) ** (n // 2) * mat_det) prod = reduce(operator.mul, (zeta(1 + 2 * i - 2 * k) for i in range(1, n // 2 + 1)), ZZ(1)) ** (-1) return ZZ(2) ** (n // 2) * zeta(1 - k) ** (-1) * quadl * prod else: prod = reduce(operator.mul, (zeta(1 + 2 * i - 2 * k) for i in range(1, (n - 1) // 2 + 1)), ZZ(1)) ** (-1) return ZZ(2) ** ((n + 1) // 2) * zeta(1 - k) ** (-1) * prod