Graded rings of modular forms for Hecke triangle groups¶
AUTHORS:
Jonas Jermann (2013): initial version
- class sage.modular.modform_hecketriangle.abstract_ring.FormsRing_abstract(group, base_ring, red_hom, n)[source]¶
Bases:
Parent
Abstract (Hecke) forms ring.
This should never be called directly. Instead one should instantiate one of the derived classes of this class.
- AnalyticType[source]¶
alias of
AnalyticType
- Delta()[source]¶
Return an analog of the Delta-function.
It lies in the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.It is a cusp form of weight \(12\) and is equal to
d*(E4^3 - E6^2)
or (in terms of the generators)d*x^(2*n-6)*(x^n - y^2)
.Note that
Delta
is also a cusp form forn=infinity
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, CuspFormsRing sage: MR = CuspFormsRing(n=7) sage: Delta = MR.Delta() sage: Delta in MR True sage: Delta f_rho^15*d - f_rho^8*f_i^2*d sage: QuasiMeromorphicModularFormsRing(n=7).Delta() == QuasiMeromorphicModularFormsRing(n=7)(Delta) True sage: from sage.modular.modform_hecketriangle.space import CuspForms, ModularForms sage: MF = CuspForms(n=5, k=12) sage: Delta = MF.Delta() sage: Delta in MF True sage: CuspFormsRing(n=5, red_hom=True).Delta() == Delta True sage: CuspForms(n=5, k=0).Delta() == Delta True sage: MF.disp_prec(3) sage: Delta q + 47/(200*d)*q^2 + O(q^3) sage: d = ModularForms(n=5).get_d() sage: Delta == (d*(ModularForms(n=5).E4()^3-ModularForms(n=5).E6()^2)) True sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = CuspForms(n=5, k=12) sage: d = MF.get_d() sage: q = MF.get_q() sage: CuspForms(n=5, k=12).Delta().q_expansion(prec=5) == (d*MFC(group=5, prec=7).Delta_ZZ()(q/d)).add_bigoh(5) True sage: CuspForms(n=infinity, k=12).Delta().q_expansion(prec=5) == (d*MFC(group=infinity, prec=7).Delta_ZZ()(q/d)).add_bigoh(5) True sage: CuspForms(n=5, k=12).Delta().q_expansion(fix_d=1, prec=5) == MFC(group=5, prec=7).Delta_ZZ().add_bigoh(5) True sage: CuspForms(n=infinity, k=12).Delta().q_expansion(fix_d=1, prec=5) == MFC(group=infinity, prec=7).Delta_ZZ().add_bigoh(5) True sage: CuspForms(n=infinity, k=12).Delta() q + 24*q^2 + 252*q^3 + 1472*q^4 + O(q^5) sage: CuspForms(k=12).f_inf() == CuspForms(k=12).Delta() True sage: CuspForms(k=12).Delta() q - 24*q^2 + 252*q^3 - 1472*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, CuspFormsRing >>> MR = CuspFormsRing(n=Integer(7)) >>> Delta = MR.Delta() >>> Delta in MR True >>> Delta f_rho^15*d - f_rho^8*f_i^2*d >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).Delta() == QuasiMeromorphicModularFormsRing(n=Integer(7))(Delta) True >>> from sage.modular.modform_hecketriangle.space import CuspForms, ModularForms >>> MF = CuspForms(n=Integer(5), k=Integer(12)) >>> Delta = MF.Delta() >>> Delta in MF True >>> CuspFormsRing(n=Integer(5), red_hom=True).Delta() == Delta True >>> CuspForms(n=Integer(5), k=Integer(0)).Delta() == Delta True >>> MF.disp_prec(Integer(3)) >>> Delta q + 47/(200*d)*q^2 + O(q^3) >>> d = ModularForms(n=Integer(5)).get_d() >>> Delta == (d*(ModularForms(n=Integer(5)).E4()**Integer(3)-ModularForms(n=Integer(5)).E6()**Integer(2))) True >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = CuspForms(n=Integer(5), k=Integer(12)) >>> d = MF.get_d() >>> q = MF.get_q() >>> CuspForms(n=Integer(5), k=Integer(12)).Delta().q_expansion(prec=Integer(5)) == (d*MFC(group=Integer(5), prec=Integer(7)).Delta_ZZ()(q/d)).add_bigoh(Integer(5)) True >>> CuspForms(n=infinity, k=Integer(12)).Delta().q_expansion(prec=Integer(5)) == (d*MFC(group=infinity, prec=Integer(7)).Delta_ZZ()(q/d)).add_bigoh(Integer(5)) True >>> CuspForms(n=Integer(5), k=Integer(12)).Delta().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).Delta_ZZ().add_bigoh(Integer(5)) True >>> CuspForms(n=infinity, k=Integer(12)).Delta().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).Delta_ZZ().add_bigoh(Integer(5)) True >>> CuspForms(n=infinity, k=Integer(12)).Delta() q + 24*q^2 + 252*q^3 + 1472*q^4 + O(q^5) >>> CuspForms(k=Integer(12)).f_inf() == CuspForms(k=Integer(12)).Delta() True >>> CuspForms(k=Integer(12)).Delta() q - 24*q^2 + 252*q^3 - 1472*q^4 + O(q^5)
- E2()[source]¶
Return the normalized quasi holomorphic Eisenstein series of weight \(2\).
It lies in a (quasi holomorphic) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.It is in particular also a generator of the graded ring of
self
and the polynomial variablez
exactly corresponds toE2
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, QuasiModularFormsRing, CuspFormsRing sage: MR = QuasiModularFormsRing(n=7) sage: E2 = MR.E2() sage: E2 in MR True sage: CuspFormsRing(n=7).E2() == E2 True sage: E2 E2 sage: QuasiMeromorphicModularFormsRing(n=7).E2() == QuasiMeromorphicModularFormsRing(n=7)(E2) True sage: from sage.modular.modform_hecketriangle.space import QuasiModularForms, CuspForms sage: MF = QuasiModularForms(n=5, k=2) sage: E2 = MF.E2() sage: E2 in MF True sage: QuasiModularFormsRing(n=5, red_hom=True).E2() == E2 True sage: CuspForms(n=5, k=12, ep=1).E2() == E2 True sage: MF.disp_prec(3) sage: E2 1 - 9/(200*d)*q - 369/(320000*d^2)*q^2 + O(q^3) sage: f_inf = MF.f_inf() sage: E2 == f_inf.derivative() / f_inf True sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = QuasiModularForms(n=5, k=2) sage: d = MF.get_d() sage: q = MF.get_q() sage: QuasiModularForms(n=5, k=2).E2().q_expansion(prec=5) == MFC(group=5, prec=7).E2_ZZ()(q/d).add_bigoh(5) True sage: QuasiModularForms(n=infinity, k=2).E2().q_expansion(prec=5) == MFC(group=infinity, prec=7).E2_ZZ()(q/d).add_bigoh(5) True sage: QuasiModularForms(n=5, k=2).E2().q_expansion(fix_d=1, prec=5) == MFC(group=5, prec=7).E2_ZZ().add_bigoh(5) True sage: QuasiModularForms(n=infinity, k=2).E2().q_expansion(fix_d=1, prec=5) == MFC(group=infinity, prec=7).E2_ZZ().add_bigoh(5) True sage: QuasiModularForms(n=infinity, k=2).E2() 1 - 8*q - 8*q^2 - 32*q^3 - 40*q^4 + O(q^5) sage: QuasiModularForms(k=2).E2() 1 - 24*q - 72*q^2 - 96*q^3 - 168*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, QuasiModularFormsRing, CuspFormsRing >>> MR = QuasiModularFormsRing(n=Integer(7)) >>> E2 = MR.E2() >>> E2 in MR True >>> CuspFormsRing(n=Integer(7)).E2() == E2 True >>> E2 E2 >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).E2() == QuasiMeromorphicModularFormsRing(n=Integer(7))(E2) True >>> from sage.modular.modform_hecketriangle.space import QuasiModularForms, CuspForms >>> MF = QuasiModularForms(n=Integer(5), k=Integer(2)) >>> E2 = MF.E2() >>> E2 in MF True >>> QuasiModularFormsRing(n=Integer(5), red_hom=True).E2() == E2 True >>> CuspForms(n=Integer(5), k=Integer(12), ep=Integer(1)).E2() == E2 True >>> MF.disp_prec(Integer(3)) >>> E2 1 - 9/(200*d)*q - 369/(320000*d^2)*q^2 + O(q^3) >>> f_inf = MF.f_inf() >>> E2 == f_inf.derivative() / f_inf True >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = QuasiModularForms(n=Integer(5), k=Integer(2)) >>> d = MF.get_d() >>> q = MF.get_q() >>> QuasiModularForms(n=Integer(5), k=Integer(2)).E2().q_expansion(prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).E2_ZZ()(q/d).add_bigoh(Integer(5)) True >>> QuasiModularForms(n=infinity, k=Integer(2)).E2().q_expansion(prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).E2_ZZ()(q/d).add_bigoh(Integer(5)) True >>> QuasiModularForms(n=Integer(5), k=Integer(2)).E2().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).E2_ZZ().add_bigoh(Integer(5)) True >>> QuasiModularForms(n=infinity, k=Integer(2)).E2().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).E2_ZZ().add_bigoh(Integer(5)) True >>> QuasiModularForms(n=infinity, k=Integer(2)).E2() 1 - 8*q - 8*q^2 - 32*q^3 - 40*q^4 + O(q^5) >>> QuasiModularForms(k=Integer(2)).E2() 1 - 24*q - 72*q^2 - 96*q^3 - 168*q^4 + O(q^5)
- E4()[source]¶
Return the normalized Eisenstein series of weight \(4\).
It lies in a (holomorphic) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.It is equal to
f_rho^(n-2)
.NOTE:
If
n=infinity
the situation is different, there we have:f_rho=1
(since that’s the limit asn
goes to infinity) and the polynomial variablex
refers toE4
instead off_rho
. In that caseE4
has exactly one simple zero at the cusp-1
. Also note thatE4
is the limit off_rho^n
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, ModularFormsRing, CuspFormsRing sage: MR = ModularFormsRing(n=7) sage: E4 = MR.E4() sage: E4 in MR True sage: CuspFormsRing(n=7).E4() == E4 True sage: E4 f_rho^5 sage: QuasiMeromorphicModularFormsRing(n=7).E4() == QuasiMeromorphicModularFormsRing(n=7)(E4) True sage: from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms sage: MF = ModularForms(n=5, k=4) sage: E4 = MF.E4() sage: E4 in MF True sage: ModularFormsRing(n=5, red_hom=True).E4() == E4 True sage: CuspForms(n=5, k=12).E4() == E4 True sage: MF.disp_prec(3) sage: E4 1 + 21/(100*d)*q + 483/(32000*d^2)*q^2 + O(q^3) sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = ModularForms(n=5) sage: d = MF.get_d() sage: q = MF.get_q() sage: ModularForms(n=5, k=4).E4().q_expansion(prec=5) == MFC(group=5, prec=7).E4_ZZ()(q/d).add_bigoh(5) True sage: ModularForms(n=infinity, k=4).E4().q_expansion(prec=5) == MFC(group=infinity, prec=7).E4_ZZ()(q/d).add_bigoh(5) True sage: ModularForms(n=5, k=4).E4().q_expansion(fix_d=1, prec=5) == MFC(group=5, prec=7).E4_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity, k=4).E4().q_expansion(fix_d=1, prec=5) == MFC(group=infinity, prec=7).E4_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity, k=4).E4() 1 + 16*q + 112*q^2 + 448*q^3 + 1136*q^4 + O(q^5) sage: ModularForms(k=4).f_rho() == ModularForms(k=4).E4() True sage: ModularForms(k=4).E4() 1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, ModularFormsRing, CuspFormsRing >>> MR = ModularFormsRing(n=Integer(7)) >>> E4 = MR.E4() >>> E4 in MR True >>> CuspFormsRing(n=Integer(7)).E4() == E4 True >>> E4 f_rho^5 >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).E4() == QuasiMeromorphicModularFormsRing(n=Integer(7))(E4) True >>> from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms >>> MF = ModularForms(n=Integer(5), k=Integer(4)) >>> E4 = MF.E4() >>> E4 in MF True >>> ModularFormsRing(n=Integer(5), red_hom=True).E4() == E4 True >>> CuspForms(n=Integer(5), k=Integer(12)).E4() == E4 True >>> MF.disp_prec(Integer(3)) >>> E4 1 + 21/(100*d)*q + 483/(32000*d^2)*q^2 + O(q^3) >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = ModularForms(n=Integer(5)) >>> d = MF.get_d() >>> q = MF.get_q() >>> ModularForms(n=Integer(5), k=Integer(4)).E4().q_expansion(prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).E4_ZZ()(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(4)).E4().q_expansion(prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).E4_ZZ()(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(5), k=Integer(4)).E4().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).E4_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(4)).E4().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).E4_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(4)).E4() 1 + 16*q + 112*q^2 + 448*q^3 + 1136*q^4 + O(q^5) >>> ModularForms(k=Integer(4)).f_rho() == ModularForms(k=Integer(4)).E4() True >>> ModularForms(k=Integer(4)).E4() 1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + O(q^5)
- E6()[source]¶
Return the normalized Eisenstein series of weight \(6\).
It lies in a (holomorphic) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.It is equal to
f_rho^(n-3) * f_i
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, ModularFormsRing, CuspFormsRing sage: MR = ModularFormsRing(n=7) sage: E6 = MR.E6() sage: E6 in MR True sage: CuspFormsRing(n=7).E6() == E6 True sage: E6 f_rho^4*f_i sage: QuasiMeromorphicModularFormsRing(n=7).E6() == QuasiMeromorphicModularFormsRing(n=7)(E6) True sage: from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms sage: MF = ModularForms(n=5, k=6) sage: E6 = MF.E6() sage: E6 in MF True sage: ModularFormsRing(n=5, red_hom=True).E6() == E6 True sage: CuspForms(n=5, k=12).E6() == E6 True sage: MF.disp_prec(3) sage: E6 1 - 37/(200*d)*q - 14663/(320000*d^2)*q^2 + O(q^3) sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = ModularForms(n=5, k=6) sage: d = MF.get_d() sage: q = MF.get_q() sage: ModularForms(n=5, k=6).E6().q_expansion(prec=5) == MFC(group=5, prec=7).E6_ZZ()(q/d).add_bigoh(5) True sage: ModularForms(n=infinity, k=6).E6().q_expansion(prec=5) == MFC(group=infinity, prec=7).E6_ZZ()(q/d).add_bigoh(5) True sage: ModularForms(n=5, k=6).E6().q_expansion(fix_d=1, prec=5) == MFC(group=5, prec=7).E6_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity, k=6).E6().q_expansion(fix_d=1, prec=5) == MFC(group=infinity, prec=7).E6_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity, k=6).E6() 1 - 8*q - 248*q^2 - 1952*q^3 - 8440*q^4 + O(q^5) sage: ModularForms(k=6).f_i() == ModularForms(k=6).E6() True sage: ModularForms(k=6).E6() 1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, ModularFormsRing, CuspFormsRing >>> MR = ModularFormsRing(n=Integer(7)) >>> E6 = MR.E6() >>> E6 in MR True >>> CuspFormsRing(n=Integer(7)).E6() == E6 True >>> E6 f_rho^4*f_i >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).E6() == QuasiMeromorphicModularFormsRing(n=Integer(7))(E6) True >>> from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms >>> MF = ModularForms(n=Integer(5), k=Integer(6)) >>> E6 = MF.E6() >>> E6 in MF True >>> ModularFormsRing(n=Integer(5), red_hom=True).E6() == E6 True >>> CuspForms(n=Integer(5), k=Integer(12)).E6() == E6 True >>> MF.disp_prec(Integer(3)) >>> E6 1 - 37/(200*d)*q - 14663/(320000*d^2)*q^2 + O(q^3) >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = ModularForms(n=Integer(5), k=Integer(6)) >>> d = MF.get_d() >>> q = MF.get_q() >>> ModularForms(n=Integer(5), k=Integer(6)).E6().q_expansion(prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).E6_ZZ()(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(6)).E6().q_expansion(prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).E6_ZZ()(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(5), k=Integer(6)).E6().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).E6_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(6)).E6().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).E6_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(6)).E6() 1 - 8*q - 248*q^2 - 1952*q^3 - 8440*q^4 + O(q^5) >>> ModularForms(k=Integer(6)).f_i() == ModularForms(k=Integer(6)).E6() True >>> ModularForms(k=Integer(6)).E6() 1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 + O(q^5)
- EisensteinSeries(k=None)[source]¶
Return the normalized Eisenstein series of weight
k
.Only arithmetic groups or trivial weights (with corresponding one dimensional spaces) are supported.
INPUT:
k
– a nonnegative even integer, namely the weight. Ifk
isNone
(default) then the weight ofself
is chosen ifself
is homogeneous and the weight is possible, otherwisek
is set to \(0\).
OUTPUT:
A modular form element lying in a (holomorphic) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing, CuspFormsRing sage: MR = ModularFormsRing() sage: MR.EisensteinSeries() == MR.one() True sage: E8 = MR.EisensteinSeries(k=8) sage: E8 in MR True sage: E8 f_rho^2 sage: from sage.modular.modform_hecketriangle.space import CuspForms, ModularForms sage: MF = ModularForms(n=4, k=12) sage: E12 = MF.EisensteinSeries() sage: E12 in MF True sage: CuspFormsRing(n=4, red_hom=True).EisensteinSeries(k=12).parent() ModularForms(n=4, k=12, ep=1) over Integer Ring sage: MF.disp_prec(4) sage: E12 1 + 1008/691*q + 2129904/691*q^2 + 178565184/691*q^3 + O(q^4) sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: d = MF.get_d() sage: q = MF.get_q() sage: ModularForms(n=3, k=2).EisensteinSeries().q_expansion(prec=5) == MFC(group=3, prec=7).EisensteinSeries_ZZ(k=2)(q/d).add_bigoh(5) True sage: ModularForms(n=3, k=4).EisensteinSeries().q_expansion(prec=5) == MFC(group=3, prec=7).EisensteinSeries_ZZ(k=4)(q/d).add_bigoh(5) True sage: ModularForms(n=3, k=6).EisensteinSeries().q_expansion(prec=5) == MFC(group=3, prec=7).EisensteinSeries_ZZ(k=6)(q/d).add_bigoh(5) True sage: ModularForms(n=3, k=8).EisensteinSeries().q_expansion(prec=5) == MFC(group=3, prec=7).EisensteinSeries_ZZ(k=8)(q/d).add_bigoh(5) True sage: ModularForms(n=4, k=2).EisensteinSeries().q_expansion(prec=5) == MFC(group=4, prec=7).EisensteinSeries_ZZ(k=2)(q/d).add_bigoh(5) True sage: ModularForms(n=4, k=4).EisensteinSeries().q_expansion(prec=5) == MFC(group=4, prec=7).EisensteinSeries_ZZ(k=4)(q/d).add_bigoh(5) True sage: ModularForms(n=4, k=6).EisensteinSeries().q_expansion(prec=5) == MFC(group=4, prec=7).EisensteinSeries_ZZ(k=6)(q/d).add_bigoh(5) True sage: ModularForms(n=4, k=8).EisensteinSeries().q_expansion(prec=5) == MFC(group=4, prec=7).EisensteinSeries_ZZ(k=8)(q/d).add_bigoh(5) True sage: ModularForms(n=6, k=2, ep=-1).EisensteinSeries().q_expansion(prec=5) == MFC(group=6, prec=7).EisensteinSeries_ZZ(k=2)(q/d).add_bigoh(5) True sage: ModularForms(n=6, k=4).EisensteinSeries().q_expansion(prec=5) == MFC(group=6, prec=7).EisensteinSeries_ZZ(k=4)(q/d).add_bigoh(5) True sage: ModularForms(n=6, k=6, ep=-1).EisensteinSeries().q_expansion(prec=5) == MFC(group=6, prec=7).EisensteinSeries_ZZ(k=6)(q/d).add_bigoh(5) True sage: ModularForms(n=6, k=8).EisensteinSeries().q_expansion(prec=5) == MFC(group=6, prec=7).EisensteinSeries_ZZ(k=8)(q/d).add_bigoh(5) True sage: ModularForms(n=3, k=12).EisensteinSeries() 1 + 65520/691*q + 134250480/691*q^2 + 11606736960/691*q^3 + 274945048560/691*q^4 + O(q^5) sage: ModularForms(n=4, k=12).EisensteinSeries() 1 + 1008/691*q + 2129904/691*q^2 + 178565184/691*q^3 + O(q^4) sage: ModularForms(n=6, k=12).EisensteinSeries() 1 + 6552/50443*q + 13425048/50443*q^2 + 1165450104/50443*q^3 + 27494504856/50443*q^4 + O(q^5) sage: ModularForms(n=3, k=20).EisensteinSeries() 1 + 13200/174611*q + 6920614800/174611*q^2 + 15341851377600/174611*q^3 + 3628395292275600/174611*q^4 + O(q^5) sage: ModularForms(n=4).EisensteinSeries(k=8) 1 + 480/17*q + 69600/17*q^2 + 1050240/17*q^3 + 8916960/17*q^4 + O(q^5) sage: ModularForms(n=6).EisensteinSeries(k=20) 1 + 264/206215591*q + 138412296/206215591*q^2 + 306852616488/206215591*q^3 + 72567905845512/206215591*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing, CuspFormsRing >>> MR = ModularFormsRing() >>> MR.EisensteinSeries() == MR.one() True >>> E8 = MR.EisensteinSeries(k=Integer(8)) >>> E8 in MR True >>> E8 f_rho^2 >>> from sage.modular.modform_hecketriangle.space import CuspForms, ModularForms >>> MF = ModularForms(n=Integer(4), k=Integer(12)) >>> E12 = MF.EisensteinSeries() >>> E12 in MF True >>> CuspFormsRing(n=Integer(4), red_hom=True).EisensteinSeries(k=Integer(12)).parent() ModularForms(n=4, k=12, ep=1) over Integer Ring >>> MF.disp_prec(Integer(4)) >>> E12 1 + 1008/691*q + 2129904/691*q^2 + 178565184/691*q^3 + O(q^4) >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> d = MF.get_d() >>> q = MF.get_q() >>> ModularForms(n=Integer(3), k=Integer(2)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(3), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(2))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(3), k=Integer(4)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(3), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(4))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(3), k=Integer(6)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(3), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(6))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(3), k=Integer(8)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(3), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(8))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(4), k=Integer(2)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(4), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(2))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(4), k=Integer(4)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(4), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(4))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(4), k=Integer(6)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(4), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(6))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(4), k=Integer(8)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(4), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(8))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(6), k=Integer(2), ep=-Integer(1)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(6), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(2))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(6), k=Integer(4)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(6), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(4))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(6), k=Integer(6), ep=-Integer(1)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(6), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(6))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(6), k=Integer(8)).EisensteinSeries().q_expansion(prec=Integer(5)) == MFC(group=Integer(6), prec=Integer(7)).EisensteinSeries_ZZ(k=Integer(8))(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(3), k=Integer(12)).EisensteinSeries() 1 + 65520/691*q + 134250480/691*q^2 + 11606736960/691*q^3 + 274945048560/691*q^4 + O(q^5) >>> ModularForms(n=Integer(4), k=Integer(12)).EisensteinSeries() 1 + 1008/691*q + 2129904/691*q^2 + 178565184/691*q^3 + O(q^4) >>> ModularForms(n=Integer(6), k=Integer(12)).EisensteinSeries() 1 + 6552/50443*q + 13425048/50443*q^2 + 1165450104/50443*q^3 + 27494504856/50443*q^4 + O(q^5) >>> ModularForms(n=Integer(3), k=Integer(20)).EisensteinSeries() 1 + 13200/174611*q + 6920614800/174611*q^2 + 15341851377600/174611*q^3 + 3628395292275600/174611*q^4 + O(q^5) >>> ModularForms(n=Integer(4)).EisensteinSeries(k=Integer(8)) 1 + 480/17*q + 69600/17*q^2 + 1050240/17*q^3 + 8916960/17*q^4 + O(q^5) >>> ModularForms(n=Integer(6)).EisensteinSeries(k=Integer(20)) 1 + 264/206215591*q + 138412296/206215591*q^2 + 306852616488/206215591*q^3 + 72567905845512/206215591*q^4 + O(q^5)
- Element[source]¶
alias of
FormsRingElement
- FormsRingElement[source]¶
alias of
FormsRingElement
- G_inv()[source]¶
If \(2\) divides \(n\): Return the G-invariant of the group of
self
.The G-invariant is analogous to the J-invariant but has multiplier \(-1\). I.e.
G_inv(-1/t) = -G_inv(t)
. It is a holomorphic square root ofJ_inv*(J_inv-1)
with real Fourier coefficients.If \(2\) does not divide \(n\) the function does not exist and an exception is raised.
The G-invariant lies in a (weak) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.NOTE:
If
n=infinity
thenG_inv
is holomorphic everywhere except at the cusp-1
where it isn’t even meromorphic. Consequently this function raises an exception forn=infinity
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, WeakModularFormsRing, CuspFormsRing sage: MR = WeakModularFormsRing(n=8) sage: G_inv = MR.G_inv() sage: G_inv in MR True sage: CuspFormsRing(n=8).G_inv() == G_inv True sage: G_inv f_rho^4*f_i*d/(f_rho^8 - f_i^2) sage: QuasiMeromorphicModularFormsRing(n=8).G_inv() == QuasiMeromorphicModularFormsRing(n=8)(G_inv) True sage: from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms sage: MF = WeakModularForms(n=8, k=0, ep=-1) sage: G_inv = MF.G_inv() sage: G_inv in MF True sage: WeakModularFormsRing(n=8, red_hom=True).G_inv() == G_inv True sage: CuspForms(n=8, k=12, ep=1).G_inv() == G_inv True sage: MF.disp_prec(3) sage: G_inv d^2*q^-1 - 15*d/128 - 15139/262144*q - 11575/(1572864*d)*q^2 + O(q^3) sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = WeakModularForms(n=8) sage: d = MF.get_d() sage: q = MF.get_q() sage: WeakModularForms(n=8).G_inv().q_expansion(prec=5) == (d*MFC(group=8, prec=7).G_inv_ZZ()(q/d)).add_bigoh(5) True sage: WeakModularForms(n=8).G_inv().q_expansion(fix_d=1, prec=5) == MFC(group=8, prec=7).G_inv_ZZ().add_bigoh(5) True sage: WeakModularForms(n=4, k=0, ep=-1).G_inv() 1/65536*q^-1 - 3/8192 - 955/16384*q - 49/32*q^2 - 608799/32768*q^3 - 659/4*q^4 + O(q^5) As explained above, the G-invariant exists only for even `n`:: sage: from sage.modular.modform_hecketriangle.space import WeakModularForms sage: MF = WeakModularForms(n=9) sage: MF.G_inv() Traceback (most recent call last): ... ArithmeticError: G_inv doesn't exist for odd n(=9).
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, WeakModularFormsRing, CuspFormsRing >>> MR = WeakModularFormsRing(n=Integer(8)) >>> G_inv = MR.G_inv() >>> G_inv in MR True >>> CuspFormsRing(n=Integer(8)).G_inv() == G_inv True >>> G_inv f_rho^4*f_i*d/(f_rho^8 - f_i^2) >>> QuasiMeromorphicModularFormsRing(n=Integer(8)).G_inv() == QuasiMeromorphicModularFormsRing(n=Integer(8))(G_inv) True >>> from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms >>> MF = WeakModularForms(n=Integer(8), k=Integer(0), ep=-Integer(1)) >>> G_inv = MF.G_inv() >>> G_inv in MF True >>> WeakModularFormsRing(n=Integer(8), red_hom=True).G_inv() == G_inv True >>> CuspForms(n=Integer(8), k=Integer(12), ep=Integer(1)).G_inv() == G_inv True >>> MF.disp_prec(Integer(3)) >>> G_inv d^2*q^-1 - 15*d/128 - 15139/262144*q - 11575/(1572864*d)*q^2 + O(q^3) >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = WeakModularForms(n=Integer(8)) >>> d = MF.get_d() >>> q = MF.get_q() >>> WeakModularForms(n=Integer(8)).G_inv().q_expansion(prec=Integer(5)) == (d*MFC(group=Integer(8), prec=Integer(7)).G_inv_ZZ()(q/d)).add_bigoh(Integer(5)) True >>> WeakModularForms(n=Integer(8)).G_inv().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(8), prec=Integer(7)).G_inv_ZZ().add_bigoh(Integer(5)) True >>> WeakModularForms(n=Integer(4), k=Integer(0), ep=-Integer(1)).G_inv() 1/65536*q^-1 - 3/8192 - 955/16384*q - 49/32*q^2 - 608799/32768*q^3 - 659/4*q^4 + O(q^5) As explained above, the G-invariant exists only for even `n`:: >>> from sage.modular.modform_hecketriangle.space import WeakModularForms >>> MF = WeakModularForms(n=Integer(9)) >>> MF.G_inv() Traceback (most recent call last): ... ArithmeticError: G_inv doesn't exist for odd n(=9).
- J_inv()[source]¶
Return the J-invariant (Hauptmodul) of the group of
self
. It is normalized such thatJ_inv(infinity) = infinity
, it has real Fourier coefficients starting withd > 0
andJ_inv(i) = 1
It lies in a (weak) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, WeakModularFormsRing, CuspFormsRing sage: MR = WeakModularFormsRing(n=7) sage: J_inv = MR.J_inv() sage: J_inv in MR True sage: CuspFormsRing(n=7).J_inv() == J_inv True sage: J_inv f_rho^7/(f_rho^7 - f_i^2) sage: QuasiMeromorphicModularFormsRing(n=7).J_inv() == QuasiMeromorphicModularFormsRing(n=7)(J_inv) True sage: from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms sage: MF = WeakModularForms(n=5, k=0) sage: J_inv = MF.J_inv() sage: J_inv in MF True sage: WeakModularFormsRing(n=5, red_hom=True).J_inv() == J_inv True sage: CuspForms(n=5, k=12).J_inv() == J_inv True sage: MF.disp_prec(3) sage: J_inv d*q^-1 + 79/200 + 42877/(640000*d)*q + 12957/(2000000*d^2)*q^2 + O(q^3) sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = WeakModularForms(n=5) sage: d = MF.get_d() sage: q = MF.get_q() sage: WeakModularForms(n=5).J_inv().q_expansion(prec=5) == MFC(group=5, prec=7).J_inv_ZZ()(q/d).add_bigoh(5) True sage: WeakModularForms(n=infinity).J_inv().q_expansion(prec=5) == MFC(group=infinity, prec=7).J_inv_ZZ()(q/d).add_bigoh(5) True sage: WeakModularForms(n=5).J_inv().q_expansion(fix_d=1, prec=5) == MFC(group=5, prec=7).J_inv_ZZ().add_bigoh(5) True sage: WeakModularForms(n=infinity).J_inv().q_expansion(fix_d=1, prec=5) == MFC(group=infinity, prec=7).J_inv_ZZ().add_bigoh(5) True sage: WeakModularForms(n=infinity).J_inv() 1/64*q^-1 + 3/8 + 69/16*q + 32*q^2 + 5601/32*q^3 + 768*q^4 + O(q^5) sage: WeakModularForms().J_inv() 1/1728*q^-1 + 31/72 + 1823/16*q + 335840/27*q^2 + 16005555/32*q^3 + 11716352*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, WeakModularFormsRing, CuspFormsRing >>> MR = WeakModularFormsRing(n=Integer(7)) >>> J_inv = MR.J_inv() >>> J_inv in MR True >>> CuspFormsRing(n=Integer(7)).J_inv() == J_inv True >>> J_inv f_rho^7/(f_rho^7 - f_i^2) >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).J_inv() == QuasiMeromorphicModularFormsRing(n=Integer(7))(J_inv) True >>> from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms >>> MF = WeakModularForms(n=Integer(5), k=Integer(0)) >>> J_inv = MF.J_inv() >>> J_inv in MF True >>> WeakModularFormsRing(n=Integer(5), red_hom=True).J_inv() == J_inv True >>> CuspForms(n=Integer(5), k=Integer(12)).J_inv() == J_inv True >>> MF.disp_prec(Integer(3)) >>> J_inv d*q^-1 + 79/200 + 42877/(640000*d)*q + 12957/(2000000*d^2)*q^2 + O(q^3) >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = WeakModularForms(n=Integer(5)) >>> d = MF.get_d() >>> q = MF.get_q() >>> WeakModularForms(n=Integer(5)).J_inv().q_expansion(prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).J_inv_ZZ()(q/d).add_bigoh(Integer(5)) True >>> WeakModularForms(n=infinity).J_inv().q_expansion(prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).J_inv_ZZ()(q/d).add_bigoh(Integer(5)) True >>> WeakModularForms(n=Integer(5)).J_inv().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).J_inv_ZZ().add_bigoh(Integer(5)) True >>> WeakModularForms(n=infinity).J_inv().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).J_inv_ZZ().add_bigoh(Integer(5)) True >>> WeakModularForms(n=infinity).J_inv() 1/64*q^-1 + 3/8 + 69/16*q + 32*q^2 + 5601/32*q^3 + 768*q^4 + O(q^5) >>> WeakModularForms().J_inv() 1/1728*q^-1 + 31/72 + 1823/16*q + 335840/27*q^2 + 16005555/32*q^3 + 11716352*q^4 + O(q^5)
- analytic_type()[source]¶
Return the analytic type of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, QuasiWeakModularFormsRing sage: QuasiMeromorphicModularFormsRing().analytic_type() quasi meromorphic modular sage: QuasiWeakModularFormsRing().analytic_type() quasi weakly holomorphic modular sage: from sage.modular.modform_hecketriangle.space import MeromorphicModularForms, CuspForms sage: MeromorphicModularForms(k=10).analytic_type() meromorphic modular sage: CuspForms(n=7, k=12, base_ring=AA).analytic_type() cuspidal
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, QuasiWeakModularFormsRing >>> QuasiMeromorphicModularFormsRing().analytic_type() quasi meromorphic modular >>> QuasiWeakModularFormsRing().analytic_type() quasi weakly holomorphic modular >>> from sage.modular.modform_hecketriangle.space import MeromorphicModularForms, CuspForms >>> MeromorphicModularForms(k=Integer(10)).analytic_type() meromorphic modular >>> CuspForms(n=Integer(7), k=Integer(12), base_ring=AA).analytic_type() cuspidal
- base_ring()[source]¶
Return base ring of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().base_ring() Integer Ring sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: CuspForms(k=12, base_ring=AA).base_ring() Algebraic Real Field
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().base_ring() Integer Ring >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> CuspForms(k=Integer(12), base_ring=AA).base_ring() Algebraic Real Field
- change_ring(new_base_ring)[source]¶
Return the same space as
self
but over a new base ringnew_base_ring
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().change_ring(CC) ModularFormsRing(n=3) over Complex Field with 53 bits of precision
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().change_ring(CC) ModularFormsRing(n=3) over Complex Field with 53 bits of precision
- coeff_ring()[source]¶
Return coefficient ring of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().coeff_ring() Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: CuspForms(k=12, base_ring=AA).coeff_ring() Fraction Field of Univariate Polynomial Ring in d over Algebraic Real Field
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().coeff_ring() Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> CuspForms(k=Integer(12), base_ring=AA).coeff_ring() Fraction Field of Univariate Polynomial Ring in d over Algebraic Real Field
- construction()[source]¶
Return a functor that constructs
self
(used by the coercion machinery).EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().construction() (ModularFormsRingFunctor(n=3), BaseFacade(Integer Ring))
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().construction() (ModularFormsRingFunctor(n=3), BaseFacade(Integer Ring))
- contains_coeff_ring()[source]¶
Return whether
self
contains its coefficient ring.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import CuspFormsRing, ModularFormsRing sage: CuspFormsRing(n=4).contains_coeff_ring() False sage: ModularFormsRing(n=5).contains_coeff_ring() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import CuspFormsRing, ModularFormsRing >>> CuspFormsRing(n=Integer(4)).contains_coeff_ring() False >>> ModularFormsRing(n=Integer(5)).contains_coeff_ring() True
- default_num_prec(prec=None)[source]¶
Set the default numerical precision to
prec
(default:53
). Ifprec=None
(default) the current default numerical precision is returned instead.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: MF = ModularForms(k=6) sage: MF.default_prec(20) sage: MF.default_num_prec(10) sage: MF.default_num_prec() 10 sage: E6 = MF.E6() sage: E6(i + 10^(-1000)) 0.002... - 6.7...e-1000*I sage: MF.default_num_prec(100) sage: E6(i + 10^(-1000)) 3.9946838...e-1999 - 6.6578064...e-1000*I sage: MF = ModularForms(n=5, k=4/3) sage: f_rho = MF.f_rho() sage: f_rho.q_expansion(prec=2)[1] 7/(100*d) sage: MF.default_num_prec(15) sage: f_rho.q_expansion_fixed_d(prec=2)[1] 9.9... sage: MF.default_num_prec(100) sage: f_rho.q_expansion_fixed_d(prec=2)[1] 9.92593243510795915276017782...
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> MF = ModularForms(k=Integer(6)) >>> MF.default_prec(Integer(20)) >>> MF.default_num_prec(Integer(10)) >>> MF.default_num_prec() 10 >>> E6 = MF.E6() >>> E6(i + Integer(10)**(-Integer(1000))) 0.002... - 6.7...e-1000*I >>> MF.default_num_prec(Integer(100)) >>> E6(i + Integer(10)**(-Integer(1000))) 3.9946838...e-1999 - 6.6578064...e-1000*I >>> MF = ModularForms(n=Integer(5), k=Integer(4)/Integer(3)) >>> f_rho = MF.f_rho() >>> f_rho.q_expansion(prec=Integer(2))[Integer(1)] 7/(100*d) >>> MF.default_num_prec(Integer(15)) >>> f_rho.q_expansion_fixed_d(prec=Integer(2))[Integer(1)] 9.9... >>> MF.default_num_prec(Integer(100)) >>> f_rho.q_expansion_fixed_d(prec=Integer(2))[Integer(1)] 9.92593243510795915276017782...
- default_prec(prec=None)[source]¶
Set the default precision
prec
for the Fourier expansion. Ifprec=None
(default) then the current default precision is returned instead.INPUT:
prec
– integer
Note
This is also used as the default precision for the Fourier expansion when evaluating forms.
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: MR = ModularFormsRing() sage: MR.default_prec(3) sage: MR.default_prec() 3 sage: MR.Delta().q_expansion_fixed_d() q - 24*q^2 + O(q^3) sage: MF = ModularForms(k=4) sage: MF.default_prec(2) sage: MF.E4() 1 + 240*q + O(q^2) sage: MF.default_prec() 2
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> MR = ModularFormsRing() >>> MR.default_prec(Integer(3)) >>> MR.default_prec() 3 >>> MR.Delta().q_expansion_fixed_d() q - 24*q^2 + O(q^3) >>> MF = ModularForms(k=Integer(4)) >>> MF.default_prec(Integer(2)) >>> MF.E4() 1 + 240*q + O(q^2) >>> MF.default_prec() 2
- diff_alg()[source]¶
Return the algebra of differential operators (over QQ) which is used on rational functions representing elements of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().diff_alg() Noncommutative Multivariate Polynomial Ring in X, Y, Z, dX, dY, dZ over Rational Field, nc-relations: {dX*X: X*dX + 1, dY*Y: Y*dY + 1, dZ*Z: Z*dZ + 1} sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: CuspForms(k=12, base_ring=AA).diff_alg() Noncommutative Multivariate Polynomial Ring in X, Y, Z, dX, dY, dZ over Rational Field, nc-relations: {dX*X: X*dX + 1, dY*Y: Y*dY + 1, dZ*Z: Z*dZ + 1}
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().diff_alg() Noncommutative Multivariate Polynomial Ring in X, Y, Z, dX, dY, dZ over Rational Field, nc-relations: {dX*X: X*dX + 1, dY*Y: Y*dY + 1, dZ*Z: Z*dZ + 1} >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> CuspForms(k=Integer(12), base_ring=AA).diff_alg() Noncommutative Multivariate Polynomial Ring in X, Y, Z, dX, dY, dZ over Rational Field, nc-relations: {dX*X: X*dX + 1, dY*Y: Y*dY + 1, dZ*Z: Z*dZ + 1}
- disp_prec(prec=None)[source]¶
Set the maximal display precision to
prec
. Ifprec="max"
the precision is set to the default precision. Ifprec=None
(default) then the current display precision is returned instead.NOTE:
This is used for displaying/representing (elements of)
self
as Fourier expansions.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: MF = ModularForms(k=4) sage: MF.default_prec(5) sage: MF.disp_prec(3) sage: MF.disp_prec() 3 sage: MF.E4() 1 + 240*q + 2160*q^2 + O(q^3) sage: MF.disp_prec("max") sage: MF.E4() 1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> MF = ModularForms(k=Integer(4)) >>> MF.default_prec(Integer(5)) >>> MF.disp_prec(Integer(3)) >>> MF.disp_prec() 3 >>> MF.E4() 1 + 240*q + 2160*q^2 + O(q^3) >>> MF.disp_prec("max") >>> MF.E4() 1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + O(q^5)
- extend_type(analytic_type=None, ring=False)[source]¶
Return a new space which contains (elements of)
self
with the analytic type ofself
extended byanalytic_type
, possibly extended to a graded ring in casering
isTrue
.INPUT:
analytic_type
– anAnalyticType
or something which coerces into it (default:None
)ring
– whether to extend to a graded ring (default:False
)
OUTPUT: the new extended space
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: MR = ModularFormsRing(n=5) sage: MR.extend_type(["quasi", "weak"]) QuasiWeakModularFormsRing(n=5) over Integer Ring sage: CF=CuspForms(k=12) sage: CF.extend_type("holo") ModularForms(n=3, k=12, ep=1) over Integer Ring sage: CF.extend_type("quasi", ring=True) QuasiCuspFormsRing(n=3) over Integer Ring sage: CF.subspace([CF.Delta()]).extend_type() CuspForms(n=3, k=12, ep=1) over Integer Ring
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> MR = ModularFormsRing(n=Integer(5)) >>> MR.extend_type(["quasi", "weak"]) QuasiWeakModularFormsRing(n=5) over Integer Ring >>> CF=CuspForms(k=Integer(12)) >>> CF.extend_type("holo") ModularForms(n=3, k=12, ep=1) over Integer Ring >>> CF.extend_type("quasi", ring=True) QuasiCuspFormsRing(n=3) over Integer Ring >>> CF.subspace([CF.Delta()]).extend_type() CuspForms(n=3, k=12, ep=1) over Integer Ring
- f_i()[source]¶
Return a normalized modular form
f_i
with exactly one simple zero ati
(up to the group action).It lies in a (holomorphic) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.The polynomial variable
y
exactly corresponds tof_i
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, ModularFormsRing, CuspFormsRing sage: MR = ModularFormsRing(n=7) sage: f_i = MR.f_i() sage: f_i in MR True sage: CuspFormsRing(n=7).f_i() == f_i True sage: f_i f_i sage: QuasiMeromorphicModularFormsRing(n=7).f_i() == QuasiMeromorphicModularFormsRing(n=7)(f_i) True sage: from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms sage: MF = ModularForms(n=5, k=10/3) sage: f_i = MF.f_i() sage: f_i in MF True sage: ModularFormsRing(n=5, red_hom=True).f_i() == f_i True sage: CuspForms(n=5, k=12).f_i() == f_i True sage: MF.disp_prec(3) sage: f_i 1 - 13/(40*d)*q - 351/(64000*d^2)*q^2 + O(q^3) sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = ModularForms(n=5) sage: d = MF.get_d() sage: q = MF.get_q() sage: ModularForms(n=5).f_i().q_expansion(prec=5) == MFC(group=5, prec=7).f_i_ZZ()(q/d).add_bigoh(5) True sage: ModularForms(n=infinity).f_i().q_expansion(prec=5) == MFC(group=infinity, prec=7).f_i_ZZ()(q/d).add_bigoh(5) True sage: ModularForms(n=5).f_i().q_expansion(fix_d=1, prec=5) == MFC(group=5, prec=7).f_i_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity).f_i().q_expansion(fix_d=1, prec=5) == MFC(group=infinity, prec=7).f_i_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity, k=2).f_i() 1 - 24*q + 24*q^2 - 96*q^3 + 24*q^4 + O(q^5) sage: ModularForms(k=6).f_i() == ModularForms(k=4).E6() True sage: ModularForms(k=6).f_i() 1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, ModularFormsRing, CuspFormsRing >>> MR = ModularFormsRing(n=Integer(7)) >>> f_i = MR.f_i() >>> f_i in MR True >>> CuspFormsRing(n=Integer(7)).f_i() == f_i True >>> f_i f_i >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).f_i() == QuasiMeromorphicModularFormsRing(n=Integer(7))(f_i) True >>> from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms >>> MF = ModularForms(n=Integer(5), k=Integer(10)/Integer(3)) >>> f_i = MF.f_i() >>> f_i in MF True >>> ModularFormsRing(n=Integer(5), red_hom=True).f_i() == f_i True >>> CuspForms(n=Integer(5), k=Integer(12)).f_i() == f_i True >>> MF.disp_prec(Integer(3)) >>> f_i 1 - 13/(40*d)*q - 351/(64000*d^2)*q^2 + O(q^3) >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = ModularForms(n=Integer(5)) >>> d = MF.get_d() >>> q = MF.get_q() >>> ModularForms(n=Integer(5)).f_i().q_expansion(prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).f_i_ZZ()(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=infinity).f_i().q_expansion(prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).f_i_ZZ()(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(5)).f_i().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).f_i_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity).f_i().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).f_i_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(2)).f_i() 1 - 24*q + 24*q^2 - 96*q^3 + 24*q^4 + O(q^5) >>> ModularForms(k=Integer(6)).f_i() == ModularForms(k=Integer(4)).E6() True >>> ModularForms(k=Integer(6)).f_i() 1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 + O(q^5)
- f_inf()[source]¶
Return a normalized (according to its first nontrivial Fourier coefficient) cusp form
f_inf
with exactly one simple zero atinfinity
(up to the group action).It lies in a (cuspidal) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.NOTE:
If
n=infinity
thenf_inf
is no longer a cusp form since it doesn’t vanish at the cusp-1
. The first non-trivial cusp form is given byE4*f_inf
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, CuspFormsRing sage: MR = CuspFormsRing(n=7) sage: f_inf = MR.f_inf() sage: f_inf in MR True sage: f_inf f_rho^7*d - f_i^2*d sage: QuasiMeromorphicModularFormsRing(n=7).f_inf() == QuasiMeromorphicModularFormsRing(n=7)(f_inf) True sage: from sage.modular.modform_hecketriangle.space import CuspForms, ModularForms sage: MF = CuspForms(n=5, k=20/3) sage: f_inf = MF.f_inf() sage: f_inf in MF True sage: CuspFormsRing(n=5, red_hom=True).f_inf() == f_inf True sage: CuspForms(n=5, k=0).f_inf() == f_inf True sage: MF.disp_prec(3) sage: f_inf q - 9/(200*d)*q^2 + O(q^3) sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = ModularForms(n=5) sage: d = MF.get_d() sage: q = MF.get_q() sage: ModularForms(n=5).f_inf().q_expansion(prec=5) == (d*MFC(group=5, prec=7).f_inf_ZZ()(q/d)).add_bigoh(5) True sage: ModularForms(n=infinity).f_inf().q_expansion(prec=5) == (d*MFC(group=infinity, prec=7).f_inf_ZZ()(q/d)).add_bigoh(5) True sage: ModularForms(n=5).f_inf().q_expansion(fix_d=1, prec=5) == MFC(group=5, prec=7).f_inf_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity).f_inf().q_expansion(fix_d=1, prec=5) == MFC(group=infinity, prec=7).f_inf_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity, k=4).f_inf().reduced_parent() ModularForms(n=+Infinity, k=4, ep=1) over Integer Ring sage: ModularForms(n=infinity, k=4).f_inf() q - 8*q^2 + 28*q^3 - 64*q^4 + O(q^5) sage: CuspForms(k=12).f_inf() == CuspForms(k=12).Delta() True sage: CuspForms(k=12).f_inf() q - 24*q^2 + 252*q^3 - 1472*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, CuspFormsRing >>> MR = CuspFormsRing(n=Integer(7)) >>> f_inf = MR.f_inf() >>> f_inf in MR True >>> f_inf f_rho^7*d - f_i^2*d >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).f_inf() == QuasiMeromorphicModularFormsRing(n=Integer(7))(f_inf) True >>> from sage.modular.modform_hecketriangle.space import CuspForms, ModularForms >>> MF = CuspForms(n=Integer(5), k=Integer(20)/Integer(3)) >>> f_inf = MF.f_inf() >>> f_inf in MF True >>> CuspFormsRing(n=Integer(5), red_hom=True).f_inf() == f_inf True >>> CuspForms(n=Integer(5), k=Integer(0)).f_inf() == f_inf True >>> MF.disp_prec(Integer(3)) >>> f_inf q - 9/(200*d)*q^2 + O(q^3) >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = ModularForms(n=Integer(5)) >>> d = MF.get_d() >>> q = MF.get_q() >>> ModularForms(n=Integer(5)).f_inf().q_expansion(prec=Integer(5)) == (d*MFC(group=Integer(5), prec=Integer(7)).f_inf_ZZ()(q/d)).add_bigoh(Integer(5)) True >>> ModularForms(n=infinity).f_inf().q_expansion(prec=Integer(5)) == (d*MFC(group=infinity, prec=Integer(7)).f_inf_ZZ()(q/d)).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(5)).f_inf().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).f_inf_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity).f_inf().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).f_inf_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(4)).f_inf().reduced_parent() ModularForms(n=+Infinity, k=4, ep=1) over Integer Ring >>> ModularForms(n=infinity, k=Integer(4)).f_inf() q - 8*q^2 + 28*q^3 - 64*q^4 + O(q^5) >>> CuspForms(k=Integer(12)).f_inf() == CuspForms(k=Integer(12)).Delta() True >>> CuspForms(k=Integer(12)).f_inf() q - 24*q^2 + 252*q^3 - 1472*q^4 + O(q^5)
- f_rho()[source]¶
Return a normalized modular form
f_rho
with exactly one simple zero atrho
(up to the group action).It lies in a (holomorphic) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.The polynomial variable
x
exactly corresponds tof_rho
.NOTE:
If
n=infinity
the situation is different, there we have:f_rho=1
(since that’s the limit asn
goes to infinity) and the polynomial variablex
no longer refers tof_rho
. Instead it refers toE4
which has exactly one simple zero at the cusp-1
. Also note thatE4
is the limit off_rho^(n-2)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, ModularFormsRing, CuspFormsRing sage: MR = ModularFormsRing(n=7) sage: f_rho = MR.f_rho() sage: f_rho in MR True sage: CuspFormsRing(n=7).f_rho() == f_rho True sage: f_rho f_rho sage: QuasiMeromorphicModularFormsRing(n=7).f_rho() == QuasiMeromorphicModularFormsRing(n=7)(f_rho) True sage: from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms sage: MF = ModularForms(n=5, k=4/3) sage: f_rho = MF.f_rho() sage: f_rho in MF True sage: ModularFormsRing(n=5, red_hom=True).f_rho() == f_rho True sage: CuspForms(n=5, k=12).f_rho() == f_rho True sage: MF.disp_prec(3) sage: f_rho 1 + 7/(100*d)*q + 21/(160000*d^2)*q^2 + O(q^3) sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC sage: MF = ModularForms(n=5) sage: d = MF.get_d() sage: q = MF.get_q() sage: ModularForms(n=5).f_rho().q_expansion(prec=5) == MFC(group=5, prec=7).f_rho_ZZ()(q/d).add_bigoh(5) True sage: ModularForms(n=infinity).f_rho().q_expansion(prec=5) == MFC(group=infinity, prec=7).f_rho_ZZ()(q/d).add_bigoh(5) True sage: ModularForms(n=5).f_rho().q_expansion(fix_d=1, prec=5) == MFC(group=5, prec=7).f_rho_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity).f_rho().q_expansion(fix_d=1, prec=5) == MFC(group=infinity, prec=7).f_rho_ZZ().add_bigoh(5) True sage: ModularForms(n=infinity, k=0).f_rho() == ModularForms(n=infinity, k=0)(1) True sage: ModularForms(k=4).f_rho() == ModularForms(k=4).E4() True sage: ModularForms(k=4).f_rho() 1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, ModularFormsRing, CuspFormsRing >>> MR = ModularFormsRing(n=Integer(7)) >>> f_rho = MR.f_rho() >>> f_rho in MR True >>> CuspFormsRing(n=Integer(7)).f_rho() == f_rho True >>> f_rho f_rho >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).f_rho() == QuasiMeromorphicModularFormsRing(n=Integer(7))(f_rho) True >>> from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms >>> MF = ModularForms(n=Integer(5), k=Integer(4)/Integer(3)) >>> f_rho = MF.f_rho() >>> f_rho in MF True >>> ModularFormsRing(n=Integer(5), red_hom=True).f_rho() == f_rho True >>> CuspForms(n=Integer(5), k=Integer(12)).f_rho() == f_rho True >>> MF.disp_prec(Integer(3)) >>> f_rho 1 + 7/(100*d)*q + 21/(160000*d^2)*q^2 + O(q^3) >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor as MFC >>> MF = ModularForms(n=Integer(5)) >>> d = MF.get_d() >>> q = MF.get_q() >>> ModularForms(n=Integer(5)).f_rho().q_expansion(prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).f_rho_ZZ()(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=infinity).f_rho().q_expansion(prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).f_rho_ZZ()(q/d).add_bigoh(Integer(5)) True >>> ModularForms(n=Integer(5)).f_rho().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=Integer(5), prec=Integer(7)).f_rho_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity).f_rho().q_expansion(fix_d=Integer(1), prec=Integer(5)) == MFC(group=infinity, prec=Integer(7)).f_rho_ZZ().add_bigoh(Integer(5)) True >>> ModularForms(n=infinity, k=Integer(0)).f_rho() == ModularForms(n=infinity, k=Integer(0))(Integer(1)) True >>> ModularForms(k=Integer(4)).f_rho() == ModularForms(k=Integer(4)).E4() True >>> ModularForms(k=Integer(4)).f_rho() 1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + O(q^5)
- g_inv()[source]¶
If \(2\) divides \(n\): Return the g-invariant of the group of
self
.The g-invariant is analogous to the j-invariant but has multiplier
-1
. I.e.g_inv(-1/t) = -g_inv(t)
. It is a (normalized) holomorphic square root ofJ_inv*(J_inv-1)
, normalized such that its first nontrivial Fourier coefficient is1
.If \(2\) does not divide
n
the function does not exist and an exception is raised.The g-invariant lies in a (weak) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.NOTE:
If
n=infinity
theng_inv
is holomorphic everywhere except at the cusp-1
where it isn’t even meromorphic. Consequently this function raises an exception forn=infinity
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, WeakModularFormsRing, CuspFormsRing sage: MR = WeakModularFormsRing(n=8) sage: g_inv = MR.g_inv() sage: g_inv in MR True sage: CuspFormsRing(n=8).g_inv() == g_inv True sage: g_inv f_rho^4*f_i/(f_rho^8*d - f_i^2*d) sage: QuasiMeromorphicModularFormsRing(n=8).g_inv() == QuasiMeromorphicModularFormsRing(n=8)(g_inv) True sage: from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms sage: MF = WeakModularForms(n=8, k=0, ep=-1) sage: g_inv = MF.g_inv() sage: g_inv in MF True sage: WeakModularFormsRing(n=8, red_hom=True).g_inv() == g_inv True sage: CuspForms(n=8, k=12, ep=1).g_inv() == g_inv True sage: MF.disp_prec(3) sage: g_inv q^-1 - 15/(128*d) - 15139/(262144*d^2)*q - 11575/(1572864*d^3)*q^2 + O(q^3) sage: WeakModularForms(n=4, k=0, ep=-1).g_inv() q^-1 - 24 - 3820*q - 100352*q^2 - 1217598*q^3 - 10797056*q^4 + O(q^5) As explained above, the g-invariant exists only for even `n`:: sage: from sage.modular.modform_hecketriangle.space import WeakModularForms sage: MF = WeakModularForms(n=9) sage: MF.g_inv() Traceback (most recent call last): ... ArithmeticError: g_inv doesn't exist for odd n(=9).
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, WeakModularFormsRing, CuspFormsRing >>> MR = WeakModularFormsRing(n=Integer(8)) >>> g_inv = MR.g_inv() >>> g_inv in MR True >>> CuspFormsRing(n=Integer(8)).g_inv() == g_inv True >>> g_inv f_rho^4*f_i/(f_rho^8*d - f_i^2*d) >>> QuasiMeromorphicModularFormsRing(n=Integer(8)).g_inv() == QuasiMeromorphicModularFormsRing(n=Integer(8))(g_inv) True >>> from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms >>> MF = WeakModularForms(n=Integer(8), k=Integer(0), ep=-Integer(1)) >>> g_inv = MF.g_inv() >>> g_inv in MF True >>> WeakModularFormsRing(n=Integer(8), red_hom=True).g_inv() == g_inv True >>> CuspForms(n=Integer(8), k=Integer(12), ep=Integer(1)).g_inv() == g_inv True >>> MF.disp_prec(Integer(3)) >>> g_inv q^-1 - 15/(128*d) - 15139/(262144*d^2)*q - 11575/(1572864*d^3)*q^2 + O(q^3) >>> WeakModularForms(n=Integer(4), k=Integer(0), ep=-Integer(1)).g_inv() q^-1 - 24 - 3820*q - 100352*q^2 - 1217598*q^3 - 10797056*q^4 + O(q^5) As explained above, the g-invariant exists only for even `n`:: >>> from sage.modular.modform_hecketriangle.space import WeakModularForms >>> MF = WeakModularForms(n=Integer(9)) >>> MF.g_inv() Traceback (most recent call last): ... ArithmeticError: g_inv doesn't exist for odd n(=9).
- get_d(fix_d=False, d_num_prec=None)[source]¶
Return the parameter
d
ofself
either as a formal parameter or as a numerical approximation with the specified precision (resp. an exact value in the arithmetic cases).For an (exact) symbolic expression also see
HeckeTriangleGroup().dvalue()
.INPUT:
fix_d
– ifFalse
(default) a formal parameter is used ford
. IfTrue
then the numerical value ofd
is used (or an exact value if the group is arithmetic). Otherwise, the given value is used ford
.d_num_prec
– integer (default:None
); the numerical precision ofd
. By default, the default numerical precision ofself.parent()
is used.
OUTPUT:
The corresponding formal, numerical or exact parameter
d
ofself
, depending on the arguments and whetherself.group()
is arithmetic.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing(n=8).get_d() d sage: ModularFormsRing(n=8).get_d().parent() Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: ModularFormsRing(n=infinity).get_d(fix_d = True) 1/64 sage: ModularFormsRing(n=infinity).get_d(fix_d = True).parent() Rational Field sage: ModularFormsRing(n=5).default_num_prec(40) sage: ModularFormsRing(n=5).get_d(fix_d = True) 0.0070522341... sage: ModularFormsRing(n=5).get_d(fix_d = True).parent() Real Field with 40 bits of precision sage: ModularFormsRing(n=5).get_d(fix_d = True, d_num_prec=100).parent() Real Field with 100 bits of precision sage: ModularFormsRing(n=5).get_d(fix_d=1).parent() Integer Ring
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing(n=Integer(8)).get_d() d >>> ModularFormsRing(n=Integer(8)).get_d().parent() Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> ModularFormsRing(n=infinity).get_d(fix_d = True) 1/64 >>> ModularFormsRing(n=infinity).get_d(fix_d = True).parent() Rational Field >>> ModularFormsRing(n=Integer(5)).default_num_prec(Integer(40)) >>> ModularFormsRing(n=Integer(5)).get_d(fix_d = True) 0.0070522341... >>> ModularFormsRing(n=Integer(5)).get_d(fix_d = True).parent() Real Field with 40 bits of precision >>> ModularFormsRing(n=Integer(5)).get_d(fix_d = True, d_num_prec=Integer(100)).parent() Real Field with 100 bits of precision >>> ModularFormsRing(n=Integer(5)).get_d(fix_d=Integer(1)).parent() Integer Ring
- get_q(prec=None, fix_d=False, d_num_prec=None)[source]¶
Return the generator of the power series of the Fourier expansion of
self
.INPUT:
prec
– an integer orNone
(default), namely the desired default precision of the space of power series. If nothing is specified the default precision ofself
is used.fix_d
– ifFalse
(default) a formal parameter is used ford
. IfTrue
then the numerical value ofd
is used (resp. an exact value if the group is arithmetic). Otherwise the given value is used ford
.d_num_prec
– the precision to be used if a numerical value ford
is substituted (default:None
), otherwise the default numerical precision ofself.parent()
is used
OUTPUT:
The generator of the
PowerSeriesRing
of corresponding to the given parameters. The base ring of the power series ring is given by the corresponding parent ofself.get_d()
with the same arguments.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing(n=8).default_prec(5) sage: ModularFormsRing(n=8).get_q().parent() Power Series Ring in q over Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: ModularFormsRing(n=8).get_q().parent().default_prec() 5 sage: ModularFormsRing(n=infinity).get_q(prec=12, fix_d = True).parent() Power Series Ring in q over Rational Field sage: ModularFormsRing(n=infinity).get_q(prec=12, fix_d = True).parent().default_prec() 12 sage: ModularFormsRing(n=5).default_num_prec(40) sage: ModularFormsRing(n=5).get_q(fix_d = True).parent() Power Series Ring in q over Real Field with 40 bits of precision sage: ModularFormsRing(n=5).get_q(fix_d = True, d_num_prec=100).parent() Power Series Ring in q over Real Field with 100 bits of precision sage: ModularFormsRing(n=5).get_q(fix_d=1).parent() Power Series Ring in q over Rational Field
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing(n=Integer(8)).default_prec(Integer(5)) >>> ModularFormsRing(n=Integer(8)).get_q().parent() Power Series Ring in q over Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> ModularFormsRing(n=Integer(8)).get_q().parent().default_prec() 5 >>> ModularFormsRing(n=infinity).get_q(prec=Integer(12), fix_d = True).parent() Power Series Ring in q over Rational Field >>> ModularFormsRing(n=infinity).get_q(prec=Integer(12), fix_d = True).parent().default_prec() 12 >>> ModularFormsRing(n=Integer(5)).default_num_prec(Integer(40)) >>> ModularFormsRing(n=Integer(5)).get_q(fix_d = True).parent() Power Series Ring in q over Real Field with 40 bits of precision >>> ModularFormsRing(n=Integer(5)).get_q(fix_d = True, d_num_prec=Integer(100)).parent() Power Series Ring in q over Real Field with 100 bits of precision >>> ModularFormsRing(n=Integer(5)).get_q(fix_d=Integer(1)).parent() Power Series Ring in q over Rational Field
- graded_ring()[source]¶
Return the graded ring containing
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing, CuspFormsRing sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: MR = ModularFormsRing(n=5) sage: MR.graded_ring() == MR True sage: CF=CuspForms(k=12) sage: CF.graded_ring() == CuspFormsRing() False sage: CF.graded_ring() == CuspFormsRing(red_hom=True) True sage: CF.subspace([CF.Delta()]).graded_ring() == CuspFormsRing(red_hom=True) True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing, CuspFormsRing >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> MR = ModularFormsRing(n=Integer(5)) >>> MR.graded_ring() == MR True >>> CF=CuspForms(k=Integer(12)) >>> CF.graded_ring() == CuspFormsRing() False >>> CF.graded_ring() == CuspFormsRing(red_hom=True) True >>> CF.subspace([CF.Delta()]).graded_ring() == CuspFormsRing(red_hom=True) True
- group()[source]¶
Return the (Hecke triangle) group of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: MR = ModularFormsRing(n=7) sage: MR.group() Hecke triangle group for n = 7 sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: CF = CuspForms(n=7, k=4/5) sage: CF.group() Hecke triangle group for n = 7
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> MR = ModularFormsRing(n=Integer(7)) >>> MR.group() Hecke triangle group for n = 7 >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> CF = CuspForms(n=Integer(7), k=Integer(4)/Integer(5)) >>> CF.group() Hecke triangle group for n = 7
- has_reduce_hom()[source]¶
Return whether the method
reduce
should reduce homogeneous elements to the corresponding space of homogeneous elements.This is mainly used by binary operations on homogeneous spaces which temporarily produce an element of
self
but want to consider it as a homogeneous element (also seereduce
).EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().has_reduce_hom() False sage: ModularFormsRing(red_hom=True).has_reduce_hom() True sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: ModularForms(k=6).has_reduce_hom() True sage: ModularForms(k=6).graded_ring().has_reduce_hom() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().has_reduce_hom() False >>> ModularFormsRing(red_hom=True).has_reduce_hom() True >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> ModularForms(k=Integer(6)).has_reduce_hom() True >>> ModularForms(k=Integer(6)).graded_ring().has_reduce_hom() True
- hecke_n()[source]¶
Return the parameter
n
of the (Hecke triangle) group ofself
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: MR = ModularFormsRing(n=7) sage: MR.hecke_n() 7 sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: CF = CuspForms(n=7, k=4/5) sage: CF.hecke_n() 7
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> MR = ModularFormsRing(n=Integer(7)) >>> MR.hecke_n() 7 >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> CF = CuspForms(n=Integer(7), k=Integer(4)/Integer(5)) >>> CF.hecke_n() 7
- homogeneous_part(k, ep)[source]¶
Return the homogeneous component of degree (
k
,e
) ofself
.INPUT:
k
– integerep
– \(+1\) or \(-1\)
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, QuasiWeakModularFormsRing sage: QuasiMeromorphicModularFormsRing(n=7).homogeneous_part(k=2, ep=-1) QuasiMeromorphicModularForms(n=7, k=2, ep=-1) over Integer Ring
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, QuasiWeakModularFormsRing >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).homogeneous_part(k=Integer(2), ep=-Integer(1)) QuasiMeromorphicModularForms(n=7, k=2, ep=-1) over Integer Ring
- is_cuspidal()[source]¶
Return whether
self
only contains cuspidal elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiModularFormsRing, QuasiCuspFormsRing sage: QuasiModularFormsRing().is_cuspidal() False sage: QuasiCuspFormsRing().is_cuspidal() True sage: from sage.modular.modform_hecketriangle.space import ModularForms, QuasiCuspForms sage: ModularForms(k=12).is_cuspidal() False sage: QuasiCuspForms(k=12).is_cuspidal() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiModularFormsRing, QuasiCuspFormsRing >>> QuasiModularFormsRing().is_cuspidal() False >>> QuasiCuspFormsRing().is_cuspidal() True >>> from sage.modular.modform_hecketriangle.space import ModularForms, QuasiCuspForms >>> ModularForms(k=Integer(12)).is_cuspidal() False >>> QuasiCuspForms(k=Integer(12)).is_cuspidal() True
- is_holomorphic()[source]¶
Return whether
self
only contains holomorphic modular elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiWeakModularFormsRing, QuasiModularFormsRing sage: QuasiWeakModularFormsRing().is_holomorphic() False sage: QuasiModularFormsRing().is_holomorphic() True sage: from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms sage: WeakModularForms(k=10).is_holomorphic() False sage: CuspForms(n=7, k=12, base_ring=AA).is_holomorphic() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiWeakModularFormsRing, QuasiModularFormsRing >>> QuasiWeakModularFormsRing().is_holomorphic() False >>> QuasiModularFormsRing().is_holomorphic() True >>> from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms >>> WeakModularForms(k=Integer(10)).is_holomorphic() False >>> CuspForms(n=Integer(7), k=Integer(12), base_ring=AA).is_holomorphic() True
- is_homogeneous()[source]¶
Return whether
self
is homogeneous component.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().is_homogeneous() False sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: ModularForms(k=6).is_homogeneous() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().is_homogeneous() False >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> ModularForms(k=Integer(6)).is_homogeneous() True
- is_modular()[source]¶
Return whether
self
only contains modular elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiWeakModularFormsRing, CuspFormsRing sage: QuasiWeakModularFormsRing().is_modular() False sage: CuspFormsRing(n=7).is_modular() True sage: from sage.modular.modform_hecketriangle.space import QuasiWeakModularForms, CuspForms sage: QuasiWeakModularForms(k=10).is_modular() False sage: CuspForms(n=7, k=12, base_ring=AA).is_modular() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiWeakModularFormsRing, CuspFormsRing >>> QuasiWeakModularFormsRing().is_modular() False >>> CuspFormsRing(n=Integer(7)).is_modular() True >>> from sage.modular.modform_hecketriangle.space import QuasiWeakModularForms, CuspForms >>> QuasiWeakModularForms(k=Integer(10)).is_modular() False >>> CuspForms(n=Integer(7), k=Integer(12), base_ring=AA).is_modular() True
- is_weakly_holomorphic()[source]¶
Return whether
self
only contains weakly holomorphic modular elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, QuasiWeakModularFormsRing, CuspFormsRing sage: QuasiMeromorphicModularFormsRing().is_weakly_holomorphic() False sage: QuasiWeakModularFormsRing().is_weakly_holomorphic() True sage: from sage.modular.modform_hecketriangle.space import MeromorphicModularForms, CuspForms sage: MeromorphicModularForms(k=10).is_weakly_holomorphic() False sage: CuspForms(n=7, k=12, base_ring=AA).is_weakly_holomorphic() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, QuasiWeakModularFormsRing, CuspFormsRing >>> QuasiMeromorphicModularFormsRing().is_weakly_holomorphic() False >>> QuasiWeakModularFormsRing().is_weakly_holomorphic() True >>> from sage.modular.modform_hecketriangle.space import MeromorphicModularForms, CuspForms >>> MeromorphicModularForms(k=Integer(10)).is_weakly_holomorphic() False >>> CuspForms(n=Integer(7), k=Integer(12), base_ring=AA).is_weakly_holomorphic() True
- is_zerospace()[source]¶
Return whether
self
is the (\(0\)-dimensional) zero space.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().is_zerospace() False sage: from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms sage: ModularForms(k=12).is_zerospace() False sage: CuspForms(k=12).reduce_type([]).is_zerospace() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().is_zerospace() False >>> from sage.modular.modform_hecketriangle.space import ModularForms, CuspForms >>> ModularForms(k=Integer(12)).is_zerospace() False >>> CuspForms(k=Integer(12)).reduce_type([]).is_zerospace() True
- j_inv()[source]¶
Return the j-invariant (Hauptmodul) of the group of
self
. It is normalized such thatj_inv(infinity) = infinity
, and such that it has real Fourier coefficients starting with1
.It lies in a (weak) extension of the graded ring of
self
. In casehas_reduce_hom
isTrue
it is given as an element of the corresponding space of homogeneous elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, WeakModularFormsRing, CuspFormsRing sage: MR = WeakModularFormsRing(n=7) sage: j_inv = MR.j_inv() sage: j_inv in MR True sage: CuspFormsRing(n=7).j_inv() == j_inv True sage: j_inv f_rho^7/(f_rho^7*d - f_i^2*d) sage: QuasiMeromorphicModularFormsRing(n=7).j_inv() == QuasiMeromorphicModularFormsRing(n=7)(j_inv) True sage: from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms sage: MF = WeakModularForms(n=5, k=0) sage: j_inv = MF.j_inv() sage: j_inv in MF True sage: WeakModularFormsRing(n=5, red_hom=True).j_inv() == j_inv True sage: CuspForms(n=5, k=12).j_inv() == j_inv True sage: MF.disp_prec(3) sage: j_inv q^-1 + 79/(200*d) + 42877/(640000*d^2)*q + 12957/(2000000*d^3)*q^2 + O(q^3) sage: WeakModularForms(n=infinity).j_inv() q^-1 + 24 + 276*q + 2048*q^2 + 11202*q^3 + 49152*q^4 + O(q^5) sage: WeakModularForms().j_inv() q^-1 + 744 + 196884*q + 21493760*q^2 + 864299970*q^3 + 20245856256*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiMeromorphicModularFormsRing, WeakModularFormsRing, CuspFormsRing >>> MR = WeakModularFormsRing(n=Integer(7)) >>> j_inv = MR.j_inv() >>> j_inv in MR True >>> CuspFormsRing(n=Integer(7)).j_inv() == j_inv True >>> j_inv f_rho^7/(f_rho^7*d - f_i^2*d) >>> QuasiMeromorphicModularFormsRing(n=Integer(7)).j_inv() == QuasiMeromorphicModularFormsRing(n=Integer(7))(j_inv) True >>> from sage.modular.modform_hecketriangle.space import WeakModularForms, CuspForms >>> MF = WeakModularForms(n=Integer(5), k=Integer(0)) >>> j_inv = MF.j_inv() >>> j_inv in MF True >>> WeakModularFormsRing(n=Integer(5), red_hom=True).j_inv() == j_inv True >>> CuspForms(n=Integer(5), k=Integer(12)).j_inv() == j_inv True >>> MF.disp_prec(Integer(3)) >>> j_inv q^-1 + 79/(200*d) + 42877/(640000*d^2)*q + 12957/(2000000*d^3)*q^2 + O(q^3) >>> WeakModularForms(n=infinity).j_inv() q^-1 + 24 + 276*q + 2048*q^2 + 11202*q^3 + 49152*q^4 + O(q^5) >>> WeakModularForms().j_inv() q^-1 + 744 + 196884*q + 21493760*q^2 + 864299970*q^3 + 20245856256*q^4 + O(q^5)
- pol_ring()[source]¶
Return the underlying polynomial ring used by
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().pol_ring() Multivariate Polynomial Ring in x, y, z, d over Integer Ring sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: CuspForms(k=12, base_ring=AA).pol_ring() Multivariate Polynomial Ring in x, y, z, d over Algebraic Real Field
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().pol_ring() Multivariate Polynomial Ring in x, y, z, d over Integer Ring >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> CuspForms(k=Integer(12), base_ring=AA).pol_ring() Multivariate Polynomial Ring in x, y, z, d over Algebraic Real Field
- rat_field()[source]¶
Return the underlying rational field used by
self
to construct/represent elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing sage: ModularFormsRing().rat_field() Fraction Field of Multivariate Polynomial Ring in x, y, z, d over Integer Ring sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: CuspForms(k=12, base_ring=AA).rat_field() Fraction Field of Multivariate Polynomial Ring in x, y, z, d over Algebraic Real Field
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import ModularFormsRing >>> ModularFormsRing().rat_field() Fraction Field of Multivariate Polynomial Ring in x, y, z, d over Integer Ring >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> CuspForms(k=Integer(12), base_ring=AA).rat_field() Fraction Field of Multivariate Polynomial Ring in x, y, z, d over Algebraic Real Field
- reduce_type(analytic_type=None, degree=None)[source]¶
Return a new space with analytic properties shared by both
self
andanalytic_type
, possibly reduced to its space of homogeneous elements of the givendegree
(ifdegree
is set). Elements of the new space are contained inself
.INPUT:
analytic_type
– anAnalyticType
or something which coerces into it (default:None
)degree
–None
(default) or the degree of the homogeneous component to whichself
should be reduced
OUTPUT: the new reduced space
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.graded_ring import QuasiModularFormsRing sage: from sage.modular.modform_hecketriangle.space import QuasiModularForms sage: MR = QuasiModularFormsRing() sage: MR.reduce_type(["quasi", "cusp"]) QuasiCuspFormsRing(n=3) over Integer Ring sage: MR.reduce_type("cusp", degree=(12,1)) CuspForms(n=3, k=12, ep=1) over Integer Ring sage: MF=QuasiModularForms(k=6) sage: MF.reduce_type("holo") ModularForms(n=3, k=6, ep=-1) over Integer Ring sage: MF.reduce_type([]) ZeroForms(n=3, k=6, ep=-1) over Integer Ring
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import QuasiModularFormsRing >>> from sage.modular.modform_hecketriangle.space import QuasiModularForms >>> MR = QuasiModularFormsRing() >>> MR.reduce_type(["quasi", "cusp"]) QuasiCuspFormsRing(n=3) over Integer Ring >>> MR.reduce_type("cusp", degree=(Integer(12),Integer(1))) CuspForms(n=3, k=12, ep=1) over Integer Ring >>> MF=QuasiModularForms(k=Integer(6)) >>> MF.reduce_type("holo") ModularForms(n=3, k=6, ep=-1) over Integer Ring >>> MF.reduce_type([]) ZeroForms(n=3, k=6, ep=-1) over Integer Ring