2026_MLB_Model / tests /test_shared_baseline.py
Syntrex's picture
Stabilize props baseline and starter resolution
bb05a74
raw
history blame
3.14 kB
from __future__ import annotations
import os
import sys
import unittest
import pandas as pd
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
from data.shared_baseline import _blend_entity_frames, _normalize_name
class TestSharedBaseline(unittest.TestCase):
def test_normalize_name_matches_first_last_and_last_first(self) -> None:
self.assertEqual(_normalize_name("Eduardo Rodriguez"), _normalize_name("Rodriguez, Eduardo"))
def test_blend_entity_frames_prefers_prior_when_current_sample_is_small(self) -> None:
prior_df = pd.DataFrame(
[
{"player_name": "Slugger Sam", "game_date": "2025-09-01", "source_season": 2025, "event_key": "p1"},
{"player_name": "Slugger Sam", "game_date": "2025-08-01", "source_season": 2025, "event_key": "p2"},
{"player_name": "Slugger Sam", "game_date": "2024-09-01", "source_season": 2024, "event_key": "p3"},
{"player_name": "Slugger Sam", "game_date": "2024-08-01", "source_season": 2024, "event_key": "p4"},
{"player_name": "Slugger Sam", "game_date": "2023-09-01", "source_season": 2023, "event_key": "p5"},
]
)
season_df = pd.DataFrame(
[
{"player_name": "Slugger Sam", "game_date": "2026-03-20", "source_season": 2026, "event_key": "c1"},
]
)
prior_df["game_date"] = pd.to_datetime(prior_df["game_date"])
season_df["game_date"] = pd.to_datetime(season_df["game_date"])
blended_df, meta_df = _blend_entity_frames(
prior_df=prior_df,
season_df=season_df,
blend_k=260.0,
role_label="batter",
)
self.assertFalse(blended_df.empty)
self.assertEqual(len(meta_df), 1)
meta = meta_df.iloc[0]
self.assertEqual(meta["baseline_mode"], "blended")
self.assertGreater(float(meta["prior_weight"]), float(meta["season_2026_weight"]))
self.assertEqual(meta["baseline_driver"], "prior_led")
self.assertTrue(bool(meta["rolling_overlay_active"]))
def test_blend_entity_frames_uses_current_only_when_no_prior_exists(self) -> None:
season_df = pd.DataFrame(
[
{"player_name": "Ace Pitcher", "game_date": "2026-03-20", "source_season": 2026, "event_key": "c1"},
{"player_name": "Ace Pitcher", "game_date": "2026-03-18", "source_season": 2026, "event_key": "c2"},
]
)
season_df["game_date"] = pd.to_datetime(season_df["game_date"])
blended_df, meta_df = _blend_entity_frames(
prior_df=pd.DataFrame(columns=season_df.columns),
season_df=season_df,
blend_k=320.0,
role_label="pitcher",
)
self.assertEqual(len(blended_df), 2)
meta = meta_df.iloc[0]
self.assertEqual(meta["baseline_mode"], "current_only")
self.assertAlmostEqual(float(meta["season_2026_weight"]), 1.0, places=6)
self.assertEqual(meta["baseline_driver"], "current_season_led")
if __name__ == "__main__":
unittest.main()