@startuml '!include skinparams.puml () Player package "Game module" { class GameIO class GameState class GameBoard class GameMove Player -> GameIO GameIO ..> GameState GameState ..> GameMove GameMove ..> GameBoard } () "Engine user" as EU () "Model files" as MF package "Engine module" { class EngineIO class EngineLogic interface DecisionAlgorithm class MonteCarloTreeSearch class MCTSNode class Keras class NeuralNetwork EU -> EngineIO EngineIO ..> EngineLogic EngineLogic ..> DecisionAlgorithm DecisionAlgorithm <|.. MonteCarloTreeSearch DecisionAlgorithm <|.. Keras MonteCarloTreeSearch ..> MCTSNode Keras ..> NeuralNetwork NeuralNetwork --> MF } () "SGF files" as SGF package "Training module" { class Trainer class Parser class ASTNode Parser -> SGF Trainer ..> Parser Parser ..> ASTNode } DecisionAlgorithm .> GameMove ASTNode .> GameMove Trainer .> NeuralNetwork @enduml