From dc704f5e59af3d9f821241fe5bb40b887aebd7be Mon Sep 17 00:00:00 2001 From: Fabrizio Finozzi Date: Sun, 7 Dec 2025 15:25:36 +0100 Subject: [PATCH 1/2] code: add knitro to pyproject.toml --- linopy/solvers.py | 5 +++++ pyproject.toml | 3 +++ 2 files changed, 8 insertions(+) diff --git a/linopy/solvers.py b/linopy/solvers.py index a121a2b5..964a209e 100644 --- a/linopy/solvers.py +++ b/linopy/solvers.py @@ -48,6 +48,7 @@ "mosek", "copt", "mindopt", + "knitro" ] # Solvers that don't need a solution file when keep_files=False @@ -145,6 +146,9 @@ class xpress_Namespaces: # type: ignore[no-redef] except coptpy.CoptError: pass +with contextlib.suppress(ModuleNotFoundError, ImportError): + import knitro + quadratic_solvers = [s for s in QUADRATIC_SOLVERS if s in available_solvers] logger = logging.getLogger(__name__) @@ -176,6 +180,7 @@ class SolverName(enum.Enum): COPT = "copt" MindOpt = "mindopt" PIPS = "pips" + Knitro = "knitro" def path_to_string(path: Path) -> str: diff --git a/pyproject.toml b/pyproject.toml index b5105230..2370d0f9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,7 @@ docs = [ "gurobipy==11.0.2", "ipykernel==6.29.5", "matplotlib==3.9.1", + "knitro>=15.0.1", ] dev = [ "pytest", @@ -70,6 +71,7 @@ dev = [ "types-requests", "gurobipy", "highspy", + "knitro", ] solvers = [ "gurobipy", @@ -81,6 +83,7 @@ solvers = [ "coptpy!=7.2.1", "xpress; platform_system != 'Darwin' and python_version < '3.11'", "pyscipopt; platform_system != 'Darwin'", + "knitro>=15.0.1", ] [tool.setuptools.packages.find] From 0fb49f998f0144bd5b6533f89744ea6cf2792ec4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 7 Dec 2025 14:26:41 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- linopy/solvers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linopy/solvers.py b/linopy/solvers.py index 964a209e..023dcb5d 100644 --- a/linopy/solvers.py +++ b/linopy/solvers.py @@ -48,7 +48,7 @@ "mosek", "copt", "mindopt", - "knitro" + "knitro", ] # Solvers that don't need a solution file when keep_files=False @@ -147,7 +147,7 @@ class xpress_Namespaces: # type: ignore[no-redef] pass with contextlib.suppress(ModuleNotFoundError, ImportError): - import knitro + pass quadratic_solvers = [s for s in QUADRATIC_SOLVERS if s in available_solvers] logger = logging.getLogger(__name__)