Analytic types of modular forms¶
Properties of modular forms and their generalizations are assembled
into one partially ordered set. See AnalyticType
for a
list of handled properties.
AUTHORS:
Jonas Jermann (2013): initial version
- class sage.modular.modform_hecketriangle.analytic_type.AnalyticType[source]¶
Bases:
FiniteLatticePoset
Container for all possible analytic types of forms and/or spaces.
The
analytic type
of forms spaces or rings describes all possible occurring basicanalytic properties
of elements in the space/ring (or more).For ambient spaces/rings this means that all elements with those properties (and the restrictions of the space/ring) are contained in the space/ring.
The analytic type of an element is the analytic type of its minimal ambient space/ring.
The basic
analytic properties
are:quasi
– whether the element is quasi modular (and not modular) or modular.mero
–meromorphic
– if the element is meromorphic and meromorphic at infinityweak
–weakly holomorphic
– if the element is holomorphic and meromorphic at infinityholo
–holomorphic
– if the element is holomorphic and holomorphic at infinitycusp
–cuspidal
– if the element additionally has a positive order at infinity
The
zero
elements/property have no analytic properties (or onlyquasi
).For ring elements the property describes whether one of its homogeneous components satisfies that property and the “union” of those properties is returned as the
analytic type
.Similarly for quasi forms the property describes whether one of its quasi components satisfies that property.
There is a (natural) partial order between the basic properties (and analytic types) given by “inclusion”. We name the analytic type according to its maximal analytic properties.
For \(n=3\) the quasi form
el = E6 - E2^3
has the quasi componentsE6
which isholomorphic
andE2^3
which isquasi holomorphic
. So the analytic type ofel
isquasi holomorphic
despite the fact that the sum (el
) describes a function which is zero at infinity.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.space import QuasiModularForms sage: x,y,z,d = var("x,y,z,d") # needs sage.symbolic sage: el = QuasiModularForms(n=3, k=6, ep=-1)(y-z^3) # needs sage.symbolic sage: el.analytic_type() # needs sage.symbolic quasi modular
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.space import QuasiModularForms >>> x,y,z,d = var("x,y,z,d") # needs sage.symbolic >>> el = QuasiModularForms(n=Integer(3), k=Integer(6), ep=-Integer(1))(y-z**Integer(3)) # needs sage.symbolic >>> el.analytic_type() # needs sage.symbolic quasi modular
Similarly the type of the ring element
el2 = E4/Delta - E6/Delta
isweakly holomorphic
despite the fact that the sum (el2
) describes a function which is holomorphic at infinity:sage: from sage.modular.modform_hecketriangle.graded_ring import WeakModularFormsRing sage: x,y,z,d = var("x,y,z,d") # needs sage.symbolic sage: el2 = WeakModularFormsRing(n=3)(x/(x^3-y^2)-y/(x^3-y^2)) # needs sage.symbolic sage: el2.analytic_type() # needs sage.symbolic weakly holomorphic modular
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.graded_ring import WeakModularFormsRing >>> x,y,z,d = var("x,y,z,d") # needs sage.symbolic >>> el2 = WeakModularFormsRing(n=Integer(3))(x/(x**Integer(3)-y**Integer(2))-y/(x**Integer(3)-y**Integer(2))) # needs sage.symbolic >>> el2.analytic_type() # needs sage.symbolic weakly holomorphic modular
- Element[source]¶
alias of
AnalyticTypeElement
- base_poset()[source]¶
Return the base poset from which everything of
self
was constructed. Elements of the base poset correspond to the basicanalytic properties
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.analytic_type import AnalyticType sage: from sage.combinat.posets.posets import FinitePoset sage: AT = AnalyticType() sage: P = AT.base_poset() sage: P Finite poset containing 5 elements with distinguished linear extension sage: isinstance(P, FinitePoset) True sage: P.is_lattice() False sage: P.is_finite() True sage: P.cardinality() 5 sage: P.is_bounded() False sage: P.list() [cusp, holo, weak, mero, quasi] sage: len(P.relations()) 11 sage: P.cover_relations() [[cusp, holo], [holo, weak], [weak, mero]] sage: P.has_top() False sage: P.has_bottom() False
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.analytic_type import AnalyticType >>> from sage.combinat.posets.posets import FinitePoset >>> AT = AnalyticType() >>> P = AT.base_poset() >>> P Finite poset containing 5 elements with distinguished linear extension >>> isinstance(P, FinitePoset) True >>> P.is_lattice() False >>> P.is_finite() True >>> P.cardinality() 5 >>> P.is_bounded() False >>> P.list() [cusp, holo, weak, mero, quasi] >>> len(P.relations()) 11 >>> P.cover_relations() [[cusp, holo], [holo, weak], [weak, mero]] >>> P.has_top() False >>> P.has_bottom() False
- lattice_poset()[source]¶
Return the underlying lattice poset of
self
.EXAMPLES:
sage: from sage.modular.modform_hecketriangle.analytic_type import AnalyticType sage: AnalyticType().lattice_poset() Finite lattice containing 10 elements
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.analytic_type import AnalyticType >>> AnalyticType().lattice_poset() Finite lattice containing 10 elements
- class sage.modular.modform_hecketriangle.analytic_type.AnalyticTypeElement(poset, element, vertex)[source]¶
Bases:
LatticePosetElement
Analytic types of forms and/or spaces.
An analytic type element describes what basic analytic properties are contained/included in it.
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.analytic_type import (AnalyticType, AnalyticTypeElement) sage: from sage.combinat.posets.elements import LatticePosetElement sage: AT = AnalyticType() sage: el = AT(["quasi", "cusp"]) sage: el quasi cuspidal sage: isinstance(el, AnalyticTypeElement) True sage: isinstance(el, LatticePosetElement) True sage: el.parent() == AT True sage: sorted(el.element,key=str) [cusp, quasi] sage: from sage.sets.set import Set_object_enumerated sage: isinstance(el.element, Set_object_enumerated) True sage: first = sorted(el.element,key=str)[0]; first cusp sage: first.parent() == AT.base_poset() True sage: el2 = AT("holo") sage: sum = el + el2 sage: sum quasi modular sage: sorted(sum.element,key=str) [cusp, holo, quasi] sage: el * el2 cuspidal
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.analytic_type import (AnalyticType, AnalyticTypeElement) >>> from sage.combinat.posets.elements import LatticePosetElement >>> AT = AnalyticType() >>> el = AT(["quasi", "cusp"]) >>> el quasi cuspidal >>> isinstance(el, AnalyticTypeElement) True >>> isinstance(el, LatticePosetElement) True >>> el.parent() == AT True >>> sorted(el.element,key=str) [cusp, quasi] >>> from sage.sets.set import Set_object_enumerated >>> isinstance(el.element, Set_object_enumerated) True >>> first = sorted(el.element,key=str)[Integer(0)]; first cusp >>> first.parent() == AT.base_poset() True >>> el2 = AT("holo") >>> sum = el + el2 >>> sum quasi modular >>> sorted(sum.element,key=str) [cusp, holo, quasi] >>> el * el2 cuspidal
- analytic_name()[source]¶
Return a string representation of the analytic type.
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.analytic_type import AnalyticType sage: AT = AnalyticType() sage: AT(["quasi", "weak"]).analytic_name() 'quasi weakly holomorphic modular' sage: AT(["quasi", "cusp"]).analytic_name() 'quasi cuspidal' sage: AT(["quasi"]).analytic_name() 'zero' sage: AT([]).analytic_name() 'zero'
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.analytic_type import AnalyticType >>> AT = AnalyticType() >>> AT(["quasi", "weak"]).analytic_name() 'quasi weakly holomorphic modular' >>> AT(["quasi", "cusp"]).analytic_name() 'quasi cuspidal' >>> AT(["quasi"]).analytic_name() 'zero' >>> AT([]).analytic_name() 'zero'
- analytic_space_name()[source]¶
Return the (analytic part of the) name of a space with the analytic type of
self
.This is used for the string representation of such spaces.
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.analytic_type import AnalyticType sage: AT = AnalyticType() sage: AT(["quasi", "weak"]).analytic_space_name() 'QuasiWeakModular' sage: AT(["quasi", "cusp"]).analytic_space_name() 'QuasiCusp' sage: AT(["quasi"]).analytic_space_name() 'Zero' sage: AT([]).analytic_space_name() 'Zero'
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.analytic_type import AnalyticType >>> AT = AnalyticType() >>> AT(["quasi", "weak"]).analytic_space_name() 'QuasiWeakModular' >>> AT(["quasi", "cusp"]).analytic_space_name() 'QuasiCusp' >>> AT(["quasi"]).analytic_space_name() 'Zero' >>> AT([]).analytic_space_name() 'Zero'
- extend_by(extend_type)[source]¶
Return a new analytic type which contains all analytic properties specified either in
self
or inextend_type
.INPUT:
extend_type
– an analytic type or something which is convertible to an analytic type
OUTPUT: the new extended analytic type
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.analytic_type import AnalyticType sage: AT = AnalyticType() sage: el = AT(["quasi", "cusp"]) sage: el2 = AT("holo") sage: el.extend_by(el2) quasi modular sage: el.extend_by(el2) == el + el2 True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.analytic_type import AnalyticType >>> AT = AnalyticType() >>> el = AT(["quasi", "cusp"]) >>> el2 = AT("holo") >>> el.extend_by(el2) quasi modular >>> el.extend_by(el2) == el + el2 True
- latex_space_name()[source]¶
Return the short (analytic part of the) name of a space with the analytic type of
self
for usage with latex.This is used for the latex representation of such spaces.
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.analytic_type import AnalyticType sage: AT = AnalyticType() sage: AT("mero").latex_space_name() '\\tilde{M}' sage: AT("weak").latex_space_name() 'M^!' sage: AT(["quasi", "cusp"]).latex_space_name() 'QC' sage: AT([]).latex_space_name() 'Z'
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.analytic_type import AnalyticType >>> AT = AnalyticType() >>> AT("mero").latex_space_name() '\\tilde{M}' >>> AT("weak").latex_space_name() 'M^!' >>> AT(["quasi", "cusp"]).latex_space_name() 'QC' >>> AT([]).latex_space_name() 'Z'
- reduce_to(reduce_type)[source]¶
Return a new analytic type which contains only analytic properties specified in both
self
andreduce_type
.INPUT:
reduce_type
– an analytic type or something which is convertible to an analytic type
OUTPUT: the new reduced analytic type
EXAMPLES:
sage: from sage.modular.modform_hecketriangle.analytic_type import AnalyticType sage: AT = AnalyticType() sage: el = AT(["quasi", "cusp"]) sage: el2 = AT("holo") sage: el.reduce_to(el2) cuspidal sage: el.reduce_to(el2) == el * el2 True
>>> from sage.all import * >>> from sage.modular.modform_hecketriangle.analytic_type import AnalyticType >>> AT = AnalyticType() >>> el = AT(["quasi", "cusp"]) >>> el2 = AT("holo") >>> el.reduce_to(el2) cuspidal >>> el.reduce_to(el2) == el * el2 True