Skip to content

Commit 1f5284e

Browse files
committed
Make more types of test parameters JSON serializable
1 parent 7f25cec commit 1f5284e

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

reporting.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1-
from array_api_tests.test_operators_and_elementwise_functions import (UnaryParamContext, BinaryParamContext)
21
from array_api_tests.dtype_helpers import dtype_to_name
32
from array_api_tests import _array_module as xp
43

4+
from types import BuiltinFunctionType, FunctionType
5+
import dataclasses
6+
7+
from hypothesis.strategies import SearchStrategy
8+
59
from pytest import mark, fixture
610

711
def to_json_serializable(o):
812
if o in dtype_to_name:
913
return dtype_to_name[o]
10-
if isinstance(o, UnaryParamContext):
11-
return {'func_name': o.func_name}
12-
if isinstance(o, BinaryParamContext):
13-
return {
14-
'func_name': o.func_name,
15-
'left_sym': o.left_sym,
16-
'right_sym': o.right_sym,
17-
'right_is_scalar': o.right_is_scalar,
18-
'res_name': o.res_name,
19-
}
14+
if isinstance(o, (BuiltinFunctionType, FunctionType)):
15+
return o.__name__
16+
if dataclasses.is_dataclass(o):
17+
return to_json_serializable(dataclasses.asdict(o))
18+
if isinstance(o, SearchStrategy):
19+
return repr(o)
2020
if isinstance(o, dict):
2121
return {to_json_serializable(k): to_json_serializable(v) for k, v in o.items()}
2222
if isinstance(o, tuple):
23+
if hasattr(o, '_asdict'): # namedtuple
24+
return to_json_serializable(o._asdict())
2325
return tuple(to_json_serializable(i) for i in o)
2426
if isinstance(o, list):
2527
return [to_json_serializable(i) for i in o]
@@ -55,4 +57,5 @@ def add_api_name_to_metadata(request, json_metadata):
5557
json_metadata['array_api_function_name'] = array_api_function_name
5658

5759
if hasattr(request.node, 'callspec'):
58-
json_metadata['params'] = to_json_serializable(request.node.callspec.params)
60+
params = request.node.callspec.params
61+
json_metadata['params'] = to_json_serializable(params)

0 commit comments

Comments
 (0)