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]