Source code for smac.runhistory.dataclasses

from __future__ import annotations

from typing import Any

from dataclasses import dataclass, field

from ConfigSpace import Configuration

from smac.runhistory.enumerations import StatusType

__copyright__ = "Copyright 2022, automl.org"
__license__ = "3-clause BSD"


[docs]@dataclass(frozen=True) class InstanceSeedKey: """Key for instance and seed. Parameters ---------- instance : str | None, defaults to None seed : int | None, defaults to None """ instance: str | None = None seed: int | None = None def __eq__(self, other: Any) -> bool: if isinstance(other, InstanceSeedKey): if self.instance == other.instance and self.seed == other.seed: return True return False
[docs]@dataclass(frozen=True) class InstanceSeedBudgetKey: """Key for instance, seed and budget. Parameters ---------- instance : str | None, defaults to None seed : int | None, defaults to None budget : float | None, defaults to None """ instance: str | None = None seed: int | None = None budget: float | None = None def __lt__(self, other: InstanceSeedBudgetKey) -> bool: if self.budget is not None and other.budget is not None: return self.budget < other.budget if self.instance is not None and other.instance is not None: return self.instance < other.instance if self.seed is not None and other.seed is not None: return self.seed < other.seed raise RuntimeError("Could not compare InstanceSeedBudgetKey.") def __eq__(self, other: Any) -> bool: if isinstance(other, InstanceSeedBudgetKey): if self.instance == other.instance and self.seed == other.seed and self.budget == other.budget: return True return False
[docs] def get_instance_seed_key(self) -> InstanceSeedKey: """Returns the instance-seed key. The budget is omitted.""" return InstanceSeedKey(instance=self.instance, seed=self.seed)
[docs]@dataclass(frozen=True) class TrialKey: """Key of a trial. Parameters ---------- config_id : int instance : str | None, defaults to None seed : int | None, defaults to None budget : float | None, defaults to None """ config_id: int instance: str | None = None seed: int | None = None budget: float | None = None
[docs]@dataclass(frozen=True) class TrialValue: """Values of a trial. Parameters ---------- cost : float | list[float] time : float, defaults to 0.0 status : StatusType, defaults to StatusType.SUCCESS starttime : float, defaults to 0.0 endtime : float, defaults to 0.0 additional_info : dict[str, Any], defaults to {} """ cost: float | list[float] time: float = 0.0 status: StatusType = StatusType.SUCCESS starttime: float = 0.0 endtime: float = 0.0 additional_info: dict[str, Any] = field(default_factory=dict)
[docs]@dataclass(frozen=True) class TrialInfo: """Information about a trial. Parameters ---------- config : Configuration instance : str | None, defaults to None seed : int | None, defaults to None budget : float | None, defaults to None """ config: Configuration instance: str | None = None seed: int | None = None budget: float | None = None
[docs] def get_instance_seed_key(self) -> InstanceSeedKey: """Instantiates and returns an InstanceSeedKey object""" return InstanceSeedKey(instance=self.instance, seed=self.seed)
[docs] def get_instance_seed_budget_key(self) -> InstanceSeedBudgetKey: """Instantiates and returns an InstanceSeedBudgetKey object.""" return InstanceSeedBudgetKey(instance=self.instance, seed=self.seed, budget=self.budget)
[docs]@dataclass class TrajectoryItem: """Item of a trajectory. Parameters ---------- config_ids : list[int] Configuration ids of the current incumbents. costs : list[float | list[float]] Costs of the current incumbents. In case of multi-objective, this is a list of lists. trial : int How many trials have been evaluated so far. walltime : float How much walltime has been used so far. """ config_ids: list[int] costs: list[float | list[float]] trial: int walltime: float