Source code for dcbench.common.trial

from typing import TYPE_CHECKING, Callable, Dict, Optional, Sequence

from tqdm import tqdm

from .table import RowUnion, Table

if TYPE_CHECKING:
    from .problem import Problem
    from .result import Result
    from .solution import Solution
else:

[docs] class Problem: pass
[docs] class Solution: pass
[docs]class Trial(Table): def __init__( self, problems: Optional[Sequence[Problem]] = None, solver: Optional[Callable[[Problem], Solution]] = None, ): self.problems = problems or [] self.solver = solver self.solutions: Dict[str, Solution] = {} self.results: Dict[str, Result] = {} super().__init__([])
[docs] def evaluate(self, repeat: int = 1, quiet: bool = False) -> "Trial": assert repeat >= 1 assert self.solver is not None problems = self.problems if quiet else tqdm(self.problems, desc="Problems") for problem in problems: repetitions = ( range(repeat) if quiet or repeat == 1 else tqdm(range(repeat), desc="Repetitions") ) for _ in repetitions: solution = self.solver(problem) result = problem.evaluate(solution) self.solutions[solution.id] = solution self.results[solution.id] = result self._add_row( RowUnion(id=solution.id, elements=[problem, solution, result]) ) return self
[docs] def save(self) -> None: raise NotImplementedError()