Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
241818 views
1
r"""
2
Elements of rings of Siegel modular forms of degree 2.
3
4
AUTHOR:
5
6
- Martin Raum (2009 - 08 - ??) Initial version.
7
"""
8
9
#===============================================================================
10
#
11
# Copyright (C) 2009 Martin Raum
12
#
13
# This program is free software; you can redistribute it and/or
14
# modify it under the terms of the GNU General Public License
15
# as published by the Free Software Foundation; either version 3
16
# of the License, or (at your option) any later version.
17
#
18
# This program is distributed in the hope that it will be useful,
19
# but WITHOUT ANY WARRANTY; without even the implied warranty of
20
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
# General Public License for more details.
22
#
23
# You should have received a copy of the GNU General Public License
24
# along with this program; if not, see <http://www.gnu.org/licenses/>.
25
#
26
#===============================================================================
27
28
from psage.modform.fourier_expansion_framework.modularforms.modularform_element import ModularForm_generic, \
29
ModularFormVector_generic
30
31
class SiegelModularFormG2_generic :
32
33
def is_cusp_form(self) :
34
r"""
35
Check wheater self is a cusp form or not.
36
"""
37
38
if self.parent().type().group() != "Sp(2,ZZ)" :
39
raise NotImplementedError
40
41
try :
42
weight = self.weight()
43
except ValueError :
44
return all([ f.is_cusp_form()
45
for f in self.homogeneous_components().values() ])
46
47
neccessary_precision = weight // 12 + 1 if weight % 12 != 2 \
48
else weight // 12
49
if self.parent().fourier_expansion_precision()._indefinite_content_bound() < neccessary_precision :
50
raise ValueError, "the parents precision doesn't suffice"
51
52
evc = self.fourier_expansion()
53
return all([evc[(0,0,l)] == 0 for l in xrange(neccessary_precision)])
54
55
class SiegelModularFormG2_classical ( SiegelModularFormG2_generic, ModularForm_generic ) :
56
57
def is_maass_form(self) :
58
r"""
59
Check whether self is in the Maass spezialschar.
60
"""
61
hc = self.homogeneous_components()
62
if len(hc) == 0 : return True
63
if len(hc) > 1 : return False
64
65
66
grading = hc.keys()[0]
67
68
ss = self.parent().graded_submodule(grading)
69
70
return ss(self) in ss.maass_space()
71
72
class SiegelModularFormG2_vectorvalued ( SiegelModularFormG2_generic,
73
ModularFormVector_generic ) :
74
pass
75
76