summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend@python.org>2023-07-04 22:15:10 (GMT)
committerGitHub <noreply@github.com>2023-07-04 22:15:10 (GMT)
commit22087516bca0b339a04742765febc9c20a9d6b21 (patch)
tree2c2173ad8f71e3c65eddfec3523c83425f33b2ce /Tools
parent110b97c94ce2544dc731298e35dfb003d58af626 (diff)
downloadcpython-22087516bca0b339a04742765febc9c20a9d6b21.zip
cpython-22087516bca0b339a04742765febc9c20a9d6b21.tar.gz
cpython-22087516bca0b339a04742765febc9c20a9d6b21.tar.bz2
gh-104050: Annotate Argument Clinic parameter permutation helpers (#106431)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/clinic/clinic.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index 3d18d95..8983614 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -28,7 +28,12 @@ import sys
import textwrap
import traceback
-from collections.abc import Callable
+from collections.abc import (
+ Callable,
+ Iterable,
+ Iterator,
+ Sequence,
+)
from types import FunctionType, NoneType
from typing import (
Any,
@@ -516,7 +521,13 @@ class PythonLanguage(Language):
checksum_line = "#/*[{dsl_name} end generated code: {arguments}]*/"
-def permute_left_option_groups(l):
+ParamGroup = Iterable["Parameter"]
+ParamTuple = tuple["Parameter", ...]
+
+
+def permute_left_option_groups(
+ l: Sequence[ParamGroup]
+) -> Iterator[ParamTuple]:
"""
Given [(1,), (2,), (3,)], should yield:
()
@@ -525,13 +536,15 @@ def permute_left_option_groups(l):
(1, 2, 3)
"""
yield tuple()
- accumulator = []
+ accumulator: list[Parameter] = []
for group in reversed(l):
accumulator = list(group) + accumulator
yield tuple(accumulator)
-def permute_right_option_groups(l):
+def permute_right_option_groups(
+ l: Sequence[ParamGroup]
+) -> Iterator[ParamTuple]:
"""
Given [(1,), (2,), (3,)], should yield:
()
@@ -540,13 +553,17 @@ def permute_right_option_groups(l):
(1, 2, 3)
"""
yield tuple()
- accumulator = []
+ accumulator: list[Parameter] = []
for group in l:
accumulator.extend(group)
yield tuple(accumulator)
-def permute_optional_groups(left, required, right):
+def permute_optional_groups(
+ left: Sequence[ParamGroup],
+ required: ParamGroup,
+ right: Sequence[ParamGroup]
+) -> tuple[ParamTuple, ...]:
"""
Generator function that computes the set of acceptable
argument lists for the provided iterables of
@@ -561,7 +578,7 @@ def permute_optional_groups(left, required, right):
if left:
raise ValueError("required is empty but left is not")
- accumulator = []
+ accumulator: list[ParamTuple] = []
counts = set()
for r in permute_right_option_groups(right):
for l in permute_left_option_groups(left):