Inkcap commited on
Commit
fe2ae41
·
1 Parent(s): 3f8441c

Testing cheats and time/move graphs

Browse files
Files changed (3) hide show
  1. app.py +4 -3
  2. game_database.py +42 -2
  3. logger.py +15 -1
app.py CHANGED
@@ -143,18 +143,19 @@ def main():
143
  game_state, game_ongoing = make_move(white, game_state)
144
  onetime_logger.add_legal_move(game_state)
145
  if not game_ongoing:
146
- #print_game(game_state)
147
  break
148
  game_state, game_ongoing = make_move(black, game_state)
149
  onetime_logger.add_legal_move(game_state)
150
  if not game_ongoing:
151
- #print_game(game_state)
152
  break
153
  """
 
154
  finished_game = onetime_logger.return_formatted_game()
155
  onetime_db = GameDatabase()
156
  onetime_db.add_game(finished_game)
157
 
158
- onetime_db.display_tournament()
159
  if __name__ == "__main__":
160
  main()
 
143
  game_state, game_ongoing = make_move(white, game_state)
144
  onetime_logger.add_legal_move(game_state)
145
  if not game_ongoing:
146
+ print_game(game_state)
147
  break
148
  game_state, game_ongoing = make_move(black, game_state)
149
  onetime_logger.add_legal_move(game_state)
150
  if not game_ongoing:
151
+ print_game(game_state)
152
  break
153
  """
154
+ onetime_logger.add_checkmate(player_1) #here for testing purposes
155
  finished_game = onetime_logger.return_formatted_game()
156
  onetime_db = GameDatabase()
157
  onetime_db.add_game(finished_game)
158
 
159
+ onetime_db.display_game(0)
160
  if __name__ == "__main__":
161
  main()
game_database.py CHANGED
@@ -4,6 +4,8 @@ import pandas as pd
4
  import streamlit as st
5
  from typing import Dict
6
  from logger import Logger
 
 
7
 
8
  class GameDatabase:
9
  def __init__(self):
@@ -14,7 +16,39 @@ class GameDatabase:
14
  self.db.append(game)
15
 
16
  def display_game(self, game_num: int): #Displays analytics for a specific game
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  pass
 
 
18
  def display_tournament(self): #Displays analytics for the entire tournament
19
 
20
  df = pd.DataFrame(self.db)
@@ -29,8 +63,9 @@ class GameDatabase:
29
  nums = [1,2,3]
30
 
31
  fig, axs = plt.subplots(2,1)
32
- axs[0].plot(names, nums)
33
  axs[1].bar(names, nums)
 
34
  st.pyplot(fig)
35
 
36
 
@@ -38,7 +73,12 @@ class GameDatabase:
38
  if __name__ == "__main__":
39
  test_logger = Logger("ChessGPT", "ChatGPT")
40
  test_logger.add_cheat("ChessGPT")
 
41
  test_logger.add_legal_move("e4")
 
 
 
 
42
  test_logger.add_checkmate("ChessGPT")
43
  #test_logger.add_legal_move("e4 e5")
44
  formatted = test_logger.return_formatted_game()
@@ -56,4 +96,4 @@ if __name__ == "__main__":
56
  db.add_game(formatted_2)
57
  db.add_game(formatted_3)
58
 
59
- db.display_tournament()
 
4
  import streamlit as st
5
  from typing import Dict
6
  from logger import Logger
7
+ import time
8
+ import numpy as np
9
 
10
  class GameDatabase:
11
  def __init__(self):
 
16
  self.db.append(game)
17
 
18
  def display_game(self, game_num: int): #Displays analytics for a specific game
19
+ game = self.db[game_num]
20
+
21
+ fig, axs = plt.subplots(2,2)
22
+ width = 0.4
23
+
24
+ def list_sets_graph(data_list: [], axs_pos: [], title, width = 0.4):
25
+ white_data = data_list[::2]
26
+ black_data = data_list[1::2]
27
+ x = np.arange(len(white_data))
28
+
29
+ axs[axs_pos[0], axs_pos[1]].set_xticks(x, [x for x in range(len(white_data))])
30
+ axs[axs_pos[0], axs_pos[1]].bar(x - (width/2), white_data, width, color = "navajowhite")
31
+ axs[axs_pos[0], axs_pos[1]].bar(x + (width/2), black_data, width, color = "saddlebrown")
32
+ axs[axs_pos[0], axs_pos[1]].legend(["White", "Black"])
33
+
34
+
35
+
36
+ #plot time per move, with data for each model
37
+ time_title = "Seconds Per Move"
38
+ list_sets_graph(game[time_title], axs_pos=[0,0], title=time_title)
39
+
40
+ #plot cheating per model
41
+ cheat_title = "Cheat Attempts Per Move"
42
+ list_sets_graph(game["Cheat Attempts"], axs_pos=[1,0], title = cheat_title)
43
+
44
+ #stockfish analysis of each player over time
45
+
46
+
47
+ #plt.show()
48
+ st.pyplot(fig)
49
  pass
