r"""
Elements of rings of Siegel modular forms of degree 2.
AUTHOR:
- Martin Raum (2009 - 08 - ??) Initial version.
"""
from psage.modform.fourier_expansion_framework.modularforms.modularform_element import ModularForm_generic, \
ModularFormVector_generic
class SiegelModularFormG2_generic :
def is_cusp_form(self) :
r"""
Check wheater self is a cusp form or not.
"""
if self.parent().type().group() != "Sp(2,ZZ)" :
raise NotImplementedError
try :
weight = self.weight()
except ValueError :
return all([ f.is_cusp_form()
for f in self.homogeneous_components().values() ])
neccessary_precision = weight // 12 + 1 if weight % 12 != 2 \
else weight // 12
if self.parent().fourier_expansion_precision()._indefinite_content_bound() < neccessary_precision :
raise ValueError, "the parents precision doesn't suffice"
evc = self.fourier_expansion()
return all([evc[(0,0,l)] == 0 for l in xrange(neccessary_precision)])
class SiegelModularFormG2_classical ( SiegelModularFormG2_generic, ModularForm_generic ) :
def is_maass_form(self) :
r"""
Check whether self is in the Maass spezialschar.
"""
hc = self.homogeneous_components()
if len(hc) == 0 : return True
if len(hc) > 1 : return False
grading = hc.keys()[0]
ss = self.parent().graded_submodule(grading)
return ss(self) in ss.maass_space()
class SiegelModularFormG2_vectorvalued ( SiegelModularFormG2_generic,
ModularFormVector_generic ) :
pass