def polynomial_default_category(base_ring, multivariate):
    """
    Choose an appropriate category for a polynomial ring.

    INPUT:

    - ``base_ring``: The ring over which the polynomial ring shall be defined.
    - ``multivariate``: Will the polynomial ring be multivariate?

    EXAMPLES::

        sage: QQ['t'].category() is Category.join([EuclideanDomains(), CommutativeAlgebras(QQ)])
        True
        sage: QQ['s','t'].category() is Category.join([UniqueFactorizationDomains(), CommutativeAlgebras(QQ)])
        True
        sage: QQ['s']['t'].category() is Category.join([UniqueFactorizationDomains(), CommutativeAlgebras(QQ['s'])])
        True

    """
    if base_ring in _Fields:
        if multivariate:
            return JoinCategory(
                (_UniqueFactorizationDomains, CommutativeAlgebras(base_ring)))
        return JoinCategory(
            (_EuclideanDomains, CommutativeAlgebras(base_ring)))
    if base_ring in _UFD:  #base_ring.is_unique_factorization_domain():
        return JoinCategory(
            (_UniqueFactorizationDomains, CommutativeAlgebras(base_ring)))
    if base_ring in _ID:  #base_ring.is_integral_domain():
        return JoinCategory((_IntegralDomains, CommutativeAlgebras(base_ring)))
    if base_ring in _CommutativeRings:  #base_ring.is_commutative():
        return CommutativeAlgebras(base_ring)
    return Algebras(base_ring)
Пример #2
0
    def __init__(self, R, names):
        r"""
        Initialize ``self``.

        EXAMPLES::

            sage: F = ShuffleAlgebra(QQ, 'xyz'); F
            Shuffle Algebra on 3 generators ['x', 'y', 'z'] over Rational Field
            sage: TestSuite(F).run()

        TESTS::

            sage: ShuffleAlgebra(24, 'toto')
            Traceback (most recent call last):
            ...
            TypeError: argument R must be a ring
        """
        if R not in Rings():
            raise TypeError("argument R must be a ring")
        self._alphabet = names
        self.__ngens = self._alphabet.cardinality()
        CombinatorialFreeModule.__init__(self,
                                         R,
                                         Words(names, infinite=False),
                                         latex_prefix="",
                                         category=(AlgebrasWithBasis(R),
                                                   CommutativeAlgebras(R),
                                                   CoalgebrasWithBasis(R)))
Пример #3
0
    def __init__(self, domain):
        r"""
        Construct an algebra of scalar fields.

        TESTS::

            sage: M = Manifold(2, 'M', structure='topological')
            sage: X.<x,y> = M.chart()
            sage: CM = M.scalar_field_algebra(); CM
            Algebra of scalar fields on the 2-dimensional topological
             manifold M
            sage: type(CM)
            <class 'sage.manifolds.scalarfield_algebra.ScalarFieldAlgebra_with_category'>
            sage: type(CM).__base__
            <class 'sage.manifolds.scalarfield_algebra.ScalarFieldAlgebra'>
            sage: TestSuite(CM).run()

        """
        base_field = domain.base_field()
        if domain.base_field_type() in ['real', 'complex']:
            base_field = SR
        Parent.__init__(self, base=base_field,
                        category=CommutativeAlgebras(base_field))
        self._domain = domain
        self._populate_coercion_lists_()
Пример #4
0
    def __init__(self, A):
        """
        EXAMPLES::

            sage: AlgebraModules(QQ['a'])
            Category of algebra modules over Univariate Polynomial Ring in a over Rational Field
            sage: AlgebraModules(QQ['a,b']) # todo: not implemented (QQ['a,b'] should be in Algebras(QQ))
            sage: AlgebraModules(FreeAlgebra(QQ,2,'a,b'))
            Traceback (most recent call last):
            ...
            TypeError: A (=Free Algebra on 2 generators (a, b) over Rational Field) must be a commutative algebra
            sage: AlgebraModules(QQ)
            Traceback (most recent call last):
            ...
            TypeError: A (=Rational Field) must be a commutative algebra

        TESTS::

            sage: TestSuite(AlgebraModules(QQ['a'])).run()
        """
        from sage.categories.commutative_algebras import CommutativeAlgebras
        if not hasattr(A, "base_ring") or A not in CommutativeAlgebras(
                A.base_ring()):
            raise TypeError("A (=%s) must be a commutative algebra" % A)
        Category_module.__init__(self, A)
Пример #5
0
    def __init__(self, field, prec, log_radii, names, order, integral=False):
        """
        Initialize the Tate algebra

        TESTS::

            sage: A.<x,y> = TateAlgebra(Zp(2), log_radii=1)
            sage: TestSuite(A).run()

        We check that univariate Tate algebras work correctly::

            sage: B.<t> = TateAlgebra(Zp(3))

        """
        from sage.misc.latex import latex_variable_name
        from sage.rings.polynomial.polynomial_ring_constructor import _multi_variate
        self.element_class = TateAlgebraElement
        self._field = field
        self._cap = prec
        self._log_radii = ETuple(log_radii)  # TODO: allow log_radii in QQ
        self._names = names
        self._latex_names = [latex_variable_name(var) for var in names]
        uniformizer = field.change(print_mode='terse',
                                   show_prec=False).uniformizer()
        self._uniformizer_repr = uniformizer._repr_()
        self._uniformizer_latex = uniformizer._latex_()
        self._ngens = len(names)
        self._order = order
        self._integral = integral
        if integral:
            base = field.integer_ring()
        else:
            base = field
        CommutativeAlgebra.__init__(self,
                                    base,
                                    names,
                                    category=CommutativeAlgebras(base))
        self._polynomial_ring = _multi_variate(field, names, order=order)
        one = field(1)
        self._parent_terms = TateTermMonoid(self)
        self._oneterm = self._parent_terms(one, ETuple([0] * self._ngens))
        if integral:
            # This needs to be update if log_radii are allowed to be non-integral
            self._gens = [
                self((one << log_radii[i]) * self._polynomial_ring.gen(i))
                for i in range(self._ngens)
            ]
            self._integer_ring = self
        else:
            self._gens = [self(g) for g in self._polynomial_ring.gens()]
            self._integer_ring = TateAlgebra_generic(field,
                                                     prec,
                                                     log_radii,
                                                     names,
                                                     order,
                                                     integral=True)
            self._integer_ring._rational_ring = self._rational_ring = self
Пример #6
0
    def __init__(self, R, names):
        """
        Initialize ``self``.

        EXAMPLES::

            sage: D = ShuffleAlgebra(QQ, 'ab').dual_pbw_basis()
            sage: TestSuite(D).run()
        """
        self._alphabet = names
        self._alg = ShuffleAlgebra(R, names)
        CombinatorialFreeModule.__init__(self, R, Words(names), prefix='S',
            category=(AlgebrasWithBasis(R), CommutativeAlgebras(R), CoalgebrasWithBasis(R)))
Пример #7
0
 def __init__(self, domain):
     Parent.__init__(self, base=SR, category=CommutativeAlgebras(SR))
     self._domain = domain
     self._populate_coercion_lists_()
     self._zero = None  # zero element (not constructed yet)