62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
import json
|
|
from pathlib import Path
|
|
|
|
from scripts.build_probability_shadow_report import main
|
|
|
|
|
|
def test_shadow_report_builds_summary(monkeypatch, tmp_path: Path):
|
|
history_file = tmp_path / "daily_records.json"
|
|
output_file = tmp_path / "shadow_report.json"
|
|
history_file.write_text(
|
|
json.dumps(
|
|
{
|
|
"ankara": {
|
|
"2026-03-18": {
|
|
"actual_high": 10.0,
|
|
"mu": 9.6,
|
|
"prob_snapshot": [
|
|
{"v": 10, "p": 0.48},
|
|
{"v": 9, "p": 0.41},
|
|
],
|
|
"shadow_prob_snapshot": [
|
|
{"v": 10, "p": 0.55},
|
|
{"v": 9, "p": 0.28},
|
|
],
|
|
"probability_calibration": {
|
|
"mode": "emos_shadow",
|
|
"engine": "legacy",
|
|
"version": "emos-test",
|
|
"raw_mu": 9.6,
|
|
"calibrated_mu": 9.9,
|
|
},
|
|
}
|
|
}
|
|
},
|
|
ensure_ascii=False,
|
|
indent=2,
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
|
|
monkeypatch.setattr(
|
|
"sys.argv",
|
|
[
|
|
"build_probability_shadow_report.py",
|
|
"--history-file",
|
|
str(history_file),
|
|
"--output",
|
|
str(output_file),
|
|
],
|
|
)
|
|
|
|
main()
|
|
|
|
payload = json.loads(output_file.read_text(encoding="utf-8"))
|
|
assert payload["summary"]["samples"] == 1
|
|
assert payload["summary"]["legacy_mean_mae"] == 0.4
|
|
assert payload["summary"]["shadow_mean_mae"] == 0.1
|
|
assert payload["summary"]["delta_mae"] == -0.3
|
|
assert payload["summary"]["legacy_bucket_hit_rate"] == 1.0
|
|
assert payload["summary"]["shadow_bucket_hit_rate"] == 1.0
|
|
assert payload["recent_observations"][0]["calibration_version"] == "emos-test"
|