Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
3d79e6e
Update extension.py
v-parmar Aug 16, 2023
2c4519e
Update task.py
v-parmar Aug 16, 2023
7ddbdf4
Update flow.py
v-parmar Aug 16, 2023
7d5a04f
Update functions.py
v-parmar Aug 16, 2023
58ef19d
Update functions.py
v-parmar Aug 16, 2023
63a20bb
Update trace.py
v-parmar Aug 16, 2023
0197de3
Update functions.py
v-parmar Aug 16, 2023
1385155
Update functions.py
v-parmar Aug 16, 2023
43ed152
Update functions.py
v-parmar Aug 16, 2023
6c5f9d4
Update split.py
v-parmar Aug 16, 2023
e4db820
Update task.py
v-parmar Aug 16, 2023
9948541
Update openml/flows/flow.py
v-parmar Aug 18, 2023
1f79793
Update openml/flows/flow.py
v-parmar Aug 18, 2023
bb0077c
Update openml/flows/functions.py
v-parmar Aug 18, 2023
e986733
Update openml/extensions/sklearn/extension.py
v-parmar Aug 18, 2023
426e5fb
Update openml/flows/functions.py
v-parmar Aug 18, 2023
581d47a
Update openml/runs/functions.py
v-parmar Aug 18, 2023
31d6e03
Update openml/runs/functions.py
v-parmar Aug 18, 2023
4dfe6fe
Update openml/runs/functions.py
v-parmar Aug 18, 2023
3c29b1d
Update openml/runs/trace.py
v-parmar Aug 18, 2023
bf07329
Update openml/runs/trace.py
v-parmar Aug 18, 2023
711303a
Update openml/setups/functions.py
v-parmar Aug 18, 2023
ad8aec2
Update openml/study/functions.py
v-parmar Aug 18, 2023
2150d64
Update openml/study/functions.py
v-parmar Aug 18, 2023
f9fee1e
Update openml/tasks/functions.py
v-parmar Aug 18, 2023
3776710
Update openml/tasks/split.py
v-parmar Aug 18, 2023
091335d
Update openml/tasks/split.py
v-parmar Aug 18, 2023
fb556ea
Merge branch 'openml:develop' into v-parmar-patch-2
v-parmar Aug 18, 2023
2f9b2ad
Update openml/tasks/task.py
v-parmar Aug 21, 2023
571951f
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 21, 2023
125ea1d
Update openml/tasks/task.py
v-parmar Aug 21, 2023
7fa8359
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 21, 2023
08055e7
Update openml/extensions/sklearn/extension.py
v-parmar Sep 19, 2023
0d272b6
Update openml/flows/flow.py
v-parmar Sep 19, 2023
de5fa6c
Update openml/flows/functions.py
v-parmar Sep 19, 2023
3535387
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Sep 19, 2023
4cc0abf
Update openml/runs/functions.py
v-parmar Sep 19, 2023
554215f
Update openml/runs/functions.py
v-parmar Sep 19, 2023
4e1765e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Sep 19, 2023
f976555
Update openml/setups/functions.py
v-parmar Sep 19, 2023
95bfc69
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Sep 19, 2023
c0eedfa
Update openml/study/functions.py
v-parmar Sep 19, 2023
af2eac7
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Sep 19, 2023
ae8581f
Update openml/tasks/functions.py
v-parmar Sep 19, 2023
e3c475a
Update trace.py to fix mypy error
LennartPurucker Oct 30, 2023
51798e0
Update functions.py to fix mypy error
LennartPurucker Oct 30, 2023
3ab73e0
fix copy paste error
LennartPurucker Oct 30, 2023
ab6f202
Update functions.py of setup to fix mypy error
LennartPurucker Oct 30, 2023
049230d
Update progress.rst
v-parmar Oct 31, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update trace.py to fix mypy error
  • Loading branch information
LennartPurucker authored Oct 30, 2023
commit e3c475a1c10ce68fdb5ebe86de539ed3ec74a7f2
160 changes: 82 additions & 78 deletions openml/runs/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from dataclasses import dataclass
import json
import os
from typing import List, Tuple, Optional # noqa F401
from typing import List, Tuple, Optional, Dict, Union # noqa F401

import arff
import xmltodict
Expand All @@ -19,6 +19,82 @@
]


