Source code for pytimings.tools
from __future__ import annotations
import atexit
import time
from functools import partial
from pathlib import Path
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from pytimings.timer import Timings
__all__ = ["busywait", "ensure_directory_exists", "generate_example_data", "output_at_exit"]
[docs]
def ensure_directory_exists(dirname: str | Path) -> None:
"""create dirname if it doesn't exist"""
Path(dirname).mkdir(parents=True, exist_ok=True)
[docs]
def output_at_exit(
output_dir: str | Path | None = None,
csv_base: str = "timings",
timings: Timings | None = None,
files: bool = True,
console: bool = True,
) -> None:
"""Register output methods to be executed at Python interpreter exit
files: set to False to not write csv files to disk
console: set to False to not display console output for timing sections
csv_base: filename stem for csv outputs
output_dir: directory for csv outputs, defaults to current working directory
"""
from pytimings.timer import global_timings
timings = timings or global_timings
if files:
output_dir = Path(output_dir) if output_dir is not None else Path.cwd()
ensure_directory_exists(output_dir)
output = partial(timings.output_files, output_dir=output_dir, csv_base=csv_base)
atexit.register(output)
if console:
atexit.register(timings.output_console)
[docs]
def busywait(secs: float) -> float:
"""busywait simulates load, so user time won't be 0 in timings"""
init_time = time.time()
while time.time() < init_time + secs:
pass
return time.time() - init_time
[docs]
def generate_example_data(output_dir: str | Path, number_of_runs: int = 10) -> list[Path]:
from pytimings.timer import Timings, scoped_timing
files = []
for i in range(1, number_of_runs):
timings = Timings()
timings.add_extra_data({"run": i})
with scoped_timing("linear", timings=timings):
busywait(number_of_runs / 10 / i)
with scoped_timing("quadratic", timings=timings):
busywait(number_of_runs / 10 / i**2)
files.append(timings.output_files(output_dir=output_dir, csv_base=f"example_speedup_{i:05}"))
return files