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 (wind of round)', tenhou_id=14, mjsoul_id=11)
Yaku(id=10, name='自風牌', name_en='Yakuhai (wind of place)', 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.6.tar.gz (560.3 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.6-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.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

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

Uploaded PyPymanylinux: glibc 2.5+ i686

riichienv-0.3.6-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.6-cp314-cp314-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

riichienv-0.3.6-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.6-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.6-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.6-cp314-cp314-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

riichienv-0.3.6-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.6-cp313-cp313-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.13Windows x86-64

riichienv-0.3.6-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.6-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.6-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.6-cp313-cp313-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

riichienv-0.3.6-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.6-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.6-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.6-cp312-cp312-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

riichienv-0.3.6-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.6-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.6-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.6-cp311-cp311-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

riichienv-0.3.6-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.6-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.6-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.6.tar.gz.

File metadata

  • Download URL: riichienv-0.3.6.tar.gz
  • Upload date:
  • Size: 560.3 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.6.tar.gz
Algorithm Hash digest
SHA256 1cb5296362f761bcae96e3e5ffcac389408d3a44a974e69b149969c675016284
MD5 7d5d7b07adc5005e57faa450b4495c6e
BLAKE2b-256 99f335dd3203e1bcd40d0ff0fe05be9349660e59303f724832e089ffb608de16

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4a3e1d311be6eea874677ab3a4e344208ae13daeff0d99a2a627d5dc89eb7fb3
MD5 25933dc77f42f3b33a30102145714b30
BLAKE2b-256 0a712fff6180f06348c0708d5688879310335b9dc2c496b76a6f4bf8f82fe311

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e7c229fb4bc1e1a5a9db7438f30cd4703d4b739ab48da77b3dc2b10ba8d9e86e
MD5 1cddd6201293e57b082a038db57d3d07
BLAKE2b-256 4f5e6655831fb5540993127955216221dde559f53ac5cb82698ac77360125589

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 f04e72eda9996d2e7182d855f3e7ecff8a19039224293cf09b6b71ef9c99afee
MD5 6d153e893ac186470aa9149fc394126a
BLAKE2b-256 0f8da3266fb9f73fb96492740dd6b2b316b40dae76d44eca7ba9c3ae02ead79a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 710618e94373b89c5e363826f110f7d6ab8b91abeb606d5c57db50fdca7ee5e5
MD5 6922be315b6a895c5bc5b0c68541a787
BLAKE2b-256 0ca05f059ece436fb76714dc909a406d1ef67ddbc2ad01c1f93562e0447f6609

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.6-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.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 54d253178748566ff2fd19c3f54a9a7f6dbbf881a9e334f12afcf6ed11849d74
MD5 20fced6704c526d197886d19eb7d9a90
BLAKE2b-256 9dd1ae69fc7a0c4a44f1f26de0e26283164ff834b291c5fc104334edd7296ed2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.6-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.6-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 b6051b1acc0e87e22e840cb121309d0e577400f1193abfea7cb480850fc4ab41
MD5 c6387ee28c1ace5153ebacc344592d51
BLAKE2b-256 2326321de89c917185c313b7a3e118afa6156c4bd1979c19db71f490a4576e6a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 39121656e20744c3c695f4c40f01185c6d1b9f059cd9aaed47254b409391af90
MD5 ffef7d8e63fea582d64ed5a591475017
BLAKE2b-256 cea5dc5c885fcc78a4069dc769142fcaf60f99ed52f43416ea53d4b9a30f3cf9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6123d4e8ba115b426f1269bf4bb4541cb6f51368106abc08c97f0dbcaaeb709e
MD5 51da26dcccc9bee4abcee4869b216645
BLAKE2b-256 9a563f4a9a9e9d65bdb28250bc9eb115ff801ad53505188b34964c3038f9762a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 2687e129c4165c0e461912f61825d7a584c881b5dba438632388915b25f0ded2
MD5 7a08b67ecf84ac43bf6d42e63d631cf0
BLAKE2b-256 b4ead57623d4383200d6d97540635dbb01e72b4676687eb7fb881a0b1d1458f3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a16f85ae57af9279fbfc342c43db8dec8e78f6076dfb34e379da3935c7c1ba51
MD5 dfc6979bf9645492e46fcd94d0f3e37f
BLAKE2b-256 1abab20a5fc7dd19f8954eb13d1d600623df149a1577931d33c5ac159a409aac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4f9fff727944d51e06ed958cabcbcc014653f2b963243bdbc37ca18ae2c35180
MD5 0d5032574572493ae0b67cf393085f37
BLAKE2b-256 4d8eabd18d74a0fc358122e8b7eb2425fd725ed6484aec909ce15e194ffe5232

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.6-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.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9a81a9b746595e552029e66c25ca6f4a4110ae58936d27f29bf4136afc540dac
MD5 6e767dacc248c1c6c3b90816eace2f8d
BLAKE2b-256 f9488efc6b5e9a891027ea2f97e46cdb71c055b962441819fc4a2950fff75d01

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d4305770b4f445640221608ec7eec4881b28ed73e94b93e5d05f40c582a631e
MD5 934e4c4db2e8612745865272d68a81e1
BLAKE2b-256 d1c3bb47dffb389495774e76c3b35029f5732fe2c03e70de2a96efe9e66bb13e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7cb2cd2b30a553af02cde337f5ebd7648271d97fc99abab5f13f15da49674131
MD5 5ab998896c10c1aa0b57e58580d31f8d
BLAKE2b-256 068285e6e22a9132693cb70d961e7f31f3a8d9e7446ba17b89767cc430937d86

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 280fda3780efcbab164be88a0d8ae9f974b626ff8613a4325a8a527da3349034
MD5 6b1d523fbe7a48134f2f7d0c36ee8b33
BLAKE2b-256 0c3679455c4ec7dd075cbf825e825f20cb363f5e17ba43fe331ff88c383bb724

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 751e9133fd9df0f36f2aca85dd5d3ade9acd9fbba7ca43123020d3ebd315fb8e
MD5 e6c03f62075f74c5d233b41f8f100d2b
BLAKE2b-256 ee37ccf99cfca49bd02ecd45f7ce7bd9320ff2b8441a0dee4b646bf660cebfc1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.6-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.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1db076e3838d241968bcd8a3286befb46adaa11cdb499b4f8e33821e119f99e1
MD5 1f2cc5aa3667de5b0a0d810e851c3c79
BLAKE2b-256 4e6fb8fd2bde1cc0a7d675c540aed7aa84f91f26d0353375a6d37c6433fd3969

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 30ef27774c199cff5911a7f9e4521b7bf577a2a9df1413776644b10e96ca018f
MD5 eedb3d262b2d2534bc643715a3b77266
BLAKE2b-256 ee76695f99c7430d69ab2f2aba7d0e48a447589fde01d7df3009fb4e2df3778a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4cc5bcac6407fc15fa8650cc14e644309087ae7aba503a89f4ea785cc43d72da
MD5 5d681b5a164ccf589273b3b672e38082
BLAKE2b-256 bf217d85b9f5c664c8f0cbc149fc4d570a172a028584f779940e5c8bf9f9c893

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 ee4a110bc07393d15eb0c611ccb662d6a7e65ed68f9f1a88ef36d8720c765ad4
MD5 f03118ffbb2a94f0e9be2e7908224c7b
BLAKE2b-256 79aaa8c1e2ec481fa2956e31075f2a09c9e0eb819062be357a8cae5672bfca0c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f6ab4835f7b2e0c332296d28c06975114730965133ef62ad3e608bbbe8967b9f
MD5 a7efecee4402a2415f0bd4531deec509
BLAKE2b-256 16f3a5a6dad98882ad975a4dbecbbd450745220843b919d1aab9226c851cac69

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.6-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.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3f73ff6a0542db675d4181c18b108bb9a32d75576847e0a0afb0c59ea3bff405
MD5 e3eb827b1e35dee0c80bc687f744e1b9
BLAKE2b-256 dc0631fa8b628cc02bb406ecf5d590e9883556d813f491803b51e9b671ccfc5b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 360fb88555b4d816f0f7f673e34f4507b9a97a85dcfdfa4001732fd1691fb9c2
MD5 16eb8a12e89f6be2f8721fefc8c3742a
BLAKE2b-256 7cb89728d29b7c39a8410bf60e35b82a24724d5f71dfbf2761a29b5bcaf727ef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 090adcb0ce652c3d0d5b90546544d6b4bd66d21beed5ea2722b28f0e877b5e35
MD5 eb789751a0e6045b28a132d223518fce
BLAKE2b-256 87e1e29e2bb72c6f93dccee2cddb628503b6be8d45b4f265490c48838c452463

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 2aeaeb9873209cb2666ba6456f197c5bb6ed404c04dccb61079bf968c436ad75
MD5 35dd3f90e0fd6a4bebd318c1c5d00876
BLAKE2b-256 dee95ce07a2f20bde397ce992e6e38033db2468978aa87d49b993062103d5a3d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f8835aee8ecee33d1a4885785a05cbddd864f49355af35245a1292947a958144
MD5 54d2ceaf4635cfe0b86de71ed49c56d1
BLAKE2b-256 1ae9f61607afdfd0d3fc255622390494e7793f24e985d661b80d88ed8db943f8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.6-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.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 53314afb444b380cea6ceedb41106540f94877ff8a096528ca0bf5e3ee0c6229
MD5 8a7209c33b5c98c438c31e4a1fa8ca53
BLAKE2b-256 96cf66b9879a1c009067ddcc96255d829e7ef31cffee774607359599fce872aa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8a3244cae394d89a42a82dd942d0e6e6b0dcd33989818a2ccefe3b1916d2accf
MD5 37aef560308def28743738af745f520a
BLAKE2b-256 8720b976370c9d14924a5e6f7e75743677381b840e244057973c194d1be497fe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ec3be9484eab1ce62435c10911680169bc293019a96825f6d4eab2a7df15a861
MD5 be203d6c97b817684402245a2e9a7ac0
BLAKE2b-256 1a8e84c64735b9b1ce83c255f8914d92ce03382f8fe5199177992551e18b33d1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 e9b4a6d073436fd935bb031b7d39f3e9b1b22f2828eba45014e0a90487eca7c0
MD5 08f15c646c499cf20c192be6aacc01bf
BLAKE2b-256 9831f8b264a4e5e6129c1a6ac0c65b6d84098cd98f33ff9382139aa1243cfc88

See more details on using hashes here.

Provenance

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