diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py index a24552a0c6f..ec2717b912e 100644 --- a/src/sage/rings/number_field/number_field.py +++ b/src/sage/rings/number_field/number_field.py @@ -12522,7 +12522,7 @@ def map_Zmstar_to_Zm(h): p = u.lift() while not p.is_prime(): p += m - f = R.ideal(p).prime_factors()[0].residue_class_degree() + f = K.fractional_ideal(p).prime_factors()[0].residue_class_degree() h = g**f if h not in H: Hgens += [h] diff --git a/src/sage/rings/number_field/number_field_element.pyx b/src/sage/rings/number_field/number_field_element.pyx index 30f9c8ba57f..5f166a8c0a4 100644 --- a/src/sage/rings/number_field/number_field_element.pyx +++ b/src/sage/rings/number_field/number_field_element.pyx @@ -169,9 +169,8 @@ def _inverse_mod_generic(elt, I): """ from sage.matrix.constructor import matrix R = elt.parent() - try: - I = R.ideal(I) - except ValueError: + I = R.number_field().fractional_ideal(I) + if not I.is_integral(): raise ValueError("inverse is only defined modulo integral ideals") if I == 0: raise ValueError("inverse is not defined modulo the zero ideal") @@ -1984,6 +1983,9 @@ cdef class NumberFieldElement(FieldElement): raise ArithmeticError("factorization of 0 is not defined") K = self.parent() + from .order import is_NumberFieldOrder + if is_NumberFieldOrder(K): + K = K.number_field() fac = K.ideal(self).factor() # Check whether all prime ideals in `fac` are principal for P,e in fac: @@ -2065,7 +2067,8 @@ cdef class NumberFieldElement(FieldElement): if not is_NumberFieldOrder(R) or not R.is_maximal(): raise NotImplementedError("gcd() for %r is not implemented" % R) - g = R.ideal(self, other).gens_reduced() + K = R.number_field() + g = K.fractional_ideal(self, other).gens_reduced() if len(g) > 1: raise ArithmeticError("ideal (%r, %r) is not principal, gcd is not defined" % (self, other) ) diff --git a/src/sage/rings/number_field/order.py b/src/sage/rings/number_field/order.py index 22f838a9781..4accc937f8e 100644 --- a/src/sage/rings/number_field/order.py +++ b/src/sage/rings/number_field/order.py @@ -491,6 +491,14 @@ def ideal(self, *args, **kwds): """ if not self.is_maximal(): raise NotImplementedError("ideals of non-maximal orders not yet supported.") + from sage.misc.superseded import deprecation + deprecation(34806, 'In the future, constructing an ideal of the ring of ' + 'integers of a number field will use an implementation ' + 'compatible with ideals of other (non-maximal) orders, ' + 'rather than returning an integral fractional ideal of ' + 'its containing number field. Use .fractional_ideal(), ' + 'together with an .is_integral() check if desired, to ' + 'avoid your code breaking with future changes to Sage.') I = self.number_field().ideal(*args, **kwds) if not I.is_integral(): raise ValueError("ideal must be integral; use fractional_ideal to create a non-integral ideal.")