Skip to main content

A High-Performance Research Environment for Riichi Mahjong

Project description


Accelerating Reproducible Mahjong Research

CI Open In Colab Kaggle PyPI - Version crates.io License


✨ Features

  • High Performance: Core logic implemented in Rust for lightning-fast state transitions and rollouts.
  • Gym-style API: Intuitive interface designed specifically for reinforcement learning.
  • Mortal Compatibility: Seamlessly interface with the Mortal Bot using the MJAI protocol.
  • Rule Flexibility: Support for diverse rule sets, including three-player mahjong (sanma).
  • Game Visualization: Integrated replay viewer for Jupyter Notebooks.

📦 Installation

uv add riichienv
# Or
pip install riichienv

Currently, building from source requires the Rust toolchain.

uv sync --dev
uv run maturin develop --release

🚀 Usage

Gym-style API

from riichienv import RiichiEnv
from riichienv.agents import RandomAgent

agent = RandomAgent()
env = RiichiEnv()
obs_dict = env.reset()
while not env.done():
    actions = {player_id: agent.act(obs)
               for player_id, obs in obs_dict.items()}
    obs_dict = env.step(actions)

scores, points, ranks = env.scores(), env.points(), env.ranks()
print(scores, points, ranks)

env.reset() initializes the game state and returns the initial observations. The returned obs_dict maps each active player ID to their respective Observation object.

>>> from riichienv import RiichiEnv
>>> env = RiichiEnv()
>>> obs_dict = env.reset()
>>> obs_dict
{0: <riichienv._riichienv.Observation object at 0x7fae7e52b6e0>}

Use env.done() to check if the game has concluded.

>>> env.done()
False

By default, the environment runs a single round (kyoku). For game rules supporting sudden death or standard match formats like East-only or Half-round, the environment continues until the game-end conditions are met.

Observation

The Observation object provides all relevant information to a player, including the current game state and available legal actions.

obs.new_events() -> list[str] returns a list of new events since the last step, encoded as JSON strings in the MJAI protocol. The full history of events is accessible via obs.events.

>>> obs = obs_dict[0]
>>> obs.new_events()
['{"id":0,"type":"start_game"}', '{"bakaze":"E","dora_marker":"S", ...}', '{"actor":0,"pai":"6p","type":"tsumo"}']

obs.legal_actions() -> list[Action] provides the list of all valid moves the player can make.

>>> obs.legal_actions()
[Action(action_type=Discard, tile=Some(1), ...), ...]

If your agent communicates via the MJAI protocol, you can easily map an MJAI response to a valid Action object using obs.select_action_from_mjai().

>>> obs.select_action_from_mjai({"type":"dahai","pai":"1m","tsumogiri":False,"actor":0})
Action(action_type=Discard, tile=Some(1), consume_tiles=[])

Compatibility with Mortal

RiichiEnv is fully compatible with the Mortal MJAI bot processing flow. I have confirmed that MortalAgent can execute matches without errors in over 1,000,000+ hanchan games on RiichiEnv.

from riichienv import RiichiEnv, Action, GameRule
from model import load_model

class MortalAgent:
    def __init__(self, player_id: int):
        self.player_id = player_id
        # Initialize your libriichi.mjai.Bot or equivalent
        self.model = load_model(player_id, "./mortal_v4.pth")

    def act(self, obs) -> Action:
        resp = None
        for event in obs.new_events():
            resp = self.model.react(event)

        action = obs.select_action_from_mjai(resp)
        assert action is not None, "Mortal must return a legal action"
        return action

env = RiichiEnv(game_mode="4p-red-half", rule=GameRule.default_tenhou())
agents = {pid: MortalAgent(pid) for pid in range(4)}
obs_dict = env.reset()
while not env.done():
    actions = {pid: agents[pid].act(obs) for pid, obs in obs_dict.items()}
    obs_dict = env.step(actions)

print(env.scores(), env.points(), env.ranks())

Game Rules and Modes

RiichiEnv separates high-level game flow configuration (Mode) from detailed game mechanics (Rules).

  • Game Mode (game_mode): Configuration for game length (e.g., East-only, Hanchan), player count, and termination conditions (e.g., Tobi/bust, sudden death).
  • Game Rules (rule): Configuration for specific game mechanics (e.g., handling of Chankan (Robbing the Kan) for Kokushi Musou, Kuitan availability, etc.).

1. Game Mode Presets (game_mode)

You can select a standard game mode using the game_mode argument in the constructor. This configures the basic flow of the game.

