Python implementation of the game of chess.
Project description
Introduction
Python implementation of the chess game in less than 1000 lines of code.
For engines/agents to play against check my other project chess-ai
There is also a work in progress for the cli based game (python -m chess_python.game).
Usage
pip install chess-python-pip
#examples/example_01.py
from chess_python.chess import Chess
chess = Chess(fen="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 0") # Default
print(chess)
print(chess.legal_moves())
chess.move("e2e4")
print(chess)
outputs:
Player to move: White
Move count: 0
8 || r | n | b | q | k | b | n | r |
-----------------------------------
7 || p | p | p | p | p | p | p | p |
-----------------------------------
6 || | | | | | | | |
-----------------------------------
5 || | | | | | | | |
-----------------------------------
4 || | | | | | | | |
-----------------------------------
3 || | | | | | | | |
-----------------------------------
2 || P | P | P | P | P | P | P | P |
-----------------------------------
1 || R | N | B | Q | K | B | N | R |
-----------------------------------
-----------------------------------
|| a | b | c | d | e | f | g | h
['b1a3', 'b1c3', 'g1f3', 'g1h3', 'a2a3', 'a2a4', 'b2b3', 'b2b4', 'c2c3', 'c2c4', 'd2d3', 'd2d4', 'e2e3', 'e2e4', 'f2f3', 'f2f4', 'g2g3', 'g2g4', 'h2h3', 'h2h4']
Player to move: Black
Move count: 1
8 || r | n | b | q | k | b | n | r |
-----------------------------------
7 || p | p | p | p | p | p | p | p |
-----------------------------------
6 || | | | | | | | |
-----------------------------------
5 || | | | | | | | |
-----------------------------------
4 || | | | | P | | | |
-----------------------------------
3 || | | | | | | | |
-----------------------------------
2 || P | P | P | P | | P | P | P |
-----------------------------------
1 || R | N | B | Q | K | B | N | R |
-----------------------------------
-----------------------------------
|| a | b | c | d | e | f | g | h
DEV section:
Performance tracking
Using python3 -m cProfile -o prof.txt tree.py -h for profiling and snakeviz prof.txt to
visualize.
Perft(3) initial position rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 (8902
positions, reference time 0.05 s with
python-chess:
- 1.25 s (first)
- 0.79 s (moving
get_positions_attacking_piecesto optimizer initialization and update, not when checking if move is legal) - 0.70 s removing
np.arrayfrom list of moves (does not make a lot of sense) - 0.55 s removing more np.arrays
- 0.51 s removing np.unravel
- 0.47 s using only lists in
get_allowed_moves_by_piece - 0.39 s with revamped
get_index_trajectory - 0.35 with custom
deepcopy - 0.18 s with using list for board instead of numpy!!
- 0.15 s further tweaks
TODO:
- Include tests for perft in different positions
- Include utils if there is a mismatch in positions tree with reference implementation
- Improve performance:
- Keep track of index where there are pieces in optimizer level
- Move and unmake move (implenting unmake also requires using a copy of the board, which performance wise does not improve anything)
- Improve overall code quality (clarity, choose right data structure for the job):
- Public vs private functions
- cyclomatic complexity in
is_legal_move
- Automate release with github action to pip
- Explore pypy
- Explore deepcopy for tree generation, it takes a lot of time (only copying board improves performance)
- Simplify castling
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chess_python_pip-0.1.12.tar.gz.
File metadata
- Download URL: chess_python_pip-0.1.12.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.10.2 Linux/5.15.0-1022-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af260966b419a3ecf82ba6b2df4b5d5976467fe85e92ebf94c556f1bba814f9d
|
|
| MD5 |
49b9f70095e80e4758f8a9bfbf1a47f9
|
|
| BLAKE2b-256 |
54993b003c092ce86f451310c440213ec7792fb60a336cc5c522aec380e1bc4f
|
File details
Details for the file chess_python_pip-0.1.12-py3-none-any.whl.
File metadata
- Download URL: chess_python_pip-0.1.12-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.10.2 Linux/5.15.0-1022-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b95faf5769afeb4369305c8177761a98048e40ab83fe0bf61f3dfe9846da90d7
|
|
| MD5 |
7498f1cd265c79f7c75ecc6919291dc3
|
|
| BLAKE2b-256 |
417c6bd185c2a5b59dd8623dd03f83539eaeba0f9db21f6ed3f7a6552a7e8ae4
|