python-mip
python-mip copied to clipboard
Duplicate Variables Bandaid
Attempting to fix #396. If we have two identical objects in the Var overrides, the previous code would allow the LinExpr constructor to void anything but the last coefficient.
I also added the relevant tests, which now pass. The last constraint would fail, because I only modified the Var functions, not the constructor itself.
Alternative:
diff --git a/mip/entities.py b/mip/entities.py
index fcd3ecd..71091b5 100644
--- a/mip/entities.py
+++ b/mip/entities.py
@@ -92,7 +92,8 @@ class LinExpr:
"You should pass eiter 'expr' or 'variables and coeffs' to the"
"constructor, not the three simultaneously."
)
- self.__expr = dict(zip(variables, coeffs))
+ for var, coef in zip(variables, coeffs):
+ self.add_var(var, coef)
elif expr is not None:
self.__expr = expr.copy()
However, this would tank a performance slightly if users create the LinExpr manually. For this benchmark, the using_lists method runs in 0.71s vs 0.33s for n=2000. Considering the last change was made due to performance reasons, I did not want to revert this right away, but feel free to approve this.
@DominikPeters @tkralphs could we get this merged and released? This is a critical bug affecting my workflow. I'd chip in but I don't have the necessary rights.
If by "released", you mean released on Pypi, then I can't currently do that. I'm trying to get access to the project on Pypi from the previous maintainers.
Ok, much appreciated! Any way I could help you with that?
I now got access to Pypi. It would be great is if we could get all of the tests passing. There are a lot of failures happening that are related to issues with the HiGHs interface that have been fixed but not merged. I am hoping @rschwarz will make a PR (see this comment).
It would also be great if we could have a Github action that uploads to Pypi automatically upon tagging a release, as is done in, e.g., CyLP.
OK, I'll try to prepare the PR tomorrow.
UPDATE: see here: #418