11# License: BSD 3-Clause
22from __future__ import annotations
33
4+ from collections .abc import Sequence
45from dataclasses import asdict , dataclass
56from typing import Any
67
7- import openml .config
88import openml .flows
9+ from openml .base import OpenMLBase
910
1011
11- @dataclass
12- class OpenMLSetup :
12+ class OpenMLSetup (OpenMLBase ):
1313 """Setup object (a.k.a. Configuration).
1414
1515 Parameters
@@ -22,33 +22,32 @@ class OpenMLSetup:
2222 The setting of the parameters
2323 """
2424
25- setup_id : int
26- flow_id : int
27- parameters : dict [int , Any ] | None
28-
29- def __post_init__ (self ) -> None :
30- if not isinstance (self .setup_id , int ):
25+ def __init__ (
26+ self ,
27+ setup_id : int ,
28+ flow_id : int ,
29+ parameters : dict [int , Any ] | None ,
30+ ) -> None :
31+ if not isinstance (setup_id , int ):
3132 raise ValueError ("setup id should be int" )
3233
33- if not isinstance (self . flow_id , int ):
34+ if not isinstance (flow_id , int ):
3435 raise ValueError ("flow id should be int" )
3536
36- if self . parameters is not None and not isinstance (self . parameters , dict ):
37+ if parameters is not None and not isinstance (parameters , dict ):
3738 raise ValueError ("parameters should be dict" )
3839
39- def _to_dict (self ) -> dict [str , Any ]:
40- return {
41- "setup_id" : self .setup_id ,
42- "flow_id" : self .flow_id ,
43- "parameters" : {p .id : p ._to_dict () for p in self .parameters .values ()}
44- if self .parameters is not None
45- else None ,
46- }
40+ self .setup_id = setup_id
41+ self .flow_id = flow_id
42+ self .parameters = parameters
4743
48- def __repr__ (self ) -> str :
49- header = "OpenML Setup"
50- header = f"{ header } \n { '=' * len (header )} \n "
44+ @property
45+ def id (self ) -> int | None :
46+ """The ID of the setup."""
47+ return self .setup_id
5148
49+ def _get_repr_body_fields (self ) -> Sequence [tuple [str , str | int | list [str ] | None ]]:
50+ """Collect all information to display in the __repr__ body."""
5251 fields = {
5352 "Setup ID" : self .setup_id ,
5453 "Flow ID" : self .flow_id ,
@@ -57,15 +56,21 @@ def __repr__(self) -> str:
5756 len (self .parameters ) if self .parameters is not None else float ("nan" )
5857 ),
5958 }
60-
61- # determines the order in which the information will be printed
6259 order = ["Setup ID" , "Flow ID" , "Flow URL" , "# of Parameters" ]
63- _fields = [(key , fields [key ]) for key in order if key in fields ]
60+ return [(key , fields [key ]) for key in order if key in fields ]
6461
65- longest_field_name_length = max (len (name ) for name , _ in _fields )
66- field_line_format = f"{{:.<{ longest_field_name_length } }}: {{}}"
67- body = "\n " .join (field_line_format .format (name , value ) for name , value in _fields )
68- return header + body
62+ def _to_dict (self ) -> dict [str , Any ]:
63+ return {
64+ "setup_id" : self .setup_id ,
65+ "flow_id" : self .flow_id ,
66+ "parameters" : {p .id : p ._to_dict () for p in self .parameters .values ()}
67+ if self .parameters is not None
68+ else None ,
69+ }
70+
71+ def _parse_publish_response (self , xml_response : dict [str , str ]) -> None :
72+ msg = "Setups cannot be published directly."
73+ raise NotImplementedError (msg )
6974
7075
7176@dataclass
0 commit comments