Chess_LLM_Space_2 / game_database.py
Inkcap's picture
Adding titles to graphs
e2db22b
import chess
import matplotlib.pyplot as plt
import pandas as pd
import streamlit as st
from typing import Dict
from logger import Logger
import time
import numpy as np
class GameDatabase:
def __init__(self):
self.db = []
pass
def add_game(self, game: Dict[str, str]):
self.db.append(game)
def display_game(self, game_num: int): #Displays analytics for a specific game
game = self.db[game_num]
fig, axs = plt.subplots(2,2)
fig.tight_layout()
width = 0.4
def list_sets_graph(data_list: [], axs_pos: [], title, width = 0.4):
white_data = data_list[::2]
black_data = data_list[1::2]
x_w = np.arange(len(white_data))
x_b = np.arange(len(black_data))
axs[axs_pos[0], axs_pos[1]].set_xticks(x_w, [x for x in range(len(white_data))])
axs[axs_pos[0], axs_pos[1]].bar(x_w - (width/2), white_data, width, color = "navajowhite")
axs[axs_pos[0], axs_pos[1]].bar(x_b + (width/2), black_data, width, color = "saddlebrown")
axs[axs_pos[0], axs_pos[1]].legend(["White", "Black"])
axs[axs_pos[0], axs_pos[1]].set_title(title)
#plot time per move, with data for each model
time_title = "Seconds Per Move"
list_sets_graph(game[time_title], axs_pos=[0,0], title=time_title)
#plot cheating per model
cheat_title = "Cheat Attempts Per Move"
list_sets_graph(game["Cheat Attempts"], axs_pos=[1,0], title = cheat_title)
#stockfish analysis of each player over time
#plt.show()
st.pyplot(fig)
def display_tournament(self): #Displays analytics for the entire tournament
df = pd.DataFrame(self.db)
#heatmap of tournament winrates
#bar chart of tournament winrates
win_results = df["Winner"].value_counts()
print(win_results.rank())
names = ["steve", "bob", "emily"]
nums = [1,2,3]
fig, axs = plt.subplots(2,1)
axs[0].plot(win_results)
axs[1].bar(names, nums)
st.pyplot(fig)
if __name__ == "__main__":
test_logger = Logger("ChessGPT", "ChatGPT")
test_logger.add_cheat()
time.sleep(1)
test_logger.add_legal_move("e4")
time.sleep(1)
test_logger.add_legal_move("e4 e6")
time.sleep(2)
test_logger.add_legal_move("e4 e6 Nf3")
test_logger.add_checkmate("ChessGPT")
#test_logger.add_legal_move("e4 e5")
formatted = test_logger.return_formatted_game()
test_logger_2 = Logger("ChessGPT", "BERT")
test_logger_2.add_checkmate("BERT")
formatted_2 = test_logger_2.return_formatted_game()
test_logger_3 = Logger("ChessGPT", "BERT")
test_logger_3.add_checkmate("ChessGPT")
formatted_3 = test_logger_3.return_formatted_game()
db = GameDatabase()
db.add_game(formatted)
db.add_game(formatted_2)
db.add_game(formatted_3)
db.display_game(0)