xiangting


Namexiangting JSON
Version 3.1.1 PyPI version JSON
download
home_pageNone
SummaryPython bindings for xiangting
upload_time2025-02-08 14:14:00
maintainerNone
docs_urlNone
authorApricot S.
requires_python>=3.12
licenseMIT License
keywords mahjong shanten xiangting
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # xiangting-py

Python bindings for [xiangting](https://crates.io/crates/xiangting).

See also [xiangting](https://crates.io/crates/xiangting) for more information.

Documentation:

- [API reference (main branch)](https://apricot-s.github.io/xiangting-py/)

## Installation

There are 3 options to install this library:

### Option 1: Install from PyPI

```sh
pip install xiangting
```

### Option 2: Install from wheel

1. Download the wheel file for your platform from the [releases page](https://github.com/Apricot-S/xiangting-py/releases/latest).
2. Run the following command:

```sh
pip install PATH/TO/xiangting-{version}-{python tag}-{abitag}-{platform tag}.whl
```

Replace `PATH/TO/xiangting-{version}-{python tag}-{abitag}-{platform tag}.whl` with the actual path to the wheel file on your system.

### Option 3: Build from source

Requires `cargo`:

```sh
xiangting-py$ pip install .
```

## Usage

The hand is represented as an array of `list[int]`, where each element represents the count of a specific tile.
The correspondence between the index and the tile is shown in the table below.

| Index | 0   | 1   | 2   | 3   | 4   | 5   | 6   | 7   | 8   |
| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Tile  | 1m  | 2m  | 3m  | 4m  | 5m  | 6m  | 7m  | 8m  | 9m  |

| Index | 9   | 10  | 11  | 12  | 13  | 14  | 15  | 16  | 17  |
| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Tile  | 1p  | 2p  | 3p  | 4p  | 5p  | 6p  | 7p  | 8p  | 9p  |

| Index | 18  | 19  | 20  | 21  | 22  | 23  | 24  | 25  | 26  |
| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Tile  | 1s  | 2s  | 3s  | 4s  | 5s  | 6s  | 7s  | 8s  | 9s  |

| Index | 27        | 28         | 29        | 30         | 31         | 32         | 33       |
| ----- | --------- | ---------- | --------- | ---------- | ---------- | ---------- | -------- |
| Tile  | East (1z) | South (2z) | West (3z) | North (4z) | White (5z) | Green (6z) | Red (7z) |

Calculates the replacement number, which is equal to the deficiency number (a.k.a. xiangting number, 向聴数) + 1.

```python
from xiangting import calculate_replacement_number

# 123m456p789s11222z
hand_14 = [
    1, 1, 1, 0, 0, 0, 0, 0, 0, # m
    0, 0, 0, 1, 1, 1, 0, 0, 0, # p
    0, 0, 0, 0, 0, 0, 1, 1, 1, # s
    2, 3, 0, 0, 0, 0, 0, # z
]

replacement_number = calculate_replacement_number(hand_14, None)
assert replacement_number == 0
```

In the calculation for a hand with melds (副露),
the melded tiles can be included or excluded when counting tiles to determine if a hand contains four identical ones.

If melds are excluded (e.g., 天鳳 (Tenhou), 雀魂 (Mahjong Soul)), specify `None` for `fulu_mianzi_list`.

If melds are included (e.g., World Riichi Championship, M.LEAGUE), the melds should be included in the `fulu_mianzi_list`.

```python
from xiangting import (
    ClaimedTilePosition,
    FuluMianzi,
    calculate_replacement_number,
)

# 123m1z (3 melds)
hand_4 = [
    1, 1, 1, 0, 0, 0, 0, 0, 0, # m
    0, 0, 0, 0, 0, 0, 0, 0, 0, # p
    0, 0, 0, 0, 0, 0, 0, 0, 0, # s
    1, 0, 0, 0, 0, 0, 0, # z
]

# 456p 7777s 111z
melds = [
    FuluMianzi.Shunzi(12, ClaimedTilePosition.LOW),
    FuluMianzi.Gangzi(24),
    FuluMianzi.Kezi(27),
    None,
]

replacement_number_wo_melds = calculate_replacement_number(hand_4, None)
assert replacement_number_wo_melds == 1

replacement_number_w_melds = calculate_replacement_number(hand_4, melds)
assert replacement_number_w_melds == 2
```

In three-player mahjong, the tiles from 2m (二萬) to 8m (八萬) are not used.
Additionally, melded sequences (明順子) are not allowed.

```python
from xiangting import (
    calculate_replacement_number,
    calculate_replacement_number_3_player,
)

# 1111m111122233z
hand_13 = [
    4, 0, 0, 0, 0, 0, 0, 0, 0, # m
    0, 0, 0, 0, 0, 0, 0, 0, 0, # p
    0, 0, 0, 0, 0, 0, 0, 0, 0, # s
    4, 3, 2, 0, 0, 0, 0, # z
]

replacement_number_4p = calculate_replacement_number(hand_13, None)
assert replacement_number_4p == 2

replacement_number_3p = calculate_replacement_number_3_player(hand_13, None)
assert replacement_number_3p == 3
```

## License

Copyright (c) Apricot S. All rights reserved.

Licensed under the [MIT license](LICENSE).


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "xiangting",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.12",
    "maintainer_email": null,
    "keywords": "mahjong, shanten, xiangting",
    "author": "Apricot S.",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/24/14/feed8664343b14565d66c9bce398c169bb540465f10b975f9715e9935fd0/xiangting-3.1.1.tar.gz",
    "platform": null,
    "description": "# xiangting-py\n\nPython bindings for [xiangting](https://crates.io/crates/xiangting).\n\nSee also [xiangting](https://crates.io/crates/xiangting) for more information.\n\nDocumentation:\n\n- [API reference (main branch)](https://apricot-s.github.io/xiangting-py/)\n\n## Installation\n\nThere are 3 options to install this library:\n\n### Option 1: Install from PyPI\n\n```sh\npip install xiangting\n```\n\n### Option 2: Install from wheel\n\n1. Download the wheel file for your platform from the [releases page](https://github.com/Apricot-S/xiangting-py/releases/latest).\n2. Run the following command:\n\n```sh\npip install PATH/TO/xiangting-{version}-{python tag}-{abitag}-{platform tag}.whl\n```\n\nReplace `PATH/TO/xiangting-{version}-{python tag}-{abitag}-{platform tag}.whl` with the actual path to the wheel file on your system.\n\n### Option 3: Build from source\n\nRequires `cargo`:\n\n```sh\nxiangting-py$ pip install .\n```\n\n## Usage\n\nThe hand is represented as an array of `list[int]`, where each element represents the count of a specific tile.\nThe correspondence between the index and the tile is shown in the table below.\n\n| Index | 0   | 1   | 2   | 3   | 4   | 5   | 6   | 7   | 8   |\n| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| Tile  | 1m  | 2m  | 3m  | 4m  | 5m  | 6m  | 7m  | 8m  | 9m  |\n\n| Index | 9   | 10  | 11  | 12  | 13  | 14  | 15  | 16  | 17  |\n| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| Tile  | 1p  | 2p  | 3p  | 4p  | 5p  | 6p  | 7p  | 8p  | 9p  |\n\n| Index | 18  | 19  | 20  | 21  | 22  | 23  | 24  | 25  | 26  |\n| ----- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| Tile  | 1s  | 2s  | 3s  | 4s  | 5s  | 6s  | 7s  | 8s  | 9s  |\n\n| Index | 27        | 28         | 29        | 30         | 31         | 32         | 33       |\n| ----- | --------- | ---------- | --------- | ---------- | ---------- | ---------- | -------- |\n| Tile  | East (1z) | South (2z) | West (3z) | North (4z) | White (5z) | Green (6z) | Red (7z) |\n\nCalculates the replacement number, which is equal to the deficiency number (a.k.a. xiangting number, \u5411\u8074\u6570) + 1.\n\n```python\nfrom xiangting import calculate_replacement_number\n\n# 123m456p789s11222z\nhand_14 = [\n    1, 1, 1, 0, 0, 0, 0, 0, 0, # m\n    0, 0, 0, 1, 1, 1, 0, 0, 0, # p\n    0, 0, 0, 0, 0, 0, 1, 1, 1, # s\n    2, 3, 0, 0, 0, 0, 0, # z\n]\n\nreplacement_number = calculate_replacement_number(hand_14, None)\nassert replacement_number == 0\n```\n\nIn the calculation for a hand with melds (\u526f\u9732),\nthe melded tiles can be included or excluded when counting tiles to determine if a hand contains four identical ones.\n\nIf melds are excluded (e.g., \u5929\u9cf3 (Tenhou), \u96c0\u9b42 (Mahjong Soul)), specify `None` for `fulu_mianzi_list`.\n\nIf melds are included (e.g., World Riichi Championship, M.LEAGUE), the melds should be included in the `fulu_mianzi_list`.\n\n```python\nfrom xiangting import (\n    ClaimedTilePosition,\n    FuluMianzi,\n    calculate_replacement_number,\n)\n\n# 123m1z (3 melds)\nhand_4 = [\n    1, 1, 1, 0, 0, 0, 0, 0, 0, # m\n    0, 0, 0, 0, 0, 0, 0, 0, 0, # p\n    0, 0, 0, 0, 0, 0, 0, 0, 0, # s\n    1, 0, 0, 0, 0, 0, 0, # z\n]\n\n# 456p 7777s 111z\nmelds = [\n    FuluMianzi.Shunzi(12, ClaimedTilePosition.LOW),\n    FuluMianzi.Gangzi(24),\n    FuluMianzi.Kezi(27),\n    None,\n]\n\nreplacement_number_wo_melds = calculate_replacement_number(hand_4, None)\nassert replacement_number_wo_melds == 1\n\nreplacement_number_w_melds = calculate_replacement_number(hand_4, melds)\nassert replacement_number_w_melds == 2\n```\n\nIn three-player mahjong, the tiles from 2m (\u4e8c\u842c) to 8m (\u516b\u842c) are not used.\nAdditionally, melded sequences (\u660e\u9806\u5b50) are not allowed.\n\n```python\nfrom xiangting import (\n    calculate_replacement_number,\n    calculate_replacement_number_3_player,\n)\n\n# 1111m111122233z\nhand_13 = [\n    4, 0, 0, 0, 0, 0, 0, 0, 0, # m\n    0, 0, 0, 0, 0, 0, 0, 0, 0, # p\n    0, 0, 0, 0, 0, 0, 0, 0, 0, # s\n    4, 3, 2, 0, 0, 0, 0, # z\n]\n\nreplacement_number_4p = calculate_replacement_number(hand_13, None)\nassert replacement_number_4p == 2\n\nreplacement_number_3p = calculate_replacement_number_3_player(hand_13, None)\nassert replacement_number_3p == 3\n```\n\n## License\n\nCopyright (c) Apricot S. All rights reserved.\n\nLicensed under the [MIT license](LICENSE).\n\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Python bindings for xiangting",
    "version": "3.1.1",
    "project_urls": {
        "Repository": "https://github.com/Apricot-S/xiangting-py"
    },
    "split_keywords": [
        "mahjong",
        " shanten",
        " xiangting"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "454e6fe5d6620776b2ded0e07b1153355a28b4d7242ca96b85cbceb61acd921f",
                "md5": "399e81f31502b66a46eee59151c095a3",
                "sha256": "30bc0304664d9d0db5b513e1574e0453982da43564518ffd7af07b220db3efa9"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "399e81f31502b66a46eee59151c095a3",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.12",
            "size": 1528592,
            "upload_time": "2025-02-08T14:13:49",
            "upload_time_iso_8601": "2025-02-08T14:13:49.261498Z",
            "url": "https://files.pythonhosted.org/packages/45/4e/6fe5d6620776b2ded0e07b1153355a28b4d7242ca96b85cbceb61acd921f/xiangting-3.1.1-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9810d6b639473abdb0682f91b99901bc76a6bc115fd91589b674384ef9c7986f",
                "md5": "00c7ce9423d8293a9a3467ccdb49f520",
                "sha256": "5794621be7cd947f0f82ae6a6b339c06bf8add5ceb3409ec32e08e67020382c3"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "00c7ce9423d8293a9a3467ccdb49f520",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.12",
            "size": 1580964,
            "upload_time": "2025-02-08T14:13:44",
            "upload_time_iso_8601": "2025-02-08T14:13:44.924377Z",
            "url": "https://files.pythonhosted.org/packages/98/10/d6b639473abdb0682f91b99901bc76a6bc115fd91589b674384ef9c7986f/xiangting-3.1.1-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bcf2424a8a730b7540befd1f9a41bd1e8c0ae1580ffa049616d711c1f6af94c0",
                "md5": "48ba9c01f81a7cc5eb16bc26a1f6ff12",
                "sha256": "e17216f5dc3c8d3c9420a6961f00a00bbd7433cdb9ceffe32c9e079ad16806a4"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "48ba9c01f81a7cc5eb16bc26a1f6ff12",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.12",
            "size": 1556400,
            "upload_time": "2025-02-08T14:13:29",
            "upload_time_iso_8601": "2025-02-08T14:13:29.689562Z",
            "url": "https://files.pythonhosted.org/packages/bc/f2/424a8a730b7540befd1f9a41bd1e8c0ae1580ffa049616d711c1f6af94c0/xiangting-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b9f16f78ce06ce426dccb5f977124e2140ce8379ee4dd613c3779015e425b8f7",
                "md5": "64223e92a693a09ff567a2ec6101c89d",
                "sha256": "a57f5f850325811eb1cc97ace25f868cdd1a0aaa412362b8c59eaa9ff07816a6"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "64223e92a693a09ff567a2ec6101c89d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.12",
            "size": 1556530,
            "upload_time": "2025-02-08T14:13:35",
            "upload_time_iso_8601": "2025-02-08T14:13:35.332206Z",
            "url": "https://files.pythonhosted.org/packages/b9/f1/6f78ce06ce426dccb5f977124e2140ce8379ee4dd613c3779015e425b8f7/xiangting-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "60b5c9d5e8be0dfb3094607fb3793457170153c9e5aaffab1205e972c413d32f",
                "md5": "57e52a75b78b5ef16ab63617bab61898",
                "sha256": "eb7e6fcc70843976ad45506f3ac9319ea7270125caa823ea1e7ae310ec1fd8b1"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp312-cp312-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "57e52a75b78b5ef16ab63617bab61898",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.12",
            "size": 1732995,
            "upload_time": "2025-02-08T14:13:52",
            "upload_time_iso_8601": "2025-02-08T14:13:52.835114Z",
            "url": "https://files.pythonhosted.org/packages/60/b5/c9d5e8be0dfb3094607fb3793457170153c9e5aaffab1205e972c413d32f/xiangting-3.1.1-cp312-cp312-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "be987aa35ebd5e30084791ba08c0e19c46c5880d9e0de23e1380677ff9a89060",
                "md5": "01327695c584f48233236c45fa25813b",
                "sha256": "a97314865a13a8c9ad28f4974701c44d0f0cc7daf90b641c0462b64ecd26ed3f"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "01327695c584f48233236c45fa25813b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.12",
            "size": 1725618,
            "upload_time": "2025-02-08T14:13:56",
            "upload_time_iso_8601": "2025-02-08T14:13:56.151818Z",
            "url": "https://files.pythonhosted.org/packages/be/98/7aa35ebd5e30084791ba08c0e19c46c5880d9e0de23e1380677ff9a89060/xiangting-3.1.1-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e96f577a4940805ec5debca444cc8a8d626ffafccbeaaaf0a23cf5edf8dc4b01",
                "md5": "5b8888966382834f2e2bfb307e82aadc",
                "sha256": "a2b3c915aa642ac4b710f932df16ed8049ed3493cd0e097b5abb477522d94352"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5b8888966382834f2e2bfb307e82aadc",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.12",
            "size": 1417784,
            "upload_time": "2025-02-08T14:14:01",
            "upload_time_iso_8601": "2025-02-08T14:14:01.592649Z",
            "url": "https://files.pythonhosted.org/packages/e9/6f/577a4940805ec5debca444cc8a8d626ffafccbeaaaf0a23cf5edf8dc4b01/xiangting-3.1.1-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8ec4079e1644b4f0b54c4b56fee12d2b0932b919f99dd5c5b38ef364ec614a18",
                "md5": "a614ff0d5d2af5ad540937238e5dec8d",
                "sha256": "53f183047909ab3ecd6dea4eb22b556a795bb0f8b15ba1cdff5597a30f96cf27"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp313-cp313-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a614ff0d5d2af5ad540937238e5dec8d",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.12",
            "size": 1528327,
            "upload_time": "2025-02-08T14:13:51",
            "upload_time_iso_8601": "2025-02-08T14:13:51.411977Z",
            "url": "https://files.pythonhosted.org/packages/8e/c4/079e1644b4f0b54c4b56fee12d2b0932b919f99dd5c5b38ef364ec614a18/xiangting-3.1.1-cp313-cp313-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "84e8b974934b57f5ee037438d6f2d9f0dacc753a8fd9be22acf9970b4322cc77",
                "md5": "b34d6b1f7b4864f174c750ef7c063210",
                "sha256": "c6c1becd297a274e08218307a39074e01704dc74fb02ed7c186a9ef5af34f4ba"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "b34d6b1f7b4864f174c750ef7c063210",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.12",
            "size": 1580978,
            "upload_time": "2025-02-08T14:13:47",
            "upload_time_iso_8601": "2025-02-08T14:13:47.076754Z",
            "url": "https://files.pythonhosted.org/packages/84/e8/b974934b57f5ee037438d6f2d9f0dacc753a8fd9be22acf9970b4322cc77/xiangting-3.1.1-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "838c34faf6d29a5e4b412a4eef7d338e044f8e56a5d5fd1820792896a235e372",
                "md5": "7bd1dea010c51d87ed14f35a264cabdf",
                "sha256": "753b1d3f2d6aa80af3a7700307f50d565d9e33d159cc56499466d2a29fd17e0f"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "7bd1dea010c51d87ed14f35a264cabdf",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.12",
            "size": 1556921,
            "upload_time": "2025-02-08T14:13:31",
            "upload_time_iso_8601": "2025-02-08T14:13:31.840996Z",
            "url": "https://files.pythonhosted.org/packages/83/8c/34faf6d29a5e4b412a4eef7d338e044f8e56a5d5fd1820792896a235e372/xiangting-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "45aa62ebdff6eb4d610252cd2feb677a38f967513a1231e8d113869919eb82d6",
                "md5": "af26b7dd38a8c9d7c31b2dd86b16c2ae",
                "sha256": "a9e85d6945081e2998e2d6e96e94492d461c9552dae2becc335db95527a03152"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "af26b7dd38a8c9d7c31b2dd86b16c2ae",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.12",
            "size": 1556996,
            "upload_time": "2025-02-08T14:13:42",
            "upload_time_iso_8601": "2025-02-08T14:13:42.098995Z",
            "url": "https://files.pythonhosted.org/packages/45/aa/62ebdff6eb4d610252cd2feb677a38f967513a1231e8d113869919eb82d6/xiangting-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "96454c0e1c5e874036cb89707fc7af9711fe229e304b05ff8cfb4c0f292a2f33",
                "md5": "9cf07568979f90405a4adb805ef9932e",
                "sha256": "8606752751cf96613cd7c958fbcb0dd5a7000f5dd1c50a403b2f49487640784c"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp313-cp313-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "9cf07568979f90405a4adb805ef9932e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.12",
            "size": 1733166,
            "upload_time": "2025-02-08T14:13:54",
            "upload_time_iso_8601": "2025-02-08T14:13:54.523595Z",
            "url": "https://files.pythonhosted.org/packages/96/45/4c0e1c5e874036cb89707fc7af9711fe229e304b05ff8cfb4c0f292a2f33/xiangting-3.1.1-cp313-cp313-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "562dcca4a4d23d24f4156bf252d67b68cb98afa208b10d46d28e5ea27dcd6ddb",
                "md5": "d6e0e244e8fe364fa5f95ae1f01c927a",
                "sha256": "15e1decc5520744f289265d4972c138ae2a135dc9759da94ac7dccec817c4cdb"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d6e0e244e8fe364fa5f95ae1f01c927a",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.12",
            "size": 1725757,
            "upload_time": "2025-02-08T14:13:58",
            "upload_time_iso_8601": "2025-02-08T14:13:58.217782Z",
            "url": "https://files.pythonhosted.org/packages/56/2d/cca4a4d23d24f4156bf252d67b68cb98afa208b10d46d28e5ea27dcd6ddb/xiangting-3.1.1-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "625b31954f5a9d6c0229f98a86a499a32bdd9538058b636616ce701efd12d1c4",
                "md5": "4e7bf3bfa6852e3f3681c98190b95719",
                "sha256": "8a016aaf745e208e98c4f92fc0c500a9f91d4c57908a0033c431ee800a46653a"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4e7bf3bfa6852e3f3681c98190b95719",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.12",
            "size": 1417900,
            "upload_time": "2025-02-08T14:14:03",
            "upload_time_iso_8601": "2025-02-08T14:14:03.628959Z",
            "url": "https://files.pythonhosted.org/packages/62/5b/31954f5a9d6c0229f98a86a499a32bdd9538058b636616ce701efd12d1c4/xiangting-3.1.1-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2414feed8664343b14565d66c9bce398c169bb540465f10b975f9715e9935fd0",
                "md5": "8d93780b0ba964c0f9600d0b6c9619ef",
                "sha256": "e840a866706d63e70aed6d2304a6abb6ea3fb64b8749b65138d95b530ffe8cf1"
            },
            "downloads": -1,
            "filename": "xiangting-3.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "8d93780b0ba964c0f9600d0b6c9619ef",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.12",
            "size": 8847,
            "upload_time": "2025-02-08T14:14:00",
            "upload_time_iso_8601": "2025-02-08T14:14:00.034478Z",
            "url": "https://files.pythonhosted.org/packages/24/14/feed8664343b14565d66c9bce398c169bb540465f10b975f9715e9935fd0/xiangting-3.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-08 14:14:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Apricot-S",
    "github_project": "xiangting-py",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "xiangting"
}
        
Elapsed time: 1.13443s