Eisenstein series¶
- sage.modular.modform.eis_series.compute_eisenstein_params(character, k)[source]¶
- Compute and return a list of all parameters \((\chi,\psi,t)\) that define the Eisenstein series with given character and weight \(k\). - Only the parity of \(k\) is relevant (unless k = 1, which is a slightly different case). - If - characteris an integer \(N\), then the parameters for \(\Gamma_1(N)\) are computed instead. Then the condition is that \(\chi(-1)*\psi(-1) =(-1)^k\).- If - characteris a list of integers, the parameters for \(\Gamma_H(N)\) are computed, where \(H\) is the subgroup of \((\ZZ/N\ZZ)^\times\) generated by the integers in the given list.- EXAMPLES: - sage: sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(30)(1), 3) [] sage: pars = sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(30)(1), 4) sage: [(x[0].values_on_gens(), x[1].values_on_gens(), x[2]) for x in pars] [((1, 1), (1, 1), 1), ((1, 1), (1, 1), 2), ((1, 1), (1, 1), 3), ((1, 1), (1, 1), 5), ((1, 1), (1, 1), 6), ((1, 1), (1, 1), 10), ((1, 1), (1, 1), 15), ((1, 1), (1, 1), 30)] sage: pars = sage.modular.modform.eis_series.compute_eisenstein_params(15, 1) sage: [(x[0].values_on_gens(), x[1].values_on_gens(), x[2]) for x in pars] [((1, 1), (-1, 1), 1), ((1, 1), (-1, 1), 5), ((1, 1), (1, zeta4), 1), ((1, 1), (1, zeta4), 3), ((1, 1), (-1, -1), 1), ((1, 1), (1, -zeta4), 1), ((1, 1), (1, -zeta4), 3), ((-1, 1), (1, -1), 1)] sage: sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(15).0, 1) [(Dirichlet character modulo 15 of conductor 1 mapping 11 |--> 1, 7 |--> 1, Dirichlet character modulo 15 of conductor 3 mapping 11 |--> -1, 7 |--> 1, 1), (Dirichlet character modulo 15 of conductor 1 mapping 11 |--> 1, 7 |--> 1, Dirichlet character modulo 15 of conductor 3 mapping 11 |--> -1, 7 |--> 1, 5)] sage: len(sage.modular.modform.eis_series.compute_eisenstein_params(GammaH(15, [4]), 3)) 8 - >>> from sage.all import * >>> sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(Integer(30))(Integer(1)), Integer(3)) [] >>> pars = sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(Integer(30))(Integer(1)), Integer(4)) >>> [(x[Integer(0)].values_on_gens(), x[Integer(1)].values_on_gens(), x[Integer(2)]) for x in pars] [((1, 1), (1, 1), 1), ((1, 1), (1, 1), 2), ((1, 1), (1, 1), 3), ((1, 1), (1, 1), 5), ((1, 1), (1, 1), 6), ((1, 1), (1, 1), 10), ((1, 1), (1, 1), 15), ((1, 1), (1, 1), 30)] >>> pars = sage.modular.modform.eis_series.compute_eisenstein_params(Integer(15), Integer(1)) >>> [(x[Integer(0)].values_on_gens(), x[Integer(1)].values_on_gens(), x[Integer(2)]) for x in pars] [((1, 1), (-1, 1), 1), ((1, 1), (-1, 1), 5), ((1, 1), (1, zeta4), 1), ((1, 1), (1, zeta4), 3), ((1, 1), (-1, -1), 1), ((1, 1), (1, -zeta4), 1), ((1, 1), (1, -zeta4), 3), ((-1, 1), (1, -1), 1)] >>> sage.modular.modform.eis_series.compute_eisenstein_params(DirichletGroup(Integer(15)).gen(0), Integer(1)) [(Dirichlet character modulo 15 of conductor 1 mapping 11 |--> 1, 7 |--> 1, Dirichlet character modulo 15 of conductor 3 mapping 11 |--> -1, 7 |--> 1, 1), (Dirichlet character modulo 15 of conductor 1 mapping 11 |--> 1, 7 |--> 1, Dirichlet character modulo 15 of conductor 3 mapping 11 |--> -1, 7 |--> 1, 5)] >>> len(sage.modular.modform.eis_series.compute_eisenstein_params(GammaH(Integer(15), [Integer(4)]), Integer(3))) 8 
- sage.modular.modform.eis_series.eisenstein_series_lseries(weight, prec=53, max_imaginary_part=0, max_asymp_coeffs=40)[source]¶
- Return the \(L\)-series of the weight \(2k\) Eisenstein series \(E_{2k}\) on \(\SL_2(\ZZ)\). - This actually returns an interface to Tim Dokchitser’s program for computing with the \(L\)-series of the Eisenstein series. See - Dokchitser.- INPUT: - weight– even integer
- prec– integer (bits precision)
- max_imaginary_part– real number
- max_asymp_coeffs– integer
 - OUTPUT: the \(L\)-series of the Eisenstein series. This can be evaluated at argument \(s\), or have - derivative()called, etc.- EXAMPLES: - We compute with the \(L\)-series of \(E_{16}\) and then \(E_{20}\): - sage: L = eisenstein_series_lseries(16) sage: L(1) -0.291657724743874 sage: L.derivative(1) 0.0756072194360656 sage: L = eisenstein_series_lseries(20) sage: L(2) -5.02355351645998 - >>> from sage.all import * >>> L = eisenstein_series_lseries(Integer(16)) >>> L(Integer(1)) -0.291657724743874 >>> L.derivative(Integer(1)) 0.0756072194360656 >>> L = eisenstein_series_lseries(Integer(20)) >>> L(Integer(2)) -5.02355351645998 - Now with higher precision: - sage: L = eisenstein_series_lseries(20, prec=200) sage: L(2) -5.0235535164599797471968418348135050804419155747868718371029 - >>> from sage.all import * >>> L = eisenstein_series_lseries(Integer(20), prec=Integer(200)) >>> L(Integer(2)) -5.0235535164599797471968418348135050804419155747868718371029 
