@@ -18,7 +18,6 @@ def squeeze(x, /, axis):
18
18
...
19
19
20
20
"""
21
- from copy import copy
22
21
from inspect import Parameter , Signature , signature
23
22
from itertools import chain
24
23
from types import FunctionType
@@ -47,11 +46,11 @@ def squeeze(x, /, axis):
47
46
ALL_KINDS = get_args (ParameterKind )
48
47
VAR_KINDS = (Parameter .VAR_POSITIONAL , Parameter .VAR_KEYWORD )
49
48
kind_to_str : Dict [ParameterKind , str ] = {
50
- Parameter .POSITIONAL_OR_KEYWORD : "normal argument" ,
49
+ Parameter .POSITIONAL_OR_KEYWORD : "pos or kw argument" ,
51
50
Parameter .POSITIONAL_ONLY : "pos-only argument" ,
52
51
Parameter .KEYWORD_ONLY : "keyword-only argument" ,
53
52
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" ,
55
54
}
56
55
57
56
@@ -100,13 +99,13 @@ def get_dtypes_strategy(func_name: str) -> st.SearchStrategy[DataType]:
100
99
return xps .scalar_dtypes ()
101
100
102
101
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 ]):
104
103
f_sig = f"{ func_name } ("
105
104
f_sig += ", " .join (str (a ) for a in args )
106
- if len (kwonly ) != 0 :
105
+ if len (kwargs ) != 0 :
107
106
if len (args ) != 0 :
108
107
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 ())
110
109
f_sig += ")"
111
110
return f_sig
112
111
@@ -131,17 +130,17 @@ def _test_uninspectable_func(func_name: str, func: Callable, stub_sig: Signature
131
130
"pow" ,
132
131
"bitwise_left_shift" ,
133
132
"bitwise_right_shift" ,
134
- "broadcast_to" ,
135
- "permute_dims" ,
136
133
"sort" ,
137
134
* matrixy_funcs ,
138
135
]:
139
136
pytest .skip (skip_msg )
140
137
141
138
param_to_value : Dict [Parameter , Any ] = {}
142
139
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
+ )
145
144
elif param .default != Parameter .empty :
146
145
value = param .default
147
146
elif param .name in ["x" , "x1" ]:
@@ -153,41 +152,20 @@ def _test_uninspectable_func(func_name: str, func: Callable, stub_sig: Signature
153
152
x1 = next (v for p , v in param_to_value .items () if p .name == "x1" )
154
153
value = xps .arrays (dtype = x1 .dtype , shape = x1 .shape ).example ()
155
154
else :
156
- pytest .skip (skip_msg )
155
+ pytest .skip (
156
+ skip_msg + f" (because no default was found for argument { param .name } )"
157
+ )
157
158
param_to_value [param ] = value
158
159
159
- posonly : List [Any ] = [
160
+ args : List [Any ] = [
160
161
v for p , v in param_to_value .items () if p .kind == Parameter .POSITIONAL_ONLY
161
162
]
162
- kwonly : Dict [str , Any ] = {
163
+ kwargs : Dict [str , Any ] = {
163
164
p .name : v for p , v in param_to_value .items () if p .kind == Parameter .KEYWORD_ONLY
164
165
}
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 )
191
169
192
170
193
171
def _test_func_signature (
0 commit comments