Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
241849 views
1
"""
2
Lazy monoid power series which wrap graded expansions.
3
4
AUTHOR :
5
-- Martin Raum (2010 - 05 - 23) Initial version
6
"""
7
8
#===============================================================================
9
#
10
# Copyright (C) 2010 Martin Raum
11
#
12
# This program is free software; you can redistribute it and/or
13
# modify it under the terms of the GNU General Public License
14
# as published by the Free Software Foundation; either version 3
15
# of the License, or (at your option) any later version.
16
#
17
# This program is distributed in the hope that it will be useful,
18
# but WITHOUT ANY WARRANTY; without even the implied warranty of
19
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
# General Public License for more details.
21
#
22
# You should have received a copy of the GNU General Public License
23
# along with this program; if not, see <http://www.gnu.org/licenses/>.
24
#
25
#===============================================================================
26
27
from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_lazyelement import EquivariantMonoidPowerSeries_lazy
28
29
def LazyFourierExpansionEvaluation(parent, element, precision) :
30
"""
31
Create an lazy equivaraint monoid power series which evaluates a
32
graded expansion.
33
34
INPUT:
35
- ``parent`` -- A ring or module of equivariant monoid power series.
36
- ``element`` -- A graded expansion element.
37
- ``precision`` -- A filter for the parent's action.
38
39
OUTPUT:
40
An instance of :class:~`fourier_expansion_framework.monoidpowerseries.monoidpowerseries_lazyelement.EquivariantMonoidPowerSeries_abstract_lazy`.
41
42
TESTS::
43
sage: from psage.modform.fourier_expansion_framework.gradedexpansions import *
44
sage: from psage.modform.fourier_expansion_framework.monoidpowerseries import *
45
sage: from psage.modform.fourier_expansion_framework.gradedexpansions.expansion_lazy_evaluation import LazyFourierExpansionEvaluation
46
sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *
47
sage: emps = EquivariantMonoidPowerSeriesRing(NNMonoid(True), TrivialCharacterMonoid("1", ZZ), TrivialRepresentation("1", ZZ))
48
sage: em = ExpansionModule(Sequence([emps.one_element(), emps.one_element(), emps.one_element()]))
49
sage: h = LazyFourierExpansionEvaluation(emps, em([1,2,3]), emps.action().filter(3))
50
sage: h.coefficients()
51
{0: 6, 1: 0, 2: 0}
52
"""
53
if precision.is_infinite() :
54
raise ValueError( "Lazy evaluation of infinite expansions is not possible")
55
56
delayed_coeffs = DelayedEvaluation_fourier_expansion(parent, element)
57
58
return EquivariantMonoidPowerSeries_lazy(parent, precision, delayed_coeffs.getcoeff)
59
60
61
class DelayedEvaluation_fourier_expansion :
62
"""
63
Helper class which evaluates the a graded expansion on and returns its
64
coefficients.
65
"""
66
67
def __init__(self, parent, element) :
68
"""
69
INPUT:
70
- ``parent`` -- A ring or module of equivariant monoid power series.
71
- ``element`` -- A graded expansion element.
72
73
TESTS::
74
sage: from psage.modform.fourier_expansion_framework.gradedexpansions import *
75
sage: from psage.modform.fourier_expansion_framework.monoidpowerseries import *
76
sage: from psage.modform.fourier_expansion_framework.gradedexpansions.expansion_lazy_evaluation import DelayedEvaluation_fourier_expansion
77
sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *
78
sage: emps = EquivariantMonoidPowerSeriesRing(NNMonoid(True), TrivialCharacterMonoid("1", ZZ), TrivialRepresentation("1", ZZ))
79
sage: em = ExpansionModule(Sequence([emps.one_element(), emps.one_element(), emps.one_element()]))
80
sage: de = DelayedEvaluation_fourier_expansion(emps, em([1,2,5]))
81
"""
82
self.__parent = parent
83
self.__element = element
84
85
def getcoeff(self, key) :
86
"""
87
Return a coefficient of the Fourier expansion of a graded expansion.
88
89
INPUT:
90
- ``key`` -- A pair ``(ch, k)`` of a character and a monoid element.
91
92
OUTPUT:
93
An element of the parents coefficient domain.
94
95
TESTS::
96
sage: from psage.modform.fourier_expansion_framework.gradedexpansions import *
97
sage: from psage.modform.fourier_expansion_framework.monoidpowerseries import *
98
sage: from psage.modform.fourier_expansion_framework.gradedexpansions.expansion_lazy_evaluation import DelayedEvaluation_fourier_expansion
99
sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *
100
sage: emps = EquivariantMonoidPowerSeriesRing(NNMonoid(True), TrivialCharacterMonoid("1", ZZ), TrivialRepresentation("1", ZZ))
101
sage: em = ExpansionModule(Sequence([emps.one_element(), emps.one_element(), emps.one_element()]))
102
sage: de = DelayedEvaluation_fourier_expansion(emps, em([1,2,-2]))
103
sage: (de.getcoeff(0), de.getcoeff(1))
104
(1, 0)
105
"""
106
try :
107
return self.__fourier_expansion[key]
108
except AttributeError :
109
self.__fourier_expansion = self.__element.fourier_expansion()
110
if self.__fourier_expansion.parent().coefficient_domain() != self.__parent.coefficient_domain() :
111
self.__fourier_expansion = self.__parent(self.__fourier_expansion)
112
113
return self.__fourier_expansion[key]
114
115