@@ -1540,8 +1540,10 @@ def _update_node(interpretations, predicate_map, comp, na, ipl, rule_trace, fp_c
15401540 if current_bnd != prev_t_bnd :
15411541 if convergence_mode == 'delta_bound' :
15421542 for i in updated_bnds :
1543- lower_delta = abs (i .lower - prev_t_bnd .lower )
1544- upper_delta = abs (i .upper - prev_t_bnd .upper )
1543+ # Use each bound's own previous values instead of L's previous
1544+ prev_i_bnd = interval .closed (i .prev_lower , i .prev_upper )
1545+ lower_delta = abs (i .lower - prev_i_bnd .lower )
1546+ upper_delta = abs (i .upper - prev_i_bnd .upper )
15451547 max_delta = max (lower_delta , upper_delta )
15461548 change = max (change , max_delta )
15471549 else :
@@ -1633,7 +1635,7 @@ def _update_edge(interpretations, predicate_map, comp, na, ipl, rule_trace, fp_c
16331635 world .world [p1 ].set_lower_upper (lower , upper )
16341636 world .world [p1 ].set_static (static )
16351637 ip_update_cnt += 1
1636- updated_bnds .append (world .world [p2 ])
1638+ updated_bnds .append (world .world [p1 ])
16371639 if store_interpretation_changes :
16381640 rule_trace .append ((numba .types .uint16 (t_cnt ), numba .types .uint16 (fp_cnt ), comp , p1 , interval .closed (lower , upper )))
16391641
@@ -1646,8 +1648,10 @@ def _update_edge(interpretations, predicate_map, comp, na, ipl, rule_trace, fp_c
16461648 if current_bnd != prev_t_bnd :
16471649 if convergence_mode == 'delta_bound' :
16481650 for i in updated_bnds :
1649- lower_delta = abs (i .lower - prev_t_bnd .lower )
1650- upper_delta = abs (i .upper - prev_t_bnd .upper )
1651+ # Use each bound's own previous values instead of L's previous
1652+ prev_i_bnd = interval .closed (i .prev_lower , i .prev_upper )
1653+ lower_delta = abs (i .lower - prev_i_bnd .lower )
1654+ upper_delta = abs (i .upper - prev_i_bnd .upper )
16511655 max_delta = max (lower_delta , upper_delta )
16521656 change = max (change , max_delta )
16531657 else :
0 commit comments