if __name__ == "__main__":
    rng = np.random.default_rng(0)
    true_salaries = rng.normal(60000, 15000, size=1000)
    true_salaries = np.clip(true_salaries, 20000, 200000)
    true_mean = true_salaries.mean()

    print(f"True mean salary: {true_mean:.2f}")
    print(f"{'epsilon':<10}{'DP estimate':<15}{'abs error':<12}")

    for epsilon in [0.01, 0.1, 1.0, 10.0]:
        estimates = [
            private_mean(true_salaries, 20000, 200000, epsilon, rng)
            for _ in range(20)
        ]
        avg_estimate = np.mean(estimates)
        avg_error = np.mean([abs(e - true_mean) for e in estimates])
        print(f"{epsilon:<10}{avg_estimate:<15.2f}{avg_error:<12.2f}")
