Skip to content

Commit b921eb0

Browse files
committed
moved some is_noetherian to categories
1 parent d617df4 commit b921eb0

File tree

3 files changed

+57
-66
lines changed

3 files changed

+57
-66
lines changed

src/sage/algebras/steenrod/steenrod_algebra.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3059,7 +3059,7 @@ def is_integral_domain(self, proof=True):
30593059
"""
30603060
return self.is_field()
30613061

3062-
def is_noetherian(self):
3062+
def is_noetherian(self) -> bool:
30633063
"""
30643064
This algebra is Noetherian if and only if it is finite.
30653065

src/sage/rings/finite_rings/integer_mod_ring.py

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,10 @@ def create_object(self, version, order, **kwds):
249249
Zmod = Integers = IntegerModRing = IntegerModFactory("IntegerModRing")
250250

251251

252-
from sage.categories.commutative_rings import CommutativeRings
252+
from sage.categories.noetherian_rings import NoetherianRings
253253
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
254254
from sage.categories.category import JoinCategory
255-
default_category = JoinCategory((CommutativeRings(), FiniteEnumeratedSets()))
255+
default_category = JoinCategory((NoetherianRings(), FiniteEnumeratedSets()))
256256
ZZ = integer_ring.IntegerRing()
257257

258258

@@ -448,6 +448,11 @@ def __init__(self, order, cache=None, category=None):
448448
sage: R = IntegerModRing(18)
449449
sage: R.is_finite()
450450
True
451+
452+
TESTS::
453+
454+
sage: Integers(8).is_noetherian()
455+
True
451456
"""
452457
order = ZZ(order)
453458
if order <= 0:
@@ -478,7 +483,7 @@ def __init__(self, order, cache=None, category=None):
478483
self._zero_element = integer_mod.IntegerMod(self, 0)
479484
self._one_element = integer_mod.IntegerMod(self, 1)
480485

481-
def _macaulay2_init_(self, macaulay2=None):
486+
def _macaulay2_init_(self, macaulay2=None) -> str:
482487
"""
483488
EXAMPLES::
484489
@@ -498,7 +503,7 @@ def _macaulay2_init_(self, macaulay2=None):
498503
"""
499504
return "ZZ/{}".format(self.order())
500505

501-
def _axiom_init_(self):
506+
def _axiom_init_(self) -> str:
502507
"""
503508
Return a string representation of ``self`` in (Pan)Axiom.
504509
@@ -529,17 +534,6 @@ def krull_dimension(self):
529534
"""
530535
return integer.Integer(0)
531536

532-
def is_noetherian(self):
533-
"""
534-
Check if ``self`` is a Noetherian ring.
535-
536-
EXAMPLES::
537-
538-
sage: Integers(8).is_noetherian()
539-
True
540-
"""
541-
return True
542-
543537
def extension(self, poly, name=None, names=None, **kwds):
544538
"""
545539
Return an algebraic extension of ``self``. See
@@ -560,7 +554,7 @@ def extension(self, poly, name=None, names=None, **kwds):
560554
return CommutativeRing.extension(self, poly, name, names, **kwds)
561555

562556
@cached_method
563-
def is_prime_field(self):
557+
def is_prime_field(self) -> bool:
564558
"""
565559
Return ``True`` if the order is prime.
566560
@@ -573,7 +567,7 @@ def is_prime_field(self):
573567
"""
574568
return self.__order.is_prime()
575569

576-
def _precompute_table(self):
570+
def _precompute_table(self) -> None:
577571
"""
578572
Compute a table of elements so that elements are unique.
579573
@@ -585,7 +579,7 @@ def _precompute_table(self):
585579
"""
586580
self._pyx_order.precompute_table(self)
587581

588-
def list_of_elements_of_multiplicative_group(self):
582+
def list_of_elements_of_multiplicative_group(self) -> list:
589583
"""
590584
Return a list of all invertible elements, as python ints.
591585

src/sage/rings/number_field/order.py

Lines changed: 44 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
# ****************************************************************************
7979

8080
from sage.categories.integral_domains import IntegralDomains
81+
from sage.categories.noetherian_rings import NoetherianRings
8182
from sage.misc.cachefunc import cached_method
8283
from sage.structure.parent import Parent
8384
from sage.structure.sequence import Sequence
@@ -457,6 +458,16 @@ class Order(Parent, sage.rings.abc.Order):
457458
Traceback (most recent call last):
458459
...
459460
ValueError: the rank of the span of gens is wrong
461+
462+
Orders are always Noetherian::
463+
464+
sage: x = polygen(ZZ, 'x')
465+
sage: L.<alpha> = NumberField(x**4 - x**2 + 7)
466+
sage: O = L.maximal_order() ; O.is_noetherian()
467+
True
468+
sage: E.<w> = NumberField(x^2 - x + 2)
469+
sage: OE = E.ring_of_integers(); OE.is_noetherian()
470+
True
460471
"""
461472

462473
def __init__(self, K):
@@ -479,8 +490,9 @@ def __init__(self, K):
479490
0.0535229072603327 + 1.20934552493846*I
480491
"""
481492
self._K = K
493+
cat = IntegralDomains() & NoetherianRings()
482494
Parent.__init__(self, base=ZZ, names=K.variable_names(),
483-
normalize=False, category=IntegralDomains())
495+
normalize=False, category=cat)
484496
self._populate_coercion_lists_(embedding=self.number_field())
485497
if self.absolute_degree() == 2:
486498
self.is_maximal() # cache
@@ -615,22 +627,6 @@ def is_field(self, proof=True):
615627
"""
616628
return False
617629