game_mode Players Mode Mechanics
4p-red-single 4 Single Round No sudden death
4p-red-east 4 East-only (東風; Tonpuu) Standard (Tenhou rule)
4p-red-half 4 Hanchan (半荘) Standard (Tenhou rule)
3p-red-single 3 Single Round No sudden death
3p-red-east 3 East-only (東風; Tonpuu) Standard (Tenhou sanma rule)
3p-red-half 3 Hanchan (半荘) Standard (Tenhou sanma rule)
# Initialize a standard 4-player Hanchan game
env = RiichiEnv(game_mode="4p-red-half")

2. Customizing Game Rules (GameRule)

For detailed rule customization, you can pass a GameRule object to the RiichiEnv constructor. RiichiEnv provides presets for popular platforms (Tenhou, MJSoul) and allows granular configuration.

from riichienv import RiichiEnv, GameRule

# Example 1: Use MJSoul rules (allows Ron on Ankan for Kokushi Musou)
rule_mjsoul = GameRule.default_mjsoul()
env = RiichiEnv(game_mode="4p-red-half", rule=rule_mjsoul)

# Example 2: Fully custom rules based on Tenhou preset
rule_custom = GameRule.default_tenhou()
rule_custom.allows_ron_on_ankan_for_kokushi_musou = True  # Enable Kokushi Chankan
rule_custom.length_of_game_in_rounds = 8  # Force 8 rounds? (Note: Length is mainly controlled by game_mode logic usually)

env = RiichiEnv(game_mode="4p-red-half", rule=rule_custom)

Detailed mechanic flags (like allows_ron_on_ankan_for_kokushi_musou) are defined in the GameRule struct. See RULES.md for a full list of configurable options.

Tile Conversion & Hand Parsing

Standardize between various tile formats (136-tile, MPSZ, MJAI) and easily parse hand strings.

>>> import riichienv.convert as cvt
>>> cvt.mpsz_to_tid("1z")
108

>>> from riichienv import parse_hand
>>> parse_hand("123m406m789m777z")
([0, 4, 8, 12, 16, 20, 24, 28, 32, 132, 133, 134], [])

See DATA_REPRESENTATION.md for more details.

Hand Evaluation

HandEvaluator evaluates a hand for tenpai status, waiting tiles, and winning results. Create an instance with HandEvaluator(tiles, melds) or HandEvaluator.hand_from_text(text).

  • is_tenpai() — returns whether the hand is in tenpai.
  • get_waits() — returns the list of winning tile IDs (34-tile format, 0–33).
  • calc(win_tile, dora_indicators, ura_indicators, conditions) — evaluates the hand with the given winning tile and returns a WinResult.
>>> from riichienv import HandEvaluator
>>> import riichienv.convert as cvt

>>> he = HandEvaluator.hand_from_text("111m33p12s111666z")
>>> he.is_tenpai()
True
>>> he.calc(cvt.mpsz_to_tid("3s"), dora_indicators=[], ura_indicators=[])
WinResult(is_win=True, yakuman=False, ron_agari=12000, tsumo_agari_oya=0, tsumo_agari_ko=0, yaku=[8, 11, 10, 22], han=5, fu=60)

The yaku field contains raw yaku IDs. Use yaku_list() to get detailed Yaku objects with Japanese/English names and platform-specific IDs.

>>> result = he.calc(cvt.mpsz_to_tid("3s"), dora_indicators=[], ura_indicators=[])
>>> for y in result.yaku_list():
...     print(y)
Yaku(id=8, name='役牌 發', name_en='Yakuhai (hatsu)', tenhou_id=19, mjsoul_id=8)
Yaku(id=11, name='場風牌', name_en='Yakuhai (round wind)', tenhou_id=14, mjsoul_id=11)
Yaku(id=10, name='自風牌', name_en='Yakuhai (seat wind)', tenhou_id=10, mjsoul_id=10)
Yaku(id=22, name='三暗刻', name_en='San Ankou', tenhou_id=29, mjsoul_id=22)

Shanten Number Calculation

Calculate the shanten number (minimum number of tiles away from tenpai) using lookup tables based on Cryolite/nyanten. Both 4-player and 3-player mahjong are supported.

4-player mahjong:

>>> from riichienv import parse_hand, calculate_shanten
>>> tiles, _ = parse_hand("123m456p789s11z")
>>> calculate_shanten(tiles)
-1  # complete hand

>>> tiles, _ = parse_hand("123m456p78s11z")
>>> calculate_shanten(tiles)
0  # tenpai

3-player mahjong:

In 3-player mahjong (sanma), tiles 2m-8m do not exist. calculate_shanten_3p correctly handles this by treating manzu tiles (1m, 9m) as honor-like tiles with no sequence potential, using the nyanten lookup tables.

