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 basis self.gens().

INPUT:

  • v – an element of self

OUTPUT:

An element of self.module(), namely the corresponding coordinate vector of v with respect to the basis self.gens().

The module is the free module over the coefficient ring of self with 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.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 basis self.gens().

INPUT:

  • v – an element of self

OUTPUT:

An element of self.module(), namely the corresponding coordinate vector of v with respect to the basis self.gens().

The module is the free module over the coefficient ring of self with 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: 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 basis self.gens().

INPUT:

  • v – an element of self

OUTPUT:

An element of self.module(), namely the corresponding coordinate vector of v with respect to the basis self.gens().

The module is the free module over the coefficient ring of self with the dimension of self.

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 basis self.gens().

INPUT:

  • v – an element of self

OUTPUT:

An element of self.module(), namely the corresponding coordinate vector of v with respect to the basis self.gens().

The module is the free module over the coefficient ring of self with the dimension of self.

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 basis self.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 of self, 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 module 0 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))