Incorrect imports in Model
- Dominant language
- Linear Programming
- Stars
- 600
- Forks
- 108
- PR merge metrics
- No merged PRs in 30d
Description
**Describe the bug**
Cannot pass own [`solver`](https://github.com/coin-or/python-mip/blob/0ccb81115543e737ab74a4f1309891ce5650c8d5/mip/model.py#L53) to `class Model` constructor because of incorrect imports.
**To Reproduce**
To reproduce:
```python
import mip
from mip.cbc import SolverCbc
class MySolver(SolverCbc):
pass
class MyModel(mip.Model):
def __init__(self, name: str = "", sense: str = mip.MINIMIZE, *args, **kwargs):
if kwargs["solver_name"].upper() in ("MYSOLVER"):
kwargs["solver"] = MySolver(self, name, sense)
super().__init__(name, sense, *args, **kwargs)
if __name__ == "__main__":
solver = MyModel(solver_name="MYSOLVER")
```
```
File "C:\nano_sources\shop\shop\models\t_solver.py", line 17, in
solver = MyModel(solver_name="MYSOLVER")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\t_solver.py", line 13, in __init__
super().__init__(name, sense, *args, **kwargs)
File "...\Lib\site-packages\mip\model.py", line 107, in __init__
self.constrs = mip.ConstrList(self)
^^^
UnboundLocalError: cannot access local variable 'mip' where it is not associated with a value
```
**Expected behavior**
Basically it is not possible to pass any argument in `solver` and not get the error above. Please see my bugreport for [cpython](https://github.com/python/cpython/issues/122305) for explanation why this happens and what is wrong
**Desktop (please complete the following information):**
- Operating System, version: Windows
- Python version: Probably all of them, tested on 3.11 and 3.12
- Python-MIP version (we recommend you to test with the latest version): 1.15
**Additional context**
The reason I want to do this are some inconsistencies in handling `nan`s in LinExpr between CBC and Gurobi. We have created model exploiting the CBC behaviour, which is throwing away anything containing `nan`. This is useful when defining models with LinExprTensor where some of the elements does not contain any variable, leading e.g. to constraints like `1==1`. I wanted to create my own solver to make it consistent.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.