def CohenOesterle(eps, k): r""" Compute the Cohen-Oesterle function associate to eps, `k`. This is a summand in the formula for the dimension of the space of cusp forms of weight `2` with character `\varepsilon`. INPUT: - ``eps`` - Dirichlet character - ``k`` - integer OUTPUT: element of the base ring of eps. EXAMPLES:: sage: G.<eps> = DirichletGroup(7) sage: sage.modular.dims.CohenOesterle(eps, 2) -2/3 sage: sage.modular.dims.CohenOesterle(eps, 4) -1 """ N = eps.modulus() facN = factor(N) f = eps.conductor() gamma_k = 0 if k%4==2: gamma_k = frac(-1,4) elif k%4==0: gamma_k = frac(1,4) mu_k = 0 if k%3==2: mu_k = frac(-1,3) elif k%3==0: mu_k = frac(1,3) def _lambda(r,s,p): """ Used internally by the CohenOesterle function. INPUT: - ``r, s, p`` - integers OUTPUT: Integer EXAMPLES: (indirect doctest) :: sage: K = CyclotomicField(3) sage: eps = DirichletGroup(7*43,K).0^2 sage: sage.modular.dims.CohenOesterle(eps,2) -4/3 """ if 2*s<=r: if r%2==0: return p**(r//2) + p**((r//2)-1) return 2*p**((r-1)//2) return 2*(p**(r-s)) #end def of lambda K = eps.base_ring() return K(frac(-1,2) * mul([_lambda(r,valuation(f,p),p) for p, r in facN]) + \ gamma_k * mul([CO_delta(r,p,N,eps) for p, r in facN]) + \ mu_k * mul([CO_nu(r,p,N,eps) for p, r in facN]))
def CohenOesterle(eps, k): r""" Compute the Cohen-Oesterle function associate to eps, `k`. This is a summand in the formula for the dimension of the space of cusp forms of weight `2` with character `\varepsilon`. INPUT: - ``eps`` - Dirichlet character - ``k`` - integer OUTPUT: element of the base ring of eps. EXAMPLES:: sage: G.<eps> = DirichletGroup(7) sage: sage.modular.dims.CohenOesterle(eps, 2) -2/3 sage: sage.modular.dims.CohenOesterle(eps, 4) -1 """ N = eps.modulus() facN = factor(N) f = eps.conductor() gamma_k = 0 if k % 4 == 2: gamma_k = frac(-1, 4) elif k % 4 == 0: gamma_k = frac(1, 4) mu_k = 0 if k % 3 == 2: mu_k = frac(-1, 3) elif k % 3 == 0: mu_k = frac(1, 3) def _lambda(r, s, p): """ Used internally by the CohenOesterle function. INPUT: - ``r, s, p`` - integers OUTPUT: Integer EXAMPLES: (indirect doctest) :: sage: K = CyclotomicField(3) sage: eps = DirichletGroup(7*43,K).0^2 sage: sage.modular.dims.CohenOesterle(eps,2) -4/3 """ if 2 * s <= r: if r % 2 == 0: return p**(r // 2) + p**((r // 2) - 1) return 2 * p**((r - 1) // 2) return 2 * (p**(r - s)) #end def of lambda K = eps.base_ring() return K(frac(-1,2) * mul([_lambda(r,valuation(f,p),p) for p, r in facN]) + \ gamma_k * mul([CO_delta(r,p,N,eps) for p, r in facN]) + \ mu_k * mul([CO_nu(r,p,N,eps) for p, r in facN]))