Source code for src.canns.utils.benchmark
import functools
import time
[docs]
def benchmark(runs=10):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
total_time = 0
fastest_time = float("inf")
slowest_time = 0
all_times = []
print(f"--- Start Benchmark: '{func.__name__}' (Runs {runs} times) ---")
result = func(*args, **kwargs)
for _ in range(runs):
start_time = time.perf_counter()
func(*args, **kwargs)
end_time = time.perf_counter()
run_time = end_time - start_time
all_times.append(run_time)
total_time += run_time
if run_time < fastest_time:
fastest_time = run_time
if run_time > slowest_time:
slowest_time = run_time
average_time = total_time / runs
print(f"--- Benchmark Results: '{func.__name__}' ---")
print(f"Total Run times: {runs}")
print(f"Total Times runs: {total_time:.6f} s")
print(f"Average Time: {average_time:.6f} s")
print(f"Fastest: {fastest_time:.6f} s")
print(f"Slowest: {slowest_time:.6f} s")
print("-" * 40)
return result
return wrapper
return decorator