Spaces:
Running
Running
| # SPDX-License-Identifier: Apache-2.0 | |
| """Tests for a11oy.formulas.welford (Welford 1962). thesis_v22.pdf §2.""" | |
| import statistics | |
| from a11oy.formulas import welford | |
| def test_mean_variance_matches_numpy_style(): | |
| data = [10.0, 12.0, 23.0, 23.0, 16.0, 23.0, 21.0, 16.0] | |
| w = welford.Welford() | |
| for x in data: | |
| w.update(x) | |
| assert abs(w.mean - statistics.mean(data)) < 1e-9 | |
| assert abs(w.variance - statistics.variance(data)) < 1e-9 | |
| def test_zero_variance_before_two_samples(): | |
| w = welford.Welford() | |
| w.update(5.0) | |
| assert w.variance == 0.0 | |
| assert w.zscore(99.0) == 0.0 | |
| def test_anomaly_flag(): | |
| w = welford.Welford(z_threshold=3.0) | |
| for _ in range(50): | |
| w.update(100.0) | |
| w.update(100.5) | |
| assert w.is_anomaly(1000.0) is True | |
| def test_observe_schema(): | |
| w = welford.Welford() | |
| out = w.observe(1.0) | |
| assert out["citation"] == "thesis_v22.pdf §2" | |
| assert "welford_mean_exact" in out["lean_theorem"] | |
| assert out["count"] == 1 | |