From 7727cb354b9e6176f27dc2c36589358d98a0a253 Mon Sep 17 00:00:00 2001 From: Chenxin Zhong Date: Sat, 13 Dec 2025 14:43:49 +0800 Subject: [PATCH 1/3] Remove incorrect tests Because one use roundtieeven, one use roundawayzero --- src/sage/rings/number_field/number_field_element_quadratic.pyx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/sage/rings/number_field/number_field_element_quadratic.pyx b/src/sage/rings/number_field/number_field_element_quadratic.pyx index 57eb93a988c..0382a59eec4 100644 --- a/src/sage/rings/number_field/number_field_element_quadratic.pyx +++ b/src/sage/rings/number_field/number_field_element_quadratic.pyx @@ -2411,9 +2411,6 @@ cdef class NumberFieldElement_quadratic(NumberFieldElement_absolute): ....: assert a.round() == round(K2(a)), a ....: assert a.round() == round(K3(a)), a ....: assert a.round() == round(K5(a)), a - ....: assert round(a+b*sqrt(2.)) == round(a+b*sqrt2), (a, b) - ....: assert round(a+b*sqrt(3.)) == round(a+b*sqrt3), (a, b) - ....: assert round(a+b*sqrt(5.)) == round(a+b*sqrt5), (a, b) """ n = self.floor() test = 2 * (self - n) From 5705d8675c57aee108cd545c794fb0095c4ad4f7 Mon Sep 17 00:00:00 2001 From: Chenxin Zhong Date: Sat, 13 Dec 2025 15:39:08 +0800 Subject: [PATCH 2/3] Remove unused variable in quadratic field tests Removed unused variable 'b' from test loop. --- src/sage/rings/number_field/number_field_element_quadratic.pyx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sage/rings/number_field/number_field_element_quadratic.pyx b/src/sage/rings/number_field/number_field_element_quadratic.pyx index 0382a59eec4..45133def1ec 100644 --- a/src/sage/rings/number_field/number_field_element_quadratic.pyx +++ b/src/sage/rings/number_field/number_field_element_quadratic.pyx @@ -2407,7 +2407,6 @@ cdef class NumberFieldElement_quadratic(NumberFieldElement_absolute): sage: K5. = QuadraticField(5) sage: for _ in range(100): ....: a = QQ.random_element(1000,20) - ....: b = QQ.random_element(1000,20) ....: assert a.round() == round(K2(a)), a ....: assert a.round() == round(K3(a)), a ....: assert a.round() == round(K5(a)), a From 746b07c20a7299e36a7047f6a5eb015c54f9d2ad Mon Sep 17 00:00:00 2001 From: Chenxin Zhong Date: Sun, 14 Dec 2025 16:51:02 +0800 Subject: [PATCH 3/3] Enhance rounding tests and add canonical associate method Added tests for rounding behavior with quadratic fields and implemented a canonical associate method. --- .../number_field_element_quadratic.pyx | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/sage/rings/number_field/number_field_element_quadratic.pyx b/src/sage/rings/number_field/number_field_element_quadratic.pyx index 45133def1ec..8d12b86540d 100644 --- a/src/sage/rings/number_field/number_field_element_quadratic.pyx +++ b/src/sage/rings/number_field/number_field_element_quadratic.pyx @@ -2407,9 +2407,16 @@ cdef class NumberFieldElement_quadratic(NumberFieldElement_absolute): sage: K5. = QuadraticField(5) sage: for _ in range(100): ....: a = QQ.random_element(1000,20) + ....: b = QQ.random_element(1000,20) ....: assert a.round() == round(K2(a)), a ....: assert a.round() == round(K3(a)), a ....: assert a.round() == round(K5(a)), a + ....: #outside of rounding half integers, rounding between quadratic numbers are + ....: #floats should agree (assuming enough precision is available) + ....: if b != 0 or a + 1/2 not in ZZ: + ....: assert round(a+b*sqrt(2.)) == round(a+b*sqrt2), (a, b) + ....: assert round(a+b*sqrt(3.)) == round(a+b*sqrt3), (a, b) + ....: assert round(a+b*sqrt(5.)) == round(a+b*sqrt5), (a, b) """ n = self.floor() test = 2 * (self - n) @@ -2948,6 +2955,24 @@ cdef class OrderElement_quadratic(NumberFieldElement_quadratic): const = const - scale * alpha return const.denominator().lcm(scale.denominator()) + def canonical_associate(self): + """ + Return a canonical associate. + + Only implemented here because order elements inherit from field elements, + but the canonical associate implemented there does not apply here. + + EXAMPLES:: + + sage: x = polygen(ZZ, 'x') + sage: K = NumberField(x^2 - 27, 'a') + sage: OK = K.ring_of_integers() + sage: (OK.1).canonical_associate() + NotImplemented + """ + return NotImplemented + + cdef class Z_to_quadratic_field_element(Morphism): """ Morphism that coerces from integers to elements of a quadratic number