Example Publish Runner Gh Pages

"""Auto-generated example: BenchRunner Publishing with GithubPagesCfg."""

import math
import bencher as bn

class WaveBenchmark(bn.ParametrizedSweep):
    """A simple wave benchmark used to demonstrate BenchRunner publishing."""

    theta = bn.FloatSweep(
        default=0, bounds=[0, math.pi], doc="Input angle", units="rad", samples=30
    )
    amplitude = bn.FloatSweep(default=1.0, bounds=[0.5, 2.0], doc="Wave amplitude")

    out_wave = bn.ResultFloat(units="v", doc="Wave output")

    def benchmark(self):
        self.out_wave = self.amplitude * math.sin(self.theta)


def example_publish_runner_gh_pages(run_cfg: bn.BenchRunCfg | None = None) -> bn.Bench:
    """BenchRunner Publishing with GithubPagesCfg."""
    bench = WaveBenchmark().to_bench(run_cfg)
    bench.plot_sweep(
        input_vars=["theta"],
        result_vars=["out_wave"],
        description="BenchRunner can automatically publish combined reports from "
        "multiple benchmarks to GitHub Pages. Pass a GithubPagesCfg to "
        "the publisher argument and call runner.run(publish=True). "
        "This is ideal for CI pipelines that publish nightly benchmark results.",
        post_description="To actually publish, create a BenchRunner with a "
        "GithubPagesCfg publisher and call runner.run(publish=True). "
        "Example:\n"
        "  runner = bn.BenchRunner('my_benchmarks', "
        "publisher=bn.GithubPagesCfg('user', 'repo', 'folder'))\n"
        "  runner.add(my_benchmark_fn)\n"
        "  runner.run(subsampling_divisions=3, publish=True)",
    )

    # Uncomment to publish via BenchRunner:
    # runner = bn.BenchRunner(
    #     "wave_benchmarks",
    #     publisher=bn.GithubPagesCfg("your_username", "your_reports_repo", "waves"),
    # )
    # runner.add_bench(WaveBenchmark())
    # runner.run(subsampling_divisions=3, show=True, publish=True)

    return bench


if __name__ == "__main__":
    bn.run(example_publish_runner_gh_pages, subsampling_divisions=3)