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. Create a viewer from a RiichiEnv instance, a JSONL file, or a list of MJAI events.

from riichienv import RiichiEnv
from riichienv.visualizer import GameViewer
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)

viewer = GameViewer.from_env(env, perspective=0)
viewer  # displays the 3D viewer in Jupyter

The returned GameViewer object also provides methods for programmatic inspection:

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.3.7.tar.gz (567.6 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.3.7-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

riichienv-0.3.7-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

riichienv-0.3.7-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB view details)

Uploaded PyPymanylinux: glibc 2.5+ i686

riichienv-0.3.7-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

riichienv-0.3.7-cp314-cp314-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.14Windows x86-64

riichienv-0.3.7-cp314-cp314-win32.whl (1.4 MB view details)

Uploaded CPython 3.14Windows x86

riichienv-0.3.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

riichienv-0.3.7-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

riichienv-0.3.7-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.5+ i686

riichienv-0.3.7-cp314-cp314-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

riichienv-0.3.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

riichienv-0.3.7-cp313-cp313-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.13Windows x86-64

riichienv-0.3.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

riichienv-0.3.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

riichienv-0.3.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.5+ i686

riichienv-0.3.7-cp313-cp313-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

riichienv-0.3.7-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12Windows x86-64

riichienv-0.3.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

riichienv-0.3.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

riichienv-0.3.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.5+ i686

riichienv-0.3.7-cp312-cp312-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

riichienv-0.3.7-cp311-cp311-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.11Windows x86-64

riichienv-0.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

riichienv-0.3.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

riichienv-0.3.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.5+ i686

riichienv-0.3.7-cp311-cp311-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

riichienv-0.3.7-cp310-cp310-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10Windows x86-64

riichienv-0.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

riichienv-0.3.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

riichienv-0.3.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.5+ i686

File details

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

File metadata

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

File hashes

Hashes for riichienv-0.3.7.tar.gz
Algorithm Hash digest
SHA256 c6c125dd7c9b827944d0c4df10a979c3a7c1a40eaf42bf00e201bd41a03a2148
MD5 c853637021b4f3ae0b2764d31b71b2ba
BLAKE2b-256 f34e15919b2473d644b1ee1f49ded8d6204be5d527e16a75fdca60fdeecac7cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7.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.3.7-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 66473764cc3effe5e37787d8bdcd78f7b5cf527a587fc45164340a7a05551c63
MD5 94afb54433c13bfc84d41b9a7735b299
BLAKE2b-256 107c5f55c6c420e6a3e0c474bc8af4ccca6b9ef32b90f966cef7086259b3519a

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fdeaae69a93bc12369affcc8c1e08b6008c431ccb0d376321f0ee993f94a831a
MD5 9a7add76e265b9514743abdde84caa3f
BLAKE2b-256 41c8836b2bca5c864c6c0733227c971a2e40813e33d86528f8b1551af6993f50

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 901c45b596b47923527f17a6d3e83bf332796bce78202bee1bb77dfb51110085
MD5 042a1778ec275425caf7a324dddc4a4d
BLAKE2b-256 4a17290a907041cb69af5ba2ef8393b5580b11992cac1e47e166f3a9d0035da9

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3f1d45c65457829352478cad65b1196776aea3318bf2e9e859d0364bd805378d
MD5 e47a315f16f96b057e2af1b976d10890
BLAKE2b-256 a138bcf2b7bfad8faf083179f467d10a3d93fa3095b1d6280e52620911405d2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.3.7-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.5 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.3.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7d2b310e0332df5d041e57154500c64cc12c5b2c43c8d9ab77989f78fbe5e711
MD5 797cbaac0491a7e9ccee39314520e624
BLAKE2b-256 8372d8cd288463475af10dbb80de4d22d0454e4981695e955c71e290bcd2340b

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp314-cp314-win32.whl.

File metadata

  • Download URL: riichienv-0.3.7-cp314-cp314-win32.whl
  • Upload date:
  • Size: 1.4 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.3.7-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 bd882d2f40c5e003a5f4bfa5c1527de5f6d262985110dcad35c4218f24bbc8d8
