Skip to content

Releases: niklasf/python-chess

python-chess v0.30.0

01 Jan 12:57
v0.30.0
Compare
Choose a tag to compare
Changes:

* **Dropped support for Python 3.5.**
* Remove explicit loop arguments in `chess.engine` module, following
  https://bugs.python.org/issue36373.

Bugfixes:

* `chess.engine.EngineProtocol.returncode` is no longer poisoned when
  `EngineProtocol.quit()` times out.
* `chess.engine.PlayResult.info` was not always of type
  `chess.engine.InfoDict`.

Features:

* The background thread spawned by `chess.engine.SimpleEngine` is now named
  for improved debuggability, revealing the PID of the engine process.
* `chess.engine.EventLoopPolicy` now supports `asyncio.PidfdChildWatcher`
  when running on Python 3.9+ and Linux 5.3+.
* Add `chess.Board.san_and_push()`.

python-chess v0.29.0

02 Dec 10:29
v0.29.0
Compare
Choose a tag to compare
Changes:

* `chess.variant.GiveawayBoard` **now starts with castling rights**.
  `chess.variant.AntichessBoard` is the same variant without castling rights.
* UCI info parser no longer reports errors when encountering unknown tokens.
* Performance improvements for repetition detection.
* Since Python 3.8: `chess.syzygy`/`chess.polyglot` use `madvise(MADV_RANDOM)`
  to prepare table/book files for random access.

Bugfixes:

* Fix syntax error in type annotation of `chess.engine.run_in_background()`.
* Fix castling rights when king is exploded in Atomic. Mitigated by the fact
  that the game is over and that it did not affect FEN.
* Fix insufficient material with underpromoted pieces in Crazyhouse. Mitigated
  by the fact that affected positions are unreachable in Crazyhouse.

Features:

* Support `wdl` in UCI info (usually activated with `UCI_ShowWDL`).

python-chess v0.28.3

03 Sep 14:29
v0.28.3
Compare
Choose a tag to compare
Bugfixes:

* Follow FICS rules in Atomic castling edge cases.
* Handle self-reported errors by XBoard engines "Error: ..." or
  "Illegal move: ...".

python-chess v0.28.2

25 Jul 10:39
v0.28.2
Compare
Choose a tag to compare
Bugfixes:

* Fixed exception propagation, when an UCI engine sends an invalid `bestmove`.
  Thanks @fsmosca.

Changes:

* `chess.Move.from_uci()` no longer accepts moves from and to the same square,
  for example `a1a1`. `0000` is now the only valid null move notation.

python-chess v0.28.1

25 Jun 13:24
v0.28.1
Compare
Choose a tag to compare
Bugfixes:

* The minimum Python version is 3.5.3 (instead of 3.5.0).
* Fix `board.is_irreversible()` when capturing a rook that had castling rights.

Changes:

* `is_en_passant()`, `is_capture()`, `is_zeroing()`, `is_irreversible()`,
  `is_castling()`, `is_kingside_castling()` and `is_queenside_castling()`
  now consistently return `False` for null moves.
* Added `chess.engine.InfoDict` class with typed shorthands for common keys.
* Support `[Variant "3-check"]` (from chess.com PGNs).

python-chess v0.28.0

20 May 14:50
v0.28.0
Compare
Choose a tag to compare
Changes:

* Dropped support for Python 3.4 (end of life reached).
* `chess.polyglot.Entry.move` **is now a property instead of a method**.
  The raw move is now always decoded in the context of the position (relevant
  for castling moves).
* `Piece`, `Move`, `BaseBoard` and `Board` comparisons no longer support
  ducktyping.
* FENs sent to engines now always include potential en-passant squares, even if
  no legal en-passant capture exists.
* Circular SVG arrows now have a `circle` CSS class.
* Superfluous dashes (-) in EPDs are no longer treated as opcodes.
* Removed `GameCreator`, `HeaderCreator` and `BoardCreator` aliases for
  `{Game,Headers,Board}Builder`.

