def graphviz(self): try: return self._graphviz except AttributeError: g = Digraph() g.attr(rankdir='LR') g.node('BEGIN', shape='point') for i in self.outputs_of(BEGIN): g.edge('BEGIN', str(i)) for ix in self.topologically_sorted_indexes: g.node(str(ix), label=get_name(self[ix])) for iy in self.outputs_of(ix): g.edge(str(ix), str(iy)) self._graphviz = g return self._graphviz
def graphviz(self): try: return self._graphviz except AttributeError: g = Digraph() g.attr(rankdir='LR') g.node('BEGIN', shape='point') for i in self.outputs_of(BEGIN): g.edge('BEGIN', str(i)) for ix in self.topologically_sorted_indexes: g.node(str(ix), label=get_name(self[ix])) for iy in self.outputs_of(ix): g.edge(str(ix), str(iy)) self._graphviz = g return self._graphviz
def finalgraph(self, filename=None): finaldb = Database(self.prac.mln) for step in self.inference_steps: for db in step.output_dbs: for atom, truth in list(db.evidence.items()): if truth == 0: continue _, predname, args = self.prac.mln.logic.parseLiteral(atom) if predname in self.prac.roles.union( ['has_sense', 'action_core', 'achieved_by']): finaldb << atom # finaldb.write(sys.stdout, color=True) g = Digraph(format='svg', engine='dot') g.attr('node', shape='box', style='filled') for res in finaldb.query('action_core(?w, ?a) ^ has_sense(?w, ?s)'): actioncore = res['?a'] sense = res['?s'] predname = 'action_core' g.node(actioncore, fillcolor='#bee280') g.node(sense) g.edge(actioncore, sense, label='is_a') roles = self.prac.actioncores[actioncore].roles for role in roles: for res in db.query('{}(?w, {}) ^ has_sense(?w, ?s)'.format( role, actioncore)): sense = res['?s'] g.node(sense) g.edge(actioncore, sense, label=role) for res in finaldb.query('achieved_by(?a1, ?a2)'): a1 = res['?a1'] a2 = res['?a2'] g.node(a1, fillcolor='#bee280') g.node(a2, fillcolor='#bee280') g.edge(a1, a2, label='achieved_by') actioncore = a2 roles = self.prac.actionroles[actioncore].roles for role in roles: for res in db.query('{}(?w, {}) ^ has_sense(?w, ?s)'.format( role, actioncore)): sense = res['?s'] g.node(sense) g.edge(actioncore, sense, label=role) return render_gv(g, filename)