code / alex / psage / psage / modform / fourier_expansion_framework / modularforms / modularform_element.py
241852 viewsfrom psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_ambient import GradedExpansionAmbient_abstract1r"""2A orthogonal modular form, namely a graded expansion providing additional features.34AUTHOR :5-- Martin Raum (2009 - 07 - 30) Initial version6"""78#===============================================================================9#10# Copyright (C) 2009 Martin Raum11#12# This program is free software; you can redistribute it and/or13# modify it under the terms of the GNU General Public License14# as published by the Free Software Foundation; either version 315# 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 of19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU20# General Public License for more details.21#22# You should have received a copy of the GNU General Public License23# along with this program; if not, see <http://www.gnu.org/licenses/>.24#25#===============================================================================2627from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_element import GradedExpansion_class, \28GradedExpansionVector_class, GradedExpansion_abstract2930class ModularForm_abstract (object) :31"""32NOTE:33We assume that the deriving classes also derive (indirectly)34from GradedExpansion_abstract.35"""3637def is_cusp_form(self) :38"""39Whether ``self`` is a cusp form or not.4041OUTPUT:42A boolean.4344TESTS::45sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_ambient import *46sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import *47sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *48sage: ma = ModularFormsAmbient( QQ, ModularFormTestType_scalar(), NNFilter(5) )49sage: ma.0.is_cusp_form()50Traceback (most recent call last):51...52NotImplementedError53"""54raise NotImplementedError5556def is_eisenstein_series(self) :57"""58Whether ``self`` is an Eisenstein series or not.5960OUTPUT:61A boolean.6263TESTS::64sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_ambient import *65sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import *66sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *67sage: ma = ModularFormsAmbient( QQ, ModularFormTestType_scalar(), NNFilter(5) )68sage: ma.0.is_eisenstein_series()69Traceback (most recent call last):70...71NotImplementedError72"""73raise NotImplementedError7475def _lmul_(self, c) :76"""77TESTS::78sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_ambient import *79sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import *80sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *81sage: ma = ModularFormsAmbient( QQ, ModularFormTestType_scalar(), NNFilter(5) )82sage: mavv = ModularFormsAmbient( QQ, ModularFormTestType_vectorvalued(), NNFilter(5) )83sage: (mavv.0 * ma.0).polynomial()84g1*v185sage: (ma.0 * 5).polynomial()865*g187"""88## For vector valued forms we use an extended base ring, which89## needs conversion before we can multiply90if self.parent().type().is_vector_valued() :91return self.parent()._element_class( self.parent(),92c.polynomial().subs(c.parent().type()._hom_to_vector_valued(self.parent().relations().base_ring())) \93* self.polynomial() )94else :95return super(ModularForm_abstract, self)._lmul_(c)9697def _rmul_(self, c) :98"""99TESTS::100sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_ambient import *101sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import *102sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *103sage: ma = ModularFormsAmbient( QQ, ModularFormTestType_scalar(), NNFilter(5) )104sage: mavv = ModularFormsAmbient( QQ, ModularFormTestType_vectorvalued(), NNFilter(5) )105sage: (ma.0 * mavv.0).polynomial()106g1*v1107sage: (5 * ma.0).polynomial()1085*g1109"""110## For vector valued forms we use an extended base ring, which111## needs conversion before we can multiply112if self.parent().type().is_vector_valued() :113return self.parent()._element_class( self.parent(),114c.polynomial().subs(c.parent().type()._hom_to_vector_valued(self.parent().relations().base_ring())) \115* self.polynomial() )116else :117return super(ModularForm_abstract, self)._rmul_(c)118119class ModularForm_generic ( ModularForm_abstract, GradedExpansion_class ) :120weight = GradedExpansion_class.grading_index121122123class ModularFormVector_generic ( ModularForm_abstract, GradedExpansionVector_class ) :124weight = GradedExpansionVector_class.grading_index125126127