Files
wshobson--agents/plugins/plugin-eval/tests/test_stats.py
T
2026-07-13 12:36:35 +08:00

101 lines
2.9 KiB
Python

import pytest
from plugin_eval.stats import (
bootstrap_ci,
clopper_pearson_ci,
cohens_kappa,
coefficient_of_variation,
wilson_score_ci,
)
class TestWilsonScore:
def test_perfect_activation(self):
lower, upper = wilson_score_ci(successes=50, trials=50, confidence=0.95)
assert lower > 0.90
assert upper == pytest.approx(1.0, abs=0.01)
def test_half_activation(self):
lower, upper = wilson_score_ci(successes=25, trials=50, confidence=0.95)
assert lower < 0.50
assert upper > 0.50
assert lower > 0.35
assert upper < 0.65
def test_zero_trials_raises(self):
with pytest.raises(ValueError):
wilson_score_ci(successes=0, trials=0)
def test_successes_exceed_trials_raises(self):
with pytest.raises(ValueError):
wilson_score_ci(successes=10, trials=5)
class TestBootstrapCI:
def test_tight_data(self):
data = [0.80, 0.82, 0.81, 0.83, 0.79, 0.80, 0.82, 0.81]
lower, upper = bootstrap_ci(data, confidence=0.95, n_resamples=1000, seed=42)
assert lower > 0.78
assert upper < 0.84
assert lower < upper
def test_single_value(self):
lower, upper = bootstrap_ci([0.5], confidence=0.95, n_resamples=100, seed=42)
assert lower == pytest.approx(0.5)
assert upper == pytest.approx(0.5)
def test_empty_raises(self):
with pytest.raises(ValueError):
bootstrap_ci([], confidence=0.95)
class TestClopperPearson:
def test_zero_failures(self):
lower, upper = clopper_pearson_ci(failures=0, trials=50, confidence=0.95)
assert lower == 0.0
assert upper < 0.10
def test_some_failures(self):
lower, upper = clopper_pearson_ci(failures=2, trials=50, confidence=0.95)
assert lower < 0.04
assert upper > 0.04
assert upper < 0.15
def test_zero_trials_raises(self):
with pytest.raises(ValueError):
clopper_pearson_ci(failures=0, trials=0)
class TestCoefficientOfVariation:
def test_low_variation(self):
data = [0.80, 0.82, 0.81, 0.83, 0.79]
cv = coefficient_of_variation(data)
assert cv < 0.05
def test_high_variation(self):
data = [0.20, 0.90, 0.10, 0.95, 0.50]
cv = coefficient_of_variation(data)
assert cv > 0.40
def test_empty_raises(self):
with pytest.raises(ValueError):
coefficient_of_variation([])
class TestCohensKappa:
def test_perfect_agreement(self):
rater1 = [1, 2, 3, 4, 5]
rater2 = [1, 2, 3, 4, 5]
k = cohens_kappa(rater1, rater2)
assert k == pytest.approx(1.0)
def test_no_agreement(self):
rater1 = [1, 2, 3, 4, 5]
rater2 = [5, 4, 3, 2, 1]
k = cohens_kappa(rater1, rater2)
assert k < 0.0
def test_mismatched_length_raises(self):
with pytest.raises(ValueError):
cohens_kappa([1, 2], [1, 2, 3])