Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
sage.rings.abc: Add IntegerModRing, Order; use them in sage.matrix, s…
Browse files Browse the repository at this point in the history
…age.modules
  • Loading branch information
Matthias Koeppe committed Oct 1, 2021
1 parent b3290ed commit 9e74b6a
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 7 deletions.
4 changes: 2 additions & 2 deletions src/sage/matrix/matrix0.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ from sage.categories.integral_domains import IntegralDomains

from sage.rings.ring cimport CommutativeRing
from sage.rings.ring import is_Ring
from sage.rings.finite_rings.integer_mod_ring import is_IntegerModRing
import sage.rings.abc
from sage.rings.integer_ring import is_IntegerRing

import sage.modules.free_module
Expand Down Expand Up @@ -5749,7 +5749,7 @@ cdef class Matrix(sage.structure.element.Matrix):
R = self.base_ring()
if algorithm is None and R in _Fields:
return ~self
elif algorithm is None and is_IntegerModRing(R):
elif algorithm is None and isinstance(R, sage.rings.abc.IntegerModRing):
# Finite fields are handled above.
# This is "easy" in that we either get an error or
# the right answer. Note that of course there
Expand Down
6 changes: 3 additions & 3 deletions src/sage/modules/free_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@
import sage.rings.ring as ring
import sage.rings.integer_ring
import sage.rings.rational_field
import sage.rings.finite_rings.integer_mod_ring
import sage.rings.abc
import sage.rings.infinity
import sage.rings.integer
from sage.categories.principal_ideal_domains import PrincipalIdealDomains
Expand Down Expand Up @@ -253,7 +253,7 @@ def create_object(self, version, key):
elif base_ring in PrincipalIdealDomains():
return FreeModule_ambient_pid(base_ring, rank, sparse=sparse)

elif isinstance(base_ring, sage.rings.number_field.order.Order) \
elif isinstance(base_ring, sage.rings.abc.Order) \
and base_ring.is_maximal() and base_ring.class_number() == 1:
return FreeModule_ambient_pid(base_ring, rank, sparse=sparse)

Expand Down Expand Up @@ -7434,7 +7434,7 @@ def element_class(R, is_sparse):
elif sage.rings.rational_field.is_RationalField(R) and not is_sparse:
from .vector_rational_dense import Vector_rational_dense
return Vector_rational_dense
elif sage.rings.finite_rings.integer_mod_ring.is_IntegerModRing(R) and not is_sparse:
elif isinstance(R, sage.rings.abc.IntegerModRing) and not is_sparse:
from .vector_mod2_dense import Vector_mod2_dense
if R.order() == 2:
return Vector_mod2_dense
Expand Down
15 changes: 15 additions & 0 deletions src/sage/rings/abc.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,18 @@ cdef class ComplexDoubleField(Field):
"""

pass


class IntegerModRing:
r"""
Abstract base class for :class:`~sage.rings.finite_rings.integer_mod_ring.IntegerModRing_generic`.
"""

pass

class Order:
r"""
Abstract base class for :class:`~sage.rings.number_field.order.Order`.
"""

pass
2 changes: 1 addition & 1 deletion src/sage/rings/finite_rings/integer_mod_ring.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ def _unit_gens_primepowercase(p, r):


@richcmp_method
class IntegerModRing_generic(quotient_ring.QuotientRing_generic):
class IntegerModRing_generic(quotient_ring.QuotientRing_generic, IntegerModRing):
"""
The ring of integers modulo `N`.
Expand Down
3 changes: 2 additions & 1 deletion src/sage/rings/number_field/order.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
from sage.rings.ring import IntegralDomain
from sage.structure.sequence import Sequence
from sage.rings.integer_ring import ZZ
import sage.rings.abc
from sage.structure.element import is_Element
from .number_field_element import OrderElement_absolute, OrderElement_relative

Expand Down Expand Up @@ -126,7 +127,7 @@ def EquationOrder(f, names, **kwds):
return K.order(K.gens())


class Order(IntegralDomain):
class Order(IntegralDomain, sage.rings.abc.Order):
r"""
An order in a number field.
Expand Down

0 comments on commit 9e74b6a

Please sign in to comment.