Wraps the open-source Stockfish chess engine for easy integration into python.
Project description
Stockfish
Implements an easy-to-use Stockfish class to integrates the Stockfish chess engine with Python.
Install
$ pip install stockfish
Ubuntu
$ sudo apt install stockfish
Mac OS
$ brew install stockfish
Features and usage examples
Initialize Stockfish class
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})
Set position by sequence of moves
stockfish.set_position(["e2e4", "e7e6"])
Update position by making a sequence of moves from the current position
stockfish.make_moves_from_current_position(["g4d7", "a8b8", "f1d1"])
Set position by Forsyth–Edwards Notation (FEN)
stockfish.set_fen_position("rnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2")
Get best move
stockfish.get_best_move()
d2d4
It's possible to specify remaining time on black and/or white clock. Time is in milliseconds.
stockfish.get_best_move(wtime=1000, btime=1000)
Get best move based on a time constraint
stockfish.get_best_move_time(1000)
Time constraint is in milliseconds
e2e4
Check is move correct with current position
stockfish.is_move_correct('a2a3')
True
Get info on the top n moves
stockfish.get_top_moves(3)
[
{'Move': 'f5h7', 'Centipawn': None, 'Mate': 1},
{'Move': 'f5d7', 'Centipawn': 713, 'Mate': None},
{'Move': 'f5h5', 'Centipawn': -31, 'Mate': None}
]
Get Stockfish's win/draw/loss stats for the side to move in the current position
stockfish.get_wdl_stats()
[87, 894, 19]
Find if your version of Stockfish is recent enough to display WDL stats
stockfish.does_current_engine_version_have_wdl_option()
True
Tell Stockfish whether or not to display WDL stats after analyzing a position
stockfish.set_show_wdl_option(True)
Set current engine's skill level (ignoring ELO rating)
stockfish.set_skill_level(15)
Set current engine's ELO rating (ignoring skill level)
stockfish.set_elo_rating(1350)
Set current engine's depth
stockfish.set_depth(15)
Get current engine's parameters
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'
}
Get current board position in Forsyth–Edwards notation (FEN)
stockfish.get_fen_position()
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Get current board visual
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
Get current board evaluation in centipawns or mate in x
stockfish.get_evaluation()
Positive is advantage white, negative is advantage black
{"type":"cp", "value":12}
{"type":"mate", "value":-3}
Run benchmark
BenchmarkParameters
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!
Get current major version of stockfish engine
stockfish.get_stockfish_major_version()
11
Find if the version of Stockfish being used is a development build
stockfish.is_development_build_of_engine()
False
Testing
$ python setup.py test
Security
If you discover any security related issues, please email zhelyabuzhsky@icloud.com instead of using the issue tracker.
Credits
License
MIT License. Please see License File for more information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for stockfish-3.23.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac9ce184b3e826e3d0727114a465d604d60899334a4dc2ecbe08be063635c09a |
|
MD5 | 4ce928ab4c5496a5cbbe990eaf1aecc9 |
|
BLAKE2b-256 | ade08f6a1c7d50361100a1bccd9e87e0867b0a9ec9ebdf398f7f26b7e45bbb8f |