618-
def is_noetherian(self):
619-
r"""
620-
Return ``True`` (because orders are always Noetherian).
621-
622-
EXAMPLES::
623-
624-
sage: x = polygen(ZZ, 'x')
625-
sage: L.<alpha> = NumberField(x**4 - x**2 + 7)
626-
sage: O = L.maximal_order() ; O.is_noetherian()
627-
True
628-
sage: E.<w> = NumberField(x^2 - x + 2)
629-
sage: OE = E.ring_of_integers(); OE.is_noetherian()
630-
True
631-
"""
632-
return True
633-
634630
def is_integrally_closed(self) -> bool:
635631
r"""
636632
Return whether this ring is integrally closed.
@@ -822,7 +818,7 @@ def coordinates(self, x):
822818
from sage.matrix.constructor import Matrix
823819
self.__basis_matrix_inverse = Matrix([to_V(b) for b in self.basis()]).inverse()
824820
M = self.__basis_matrix_inverse
825-
return to_V(K(x))*M
821+
return to_V(K(x)) * M
826822

827823
def free_module(self):
828824
r"""
@@ -1375,7 +1371,8 @@ def random_element(self, *args, **kwds):
13751371
sage: A.random_element().parent() is A
13761372
True
13771373
"""
1378-
return sum([ZZ.random_element(*args, **kwds)*a for a in self.basis()])
1374+
return sum([ZZ.random_element(*args, **kwds) * a
1375+
for a in self.basis()])
13791376

13801377
def absolute_degree(self):
13811378
r"""
@@ -1492,41 +1489,41 @@ def some_elements(self):
14921489
elements.append(self(a))
14931490
return elements
14941491

1495-
## def absolute_polynomial(self):
1496-
## """
1497-
## Return the absolute polynomial of this order, which is just the absolute polynomial of the number field.
1492+
# def absolute_polynomial(self):
1493+
# """
1494+
# Return the absolute polynomial of this order, which is just the absolute polynomial of the number field.
14981495

1499-
## EXAMPLES::
1496+
# EXAMPLES::
15001497

1501-
## sage: K.<a, b> = NumberField([x^2 + 1, x^3 + x + 1]); OK = K.maximal_order()
1502-
## Traceback (most recent call last):
1503-
## ...
1504-
## NotImplementedError
1498+
# sage: K.<a, b> = NumberField([x^2 + 1, x^3 + x + 1]); OK = K.maximal_order()
1499+
# Traceback (most recent call last):
1500+
# ...
1501+
# NotImplementedError
15051502

1506-
## #sage: OK.absolute_polynomial()
1507-
## #x^6 + 5*x^4 - 2*x^3 + 4*x^2 + 4*x + 1
1508-
## """
1509-
## return self.number_field().absolute_polynomial()
1503+
# #sage: OK.absolute_polynomial()
1504+
# #x^6 + 5*x^4 - 2*x^3 + 4*x^2 + 4*x + 1
1505+
# """
1506+
# return self.number_field().absolute_polynomial()
15101507

1511-
## def polynomial(self):
1512-
## """
1513-
## Return the polynomial defining the number field that contains self.
1514-
## """
1515-
## return self.number_field().polynomial()
1508+
# def polynomial(self):
1509+
# """
1510+
# Return the polynomial defining the number field that contains self.
1511+
# """
1512+
# return self.number_field().polynomial()
15161513

1517-
## def polynomial_ntl(self):
1518-
## """
1519-
## Return defining polynomial of the parent number field as a
1520-
## pair, an ntl polynomial and a denominator.
1514+
# def polynomial_ntl(self):
1515+
# """
1516+
# Return defining polynomial of the parent number field as a
1517+
# pair, an ntl polynomial and a denominator.
15211518

1522-
## This is used mainly to implement some internal arithmetic.
1519+
# This is used mainly to implement some internal arithmetic.
15231520

1524-
## EXAMPLES::
1521+
# EXAMPLES::
15251522

1526-
## sage: NumberField(x^2 + 1,'a').maximal_order().polynomial_ntl()
1527-
## ([1 0 1], 1)
1528-
## """
1529-
## return self.number_field().polynomial_ntl()
1523+
# sage: NumberField(x^2 + 1,'a').maximal_order().polynomial_ntl()
1524+
# ([1 0 1], 1)
1525+
# """
1526+
# return self.number_field().polynomial_ntl()
15301527

15311528

15321529
class Order_absolute(Order):
@@ -1603,7 +1600,7 @@ def _element_constructor_(self, x):
16031600
3*a^2 + 2*a + 1
16041601
"""
16051602
if isinstance(x, (tuple, list)):
1606-
x = sum(xi*gi for xi, gi in zip(x, self.gens()))
1603+
x = sum(xi * gi for xi, gi in zip(x, self.gens()))
16071604
if not isinstance(x, Element) or x.parent() is not self._K:
16081605
x = self._K(x)
16091606
V, _, embedding = self._K.vector_space()

0 commit comments

Comments
 (0)