Bugfixes:

* Notation like `Kh1` is no longer accepted for castling moves.
* Remove stale files from wheels published on PyPI.
* Parsing Three-Check EPDs with moves was always failing.
* Some methods in `chess.variant` were returning bool-ish integers, when they
  should have returned `bool`.
* `chess.engine`: Fix line decoding when Windows line-endings arrive seperately
  in stdout buffer.
* `chess.engine`: Survive timeout in analysis.
* `chess.engine`: Survive unexpected `bestmove` sent by misbehaving UCI engines.

New features:

* **Experimental type signatures for almost all public APIs** (`typing`).
  Some modules do not yet internally pass typechecking.
* Added `Board.color_at(square)`.
* Added `chess.engine.AnalysisResult.get()` and `empty()`.
* `chess.engine`: The `UCI_AnalyseMode` option is still automatically managed,
  but can now be overwritten.
* `chess.engine.EngineProtocol` and constructors now optionally take
  an explicit `loop` argument.

python-chess v0.27.3

21 Mar 10:26
v0.27.3
Compare
Choose a tag to compare
Changes:

* `XBoardProtocol` will no longer raise an exception when the engine resigned.
  Instead it sets a new flag `PlayResult.resigned`. `resigned` and
  `draw_offered` are keyword-only arguments.
* Renamed `chess.pgn.{Game,Header,Board}Creator` to
  `{Game,Headers,Board}Builder`. Aliases kept in place.

Bugfixes:

* Make `XBoardProtocol` robust against engines that send a move after claiming
  a draw or resigning. Thanks @pascalgeo.
* `XBoardProtocol` no longer ignores `Hint:` sent by the engine.
* Fix handling of illegal moves in `XBoardProtocol`.
* Fix exception when engine is shut down while pondering.
* Fix unhandled internal exception and file descriptor leak when engine
  initialization fails.
* Fix `HordeBoard.status()` when black pieces are on the first rank.
  Thanks @Wisling.

New features:

* Added `chess.pgn.Game.builder()`, `chess.pgn.Headers.builder()` and
  `chess.pgn.GameNode.dangling_node()` to simplify subclassing `GameNode`.
* `EngineProtocol.communicate()` is now also available in the synchronous API.

python-chess v0.27.2

16 Mar 12:25
v0.27.2
Compare
Choose a tag to compare
Bugfixes:

* `chess.engine.XBoardProtocol.play()` was searching 100 times longer than
  intended when using `chess.engine.Limit.time`, and searching 100 times more
  nodes than intended when using `chess.engine.Limit.nodes`. Thanks @pascalgeo.

python-chess v0.27.1

15 Mar 10:44
v0.27.1
Compare
Choose a tag to compare
Bugfixes:

* `chess.engine.XBoardProtocol.play()` was raising `KeyError` when using time
  controls with increment or remaining moves.

python-chess v0.27.0

14 Mar 08:20
v0.27.0
Compare
Choose a tag to compare
This is the second **release candidate for python-chess 1.0**. If you see the
need for breaking changes, please speak up now!

Bugfixes:

* `EngineProtocol.analyse(*, multipv)` was not passing this argument to the
  engine and therefore only returned the first principal variation.
  Thanks @svangordon.
* `chess.svg.board(*, squares)`: The X symbol on selected squares is now more
  visible when it overlaps pieces.

Changes:

* **FEN/EPD parsing is now more relaxed**: Incomplete FENs and EPDs are
  completed with reasonable defaults (`w - - 0 1`). The EPD parser accepts
  fields with moves in UCI notation (for example the technically invalid
  `bm g1f3` instead of `bm Nf3`).
* The PGN parser now skips games with invalid FEN headers and variations after
  an illegal move (after handling the error as usual).

New features:

* Added `Board.is_repetition(count=3)`.
* Document that `chess.engine.EngineProtocol` is compatible with
  AsyncSSH 1.16.0.