python-mip icon indicating copy to clipboard operation
python-mip copied to clipboard

Duplicate Variables Bandaid

Open ItsNiklas opened this issue 1 year ago • 1 comments

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.

ItsNiklas avatar Nov 11 '24 17:11 ItsNiklas

CLA assistant check
All committers have signed the CLA.

CLAassistant avatar Nov 11 '24 17:11 CLAassistant

@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.

simberaj avatar Aug 27 '25 15:08 simberaj

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.

tkralphs avatar Aug 28 '25 17:08 tkralphs

Ok, much appreciated! Any way I could help you with that?

simberaj avatar Sep 16 '25 15:09 simberaj

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.

tkralphs avatar Sep 17 '25 15:09 tkralphs

OK, I'll try to prepare the PR tomorrow.

UPDATE: see here: #418

rschwarz avatar Sep 17 '25 18:09 rschwarz