def __init__(self, O, C, 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
            sage: emps = EquivariantMonoidPowerSeriesModule_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", FreeModule(QQ, 2))) # indirect doctest
        """
        
        # 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()]
Пример #2
0
    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 _element_constructor_(self, x) :
     """
     TESTS::
         sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *
         sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_module import EquivariantMonoidPowerSeriesModule
         sage: emps = EquivariantMonoidPowerSeriesModule_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", FreeModule(QQ, 2)))
         sage: h = emps(0) # indirect doctest
         sage: h = emps(int(0)) # indirect doctest
     """
     if isinstance(x, int) and x == 0 :
         return self._element_class( self,
             dict( [(self.characters().one_element(), dict())] ),
             self.action().filter_all() )
     elif isinstance(x, Element) and x.is_zero() :
         P = x.parent()
         
         if self.action().is_monoid_action() and \
            self.base_ring().base_ring().has_coerce_map_from(P) or \
            not self.action().is_monoid_action() and \
            self.base_ring().has_coerce_map_from(P) :
             return self._element_class( self,
                 dict( [(self.characters().one_element(), dict())] ),
                 self.action().filter_all() )
 
     return EquivariantMonoidPowerSeriesAmbient_abstract._element_constructor_(self, x)
Пример #4
0
 def _element_constructor_(self, x) :
     r"""
     TESTS::
         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)))
         sage: h = emps(0) # indirect doctest
         sage: h = emps(int(0)) # indirect doctest
     """
     if isinstance(x, int) and x == 0 :
         return self._element_class( self,
             dict( [(self.characters().one_element(), dict())] ),
             self.action().filter_all() )
     elif isinstance(x, Element) and x.is_zero() :
         P = x.parent()
         
         if self.action().is_monoid_action() and \
            self.base_ring().base_ring().has_coerce_map_from(P) or \
            not self.action().is_monoid_action() and \
            self.base_ring().has_coerce_map_from(P) :
             return self._element_class( self,
                 dict( [(self.characters().one_element(), dict())] ),
                 self.action().filter_all() )
 
     return EquivariantMonoidPowerSeriesAmbient_abstract._element_constructor_(self, x)
Пример #5
0
    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 an algebra; 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_ring import EquivariantMonoidPowerSeriesRing_generic
            sage: emps = EquivariantMonoidPowerSeriesRing_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", QQ)) # indirect doctest
            sage: emps = EquivariantMonoidPowerSeriesRing_generic(NNMonoid(True), TrivialCharacterMonoid("1", ZZ), TrivialRepresentation("1", ZZ)) # indirect doctest
            sage: emps.base_ring()
            Integer Ring
            sage: (1 / 2) * emps.0
            Equivariant monoid power series in Ring of equivariant monoid power series over NN
        """

        Algebra.__init__(self, R.base_ring())
        EquivariantMonoidPowerSeriesAmbient_abstract.__init__(self, O, C, R)

        self.__monoid_gens = \
          [self._element_class(self,
            dict([( C.one_element(), dict([(s, self.coefficient_domain().one_element())]) )]),
            self.monoid().filter_all() )
           for s in self.action().gens()]
        self.__character_gens = \
          [self._element_class(self,
            dict([( c, dict([(self.monoid().zero_element(), self.coefficient_domain().one_element())]) )]),
            self.monoid().filter_all() )
           for c in C.gens()]
        self.__coefficient_gens = \
          [self._element_class(self,
            dict([( C.one_element(), dict([(self.monoid().zero_element(), g)]))]),
            self.monoid().filter_all() )
           for g in self.coefficient_domain().gens()]

        from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_functor import MonoidPowerSeriesBaseRingInjection

        self._populate_coercion_lists_(
            coerce_list=[
                MonoidPowerSeriesBaseRingInjection(R.codomain(), self)
            ],
            convert_list=([O.monoid()]
                          if isinstance(O.monoid(), Parent) else []))
