mahjong.hand_calculating.yaku_list.yakuman

Concrete Yaku subclasses for yakuman-level patterns.

Yakuman are the highest-value hands in mahjong.

All classes are re-exported here for convenient access via from mahjong.hand_calculating.yaku_list.yakuman import <ClassName>.

class mahjong.hand_calculating.yaku_list.yakuman.Chiihou[source]

Bases: Yaku

地和: Non-dealer wins on the initial draw.

yaku_id: int = 116

Unique numeric identifier for this yaku.

name: str = 'Chiihou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Return True unconditionally; this yaku is awarded by the hand evaluation logic.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Chinroutou[source]

Bases: Yaku

清老頭: Hand composed entirely of terminal tiles.

yaku_id: int = 108

Unique numeric identifier for this yaku.

name: str = 'Chinroutou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_open: int = 13

Han awarded for open hands. 0 means the yaku is not available when the hand is open.

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Check whether all tiles in the hand are terminals.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.ChuurenPoutou[source]

Bases: Yaku

九蓮宝燈: The hand contains 1-1-1-2-3-4-5-6-7-8-9-9-9 of one suit, plus any other tile of the same suit.

yaku_id: int = 101

Unique numeric identifier for this yaku.

name: str = 'Chuuren Poutou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Check whether the hand contains 1-1-1-2-3-4-5-6-7-8-9-9-9 plus one extra tile of the same suit.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.DaburuChuurenPoutou[source]

Bases: Yaku

純正九蓮宝燈: Chuuren Poutou with a nine-sided wait (double yakuman).

yaku_id: int = 114

Unique numeric identifier for this yaku.

name: str = 'Daburu Chuuren Poutou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 26

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Return True unconditionally; this yaku is awarded by the hand evaluation logic.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.DaburuKokushiMusou[source]

Bases: Yaku

国士無双十三面待ち: Kokushi Musou with a thirteen-sided wait (double yakuman).

yaku_id: int = 112

Unique numeric identifier for this yaku.

name: str = 'Kokushi Musou Juusanmen Matchi'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 26

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Return True unconditionally; this yaku is awarded by the hand evaluation logic.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.DaiSuushii[source]

Bases: Yaku

大四喜: The hand contains four sets of winds.

yaku_id: int = 111

Unique numeric identifier for this yaku.

name: str = 'Dai Suushii'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_open: int = 26

Han awarded for open hands. 0 means the yaku is not available when the hand is open.

han_closed: int = 26

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Check whether the hand contains pon or kan sets of all four winds.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Daichisei[source]

Bases: Yaku

大七星: Seven pairs of honor tiles.

yaku_id: int = 110

Unique numeric identifier for this yaku.

name: str = 'Daichisei'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Check whether the hand is seven pairs composed entirely of honor tiles.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Daisangen[source]

Bases: Yaku

大三元: The hand contains three sets of dragons.

yaku_id: int = 103

Unique numeric identifier for this yaku.

name: str = 'Daisangen'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_open: int = 13

Han awarded for open hands. 0 means the yaku is not available when the hand is open.

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Check whether the hand contains pon or kan sets of all three dragons.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Daisharin[source]

Bases: Yaku

大車輪: Seven pairs of 2-3-4-5-6-7-8 in a single suit (optional yakuman).

By default only the pin suit qualifies (daisharin). When other suits are allowed, the yaku is renamed to daisuurin (man) or daichikurin (sou).

yaku_id: int = 109

Unique numeric identifier for this yaku.

name: str = 'Daisharin'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

set_pin()[source]

Set the yaku name to Daisharin (pin suit).

Return type:

None

set_man()[source]

Set the yaku name to Daisuurin (man suit).

Return type:

None

set_sou()[source]

Set the yaku name to Daichikurin (sou suit).

Return type:

None

rename(hand)[source]

Set the yaku name based on the suit of the hand.

Parameters:

hand (Sequence[Sequence[int]]) – decomposed hand as a sequence of tile groups in 34-format

Return type:

None

is_condition_met(hand, allow_other_sets, *args)[source]

Check whether the hand is seven pairs of 2-3-4-5-6-7-8 in a single suit.

Parameters:
  • hand (Collection[Sequence[int]]) – decomposed hand as a collection of tile groups in 34-format

  • allow_other_sets (bool) – if True, allow any single suit; if False, require pin suit only

Returns:

True if the hand matches the daisharin pattern

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.KokushiMusou[source]

Bases: Yaku

国士無双: A hand composed of one of each terminal and honor tile plus one duplicate.

The duplicate tile determines the winning wait.

yaku_id: int = 100

Unique numeric identifier for this yaku.

name: str = 'Kokushi Musou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, tiles_34, *args)[source]

Check whether the hand is a complete thirteen orphans.

