new_merged of AssignmentCollections is broken
When merging two AssignmentCollections, both containing an alias subexpression with the same alias that themselves depend on another Assignment, the resulting merged dict is broken.
import pystencils as ps
import sympy as sp
a, b, res1, res2 = sp.symbols("a b res1 res2")
ac = ps.AssignmentCollection([ps.Assignment(res1, b)],
[ps.Assignment(a, 20),
ps.Assignment(b, a)])
ac2 = ps.AssignmentCollection([ps.Assignment(res2, b)],
[ps.Assignment(a, 10),
ps.Assignment(b, a)])
merged_ac = ac.new_merged(ac2).new_without_subexpressions()
print(f"ac:\n {ac}")
print(f"ac2:\n {ac2}")
print(f"merged:\n {merged_ac}")
assert ps.Assignment(res1, 20) in new_merged.main_assignments
assert ps.Assignment(res2, 10) in new_merged.main_assignments
Executing this code results in:
ac:
Subexpressions:
a ← 20
b ← a
Main Assignments:
res1 ← b
ac2:
Subexpressions:
a ← 10
b ← a
Main Assignments:
res2 ← b
merged:
Subexpressions:
Main Assignments:
res1 ← 20
res2 ← 20 ### 10 should be here
In the merging-process the replacement of the rhs happens too late, so the expressions are treated as equal, although their rhs should already have been replaced.
Edited by Alexander Reinauer