python3Packages.mip: init at 1.14.1
Add the Python MIP module for mixed-integer linear programming.
This commit is contained in:
parent
c6fba7c2de
commit
a9b5e5ea44
3 changed files with 110 additions and 0 deletions
78
pkgs/development/python-modules/mip/default.nix
Normal file
78
pkgs/development/python-modules/mip/default.nix
Normal file
|
@ -0,0 +1,78 @@
|
|||
{ lib
|
||||
, buildPythonPackage
|
||||
, cffi
|
||||
, dos2unix
|
||||
, fetchPypi
|
||||
, matplotlib
|
||||
, networkx
|
||||
, numpy
|
||||
, pytestCheckHook
|
||||
, pythonOlder
|
||||
, gurobi
|
||||
, gurobipy
|
||||
# Enable support for the commercial Gurobi solver (requires a license)
|
||||
, gurobiSupport ? false
|
||||
# If Gurobi has already been installed outside of the Nix store, specify its
|
||||
# installation directory here
|
||||
, gurobiHome ? null
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "mip";
|
||||
version = "1.14.1";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
format = "pyproject";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-bvpm5vUp15fbv/Sw1Lx70ihA7VHsSUzwFzoFDG+Ow1M=";
|
||||
};
|
||||
|
||||
checkInputs = [ matplotlib networkx numpy pytestCheckHook ];
|
||||
nativeBuildInputs = [ dos2unix ];
|
||||
propagatedBuildInputs = [
|
||||
cffi
|
||||
] ++ lib.optionals gurobiSupport ([
|
||||
gurobipy
|
||||
] ++ lib.optional (builtins.isNull gurobiHome) gurobi);
|
||||
|
||||
# Source files have CRLF terminators, which make patch error out when supplied
|
||||
# with diffs made on *nix machines
|
||||
prePatch = ''
|
||||
find . -type f -exec ${dos2unix}/bin/dos2unix {} \;
|
||||
'';
|
||||
|
||||
patches = [
|
||||
# Some tests try to be smart and dynamically construct a path to their test
|
||||
# inputs. Unfortunately, since the test phase is run after installation,
|
||||
# those paths point to the Nix store, which no longer contains the test
|
||||
# data. This patch hardcodes the data path to point to the source directory.
|
||||
./test-data-path.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# Allow cffi versions with a different patch level to be used
|
||||
substituteInPlace pyproject.toml --replace "cffi==1.15.0" "cffi==1.15.*"
|
||||
'';
|
||||
|
||||
# Make MIP use the Gurobi solver, if configured to do so
|
||||
makeWrapperArgs = lib.optional gurobiSupport
|
||||
"--set GUROBI_HOME ${if builtins.isNull gurobiHome then gurobi.outPath else gurobiHome}";
|
||||
|
||||
# Tests that rely on Gurobi are activated only when Gurobi support is enabled
|
||||
disabledTests = lib.optional (!gurobiSupport) "gurobi";
|
||||
|
||||
passthru.optional-dependencies = {
|
||||
inherit gurobipy numpy;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "http://python-mip.com/";
|
||||
description = "A collection of Python tools for the modeling and solution of Mixed-Integer Linear programs (MIPs)";
|
||||
downloadPage = "https://github.com/coin-or/python-mip/releases";
|
||||
changelog = "https://github.com/coin-or/python-mip/releases/tag/${version}";
|
||||
license = licenses.epl20;
|
||||
maintainers = with maintainers; [ nessdoor ];
|
||||
};
|
||||
}
|
30
pkgs/development/python-modules/mip/test-data-path.patch
Normal file
30
pkgs/development/python-modules/mip/test-data-path.patch
Normal file
|
@ -0,0 +1,30 @@
|
|||
diff --git a/examples/extract_features_mip.py b/examples/extract_features_mip.py
|
||||
index cdc109f..90e79fa 100644
|
||||
--- a/examples/extract_features_mip.py
|
||||
+++ b/examples/extract_features_mip.py
|
||||
@@ -9,9 +9,7 @@ import mip
|
||||
lp_path = ""
|
||||
|
||||
# using test data, replace with your instance
|
||||
-lp_path = mip.__file__.replace("mip/__init__.py", "test/data/1443_0-9.lp").replace(
|
||||
- "mip\\__init__.py", "test\\data\\1443_0-9.lp"
|
||||
-)
|
||||
+lp_path = "test/data/1443_0-9.lp"
|
||||
|
||||
m = Model()
|
||||
if m.solver_name.upper() in ["GRB", "GUROBI"]:
|
||||
diff --git a/examples/gen_cuts_mip.py b/examples/gen_cuts_mip.py
|
||||
index f71edae..2799734 100644
|
||||
--- a/examples/gen_cuts_mip.py
|
||||
+++ b/examples/gen_cuts_mip.py
|
||||
@@ -11,9 +11,7 @@ import mip
|
||||
lp_path = ""
|
||||
|
||||
# using test data
|
||||
-lp_path = mip.__file__.replace("mip/__init__.py", "test/data/1443_0-9.lp").replace(
|
||||
- "mip\\__init__.py", "test\\data\\1443_0-9.lp"
|
||||
-)
|
||||
+lp_path = "test/data/1443_0-9.lp"
|
||||
|
||||
m = Model()
|
||||
if m.solver_name.upper() in ["GRB", "GUROBI"]:
|
|
@ -5827,6 +5827,8 @@ in {
|
|||
inherit (pkgs.darwin) cctools;
|
||||
};
|
||||
|
||||
mip = callPackage ../development/python-modules/mip { };
|
||||
|
||||
misaka = callPackage ../development/python-modules/misaka { };
|
||||
|
||||
mistletoe = callPackage ../development/python-modules/mistletoe { };
|
||||
|
|
Loading…
Reference in a new issue