"""验证切分：python 02_validation.py，修改 horizon 看边界移除量。"""
from random import Random

rows = [{"id": day * 15 + user, "day": day, "user": user}
        for day in range(28) for user in range(15)]
rng = Random(21)

def users(items):
    return {row["user"] for row in items}

shuffled = rng.sample(rows, len(rows))
print("random shared users:", len(users(shuffled[:-80]) & users(shuffled[-80:])))
group_train = [r for r in rows if r["user"] < 12]
group_test = [r for r in rows if r["user"] >= 12]
assert not users(group_train) & users(group_test)
print("group sizes:", len(group_train), len(group_test))

horizon = 7
for start in (12, 16, 20, 24):
    before = [r for r in rows if r["day"] < start]
    train = [r for r in before if r["day"] + horizon <= start]
    valid = [r for r in rows if start <= r["day"] < start + 4]
    assert max(r["day"] + horizon for r in train) <= min(r["day"] for r in valid)
    assert not {r["id"] for r in train} & {r["id"] for r in valid}
    print(f"fold starting {start}: train={len(train)}, validation={len(valid)}, purged={len(before)-len(train)}")

