Skip to content

Commit 9f54013

Browse files
committed
modify KCFGViewer for MergedEdge
1 parent f6791bb commit 9f54013

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

pyk/src/pyk/kcfg/tui.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,10 @@ def _info_text(self) -> str:
224224
element_str = f'node({shorten_hashes(self._element.id)})'
225225
elif type(self._element) is KCFG.Edge:
226226
element_str = f'edge({shorten_hashes(self._element.source.id)},{shorten_hashes(self._element.target.id)})'
227+
elif type(self._element) is KCFG.MergedEdge:
228+
element_str = (
229+
f'merged_edge({shorten_hashes(self._element.source.id)},{shorten_hashes(self._element.target.id)})'
230+
)
227231
elif type(self._element) is KCFG.Cover:
228232
element_str = f'cover({shorten_hashes(self._element.source.id)},{shorten_hashes(self._element.target.id)})'
229233
return f'{element_str} selected. {minimize_str} Minimize Output. {term_str} Term View. {constraint_str} Constraint View. {status_str} Status View. {custom_str}'
@@ -296,6 +300,14 @@ def _cterm_text(cterm: CTerm) -> tuple[str, str]:
296300
crewrite = CTerm(config, constraints_new)
297301
term_str, constraint_str = _cterm_text(crewrite)
298302

303+
elif type(self._element) is KCFG.MergedEdge:
304+
config_source, *constraints_source = self._element.source.cterm
305+
config_target, *constraints_target = self._element.target.cterm
306+
constraints_new = [c for c in constraints_target if c not in constraints_source]
307+
config = push_down_rewrites(KRewrite(config_source, config_target))
308+
crewrite = CTerm(config, constraints_new)
309+
term_str, constraint_str = _cterm_text(crewrite)
310+
299311
elif type(self._element) is KCFG.Cover:
300312
subst_equalities = map(_boolify, flatten_label('#And', self._element.csubst.subst.ml_pred))
301313
constraints = map(_boolify, flatten_label('#And', self._element.csubst.constraint))
@@ -421,6 +433,14 @@ def on_graph_chunk_selected(self, message: GraphChunk.Selected) -> None:
421433
edge = single(self._kcfg.edges(source_id=source_id, target_id=target_id))
422434
self.query_one('#node-view', NodeView).update(edge)
423435

436+
elif message.chunk_id.startswith('merged_edge_'):
437+
self._selected_chunk = None
438+
node_source, node_target, *_ = message.chunk_id[12:].split('_')
439+
source_id = int(node_source)
440+
target_id = int(node_target)
441+
merged_edge = single(self._kcfg.merged_edges(source_id=source_id, target_id=target_id))
442+
self.query_one('#node-view', NodeView).update(merged_edge)
443+
424444
elif message.chunk_id.startswith('cover_'):
425445
self._selected_chunk = None
426446
node_source, node_target, *_ = message.chunk_id[6:].split('_')

0 commit comments

Comments
 (0)