Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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