Esempio n. 1
0
    def toStr(self, i: int) -> str:
        rv: str = ""
        indent_level = i
        if self.entrance_enabled_guard:
            rv = indent(indent_level) + "if " + str(
                self.entrance_enabled_guard) + ":\n"
            indent_level += 1

        if self.action_id == FULFILLED_SITUATION_LABEL and self.immediate:
            rv += indent(indent_level) + FULFILLED_SITUATION_LABEL
            return rv

        rv += indent(
            indent_level
        ) + f"{roles_to_str(self.role_ids)} {self.deontic_keyword} {self.action_id}"

        if self.param_setter:
            assert not self.ruleparam_names
            rv += f"({mapjoin(str , self.param_setter, ', ')})"
        elif self.ruleparam_names:
            assert not self.param_setter
            rv += f"({mapjoin(str , self.ruleparam_names, ', ')})"

        if self.time_constraint:
            rv += " when " + str(self.time_constraint)

        if self.where_clause:
            rv += " where " + str(self.where_clause)

        return rv
Esempio n. 2
0
    def toStr(self, i: int) -> str:
        rv = indent(i) + f"action {self.action_id}"
        if self.param_sorts_by_name:
            rv += '(' + ", ".join(
                param + ": " + str(self.param_sorts_by_name[param])
                for param in self.param_sorts_by_name) + ')'
        else:
            rv += "() "  # makes it look better with python syntax highlighting
        if self.dest_situation_id != LOOP_KEYWORD:
            rv += f" transitions to {self.dest_situation_id}"
        else:
            rv += f" non-transitioning"
        if len(self.preconditions) > 0 or self.state_transform or len(
                self.postconditions) > 0:
            rv += ":\n"
        else:
            rv += "\n"  # nothing more in this action decl
        for pre in self.preconditions:
            rv += indent(i + 1) + "pre: " + str(pre) + "\n"
        # if self.traversal_bounds:
        #     rv += indent(1) + "prove " + mapjoin(str, self.traversal_bounds, " ") + "\n"
        if self.state_transform:
            rv += str(self.state_transform) + "\n"

        for pre in self.postconditions:
            rv += indent(i + 1) + "post: " + str(pre) + "\n"

        if self.following_anon_situation:
            anon_situation_str = self.following_anon_situation.toStr(i + 1)
            rv += anon_situation_str

        return rv
Esempio n. 3
0
    def toStr(self, i: int) -> str:
        if self.parent_action_id is None:
            rv = indent(i) + f"situation {self.situation_id}:\n"
        else:
            rv = indent(i) + f"following situation:\n"

        for pre in self.preconditions:
            rv += indent(i + 1) + "pre: " + str(pre) + "\n"

        if self.description:
            rv += indent(i + 1) + "description: " + self.description + "\n"

        # if self.visit_bounds:
        #     rv += indent(1) + "prove " + mapjoin(str, self.visit_bounds, " ") + "\n"
        def sortkey(x: EventRule) -> str:
            if isinstance(x, DeadlineEventRule):
                return "ZZZZ"
            elif isinstance(x, ActorEventRule):
                return roles_to_str(x.role_ids) + x.action_id
            raise NotImplementedError

        rules = sorted(self.action_rules(), key=sortkey)
        for t in rules:
            rv += t.toStr(i + 1) + "\n"

        return rv
Esempio n. 4
0
 def toStr(self,i:int):
     rv = indent(i) + f"if {self.test}:\n"
     for x in self.true_branch:
         rv += x.toStr(i+1)
     if self.false_branch:
         rv += "\n" + indent(i) + "else:\n"
         for x in self.false_branch:
             rv += x.toStr(i+1) + "\n"
     return rv
Esempio n. 5
0
    def toStr(self, i: int) -> str:
        rv: str = ""
        indent_level = i
        if self.entrance_enabled_guard:
            rv = indent(indent_level) + "if " + str(
                self.entrance_enabled_guard) + ":\n"
            indent_level += 1

        rv += indent(indent_level) + self.action_id

        if self.param_setter:
            rv += f"({mapjoin(str , self.param_setter, ', ')})"

        rv += " " + self.trigger_type.name + " " + str(self.deadline_fn)

        return rv
Esempio n. 6
0
 def line(s, newindent=0):
     nonlocal rv
     rv += indent(newindent) + s + "\n"
Esempio n. 7
0
 def toStr(self, i:int) -> str:
     return indent(i) + str(self)