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_mortal())
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.5.tar.gz (559.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.5-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.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.7 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

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

Uploaded PyPymanylinux: glibc 2.5+ i686

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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

riichienv-0.3.5-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.5-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.5-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.5.tar.gz.

File metadata

  • Download URL: riichienv-0.3.5.tar.gz
  • Upload date:
  • Size: 559.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.5.tar.gz
Algorithm Hash digest
SHA256 a899f8542a38b9b0b9fa7dc205c9237da891594c7ba6620f6fb6b3f3ed753cfa
MD5 99dc8ae2a9c87ad2531f1edc22516737
BLAKE2b-256 f52efe6b07764c665fac79dce62f3f3f3ae46d876edb39481c1218aafae17c14

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 97ef29724c7e9a4b454b79465c66ea9ef9afc1f714cc16e9c2428ece86df7580
MD5 6ba6aada24c8f2ae3587498841e06438
BLAKE2b-256 864d44d6fc1f1dc11e2539d2aaf69d7edd361d76924ff366d3b1e88eefe04f80

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c8aae230c053067df9150c4f7410da6bd2c5e5febfc7d15bcc63d18c46b49241
MD5 9784f6ad29197bf4878078a8a9fbb10a
BLAKE2b-256 196a6e9369684281c1a4994563271c017941c6dc40481b62b8bf1054f7ae905a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 652a140f09d4dd02f129ab7095751a28c49ba2eb1be341ce035deeb39e421d95
MD5 f8059bbbc0cc2eb9946f25ad831f399d
BLAKE2b-256 555a516580caa8a56d1e50bff47d529424af830ff5b66093447474ddf867a5d8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 212d7baf09972265ee3ee3be269b09b102a030e54eb358e81cef679253d9aa82
MD5 ff230ec108a9fead62951b242b7f05ab
BLAKE2b-256 d180a91ac04c028b517a153141f3075b57b107c2d960e7a468c936dce3a73776

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.5-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.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1e645c595d9de0d2178037dbef7832772a96c35c577c5722a743531e7bd0f774
MD5 38c3e248f5ccdd51f3356118b837b52b
BLAKE2b-256 d6f615db942293984e58dd8b3ed63647852393ce8ebf7a66c4624c7af76747b3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.5-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.5-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 e6f4c8e69d6edb90ffc318703740bc8666697b090a60acf534658728a2af64aa
MD5 93eb1830bde4bb6abdaab0a296e55829
BLAKE2b-256 02cdd5159a932152b4cb2e8a23540d375f05ca5b74227ee341a594b8c255774d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6b4302504a8e1206280b3beca150b88d9cc97ffae4703e8a6ea32e201b0204f2
MD5 15573cd489f1416dd2e20a91eb211be2
BLAKE2b-256 99341dc6e7a16b0448a98c45b53416b1baa07b486f91eaa74b881269dde17157

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 54d4e9c00edb4e3c2784a4753b783d596b0118db46b9037b92abf9259ad7501d
MD5 1d66fce4ad9423d66efa40579ba2f982
BLAKE2b-256 d6dcfd7396ca2ccef6086af111ff770c9294f07cf271e4ffe4a60c32e34b6546

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 5a311bff3151426f97c848f7ddaf60749e794c68c7ae6aad607e75b745019f62
MD5 805c0a739f9a6d784ab0df867ea6d68c
BLAKE2b-256 9af7eb086d4c302ab6d531a5432dca95428005b2cb3cadf79db58989807c333d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2be45f20a5d614d1609b3658622ba6052eed4f7704b00e61f3360ecadf177b2a
MD5 69d8af619dc9b18f5c62af3b7678e8ac
BLAKE2b-256 162552c73a284f81f7e7582940d6f55658ee2b95b125fa24f3a88dc752e4ea69

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1087d7fed3cd2b2076d49a4a37922cc9cfd9ab677665b1b9c758d24b268959d5
MD5 0758e636a76b6b4e53d3d5a4c8e6cb6b
BLAKE2b-256 d4abb1f76646c1f10dd1340ab2f4522fae158be4fcd69df29367373e6b171e44

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.5-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.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7262969f7161b138025060ddcd59721ffb24f5933c5570a608c8b92eb6258bd9
MD5 25ce791c2b0187fd256d49d78dc07af2
BLAKE2b-256 94a6e3586c1cc4591610c7c6cc6a2e163992ed9825d703f59f95a3980f7dcd4b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 98384ae0619538a56ad1ad445abb1d1c0d467cf09620a9f5730423a96e3cdae7
MD5 0296a8a1af6ce679ef6e877e3c3b5108
BLAKE2b-256 900e20fe2b8c4d0b4520e82fa956effcffd87ba9bffed77879dba9db3914c352

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f80eb749d230e224cc1d0182c0e9b0c1d7b655c95d532589d853fb83c5057f7a
MD5 0364e90aa5337db7ffa9d59eec7b8947
BLAKE2b-256 4d21b8d433ca81075528c7022d02c1aff7a130f3824c77f9a34d616705ea15f8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 9fc71010b4d51fd2c7394bb07a136ac6e78ea20cea3bc074eec1f1229bd2161e
MD5 442dbdbbb77b5891dc79bf275e158435
BLAKE2b-256 c7f2327e8b55f3e7e58f6c171ce7113df1a31b8f7400ae80938ae0de5b5df4e8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9cf5e27c18e049d2ca2d2b4586bfd3e7046a08573a479622b5481564fa11de98
MD5 ee909f63846c228e01ba16a77ca8ebc3
BLAKE2b-256 e67e1284ddce1050f784a46609b13f5ccc53dc3425c6b703f00363312d284684

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.5-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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2a7f495528a5ee8226d0ba73ad51a89b004a2aebb903067969e5ee9a1643b756
MD5 001dc1fcdf02df084074c1cc619194e8
BLAKE2b-256 8c091e1365a18de8b2e1e23380788817c33aff9aed27093c2540d72c6adc7d79

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f14fc57cd0a8f6bfabeb92946603f29ee9871c110175bc32a7fa3f1ebcc59e79
MD5 c57365e5adf4c8eb0e993425d8e96d7a
BLAKE2b-256 554b934169cc1f2c8c95e6a768fbf53842397ec407c4c3193e92175fdda994f6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 46a8a8bc838a396512e861d4cf15a8c70615d78cf3dc7b7c1171f75d07b6bc60
MD5 fb0528bb63c204e0180e3dec5ce32abc
BLAKE2b-256 7fae3b1fc447fcd1f7e9e7e981bbef0a67393e8e0a34203b4a46fb1b4411ca9b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 2faa825ef552618b0ea82d85ec2b18e3d2388ea4a48bea0dd50f985a9f77f874
MD5 5d55241bad3472ca1c01f51c83eb8038
BLAKE2b-256 92734dc3b7bd4a5fc0d65a53e036df543d15974d7fae471767cb6723722e0d2d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8282c986bd3f7cc57e2caad2164a113a5783d84f8a5c60eb57e7238808cd972
MD5 2fb3eed86fa713fb71447306b39c357a
BLAKE2b-256 1c6c607509a4e7b280e86d0673f209ff4db01857097ae1458ea347435090111a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.5-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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0f28481918c5ee835ef3504b0189ff4f91d2397920e08723a96a237f90ba0752
MD5 9c888bf9ba36edaa4720e76f69ccc8e2
BLAKE2b-256 423601cf7b8124a6729af93a459120b289c15619ed83d6d8d9102cd7b45334d9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 032dfa6a006553f35b292304b38e1d8dbed2f5e29cda8a1bdd5703e5feae0c4e
MD5 c01fb6579e5ebb068aa178fa6132ed35
BLAKE2b-256 db8c627f90ea570c42546c57216c4a18424e184c517af2e675743fbf01fe1012

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 18898057f0871f6cef313d8e8ef27ecff5b894ab46dbd6cc870d8591e12fecb2
MD5 bc3c101a32a1d3924d455979d3209550
BLAKE2b-256 104991d6426de5b6d77fc04c091591022225775a34d072797ddaaf2685eb3199

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 22390fe26f8b44fc24c1a63f6c3d7e7c05a68f707e489b8e262315524be92dea
MD5 154a673d98ac8363edc3bd28e4563654
BLAKE2b-256 f6954a85910af51e1c1acbec1da57c9a5bb3ea7ee1137a107f42ee4bbe2985f3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3bb4c802c5c1aedbaf7e0e54e8b8eb8b1e1c315329e485cf5763cf395fb9c165
MD5 fa63130d218aa27f9b3b7054b4e324e8
BLAKE2b-256 7a8af569b68b0b256d0e7c14f78c3b3780cadb7282a9c35cb38953b5337fbac3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: riichienv-0.3.5-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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 829f47a963b5195817d6866f2e85baa9253e3ec038ba9d74d58b62a6d4b84dfc
MD5 f19b65b9a071a07d6a3051659d7baada
BLAKE2b-256 66d78294ccd773d996ac2f87dbbed2c78111336dc02e25aca494094d84172660

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e82f31a0344a87b9c5f1ba83d7a2175ce299a366ddbbbdc62d448272968323ac
MD5 8676fac0249ee375148b7911d790016b
BLAKE2b-256 df1d90760b71edba77141778cee96aeb6805b813086408542ef220567f012089

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8a45505b1c086c0009adc66b3acc77f315fa08fe1aa448844db1c43283705d91
MD5 ee89e19609071e1db5b19626c36c5815
BLAKE2b-256 da020f412456d4643b41f9a5b2ba7182743822462a634957cd6fb04f33ce7e9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for riichienv-0.3.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 9b848eb5b76f2ed48f1a6c7dd09dadd7c6105564dc6804701bbf7604a3c21d7c
MD5 e613b48faaa4174a6265e9587d72f169
BLAKE2b-256 24cd8e6ba6c83e53de0ceca94729c4d314d39e52268a4c2aa88a2623988c0c55

See more details on using hashes here.

Provenance

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