@@ -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