- sage.modular.modform.eis_series.eisenstein_series_qexp(k, prec=10, K=Rational Field, var='q', normalization='linear')[source]¶
- Return the \(q\)-expansion of the normalized weight \(k\) Eisenstein series on \(\SL_2(\ZZ)\) to precision - precin the ring \(K\). Three normalizations are available, depending on the parameter- normalization; the default normalization is the one for which the linear coefficient is 1.- INPUT: - k– an even positive integer
- prec– (default: 10) a nonnegative integer
- K– (default: \(\QQ\)) a ring
- var– (default:- 'q') variable name to use for \(q\)-expansion
- normalization– (default:- 'linear') normalization to use. If this is- 'linear', then the series will be normalized so that the linear term is 1. If it is- 'constant', the series will be normalized to have constant term 1. If it is- 'integral', then the series will be normalized to have integer coefficients and no common factor, and linear term that is positive. Note that- 'integral'will work over arbitrary base rings, while- 'linear'or- 'constant'will fail if the denominator (resp. numerator) of \(B_k / 2k\) is invertible.
 - ALGORITHM: - We know \(E_k = \text{constant} + \sum_n \sigma_{k-1}(n) q^n\). So we compute all the \(\sigma_{k-1}(n)\) simultaneously, using the fact that \(\sigma\) is multiplicative. - EXAMPLES: - sage: eisenstein_series_qexp(2,5) -1/24 + q + 3*q^2 + 4*q^3 + 7*q^4 + O(q^5) sage: eisenstein_series_qexp(2,0) O(q^0) sage: eisenstein_series_qexp(2,5,GF(7)) 2 + q + 3*q^2 + 4*q^3 + O(q^5) sage: eisenstein_series_qexp(2,5,GF(7),var='T') 2 + T + 3*T^2 + 4*T^3 + O(T^5) - >>> from sage.all import * >>> eisenstein_series_qexp(Integer(2),Integer(5)) -1/24 + q + 3*q^2 + 4*q^3 + 7*q^4 + O(q^5) >>> eisenstein_series_qexp(Integer(2),Integer(0)) O(q^0) >>> eisenstein_series_qexp(Integer(2),Integer(5),GF(Integer(7))) 2 + q + 3*q^2 + 4*q^3 + O(q^5) >>> eisenstein_series_qexp(Integer(2),Integer(5),GF(Integer(7)),var='T') 2 + T + 3*T^2 + 4*T^3 + O(T^5) - We illustrate the use of the - normalizationparameter:- sage: eisenstein_series_qexp(12, 5, normalization='integral') 691 + 65520*q + 134250480*q^2 + 11606736960*q^3 + 274945048560*q^4 + O(q^5) sage: eisenstein_series_qexp(12, 5, normalization='constant') 1 + 65520/691*q + 134250480/691*q^2 + 11606736960/691*q^3 + 274945048560/691*q^4 + O(q^5) sage: eisenstein_series_qexp(12, 5, normalization='linear') 691/65520 + q + 2049*q^2 + 177148*q^3 + 4196353*q^4 + O(q^5) sage: eisenstein_series_qexp(12, 50, K=GF(13), normalization='constant') 1 + O(q^50) - >>> from sage.all import * >>> eisenstein_series_qexp(Integer(12), Integer(5), normalization='integral') 691 + 65520*q + 134250480*q^2 + 11606736960*q^3 + 274945048560*q^4 + O(q^5) >>> eisenstein_series_qexp(Integer(12), Integer(5), normalization='constant') 1 + 65520/691*q + 134250480/691*q^2 + 11606736960/691*q^3 + 274945048560/691*q^4 + O(q^5) >>> eisenstein_series_qexp(Integer(12), Integer(5), normalization='linear') 691/65520 + q + 2049*q^2 + 177148*q^3 + 4196353*q^4 + O(q^5) >>> eisenstein_series_qexp(Integer(12), Integer(50), K=GF(Integer(13)), normalization='constant') 1 + O(q^50) - AUTHORS: - William Stein: original implementation 
- Craig Citro (2007-06-01): rewrote for massive speedup 
- Martin Raum (2009-08-02): port to cython for speedup 
- David Loeffler (2010-04-07): work around an integer overflow when \(k\) is large 
- David Loeffler (2012-03-15): add options for alternative normalizations (motivated by Issue #12043)