Source code for pyhazards.benchmarks.registry
from __future__ import annotations
from typing import Callable, Dict, Type
from .base import Benchmark
_BENCHMARK_REGISTRY: Dict[str, Type[Benchmark]] = {}
[docs]
def register_benchmark(name: str, builder: Type[Benchmark]) -> None:
key = name.strip().lower()
if key in _BENCHMARK_REGISTRY:
raise ValueError("Benchmark '{name}' already registered.".format(name=name))
_BENCHMARK_REGISTRY[key] = builder
[docs]
def available_benchmarks():
return sorted(_BENCHMARK_REGISTRY.keys())
[docs]
def get_benchmark(name: str):
return _BENCHMARK_REGISTRY.get(name.strip().lower())
[docs]
def build_benchmark(name: str) -> Benchmark:
builder = get_benchmark(name)
if builder is None:
raise KeyError(
"Benchmark '{name}' is not registered. Known: {known}".format(
name=name,
known=", ".join(available_benchmarks()),
)
)
return builder()
__all__ = [
"available_benchmarks",
"build_benchmark",
"get_benchmark",
"register_benchmark",
]