Skip to content

Commit 1ad9b57

Browse files
committed
Remove support for testing uninspectable normal args
1 parent 5765ec0 commit 1ad9b57

File tree

1 file changed

+17
-39
lines changed

1 file changed

+17
-39
lines changed

array_api_tests/test_signatures.py

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ def squeeze(x, /, axis):
1818
...
1919
2020
"""
21-
from copy import copy
2221
from inspect import Parameter, Signature, signature
2322
from itertools import chain
2423
from types import FunctionType
@@ -47,11 +46,11 @@ def squeeze(x, /, axis):
4746
ALL_KINDS = get_args(ParameterKind)
4847
VAR_KINDS = (Parameter.VAR_POSITIONAL, Parameter.VAR_KEYWORD)
4948
kind_to_str: Dict[ParameterKind, str] = {
50-
Parameter.POSITIONAL_OR_KEYWORD: "normal argument",
49+
Parameter.POSITIONAL_OR_KEYWORD: "pos or kw argument",
5150
Parameter.POSITIONAL_ONLY: "pos-only argument",
5251
Parameter.KEYWORD_ONLY: "keyword-only argument",
5352
Parameter.VAR_POSITIONAL: "star-args (i.e. *args) argument",
54-
Parameter.VAR_KEYWORD: "star-kwonly (i.e. **kwonly) argument",
53+
Parameter.VAR_KEYWORD: "star-kwargs (i.e. **kwargs) argument",
5554
}
5655

5756

@@ -100,13 +99,13 @@ def get_dtypes_strategy(func_name: str) -> st.SearchStrategy[DataType]:
10099
return xps.scalar_dtypes()
101100

102101

103-
def make_pretty_func(func_name: str, args: Sequence[Any], kwonly: Dict[str, Any]):
102+
def make_pretty_func(func_name: str, args: Sequence[Any], kwargs: Dict[str, Any]):
104103
f_sig = f"{func_name}("
105104
f_sig += ", ".join(str(a) for a in args)
106-
if len(kwonly) != 0:
105+
if len(kwargs) != 0:
107106
if len(args) != 0:
108107
f_sig += ", "
109-
f_sig += ", ".join(f"{k}={v}" for k, v in kwonly.items())
108+
f_sig += ", ".join(f"{k}={v}" for k, v in kwargs.items())
110109
f_sig += ")"
111110
return f_sig
112111

@@ -131,17 +130,17 @@ def _test_uninspectable_func(func_name: str, func: Callable, stub_sig: Signature
131130
"pow",
132131
"bitwise_left_shift",
133132
"bitwise_right_shift",
134-
"broadcast_to",
135-
"permute_dims",
136133
"sort",
137134
*matrixy_funcs,
138135
]:
139136
pytest.skip(skip_msg)
140137

141138
param_to_value: Dict[Parameter, Any] = {}
142139
for param in stub_sig.parameters.values():
143-
if param.kind in VAR_KINDS:
144-
pytest.skip(skip_msg)
140+
if param.kind in [Parameter.POSITIONAL_OR_KEYWORD, *VAR_KINDS]:
141+
pytest.skip(
142+
skip_msg + f" (because '{param.name}' is a {kind_to_str[param.kind]})"
143+
)
145144
elif param.default != Parameter.empty:
146145
value = param.default
147146
elif param.name in ["x", "x1"]:
@@ -153,41 +152,20 @@ def _test_uninspectable_func(func_name: str, func: Callable, stub_sig: Signature
153152
x1 = next(v for p, v in param_to_value.items() if p.name == "x1")
154153
value = xps.arrays(dtype=x1.dtype, shape=x1.shape).example()
155154
else:
156-
pytest.skip(skip_msg)
155+
pytest.skip(
156+
skip_msg + f" (because no default was found for argument {param.name})"
157+
)
157158
param_to_value[param] = value
158159

159-
posonly: List[Any] = [
160+
args: List[Any] = [
160161
v for p, v in param_to_value.items() if p.kind == Parameter.POSITIONAL_ONLY
161162
]
162-
kwonly: Dict[str, Any] = {
163+
kwargs: Dict[str, Any] = {
163164
p.name: v for p, v in param_to_value.items() if p.kind == Parameter.KEYWORD_ONLY
164165
}
165-
if (
166-
sum(p.kind == Parameter.POSITIONAL_OR_KEYWORD for p in param_to_value.keys())
167-
== 0
168-
):
169-
f_func = make_pretty_func(func_name, posonly, kwonly)
170-
print(f"trying {f_func}")
171-
func(*posonly, **kwonly)
172-
else:
173-
either_argname_value_pairs = list(
174-
(p.name, v)
175-
for p, v in param_to_value.items()
176-
if p.kind == Parameter.POSITIONAL_OR_KEYWORD
177-
)
178-
n_either_args = len(either_argname_value_pairs)
179-
for n_extra_args in reversed(range(n_either_args + 1)):
180-
extra_posargs = [v for _, v in either_argname_value_pairs[:n_extra_args]]
181-
if n_extra_args < n_either_args:
182-
extra_kwargs = dict(either_argname_value_pairs[n_extra_args:])
183-
else:
184-
extra_kwargs = {}
185-
args = copy(posonly)
186-
args += extra_posargs
187-
kwargs = {**kwonly, **extra_kwargs}
188-
f_func = make_pretty_func(func_name, args, kwargs)
189-
print(f"trying {f_func}")
190-
func(*args, **kwargs)
166+
f_func = make_pretty_func(func_name, args, kwargs)
167+
print(f"trying {f_func}")
168+
func(*args, **kwargs)
191169

192170

193171
def _test_func_signature(

0 commit comments

Comments
 (0)