code / alex / psage / psage / modform / fourier_expansion_framework / modularforms / modularform_functor.py
241852 viewsr"""1A functor creating rings of orthogonal modular forms.23AUTHOR :4-- Martin Raum (2009 - 07 - 30) Initial version5"""67#===============================================================================8#9# Copyright (C) 2009 Martin Raum10#11# This program is free software; you can redistribute it and/or12# modify it under the terms of the GNU General Public License13# as published by the Free Software Foundation; either version 314# of the License, or (at your option) any later version.15#16# This program is distributed in the hope that it will be useful,17# but WITHOUT ANY WARRANTY; without even the implied warranty of18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU19# General Public License for more details.20#21# You should have received a copy of the GNU General Public License22# along with this program; if not, see <http://www.gnu.org/licenses/>.23#24#===============================================================================2526from sage.categories.rings import Rings27from sage.categories.pushout import ConstructionFunctor2829class ModularFormsFunctor ( ConstructionFunctor ) :3031rank = 103233def __init__(self, type, precision) :34"""35A functor constructing a ring or module of modular forms.3637INPUT:38- ``type`` -- A type of modular forms.39- ``precision`` -- A precision.4041NOTE:42This does not respect keyword and has to be extended as soon as subclasses of43ModularFormsAmbient_abstract demand for it.4445TESTS::46sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_functor import *47sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import *48sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *49sage: F = ModularFormsFunctor( ModularFormTestType_scalar(), NNFilter(5) )50"""51self.__type = type52self.__precision = precision5354ConstructionFunctor.__init__(self, Rings(), Rings())5556def __call__(self, A) :57"""58INPUT:59- `A` -- A ring.6061TESTS::62sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_functor import *63sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import *64sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *65sage: F = ModularFormsFunctor( ModularFormTestType_scalar(), NNFilter(5) )66sage: F(QQ)67Graded expansion ring with generators g1, g2, g3, g4, g568"""69from modularform_ambient import ModularFormsAmbient7071return ModularFormsAmbient(A, self.__type, self.__precision)7273def merge(self, other) :74"""75TESTS::76sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_functor import *77sage: from psage.modform.fourier_expansion_framework.modularforms.modularform_testtype import *78sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *79sage: F = ModularFormsFunctor( ModularFormTestType_scalar(), NNFilter(5) )80sage: G = ModularFormsFunctor( ModularFormTestType_vectorvalued(), NNFilter(5) )81sage: F.merge(F) is F82True83sage: F.merge(G) is None84True85sage: G.merge(F) is G86True87"""88if type(other) != type(self) :89return None9091if self.__type == other.__type and \92self.__precision == other.__precision :93return self94else :95try :96if other.__type.vector_valued() == self.__type and \97self.__precision == other.__precision :98return self99except AttributeError, NotImplementedError :100return None101102return None103104105