def _element_constructor_(self, x) : """ INPUT: - `x` -- An integer, an element of the underlying polynomial ring or an element in a submodule of graded expansions. OUTPUT: An instance of the element class. TESTS:: sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_module import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_element import * sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_grading import DegreeGrading sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_ring import * sage: mps = MonoidPowerSeriesRing(QQ, NNMonoid(False)) sage: ger = GradedExpansionRing_class(Sequence([MonoidPowerSeries(mps, {1: 1}, mps.monoid().filter(4))]), Sequence([MonoidPowerSeries(mps, {1: 1, 2: 3}, mps.monoid().filter(4))]), PolynomialRing(QQ, ['a', 'b']).ideal(0), DegreeGrading((1,2))) sage: h = ger(1) """ if isinstance(x, (int, Integer)) : return self._element_class(self, self.relations().ring()(x)) P = x.parent() if P is self.relations().ring() : return self._element_class(self, x) elif self.relations().ring().has_coerce_map_from(P) : return self._element_class(self, self.relations().ring()(x)) elif P is self.base_ring() and isinstance( self.base_ring(), GradedExpansionAmbient_abstract ) : return self._element_class(self, self.relations().ring()(x.polynomial())) return GradedExpansionAmbient_abstract._element_constructor_(self, x)
def _element_constructor_(self, x) : r""" INPUT: - `x` -- A zero integer, an element of the underlying polynomial ring or an element in a submodule of graded expansions. OUTPUT: An instance of the element class. TESTS:: sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_module import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_element import * sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_grading import DegreeGrading sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_module import * sage: m = FreeModule(QQ, 3) sage: mpsm = MonoidPowerSeriesModule(m, NNMonoid(False)) sage: mps = mpsm.base_ring() sage: ger = GradedExpansionModule_class(Sequence([MonoidPowerSeries(mps, {1: 1}, mps.monoid().filter(4))]), Sequence([MonoidPowerSeries(mpsm, {1: m([1,1,1]), 2: m([1,3,-3])}, mpsm.monoid().filter(4))]), PolynomialRing(QQ, ['a', 'b']).ideal(0), DegreeGrading((1,2))) sage: h = ger(0) """ if isinstance(x, (int, Integer)) and x == 0 : return self._element_class(self, self.relations().ring().zero()) P = x.parent() if P is self.base_ring() : if x == 0 : return self._element_class(self, self.relations().ring().zero()) return GradedExpansionAmbient_abstract._element_constructor_(self, x)
def _element_constructor_(self, x): r""" INPUT: - `x` -- A zero integer, an element of the underlying polynomial ring or an element in a submodule of graded expansions. OUTPUT: An instance of the element class. TESTS:: sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_module import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_element import * sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_grading import DegreeGrading sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_module import * sage: m = FreeModule(QQ, 3) sage: mpsm = MonoidPowerSeriesModule(m, NNMonoid(False)) sage: mps = mpsm.base_ring() sage: ger = GradedExpansionModule_class(Sequence([MonoidPowerSeries(mps, {1: 1}, mps.monoid().filter(4))]), Sequence([MonoidPowerSeries(mpsm, {1: m([1,1,1]), 2: m([1,3,-3])}, mpsm.monoid().filter(4))]), PolynomialRing(QQ, ['a', 'b']).ideal(0), DegreeGrading((1,2))) sage: h = ger(0) """ if isinstance(x, (int, Integer)) and x == 0: return self._element_class(self, self.relations().ring().zero()) P = x.parent() if P is self.base_ring(): if x == 0: return self._element_class(self, self.relations().ring().zero()) return GradedExpansionAmbient_abstract._element_constructor_(self, x)
def _element_constructor_(self, x) : r""" INPUT: - `x` -- An integer, an element of the underlying polynomial ring or an element in a submodule of graded expansions. OUTPUT: An instance of the element class. TESTS:: sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_module import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_element import * sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_grading import DegreeGrading sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_ring import * sage: mps = MonoidPowerSeriesRing(QQ, NNMonoid(False)) sage: ger = GradedExpansionRing_class(Sequence([MonoidPowerSeries(mps, {1: 1}, mps.monoid().filter(4))]), Sequence([MonoidPowerSeries(mps, {1: 1, 2: 3}, mps.monoid().filter(4))]), PolynomialRing(QQ, ['a', 'b']).ideal(0), DegreeGrading((1,2))) sage: h = ger(1) """ if isinstance(x, (int, Integer)) : return self._element_class(self, self.relations().ring()(x)) P = x.parent() if P is self.relations().ring() : return self._element_class(self, x) elif self.relations().ring().has_coerce_map_from(P) : return self._element_class(self, self.relations().ring()(x)) elif P is self.base_ring() and isinstance( self.base_ring(), GradedExpansionAmbient_abstract ) : return self._element_class(self, self.relations().ring()(x.polynomial())) return GradedExpansionAmbient_abstract._element_constructor_(self, x)
def __init__ ( self, base_ring_generators, generators, relations, grading, all_relations = True, reduce_before_evaluating = True) : """ The degree one part of the monomials that correspond to generators over the base expansion ring will serve as the coordinates of the elements. INPUT: - ``base_ring_generators`` -- A list of (equivariant) monoid power series with coefficient domain the base ring of the coefficient domain of the generators or ``None``. - ``generators`` -- A list of (equivariant) monoid power series; The generators of the ambient over the ring generated by the base ring generators. - ``relations`` -- An ideal in a polynomial ring with ``len(base_ring_generators) + len(generators)`` variables. - ``grading`` -- A grading deriving from :class:~`fourier_expansion_framework.gradedexpansions.gradedexpansion_grading`; A grading for the polynomial ring of the relations. - ``all_relations`` -- A boolean (default: ``True``); If ``True`` the relations given for the polynomial ring are all relations that the Fourier expansion have. - ``reduce_before_evaluating`` -- A boolean (default: ``True``); If ``True`` any monomial will be Groebner reduced before the Fourier expansion is calculated. NOTE: The grading must respect the relations of the generators. TESTS:: sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_ring import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_element import * sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_grading import DegreeGrading sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_ring import * sage: mps = MonoidPowerSeriesRing(QQ, NNMonoid(False)) sage: ger = GradedExpansionRing_class(Sequence([MonoidPowerSeries(mps, {1: 1}, mps.monoid().filter(4))]), Sequence([MonoidPowerSeries(mps, {1: 1, 2: 3}, mps.monoid().filter(4))]), PolynomialRing(QQ, ['a', 'b']).ideal(0), DegreeGrading((1,2))) sage: ger.base_ring() Graded expansion ring with generators a """ if not hasattr(self, '_element_class') : self._element_class = GradedExpansion_class if hasattr(self, "_extended_base_ring") : Algebra.__init__(self, self._extended_base_ring) elif base_ring_generators is None or len(base_ring_generators) == 0 : Algebra.__init__(self, relations.base_ring()) else : gb = filter( lambda p: all( all(a == 0 for a in list(e)[len(base_ring_generators):]) for e in p.exponents() ), relations.groebner_basis() ) P = PolynomialRing( relations.base_ring(), list(relations.ring().variable_names())[:len(base_ring_generators)] ) base_relations = P.ideal(gb) R = GradedExpansionRing_class(None, base_ring_generators, base_relations, grading.subgrading(xrange(len(base_ring_generators))), all_relations, reduce_before_evaluating) Algebra.__init__(self, R) GradedExpansionAmbient_abstract.__init__(self, base_ring_generators, generators, relations, grading, all_relations, reduce_before_evaluating) self._populate_coercion_lists_( coerce_list = [GradedExpansionBaseringInjection(self.base_ring(), self)], convert_list = [self.relations().ring()], convert_method_name = "_graded_expansion_submodule_to_graded_ambient_" )
def __init__(self, base_ring_generators, generators, relations, grading, all_relations=True, reduce_before_evaluating=True): r""" The degree one part of the monomials that correspond to generators over the base expansion ring will serve as the coordinates of the elements. INPUT: - ``base_ring_generators`` -- A list of (equivariant) monoid power series with coefficient domain the base ring of the coefficient domain of the generators or ``None``. - ``generators`` -- A list of (equivariant) monoid power series; The generators of the ambient over the ring generated by the base ring generators. - ``relations`` -- An ideal in a polynomial ring with ``len(base_ring_generators) + len(generators)`` variables. - ``grading`` -- A grading deriving from :class:~`fourier_expansion_framework.gradedexpansions.gradedexpansion_grading`; A grading for the polynomial ring of the relations. - ``all_relations`` -- A boolean (default: ``True``); If ``True`` the relations given for the polynomial ring are all relations that the Fourier expansion have. - ``reduce_before_evaluating`` -- A boolean (default: ``True``); If ``True`` any monomial will be Groebner reduced before the Fourier expansion is calculated. NOTE: The grading must respect the relations of the generators. TESTS:: sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_basicmonoids import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_module import * sage: from psage.modform.fourier_expansion_framework.monoidpowerseries.monoidpowerseries_element import * sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_grading import DegreeGrading sage: from psage.modform.fourier_expansion_framework.gradedexpansions.gradedexpansion_module import * sage: m = FreeModule(QQ, 3) sage: mpsm = MonoidPowerSeriesModule(m, NNMonoid(False)) sage: mps = mpsm.base_ring() sage: ger = GradedExpansionModule_class(Sequence([MonoidPowerSeries(mps, {1: 1}, mps.monoid().filter(4))]), Sequence([MonoidPowerSeries(mpsm, {1: m([1,1,1]), 2: m([1,3,-3])}, mpsm.monoid().filter(4))]), PolynomialRing(QQ, ['a', 'b']).ideal(0), DegreeGrading((1,2))) sage: ger.base_ring() Graded expansion ring with generators a """ if not hasattr(self, '_element_class'): self._element_class = GradedExpansionVector_class if hasattr(self, "_extended_base_ring"): Module.__init__(self, self._extended_base_ring) elif base_ring_generators is None or len(base_ring_generators) == 0: Module.__init__(self, relations.base_ring()) else: gb = filter( lambda p: all( all(a == 0 for a in list(e)[len(base_ring_generators):]) for e in p.exponents()), relations.groebner_basis()) P = PolynomialRing( relations.base_ring(), list(relations.ring().variable_names()) [:len(base_ring_generators)]) base_relations = P.ideal(gb) R = GradedExpansionRing_class( None, base_ring_generators, base_relations, grading.subgrading(xrange(len(base_ring_generators))), all_relations, reduce_before_evaluating) Module.__init__(self, R) GradedExpansionAmbient_abstract.__init__(self, base_ring_generators, generators, relations, grading, all_relations, reduce_before_evaluating) self._populate_coercion_lists_( convert_list=[self.relations().ring()], convert_method_name="_graded_expansion_submodule_to_graded_ambient_" )