"""Repeat a small parameter scan and keep each seed and observed frequency."""

from __future__ import annotations

import json
from math import sin, sqrt
from statistics import mean, stdev

import cascaqit
from cascaqit import Circuit


def experiment() -> dict[str, object]:
    shots, repeats = 256, 4
    rows = []
    for index, theta in enumerate((0.4, 0.8, 1.2)):
        seeds = [101 + 10 * index + repeat for repeat in range(repeats)]
        frequencies = []
        for seed in seeds:
            result = Circuit(1).ry(theta, 0).measure_all().run(shots=shots, seed=seed)
            frequencies.append(result.counts.get("1", 0) / shots)
        rows.append(
            {
                "theta_rad": theta,
                "seeds": seeds,
                "frequencies": frequencies,
                "mean_frequency": mean(frequencies),
                "standard_error_across_repeats": stdev(frequencies) / sqrt(repeats),
                "ideal_probability": sin(theta / 2) ** 2,
            }
        )
    return {
        "sdk_version": cascaqit.__version__,
        "shots_per_run": shots,
        "repeats": repeats,
        "total_shots": len(rows) * shots * repeats,
        "points": rows,
    }


if __name__ == "__main__":
    print(json.dumps(experiment(), sort_keys=True))
