Source code for modelly.behaviour.meta_agents.views

"""Read-only membership snapshots returned by the membership manager."""

from __future__ import annotations

from dataclasses import dataclass
from typing import Any

from modelly.behaviour.meta_agents.backend import RelationKey


[docs] @dataclass(frozen=True, slots=True) class MembershipEdge: """A membership edge with live agent and group objects.""" agent: Any group: Any relation: RelationKey
[docs] @dataclass(frozen=True, slots=True) class MembershipView: """Read-only snapshot of memberships for one entity.""" subject: Any memberships: tuple[MembershipEdge, ...] def __iter__(self): """Iterate over the resolved memberships.""" return iter(self.memberships) def __len__(self) -> int: """Return the number of resolved memberships.""" return len(self.memberships)
[docs] def as_triplets(self) -> set[tuple[Any, Any, RelationKey]]: """Return the memberships as live-object triplets.""" return {(edge.agent, edge.group, edge.relation) for edge in self.memberships}
@property def agents(self) -> set[Any]: """Return all unique agents referenced by the view.""" return {edge.agent for edge in self.memberships} @property def groups(self) -> set[Any]: """Return all unique groups referenced by the view.""" return {edge.group for edge in self.memberships} @property def relations(self) -> set[RelationKey]: """Return all unique relation labels referenced by the view.""" return {edge.relation for edge in self.memberships}