Modular forms for Hecke triangle groups¶
AUTHORS:
Jonas Jermann (2013): initial version
- class sage.modular.modform_hecketriangle.space.CuspForms(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Module of (Hecke) cusp forms for the given group, base ring, weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
v
with respect to the basisself.gens()
.INPUT:
v
– an element ofself
OUTPUT:
An element of
self.module()
, namely the corresponding coordinate vector ofv
with respect to the basisself.gens()
.The module is the free module over the coefficient ring of
self
with the dimension ofself
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: MF = CuspForms(n=12, k=72/5, ep=-1) sage: MF.default_prec(4) sage: MF.dimension() 2 sage: el = MF(MF.f_i()*MF.Delta()) sage: el q - 1/(288*d)*q^2 - 96605/(1327104*d^2)*q^3 + O(q^4) sage: vec = el.coordinate_vector() sage: vec (1, -1/(288*d)) sage: vec.parent() Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: vec.parent() == MF.module() True sage: el == vec[0]*MF.gen(0) + vec[1]*MF.gen(1) True sage: el == MF.element_from_coordinates(vec) True sage: MF = CuspForms(n=infinity, k=16) sage: el2 = MF(MF.Delta()*MF.E4()) sage: vec2 = el2.coordinate_vector() sage: vec2 (1, 5/(8*d), 187/(1024*d^2)) sage: el2 == MF.element_from_coordinates(vec2) True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> MF = CuspForms(n=Integer(12), k=Integer(72)/Integer(5), ep=-Integer(1)) >>> MF.default_prec(Integer(4)) >>> MF.dimension() 2 >>> el = MF(MF.f_i()*MF.Delta()) >>> el q - 1/(288*d)*q^2 - 96605/(1327104*d^2)*q^3 + O(q^4) >>> vec = el.coordinate_vector() >>> vec (1, -1/(288*d)) >>> vec.parent() Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> vec.parent() == MF.module() True >>> el == vec[Integer(0)]*MF.gen(Integer(0)) + vec[Integer(1)]*MF.gen(Integer(1)) True >>> el == MF.element_from_coordinates(vec) True >>> MF = CuspForms(n=infinity, k=Integer(16)) >>> el2 = MF(MF.Delta()*MF.E4()) >>> vec2 = el2.coordinate_vector() >>> vec2 (1, 5/(8*d), 187/(1024*d^2)) >>> el2 == MF.element_from_coordinates(vec2) True
from sage.modular.modform_hecketriangle.space import CuspForms MF = CuspForms(n=12, k=72/5, ep=-1) MF.default_prec(4) MF.dimension() el = MF(MF.f_i()*MF.Delta()) el vec = el.coordinate_vector() vec vec.parent() vec.parent() == MF.module() el == vec[0]*MF.gen(0) + vec[1]*MF.gen(1) el == MF.element_from_coordinates(vec) MF = CuspForms(n=infinity, k=16) el2 = MF(MF.Delta()*MF.E4()) vec2 = el2.coordinate_vector() vec2 el2 == MF.element_from_coordinates(vec2)
- dimension()[source]¶
Return the dimension of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: MF = CuspForms(n=12, k=72/5, ep=1) sage: MF.dimension() 3 sage: len(MF.gens()) == MF.dimension() True sage: CuspForms(n=infinity, k=8).dimension() 1
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> MF = CuspForms(n=Integer(12), k=Integer(72)/Integer(5), ep=Integer(1)) >>> MF.dimension() 3 >>> len(MF.gens()) == MF.dimension() True >>> CuspForms(n=infinity, k=Integer(8)).dimension() 1
from sage.modular.modform_hecketriangle.space import CuspForms MF = CuspForms(n=12, k=72/5, ep=1) MF.dimension() len(MF.gens()) == MF.dimension() CuspForms(n=infinity, k=8).dimension()
- gens()[source]¶
Return a basis of
self
as a list of basis elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import CuspForms sage: MF=CuspForms(n=12, k=72/5, ep=1) sage: MF CuspForms(n=12, k=72/5, ep=1) over Integer Ring sage: MF.dimension() 3 sage: MF.gens() [q + 296888795/(10319560704*d^3)*q^4 + O(q^5), q^2 + 6629/(221184*d^2)*q^4 + O(q^5), q^3 - 25/(96*d)*q^4 + O(q^5)] sage: MF = CuspForms(n=infinity, k=8, ep=1) sage: MF.gen(0) == MF.E4()*MF.f_inf() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import CuspForms >>> MF=CuspForms(n=Integer(12), k=Integer(72)/Integer(5), ep=Integer(1)) >>> MF CuspForms(n=12, k=72/5, ep=1) over Integer Ring >>> MF.dimension() 3 >>> MF.gens() [q + 296888795/(10319560704*d^3)*q^4 + O(q^5), q^2 + 6629/(221184*d^2)*q^4 + O(q^5), q^3 - 25/(96*d)*q^4 + O(q^5)] >>> MF = CuspForms(n=infinity, k=Integer(8), ep=Integer(1)) >>> MF.gen(Integer(0)) == MF.E4()*MF.f_inf() True
from sage.modular.modform_hecketriangle.space import CuspForms MF=CuspForms(n=12, k=72/5, ep=1) MF MF.dimension() MF.gens() MF = CuspForms(n=infinity, k=8, ep=1) MF.gen(0) == MF.E4()*MF.f_inf()
- class sage.modular.modform_hecketriangle.space.MeromorphicModularForms(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Module of (Hecke) meromorphic modular forms for the given group, base ring, weight and multiplier
- class sage.modular.modform_hecketriangle.space.ModularForms(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Module of (Hecke) modular forms for the given group, base ring, weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
v
with respect to the basisself.gens()
.INPUT:
v
– an element ofself
OUTPUT:
An element of
self.module()
, namely the corresponding coordinate vector ofv
with respect to the basisself.gens()
.The module is the free module over the coefficient ring of
self
with the dimension ofself
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: MF = ModularForms(n=6, k=20, ep=1) sage: MF.dimension() 4 sage: el = MF.E4()^2*MF.Delta() sage: el q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5) sage: vec = el.coordinate_vector() sage: vec (0, 1, 13/(18*d), 103/(432*d^2)) sage: vec.parent() Vector space of dimension 4 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: vec.parent() == MF.module() True sage: el == vec[0]*MF.gen(0) + vec[1]*MF.gen(1) + vec[2]*MF.gen(2) + vec[3]*MF.gen(3) True sage: el == MF.element_from_coordinates(vec) True sage: MF = ModularForms(n=infinity, k=8, ep=1) sage: (MF.E4()^2).coordinate_vector() (1, 1/(2*d), 15/(128*d^2))
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> MF = ModularForms(n=Integer(6), k=Integer(20), ep=Integer(1)) >>> MF.dimension() 4 >>> el = MF.E4()**Integer(2)*MF.Delta() >>> el q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5) >>> vec = el.coordinate_vector() >>> vec (0, 1, 13/(18*d), 103/(432*d^2)) >>> vec.parent() Vector space of dimension 4 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> vec.parent() == MF.module() True >>> el == vec[Integer(0)]*MF.gen(Integer(0)) + vec[Integer(1)]*MF.gen(Integer(1)) + vec[Integer(2)]*MF.gen(Integer(2)) + vec[Integer(3)]*MF.gen(Integer(3)) True >>> el == MF.element_from_coordinates(vec) True >>> MF = ModularForms(n=infinity, k=Integer(8), ep=Integer(1)) >>> (MF.E4()**Integer(2)).coordinate_vector() (1, 1/(2*d), 15/(128*d^2))
from sage.modular.modform_hecketriangle.space import ModularForms MF = ModularForms(n=6, k=20, ep=1) MF.dimension() el = MF.E4()^2*MF.Delta() el vec = el.coordinate_vector() vec vec.parent() vec.parent() == MF.module() el == vec[0]*MF.gen(0) + vec[1]*MF.gen(1) + vec[2]*MF.gen(2) + vec[3]*MF.gen(3) el == MF.element_from_coordinates(vec) MF = ModularForms(n=infinity, k=8, ep=1) (MF.E4()^2).coordinate_vector()
- dimension()[source]¶
Return the dimension of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: MF = ModularForms(n=6, k=20, ep=1) sage: MF.dimension() 4 sage: len(MF.gens()) == MF.dimension() True sage: ModularForms(n=infinity, k=8).dimension() 3
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> MF = ModularForms(n=Integer(6), k=Integer(20), ep=Integer(1)) >>> MF.dimension() 4 >>> len(MF.gens()) == MF.dimension() True >>> ModularForms(n=infinity, k=Integer(8)).dimension() 3
from sage.modular.modform_hecketriangle.space import ModularForms MF = ModularForms(n=6, k=20, ep=1) MF.dimension() len(MF.gens()) == MF.dimension() ModularForms(n=infinity, k=8).dimension()
- gens()[source]¶
Return a basis of
self
as a list of basis elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ModularForms sage: MF = ModularForms(n=6, k=20, ep=1) sage: MF.dimension() 4 sage: MF.gens() [1 + 360360*q^4 + O(q^5), q + 21742*q^4 + O(q^5), q^2 + 702*q^4 + O(q^5), q^3 - 6*q^4 + O(q^5)] sage: ModularForms(n=infinity, k=4).gens() [1 + 240*q^2 + 2160*q^4 + O(q^5), q - 8*q^2 + 28*q^3 - 64*q^4 + O(q^5)]
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ModularForms >>> MF = ModularForms(n=Integer(6), k=Integer(20), ep=Integer(1)) >>> MF.dimension() 4 >>> MF.gens() [1 + 360360*q^4 + O(q^5), q + 21742*q^4 + O(q^5), q^2 + 702*q^4 + O(q^5), q^3 - 6*q^4 + O(q^5)] >>> ModularForms(n=infinity, k=Integer(4)).gens() [1 + 240*q^2 + 2160*q^4 + O(q^5), q - 8*q^2 + 28*q^3 - 64*q^4 + O(q^5)]
from sage.modular.modform_hecketriangle.space import ModularForms MF = ModularForms(n=6, k=20, ep=1) MF.dimension() MF.gens() ModularForms(n=infinity, k=4).gens()
- class sage.modular.modform_hecketriangle.space.QuasiCuspForms(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Module of (Hecke) quasi cusp forms for the given group, base ring, weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
v
with respect to the basisself.gens()
.INPUT:
v
– an element ofself
OUTPUT:
An element of
self.module()
, namely the corresponding coordinate vector ofv
with respect to the basisself.gens()
.The module is the free module over the coefficient ring of
self
with the dimension ofself
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import QuasiCuspForms sage: MF = QuasiCuspForms(n=6, k=20, ep=1) sage: MF.dimension() 12 sage: el = MF(MF.E4()^2*MF.Delta() + MF.E4()*MF.E2()^2*MF.Delta()) sage: el 2*q + 120*q^2 + 3402*q^3 + 61520*q^4 + O(q^5) sage: vec = el.coordinate_vector() # long time sage: vec # long time (1, 13/(18*d), 103/(432*d^2), 0, 0, 1, 1/(2*d), 0, 0, 0, 0, 0) sage: vec.parent() # long time Vector space of dimension 12 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: vec.parent() == MF.module() # long time True sage: el == MF(sum([vec[l]*MF.gen(l) for l in range(0,12)])) # long time True sage: el == MF.element_from_coordinates(vec) # long time True sage: MF.gen(1).coordinate_vector() == vector([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) # long time True sage: MF = QuasiCuspForms(n=infinity, k=10, ep=-1) sage: el2 = MF(MF.E4()*MF.f_inf()*(MF.f_i() - MF.E2())) sage: el2.coordinate_vector() (1, -1) sage: el2 == MF.element_from_coordinates(el2.coordinate_vector()) True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import QuasiCuspForms >>> MF = QuasiCuspForms(n=Integer(6), k=Integer(20), ep=Integer(1)) >>> MF.dimension() 12 >>> el = MF(MF.E4()**Integer(2)*MF.Delta() + MF.E4()*MF.E2()**Integer(2)*MF.Delta()) >>> el 2*q + 120*q^2 + 3402*q^3 + 61520*q^4 + O(q^5) >>> vec = el.coordinate_vector() # long time >>> vec # long time (1, 13/(18*d), 103/(432*d^2), 0, 0, 1, 1/(2*d), 0, 0, 0, 0, 0) >>> vec.parent() # long time Vector space of dimension 12 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> vec.parent() == MF.module() # long time True >>> el == MF(sum([vec[l]*MF.gen(l) for l in range(Integer(0),Integer(12))])) # long time True >>> el == MF.element_from_coordinates(vec) # long time True >>> MF.gen(Integer(1)).coordinate_vector() == vector([Integer(0), Integer(1), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0)]) # long time True >>> MF = QuasiCuspForms(n=infinity, k=Integer(10), ep=-Integer(1)) >>> el2 = MF(MF.E4()*MF.f_inf()*(MF.f_i() - MF.E2())) >>> el2.coordinate_vector() (1, -1) >>> el2 == MF.element_from_coordinates(el2.coordinate_vector()) True
from sage.modular.modform_hecketriangle.space import QuasiCuspForms MF = QuasiCuspForms(n=6, k=20, ep=1) MF.dimension() el = MF(MF.E4()^2*MF.Delta() + MF.E4()*MF.E2()^2*MF.Delta()) el vec = el.coordinate_vector() # long time vec # long time vec.parent() # long time vec.parent() == MF.module() # long time el == MF(sum([vec[l]*MF.gen(l) for l in range(0,12)])) # long time el == MF.element_from_coordinates(vec) # long time MF.gen(1).coordinate_vector() == vector([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) # long time MF = QuasiCuspForms(n=infinity, k=10, ep=-1) el2 = MF(MF.E4()*MF.f_inf()*(MF.f_i() - MF.E2())) el2.coordinate_vector() el2 == MF.element_from_coordinates(el2.coordinate_vector())
- dimension()[source]¶
Return the dimension of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import QuasiCuspForms sage: MF = QuasiCuspForms(n=8, k=46/3, ep=-1) sage: MF.default_prec(3) sage: MF.dimension() 7 sage: len(MF.gens()) == MF.dimension() True sage: QuasiCuspForms(n=infinity, k=10, ep=-1).dimension() 2
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import QuasiCuspForms >>> MF = QuasiCuspForms(n=Integer(8), k=Integer(46)/Integer(3), ep=-Integer(1)) >>> MF.default_prec(Integer(3)) >>> MF.dimension() 7 >>> len(MF.gens()) == MF.dimension() True >>> QuasiCuspForms(n=infinity, k=Integer(10), ep=-Integer(1)).dimension() 2
from sage.modular.modform_hecketriangle.space import QuasiCuspForms MF = QuasiCuspForms(n=8, k=46/3, ep=-1) MF.default_prec(3) MF.dimension() len(MF.gens()) == MF.dimension() QuasiCuspForms(n=infinity, k=10, ep=-1).dimension()
- gens()[source]¶
Return a basis of
self
as a list of basis elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import QuasiCuspForms sage: MF = QuasiCuspForms(n=8, k=46/3, ep=-1) sage: MF.default_prec(4) sage: MF.dimension() 7 sage: MF.gens() [q - 17535/(262144*d^2)*q^3 + O(q^4), q^2 - 47/(128*d)*q^3 + O(q^4), q - 9/(128*d)*q^2 + 15633/(262144*d^2)*q^3 + O(q^4), q^2 - 7/(128*d)*q^3 + O(q^4), q - 23/(64*d)*q^2 - 3103/(262144*d^2)*q^3 + O(q^4), q - 3/(64*d)*q^2 - 4863/(262144*d^2)*q^3 + O(q^4), q - 27/(64*d)*q^2 + 17217/(262144*d^2)*q^3 + O(q^4)] sage: MF = QuasiCuspForms(n=infinity, k=10, ep=-1) sage: MF.gens() [q - 16*q^2 - 156*q^3 - 256*q^4 + O(q^5), q - 60*q^3 - 256*q^4 + O(q^5)]
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import QuasiCuspForms >>> MF = QuasiCuspForms(n=Integer(8), k=Integer(46)/Integer(3), ep=-Integer(1)) >>> MF.default_prec(Integer(4)) >>> MF.dimension() 7 >>> MF.gens() [q - 17535/(262144*d^2)*q^3 + O(q^4), q^2 - 47/(128*d)*q^3 + O(q^4), q - 9/(128*d)*q^2 + 15633/(262144*d^2)*q^3 + O(q^4), q^2 - 7/(128*d)*q^3 + O(q^4), q - 23/(64*d)*q^2 - 3103/(262144*d^2)*q^3 + O(q^4), q - 3/(64*d)*q^2 - 4863/(262144*d^2)*q^3 + O(q^4), q - 27/(64*d)*q^2 + 17217/(262144*d^2)*q^3 + O(q^4)] >>> MF = QuasiCuspForms(n=infinity, k=Integer(10), ep=-Integer(1)) >>> MF.gens() [q - 16*q^2 - 156*q^3 - 256*q^4 + O(q^5), q - 60*q^3 - 256*q^4 + O(q^5)]
from sage.modular.modform_hecketriangle.space import QuasiCuspForms MF = QuasiCuspForms(n=8, k=46/3, ep=-1) MF.default_prec(4) MF.dimension() MF.gens() MF = QuasiCuspForms(n=infinity, k=10, ep=-1) MF.gens()
- class sage.modular.modform_hecketriangle.space.QuasiMeromorphicModularForms(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Module of (Hecke) quasi meromorphic modular forms for the given group, base ring, weight and multiplier
- class sage.modular.modform_hecketriangle.space.QuasiModularForms(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Module of (Hecke) quasi modular forms for the given group, base ring, weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
v
with respect to the basisself.gens()
.INPUT:
v
– an element ofself
OUTPUT:
An element of
self.module()
, namely the corresponding coordinate vector ofv
with respect to the basisself.gens()
.The module is the free module over the coefficient ring of
self
with the dimension ofself
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import QuasiModularForms sage: MF = QuasiModularForms(n=6, k=20, ep=1) sage: MF.dimension() 22 sage: el = MF(MF.E4()^2*MF.E6()^2 + MF.E4()*MF.E2()^2*MF.Delta() + MF.E2()^3*MF.E4()^2*MF.E6()) sage: el 2 + 25*q - 2478*q^2 - 82731*q^3 - 448484*q^4 + O(q^5) sage: vec = el.coordinate_vector() # long time sage: vec # long time (1, 1/(9*d), -11/(81*d^2), -4499/(104976*d^3), 0, 0, 0, 0, 1, 1/(2*d), 1, 5/(18*d), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) sage: vec.parent() # long time Vector space of dimension 22 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring sage: vec.parent() == MF.module() # long time True sage: el == MF(sum([vec[l]*MF.gen(l) for l in range(0,22)])) # long time True sage: el == MF.element_from_coordinates(vec) # long time True sage: MF.gen(1).coordinate_vector() == vector([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) # long time True sage: MF = QuasiModularForms(n=infinity, k=4, ep=1) sage: el2 = MF.E4() + MF.E2()^2 sage: el2 2 + 160*q^2 + 512*q^3 + 1632*q^4 + O(q^5) sage: el2.coordinate_vector() (1, 1/(4*d), 0, 1) sage: el2 == MF.element_from_coordinates(el2.coordinate_vector()) True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import QuasiModularForms >>> MF = QuasiModularForms(n=Integer(6), k=Integer(20), ep=Integer(1)) >>> MF.dimension() 22 >>> el = MF(MF.E4()**Integer(2)*MF.E6()**Integer(2) + MF.E4()*MF.E2()**Integer(2)*MF.Delta() + MF.E2()**Integer(3)*MF.E4()**Integer(2)*MF.E6()) >>> el 2 + 25*q - 2478*q^2 - 82731*q^3 - 448484*q^4 + O(q^5) >>> vec = el.coordinate_vector() # long time >>> vec # long time (1, 1/(9*d), -11/(81*d^2), -4499/(104976*d^3), 0, 0, 0, 0, 1, 1/(2*d), 1, 5/(18*d), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) >>> vec.parent() # long time Vector space of dimension 22 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring >>> vec.parent() == MF.module() # long time True >>> el == MF(sum([vec[l]*MF.gen(l) for l in range(Integer(0),Integer(22))])) # long time True >>> el == MF.element_from_coordinates(vec) # long time True >>> MF.gen(Integer(1)).coordinate_vector() == vector([Integer(0), Integer(1), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0), Integer(0)]) # long time True >>> MF = QuasiModularForms(n=infinity, k=Integer(4), ep=Integer(1)) >>> el2 = MF.E4() + MF.E2()**Integer(2) >>> el2 2 + 160*q^2 + 512*q^3 + 1632*q^4 + O(q^5) >>> el2.coordinate_vector() (1, 1/(4*d), 0, 1) >>> el2 == MF.element_from_coordinates(el2.coordinate_vector()) True
from sage.modular.modform_hecketriangle.space import QuasiModularForms MF = QuasiModularForms(n=6, k=20, ep=1) MF.dimension() el = MF(MF.E4()^2*MF.E6()^2 + MF.E4()*MF.E2()^2*MF.Delta() + MF.E2()^3*MF.E4()^2*MF.E6()) el vec = el.coordinate_vector() # long time vec # long time vec.parent() # long time vec.parent() == MF.module() # long time el == MF(sum([vec[l]*MF.gen(l) for l in range(0,22)])) # long time el == MF.element_from_coordinates(vec) # long time MF.gen(1).coordinate_vector() == vector([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) # long time MF = QuasiModularForms(n=infinity, k=4, ep=1) el2 = MF.E4() + MF.E2()^2 el2 el2.coordinate_vector() el2 == MF.element_from_coordinates(el2.coordinate_vector())
- dimension()[source]¶
Return the dimension of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import QuasiModularForms sage: MF = QuasiModularForms(n=5, k=6, ep=-1) sage: MF.dimension() 3 sage: len(MF.gens()) == MF.dimension() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import QuasiModularForms >>> MF = QuasiModularForms(n=Integer(5), k=Integer(6), ep=-Integer(1)) >>> MF.dimension() 3 >>> len(MF.gens()) == MF.dimension() True
from sage.modular.modform_hecketriangle.space import QuasiModularForms MF = QuasiModularForms(n=5, k=6, ep=-1) MF.dimension() len(MF.gens()) == MF.dimension()
- gens()[source]¶
Return a basis of
self
as a list of basis elements.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import QuasiModularForms sage: MF = QuasiModularForms(n=5, k=6, ep=-1) sage: MF.default_prec(2) sage: MF.gens() [1 - 37/(200*d)*q + O(q^2), 1 + 33/(200*d)*q + O(q^2), 1 - 27/(200*d)*q + O(q^2)] sage: MF = QuasiModularForms(n=infinity, k=2, ep=-1) sage: MF.default_prec(2) sage: MF.gens() [1 - 24*q + O(q^2), 1 - 8*q + O(q^2)]
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import QuasiModularForms >>> MF = QuasiModularForms(n=Integer(5), k=Integer(6), ep=-Integer(1)) >>> MF.default_prec(Integer(2)) >>> MF.gens() [1 - 37/(200*d)*q + O(q^2), 1 + 33/(200*d)*q + O(q^2), 1 - 27/(200*d)*q + O(q^2)] >>> MF = QuasiModularForms(n=infinity, k=Integer(2), ep=-Integer(1)) >>> MF.default_prec(Integer(2)) >>> MF.gens() [1 - 24*q + O(q^2), 1 - 8*q + O(q^2)]
from sage.modular.modform_hecketriangle.space import QuasiModularForms MF = QuasiModularForms(n=5, k=6, ep=-1) MF.default_prec(2) MF.gens() MF = QuasiModularForms(n=infinity, k=2, ep=-1) MF.default_prec(2) MF.gens()
- class sage.modular.modform_hecketriangle.space.QuasiWeakModularForms(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Module of (Hecke) quasi weakly holomorphic modular forms for the given group, base ring, weight and multiplier
- class sage.modular.modform_hecketriangle.space.WeakModularForms(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Module of (Hecke) weakly holomorphic modular forms for the given group, base ring, weight and multiplier
- class sage.modular.modform_hecketriangle.space.ZeroForm(group, base_ring, k, ep, n)[source]¶
Bases:
FormsSpace_abstract
,Module
,UniqueRepresentation
Zero Module for the zero form for the given group, base ring weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
v
with respect to the basisself.gens()
.Since this is the zero module which only contains the zero form the trivial vector in the trivial module of dimension
0
is returned.INPUT:
v
– an element ofself
, i.e. in this case the zero vector
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ZeroForm sage: MF = ZeroForm(6, QQ, 3, -1) sage: el = MF(0) sage: el O(q^5) sage: vec = el.coordinate_vector() sage: vec () sage: vec.parent() Vector space of dimension 0 over Fraction Field of Univariate Polynomial Ring in d over Rational Field sage: vec.parent() == MF.module() True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ZeroForm >>> MF = ZeroForm(Integer(6), QQ, Integer(3), -Integer(1)) >>> el = MF(Integer(0)) >>> el O(q^5) >>> vec = el.coordinate_vector() >>> vec () >>> vec.parent() Vector space of dimension 0 over Fraction Field of Univariate Polynomial Ring in d over Rational Field >>> vec.parent() == MF.module() True
from sage.modular.modform_hecketriangle.space import ZeroForm MF = ZeroForm(6, QQ, 3, -1) el = MF(0) el vec = el.coordinate_vector() vec vec.parent() vec.parent() == MF.module()
- dimension()[source]¶
Return the dimension of
self
. Since this is the zero module0
is returned.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ZeroForm sage: ZeroForm(6, CC, 3, -1).dimension() 0
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ZeroForm >>> ZeroForm(Integer(6), CC, Integer(3), -Integer(1)).dimension() 0
from sage.modular.modform_hecketriangle.space import ZeroForm ZeroForm(6, CC, 3, -1).dimension()
- gens()[source]¶
Return a basis of
self
as a list of basis elements. Since this is the zero module an empty list is returned.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import ZeroForm sage: ZeroForm(6, CC, 3, -1).gens() []
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import ZeroForm >>> ZeroForm(Integer(6), CC, Integer(3), -Integer(1)).gens() []
from sage.modular.modform_hecketriangle.space import ZeroForm ZeroForm(6, CC, 3, -1).gens()
- sage.modular.modform_hecketriangle.space.canonical_parameters(group, base_ring, k, ep, n=None)[source]¶
Return a canonical version of the parameters.
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import canonical_parameters sage: canonical_parameters(5, ZZ, 20/3, int(1)) (Hecke triangle group for n = 5, Integer Ring, 20/3, 1, 5) sage: canonical_parameters(infinity, ZZ, 2, int(-1)) (Hecke triangle group for n = +Infinity, Integer Ring, 2, -1, +Infinity)
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import canonical_parameters >>> canonical_parameters(Integer(5), ZZ, Integer(20)/Integer(3), int(Integer(1))) (Hecke triangle group for n = 5, Integer Ring, 20/3, 1, 5) >>> canonical_parameters(infinity, ZZ, Integer(2), int(-Integer(1))) (Hecke triangle group for n = +Infinity, Integer Ring, 2, -1, +Infinity)
from sage.modular.modform_hecketriangle.space import canonical_parameters canonical_parameters(5, ZZ, 20/3, int(1)) canonical_parameters(infinity, ZZ, 2, int(-1))