50
+
51
+
52
  def display_tournament(self): #Displays analytics for the entire tournament
53
 
54
  df = pd.DataFrame(self.db)
 
63
  nums = [1,2,3]
64
 
65
  fig, axs = plt.subplots(2,1)
66
+ axs[0].plot(win_results)
67
  axs[1].bar(names, nums)
68
+
69
  st.pyplot(fig)
70
 
71
 
 
73
  if __name__ == "__main__":
74
  test_logger = Logger("ChessGPT", "ChatGPT")
75
  test_logger.add_cheat("ChessGPT")
76
+ time.sleep(1)
77
  test_logger.add_legal_move("e4")
78
+ time.sleep(1)
79
+ test_logger.add_legal_move("e4 e6")
80
+ time.sleep(2)
81
+ test_logger.add_legal_move("e4 e6 Nf3")
82
  test_logger.add_checkmate("ChessGPT")
83
  #test_logger.add_legal_move("e4 e5")
84
  formatted = test_logger.return_formatted_game()
 
96
  db.add_game(formatted_2)
97
  db.add_game(formatted_3)
98
 
99
+ db.display_game(0)
logger.py CHANGED
@@ -1,15 +1,23 @@
1
  import requests
2
  import re
 
3
 
4
  class Logger:
5
  def __init__(self, model_1: str, model_2: str): #Model 1 should be white
6
  self.model_1 = model_1
7
  self.model_2 = model_2
8
  self.current_moves = ""
 
9
  self.cheat_attempts = [0]
 
10
  self.winner = ""
11
  self.checkmate = False
12
 
 
 
 
 
 
13
  #Interface with the Model Interface
14
  def add_legal_move(self, current_moves: str): #current_moves should be all moves so far, in UCI notation
15
  if self.checkmate:
@@ -17,6 +25,10 @@ class Logger:
17
  else:
18
  self.current_moves = current_moves
19
  self.cheat_attempts.append(0)
 
 
 
 
20
 
21
  def add_cheat(self, cheater_name: str):
22
  if self.checkmate:
@@ -69,7 +81,9 @@ class Logger:
69
  "Model 2": self.model_2,
70
  "Winner": self.winner,
71
  "UCI": self.current_moves,
72
- "Cheat Attempts": self.cheat_attempts}
 
 
73
  return game
74
 
75
  #Testing section
 
1
  import requests
2
  import re
3
+ import time
4
 
5
  class Logger:
6
  def __init__(self, model_1: str, model_2: str): #Model 1 should be white
7
  self.model_1 = model_1
8
  self.model_2 = model_2
9
  self.current_moves = ""
10
+
11
  self.cheat_attempts = [0]
12
+
13
  self.winner = ""
14
  self.checkmate = False
15
 
16
+ self.seconds_per_move = []
17
+ self.prev_end_time = time.time()
18
+
19
+ self.stockfish_results = []
20
+
21
  #Interface with the Model Interface
22
  def add_legal_move(self, current_moves: str): #current_moves should be all moves so far, in UCI notation
23
  if self.checkmate:
 
25
  else:
26
  self.current_moves = current_moves
27
  self.cheat_attempts.append(0)
28
+
29
+ current_time = time.time()
30
+ self.seconds_per_move.append(current_time - self.prev_end_time)
31
+ self.prev_end_time = current_time
32
 
33
  def add_cheat(self, cheater_name: str):
34
  if self.checkmate:
 
81
  "Model 2": self.model_2,
82
  "Winner": self.winner,
83
  "UCI": self.current_moves,
84
+ "Cheat Attempts": self.cheat_attempts,
85
+ "Seconds Per Move": self.seconds_per_move,
86
+ "Stockfish Results": self.stockfish_results}
87
  return game
88
 
89
  #Testing section