|
1 | 1 | # License: BSD 3-Clause |
2 | 2 | from __future__ import annotations |
3 | 3 |
|
4 | | -from typing import Any |
| 4 | +from typing import Any, Sequence |
5 | 5 |
|
6 | 6 | import openml.config |
7 | 7 | import openml.flows |
| 8 | +from openml.utils import ReprMixin |
8 | 9 |
|
9 | 10 |
|
10 | | -class OpenMLSetup: |
| 11 | +class OpenMLSetup(ReprMixin): |
11 | 12 | """Setup object (a.k.a. Configuration). |
12 | 13 |
|
13 | 14 | Parameters |
@@ -43,30 +44,21 @@ def _to_dict(self) -> dict[str, Any]: |
43 | 44 | else None, |
44 | 45 | } |
45 | 46 |
|
46 | | - def __repr__(self) -> str: |
47 | | - header = "OpenML Setup" |
48 | | - header = f"{header}\n{'=' * len(header)}\n" |
49 | | - |
50 | | - fields = { |
| 47 | + def _get_repr_body_fields(self) -> Sequence[tuple[str, str | int | list[str] | None]]: |
| 48 | + """Collect all information to display in the __repr__ body.""" |
| 49 | + fields: dict[str, int | str | None] = { |
51 | 50 | "Setup ID": self.setup_id, |
52 | 51 | "Flow ID": self.flow_id, |
53 | 52 | "Flow URL": openml.flows.OpenMLFlow.url_for_id(self.flow_id), |
54 | | - "# of Parameters": ( |
55 | | - len(self.parameters) if self.parameters is not None else float("nan") |
56 | | - ), |
| 53 | + "# of Parameters": (len(self.parameters) if self.parameters is not None else "nan"), |
57 | 54 | } |
58 | 55 |
|
59 | 56 | # determines the order in which the information will be printed |
60 | 57 | order = ["Setup ID", "Flow ID", "Flow URL", "# of Parameters"] |
61 | | - _fields = [(key, fields[key]) for key in order if key in fields] |
62 | | - |
63 | | - longest_field_name_length = max(len(name) for name, _ in _fields) |
64 | | - field_line_format = f"{{:.<{longest_field_name_length}}}: {{}}" |
65 | | - body = "\n".join(field_line_format.format(name, value) for name, value in _fields) |
66 | | - return header + body |
| 58 | + return [(key, fields[key]) for key in order if key in fields] |
67 | 59 |
|
68 | 60 |
|
69 | | -class OpenMLParameter: |
| 61 | +class OpenMLParameter(ReprMixin): |
70 | 62 | """Parameter object (used in setup). |
71 | 63 |
|
72 | 64 | Parameters |
@@ -123,11 +115,9 @@ def _to_dict(self) -> dict[str, Any]: |
123 | 115 | "value": self.value, |
124 | 116 | } |
125 | 117 |
|
126 | | - def __repr__(self) -> str: |
127 | | - header = "OpenML Parameter" |
128 | | - header = f"{header}\n{'=' * len(header)}\n" |
129 | | - |
130 | | - fields = { |
| 118 | + def _get_repr_body_fields(self) -> Sequence[tuple[str, str | int | list[str] | None]]: |
| 119 | + """Collect all information to display in the __repr__ body.""" |
| 120 | + fields: dict[str, int | str | None] = { |
131 | 121 | "ID": self.id, |
132 | 122 | "Flow ID": self.flow_id, |
133 | 123 | # "Flow Name": self.flow_name, |
@@ -156,9 +146,4 @@ def __repr__(self) -> str: |
156 | 146 | parameter_default, |
157 | 147 | parameter_value, |
158 | 148 | ] |
159 | | - _fields = [(key, fields[key]) for key in order if key in fields] |
160 | | - |
161 | | - longest_field_name_length = max(len(name) for name, _ in _fields) |
162 | | - field_line_format = f"{{:.<{longest_field_name_length}}}: {{}}" |
163 | | - body = "\n".join(field_line_format.format(name, value) for name, value in _fields) |
164 | | - return header + body |
| 149 | + return [(key, fields[key]) for key in order if key in fields] |
0 commit comments