MD5 3680f7b0e1f99e7cc0591a1bfcebfcdd
BLAKE2b-256 3215e28c98bb30856d31057264bc009826b14fbf20a81ee0070f6da43ccb807a

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 226352940f34122cd870688983845083741e9b22debe859595a0ef4b8f0d4806
MD5 4869999d19d30220f4773ff1525dbe20
BLAKE2b-256 f723dc8c412840d09e5714ef7d393acfa14bf1845e7cb9217705c2dc37343d31

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 99ded42cd035066359bffd341101f92e6b169503818d2d9217f81c12449b0834
MD5 82d8ec6d3cba214ab322f524f05cccb9
BLAKE2b-256 5783b306b483e460f167afb56a7dd30890d7573ef43e040821bd558f65a5fd08

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 831af8e54ff7f0e1903e5620ac180fe9f113c798ad7dbad63b2d65a7fc0a71db
MD5 65a0ab07d98697f8a7a779955f46933d
BLAKE2b-256 58bee1da8508b9d8f60e9f459cca6333fa4550cadc47dae3c72207f1d9e7c11c

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 493ec7ff0fc83ca68dcfe29447911e41358bd425c25d0f09b89b31cafa3946f6
MD5 3b7a9c7539d3817123972d03c1e82fb2
BLAKE2b-256 dd6bec742b09a218923b7ecaae914118768016b1061431033b61df91ffdc5436

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8690cab67c81ed348c4583a99eb823f594fcd6a53c2f7e91e63b1cccaaaf3518
MD5 9ca72e81241b999e722e3d17f07edca8
BLAKE2b-256 dc9a99a896bfcd3818471ae9332b0ea4e25ff6f58abb80df4347867dba6544c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.3.7-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.5 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.3.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 213cfd95f99e100c127f1a40a785e28d17ba91d0c12038df25801841e90686f9
MD5 40f7bc04b3a4078808e515ea1e924493
BLAKE2b-256 8b329df927f02ca7b19b91a392cfcd16afda3f4f1bf0fdbf21560a9f2aeecab9

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b75b68c57116676319f78b9d18a273edc25ae91c8a3e8a246e9b1ed3c8de3243
MD5 713b84180315684c0bca400c238dcc6d
BLAKE2b-256 1092160abbea67e7e4118cb1de9abadefdd6011e19339255b3a67ee4954bd028

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 405d6c3b9291461e304b328072c0b31e5604c5173194e4234de7cc0d429fc24b
MD5 6619e2554762c00743e14476a2513768
BLAKE2b-256 e4b131c3150c89fbf5a4d7dee1aba03b2deb036f0416ee09437009be0e013bff

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 04142dc4c19e118236d50bdfbce2826dc6ac704346ef3517a048e7c93fdce235
MD5 91327bd51ab70339487072763907659b
BLAKE2b-256 20bd2f6fb739ff405d85d6ea3738651b25379c0df77a6ec58b7e36272789555a

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7172d0cf21879c6271fb00a1d17dfc2c65dd56c2b3a73c81e674bfe3422544c4
MD5 1320db0192567783a348ddb328bb60b7
BLAKE2b-256 88ce4daeb135a468df5e0c90aae0f5db1df7cea016fd53c554e5da465c00898a

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.3.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.5 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.3.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 549609a9bcd4ccc71c67be20827e0843481b4182f76910be7bb2d157ee5f6aaf
MD5 75f3df015af2c8488c202dd899d32391
BLAKE2b-256 949d49712680baad063fe33081ce0b1a5f26c289be191d104a8683fab80b459f

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ec62d7d8de1120655aa7535e6df894be9bfb7c05d3337c781e4fd26d87baadcf
MD5 b0edd2b763690ef52f51c0012386334c
BLAKE2b-256 7c5df6656a6fd9e238bf30668c24998339315ccac492e84f7a3f6699f467fbdb

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 db34a68a6f1ecdaa2c531d309bdce6a31e9ecf5b84d502d72765a0121a20b8e5
MD5 1bab9b023a87932097288180792c0b9b
BLAKE2b-256 eea5a17419cc20b079c2e0f6a2c168f2746ef249189cb93054aa8946ba872379

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 bb00d84f2c4e4d48c9e74d5ec3e80250a6f3315eb67ad0bf84b296d1d4fec22e
MD5 e494feb2f982e07101e9f158a66ba27b
BLAKE2b-256 38992be492ce88b3c745b708c3feb88b6e50c9ac21bf0f9586d5aa1d3b4e56c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7fdae9763975e8283bd24529f5f041b8fa132504ce426ccc10b36e07151b9138
MD5 82b975c91838104404dd0dad1698196f
BLAKE2b-256 d1e5cda0a053c558e28ba11f39b2e9b5b8c950f885a9a6a5ba1ee71e8c53de8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.3.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.5 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.3.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e42189e3f0569f7b345c2057ce9c119e0e5c3fbf9076cc567c25404a474763c0
MD5 8431f047e00681ed4655581f3e4ebbeb
BLAKE2b-256 4d17b49e995a15302b6f80bc13c9c1a745ac6b574aa4714753974ee399aec1d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9f4526140c48b8ca44f6fb7a09d1f85b6fa0bfce7510c022b49097c69dbaf75e
MD5 4180ddb05e7062a57096b1f21922c541
BLAKE2b-256 98d6bd86ac11eea97788fb4930561d5a367e8d997229f533270b33b4999b8b77

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e7cea99f099fee2492861758283b6a2841a56484eea706daa9fdeb3c5b34b9dc
MD5 7612bfd8292d2e83ff833c869f2812b6
BLAKE2b-256 4ab79fd999f91db9e367c35c4be061277ba98819baec68084093ede38e7a576d

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 2024e78aa37cdc29af279c75d7810c61cc9d9e2c98bdc561331c91c9f51de19e
MD5 724b206d91a929d046bb5a4b886b8502
BLAKE2b-256 d1b9a4f48901d812ff2d13fb5bc5943187143a7227cacade542f1f1255ead0ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de0371c044c85432eef3fab97c7f9e8a7597a9e5bace305fc6aac039d796e862
MD5 61301394d9b6073b0923498b67c8b7cc
BLAKE2b-256 05d0e70fde253b62f5e8642e137dae677e76ee5a0e7ada0bd2ff3ee26cf1cec5

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: riichienv-0.3.7-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.5 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.3.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f3d7804630ec048568dc3279495aeadf7beea270e187b300424ac914bc664f7f
MD5 41085926a05452a9d2a0e2f27ab2e79e
BLAKE2b-256 e83a6e3aaa8139a454b73787240da69ca797600ca6f2a6a4b2d90ac4d2d73962

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0cad045944e558dbcab6d1fb304345dff85a693665658dd3bb8549924db9ee9e
MD5 ac385d298bee9b9fe9252c33e63ce59d
BLAKE2b-256 e5e633bdb96c71c14c5972fb8d56f233b994073c47453babc0e99b0ff6dbe021

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 577c4b15aa77f72deb4e689a247b8b8877bdf6ca5db4cc4f646665c6e4731708
MD5 c9c4b4c00c15191ac0ebc4d3cf3b3d05
BLAKE2b-256 528fa37a032a3b72a57fd7cabdc242a2be8dfd50cac78fe346976a71d3fda6a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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.3.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for riichienv-0.3.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 f1c54da3846fb4c2bde8c10a23db004641f29fba5813fba86903ab2a12e6cd46
MD5 f9341dd5c24a254e3a3c162d4153b382
BLAKE2b-256 3185012f79b07dc4c95cc1173afd092bb68b1dc31b5d4bd31dcd13dbcff62df3

See more details on using hashes here.

Provenance

The following attestation bundles were made for riichienv-0.3.7-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