Implements an easy-to-use Stockfish class to integrates the Stockfish chess engine with Python.
$ pip install stockfish
$ sudo apt install stockfish
$ brew install stockfish
You should install the stockfish engine in your operating system globally or specify path to binary file in class constructor
from stockfish import Stockfish
stockfish = Stockfish(path="/Users/zhelyabuzhsky/Work/stockfish/stockfish-9-64")
There are some default engine's settings:
{
"Write Debug Log": "false",
"Contempt": 0,
"Min Split Depth": 0,
"Threads": 1,
"Ponder": "false",
"Hash": 16,
"MultiPV": 1,
"Skill Level": 20,
"Move Overhead": 30,
"Minimum Thinking Time": 20,
"Slow Mover": 80,
"UCI_Chess960": "false",
}
You can change them, as well as the default search depth, during your Stockfish class initialization:
stockfish = Stockfish(path="/Users/zhelyabuzhsky/Work/stockfish/stockfish-9-64", depth=18, parameters={"Threads": 2, "Minimum Thinking Time": 30})
stockfish.set_position(["e2e4", "e7e6"])
stockfish.make_moves_from_current_position(["g4d7", "a8b8", "f1d1"])
stockfish.set_fen_position("rnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2")
stockfish.get_best_move()
d2d4
stockfish.get_best_move_time(1000)
Time constraint is in milliseconds
e2e4
stockfish.is_move_correct('a2a3')
True
stockfish.get_top_moves(3)
[
{'Move': 'f5h7', 'Centipawn': None, 'Mate': 1},
{'Move': 'f5d7', 'Centipawn': 713, 'Mate': None},
{'Move': 'f5h5', 'Centipawn': -31, 'Mate': None}
]
stockfish.get_wdl_stats()
[87, 894, 19]
stockfish.does_current_engine_version_have_wdl_option()
True
stockfish.set_show_wdl_option(True)
stockfish.set_skill_level(15)
stockfish.set_elo_rating(1350)
stockfish.set_depth(15)
stockfish.get_parameters()
{
'Write Debug Log': 'false',
'Contempt': 0,
'Min Split Depth': 0,
'Threads': 1,
'Ponder': 'false',
'Hash': 16,
'MultiPV': 1,
'Skill Level': 20,
'Move Overhead': 30,
'Minimum Thinking Time': 20,
'Slow Mover': 80,
'UCI_Chess960': 'false'
}
stockfish.get_fen_position()
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
stockfish.get_board_visual()
+---+---+---+---+---+---+---+---+
| r | n | b | q | k | b | n | r | 8
+---+---+---+---+---+---+---+---+
| p | p | p | p | p | p | p | p | 7
+---+---+---+---+---+---+---+---+
| | | | | | | | | 6
+---+---+---+---+---+---+---+---+
| | | | | | | | | 5
+---+---+---+---+---+---+---+---+
| | | | | | | | | 4
+---+---+---+---+---+---+---+---+
| | | | | | | | | 3
+---+---+---+---+---+---+---+---+
| P | P | P | P | P | P | P | P | 2
+---+---+---+---+---+---+---+---+
| R | N | B | Q | K | B | N | R | 1
+---+---+---+---+---+---+---+---+
a b c d e f g h
stockfish.get_evaluation()
Positive is advantage white, negative is advantage black
{"type":"cp", "value":12}
{"type":"mate", "value":-3}
params = BenchmarkParameters(**kwargs)
parameters required to run the benchmark function. kwargs can be used to set custom values.
ttSize: range(1,128001)
threads: range(1,513)
limit: range(1,10001)
fenFile: "path/to/file.fen"
limitType: "depth", "perft", "nodes", "movetime"
evalType: "mixed", "classical", "NNUE"
stockfish.benchmark(params)
This will run the bench command with BenchmarkParameters. It is an additional custom non-UCI command, mainly for debugging. Do not use this command during a search!
stockfish.get_stockfish_major_version()
11
$ python setup.py test
If you discover any security related issues, please email zhelyabuzhsky@icloud.com instead of using the issue tracker.
MIT License. Please see License File for more information.