From cb21e3d5e4f5a5d1534b3cec48f62a7587c39085 Mon Sep 17 00:00:00 2001 From: "Robert T. McGibbon" Date: Sat, 8 May 2021 15:17:56 -0400 Subject: [PATCH] xgboost: 0.90 -> 1.4.1 --- .../development/libraries/xgboost/default.nix | 40 ++++++++----- .../python-modules/xgboost/default.nix | 58 +++++++++++++------ .../xgboost/lib-path-for-python.patch | 38 ------------ 3 files changed, 68 insertions(+), 68 deletions(-) delete mode 100644 pkgs/development/python-modules/xgboost/lib-path-for-python.patch diff --git a/pkgs/development/libraries/xgboost/default.nix b/pkgs/development/libraries/xgboost/default.nix index 973e7dc028e..26872565de8 100644 --- a/pkgs/development/libraries/xgboost/default.nix +++ b/pkgs/development/libraries/xgboost/default.nix @@ -1,6 +1,14 @@ -{ config, stdenv, lib, fetchgit, cmake -, cudaSupport ? config.cudaSupport or false, cudatoolkit -, ncclSupport ? false, nccl +{ config +, stdenv +, lib +, fetchFromGitHub +, cmake +, gtest +, doCheck ? true +, cudaSupport ? config.cudaSupport or false +, cudatoolkit +, ncclSupport ? false +, nccl , llvmPackages }: @@ -8,37 +16,43 @@ assert ncclSupport -> cudaSupport; stdenv.mkDerivation rec { pname = "xgboost"; - version = "0.90"; + version = "1.4.1"; - # needs submodules - src = fetchgit { - url = "https://github.com/dmlc/xgboost"; - rev = "refs/tags/v${version}"; - sha256 = "1zs15k9crkiq7bnr4gqq53mkn3w8z9dq4nwlavmfcr5xr5gw2pw4"; + src = fetchFromGitHub { + owner = "dmlc"; + repo = pname; + rev = "v${version}"; + fetchSubmodules = true; + sha256 = "12b1417dg8jqyxd72kg5a3xhg5h11vz0k7bkv72mzrv83jvgn5ci"; }; nativeBuildInputs = [ cmake ] ++ lib.optional stdenv.isDarwin llvmPackages.openmp; - buildInputs = lib.optional cudaSupport cudatoolkit + buildInputs = [ gtest ] ++ lib.optional cudaSupport cudatoolkit ++ lib.optional ncclSupport nccl; - cmakeFlags = lib.optionals cudaSupport [ "-DUSE_CUDA=ON" "-DCUDA_HOST_COMPILER=${cudatoolkit.cc}/bin/cc" ] - ++ lib.optional ncclSupport "-DUSE_NCCL=ON"; + cmakeFlags = lib.optionals doCheck [ "-DGOOGLE_TEST=ON" ] + ++ lib.optionals cudaSupport [ "-DUSE_CUDA=ON" "-DCUDA_HOST_COMPILER=${cudatoolkit.cc}/bin/cc" ] + ++ lib.optionals ncclSupport [ "-DUSE_NCCL=ON" ]; + + inherit doCheck; installPhase = let libname = "libxgboost${stdenv.hostPlatform.extensions.sharedLibrary}"; in '' + runHook preInstall mkdir -p $out cp -r ../include $out install -Dm755 ../lib/${libname} $out/lib/${libname} install -Dm755 ../xgboost $out/bin/xgboost + runHook postInstall ''; meta = with lib; { description = "Scalable, Portable and Distributed Gradient Boosting (GBDT, GBRT or GBM) Library"; homepage = "https://github.com/dmlc/xgboost"; license = licenses.asl20; - platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ]; + platforms = platforms.unix; maintainers = with maintainers; [ abbradar ]; }; } diff --git a/pkgs/development/python-modules/xgboost/default.nix b/pkgs/development/python-modules/xgboost/default.nix index 81a8d05f5bf..b113e2c3709 100644 --- a/pkgs/development/python-modules/xgboost/default.nix +++ b/pkgs/development/python-modules/xgboost/default.nix @@ -1,6 +1,6 @@ { buildPythonPackage -, pytest -, nose +, pytestCheckHook +, cmake , scipy , scikitlearn , stdenv @@ -10,28 +10,52 @@ , matplotlib , graphviz , datatable +, hypothesis }: buildPythonPackage { pname = "xgboost"; inherit (xgboost) version src meta; - patches = [ - (substituteAll { - src = ./lib-path-for-python.patch; - libpath = "${xgboost}/lib"; - extention = stdenv.hostPlatform.extensions.sharedLibrary; - }) + nativeBuildInputs = [ cmake ]; + buildInputs = [ xgboost ]; + propagatedBuildInputs = [ scipy ]; + checkInputs = [ + pytestCheckHook + scikitlearn + pandas + matplotlib + graphviz + datatable + hypothesis ]; - postPatch = "cd python-package"; - - propagatedBuildInputs = [ scipy ]; - buildInputs = [ xgboost ]; - checkInputs = [ nose pytest scikitlearn pandas matplotlib graphviz datatable ]; - - checkPhase = '' - ln -sf ../demo . - nosetests ../tests/python + # Override existing logic for locating libxgboost.so which is not appropriate for Nix + prePatch = let + libPath = "${xgboost}/lib/libxgboost${stdenv.hostPlatform.extensions.sharedLibrary}"; + in '' + echo 'find_lib_path = lambda: ["${libPath}"]' > python-package/xgboost/libpath.py ''; + + dontUseCmakeConfigure = true; + + postPatch = '' + cd python-package + ''; + + preCheck = '' + ln -sf ../demo . + ln -s ${xgboost}/bin/xgboost ../xgboost + ''; + + pytestFlagsArray = ["../tests/python"]; + disabledTestPaths = [ + # Requires internet access: https://github.com/dmlc/xgboost/blob/03cd087da180b7dff21bd8ef34997bf747016025/tests/python/test_ranking.py#L81 + "../tests/python/test_ranking.py" + ]; + disabledTests = [ + "test_cli_binary_classification" + "test_model_compatibility" + ]; + } diff --git a/pkgs/development/python-modules/xgboost/lib-path-for-python.patch b/pkgs/development/python-modules/xgboost/lib-path-for-python.patch deleted file mode 100644 index c9252c12fed..00000000000 --- a/pkgs/development/python-modules/xgboost/lib-path-for-python.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/python-package/xgboost/libpath.py b/python-package/xgboost/libpath.py -index d87922c0..859a30fb 100644 ---- a/python-package/xgboost/libpath.py -+++ b/python-package/xgboost/libpath.py -@@ -19,32 +19,4 @@ def find_lib_path(): - lib_path: list(string) - List of all found library path to xgboost - """ -- curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) -- # make pythonpack hack: copy this directory one level upper for setup.py -- dll_path = [curr_path, os.path.join(curr_path, '../../lib/'), -- os.path.join(curr_path, './lib/'), -- os.path.join(sys.prefix, 'xgboost')] -- if sys.platform == 'win32': -- if platform.architecture()[0] == '64bit': -- dll_path.append(os.path.join(curr_path, '../../windows/x64/Release/')) -- # hack for pip installation when copy all parent source directory here -- dll_path.append(os.path.join(curr_path, './windows/x64/Release/')) -- else: -- dll_path.append(os.path.join(curr_path, '../../windows/Release/')) -- # hack for pip installation when copy all parent source directory here -- dll_path.append(os.path.join(curr_path, './windows/Release/')) -- dll_path = [os.path.join(p, 'xgboost.dll') for p in dll_path] -- elif sys.platform.startswith('linux') or sys.platform.startswith('freebsd'): -- dll_path = [os.path.join(p, 'libxgboost.so') for p in dll_path] -- elif sys.platform == 'darwin': -- dll_path = [os.path.join(p, 'libxgboost.dylib') for p in dll_path] -- -- lib_path = [p for p in dll_path if os.path.exists(p) and os.path.isfile(p)] -- -- # From github issues, most of installation errors come from machines w/o compilers -- if not lib_path and not os.environ.get('XGBOOST_BUILD_DOC', False): -- raise XGBoostLibraryNotFound( -- 'Cannot find XGBoost Library in the candidate path, ' + -- 'did you install compilers and run build.sh in root path?\n' -- 'List of candidates:\n' + ('\n'.join(dll_path))) -- return lib_path -+ return ["@libpath@/libxgboost@extention@"]