niklasf / python-chess

A chess library for Python, with move generation and validation, PGN parsing and writing, Polyglot opening book reading, Gaviota tablebase probing, Syzygy tablebase probing, and UCI/XBoard engine communication
https://python-chess.readthedocs.io/en/latest/
GNU General Public License v3.0
2.39k stars 521 forks source link

Write high level documentation or recipes #371

Open niklasf opened 5 years ago

niklasf commented 5 years ago

Currently the documentation is built like a reference. Some kind of overview or collection of recipes might be helpful.


Prompted by this email (in German), with some suggestions: image

ChrisWhittington commented 5 years ago

some more bits of sample source code would be very useful

WolfgangFahl commented 4 years ago

I've started a bit of this at http://wiki.bitplan.com/index.php/Python-chess

WolfgangFahl commented 4 years ago

At this time I've got four engines to try things with with on my mac: gnuchess, stockfish, crafty and xboard. For gnuchess and stockfish I successfully let the engines play against themselves. crafty doesn't seem to support any of the python-chess protocols uci or xboard so I am not pursuing anything with that engine yet.

Now I'd like to use xboard just as a GUI and I don't know how to do that I'd like to do simple session command like http://wiki.bitplan.com/index.php/XBoard#Session_example but when I open xboard with the XBoardProtocol with a SimpleEngine I get <XBoardProtocol (pid=9460)>: Timeout during initialization - is that a separate bug or do i just need some sample code here?

ChrisWhittington commented 4 years ago

I found the same. Most stuff works except Crafty (and different Craftys don’t work in different ways). However some people do manage to overcome the problems, Ferdinand Mosca, I think, being one.

One Crafty problem is declined to send any PV before one million nodes done, and quite often declines to send a PV anyway. I gave up with it.

Sent from my iPhone

On 28 Dec 2019, at 08:10, Wolfgang Fahl notifications@github.com wrote:

 At this time I've got four engines to try things with with on my mac: gnuchess, stockfish, crafty and xboard. For gnuchess and stockfish I successfully let the engines play against themselves. crafty doesn't seem to support any of the python-chess protocols uci or xboard so I am not pursuing anything with that engine yet.

Now I'd like to use xboard just as a GUI and I don't know how to do that I'd like to do simple session command like http://wiki.bitplan.com/index.php/XBoard#Session_example but when I open xboard with the XBoardProtocol with a SimpleEngine I get <XBoardProtocol (pid=9460)>: Timeout during initialization - is that a separate bug or do i just need some sample code here?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

niklasf commented 4 years ago

@WolfgangFahl To investigate the issue, can you please share the exact Python code and engine version that leads to <XBoardProtocol (pid=9460)>: Timeout during initialization?

WolfgangFahl commented 4 years ago

@niklasf:

see https://github.com/WolfgangFahl/play-chess-with-a-webcam/blob/master/tests/test_chessengine.py

I am currently experimenting with this on linux and mac and also get different other issues like Threads hanging

On mac with only calling test_engines

i get: found /Users/wf/bin - prepending it to PATH found crafty engine at /Users/wf/bin/crafty found gnuchess engine at /Users/wf/bin/gnuchess found stockfish engine at /Users/wf/bin/stockfish found xboard engine at /Users/wf/bin/xboard chess engine Crafty Computer Chess called via crafty at /Users/wf/bin/crafty chess engine GNU Chess called via gnuchess at /Users/wf/bin/gnuchess chess engine Stockfish Chess called via stockfish at /Users/wf/bin/stockfish chess engine XBoard called via xboard at /Users/wf/bin/xboard <XBoardProtocol (pid=13124)>: Timeout during initialization Close running child process: kill <_UnixSubprocessTransport closed pid=13124 running stdin=<_UnixWritePipeTransport closing fd=19 idle bufsize=0> stdout=<_UnixReadPipeTransport closing fd=20 idle> stderr=<_UnixReadPipeTransport closing fd=22 idle>>

with using

GNU Chess 6.2.5 installed with macports 2.6.2 $HOME/bin/gnuchess

#!/bin/bash
# WF 2019-12-26
/opt/local/bin/gnuchess --uci

xboard 4.9.1 installed with macports 2.6.2 see http://wiki.bitplan.com/index.php/XBoard $HOME/bin/xboard

#!/bin/bash
# WF 2019-12-26
# call xboard with proper parameters
# Locale
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

export PATH="/opt/local/bin:/opt/local/sbin:$PATH"

# start xboard with no chess program as a passive board
/opt/local/bin/xboard -ncp \
  -blackPieceColor darkred \
  -whitePieceColor lightyellow \
  -clockFont -misc-fixed-bold-r-normal--13-120-75-75-c-80-iso8859-15 \
  -font -misc-fixed-bold-r-normal--13-120-75-75-c-80-iso8859-15 \
  -size Bulky \
  "$@"

Stockfish 240314 SSE4.2 $HOME/bin/stockfish

#!/bin/bash
/Users/wf/source/cpp/Stockfish-240414/osx/stockfish

using the stockfish zip file from http://julien.marcel.free.fr/macchess/Chess_on_Mac/Engines.html

WolfgangFahl commented 4 years ago

I have now added some code to show the hanging issue add the end see https://github.com/WolfgangFahl/play-chess-with-a-webcam/commit/bcaafe3

niklasf commented 4 years ago
WolfgangFahl commented 4 years ago

How do i close the engines? When calling quit() i get another error:

chess engine GNU Chess called via gnuchess at /Users/wf/bin/gnuchess
Close running child process: kill <_UnixSubprocessTransport closed pid=18268 running stdin=<_UnixWritePipeTransport closing fd=7 idle bufsize=0> stdout=<_UnixReadPipeTransport closing fd=8 idle> stderr=<_UnixReadPipeTransport closing fd=10 idle>>
Traceback (most recent call last):
  File "/Users/wf/Documents/pyworkspace/PlayChessWithAWebCam/tests/test_chessengine.py", line 85, in <module>
    test_engines()
  File "/Users/wf/Documents/pyworkspace/PlayChessWithAWebCam/tests/test_chessengine.py", line 46, in test_engines
    chessEngine.close()    
  File "/Users/wf/Documents/pyworkspace/PlayChessWithAWebCam/pcwawc/chessengine.py", line 76, in close
    self.engine.quit()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/chess/engine.py", line 2350, in quit
    return future.result()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/concurrent/futures/_base.py", line 435, in result
    return self.__get_result()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/tasks.py", line 449, in wait_for
    raise futures.TimeoutError()
concurrent.futures._base.TimeoutError

Do i have to echo some commands into xboard to make xboard behave properly? Is there a gitter chat or something similar for this project?

niklasf commented 4 years ago

There wasn't so far, but why not? Created https://gitter.im/python-chess/community.

It looks like gnuchess does not even support the standard quit command. You can do engine.close() to shut it down forcefully. I did not anticipate that, but after 95aade7e46724126bd0a2a7a66c5697c9a5e0f22 the next version of python-chess will support doing

try:
    engine.quit()  # Ask nicely
except asyncio.TimeoutError:
    engine.close()  # Force close

I don't know what you're trying to achieve with xboard. It's a GUI, not an engine.