|
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