Пример #6
0
    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 an algebra; 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_ring import EquivariantMonoidPowerSeriesRing_generic
            sage: emps = EquivariantMonoidPowerSeriesRing_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", QQ)) # indirect doctest
            sage: emps = EquivariantMonoidPowerSeriesRing_generic(NNMonoid(True), TrivialCharacterMonoid("1", ZZ), TrivialRepresentation("1", ZZ)) # indirect doctest
            sage: emps.base_ring()
            Integer Ring
            sage: (1 / 2) * emps.0
            Equivariant monoid power series in Ring of equivariant monoid power series over NN
        """
        
        Algebra.__init__(self, R.base_ring())
        EquivariantMonoidPowerSeriesAmbient_abstract.__init__(self, O, C, R)
    
        self.__monoid_gens = \
          [self._element_class(self,
            dict([( C.one_element(), dict([(s, self.coefficient_domain().one_element())]) )]),
            self.monoid().filter_all() )
           for s in self.action().gens()]
        self.__character_gens = \
          [self._element_class(self,
            dict([( c, dict([(self.monoid().zero_element(), self.coefficient_domain().one_element())]) )]),
            self.monoid().filter_all() )
           for c in C.gens()]
        self.__coefficient_gens = \
          [self._element_class(self,
            dict([( C.one_element(), dict([(self.monoid().zero_element(), g)]))]),
            self.monoid().filter_all() )
           for g in self.coefficient_domain().gens()]
        
        from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_functor import MonoidPowerSeriesBaseRingInjection

        self._populate_coercion_lists_(
          coerce_list = [MonoidPowerSeriesBaseRingInjection(R.codomain(), self)] ,
          convert_list = ([O.monoid()] if isinstance(O.monoid(), Parent) else []) )
    def _element_constructor_(self, x):
        r"""
        TESTS::
            sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *
            sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_ring import EquivariantMonoidPowerSeriesRing_generic
            sage: emps = EquivariantMonoidPowerSeriesRing_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", QQ))
            sage: h = emps(1)
            sage: h = emps(emps.monoid().zero_element())
            sage: h = emps.zero_element()
            sage: K.<rho> = CyclotomicField(6)
            sage: emps = EquivariantMonoidPowerSeriesRing_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", K))
            sage: h = emps(rho)
            sage: h = emps(1)
        """
        if isinstance(x, int):
            x = Integer(x)

        if isinstance(x, Element):
            P = x.parent()

            if P is self.coefficient_domain():
                return self._element_class(
                    self, {
                        self.characters().one_element(): {
                            self.monoid().zero_element(): x
                        }
                    },
                    self.action().filter_all())
            elif self.coefficient_domain().has_coerce_map_from(P):
                return self._element_class(
                    self, {
                        self.characters().one_element(): {
                            self.monoid().zero_element():
                            self.coefficient_domain()(x)
                        }
                    },
                    self.action().filter_all())
            elif P is self.monoid():
                return self._element_class(self, {
                    self.characters().one_element(): {
                        x: self.base_ring().one_element()
                    }
                },
                                           self.action().filter_all(),
                                           symmetrise=True)

        return EquivariantMonoidPowerSeriesAmbient_abstract._element_constructor_(
            self, x)
    def _element_constructor_(self, x) :
        """
        TESTS::
            sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import *
            sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_ring import EquivariantMonoidPowerSeriesRing_generic
            sage: emps = EquivariantMonoidPowerSeriesRing_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", QQ))
            sage: h = emps(1)
            sage: h = emps(emps.monoid().zero_element())
            sage: h = emps.zero_element()
            sage: K.<rho> = CyclotomicField(6)
            sage: emps = EquivariantMonoidPowerSeriesRing_generic(NNMonoid(True), TrivialCharacterMonoid("1", QQ), TrivialRepresentation("1", K))
            sage: h = emps(rho)
            sage: h = emps(1)
        """
        if isinstance(x, int) :
            x = Integer(x)
        
        if isinstance(x, Element) :
            P = x.parent()

            if P is self.coefficient_domain() :
                return self._element_class( self,
                        {self.characters().one_element():
                                {self.monoid().zero_element(): x}},
                        self.action().filter_all() )
            elif self.coefficient_domain().has_coerce_map_from(P) :
                return self._element_class( self,
                        {self.characters().one_element():
                                {self.monoid().zero_element(): self.coefficient_domain()(x)}},
                        self.action().filter_all() )                
            elif P is self.monoid() :
                return self._element_class( self,
                        {self.characters().one_element():
                                {x: self.base_ring().one_element()}},
                        self.action().filter_all(),
                        symmetrise = True  )
            
        return EquivariantMonoidPowerSeriesAmbient_abstract._element_constructor_(self, x)