def deserialize(cls, data: Mapping) -> "Event": """ Creates an `Event` from serialized data. Args: data: Serialized data with the needed information to build a `Event` object. """ actions = [Action.deserialize(d) for d in data["actions"]] condition = Action.deserialize(data["condition"]) event = cls(actions, condition.preconditions, data["commands"]) return event
def deserialize(cls, data: Mapping) -> "Quest": """ Creates a `Quest` from serialized data. Args: data: Serialized data with the needed information to build a `Quest` object. """ actions = [Action.deserialize(d) for d in data["actions"]] win_action = Action.deserialize(data["win_action"]) failing_conditions = None if data["fail_action"] is not None: fail_action = Action.deserialize(data["fail_action"]) failing_conditions = fail_action.preconditions desc = data["desc"] quest = cls(actions, win_action.preconditions, failing_conditions, desc=desc) quest.commands = data["commands"] quest.reward = data.get("reward", 1) return quest
def test_serialization_deserialization(): rule = KnowledgeBase.default().rules["go/east"] mapping = { Placeholder("r'"): Variable("room1", "r"), Placeholder("r"): Variable("room2"), } mapping.update(KnowledgeBase.default().types.constants_mapping) action = rule.instantiate(mapping) infos = action.serialize() action2 = Action.deserialize(infos) assert action == action2
def test_serialization_deserialization(): rule = data.get_rules()["go/east"] mapping = { Placeholder("r'"): Variable("room1", "r"), Placeholder("r"): Variable("room2"), } mapping.update(data.get_types().constants_mapping) action = rule.instantiate(mapping) infos = action.serialize() action2 = Action.deserialize(infos) assert action == action2
def test_reverse_rule_and_action(): logic = GameLogic.parse(""" type container { predicates { open(container); closed(container); } rules { open :: closed(container) -> open(container); close :: open(container) -> closed(container); } reverse_rules { open :: close; } inform7 { commands { open :: "open {container}" :: "opening the {container}"; close :: "close {container}" :: "closing the {container}"; } } } """) open_rule = logic.rules["open"] close_rule = logic.rules["close"] assert open_rule.reverse_rule == close_rule assert close_rule.reverse_rule == open_rule open_action = open_rule.instantiate( {Placeholder("container", "container"): Variable("c_0", "container")}) mapping = {"c_0": "chest"} assert open_action.format_command(mapping) == "open chest" r_open_action = open_action.inverse() assert r_open_action.name == "close" assert r_open_action.format_command(mapping) == "close chest" # Action's command template should persist through serialization. open_action2 = Action.deserialize(open_action.serialize()) open_action2.format_command(mapping) == "open chest" assert open_action2.inverse() == r_open_action