You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.9 KiB
Python
44 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
import sys
|
|
import importlib.util
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
|
|
|
|
_SCRIPT_PATH = Path(__file__).resolve().parents[2] / "scripts" / "enrich_earnings_history_features.py"
|
|
_SPEC = importlib.util.spec_from_file_location("enrich_earnings_history_features", _SCRIPT_PATH)
|
|
assert _SPEC and _SPEC.loader
|
|
_MODULE = importlib.util.module_from_spec(_SPEC)
|
|
_SPEC.loader.exec_module(_MODULE)
|
|
compute_history_features = _MODULE.compute_history_features
|
|
|
|
|
|
def test_compute_history_features_builds_prior_vector_and_summary() -> None:
|
|
quarters = [
|
|
{"reported_date": "2026-01-29", "surprise_percentage": 6.25},
|
|
{"reported_date": "2025-10-30", "surprise_percentage": 4.52},
|
|
{"reported_date": "2025-07-31", "surprise_percentage": 9.48},
|
|
{"reported_date": "2025-05-01", "surprise_percentage": 7.0},
|
|
{"reported_date": "2025-01-30", "surprise_percentage": -2.0},
|
|
{"reported_date": "2024-10-31", "surprise_percentage": 3.0},
|
|
]
|
|
features = compute_history_features("AAPL", "2026-01-29", quarters)
|
|
assert features["sue_lag_1_pct"] == 4.52
|
|
assert features["sue_lag_2_pct"] == 9.48
|
|
assert features["sue_lag_3_pct"] == 7.0
|
|
assert features["sue_lag_4_pct"] == -2.0
|
|
assert features["sue_hist_latest_pct"] == 4.52
|
|
assert features["sue_hist_mean_4q"] == (4.52 + 9.48 + 7.0 - 2.0) / 4
|
|
assert features["sue_hist_pos_rate_4q"] == 0.75
|
|
assert features["sue_hist_streak_pos"] == 3.0
|
|
|
|
|
|
def test_compute_history_features_returns_empty_when_event_not_matched() -> None:
|
|
quarters = [
|
|
{"reported_date": "2026-01-29", "surprise_percentage": 6.25},
|
|
{"reported_date": "2025-10-30", "surprise_percentage": 4.52},
|
|
]
|
|
features = compute_history_features("AAPL", "2026-02-20", quarters)
|
|
assert all(value is None for value in features.values())
|