Fastwhisper / tests /test_stats_math.py
Mbonea's picture
Deploy Habit Journal backend S0-S10 to Hugging Face Space.
990895d
Raw
History Blame Contribute Delete
2.42 kB
"""Unit tests for pure stats math fixtures."""
from app.stats_math import by_remedy, data_thin, server_picks
def _entries() -> list[dict]:
# remedy "walk": 4 worked, 1 failed => n=5, p_helped=0.8
# remedy "nap": 2 partial, 1 failed, 2 pending => scored n=3 (below min_n=5)
rows = []
for _ in range(4):
rows.append(
{
"remedy": " Walk ",
"result": "worked",
"emotions": ["calm"],
"tags": ["rerun"],
"intensity": 5,
}
)
rows.append(
{
"remedy": "walk",
"result": "failed",
"emotions": ["shame"],
"tags": ["urge"],
"intensity": 8,
}
)
for _ in range(2):
rows.append(
{
"remedy": "nap",
"result": "partial",
"emotions": ["tired"],
"tags": ["home"],
"intensity": 2,
}
)
rows.append(
{
"remedy": "nap",
"result": "failed",
"emotions": ["tired"],
"tags": ["home"],
"intensity": 2,
}
)
rows.append(
{
"remedy": "nap",
"result": "pending",
"emotions": ["tired"],
"tags": ["home"],
"intensity": 2,
}
)
rows.append(
{
"remedy": "nap",
"result": "pending",
"emotions": ["tired"],
"tags": ["home"],
"intensity": 2,
}
)
return rows
def test_p_helped_and_rank() -> None:
rows = by_remedy(_entries(), min_n=5, shrink_k=3)
assert len(rows) == 1
walk = rows[0]
assert walk["key"] == "walk"
assert walk["n"] == 5
assert walk["p_worked"] == 0.8
assert walk["p_helped"] == 0.8
assert abs(walk["rank"] - (0.8 * 5 / 8)) < 1e-9
def test_data_thin() -> None:
assert data_thin(9) is True
assert data_thin(10) is False
def test_server_picks_tag_boost() -> None:
picks = server_picks(
_entries(),
["rerun"],
min_n=5,
shrink_k=3,
match_alpha=0.5,
)
assert len(picks) == 1
assert picks[0]["remedy_key"] == "walk"
assert picks[0]["match"] == 1.0
expected = (0.8 * 5 / 8) * (1 + 0.5 * 1.0)
assert abs(picks[0]["pick"] - expected) < 1e-9