Skip to content

Commit e2459d7

Browse files
cleaned up
1 parent ab1e2a3 commit e2459d7

1 file changed

Lines changed: 22 additions & 33 deletions

File tree

TraceLens/TraceDiff/trace_diff.py

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -237,48 +237,37 @@ def norm_name(uid, tree_num):
237237
if not reassignments:
238238
return ops
239239

240-
# Apply reassignments
241-
new_match_pairs = set()
242-
demoted1 = set()
243-
demoted2 = set()
244-
promoted1 = set()
245-
promoted2 = set()
246-
240+
# Apply reassignments: build substitution maps
241+
swap_i = {} # orig_i -> new_i
242+
swap_j = {} # orig_j -> new_j
247243
for orig_i, orig_j, new_i, new_j in reassignments:
248-
new_match_pairs.add((new_i, new_j))
249244
if new_i != orig_i:
250-
demoted1.add(orig_i)
251-
promoted1.add(new_i)
245+
swap_i[orig_i] = new_i
252246
if new_j != orig_j:
253-
demoted2.add(orig_j)
254-
promoted2.add(new_j)
247+
swap_j[orig_j] = new_j
248+
promoted1 = set(swap_i.values())
249+
promoted2 = set(swap_j.values())
255250

256251
final_ops = []
257-
emitted_matches = set()
258252
for op, i, j in ops:
259253
if op == "match":
260-
i_demoted = i in demoted1
261-
j_demoted = j in demoted2
262-
if i_demoted and j_demoted:
263-
final_ops.append(("delete", i, None))
264-
final_ops.append(("insert", None, j))
265-
elif i_demoted:
266-
final_ops.append(("delete", i, None))
267-
elif j_demoted:
268-
final_ops.append(("insert", None, j))
254+
ni = swap_i.get(i, i)
255+
nj = swap_j.get(j, j)
256+
if ni != i or nj != j:
257+
if ni == i:
258+
final_ops.append(("insert", None, j))
259+
elif nj == j:
260+
final_ops.append(("delete", i, None))
261+
else:
262+
final_ops.append(("delete", i, None))
263+
final_ops.append(("insert", None, j))
264+
final_ops.append(("match", ni, nj))
269265
else:
270266
final_ops.append(("match", i, j))
271-
emitted_matches.add((i, j))
272-
elif op == "delete":
273-
if i not in promoted1:
274-
final_ops.append(("delete", i, None))
275-
elif op == "insert":
276-
if j not in promoted2:
277-
final_ops.append(("insert", None, j))
278-
279-
for new_i, new_j in new_match_pairs:
280-
if (new_i, new_j) not in emitted_matches:
281-
final_ops.append(("match", new_i, new_j))
267+
elif op == "delete" and i not in promoted1:
268+
final_ops.append(("delete", i, None))
269+
elif op == "insert" and j not in promoted2:
270+
final_ops.append(("insert", None, j))
282271

283272
return final_ops
284273

0 commit comments

Comments
 (0)