Skip to content

Commit

Permalink
Trac #32870: sage.rings: Modularization changes
Browse files Browse the repository at this point in the history
split out from #32432.

URL: https://trac.sagemath.org/32870
Reported by: mkoeppe
Ticket author(s): Matthias Koeppe, Jonathan Kliem
Reviewer(s): Jonathan Kliem, Matthias Koeppe
  • Loading branch information
Release Manager committed Dec 16, 2021
2 parents 01d5d27 + 92d88c0 commit 90aff98
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 25 deletions.
2 changes: 1 addition & 1 deletion src/sage/algebras/free_algebra_quotient.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
# ****************************************************************************

from sage.modules.free_module import FreeModule
from sage.algebras.algebra import Algebra
from sage.rings.ring import Algebra
from sage.algebras.free_algebra import is_FreeAlgebra
from sage.algebras.free_algebra_quotient_element import FreeAlgebraQuotientElement
from sage.structure.unique_representation import UniqueRepresentation
Expand Down
2 changes: 1 addition & 1 deletion src/sage/combinat/species/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
from sage.misc.repr import repr_lincomb
from sage.misc.cachefunc import cached_method

from sage.algebras.algebra import Algebra
from sage.rings.ring import Algebra
from sage.structure.parent import Parent
from sage.categories.all import Rings
from sage.structure.element import Element, parent, AlgebraElement
Expand Down
6 changes: 3 additions & 3 deletions src/sage/modular/hecke/algebra.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
# ****************************************************************************

import sage.rings.infinity
import sage.rings.commutative_algebra
from sage.matrix.constructor import matrix
from sage.arith.all import lcm, gcd
from sage.misc.latex import latex
from sage.matrix.matrix_space import MatrixSpace
from sage.rings.ring import CommutativeAlgebra
from sage.rings.integer_ring import ZZ
from sage.rings.rational_field import QQ
from sage.structure.element import Element
Expand Down Expand Up @@ -103,7 +103,7 @@ def _heckebasis(M):


@richcmp_method
class HeckeAlgebra_base(CachedRepresentation, sage.rings.commutative_algebra.CommutativeAlgebra):
class HeckeAlgebra_base(CachedRepresentation, CommutativeAlgebra):
"""
Base class for algebras of Hecke operators on a fixed Hecke module.
Expand Down Expand Up @@ -179,7 +179,7 @@ def __init__(self, M):
if not module.is_HeckeModule(M):
raise TypeError("M (=%s) must be a HeckeModule" % M)
self.__M = M
sage.rings.commutative_algebra.CommutativeAlgebra.__init__(self, M.base_ring())
CommutativeAlgebra.__init__(self, M.base_ring())

def _an_element_impl(self):
r"""
Expand Down
4 changes: 3 additions & 1 deletion src/sage/rings/commutative_algebra.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ def is_CommutativeAlgebra(x):
EXAMPLES::
sage: sage.rings.commutative_algebra.is_CommutativeAlgebra(sage.rings.ring.CommutativeAlgebra(ZZ))
sage: from sage.rings.commutative_algebra import is_CommutativeAlgebra
sage: from sage.rings.ring import CommutativeAlgebra
sage: is_CommutativeAlgebra(CommutativeAlgebra(ZZ))
True
"""
return isinstance(x, CommutativeAlgebra)
14 changes: 8 additions & 6 deletions src/sage/rings/finite_rings/finite_field_constructor.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,16 +176,17 @@

from sage.rings.integer import Integer

from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing

# the import below is just a redirection
from sage.rings.finite_rings.finite_field_base import is_FiniteField
assert is_FiniteField # just to silent pyflakes

# We don't late import this because this means trouble with the Givaro library
# On a Macbook Pro OSX 10.5.8, this manifests as a Bus Error on exiting Sage.
# TODO: figure out why
from .finite_field_givaro import FiniteField_givaro
try:
# We don't late import this because this means trouble with the Givaro library
# On a Macbook Pro OSX 10.5.8, this manifests as a Bus Error on exiting Sage.
# TODO: figure out why
from .finite_field_givaro import FiniteField_givaro
except ImportError:
FiniteField_givaro = None

from sage.structure.factory import UniqueFactory

Expand Down Expand Up @@ -633,6 +634,7 @@ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
# optimization which we also need to avoid an infinite loop:
# a modulus of None is a shorthand for x-1.
if modulus is not None or impl != 'modn':
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
R = PolynomialRing(FiniteField(p), 'x')
if modulus is None:
modulus = R.irreducible_element(n)
Expand Down
8 changes: 3 additions & 5 deletions src/sage/rings/polynomial/polynomial_ring.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,6 @@
import sage.categories as categories
from sage.categories.morphism import IdentityMorphism

import sage.algebras.algebra
import sage.rings.commutative_algebra as commutative_algebra
import sage.rings.ring as ring
from sage.structure.element import is_RingElement
import sage.rings.polynomial.polynomial_element_generic as polynomial_element_generic
Expand Down Expand Up @@ -226,7 +224,7 @@ def is_PolynomialRing(x):

#########################################################################################

class PolynomialRing_general(sage.algebras.algebra.Algebra):
class PolynomialRing_general(ring.Algebra):
"""
Univariate polynomial ring over a ring.
"""
Expand Down Expand Up @@ -300,7 +298,7 @@ def __init__(self, base_ring, name=None, sparse=False, element_class=None, categ
self.Element = self._polynomial_class
self.__cyclopoly_cache = {}
self._has_singular = False
sage.algebras.algebra.Algebra.__init__(self, base_ring, names=name, normalize=True, category=category)
ring.Algebra.__init__(self, base_ring, names=name, normalize=True, category=category)
self._populate_coercion_lists_(convert_method_name='_polynomial_')

def __reduce__(self):
Expand Down Expand Up @@ -1662,7 +1660,7 @@ def monics( self, of_degree = None, max_degree = None ):
raise ValueError("you should pass exactly one of of_degree and max_degree")


class PolynomialRing_commutative(PolynomialRing_general, commutative_algebra.CommutativeAlgebra):
class PolynomialRing_commutative(PolynomialRing_general, ring.CommutativeAlgebra):
"""
Univariate polynomial ring over a commutative ring.
"""
Expand Down
27 changes: 21 additions & 6 deletions src/sage/rings/quotient_ring.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,22 @@

import sage.misc.latex as latex
from . import ring, ideal, quotient_ring_element
import sage.rings.polynomial.multi_polynomial_ideal
from sage.structure.category_object import normalize_names
from sage.structure.richcmp import richcmp_method, richcmp
import sage.structure.parent_gens
from sage.interfaces.singular import singular as singular_default, is_SingularElement
from sage.misc.cachefunc import cached_method
from sage.categories.rings import Rings
from sage.categories.commutative_rings import CommutativeRings


MPolynomialIdeal = None
try:
from sage.interfaces.singular import singular as singular_default, is_SingularElement
except ImportError:
is_singularElement = lambda x : False
singular_default = None


def QuotientRing(R, I, names=None, **kwds):
r"""
Creates a quotient ring of the ring `R` by the twosided ideal `I`.
Expand Down Expand Up @@ -959,7 +966,11 @@ def ideal(self, *gens, **kwds):
gens = [gens]
if 'coerce' in kwds and kwds['coerce']:
gens = [self(x) for x in gens] # this will even coerce from singular ideals correctly!
return sage.rings.polynomial.multi_polynomial_ideal.MPolynomialIdeal(self, gens, **kwds)

