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
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
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
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
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
def line(s, newindent=0): nonlocal rv rv += indent(newindent) + s + "\n"
def toStr(self, i:int) -> str: return indent(i) + str(self)