Elements of Hecke modular forms spaces¶
AUTHORS:
Jonas Jermann (2013): initial version
- class sage.modular.modform_hecketriangle.element.FormsElement(parent, rat)[source]¶
Bases:
FormsRingElement
(Hecke) modular forms.
- ambient_coordinate_vector()[source]¶
Return the coordinate vector of
self
with respect toself.parent().ambient_space().gens()
.The returned coordinate vector is an element of
self.parent().module()
.Note
This uses the corresponding function of the parent. If the parent has not defined a coordinate vector function or an ambient module for coordinate vectors then an exception is raised by the parent (default implementation).
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: MF = ModularForms(n=4, k=24, ep=-1) sage: MF.gen(0).ambient_coordinate_vector().parent() Vector space of dimension 3 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: MF.gen(0).ambient_coordinate_vector() (1, 0, 0) sage: subspace = MF.subspace([MF.gen(0), MF.gen(2)]) sage: subspace.gen(0).ambient_coordinate_vector().parent() Vector space of degree 3 and dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring Basis matrix: [1 0 0] [0 0 1] sage: subspace.gen(0).ambient_coordinate_vector() (1, 0, 0) sage: subspace.gen(0).ambient_coordinate_vector() == subspace.ambient_coordinate_vector(subspace.gen(0)) True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> MF = ModularForms(n=Integer(4), k=Integer(24), ep=-Integer(1)) >>> MF.gen(Integer(0)).ambient_coordinate_vector().parent() Vector space of dimension 3 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> MF.gen(Integer(0)).ambient_coordinate_vector() (1, 0, 0) >>> subspace = MF.subspace([MF.gen(Integer(0)), MF.gen(Integer(2))]) >>> subspace.gen(Integer(0)).ambient_coordinate_vector().parent() Vector space of degree 3 and dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring Basis matrix: [1 0 0] [0 0 1] >>> subspace.gen(Integer(0)).ambient_coordinate_vector() (1, 0, 0) >>> subspace.gen(Integer(0)).ambient_coordinate_vector() == subspace.ambient_coordinate_vector(subspace.gen(Integer(0))) True
from sage.modular.modform_hecketriangle.space import ModularForms MF = ModularForms(n=4, k=24, ep=-1) MF.gen(0).ambient_coordinate_vector().parent() MF.gen(0).ambient_coordinate_vector() subspace = MF.subspace([MF.gen(0), MF.gen(2)]) subspace.gen(0).ambient_coordinate_vector().parent() subspace.gen(0).ambient_coordinate_vector() subspace.gen(0).ambient_coordinate_vector() == subspace.ambient_coordinate_vector(subspace.gen(0))
- coordinate_vector()[source]¶
Return the coordinate vector of
self
with respect toself.parent().gens()
.Note
This uses the corresponding function of the parent. If the parent has not defined a coordinate vector function or a module for coordinate vectors then an exception is raised by the parent (default implementation).
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: MF = ModularForms(n=4, k=24, ep=-1) sage: MF.gen(0).coordinate_vector().parent() Vector space of dimension 3 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: MF.gen(0).coordinate_vector() (1, 0, 0) sage: subspace = MF.subspace([MF.gen(0), MF.gen(2)]) sage: subspace.gen(0).coordinate_vector().parent() Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: subspace.gen(0).coordinate_vector() (1, 0) sage: subspace.gen(0).coordinate_vector() == subspace.coordinate_vector(subspace.gen(0)) True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> MF = ModularForms(n=Integer(4), k=Integer(24), ep=-Integer(1)) >>> MF.gen(Integer(0)).coordinate_vector().parent() Vector space of dimension 3 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> MF.gen(Integer(0)).coordinate_vector() (1, 0, 0) >>> subspace = MF.subspace([MF.gen(Integer(0)), MF.gen(Integer(2))]) >>> subspace.gen(Integer(0)).coordinate_vector().parent() Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> subspace.gen(Integer(0)).coordinate_vector() (1, 0) >>> subspace.gen(Integer(0)).coordinate_vector() == subspace.coordinate_vector(subspace.gen(Integer(0))) True
from sage.modular.modform_hecketriangle.space import ModularForms MF = ModularForms(n=4, k=24, ep=-1) MF.gen(0).coordinate_vector().parent() MF.gen(0).coordinate_vector() subspace = MF.subspace([MF.gen(0), MF.gen(2)]) subspace.gen(0).coordinate_vector().parent() subspace.gen(0).coordinate_vector() subspace.gen(0).coordinate_vector() == subspace.coordinate_vector(subspace.gen(0))
- lseries(num_prec=None, max_imaginary_part=0, max_asymp_coeffs=40)[source]¶
Return the \(L\)-series of
self
ifself
is modular and holomorphic.This relies on the (pari) based function
Dokchitser
.INPUT:
num_prec
– integer denoting the to-be-used numerical precision. If integernum_prec=None
(default) the default numerical precision of the parent ofself
is used.max_imaginary_part
– a real number (default: 0), indicating up to which imaginary part the \(L\)-series is going to be studiedmax_asymp_coeffs
– integer (default: 40)
OUTPUT:
An interface to Tim Dokchitser’s program for computing \(L\)-series, namely the series given by the Fourier coefficients of
self
.EXAMPLES:
sage: from sage.modular.modform.eis_series import eisenstein_series_lseries sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: f = ModularForms(n=3, k=4).E4()/240 sage: L = f.lseries() sage: L L-series associated to the modular form 1/240 + q + 9*q^2 + 28*q^3 + 73*q^4 + O(q^5) sage: L.conductor 1 sage: L(1).prec() 53 sage: L.check_functional_equation() < 2^(-50) True sage: L(1) -0.0304484570583... sage: abs(L(1) - eisenstein_series_lseries(4)(1)) < 2^(-53) True sage: L.derivative(1, 1) -0.0504570844798... sage: L.derivative(1, 2)/2 -0.0350657360354... sage: L.taylor_series(1, 3) -0.0304484570583... - 0.0504570844798...*z - 0.0350657360354...*z^2 + O(z^3) sage: coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sage: sum([coeffs[k] * ZZ(k)^(-10) for k in range(1,len(coeffs))]).n(53) 1.00935215408... sage: L(10) 1.00935215649... sage: f = ModularForms(n=6, k=4).E4() sage: L = f.lseries(num_prec=200) sage: L.conductor 3 sage: L.check_functional_equation() < 2^(-180) True sage: L(1) -2.92305187760575399490414692523085855811204642031749788... sage: L(1).prec() 200 sage: coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sage: sum([coeffs[k] * ZZ(k)^(-10) for k in range(1,len(coeffs))]).n(53) 24.2281438789... sage: L(10).n(53) 24.2281439447... sage: f = ModularForms(n=8, k=6, ep=-1).E6() sage: L = f.lseries() sage: L.check_functional_equation() < 2^(-45) True sage: L.taylor_series(3, 3) 0.000000000000... + 0.867197036668...*z + 0.261129628199...*z^2 + O(z^3) sage: coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sage: sum([coeffs[k]*k^(-10) for k in range(1,len(coeffs))]).n(53) -13.0290002560... sage: L(10).n(53) -13.0290184579... sage: # long time sage: f = (ModularForms(n=17, k=24).Delta()^2) sage: L = f.lseries() sage: L.check_functional_equation() < 2^(-50) True sage: L.taylor_series(12, 3) 0.000683924755280... - 0.000875942285963...*z + 0.000647618966023...*z^2 + O(z^3) sage: coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sage: sum([coeffs[k]*k^(-30) for k in range(1,len(coeffs))]).n(53) 9.31562890589...e-10 sage: L(30).n(53) 9.31562890589...e-10 sage: f = ModularForms(n=infinity, k=2, ep=-1).f_i() sage: L = f.lseries() sage: L.check_functional_equation() < 2^(-50) True sage: L.taylor_series(1, 3) 0.000000000000... + 5.76543616701...*z + 9.92776715593...*z^2 + O(z^3) sage: coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sage: sum([coeffs[k] * ZZ(k)^(-10) for k in range(1,len(coeffs))]).n(53) -23.9781792831... sage: L(10).n(53) -23.9781792831...
>>> from sage.all import * >>> from sage.modular.modform.eis_series import eisenstein_series_lseries >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> f = ModularForms(n=Integer(3), k=Integer(4)).E4()/Integer(240) >>> L = f.lseries() >>> L L-series associated to the modular form 1/240 + q + 9*q^2 + 28*q^3 + 73*q^4 + O(q^5) >>> L.conductor 1 >>> L(Integer(1)).prec() 53 >>> L.check_functional_equation() < Integer(2)**(-Integer(50)) True >>> L(Integer(1)) -0.0304484570583... >>> abs(L(Integer(1)) - eisenstein_series_lseries(Integer(4))(Integer(1))) < Integer(2)**(-Integer(53)) True >>> L.derivative(Integer(1), Integer(1)) -0.0504570844798... >>> L.derivative(Integer(1), Integer(2))/Integer(2) -0.0350657360354... >>> L.taylor_series(Integer(1), Integer(3)) -0.0304484570583... - 0.0504570844798...*z - 0.0350657360354...*z^2 + O(z^3) >>> coeffs = f.q_expansion_vector(min_exp=Integer(0), max_exp=Integer(20), fix_d=True) >>> sum([coeffs[k] * ZZ(k)**(-Integer(10)) for k in range(Integer(1),len(coeffs))]).n(Integer(53)) 1.00935215408... >>> L(Integer(10)) 1.00935215649... >>> f = ModularForms(n=Integer(6), k=Integer(4)).E4() >>> L = f.lseries(num_prec=Integer(200)) >>> L.conductor 3 >>> L.check_functional_equation() < Integer(2)**(-Integer(180)) True >>> L(Integer(1)) -2.92305187760575399490414692523085855811204642031749788... >>> L(Integer(1)).prec() 200 >>> coeffs = f.q_expansion_vector(min_exp=Integer(0), max_exp=Integer(20), fix_d=True) >>> sum([coeffs[k] * ZZ(k)**(-Integer(10)) for k in range(Integer(1),len(coeffs))]).n(Integer(53)) 24.2281438789... >>> L(Integer(10)).n(Integer(53)) 24.2281439447... >>> f = ModularForms(n=Integer(8), k=Integer(6), ep=-Integer(1)).E6() >>> L = f.lseries() >>> L.check_functional_equation() < Integer(2)**(-Integer(45)) True >>> L.taylor_series(Integer(3), Integer(3)) 0.000000000000... + 0.867197036668...*z + 0.261129628199...*z^2 + O(z^3) >>> coeffs = f.q_expansion_vector(min_exp=Integer(0), max_exp=Integer(20), fix_d=True) >>> sum([coeffs[k]*k**(-Integer(10)) for k in range(Integer(1),len(coeffs))]).n(Integer(53)) -13.0290002560... >>> L(Integer(10)).n(Integer(53)) -13.0290184579... >>> # long time >>> f = (ModularForms(n=Integer(17), k=Integer(24)).Delta()**Integer(2)) >>> L = f.lseries() >>> L.check_functional_equation() < Integer(2)**(-Integer(50)) True >>> L.taylor_series(Integer(12), Integer(3)) 0.000683924755280... - 0.000875942285963...*z + 0.000647618966023...*z^2 + O(z^3) >>> coeffs = f.q_expansion_vector(min_exp=Integer(0), max_exp=Integer(20), fix_d=True) >>> sum([coeffs[k]*k**(-Integer(30)) for k in range(Integer(1),len(coeffs))]).n(Integer(53)) 9.31562890589...e-10 >>> L(Integer(30)).n(Integer(53)) 9.31562890589...e-10 >>> f = ModularForms(n=infinity, k=Integer(2), ep=-Integer(1)).f_i() >>> L = f.lseries() >>> L.check_functional_equation() < Integer(2)**(-Integer(50)) True >>> L.taylor_series(Integer(1), Integer(3)) 0.000000000000... + 5.76543616701...*z + 9.92776715593...*z^2 + O(z^3) >>> coeffs = f.q_expansion_vector(min_exp=Integer(0), max_exp=Integer(20), fix_d=True) >>> sum([coeffs[k] * ZZ(k)**(-Integer(10)) for k in range(Integer(1),len(coeffs))]).n(Integer(53)) -23.9781792831... >>> L(Integer(10)).n(Integer(53)) -23.9781792831...
from sage.modular.modform.eis_series import eisenstein_series_lseries from sage.modular.modform_hecketriangle.space import ModularForms f = ModularForms(n=3, k=4).E4()/240 L = f.lseries() L L.conductor L(1).prec() L.check_functional_equation() < 2^(-50) L(1) abs(L(1) - eisenstein_series_lseries(4)(1)) < 2^(-53) L.derivative(1, 1) L.derivative(1, 2)/2 L.taylor_series(1, 3) coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sum([coeffs[k] * ZZ(k)^(-10) for k in range(1,len(coeffs))]).n(53) L(10) f = ModularForms(n=6, k=4).E4() L = f.lseries(num_prec=200) L.conductor L.check_functional_equation() < 2^(-180) L(1) L(1).prec() coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sum([coeffs[k] * ZZ(k)^(-10) for k in range(1,len(coeffs))]).n(53) L(10).n(53) f = ModularForms(n=8, k=6, ep=-1).E6() L = f.lseries() L.check_functional_equation() < 2^(-45) L.taylor_series(3, 3) coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sum([coeffs[k]*k^(-10) for k in range(1,len(coeffs))]).n(53) L(10).n(53) # long time f = (ModularForms(n=17, k=24).Delta()^2) L = f.lseries() L.check_functional_equation() < 2^(-50) L.taylor_series(12, 3) coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sum([coeffs[k]*k^(-30) for k in range(1,len(coeffs))]).n(53) L(30).n(53) f = ModularForms(n=infinity, k=2, ep=-1).f_i() L = f.lseries() L.check_functional_equation() < 2^(-50) L.taylor_series(1, 3) coeffs = f.q_expansion_vector(min_exp=0, max_exp=20, fix_d=True) sum([coeffs[k] * ZZ(k)^(-10) for k in range(1,len(coeffs))]).n(53) L(10).n(53)