>>> from riichienv import parse_hand, calculate_shanten, calculate_shanten_3p
>>> tiles, _ = parse_hand("111m123456789s11z")
>>> calculate_shanten_3p(tiles)
-1  # complete hand (111m koutsu + souzu shuntsu)

>>> tiles, _ = parse_hand("19m19p19s1234567z")
>>> calculate_shanten_3p(tiles)
0   # kokushi tenpai

>>> # Corner case: 3P shanten can differ from 4P
>>> tiles, _ = parse_hand("1111m111122233z")
>>> calculate_shanten(tiles), calculate_shanten_3p(tiles)
(1, 2)  # 4P tenpai path requires drawing 2m/3m, which don't exist in 3P

Game Visualization

GameViewer renders an interactive 3D replay viewer in Jupyter Notebooks. Use env.get_viewer() to create a viewer from a RiichiEnv instance, or GameViewer.from_jsonl() / GameViewer.from_list() to load from files or event lists.

from riichienv import RiichiEnv
from riichienv.agents import RandomAgent

agent = RandomAgent()
env = RiichiEnv(game_mode="4p-red-half")
obs_dict = env.reset()
while not env.done():
    actions = {pid: agent.act(obs) for pid, obs in obs_dict.items()}
    obs_dict = env.step(actions)

env.get_viewer().show()  # displays the 3D viewer in Jupyter

The returned GameViewer object also provides methods for programmatic inspection:

viewer = env.get_viewer()
viewer.show(step=100, perspective=0)  # show() accepts optional display parameters
viewer.summary()        # list of round info dicts (bakaze, kyoku, honba, oya, scores)
viewer.get_results(0)   # list[WinResult] for round 0

See demos/README.md for full API details and notebook examples.

🛠 Development

For more architectural details and contribution guidelines, see CONTRIBUTING.md and DEVELOPMENT_GUIDE.md.

Check our Milestones for the future roadmap and development plans.

📄 License

Apache License 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

riichienv-0.4.1.tar.gz (461.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.7 MB view details)

Uploaded PyPymanylinux: glibc 2.5+ i686

riichienv-0.4.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

riichienv-0.4.1-cp314-cp314-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14Windows x86-64

riichienv-0.4.1-cp314-cp314-win32.whl (1.3 MB view details)

Uploaded CPython 3.14Windows x86

riichienv-0.4.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

riichienv-0.4.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

riichienv-0.4.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.5+ i686

riichienv-0.4.1-cp314-cp314-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

riichienv-0.4.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

riichienv-0.4.1-cp313-cp313-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.13Windows x86-64

riichienv-0.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

riichienv-0.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

riichienv-0.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.5+ i686

riichienv-0.4.1-cp313-cp313-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

riichienv-0.4.1-cp312-cp312-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.12Windows x86-64

riichienv-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

riichienv-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

riichienv-0.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.5+ i686

riichienv-0.4.1-cp312-cp312-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

riichienv-0.4.1-cp311-cp311-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.11Windows x86-64

riichienv-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

riichienv-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

riichienv-0.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.5+ i686

riichienv-0.4.1-cp311-cp311-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

riichienv-0.4.1-cp310-cp310-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.10Windows x86-64

riichienv-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

riichienv-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

riichienv-0.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.5+ i686

File details

Details for the file riichienv-0.4.1.tar.gz.

File metadata

  • Download URL: riichienv-0.4.1.tar.gz
  • Upload date:
  • Size: 461.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for riichienv-0.4.1.tar.gz
Algorithm Hash digest
SHA256 98ac7e2612bbd200668065368d5694d00402e5c795a36abc2145d8101574e18d
MD5 ef70a1fa46ae2ea90cf4405e57301171
BLAKE2b-256 9a333657a5136b4512b5355658afca35492abfacb7e8140a3ee0fb31001f75c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1.tar.gz:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0f767524a63581d38938ac5bbc9bcccdca2e85e39a4987d99f4e7d555e5ab90c
MD5 11b933c26c7351949cb685f52c6ca894
BLAKE2b-256 3581973b200e757f6119ca776942d7159c2b1086b7213d03e59a4267933f34a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5f5982cf91de16997bcf1310fb8789226969a5cb6e48fd5f2eab92edb4f3e24d
MD5 e937561b4e6354e6d76e4922d742e2a8
BLAKE2b-256 50341145ead68eec0e626ee46ee7f61bfebaf24080f5bd3897ec1a3cf71b77b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 eb214adf506fa8816370c421b8fad94b04cfeabdf0f7082ce5af31fb5a00eea6
MD5 46bec8abb30c76e1649ddc71233c2ad8
BLAKE2b-256 a67972a4288a836b2c7072e6c248ea86558d08ed74418af118a68c98d4e477f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 61efe90e3b18c3d49491821eea61f776e49f4007d7ba7bd7c458c2cbbcda74c0
MD5 fd98b2f8e7c20671bb6de0552c3eb01f
BLAKE2b-256 95075b9d141891743311f1021446ed5f628740031c8c18df3cfe0e3b3ae9bdbc

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.4.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for riichienv-0.4.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3bc51ae82ae72384eb6ea54232487bd8bc23c5bbb0fd560e15ccba1a21ac9ce8
MD5 fe24e2bc09b701cf3b2b62b9c4db8ef4
BLAKE2b-256 a9315886bbff2dab28633d921733d5bb8579f1412fff4886a814fc8f44a5ec36

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp314-cp314-win_amd64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp314-cp314-win32.whl.

