https://github.com/python/cpython/commit/c39a32983728f2398bb506c20e5c162d61805da3
commit: c39a32983728f2398bb506c20e5c162d61805da3
branch: main
author: Shamil <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2026-09-16T19:59:34-07:00
summary:

gh-156402: Modernize annotation usage in libregrtest (#156403)

files:
M Lib/test/libregrtest/main.py
M Lib/test/libregrtest/mypy.ini
M Lib/test/libregrtest/refleak.py
M Lib/test/libregrtest/results.py
M Lib/test/libregrtest/utils.py

diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index db2e9acb850f107..2e8397a8a91d324 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -470,8 +470,7 @@ def finalize_tests(self, coverage: trace.CoverageResults | 
None) -> None:
                 os.unlink(self.next_single_filename)
 
         if coverage is not None:
-            # uses a new-in-Python 3.13 keyword argument that mypy doesn't 
know about yet:
-            coverage.write_results(show_missing=True, summary=True,  # type: 
ignore[call-arg]
+            coverage.write_results(show_missing=True, summary=True,
                                    coverdir=self.coverage_dir,
                                    ignore_missing_files=True)
 
@@ -539,10 +538,7 @@ def _run_tests(self, selected: TestTuple, tests: TestList 
| None) -> int:
         if self.num_workers < 0:
             # Use all CPUs + 2 extra worker processes for tests
             # that like to sleep
-            #
-            # os.process.cpu_count() is new in Python 3.13;
-            # mypy doesn't know about it yet
-            self.num_workers = (os.process_cpu_count() or 1) + 2  # type: 
ignore[attr-defined]
+            self.num_workers = (os.process_cpu_count() or 1) + 2
 
         # For a partial run, we do not need to clutter the output.
         if (self.want_header
diff --git a/Lib/test/libregrtest/mypy.ini b/Lib/test/libregrtest/mypy.ini
index 3fa9afcb7a4a8c3..2830647635278cc 100644
--- a/Lib/test/libregrtest/mypy.ini
+++ b/Lib/test/libregrtest/mypy.ini
@@ -5,7 +5,7 @@
 [mypy]
 files = Lib/test/libregrtest
 explicit_package_bases = True
-python_version = 3.12
+python_version = 3.15
 platform = linux
 pretty = True
 
diff --git a/Lib/test/libregrtest/refleak.py b/Lib/test/libregrtest/refleak.py
index 69a9c9d6e5f1d7c..45064115463c2fe 100644
--- a/Lib/test/libregrtest/refleak.py
+++ b/Lib/test/libregrtest/refleak.py
@@ -96,9 +96,8 @@ def runtest_refleak(test_name, test_func,
 
     # `ByteString` is not included in `collections.abc.__all__`
     with warnings.catch_warnings(action='ignore', category=DeprecationWarning):
-        ByteString = collections.abc.ByteString
-    # Mypy doesn't even think `ByteString` is a class, hence the `type: ignore`
-    for obj in ByteString.__subclasses__() + [ByteString]:  # type: 
ignore[attr-defined]
+        ByteString = collections.abc.ByteString  # type: ignore[attr-defined]
+    for obj in ByteString.__subclasses__() + [ByteString]:
         abcs[obj] = _get_dump(obj)[0]
 
     warmups = hunt_refleak.warmups
@@ -151,9 +150,7 @@ def runtest_refleak(test_name, test_func,
         # Also, readjust the reference counts and alloc blocks by ignoring
         # any strings that might have been interned during test_func. These
         # strings will be deallocated at runtime shutdown
-        interned_immortal_after = getunicodeinternedsize(
-            # Use an internal-only keyword argument that mypy doesn't know yet
-            _only_immortal=True)  # type: ignore[call-arg]
+        interned_immortal_after = getunicodeinternedsize(_only_immortal=True)
         alloc_after = getallocatedblocks() - interned_immortal_after
         rc_after = gettotalrefcount()
         fd_after = fd_count()
diff --git a/Lib/test/libregrtest/results.py b/Lib/test/libregrtest/results.py
index ea5fee334215417..3475f645729182c 100644
--- a/Lib/test/libregrtest/results.py
+++ b/Lib/test/libregrtest/results.py
@@ -1,7 +1,7 @@
 import sys
 import trace
 from _colorize import get_colors  # type: ignore[import-not-found]
-from typing import TYPE_CHECKING
+lazy from xml.etree.ElementTree import Element
 
 from .runtests import RunTests
 from .result import State, TestResult, TestStats, Location
@@ -9,9 +9,6 @@
     StrPath, TestName, TestTuple, TestList, FilterDict,
     printlist, count, format_duration)
 
-if TYPE_CHECKING:
-    from xml.etree.ElementTree import Element
-
 
 # Python uses exit code 1 when an exception is not caught
 # argparse.ArgumentParser.error() uses exit code 2
@@ -41,7 +38,7 @@ def __init__(self) -> None:
         self.test_times: list[tuple[float, TestName]] = []
         self.stats = TestStats()
         # used by --junit-xml
-        self.testsuite_xml: list['Element'] = []
+        self.testsuite_xml: list[Element] = []
         # used by -T with -j
         self.covered_lines: set[Location] = set()
 
diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py
index 6de2d07bcbb3b38..83e0575619c99a0 100644
--- a/Lib/test/libregrtest/utils.py
+++ b/Lib/test/libregrtest/utils.py
@@ -652,8 +652,7 @@ def display_header(use_resources: dict[str, str | None],
 
     cpu_count: object = os.cpu_count()
     if cpu_count:
-        # The function is new in Python 3.13; mypy doesn't know about it yet:
-        process_cpu_count = os.process_cpu_count()  # type: 
ignore[attr-defined]
+        process_cpu_count = os.process_cpu_count()
         if process_cpu_count and process_cpu_count != cpu_count:
             cpu_count = f"{process_cpu_count} (process) / {cpu_count} (system)"
         print("== CPU count:", cpu_count)

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to