Parameters:
  • hand (Collection[Sequence[int]] | None) – not used for kokushi; pass None

  • tiles_34 (Sequence[int]) – hand in 34-format count array

Returns:

True if the hand contains one of each terminal and honor with exactly one duplicate

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Paarenchan[source]

Bases: Yaku

八連荘: Consecutive dealer wins, scored as yakuman when the threshold is reached (optional rule).

yaku_id: int = 119

Unique numeric identifier for this yaku.

name: str = 'Paarenchan'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_open: int = 13

Han awarded for open hands. 0 means the yaku is not available when the hand is open.

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

set_paarenchan_count(count)[source]

Set the consecutive win count and update han values accordingly.

Parameters:

count (int)

Return type:

None

is_condition_met(hand, *args)[source]

Return True unconditionally; this yaku is awarded by the hand evaluation logic.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.RenhouYakuman[source]

Bases: Yaku

人和 (役満): Non-dealer wins on the first go-around before any calls, scored as yakuman (optional rule).

yaku_id: int = 117

Unique numeric identifier for this yaku.

name: str = 'Renhou (yakuman)'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Return True unconditionally; this yaku is awarded by the hand evaluation logic.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Ryuuiisou[source]

Bases: Yaku

緑一色: Hand composed entirely of green tiles. Green tiles are: green dragons and 2, 3, 4, 6 and 8 of sou.

yaku_id: int = 105

Unique numeric identifier for this yaku.

name: str = 'Ryuuiisou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_open: int = 13

Han awarded for open hands. 0 means the yaku is not available when the hand is open.

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Check whether all tiles in the hand are green tiles.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Sashikomi[source]

Bases: Yaku

差し込み: Intentional deal-in for open riichi, scored as yakuman (optional rule).

yaku_id: int = 118

Unique numeric identifier for this yaku.

name: str = 'Sashikomi'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Return True unconditionally; this yaku is awarded by the hand evaluation logic.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Shousuushii[source]

Bases: Yaku

小四喜: The hand contains three sets of winds and a pair of the remaining wind.

yaku_id: int = 104

Unique numeric identifier for this yaku.

name: str = 'Shousuushii'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_open: int = 13

Han awarded for open hands. 0 means the yaku is not available when the hand is open.

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Check whether the hand has three wind pon or kan sets and one wind pair.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Suuankou[source]

Bases: Yaku

四暗刻: Four closed pon sets.

yaku_id: int = 102

Unique numeric identifier for this yaku.

name: str = 'Suu Ankou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, win_tile, is_tsumo)[source]

Check whether the hand contains four closed pon or kan sets.

Parameters:
  • hand (Collection[Sequence[int]]) – decomposed hand as a collection of tile groups in 34-format

  • win_tile (int) – winning tile index in 136-format

  • is_tsumo (bool) – True if the win is by self-draw

Returns:

True if the hand contains exactly four closed pon or kan sets

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.SuuankouTanki[source]

Bases: Yaku

四暗刻単騎: Four closed pon sets with a pair wait (double yakuman).

yaku_id: int = 113

Unique numeric identifier for this yaku.

name: str = 'Suu Ankou Tanki'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 26

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Return True unconditionally; this yaku is awarded by the hand evaluation logic.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Suukantsu[source]

Bases: Yaku

四槓子: The hand with four kan sets.

yaku_id: int = 106

Unique numeric identifier for this yaku.

name: str = 'Suu Kantsu'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_open: int = 13

Han awarded for open hands. 0 means the yaku is not available when the hand is open.

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, melds, *args)[source]

Check whether the hand contains four kan sets.

Parameters:
  • hand (Collection[Sequence[int]]) – decomposed hand as a collection of tile groups in 34-format

  • melds (Collection[Meld]) – declared melds

Returns:

True if four of the melds are kan or shouminkan

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Tenhou[source]

Bases: Yaku

天和: Dealer wins on the initial draw.

yaku_id: int = 115

Unique numeric identifier for this yaku.

name: str = 'Tenhou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Return True unconditionally; this yaku is awarded by the hand evaluation logic.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool

class mahjong.hand_calculating.yaku_list.yakuman.Tsuuiisou[source]

Bases: Yaku

字一色: Hand composed entirely of honor tiles.

yaku_id: int = 107

Unique numeric identifier for this yaku.

name: str = 'Tsuu Iisou'

Display name of the yaku (e.g., "Tanyao", "Kokushi Musou").

han_open: int = 13

Han awarded for open hands. 0 means the yaku is not available when the hand is open.

han_closed: int = 13

Han awarded for closed hands. 0 means the yaku is not available when the hand is closed.

is_yakuman: bool = True

Whether this yaku is a yakuman (worth 13 han or more).

is_condition_met(hand, *args)[source]

Check whether all tiles in the hand are honors.

Parameters:

hand (Collection[Sequence[int]])

Return type:

bool