def JacobiD1NNFourierExpansionModule(K, m, weak_forms = False) : r""" INPUT: - `m` -- The index of the associated Jacobi forms. - `weak_forms` -- If True the weak condition `r^2 \le 4 m n`n will be imposed on the indices. """ R = EquivariantMonoidPowerSeriesModule( JacobiFormD1NNIndices(m, weak_forms = weak_forms), TrivialCharacterMonoid("L^1_2(ZZ)", ZZ), TrivialRepresentation("L^1_2(ZZ)", K) ) if K is ZZ : R._set_multiply_function( lambda k, d1,d2, ch1,ch2, res : mult_coeff_int(k, d1, d2, ch1, ch2, res, m) if not weak_forms else lambda k, d1,d2, ch1,ch2, res : mult_coeff_int_weak(k, d1, d2, ch1, ch2, res, m) ) else : R._set_multiply_function( lambda k, d1,d2, ch1,ch2, res : mult_coeff_generic(k, d1, d2, ch1, ch2, res, m) if not weak_forms else lambda k, d1,d2, ch1,ch2, res : mult_coeff_generic_weak(k, d1, d2, ch1, ch2, res, m) ) return R
def SiegelModularFormG2FourierExpansionRing(K, with_character=False): if with_character: raise NotImplementedError #R = EquivariantMonoidPowerSeriesRing( # SiegelModularFormG2Indices_discriminant_xreduce(), # GL2CharacterMonoid(K), # TrivialRepresentation("GL(2,ZZ)", K) ) # Characters in GL2CharacterMonoid should accept (det, sgn) #R._set_reduction_function(sreduce_GL) #if K is ZZ : # R._set_multiply_function(mult_coeff_int_character) #else : # R._set_multiply_function(mult_coeff_generic_character) else: R = EquivariantMonoidPowerSeriesRing( SiegelModularFormG2Indices_discriminant_xreduce(), TrivialCharacterMonoid("GL(2,ZZ)", ZZ), TrivialRepresentation("GL(2,ZZ)", K)) R._set_reduction_function(reduce_GL) if K is ZZ: R._set_multiply_function(mult_coeff_int_without_character) else: R._set_multiply_function(mult_coeff_generic_without_character) return R
def __init__(self, O, C, R) : r""" INPUT: - `O` -- A monoid with an action of a group; As implemented in :class:~`fourier_expansion_framework.monoidpowerseries.NNMonoid`. - `C` -- A monoid of characters; As implemented in ::class:~`fourier_expansion_framework.monoidpowerseries.CharacterMonoid_class`. - `R` -- A representation on a module; As implemented in :class:~`fourier_expansion_framework.monoidpowerseries.TrivialRepresentation`. EXAMPLES:: sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_module import EquivariantMonoidPowerSeriesModule_generic sage: emps = EquivariantMonoidPowerSeriesModule_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", FreeModule(QQ, 2))) # indirect doctest sage: emps = EquivariantMonoidPowerSeriesModule_generic(NNMonoid(True), TrivialCharacterMonoid("1", ZZ), TrivialRepresentation("1", FreeModule(ZZ, 2))) # indirect doctest sage: emps.base_ring() Ring of equivariant monoid power series over NN sage: (1 / 2) * emps.0 Equivariant monoid power series in Module of equivariant monoid power series over NN """ # If the representation O respects the monoid structure of S # the base ring should be the associated power series ring. if O.is_monoid_action() : Module.__init__(self, EquivariantMonoidPowerSeriesRing(O,C,TrivialRepresentation(R.group(), R.base_ring()))) else : Module.__init__(self, R.codomain()) EquivariantMonoidPowerSeriesAmbient_abstract.__init__(self, O, C, R) self.__coeff_gens = \ [self._element_class( self, dict([( C.one_element(), dict([(self.monoid().zero_element(), a)]) )]), self.monoid().filter_all() ) for a in self.coefficient_domain().gens()]
def SiegelModularFormG4FourierExpansionRing(K, genus): R = EquivariantMonoidPowerSeriesRing( SiegelModularFormG4Indices_diagonal_lll(genus), TrivialCharacterMonoid("GL(%s,ZZ)" % (genus, ), ZZ), TrivialRepresentation("GL(%s,ZZ)" % (genus, ), K)) return R
def TestExpansionAmbient(A): """ TESTS:: sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import * sage: ea = TestExpansionAmbient(QQ) """ return EquivariantMonoidPowerSeriesRing(NNMonoid(), TrivialCharacterMonoid("1", ZZ), TrivialRepresentation("1", A))
def TestExpansionAmbient_vv(A): """ TESTS:: sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import * sage: ea = TestExpansionAmbient_vv(QQ) """ return EquivariantMonoidPowerSeriesModule( NNMonoid(), TrivialCharacterMonoid("1", ZZ), TrivialRepresentation( "1", FreeModule(A, ModularFormTestType_vectorvalued.rank)))
def JacobiFormD1FourierExpansionModule(K, k, L, weak_forms=False): r""" INPUT: - `L` -- The index of the associated Jacobi forms. - ``weak_forms`` -- If ``False`` the condition `|L| L^{-1} r**2 <= 4 |L| n` will be imposed. """ indices = JacobiFormD1Indices(L, weak_forms=weak_forms) return EquivariantMonoidPowerSeriesModule( indices, JacobiFormD1FourierExpansionCharacterMonoid(L.matrix().nrows()), TrivialRepresentation(indices.group(), K))
def ParamodularFormD2FourierExpansionRing(K, level) : R = EquivariantMonoidPowerSeriesRing( ParamodularFormD2Indices_discriminant(level), TrivialCharacterMonoid("GL(2,ZZ)_0 (%s)" % (level,), ZZ), TrivialRepresentation("GL(2,ZZ)_0 (%s)" % (level,), K) ) # R._set_reduction_function(reduce_GL) # if K is ZZ : # R._set_multiply_function(mult_coeff_int) # else : # R._set_multiply_function(mult_coeff_generic) return R
def JacobiFormD1NNFourierExpansionModule(K, m, weak_forms=False): r""" INPUT: - `m` -- The index of the associated Jacobi forms. - `weak_forms` -- If True the weak condition `r^2 \le 4 m n`n will be imposed on the indices. """ R = EquivariantMonoidPowerSeriesModule( JacobiFormD1NNIndices(m, weak_forms=weak_forms), JacobiFormD1FourierExpansionCharacterMonoid(), TrivialRepresentation("\Gamma^J_{1, M\infty}", K)) return R