Import tests: Shayan1/Prod/tests/test_debug_logging
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,116 @@
|
|||||||
|
import random
|
||||||
|
from nash.game import Game
|
||||||
|
from nash.simulation import Simulation
|
||||||
|
|
||||||
|
MATCHING_PENNIES = Game.load_from_json("games/matching_pennies.json")
|
||||||
|
|
||||||
|
|
||||||
|
def test_best_response_logging():
|
||||||
|
logs = []
|
||||||
|
|
||||||
|
def debug_logger(player_index, message):
|
||||||
|
logs.append((player_index, message))
|
||||||
|
|
||||||
|
rng = random.Random(42)
|
||||||
|
sim = Simulation(
|
||||||
|
MATCHING_PENNIES,
|
||||||
|
num_rounds=5,
|
||||||
|
player_kind="best_response",
|
||||||
|
debug_logger=debug_logger,
|
||||||
|
rng=rng,
|
||||||
|
)
|
||||||
|
sim.run()
|
||||||
|
|
||||||
|
# Ensure logs were captured
|
||||||
|
assert len(logs) > 0
|
||||||
|
|
||||||
|
# Ensure that each player logs (since num_rounds=5, rounds 1-4 should have history)
|
||||||
|
players_logged = {player_idx for player_idx, _ in logs}
|
||||||
|
assert players_logged == {0, 1}
|
||||||
|
|
||||||
|
# Verify message contents
|
||||||
|
for _, message in logs:
|
||||||
|
assert "expected payoffs:" in message
|
||||||
|
|
||||||
|
|
||||||
|
def test_softmax_logging():
|
||||||
|
logs = []
|
||||||
|
|
||||||
|
def debug_logger(player_index, message):
|
||||||
|
logs.append((player_index, message))
|
||||||
|
|
||||||
|
rng = random.Random(42)
|
||||||
|
sim = Simulation(
|
||||||
|
MATCHING_PENNIES,
|
||||||
|
num_rounds=5,
|
||||||
|
player_kind="softmax",
|
||||||
|
debug_logger=debug_logger,
|
||||||
|
rng=rng,
|
||||||
|
)
|
||||||
|
sim.run()
|
||||||
|
|
||||||
|
assert len(logs) > 0
|
||||||
|
|
||||||
|
players_logged = {player_idx for player_idx, _ in logs}
|
||||||
|
assert players_logged == {0, 1}
|
||||||
|
|
||||||
|
for _, message in logs:
|
||||||
|
assert "expected payoffs:" in message
|
||||||
|
|
||||||
|
|
||||||
|
def test_regret_matching_logging():
|
||||||
|
logs = []
|
||||||
|
|
||||||
|
def debug_logger(player_index, message):
|
||||||
|
logs.append((player_index, message))
|
||||||
|
|
||||||
|
rng = random.Random(42)
|
||||||
|
sim = Simulation(
|
||||||
|
MATCHING_PENNIES,
|
||||||
|
num_rounds=5,
|
||||||
|
player_kind="regret_matching",
|
||||||
|
debug_logger=debug_logger,
|
||||||
|
rng=rng,
|
||||||
|
)
|
||||||
|
sim.run()
|
||||||
|
|
||||||
|
assert len(logs) > 0
|
||||||
|
|
||||||
|
players_logged = {player_idx for player_idx, _ in logs}
|
||||||
|
assert players_logged == {0, 1}
|
||||||
|
|
||||||
|
# Regret matching logs cumulative regret and probabilities on every round
|
||||||
|
# 5 rounds * 2 players = 10 logs
|
||||||
|
assert len(logs) == 10
|
||||||
|
|
||||||
|
for _, message in logs:
|
||||||
|
assert "cumulative regret:" in message
|
||||||
|
assert "probabilities:" in message
|
||||||
|
|
||||||
|
|
||||||
|
def test_q_learning_logging():
|
||||||
|
logs = []
|
||||||
|
|
||||||
|
def debug_logger(player_index, message):
|
||||||
|
logs.append((player_index, message))
|
||||||
|
|
||||||
|
rng = random.Random(42)
|
||||||
|
sim = Simulation(
|
||||||
|
MATCHING_PENNIES,
|
||||||
|
num_rounds=5,
|
||||||
|
player_kind="q_learning",
|
||||||
|
debug_logger=debug_logger,
|
||||||
|
rng=rng,
|
||||||
|
)
|
||||||
|
sim.run()
|
||||||
|
|
||||||
|
assert len(logs) > 0
|
||||||
|
|
||||||
|
players_logged = {player_idx for player_idx, _ in logs}
|
||||||
|
assert players_logged == {0, 1}
|
||||||
|
|
||||||
|
# Q-learning logs Q-values for state on every round
|
||||||
|
assert len(logs) == 10
|
||||||
|
|
||||||
|
for _, message in logs:
|
||||||
|
assert "Q-values for state" in message
|
||||||
Reference in New Issue
Block a user