====================================================== sgflib: Smart Game Format Parser Library & Utilities ====================================================== Description =========== For Python programmers, sgflib.py is a module containing a parser and classes for SGF, the Smart Game Format, specifically for the game of Go. For Go players, several utilities are included: * sgfmerge: Merge two or more game record files into one. Works best when the game record files are for the same game, and contain variations. * sgfnorm: Normalize an SGF file. Usful for comparing two files representing the same game. * sgfsummary: Read, analyze, and summarize one or more SGF files. Installation ============ You'll need the Python language itself, version 3.8 or higher, freely available from http://www.python.org. The sgflib.tgz archive contains the following: - sgflib.py -- SGF Parser Library. Put this in a folder on Python's path. - sgfsummary, sgfnorm, sgfmerge -- Utility tools. Put these on your PATH. - README.txt -- Installation instructions (the file you're reading now). - test_sgflib.py & test_data/ -- Test suite. Requires pytest to run. Bugs & Other Issues =================== If you have any trouble running this code, if you find (maybe fix?) any bugs, or add any features, please contact_ the author. To Do ===== * Reimplement the GameTree as a data structure that's convenient for the user of sgflib, rather than following the file format. * Reimplement the Cursor class? Or remove it altogether if unnecessary. * Reimplement the parser? * Simplify. It works, but it seems clunky. Written early in my Python career. * Reimplement as a generator? * Support earlier versions of SGF? * Titler: Populate the title (GN/game_name property) inside the SGF file itself, e.g.: player1 (2 dan, white) vs player2 (4 kyu, black +h5); W+18½; KGS; 2020-12-04 * Renamer: Rename SGF files, e.g.: 2020-12-04 player1 · player2 +h5 W+18.sgf * Query SGF data: Extract game & node properties & comments from .sgf files. Queries could be Python expressions for maximum flexibility. * Handicap convertor? Lizzie (Leela Zero?) can't handle handicap stones, so this program would convert the HA[n] & AB[xx] tags to B[xx] moves & W[] passes. Katago via KaTrain doesn't have this problem though. * Auto-label variations. Have any suggestions? Want to help? Please contact_ the author. Contact ======= Project author: `David Goodger <mailto:goodger@python.org>`_. Go Tools Project website: http://gotools.sourceforge.net.