From bc1859ca9be89a9e490b86a77bce9ad43fb75a9d Mon Sep 17 00:00:00 2001 From: William Meehan Date: Wed, 11 Feb 2026 15:58:24 -0500 Subject: [PATCH] [3.13] gh-84424: Use numeric_changed for UCD.numeric (GH-19457) This was causing ucd_3_2_0.numeric() to pick up only decimal changes between Unicode 3.2.0 and the current version. (cherry picked from commit 3e0322ff16f47caa3e273d453f007d3918b8ac80) Co-authored-by: William Meehan --- Lib/test/test_unicodedata.py | 8 ++++++-- .../next/Library/2020-04-10-14-29-53.bpo-40243.85HRib.rst | 1 + Modules/unicodedata.c | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2020-04-10-14-29-53.bpo-40243.85HRib.rst diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py index a0cff2bc65cc39..725a538e15dd95 100644 --- a/Lib/test/test_unicodedata.py +++ b/Lib/test/test_unicodedata.py @@ -170,10 +170,14 @@ def test_numeric(self): # New in 4.1.0 self.assertEqual(self.db.numeric('\U0001012A', None), None if self.old else 9000) + # Changed in 4.1.0 + self.assertEqual(self.db.numeric('\u5793', None), 1e20 if self.old else None) # New in 5.0.0 self.assertEqual(self.db.numeric('\u07c0', None), None if self.old else 0.0) # New in 5.1.0 self.assertEqual(self.db.numeric('\ua627', None), None if self.old else 7.0) + # Changed in 5.2.0 + self.assertEqual(self.db.numeric('\u09f6'), 3.0 if self.old else 3/16) # New in 6.0.0 self.assertEqual(self.db.numeric('\u0b72', None), None if self.old else 0.25) # New in 12.0.0 @@ -569,9 +573,9 @@ def test_east_asian_width_unassigned(self): class Unicode_3_2_0_FunctionsTest(UnicodeFunctionsTest): db = unicodedata.ucd_3_2_0 old = True - expectedchecksum = ('76b126d719d52ba11788a627d058163106da7d56' + expectedchecksum = ('4154d8d1232837e255edf3cdcbb5ab184d71f4a4' if quicktest else - '871389bdd96a709929496da7f9e59718daf61adb') + 'b678d38ffbf1f1de092b2af1ed155602909fcd8d') class UnicodeMiscTest(unittest.TestCase): diff --git a/Misc/NEWS.d/next/Library/2020-04-10-14-29-53.bpo-40243.85HRib.rst b/Misc/NEWS.d/next/Library/2020-04-10-14-29-53.bpo-40243.85HRib.rst new file mode 100644 index 00000000000000..1f48525cdbecd0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-04-10-14-29-53.bpo-40243.85HRib.rst @@ -0,0 +1 @@ +Fix :meth:`!unicodedata.ucd_3_2_0.numeric` for non-decimal values. diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index 333ffe68a454e4..06568581afc6a6 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -228,9 +228,9 @@ unicodedata_UCD_numeric_impl(PyObject *self, int chr, have_old = 1; rc = -1.0; } - else if (old->decimal_changed != 0xFF) { + else if (old->numeric_changed != 0.0) { have_old = 1; - rc = old->decimal_changed; + rc = old->numeric_changed; } }