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,UniqueRepresentationModule of (Hecke) cusp forms for the given group, base ring, weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
vwith respect to the basisself.gens().INPUT:
v– an element ofself
OUTPUT:
An element of
self.module(), namely the corresponding coordinate vector ofvwith respect to the basisself.gens().The module is the free module over the coefficient ring of
selfwith 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
selfas a tuple 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,UniqueRepresentationModule 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,UniqueRepresentationModule of (Hecke) modular forms for the given group, base ring, weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
vwith respect to the basisself.gens().INPUT:
v– an element ofself
OUTPUT:
An element of
self.module(), namely the corresponding coordinate vector ofvwith respect to the basisself.gens().The module is the free module over the coefficient ring of
selfwith 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
selfas a tuple 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,UniqueRepresentationModule of (Hecke) quasi cusp forms for the given group, base ring, weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
vwith respect to the basisself.gens().INPUT:
v– an element ofself
OUTPUT:
An element of
self.module(), namely the corresponding coordinate vector ofvwith respect to the basisself.gens().The module is the free module over the coefficient ring of
selfwith 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
selfas a tuple 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,UniqueRepresentationModule 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,UniqueRepresentationModule of (Hecke) quasi modular forms for the given group, base ring, weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
vwith respect to the basisself.gens().INPUT:
v– an element ofself
OUTPUT:
An element of
self.module(), namely the corresponding coordinate vector ofvwith respect to the basisself.gens().The module is the free module over the coefficient ring of
selfwith 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
selfas a tuple 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,UniqueRepresentationModule 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,UniqueRepresentationModule 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,UniqueRepresentationZero Module for the zero form for the given group, base ring weight and multiplier
- coordinate_vector(v)[source]¶
Return the coordinate vector of
vwith 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
0is 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 module0is 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
selfas a tuple of basis elements.Since this is the zero module an empty tuple 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))