File metadata

  • Download URL: riichienv-0.4.1-cp314-cp314-win32.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for riichienv-0.4.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 59700e15adcb343662938a28690874c2a39598ce3bfa646951784f854761f95f
MD5 0b76cf1ccbe12ad3237df8ac940ac108
BLAKE2b-256 9df9d44103e76fa112996bee7f2f4041c80573ed93b9ce8fcd86af2f4bf518ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp314-cp314-win32.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 969df6c393f93422a68e5c31f63f3d5552257b63931e14125bbd544567dcb1a0
MD5 367703f466093196dd81e9562cdb78a2
BLAKE2b-256 fad89a62a76382222776bb9554e4ea478f2c992c57a0a9d432f725436c70e4da

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 784807822feac76f7c4e4303933158a9941d4b73ef73cdd31c882c3e0bcb65d6
MD5 32ae506b3ff5c6047983fb715791b241
BLAKE2b-256 58d5c88fa06f8a76349e92ee7ac87311068308144c6802f50f92ec7106a90953

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 618b64aa7d3b429d13a975b68856698635db23da462ad6608fe696c949242f0f
MD5 33f5115348385dca0ce7c322b1e82eda
BLAKE2b-256 c15ef351d72a76386cddd62d47457919b14d1550d32e6f688a1fb650315f3840

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 31641b0c0ab7119831f4fcf3a103fea85e24abd94a47e70c919152a7d20cbfcb
MD5 b79a7458d5510ccc3bf8eaadcd579af9
BLAKE2b-256 7fadf4afcf660fcdc78123999bf447d718622ca6b138590b6c43adb226580ee1

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 38ccc2d892a9ddc6fc85e1e8e3068fcde0e26187b008e81349008b013de8def1
MD5 a5e63d610fff361dc5e42c438b74355f
BLAKE2b-256 4cc63f837a577dab37a38cdabddc7a5e4dc283435199004834c8affd4cc4dfc1

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.4.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for riichienv-0.4.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ed80b564c92c2fb870fd0151283cd06c1375507b47eb06d1df86c68f4b6cc67b
MD5 9bf5dbf8f9ee5af290320083c4fd466d
BLAKE2b-256 6bd8047f5fa688201639ac8672cf3aaa74518fdcc5c671808bcd85c395b0276b

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp313-cp313-win_amd64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 710a75a93238c691c943e19b3b1d87f2b4e997965ac9c41b193823cf3be01271
MD5 8c0cd1efad57441ccfbf5146ef83c3b2
BLAKE2b-256 91af7bbd37b6500921ea65330d084bbac7a446220bca29460dc9b9ec964153e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fa9c9a85ff26b9b2a17a6bd70a30f0896ff08d6cdb59e952cf677bddc9524aff
MD5 79b3d128f89cd854e6fe20e1397206f5
BLAKE2b-256 e627c500e2f7cf49ad8164d6ccf4fc7c47bd5d39a0bbd68bb31e16a0df4ae623

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 e5686c1e71b9843f5e567f5b7979ccea0684cafe8399e836b7de4295fce94479
MD5 7e202e8b7839038656b7ddc5849034fb
BLAKE2b-256 29cdbbe38eb37861b4c55018762eefa612485d4672a87f3c2234b48f7166371d

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1cd08506620169f8b9b53a5da75e9cb74bf86629e3388d61b29a6ea28e734278
MD5 35c48668e7ccd8a103309c09b969e1b3
BLAKE2b-256 34c1bb7d19121da41a38103748832e2e353d216a154b1fa6cfc70b4dabbf9489

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.4.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for riichienv-0.4.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 28fe992d624faf14a14ba78f3cf6fc8c3be669a5ec6602f160e914fe2d168797
MD5 86ca86bf602984335aa10c9322c4d53f
BLAKE2b-256 1b89691a5e96b43318fbed94ca3f77a6278750c6952b12f1c6135ae3f0c3b402

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp312-cp312-win_amd64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e80fa22999a6c3c6134fe843991201a5ae11c8668b904da783631a2d82f5e4b8
MD5 b1eec6871de19d564e147935dfc45bd0
BLAKE2b-256 268dc2d910d94224e757a11274b1837ec08edafe8d9c725ef46649185128b4c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 61c11c77e3b4f1588af5089dfb18848cc087ef69a4765d9b0782a7a236320ac7
MD5 317d177374d5414989568548275069e7
BLAKE2b-256 ca6b40025aa53957fa9d070c021f2ca8c337d727ce14efac1a762163926c1359

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 82db958530ddd10fe79e6decadb8237aaabc07d2e4e2be766548ffbfddc6b000
MD5 ca37e9e4307b0772f240e4f28c38cf9a
BLAKE2b-256 d9dabfa7cabccf4c5fbbe5111f1af4c4fcf6fcc1b3975ad288d4e5e5ff63c889

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06a138007f9e74eee9c224a8777f5325b158ceae9023e2371c9412a438249223
MD5 c1eecec210b261f1b0b0104006223691
BLAKE2b-256 3edb34c220705df86a54f1e1c7ca78b46ad920168057c19c5c7fb61048368565

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.4.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for riichienv-0.4.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0ac2c8a863cf1f2999020027d9799ba63db9136668bd6eedd7415da439007e4d
MD5 fc9ed94573892db3090accb92fa7078f
BLAKE2b-256 1795c8a7d11b5ba5013fcb1f7a96fd2550767ee6c89e0318b0e970cd107ec005

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp311-cp311-win_amd64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d3bbbdb7e85f4cf33ab1808f41bc466cf4e2357dcac834fec7b66e7fb82894cb
MD5 0cdf472efbb64993688022bef94d0c27
BLAKE2b-256 13fd0d4a646a6511f3ce24183bf9bb4807b960c1e07e7043ab5a163c8f5d81ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f876f98b2eab6645b46f2fb4778d3f759f6ceb68ba3224a60fbdcb9ee1fd0b40
MD5 035d8f29668cd02d46c63f2e28c77db4
BLAKE2b-256 670542978c483c81266fc2e3954ba5816e1bdaf10d4a5fb03f221cc73ad98865

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 d22422cc7d0c96b65a9787d9091f76f6c6cb119981d67c645f376b349bfb6812
MD5 a82dd7ecfab87ff8921eb19bf7f133b7
BLAKE2b-256 3b25ea97c20074e12db591fe1cdbaf305690143a6229fa7181c22043bc2953d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 86cd48bc7811b297c36265594d4267940f778f1c1dfd459ec1b335a0cda95044
MD5 937b1b51ee5f6938cca5e6efb91e8021
BLAKE2b-256 b7b4fd36c339640b12f739a98a7e5cc90bfb55aeb89302568ea527eb45492fa0

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.4.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for riichienv-0.4.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a9fb1e34cdf2ef3d9e1c9f2fbdb9842441d6412557ea3c75ba38a7ee984e9685
MD5 601ddd2fb1f707ccaaa581277cafde71
BLAKE2b-256 71da394a5fbee6cec385e72c7f53fa6ce756a406ecf5876fcea1b50e77e0fac7

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp310-cp310-win_amd64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 94628fe44aa14d80e36a661a5e5f23065de29c805999ef41493b37500de2d9f9
MD5 7eb60bd5d602a0ad1d90ccdc69e7de6d
BLAKE2b-256 4a9ff4c785aca0ca767ff372fea8bc97b49c57be02e4300d675f993cc12d1a6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bd72d09fb5e37c1e249928984601b916e2eb98c203305fd6c61561f7afc46fcc
MD5 8494eb9b4d624555025ae93c3f7f1494
BLAKE2b-256 357266081a577c9cef86c92b918ae6276a4447e8ac859b42ee7c90a9effc99a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riichienv-0.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 8f66ffba9755fa368f75bbfef70c4a06742fbfe5a7732f9fd91ed187b5f31d24
MD5 d65e00b628c96f198375acbf567d9883
BLAKE2b-256 5562cfe8431630d5e6f449d07ca1d43c6aa8ac4a63fc6985de5c27f9a7423a82

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl:

Publisher: release.yml on smly/RiichiEnv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page