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.0.tar.gz (461.4 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.0-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.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

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

Uploaded PyPymanylinux: glibc 2.5+ i686

riichienv-0.4.0-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.0-cp314-cp314-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

riichienv-0.4.0-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.0-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.0-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.0-cp314-cp314-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

riichienv-0.4.0-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.0-cp313-cp313-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.13Windows x86-64

riichienv-0.4.0-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.0-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.0-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.0-cp313-cp313-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

riichienv-0.4.0-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.0-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.0-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.0-cp312-cp312-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

riichienv-0.4.0-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.0-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.0-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.0-cp311-cp311-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

riichienv-0.4.0-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.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: riichienv-0.4.0.tar.gz
  • Upload date:
  • Size: 461.4 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.0.tar.gz
Algorithm Hash digest
SHA256 da78fc6431ade3082cea0c1afa0a59fe97f1d9b1ffc7c118b26a29fb376e7f19
MD5 9b1ba7cea4630f70ae64c8867a100552
BLAKE2b-256 58262adec5233bee8badc3e08c45a14ff34c6093f4dabc4e96d4a4f6b9234047

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 06c4f3dbb30a03d325b93c9c2351008161d8c6ec0fb57be32502d5ea20a04081
MD5 b988c9e17e9c72f22726b9ad2c63a75d
BLAKE2b-256 497fd08b3c50035385cfa39dc0abcd515c2665ae9303738603d4267a2d1b9eb9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d66beacc274e02209bb9a0f16ab941f74a7a9ff334fa616d9ba2c86a02bfb5e6
MD5 ba8d96aff863e79fd03041849966174c
BLAKE2b-256 e37942c87de91602a8e713d52410b00d20cd591f50541a95ce0a763447cfed93

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 cac6a8fc70515c82f125a5b87881712e0a33036a0ee3f9d5ca64cda3f5e1ac92
MD5 4c4da1b06f96bec24d0f8318b10cab27
BLAKE2b-256 0cf8281bc26912f90b7df3576c889745869e827e46e9e8671135973dd5e28487

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9dff47f8a6e1a8a5570defcd4f97653d865cfef877c8d4da1a4d4f646f0333c6
MD5 f611c0d8a53bb761d9cdd3b9b5be3b2a
BLAKE2b-256 eb02ed517812c612b0543439771913c41cde8d3ff4150cb458d03d13a376400e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.4.0-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.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 95f38eed27726319b759da2212dc3107e0e38d36eeefee8ac287992c8ff66884
MD5 567f01917416cf4adc79013ec950152c
BLAKE2b-256 465d98be3bca2ebc2e935082c48a6d839b2b4528907128d161a6ce6c033fc66a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.4.0-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.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 350fb7d3838fcb17803c5fca2a706d4a65daecf9a858c4152129bf2860a9dfb1
MD5 7b48e6b1de54f0b7068abb77464c08b2
BLAKE2b-256 feca6c0aa654c430749489a8f7299eacec6094d301336a70ca99f58be41ee5d2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0a4faad9e78398958b45551dd298884170777eee6f727c2e70d12bf34c59099b
MD5 046aa5855518afd569e7120155dfcfb2
BLAKE2b-256 d930234a27b7cf14a7bba6c10e483b33785f10a34d7723f285740dc6f04f8e4a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e56eedb1be89a927954078dddbfec41c060237410890608ef5a28e9b43b28aa9
MD5 62206201df01ff5e520396a6748b4b26
BLAKE2b-256 e579d513386c9072446d91f396b6aeaeec498575f1f9876080466b288f55f31a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 98bd28f68d6e27eef7cef7f23d6b00403c6bca05989055268fe81e3451ffaea9
MD5 34d91aa8459956449c22c87d8132e0b1
BLAKE2b-256 a1efbc47bcbf8e7ee387b1ff23d9076d1ee5ec80937b84b937877dbd110a372f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be503796890b65d97a5fdfa2701b2249ee6b726b6486f8ae2f93afbb31e26013
MD5 7492cb7ab8fbd3234d30493a55b7c325
BLAKE2b-256 c720c2f3f84576198d77d594f423986077cc01a68b6ef0e88fc773b381c29b30

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0eb1c901515bebf9bbc47a5cfd8c210f0a1fcd5907ab309580d00147af0846ee
MD5 f4c73d77514417a55d0f4c001b0e9812
BLAKE2b-256 15d9736a2cfd79c84b8f37eb5c4ba49ab365a19b28dcca25a9546b5fe9225d1f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.4.0-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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b6c6a4fddc389bd4c1cf8a55434c93b0e1c182c33cf3b4030b55f70d929bab4f
MD5 7267485fb88303fb7f20c5855f64b527
BLAKE2b-256 7c8037805c669eeaab48cfd069944b9c2f7e578087e55b863784e56b091c609f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2202af06f19c55b74b4e86d2ba96a9567ec3e75f0e26c70e803471a8d07fd893
MD5 73df4b972b0b44291c3d8ac187125b0b
BLAKE2b-256 0c1be11f02e8ffef6ba58fd137831c5bde3881b36fcd896152059e3feba5ee9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ed4734d4ce6c3d747684e0d8969a4eaf0c8a0caeed0d0782a05a2e863bff3e94
MD5 ca91f449c0144696592b575e42af3b74
BLAKE2b-256 3c2d9453d453f5f219a24b68736335632de3fd129d665445026297e3cb925ad8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 b2db40e6ebf448b1b3eb77c22a7d157e7e655ab4f8a053b3afb91563e958c537
MD5 9e4b38e5a1c396c14a3b0c98452fb212
BLAKE2b-256 d16b3562145ab857dc06a4012b28f3c6972d2356b2f8e21c0d137b07fdf5573a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 35894a21fa08e7a25cd6d10e77aaa9bcf3bceeb20f8fc4089ed3608f411f56af
MD5 69fe33c569f8c04074b78ffaa4a2e7c4
BLAKE2b-256 40c4e38da32f78e5935767c9a1b6b11b167ae6d662e12d82924b36527632d403

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.4.0-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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6072a1e1301a4fb87dfdd91f4624b08cea1da5ad3d9867cd45b8cf5e64b68bf9
MD5 936f46919af0d2e15ee4cb3fa2dd07a4
BLAKE2b-256 bda82a47503a6245e5fb9d4d94c6180405bc7430929672f7cf023b05267cf75c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 34ad92d769b956f5f7224785bb97ad4cc2adc7da773130efa33617e0341f7cb0
MD5 5c7554f51dae2a77d39cb9d61c24ae75
BLAKE2b-256 1a130a0e59b1c391473769f77383f8a5847da3f65d9cc6bab2e643e7b86bef35

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 53bb2444bc18fabecc3555e30de86215cb6feff0df95575a90bd0c9c6322acc7
MD5 6133e2d68ebdf44e3441b8bbfa170891
BLAKE2b-256 89a807cfd041f895f8127fc4e9e6db17bca33a145dbac0ecac07278be1d34a6a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 c11648f0c8bd129c41f9abd5893c8b1f792b8ebbb5f14c29f4dec4e4778054a3
MD5 d7f4d0a23a4e19c8cebfd2b63bc0b849
BLAKE2b-256 09a4cfa6e5de98d5a36a197c6581a305c2d42bf2f11d454dc812f778fb9e0c55

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 19d40e5cab3b9f9444f2ed8d4f5e9b68cd6d9a7e83656cbd82991fcb4a7b5393
MD5 2d129f48ebfb864a9dbef7c1cc706f0a
BLAKE2b-256 ea802c5f83c58bc9faf9c5bbd6be33dcd796940ea336618c40d39b6a0d4a0174

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.4.0-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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bcccc636729942f9ae38c6cc33ebd5fd8e10803fdc9ee3d2d137421629128280
MD5 8a8cf0ec06c725909369daa618c25510
BLAKE2b-256 58665cb58f944dcf0f75ceed8588be17cb5bc3ec2efdb3b34ea8381eedb48746

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0dfe6c2f151feab6ac1244b4384dba3ab78953faa5be0e252d9be0256c54acae
MD5 0f4a2deed1dbffd1eb5fdbc6395b626c
BLAKE2b-256 8e54ec4ce8f3205d42b117e73a1cc6fbd604cc0afc57a7133ed63530114b7a1a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a76611f73fa77fdec49c760feceb2e44db556dd125b6b3f1cfd7fd0fccb82e75
MD5 b250891f4cd913024bc805cafdaafb18
BLAKE2b-256 07f347b1335c2691efc7ea5abe5949d2a97a09ddd0b5ad25e6840c42a86755b1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 33d1c041a32dad9f1df2457b4ffafc313a7e356d127c1805522edb1109f85aae
MD5 ccac8318405268a9c6ee1f16a5944c4f
BLAKE2b-256 d4e621a6715d451a8f27f7913e488e003e2ed637283e222dcdd0baf20a7a1142

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0cb8212f630547735d812cd30165012a87fce1802c6a44d939be64c63afd8898
MD5 4d3ff429800e6b317eefea508133c096
BLAKE2b-256 9cef79d97f62b0e96bf65e3b31bd3853987b849da4149579ad2fdd5974d460e3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.4.0-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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b21fabb5ee14c1fe5cf6aaa1e95e464547a88eb1218aba5a4890480999b7f23a
MD5 27e1169fb443c90cc55c6dc8f89b1d61
BLAKE2b-256 cfb3eef55f6de9c9213218d8c299a66a89a47acc2039dc93ac4e1fa546d53ee8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b077343603b1dd57c5f05e609d95d67f96ee239f56e370650478d3020ca3e72a
MD5 c5b9f2e28b24481c80eddcad92d59b32
BLAKE2b-256 23e1f71164bf29ea21de4d519dc817e2c4cbe83c777dcfea2de7a375de199ed6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0d874b069b38e9b53a5cc4389add9e05a65a389ab4d66194808d1269dfe4daa7
MD5 cbcda4c0aa12a9b4ea5ec562897f1eec
BLAKE2b-256 07e7b3934402315fe3ee2aaa52fb597831e25a30c9c9ee8262d086379c7ae304

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 5151a2b4b6b9f5bf2538d5d89b68ea1c26e789aa95c17638f83da9ba0980d2f6
MD5 7dcef29be10e04a6283e8239ec766822
BLAKE2b-256 5a71d201bdf19237047a31b55df44bc6f955250906c8c86425817fb5d1147f33

See more details on using hashes here.

Provenance

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