@dataclass
class OpenMLTraceIteration:
"""
OpenML Trace Iteration: parsed output from Run Trace call
Exactly one of `setup_string` or `parameters` must be provided.

Parameters
----------
repeat : int
repeat number (in case of no repeats: 0)

fold : int
fold number (in case of no folds: 0)

iteration : int
iteration number of optimization procedure

setup_string : str, optional
json string representing the parameters
If not provided, ``parameters`` should be set.

evaluation : double
The evaluation that was awarded to this trace iteration.
Measure is defined by the task

selected : bool
Whether this was the best of all iterations, and hence
selected for making predictions. Per fold/repeat there
should be only one iteration selected

parameters : OrderedDict, optional
Dictionary specifying parameter names and their values.
If not provided, ``setup_string`` should be set.
"""

repeat: int
fold: int
iteration: int

evaluation: float
selected: bool

setup_string: Optional[str] = None
parameters: Optional[OrderedDict] = None

def __post_init__(self):
# TODO: refactor into one argument of type <str | OrderedDict>
if self.setup_string and self.parameters:
raise ValueError(
"Can only be instantiated with either `setup_string` or `parameters` argument."
)
elif not (self.setup_string or self.parameters):
raise ValueError(
"Either `setup_string` or `parameters` needs to be passed as argument."
)
if self.parameters is not None and not isinstance(self.parameters, OrderedDict):
raise TypeError(
"argument parameters is not an instance of OrderedDict, but %s"
% str(type(self.parameters))
)

def get_parameters(self):
result = {}
# parameters have prefix 'parameter_'

if self.setup_string:
for param in self.setup_string:
key = param[len(PREFIX) :]
value = self.setup_string[param]
result[key] = json.loads(value)
else:
for param, value in self.parameters.items():
result[param[len(PREFIX) :]] = value
return result


class OpenMLRunTrace(object):
"""OpenML Run Trace: parsed output from Run Trace call

Expand All @@ -33,7 +109,11 @@ class OpenMLRunTrace(object):

"""

def __init__(self, run_id: int, trace_iterations: List[List]):
def __init__(
self,
run_id: Union[int, None],
trace_iterations: Dict[Tuple[int, int, int], OpenMLTraceIteration],
):
"""Object to hold the trace content of a run.

Parameters
Expand Down Expand Up @@ -431,79 +511,3 @@ def __repr__(self):
def __iter__(self):
for val in self.trace_iterations.values():
yield val


@dataclass
class OpenMLTraceIteration:
"""
OpenML Trace Iteration: parsed output from Run Trace call
Exactly one of `setup_string` or `parameters` must be provided.

Parameters
----------
repeat : int
repeat number (in case of no repeats: 0)

fold : int
fold number (in case of no folds: 0)

iteration : int
iteration number of optimization procedure

setup_string : str, optional
json string representing the parameters
If not provided, ``parameters`` should be set.

evaluation : double
The evaluation that was awarded to this trace iteration.
Measure is defined by the task

selected : bool
Whether this was the best of all iterations, and hence
selected for making predictions. Per fold/repeat there
should be only one iteration selected

parameters : OrderedDict, optional
Dictionary specifying parameter names and their values.
If not provided, ``setup_string`` should be set.
"""

repeat: int
fold: int
iteration: int

evaluation: float
selected: bool

setup_string: Optional[str] = None
parameters: Optional[OrderedDict] = None

def __post_init__(self):
# TODO: refactor into one argument of type <str | OrderedDict>
if self.setup_string and self.parameters:
raise ValueError(
"Can only be instantiated with either `setup_string` or `parameters` argument."
)
elif not (self.setup_string or self.parameters):
raise ValueError(
"Either `setup_string` or `parameters` needs to be passed as argument."
)
if self.parameters is not None and not isinstance(self.parameters, OrderedDict):
raise TypeError(
"argument parameters is not an instance of OrderedDict, but %s"
% str(type(self.parameters))
)

def get_parameters(self):
result = {}
# parameters have prefix 'parameter_'

if self.setup_string:
for param in self.setup_string:
key = param[len(PREFIX) :]
value = self.setup_string[param]
result[key] = json.loads(value)
else:
for param, value in self.parameters.items():
result[param[len(PREFIX) :]] = value
return result