global MPolynomialIdeal
if MPolynomialIdeal is None:
from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal
return MPolynomialIdeal(self, gens, **kwds)

def _element_constructor_(self, x, coerce=True):
"""
Expand Down Expand Up @@ -1006,7 +1017,7 @@ def _element_constructor_(self, x, coerce=True):
return x
x = x.lift()
if is_SingularElement(x):
#self._singular_().set_ring()
# self._singular_().set_ring()
x = self.element_class(self, x.sage_poly(self.cover_ring()))
return x
if coerce:
Expand Down Expand Up @@ -1171,7 +1182,6 @@ def gen(self, i=0):
"""
return self(self.__R.gen(i))


def _singular_(self, singular=singular_default):
"""
Returns the Singular quotient ring of ``self`` if the base ring is
Expand Down Expand Up @@ -1203,6 +1213,9 @@ def _singular_(self, singular=singular_default):
// quotient ring from ideal
_[1]=x2+y2
"""
if singular is None:
raise ImportError("could not import singular")

try:
Q = self.__singular
if not (Q.parent() is singular):
Expand All @@ -1212,7 +1225,7 @@ def _singular_(self, singular=singular_default):
except (AttributeError, ValueError):
return self._singular_init_(singular)

def _singular_init_(self,singular=singular_default):
def _singular_init_(self, singular=None):
"""
Returns a newly created Singular quotient ring matching ``self`` if
the base ring is coercible to Singular.
Expand All @@ -1229,6 +1242,8 @@ def _singular_init_(self,singular=singular_default):
sage: parent(T)
Singular
"""
if singular is None:
from sage.interfaces.singular import singular
self.__R._singular_().set_ring()
self.__singular = singular("%s"%self.__I._singular_().name(),"qring")
return self.__singular
Expand Down
9 changes: 8 additions & 1 deletion src/sage/rings/quotient_ring_element.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@

from sage.structure.element import RingElement
from sage.structure.richcmp import richcmp, rich_to_bool
from sage.interfaces.singular import singular as singular_default


try:
from sage.interfaces.singular import singular as singular_default
except ImportError:
singular_default = None


class QuotientRingElement(RingElement):
Expand Down Expand Up @@ -797,6 +802,8 @@ def _singular_(self, singular=singular_default):
sage: S((a-2/3*b)._singular_())
a - 2/3*b
"""
if singular is None:
raise ImportError("could not import singular")
return self.__rep._singular_(singular)

def _magma_init_(self, magma):
Expand Down
2 changes: 1 addition & 1 deletion src/sage/rings/rational.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ from cysignals.signals cimport sig_on, sig_off
import operator
import fractions

from sage.misc.mathml import mathml
from sage.arith.long cimport pyobject_to_long, integer_check_long_py
from sage.cpython.string cimport char_to_str, str_to_bytes

Expand Down Expand Up @@ -1093,6 +1092,7 @@ cdef class Rational(sage.structure.element.FieldElement):
if self.denom() == 1:
return '<mn>%s</mn>'%(self.numer())
else:
from sage.misc.mathml import mathml
t = ''
if self < 0:
t = t + '<mo>-</mo>'
Expand Down

0 comments on commit 90aff98

Please sign in to comment.