{ "info": { "author": "Tasuku SUENAGA a.k.a. gunyarakun", "author_email": "tasuku-s-github@titech.ac", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Games/Entertainment :: Board Games", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "python-shogi: a pure Python shogi library\n=========================================\n\n.. image:: https://travis-ci.org/gunyarakun/python-shogi.svg\n :target: https://travis-ci.org/gunyarakun/python-shogi\n\n.. image:: https://coveralls.io/repos/gunyarakun/python-shogi/badge.svg\n :target: https://coveralls.io/r/gunyarakun/python-shogi\n\n.. image:: https://landscape.io/github/gunyarakun/python-shogi/prototype/landscape.svg?style=flat\n :target: https://landscape.io/github/gunyarakun/python-shogi\n\n.. image:: https://badge.fury.io/py/python-shogi.svg\n :target: https://pypi.python.org/pypi/python-shogi\n\nIntroduction\n------------\n\nThis is the module for shogi written in Pure Python. It's based on python-chess commit 6203406259504cddf6f271e6a7b1e04ba0c96165.\n\nThis is the scholars mate in python-shogi:\n\n.. code:: python\n\n >>> import shogi\n\n >>> board = shogi.Board()\n\n >>> board.push(shogi.Move.from_usi('7g7f'))\n\n >>> board.push_usi('3c3d')\n Move.from_usi('3c3d')\n >>> board.push_usi('8h2b+')\n Move.from_usi('8h2b+')\n >>> board.push_usi('4a5b')\n Move.from_usi('4a5b')\n >>> board.push_usi('B*4b')\n Move.from_usi('B*4b')\n >>> board.push_usi('5a4a')\n Move.from_usi('5a4a')\n >>> board.push_usi('2b3a')\n Move.from_usi('2b3a')\n >>> board.is_checkmate()\n True\n\nFeatures\n--------\n\n* Supports Python 2.7 and Python 3.3+.\n\n* Supports standard shogi (hon shogi)\n\n* Legal move generator and move validation.\n\n .. code:: python\n\n >>> shogi.Move.from_usi(\"5i5a\") in board.legal_moves\n False\n\n* Make and unmake moves.\n\n .. code:: python\n\n >>> last_move = board.pop() # Unmake last move\n >>> last_move\n Move.from_usi('2b3a')\n\n >>> board.push(last_move) # Restore\n\n* Show a simple ASCII board.\n\n .. code:: python\n\n >>> print(board)\n l n s g . k +B n l\n . r . . g B . . .\n p p p p p p . p p\n . . . . . . p . .\n . . . . . . . . .\n . . P . . . . . .\n P P . P P P P P P\n . . . . . . . R .\n L N S G K G S N L\n \n S*1\n\n* Show a KIF style board.\n\n .. code:: python\n\n >>> print(board.kif_str())\n \u5f8c\u624b\u306e\u6301\u99d2\uff1a\n \uff19 \uff18 \uff17 \uff16 \uff15 \uff14 \uff13 \uff12 \uff11\n +---------------------------+\n |v\u9999v\u6842v\u9280v\u91d1 \u30fbv\u7389 \u99acv\u6842v\u9999|\u4e00\n | \u30fbv\u98db \u30fb \u30fbv\u91d1 \u89d2 \u30fb \u30fb \u30fb|\u4e8c\n |v\u6b69v\u6b69v\u6b69v\u6b69v\u6b69v\u6b69 \u30fbv\u6b69v\u6b69|\u4e09\n | \u30fb \u30fb \u30fb \u30fb \u30fb \u30fbv\u6b69 \u30fb \u30fb|\u56db\n | \u30fb \u30fb \u30fb \u30fb \u30fb \u30fb \u30fb \u30fb \u30fb|\u4e94\n | \u30fb \u30fb \u6b69 \u30fb \u30fb \u30fb \u30fb \u30fb \u30fb|\u516d\n | \u6b69 \u6b69 \u30fb \u6b69 \u6b69 \u6b69 \u6b69 \u6b69 \u6b69|\u4e03\n | \u30fb \u30fb \u30fb \u30fb \u30fb \u30fb \u30fb \u98db \u30fb|\u516b\n | \u9999 \u6842 \u9280 \u91d1 \u7389 \u91d1 \u9280 \u6842 \u9999|\u4e5d\n +---------------------------+\n \u5148\u624b\u306e\u6301\u99d2\uff1a\u3000\u9280\n\n* Detects checkmates, stalemates.\n\n .. code:: python\n\n >>> board.is_stalemate()\n False\n >>> board.is_game_over()\n True\n\n* Detects repetitions. Has a half move clock.\n\n .. code:: python\n\n >>> board.is_fourfold_repetition()\n False\n >>> board.move_number\n 8\n\n* Detects checks and attacks.\n\n .. code:: python\n\n >>> board.is_check()\n True\n >>> board.is_attacked_by(shogi.BLACK, shogi.A4)\n True\n >>> attackers = board.attackers(shogi.BLACK, shogi.H5)\n >>> attackers\n SquareSet(0b111000010000000000000000000000000000000000000000000000000000000000000000000000)\n >>> shogi.H2 in attackers\n True\n >>> print(attackers)\n . . . . . . . . .\n . . . . . . . . .\n . . . . . . . . .\n . . . . . . . . .\n . . . . . . . . .\n . . . . . . . . .\n . . . . . . . . .\n . . . . . . . 1 .\n . . . 1 1 1 . . .\n\n* Parses and creates USI representation of moves.\n\n .. code:: python\n\n >>> board = shogi.Board()\n >>> shogi.Move(shogi.E2, shogi.E4).usi()\n '2e4e'\n\n* Parses and creates SFENs\n\n .. code:: python\n\n >>> board.sfen()\n 'lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1'\n >>> board.piece_at(shogi.I5)\n Piece.from_symbol('K')\n\n* Read and write KIFs.\n\n .. code:: python\n\n >>> import shogi.KIF\n\n >>> kif = shogi.KIF.Parser.parse_file('data/games/habu-fujii-2006.kif')[0]\n\n >>> kif['names'][shogi.BLACK]\n '\u7fbd\u751f\u5584\u6cbb'\n >>> kif['names'][shogi.WHITE]\n '\u85e4\u4e95\u731b'\n >>> kif['moves'] # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE\n ['7g7f',\n '3c3d',\n ...,\n '9a9b',\n '7a7b+']\n >>> kif['win']\n 'b'\n\n* Communicate with a CSA protocol.\n\n Please see `random_csa_tcp_match `_.\n\n* Parse professional shogi players' name\n\n >>> import shogi.Person\n\n >>> shogi.Person.Name.is_professional('\u7fbd\u751f\u3000\u5584\u6cbb \u540d\u4eba\u30fb\u68cb\u8056\u30fb\u738b\u4f4d\u30fb\u738b\u5ea7')\n True\n\nPeformance\n----------\npython-shogi is not intended to be used by serious shogi engines where\nperformance is critical. The goal is rather to create a simple and relatively\nhighlevel library.\n\nYou can install the `gmpy2` or `gmpy` (https://code.google.com/p/gmpy/) modules\nin order to get a slight performance boost on basic operations like bit scans\nand population counts.\n\npython-shogi will only ever import very basic general (non-shogi-related)\noperations from native libraries. All logic is pure Python. There will always\nbe pure Python fallbacks.\n\nInstalling\n----------\n\n* With pip:\n\n ::\n\n sudo pip install python-shogi\n\n* From current source code:\n\n ::\n\n python setup.py sdist\n sudo python setup.py install\n\nHow to test\n-----------\n\n::\n\n > nosetests\n or\n > python setup.py test # requires python setup.py install\n\nIf you want to print lines from the standard output, execute nosetests like following.\n\n::\n\n > nosetests -s\n\nIf you want to test among different Python versions, execute tox.\n\n::\n\n > pip install tox\n > tox\n\nToDo\n----\n\n- Support USI protocol.\n\n- Support board.generate_attacks() and use it in board.is_attacked_by() and board.attacker_mask().\n\n- Remove rotated bitboards and support `Shatranj-style direct lookup\n `_ like recent python-chess.\n\n- Support %MATTA etc. in CSA TCP Protocol.\n\n- Support board.is_pinned() and board.pin().", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gunyarakun/python-shogi", "keywords": "shogi csa kif", "license": "GPL3", "maintainer": "", "maintainer_email": "", "name": "python-shogi", "package_url": "https://pypi.org/project/python-shogi/", "platform": "", "project_url": "https://pypi.org/project/python-shogi/", "project_urls": { "Homepage": "https://github.com/gunyarakun/python-shogi" }, "release_url": "https://pypi.org/project/python-shogi/1.0.9/", "requires_dist": null, "requires_python": "", "summary": "A pure Python shogi library with move generation and validation and handling of common formats.", "version": "1.0.9" }, "last_serial": 5632934, "releases": { "0.0.1": [], "1.0.0": [ { "comment_text": "", "digests": { "md5": "5bba30481d7e31bf5639e25f867de894", "sha256": "47d290d8c1bac3a347447f9e1efac4f744240a0f4c250482438a4ed5007887fa" }, "downloads": -1, "filename": "python-shogi-1.0.0.tar.gz", "has_sig": false, "md5_digest": "5bba30481d7e31bf5639e25f867de894", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54086, "upload_time": "2016-09-26T03:06:01", "url": "https://files.pythonhosted.org/packages/9d/74/badf677170c4c5d56f6f401812323bf30834e3e0ae7e5a49ccece95ac1da/python-shogi-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "0a5ccfafcaac54bde2be5bad2054a29a", "sha256": "22585206b6c6aa5d7ecddac0d9287e94041cb020469a423c3ea8c0b85ff556a5" }, "downloads": -1, "filename": "python-shogi-1.0.1.tar.gz", "has_sig": false, "md5_digest": "0a5ccfafcaac54bde2be5bad2054a29a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54103, "upload_time": "2016-10-15T22:42:21", "url": "https://files.pythonhosted.org/packages/4d/76/3b6fab7fe29d722b9ace27351cf84af2e33773e4f8cef58955acec1b1965/python-shogi-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "6b3ebddfd95fd81ef7090a9d6cd2f85a", "sha256": "24f8f23b5a48dd8d6b265d54056d77552213c54451d611f6cfa472fb7d8e00d8" }, "downloads": -1, "filename": "python-shogi-1.0.2.tar.gz", "has_sig": false, "md5_digest": "6b3ebddfd95fd81ef7090a9d6cd2f85a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54103, "upload_time": "2017-05-08T04:05:05", "url": "https://files.pythonhosted.org/packages/d6/62/decf3fa9e5749bc4090f642d00cf7946f2f83c0b609e75ff693ed0894b3e/python-shogi-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "c42355066e6c60f8b52b1911f3cf6a07", "sha256": "3b0eecd8ee9975da2bf163395c8bcc0c4700430989440b8abb761d7843aed639" }, "downloads": -1, "filename": "python-shogi-1.0.3.tar.gz", "has_sig": false, "md5_digest": "c42355066e6c60f8b52b1911f3cf6a07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54773, "upload_time": "2017-08-06T04:07:23", "url": "https://files.pythonhosted.org/packages/5c/d0/c3ac1bdddefd2a285b147552728c991298e1d18544aeb5adf0768191cdfe/python-shogi-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "bb69fe07ac28470bfa7fb7dcad0b00ae", "sha256": "227874b5ec0e53c073e7a44cc05e3d74d8a8ebf01649f137355bf485e1acc45e" }, "downloads": -1, "filename": "python-shogi-1.0.4.tar.gz", "has_sig": false, "md5_digest": "bb69fe07ac28470bfa7fb7dcad0b00ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54764, "upload_time": "2017-08-16T12:42:09", "url": "https://files.pythonhosted.org/packages/2c/84/f25355ca6e68f9aad05208670e35795d48d32622185e902346b711f53b0a/python-shogi-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "39304e586f830b537fa89d9f54f00ff9", "sha256": "38b88a4f1a73d5a7422e37cb29660abe4dc3c4210bfd5ff8eeb25b1191bcb801" }, "downloads": -1, "filename": "python-shogi-1.0.5.tar.gz", "has_sig": false, "md5_digest": "39304e586f830b537fa89d9f54f00ff9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54790, "upload_time": "2017-10-01T12:16:24", "url": "https://files.pythonhosted.org/packages/ab/32/1924c0a863c6818e48dc8c80e5fc566fa4d170fa72019571e042f3da1979/python-shogi-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "62cc05aa9acf1d192af863e99728f7cc", "sha256": "61214a923b63b079889c86cbb94ca402cdaf5f39a165795a1874ee492c3c9fea" }, "downloads": -1, "filename": "python-shogi-1.0.6.tar.gz", "has_sig": false, "md5_digest": "62cc05aa9acf1d192af863e99728f7cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54808, "upload_time": "2017-10-20T23:25:23", "url": "https://files.pythonhosted.org/packages/e6/75/6df7f9ce4478d75d3e4e234740c884c32aadf628ac4e7f40d684ec27b020/python-shogi-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "abaeb6dc2063c574c05f5126471bf505", "sha256": "568518d759b5a1e5a427c1fffb13802394fa467def0a34585623b3ca86777c17" }, "downloads": -1, "filename": "python-shogi-1.0.7.tar.gz", "has_sig": false, "md5_digest": "abaeb6dc2063c574c05f5126471bf505", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57707, "upload_time": "2018-05-30T20:49:17", "url": "https://files.pythonhosted.org/packages/2d/3b/747e3ab6e966d15a904cd5542d362673f5defab2d717c4f63fb099bd4ad5/python-shogi-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "6bc678c70878e85468964458fcf27e0e", "sha256": "948f635282c029b5fa6f5377d9835b096fab84a816d3303b1136608a8b5764b4" }, "downloads": -1, "filename": "python-shogi-1.0.8.tar.gz", "has_sig": false, "md5_digest": "6bc678c70878e85468964458fcf27e0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57736, "upload_time": "2018-06-18T09:24:24", "url": "https://files.pythonhosted.org/packages/92/53/1ba3cd3fe2c8768eff1cdcb366140efcec502dde86be758af5f8d3c2a2e1/python-shogi-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "6c14c12a62167edeb1c3b28c51b453ff", "sha256": "720c59ff2add4cda49ef6414394d1325c27648d82eac64342c99a79897cfaa8d" }, "downloads": -1, "filename": "python-shogi-1.0.9.tar.gz", "has_sig": false, "md5_digest": "6c14c12a62167edeb1c3b28c51b453ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52580, "upload_time": "2019-08-05T07:21:36", "url": "https://files.pythonhosted.org/packages/54/36/5d9d42b44880436e569a19f097e7bfe8f147b2bced1d4a473ad14056f336/python-shogi-1.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6c14c12a62167edeb1c3b28c51b453ff", "sha256": "720c59ff2add4cda49ef6414394d1325c27648d82eac64342c99a79897cfaa8d" }, "downloads": -1, "filename": "python-shogi-1.0.9.tar.gz", "has_sig": false, "md5_digest": "6c14c12a62167edeb1c3b28c51b453ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52580, "upload_time": "2019-08-05T07:21:36", "url": "https://files.pythonhosted.org/packages/54/36/5d9d42b44880436e569a19f097e7bfe8f147b2bced1d4a473ad14056f336/python-shogi-1.0.9.tar.gz" } ] }