Files
2026-10-01 22:44:07 +08:00

66 lines
1.5 KiB
Python

from __future__ import annotations
from dataclasses import asdict, dataclass
from typing import Any
COLORS = ("red", "blue", "green", "yellow")
SHAPES = ("circle", "square", "triangle", "star")
RELATIONS = ("left_of", "right_of", "above", "below")
CLASSES = ("alpha", "beta", "gamma", "delta")
OBJECT_IDS = ("obj1", "obj2", "obj3")
VARIABLES = ("var_x",)
PREDICATES = ("color", "shape", "left_of", "right_of", "above", "below", "class")
ENTITIES = OBJECT_IDS + COLORS + SHAPES + CLASSES + VARIABLES
NULL_TYPE = 0
FACT_TYPE = 1
RULE_TYPE = 2
NUM_STATE_TYPES = 3
SUBJECT_TO_ID = {value: index for index, value in enumerate(ENTITIES)}
PREDICATE_TO_ID = {value: index for index, value in enumerate(PREDICATES)}
OBJECT_TO_ID = SUBJECT_TO_ID
@dataclass(frozen=True)
class Fact:
subject: str
predicate: str
object: str
def to_dict(self) -> dict[str, str]:
return asdict(self)
@classmethod
def from_dict(cls, value: dict[str, str]) -> "Fact":
return cls(**value)
@dataclass(frozen=True)
class Rule:
variable: str
antecedent_predicate: str
antecedent_object: str
consequent_predicate: str
consequent_object: str
def to_dict(self) -> dict[str, str]:
return asdict(self)
@classmethod
def from_dict(cls, value: dict[str, str]) -> "Rule":
return cls(**value)
@dataclass(frozen=True)
class SceneObject:
object_id: str
color: str
shape: str
x: int
y: int
def to_dict(self) -> dict[str, Any]:
return asdict(self)