|
1 |
| -from array_api_tests.test_operators_and_elementwise_functions import (UnaryParamContext, BinaryParamContext) |
2 | 1 | from array_api_tests.dtype_helpers import dtype_to_name
|
3 | 2 | from array_api_tests import _array_module as xp
|
4 | 3 |
|
| 4 | +from types import BuiltinFunctionType, FunctionType |
| 5 | +import dataclasses |
| 6 | + |
| 7 | +from hypothesis.strategies import SearchStrategy |
| 8 | + |
5 | 9 | from pytest import mark, fixture
|
6 | 10 |
|
7 | 11 | def to_json_serializable(o):
|
8 | 12 | if o in dtype_to_name:
|
9 | 13 | 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) |
20 | 20 | if isinstance(o, dict):
|
21 | 21 | return {to_json_serializable(k): to_json_serializable(v) for k, v in o.items()}
|
22 | 22 | if isinstance(o, tuple):
|
| 23 | + if hasattr(o, '_asdict'): # namedtuple |
| 24 | + return to_json_serializable(o._asdict()) |
23 | 25 | return tuple(to_json_serializable(i) for i in o)
|
24 | 26 | if isinstance(o, list):
|
25 | 27 | return [to_json_serializable(i) for i in o]
|
@@ -55,4 +57,5 @@ def add_api_name_to_metadata(request, json_metadata):
|
55 | 57 | json_metadata['array_api_function_name'] = array_api_function_name
|
56 | 58 |
|
57 | 59 | 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