Source code for nlp_shap.domain.coalition

"""Coalition masks over explainability players."""

from __future__ import annotations

from collections.abc import Sequence
from dataclasses import dataclass

from .players import PlayerSet


[docs] @dataclass(frozen=True, slots=True) class CoalitionMask: """Boolean presence mask aligned with a player set.""" present: tuple[bool, ...] """Presence flags aligned with :class:`~nlp_shap.domain.players.PlayerSet` order.""" def __post_init__(self) -> None: if not self.present: msg = "coalition mask must include at least one player" raise ValueError(msg)
[docs] @classmethod def from_sequence(cls, present: Sequence[bool]) -> CoalitionMask: """Build a mask from any boolean sequence.""" return cls(present=tuple(present))
[docs] def coalition_size(self) -> int: """Return the number of present players.""" return sum(self.present)
[docs] def validate_against(self, player_set: PlayerSet) -> None: """Ensure the mask length matches the player set.""" if len(self.present) != player_set.num_players: msg = ( "coalition mask length " f"{len(self.present)} does not match player count " f"{player_set.num_players}" ) raise ValueError(msg)