Example Rerun Capture Window

"""Auto-generated example: Rerun Capture — embed spatial visualizations in sweep reports."""

import math
import rerun as rr
import bencher as bn


class RerunSweep(bn.ParametrizedSweep):
    """Sweep that logs 2D geometry to rerun for each parameter combination.

    Each call to ``benchmark()`` logs a box whose width varies with *theta*
    and captures the recording as a ``.rrd`` file.  The CDN-hosted rerun
    web viewer renders each snapshot inline in the report.
    """

    theta = bn.FloatSweep(default=1, bounds=[1, 4], doc="Box half-size", units="rad", samples=5)

    out_sin = bn.ResultFloat(units="v", doc="sin of theta")
    out_rerun = bn.ResultRerun(width=400, height=400)

    def benchmark(self):
        self.out_sin = math.sin(self.theta)
        rr.log("boxes", rr.Boxes2D(half_sizes=[self.theta, 1]))
        self.out_rerun = bn.capture_rerun_window()


def example_rerun_capture_window(run_cfg: bn.BenchRunCfg | None = None) -> bn.Bench:
    """Rerun Capture — embed spatial visualizations in sweep reports."""
    bench = RerunSweep().to_bench(run_cfg)
    bench.plot_sweep(
        input_vars=["theta"],
        result_vars=["out_sin", "out_rerun"],
        description="Rerun is a spatial logging library for 2D/3D visualization. "
        "Bencher integrates with rerun via ``bn.capture_rerun_window()``, which "
        "drains the current recording to a ``.rrd`` file and embeds a CDN-hosted "
        "viewer in the report.  Each sweep point gets its own interactive viewer.",
        post_description="The ``ResultRerun`` type stores ``.rrd`` file paths and "
        "renders them with the ``@rerun-io/web-viewer`` loaded from CDN.  "
        "No local viewer server or extra ports are needed.",
    )

    return bench


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