AILottoEngine / predictor_common.py
relvistcb's picture
Upload 7 files
3fffed1 verified
Raw
History Blame Contribute Delete
2.98 kB
#!/usr/bin/env python3
from __future__ import annotations
import json, random
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, Optional
import numpy as np
def set_reproducible_seeds(seed: int = 42) -> None:
random.seed(seed)
np.random.seed(seed)
def configure_engine_flags(engine_mod, *, deep_low=True, tight_relax=True, mid_carry=True, wildcard=True):
flags = {
"deep_low_patch": bool(deep_low),
"tight_relax_patch": bool(tight_relax),
"mid_carry_patch": bool(mid_carry),
"wildcard_strike": bool(wildcard),
}
if hasattr(engine_mod, "PATCH_UI_FLAGS") and isinstance(getattr(engine_mod, "PATCH_UI_FLAGS"), dict):
engine_mod.PATCH_UI_FLAGS.update(flags)
def summarize_result(game_key: str, res: Dict[str, Any]) -> str:
lines = [f"GAME: {game_key}", f"GENERATED: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", ""]
nums = res.get("numbers") or []
star = res.get("star", None)
if nums:
lines.append(f"PRIMARY: {'-'.join(map(str, nums))}" + (f" | ⭐ {star}" if star is not None else ""))
lines.append("")
god_sets = res.get("god_sets") or res.get("godmode_sets") or res.get("god_mode_sets") or []
if god_sets:
lines.append("GOD MODE SETS:")
for s in god_sets:
sn = s.get("numbers") or []
ss = s.get("star", None)
if sn:
lines.append(f"- {s.get('style','set')}: {'-'.join(map(str, sn))}" + (f" | ⭐ {ss}" if ss is not None else ""))
lines.append("")
strike = res.get("strike_tickets") or {}
if strike:
lines.append("STRIKE TICKETS:")
for k, v in strike.items():
sn = (v or {}).get("numbers") or []
ss = (v or {}).get("star", None)
if sn:
lines.append(f"- {k}: {'-'.join(map(str, sn))}" + (f" | ⭐ {ss}" if ss is not None else ""))
lines.append("")
wc = res.get("wildcard")
if wc:
sn = (wc or {}).get("numbers") or []
ss = (wc or {}).get("star", None)
if sn:
lines.append(f"WILDCARD PROFILE: {'-'.join(map(str, sn))}" + (f" | ⭐ {ss}" if ss is not None else ""))
return "\n".join(lines)
def run_prediction(engine_mod, csv_filename: str, game_key: str, *, seed: int,
deep_low=True, tight_relax=True, mid_carry=True, wildcard=True,
out_dir: Optional[str] = None) -> Dict[str, Any]:
set_reproducible_seeds(seed)
configure_engine_flags(engine_mod, deep_low=deep_low, tight_relax=tight_relax, mid_carry=mid_carry, wildcard=wildcard)
res = engine_mod.predict_for_game_v3(Path(csv_filename), game_key, run_backtest=False)
outp = Path(out_dir or ".")
outp.mkdir(parents=True, exist_ok=True)
ts = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
base = f"{game_key}_godmode_{ts}"
(outp / f"{base}.txt").write_text(summarize_result(game_key, res), encoding="utf-8")
return res