05/23 Phase 15
This commit is contained in:
@@ -28,6 +28,7 @@ from core.analyzer import (
|
||||
pair_analysis, odd_even_ratio, sum_range_analysis, delta_analysis,
|
||||
)
|
||||
from core.exporter import export_frequency_excel, ensure_exports_dir
|
||||
from core.odds import game_odds
|
||||
|
||||
_LAST_N_OPTIONS = {
|
||||
"All draws": None,
|
||||
@@ -83,6 +84,34 @@ class AnalysisScreen(ttk.Frame):
|
||||
self._oe_fig, self._oe_canvas = self._make_tab(nb, "Odd/Even")
|
||||
self._sum_fig, self._sum_canvas = self._make_tab(nb, "Sum Range")
|
||||
self._delta_fig, self._delta_canvas = self._make_tab(nb, "Deltas")
|
||||
self._make_odds_tab(nb)
|
||||
|
||||
def _make_odds_tab(self, notebook):
|
||||
frame = ttk.Frame(notebook)
|
||||
notebook.add(frame, text="Odds")
|
||||
|
||||
ttk.Label(
|
||||
frame,
|
||||
text="Mathematical odds based on the game's pool size. "
|
||||
"Not all tiers pay prizes in every game.",
|
||||
foreground="#666666", padding=(8, 6, 8, 2),
|
||||
).pack(anchor="w")
|
||||
|
||||
cols = ("tier", "odds", "probability")
|
||||
tv = ttk.Treeview(frame, columns=cols, show="headings", selectmode="none")
|
||||
tv.heading("tier", text="Prize Tier")
|
||||
tv.heading("odds", text="Odds (1 in X)")
|
||||
tv.heading("probability", text="Probability")
|
||||
tv.column("tier", width=210, anchor="w")
|
||||
tv.column("odds", width=210, anchor="e")
|
||||
tv.column("probability", width=160, anchor="e")
|
||||
|
||||
vsb = ttk.Scrollbar(frame, orient="vertical", command=tv.yview)
|
||||
tv.configure(yscrollcommand=vsb.set)
|
||||
vsb.pack(side="right", fill="y")
|
||||
tv.pack(fill="both", expand=True, padx=8, pady=(0, 8))
|
||||
|
||||
self._odds_tv = tv
|
||||
|
||||
def _make_tab(self, notebook, title):
|
||||
frame = ttk.Frame(notebook)
|
||||
@@ -132,6 +161,7 @@ class AnalysisScreen(ttk.Frame):
|
||||
self._redraw_odd_even()
|
||||
self._redraw_sum_range()
|
||||
self._redraw_deltas()
|
||||
self._redraw_odds()
|
||||
|
||||
def _redraw_frequency(self):
|
||||
self._freq_fig.clear()
|
||||
@@ -196,6 +226,21 @@ class AnalysisScreen(ttk.Frame):
|
||||
_draw_deltas(ax, self._game_id)
|
||||
self._delta_canvas.draw()
|
||||
|
||||
def _redraw_odds(self):
|
||||
for row in self._odds_tv.get_children():
|
||||
self._odds_tv.delete(row)
|
||||
if self._game_id is None:
|
||||
return
|
||||
for r in game_odds(self._game_id):
|
||||
p = r["probability"]
|
||||
if p >= 0.001:
|
||||
pct = f"{p * 100:.4f}%"
|
||||
elif p >= 0.000001:
|
||||
pct = f"{p * 100:.6f}%"
|
||||
else:
|
||||
pct = f"{p:.2e}"
|
||||
self._odds_tv.insert("", "end", values=(r["tier"], r["odds_str"], pct))
|
||||
|
||||
def _export_frequency(self):
|
||||
if self._game_id is None:
|
||||
messagebox.showinfo("Export", "Select a game first.")
|
||||
|
||||
Reference in New Issue
Block a user