tictactoe_policy/evaluation.py - A
tictactoe_policy/__init__.py - A
tictactoe_policy/training.py - A
tictactoe_policy/dataset.py - A
tictactoe_policy/cli.py - A
tictactoe_policy/minimax.py - A
tictactoe_policy/logger.py - A
tictactoe_policy/search.py - A
tictactoe_policy/symmetry.py - A
tictactoe_policy/model.py - A
tictactoe_policy/__main__.py - A
tictactoe_policy/policy.py - A
tictactoe_policy/game.py - A
tictactoe_policy/evaluation.py
    F 79:0 evaluate_policy - B (7)
    F 148:0 _play_games - B (7)
    C 20:0 EvaluationReport - A (2)
    F 142:0 _choose_normalized - A (1)
    M 71:4 EvaluationReport.to_dict - A (1)
tictactoe_policy/training.py
    F 40:0 train_policy - B (6)
    F 97:0 _tensors - A (4)
    F 31:0 seed_everything - A (1)
    C 15:0 TrainingResult - A (1)
tictactoe_policy/dataset.py
    F 65:0 sampled_examples - B (10)
    F 121:0 tactical_accuracy - B (8)
    F 46:0 exact_examples - A (5)
    F 16:0 immediate_moves - A (3)
    F 31:0 _target_moves - A (3)
    F 114:0 _deduplicate - A (2)
tictactoe_policy/cli.py
    F 47:0 main - A (2)
    F 15:0 build_parser - A (1)
tictactoe_policy/minimax.py
    M 31:4 ExactMinimax.best_moves - B (6)
    M 19:4 ExactMinimax._value - A (5)
    C 9:0 ExactMinimax - A (4)
    M 51:4 ExactMinimax.value - A (2)
    F 65:0 reachable_positions - A (1)
    M 15:4 ExactMinimax.__init__ - A (1)
tictactoe_policy/logger.py
    F 9:0 init - A (4)
tictactoe_policy/search.py
    M 38:4 BoundedSearch._search - B (7)
    M 63:4 BoundedSearch.best_moves - B (6)
    C 9:0 BoundedSearch - A (5)
    M 25:4 BoundedSearch._heuristic - A (5)
    M 19:4 BoundedSearch.__init__ - A (2)
    M 82:4 BoundedSearch.score - A (2)
tictactoe_policy/symmetry.py
    F 6:0 transform_move - A (4)
    F 40:0 augment - A (3)
    F 25:0 transform_board - A (2)
tictactoe_policy/model.py
    C 9:0 PolicyNetwork - A (3)
    M 18:4 PolicyNetwork.__init__ - A (2)
    M 40:4 PolicyNetwork.parameter_count - A (2)
    M 30:4 PolicyNetwork.forward - A (1)
tictactoe_policy/policy.py
    M 56:4 TicTacToePolicy.move_scores - A (3)
    M 105:4 TicTacToePolicy.load - A (3)
    C 12:0 TicTacToePolicy - A (2)
    M 26:4 TicTacToePolicy.__init__ - A (1)
    M 33:4 TicTacToePolicy.board_size - A (1)
    M 41:4 TicTacToePolicy.win_length - A (1)
    M 49:4 TicTacToePolicy.parameter_count - A (1)
    M 78:4 TicTacToePolicy.choose_move - A (1)
    M 88:4 TicTacToePolicy.save - A (1)
tictactoe_policy/game.py
    M 77:4 TicTacToeGame.validate_board - C (11)
    M 60:4 TicTacToeGame._winning_lines - B (7)
    C 48:0 TicTacToeGame - A (5)
    M 110:4 TicTacToeGame.winners - A (5)
    M 162:4 TicTacToeGame.apply_move - A (5)
    C 13:0 GameConfig - A (4)
    M 29:4 GameConfig.__post_init__ - A (4)
    M 133:4 TicTacToeGame.legal_moves - A (3)
    M 149:4 TicTacToeGame.infer_player - A (3)
    M 56:4 TicTacToeGame.__init__ - A (2)
    M 123:4 TicTacToeGame.winner - A (2)
    M 141:4 TicTacToeGame.is_terminal - A (2)
    M 40:4 GameConfig.cell_count - A (1)

59 blocks (classes, functions, methods) analyzed.
Average complexity: A (3.3728813559322033)