-
Notifications
You must be signed in to change notification settings - Fork 72
Open
Description
Bug(s): The equality operators for Settings, Info, and Results contain copy-paste errors where some fields are compared twice while others are never compared. This causes objects with different values to incorrectly compare as equal.
e.g.
import proxsuite
qp1 = proxsuite.proxqp.dense.QP(1, 0, 0)
qp2 = proxsuite.proxqp.dense.QP(1, 0, 0)
qp2.settings.beta_bcl = qp1.settings.beta_bcl * 100
print(qp1.settings.beta_bcl) # 0.9
print(qp2.settings.beta_bcl) # 90.0
print(qp1.settings == qp2.settings) # True (should be False)Specific issues:
| settings1.alpha_bcl == settings2.alpha_bcl && |
settings1.alpha_bcl == settings2.alpha_bcl &&
settings1.alpha_bcl == settings2.alpha_bcl &&
^ alpha_bcl compared twice, should probably be beta_bcl?
| settings1.mu_update_factor == settings2.mu_update_factor && |
settings1.mu_update_factor == settings2.mu_update_factor &&
settings1.mu_update_factor == settings2.mu_update_factor &&
probs supposed to be mu_update_inv_factor
| info1.dua_res == info2.dua_res && info1.duality_gap == info2.duality_gap && |
info1.dua_res == info2.dua_res && info1.duality_gap == info2.duality_gap &&
info1.duality_gap == info2.duality_gap &&
^ duality gap compared twice, missing iterative_residual
| bool value = results1.x == results2.x && results1.y == results2.y && |
template<typename T>
bool
operator==(const Results<T>& results1, const Results<T>& results2)
{
bool value = results1.x == results2.x && results1.y == results2.y &&
results1.z == results2.z && results1.info == results2.info;
return value;
}
^ this seems to be missing se, si, and active_constraints maybe?
These should be pretty straightforward to fix; happy to raise a PR if need be.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels