python-chess v0.15.0 Changes: * `chess.uci.Score` **no longer has** `upperbound` **and** `lowerbound` **attributes**. Previously these were always false. * Significant improvements of move generation speed, around **2.3x faster PGN parsing**. Removed the following internal attributes and methods of the `Board` class: `attacks_valid`, `attacks_to`, `attacks_from`, `_pinned()`, `attacks_valid_stack`, `attacks_from_stack`, `attacks_to_stack`, `generate_attacks()`. * UCI: Do not send *isready* directly after go. Though allowed by the UCI protocol specification it is just not nescessary and many engines were having trouble with this. * Polyglot: Use less memory for uniform random choices from big opening books (reservoir sampling). * Documentation improvements. Bugfixes: * Allow underscores in PGN header tags. Found and fixed by Bajusz Tamás. New features: * Added `Board.chess960_pos()` to identify the Chess960 starting position number of positions. * Added `chess.BB_BACKRANKS` and `chess.BB_PAWN_ATTACKS`.