"""Auto-generated example: Aggregate to 1-D (True)."""

import bencher as bn


class GradientScale(bn.ParametrizedSweep):
    """1D gradient with categorical scale control."""

    x = bn.FloatSweep(default=0, bounds=[0, 1], doc="X position")
    scale = bn.StringSweep(["linear", "quadratic", "sqrt"], doc="Gradient scale")

    out = bn.ResultFloat(units="v", doc="Surface value")

    def benchmark(self):
        if self.scale == "linear":
            self.out = self.x
        elif self.scale == "quadratic":
            self.out = self.x**2
        else:
            self.out = self.x**0.5


def example_agg_all(run_cfg: bn.BenchRunCfg | None = None) -> bn.Bench:
    """Aggregate to 1-D (True)."""
    bench = GradientScale().to_bench(run_cfg)
    bench.plot_sweep(
        input_vars=["x", "scale"],
        result_vars=["out"],
        description="Setting aggregate=True collapses all but the first input dimension, reducing the sweep to a 1-D plot. Useful when you want a simple curve from a multi-dimensional sweep.",
        post_description="The aggregated view collapses all inputs except the first into a single mean ± std curve. The non-aggregated view below shows the full detail.",
        aggregate=True,
    )

    return bench


if __name__ == "__main__":
    bn.run(example_agg_all, level=4)
