Series constructor for modular forms for Hecke triangle groups¶
AUTHORS:
Based on the thesis of John Garrett Leo (2008)
Jonas Jermann (2013): initial version
Note
J_inv_ZZ
is the main function used to determine all Fourier expansions.
- class sage.modular.modform_hecketriangle.series_constructor.MFSeriesConstructor(group, prec)[source]¶
Bases:
SageObject
,UniqueRepresentation
Constructor for the Fourier expansion of some (specific, basic) modular forms.
The constructor is used by forms elements in case their Fourier expansion is needed or requested.
- Delta_ZZ()[source]¶
Return the rational Fourier expansion of
Delta
, where the parameterd
is replaced by1
.Note
The Fourier expansion of
Delta
ford!=1
is given byd*Delta_ZZ(q/d)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(prec=3).Delta_ZZ() q - 1/72*q^2 + 7/82944*q^3 + O(q^4) sage: MFSeriesConstructor(group=5, prec=3).Delta_ZZ() q + 47/200*q^2 + 11367/640000*q^3 + O(q^4) sage: MFSeriesConstructor(group=5, prec=3).Delta_ZZ().parent() Power Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).Delta_ZZ() q + 3/8*q^2 + 63/1024*q^3 + O(q^4)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(prec=Integer(3)).Delta_ZZ() q - 1/72*q^2 + 7/82944*q^3 + O(q^4) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).Delta_ZZ() q + 47/200*q^2 + 11367/640000*q^3 + O(q^4) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).Delta_ZZ().parent() Power Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).Delta_ZZ() q + 3/8*q^2 + 63/1024*q^3 + O(q^4)
- E2_ZZ()[source]¶
Return the rational Fourier expansion of
E2
, where the parameterd
is replaced by1
.Note
The Fourier expansion of
E2
ford!=1
is given byE2_ZZ(q/d)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(prec=3).E2_ZZ() 1 - 1/72*q - 1/41472*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).E2_ZZ() 1 - 9/200*q - 369/320000*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).E2_ZZ().parent() Power Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).E2_ZZ() 1 - 1/8*q - 1/512*q^2 + O(q^3)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(prec=Integer(3)).E2_ZZ() 1 - 1/72*q - 1/41472*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).E2_ZZ() 1 - 9/200*q - 369/320000*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).E2_ZZ().parent() Power Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).E2_ZZ() 1 - 1/8*q - 1/512*q^2 + O(q^3)
- E4_ZZ()[source]¶
Return the rational Fourier expansion of
E_4
, where the parameterd
is replaced by1
.Note
The Fourier expansion of
E4
ford!=1
is given byE4_ZZ(q/d)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(prec=3).E4_ZZ() 1 + 5/36*q + 5/6912*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).E4_ZZ() 1 + 21/100*q + 483/32000*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).E4_ZZ().parent() Power Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).E4_ZZ() 1 + 1/4*q + 7/256*q^2 + O(q^3)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(prec=Integer(3)).E4_ZZ() 1 + 5/36*q + 5/6912*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).E4_ZZ() 1 + 21/100*q + 483/32000*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).E4_ZZ().parent() Power Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).E4_ZZ() 1 + 1/4*q + 7/256*q^2 + O(q^3)
- E6_ZZ()[source]¶
Return the rational Fourier expansion of
E_6
, where the parameterd
is replaced by1
.Note
The Fourier expansion of
E6
ford!=1
is given byE6_ZZ(q/d)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(prec=3).E6_ZZ() 1 - 7/24*q - 77/13824*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).E6_ZZ() 1 - 37/200*q - 14663/320000*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).E6_ZZ().parent() Power Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).E6_ZZ() 1 - 1/8*q - 31/512*q^2 + O(q^3)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(prec=Integer(3)).E6_ZZ() 1 - 7/24*q - 77/13824*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).E6_ZZ() 1 - 37/200*q - 14663/320000*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).E6_ZZ().parent() Power Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).E6_ZZ() 1 - 1/8*q - 31/512*q^2 + O(q^3)
- EisensteinSeries_ZZ(k)[source]¶
Return the rational Fourier expansion of the normalized Eisenstein series of weight
k
, where the parameterd
is replaced by1
.Only arithmetic groups with
n < infinity
are supported!Note
THe Fourier expansion of the series is given by
EisensteinSeries_ZZ(q/d)
.INPUT:
k
– a nonnegative even integer, namely the weight
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFC = MFSeriesConstructor(prec=6) sage: MFC.EisensteinSeries_ZZ(k=0) 1 sage: MFC.EisensteinSeries_ZZ(k=2) 1 - 1/72*q - 1/41472*q^2 - 1/53747712*q^3 - 7/371504185344*q^4 - 1/106993205379072*q^5 + O(q^6) sage: MFC.EisensteinSeries_ZZ(k=6) 1 - 7/24*q - 77/13824*q^2 - 427/17915904*q^3 - 7399/123834728448*q^4 - 3647/35664401793024*q^5 + O(q^6) sage: MFC.EisensteinSeries_ZZ(k=12) 1 + 455/8292*q + 310765/4776192*q^2 + 20150585/6189944832*q^3 + 1909340615/42784898678784*q^4 + 3702799555/12322050819489792*q^5 + O(q^6) sage: MFC.EisensteinSeries_ZZ(k=12).parent() Power Series Ring in q over Rational Field sage: MFC = MFSeriesConstructor(group=4, prec=5) sage: MFC.EisensteinSeries_ZZ(k=2) 1 - 1/32*q - 5/8192*q^2 - 1/524288*q^3 - 13/536870912*q^4 + O(q^5) sage: MFC.EisensteinSeries_ZZ(k=4) 1 + 3/16*q + 39/4096*q^2 + 21/262144*q^3 + 327/268435456*q^4 + O(q^5) sage: MFC.EisensteinSeries_ZZ(k=6) 1 - 7/32*q - 287/8192*q^2 - 427/524288*q^3 - 9247/536870912*q^4 + O(q^5) sage: MFC.EisensteinSeries_ZZ(k=12) 1 + 63/11056*q + 133119/2830336*q^2 + 2790081/181141504*q^3 + 272631807/185488900096*q^4 + O(q^5) sage: MFC = MFSeriesConstructor(group=6, prec=5) sage: MFC.EisensteinSeries_ZZ(k=2) 1 - 1/18*q - 1/648*q^2 - 7/209952*q^3 - 7/22674816*q^4 + O(q^5) sage: MFC.EisensteinSeries_ZZ(k=4) 1 + 2/9*q + 1/54*q^2 + 37/52488*q^3 + 73/5668704*q^4 + O(q^5) sage: MFC.EisensteinSeries_ZZ(k=6) 1 - 1/6*q - 11/216*q^2 - 271/69984*q^3 - 1057/7558272*q^4 + O(q^5) sage: MFC.EisensteinSeries_ZZ(k=12) 1 + 182/151329*q + 62153/2723922*q^2 + 16186807/882550728*q^3 + 381868123/95315478624*q^4 + O(q^5)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFC = MFSeriesConstructor(prec=Integer(6)) >>> MFC.EisensteinSeries_ZZ(k=Integer(0)) 1 >>> MFC.EisensteinSeries_ZZ(k=Integer(2)) 1 - 1/72*q - 1/41472*q^2 - 1/53747712*q^3 - 7/371504185344*q^4 - 1/106993205379072*q^5 + O(q^6) >>> MFC.EisensteinSeries_ZZ(k=Integer(6)) 1 - 7/24*q - 77/13824*q^2 - 427/17915904*q^3 - 7399/123834728448*q^4 - 3647/35664401793024*q^5 + O(q^6) >>> MFC.EisensteinSeries_ZZ(k=Integer(12)) 1 + 455/8292*q + 310765/4776192*q^2 + 20150585/6189944832*q^3 + 1909340615/42784898678784*q^4 + 3702799555/12322050819489792*q^5 + O(q^6) >>> MFC.EisensteinSeries_ZZ(k=Integer(12)).parent() Power Series Ring in q over Rational Field >>> MFC = MFSeriesConstructor(group=Integer(4), prec=Integer(5)) >>> MFC.EisensteinSeries_ZZ(k=Integer(2)) 1 - 1/32*q - 5/8192*q^2 - 1/524288*q^3 - 13/536870912*q^4 + O(q^5) >>> MFC.EisensteinSeries_ZZ(k=Integer(4)) 1 + 3/16*q + 39/4096*q^2 + 21/262144*q^3 + 327/268435456*q^4 + O(q^5) >>> MFC.EisensteinSeries_ZZ(k=Integer(6)) 1 - 7/32*q - 287/8192*q^2 - 427/524288*q^3 - 9247/536870912*q^4 + O(q^5) >>> MFC.EisensteinSeries_ZZ(k=Integer(12)) 1 + 63/11056*q + 133119/2830336*q^2 + 2790081/181141504*q^3 + 272631807/185488900096*q^4 + O(q^5) >>> MFC = MFSeriesConstructor(group=Integer(6), prec=Integer(5)) >>> MFC.EisensteinSeries_ZZ(k=Integer(2)) 1 - 1/18*q - 1/648*q^2 - 7/209952*q^3 - 7/22674816*q^4 + O(q^5) >>> MFC.EisensteinSeries_ZZ(k=Integer(4)) 1 + 2/9*q + 1/54*q^2 + 37/52488*q^3 + 73/5668704*q^4 + O(q^5) >>> MFC.EisensteinSeries_ZZ(k=Integer(6)) 1 - 1/6*q - 11/216*q^2 - 271/69984*q^3 - 1057/7558272*q^4 + O(q^5) >>> MFC.EisensteinSeries_ZZ(k=Integer(12)) 1 + 182/151329*q + 62153/2723922*q^2 + 16186807/882550728*q^3 + 381868123/95315478624*q^4 + O(q^5)
- G_inv_ZZ()[source]¶
Return the rational Fourier expansion of
G_inv
, where the parameterd
is replaced by1
.Note
The Fourier expansion of
G_inv
ford!=1
is given byd*G_inv_ZZ(q/d)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(group=4, prec=3).G_inv_ZZ() q^-1 - 3/32 - 955/16384*q + O(q^2) sage: MFSeriesConstructor(group=8, prec=3).G_inv_ZZ() q^-1 - 15/128 - 15139/262144*q + O(q^2) sage: MFSeriesConstructor(group=8, prec=3).G_inv_ZZ().parent() Laurent Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).G_inv_ZZ() q^-1 - 1/8 - 59/1024*q + O(q^2)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(group=Integer(4), prec=Integer(3)).G_inv_ZZ() q^-1 - 3/32 - 955/16384*q + O(q^2) >>> MFSeriesConstructor(group=Integer(8), prec=Integer(3)).G_inv_ZZ() q^-1 - 15/128 - 15139/262144*q + O(q^2) >>> MFSeriesConstructor(group=Integer(8), prec=Integer(3)).G_inv_ZZ().parent() Laurent Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).G_inv_ZZ() q^-1 - 1/8 - 59/1024*q + O(q^2)
- J_inv_ZZ()[source]¶
Return the rational Fourier expansion of
J_inv
, where the parameterd
is replaced by1
.This is the main function used to determine all Fourier expansions!
Note
The Fourier expansion of
J_inv
ford!=1
is given byJ_inv_ZZ(q/d)
.Todo
The functions that are used in this implementation are products of hypergeometric series with other, elementary, functions. Implement them and clean up this representation.
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(prec=3).J_inv_ZZ() q^-1 + 31/72 + 1823/27648*q + O(q^2) sage: MFSeriesConstructor(group=5, prec=3).J_inv_ZZ() q^-1 + 79/200 + 42877/640000*q + O(q^2) sage: MFSeriesConstructor(group=5, prec=3).J_inv_ZZ().parent() Laurent Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).J_inv_ZZ() q^-1 + 3/8 + 69/1024*q + O(q^2)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(prec=Integer(3)).J_inv_ZZ() q^-1 + 31/72 + 1823/27648*q + O(q^2) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).J_inv_ZZ() q^-1 + 79/200 + 42877/640000*q + O(q^2) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).J_inv_ZZ().parent() Laurent Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).J_inv_ZZ() q^-1 + 3/8 + 69/1024*q + O(q^2)
- f_i_ZZ()[source]¶
Return the rational Fourier expansion of
f_i
, where the parameterd
is replaced by1
.Note
The Fourier expansion of
f_i
ford!=1
is given byf_i_ZZ(q/d)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(prec=3).f_i_ZZ() 1 - 7/24*q - 77/13824*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).f_i_ZZ() 1 - 13/40*q - 351/64000*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).f_i_ZZ().parent() Power Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).f_i_ZZ() 1 - 3/8*q + 3/512*q^2 + O(q^3)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(prec=Integer(3)).f_i_ZZ() 1 - 7/24*q - 77/13824*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).f_i_ZZ() 1 - 13/40*q - 351/64000*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).f_i_ZZ().parent() Power Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).f_i_ZZ() 1 - 3/8*q + 3/512*q^2 + O(q^3)
- f_inf_ZZ()[source]¶
Return the rational Fourier expansion of
f_inf
, where the parameterd
is replaced by1
.Note
The Fourier expansion of
f_inf
ford!=1
is given byd*f_inf_ZZ(q/d)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(prec=3).f_inf_ZZ() q - 1/72*q^2 + 7/82944*q^3 + O(q^4) sage: MFSeriesConstructor(group=5, prec=3).f_inf_ZZ() q - 9/200*q^2 + 279/640000*q^3 + O(q^4) sage: MFSeriesConstructor(group=5, prec=3).f_inf_ZZ().parent() Power Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).f_inf_ZZ() q - 1/8*q^2 + 7/1024*q^3 + O(q^4)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(prec=Integer(3)).f_inf_ZZ() q - 1/72*q^2 + 7/82944*q^3 + O(q^4) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).f_inf_ZZ() q - 9/200*q^2 + 279/640000*q^3 + O(q^4) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).f_inf_ZZ().parent() Power Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).f_inf_ZZ() q - 1/8*q^2 + 7/1024*q^3 + O(q^4)
- f_rho_ZZ()[source]¶
Return the rational Fourier expansion of
f_rho
, where the parameterd
is replaced by1
.Note
The Fourier expansion of
f_rho
ford!=1
is given byf_rho_ZZ(q/d)
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(prec=3).f_rho_ZZ() 1 + 5/36*q + 5/6912*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).f_rho_ZZ() 1 + 7/100*q + 21/160000*q^2 + O(q^3) sage: MFSeriesConstructor(group=5, prec=3).f_rho_ZZ().parent() Power Series Ring in q over Rational Field sage: MFSeriesConstructor(group=infinity, prec=3).f_rho_ZZ() 1
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(prec=Integer(3)).f_rho_ZZ() 1 + 5/36*q + 5/6912*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).f_rho_ZZ() 1 + 7/100*q + 21/160000*q^2 + O(q^3) >>> MFSeriesConstructor(group=Integer(5), prec=Integer(3)).f_rho_ZZ().parent() Power Series Ring in q over Rational Field >>> MFSeriesConstructor(group=infinity, prec=Integer(3)).f_rho_ZZ() 1
- group()[source]¶
Return the (Hecke triangle) group of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(group=4).group() Hecke triangle group for n = 4
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(group=Integer(4)).group() Hecke triangle group for n = 4
- hecke_n()[source]¶
Return the parameter
n
of the (Hecke triangle) group ofself
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(group=4).hecke_n() 4
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(group=Integer(4)).hecke_n() 4
- prec()[source]¶
Return the used default precision for the PowerSeriesRing or LaurentSeriesRing.
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor sage: MFSeriesConstructor(group=5).prec() 10 sage: MFSeriesConstructor(group=5, prec=20).prec() 20
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.series_constructor import MFSeriesConstructor >>> MFSeriesConstructor(group=Integer(5)).prec() 10 >>> MFSeriesConstructor(group=Integer(5), prec=Integer(20)).prec() 20