Skip to main content

Python implementation of the game of chess.

Project description

Introduction

Python implementation of chess game in less than 1000 lines of code.

There is also a work in progress for the cli based game (python -m chess_python.game).

Disclaimer: it is missing api for checkmate and stalemates

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
  • 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.5.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

chess_python_pip-0.1.5-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file chess-python-pip-0.1.5.tar.gz.

File metadata

  • Download URL: chess-python-pip-0.1.5.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.2 Linux/5.15.0-1020-azure

File hashes

Hashes for chess-python-pip-0.1.5.tar.gz
Algorithm Hash digest
SHA256 cc45987e9d1a620ee7c6eeee4c544363a8d34e1e47aa905a8a2f4a445b2967d0
MD5 e7dbd85421cdc4324d12f662cbde6180
BLAKE2b-256 cdfa0928a6d9c6e461949e55c4b4fc271b076291541d73eaf8e5bf4df8940854

See more details on using hashes here.

File details

Details for the file chess_python_pip-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: chess_python_pip-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 11.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.10.2 Linux/5.15.0-1020-azure

File hashes

Hashes for chess_python_pip-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 beabc47686e57dbbab92104eba507fd5e15686f6aabeff8457bae9e3be06a371
MD5 59149b48ca780262ef12937e3cc10036
BLAKE2b-256 9e30a6aa88687c1d42d03816ef1ca05506e97ad98c0ec2616865d87b10684b7d

See more details on using hashes here.

Supported by

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