File size: 3,142 Bytes
7b3d14f
 
 
 
 
 
 
 
 
 
bb05a74
7b3d14f
 
 
bb05a74
 
 
7b3d14f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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()