From 3cd74fc18676f8f9bc3850b0191241a9b3bcedfd Mon Sep 17 00:00:00 2001 From: kolo Date: Thu, 15 Jan 2026 03:02:41 +0300 Subject: [PATCH] benchs --- metrics/__main__.py | 29 +++++++++++++++++++++-------- metrics/utils.py | 8 ++++---- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/metrics/__main__.py b/metrics/__main__.py index 477965a..6e7f0c4 100644 --- a/metrics/__main__.py +++ b/metrics/__main__.py @@ -1,7 +1,10 @@ from concurrent.futures import ProcessPoolExecutor import os -from rich import Console +from rich.console import Console +from rich.table import Table +from rich.panel import Panel +from rich.text import Text from metrics.utils import run_benchmark, BenchmarkResult from .registry import Benchmarks, Benchmark @@ -21,15 +24,25 @@ def main(): type_paired_benchmarks.setdefault(result.type_, []).append(result) for type_, benchmarks in type_paired_benchmarks.items(): - console.print('\n' + ('='*(len(type_)+14))) - console.print(f' TYPE: {type_.upper()}') - console.print('='*(len(type_)+14) + '\n') + header_text = Text(f"TYPE: {type_.upper()}", style="bold magenta") + console.print(Panel(header_text, expand=False, border_style="magenta")) + + table = Table(show_header=True, header_style="bold cyan", border_style="blue", show_lines=True) + table.add_column("Name", style="green") + table.add_column("Description", style="dim") + table.add_column("Iterations", justify="right") + table.add_column("Avg Time (ms)", justify="right", style="bold yellow") for benchmark in benchmarks: - console.print(f'Name: {benchmark.name}\n' - f'Description: {benchmark.description}\n' - f'Iterations: {benchmark.iterations}\n' - f'Average time per iteration: {benchmark.avg_time} ms\n') + table.add_row( + benchmark.name, + benchmark.description, + str(benchmark.iterations), + str(benchmark.avg_time) + ) + + console.print(table) + console.print() if __name__ == "__main__": diff --git a/metrics/utils.py b/metrics/utils.py index 315431f..2153323 100644 --- a/metrics/utils.py +++ b/metrics/utils.py @@ -16,15 +16,15 @@ from metrics.registry import Benchmark def get_time_of_pre_cycle_setup(app: App) -> float: - start = time.monotonic() + start = time.perf_counter() with redirect_stdout(io.StringIO()): app._pre_cycle_setup() # pyright: ignore[reportPrivateUsage] - end = time.monotonic() - return end - start + end = time.perf_counter() + return (end - start) * 1000 # as milliseconds def attempts_to_average(bench_attempts: list[float], iterations: int) -> Decimal: - return Decimal(sum(bench_attempts) / iterations).quantize(Decimal("0.00001"), rounding=ROUND_HALF_UP) + return Decimal(sum(bench_attempts) / iterations).quantize(Decimal("0.0001"), rounding=ROUND_HALF_UP) @dataclass(frozen=True)