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()]
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)
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)
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 __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)