Skip to main content

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_pieces to optimizer initialization and update, not when checking if move is legal)
  • 0.70 s removing np.array from 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chess_python_pip-0.1.12.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chess_python_pip-0.1.12-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

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

Hashes for chess_python_pip-0.1.12.tar.gz
Algorithm Hash digest
SHA256 af260966b419a3ecf82ba6b2df4b5d5976467fe85e92ebf94c556f1bba814f9d
MD5 49b9f70095e80e4758f8a9bfbf1a47f9
BLAKE2b-256 54993b003c092ce86f451310c440213ec7792fb60a336cc5c522aec380e1bc4f

See more details on using hashes here.

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

Hashes for chess_python_pip-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 b95faf5769afeb4369305c8177761a98048e40ab83fe0bf61f3dfe9846da90d7
MD5 7498f1cd265c79f7c75ecc6919291dc3
BLAKE2b-256 417c6bd185c2a5b59dd8623dd03f83539eaeba0f9db21f6ed3f7a6552a7e8ae4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page