from typing import Any, Dict, List, Optional
from .base import BaseBenchmark
from .classical_benchmark import ClassicalBenchmark
from .ml_benchmark import MLBenchmark
from .nn_benchmark import NNBenchmark
[docs]
class MultiCategoryBenchmark(BaseBenchmark):
"""
Run classical, ML, and NN sweep benchmarks behind one entry point.
This coordinates :class:`~lrdbenchmark.benchmarks.classical_benchmark.ClassicalBenchmark`,
:class:`~lrdbenchmark.benchmarks.ml_benchmark.MLBenchmark`, and
:class:`~lrdbenchmark.benchmarks.nn_benchmark.NNBenchmark`. For the full
diagnostic engine (runtime profiles, stratified metrics, significance tests),
use :class:`~lrdbenchmark.analysis.benchmark.ComprehensiveBenchmark`.
"""
[docs]
def __init__(self, output_dir: Optional[str] = None, seed: Optional[int] = None):
super().__init__("MultiCategoryBenchmark", output_dir, seed)
self.classical = ClassicalBenchmark(output_dir, seed=seed)
self.ml = MLBenchmark(output_dir, seed=seed)
self.nn = NNBenchmark(output_dir, seed=seed)
[docs]
def run(
self,
models: List[str] = None,
lengths: List[int] = None,
num_realizations: int = 10,
params: Dict[str, Any] = None,
run_classical: bool = True,
run_ml: bool = True,
run_nn: bool = True,
):
"""Run selected benchmark categories and aggregate row results."""
if models is None:
models = ["fbm", "fgn"]
if lengths is None:
lengths = [512, 1024]
if params is None:
params = {"H": 0.7}
all_results = []
if run_classical:
res = self.classical.run(models, lengths, num_realizations, params)
all_results.extend(res)
if run_ml:
res = self.ml.run(models, lengths, num_realizations, params)
all_results.extend(res)
if run_nn:
res = self.nn.run(models, lengths, num_realizations, params)
all_results.extend(res)
self.results = all_results
self.save_results()
return self.results