1{ 2 lib, 3 config, 4 stdenv, 5 pkgs, 6 buildPythonPackage, 7 fetchPypi, 8 9 # build-system 10 scikit-build-core, 11 12 # nativeBuildInputs 13 cmake, 14 ninja, 15 pathspec, 16 pyproject-metadata, 17 writableTmpDirAsHomeHook, 18 19 # buildInputs 20 llvmPackages, 21 boost, 22 ocl-icd, 23 opencl-headers, 24 25 # dependencies 26 numpy, 27 scipy, 28 29 # optional-dependencies 30 cffi, 31 dask, 32 pandas, 33 pyarrow, 34 scikit-learn, 35 36 # optionals: gpu 37 gpuSupport ? stdenv.hostPlatform.isLinux && !cudaSupport, 38 cudaSupport ? config.cudaSupport, 39 cudaPackages, 40}: 41 42assert gpuSupport -> !cudaSupport; 43assert cudaSupport -> !gpuSupport; 44 45buildPythonPackage rec { 46 inherit (pkgs.lightgbm) 47 pname 48 version 49 patches 50 ; 51 pyproject = true; 52 53 src = fetchPypi { 54 inherit pname version; 55 hash = "sha256-yxxZcg61aTicC6dNFPUjUbVzr0ifIwAyocnzFPi6t/4="; 56 }; 57 58 build-system = [ 59 scikit-build-core 60 ]; 61 62 nativeBuildInputs = [ 63 cmake 64 ninja 65 pathspec 66 pyproject-metadata 67 writableTmpDirAsHomeHook 68 ] ++ lib.optionals cudaSupport [ cudaPackages.cuda_nvcc ]; 69 70 dontUseCmakeConfigure = true; 71 72 buildInputs = 73 (lib.optionals stdenv.cc.isClang [ llvmPackages.openmp ]) 74 ++ (lib.optionals gpuSupport [ 75 boost 76 ocl-icd 77 opencl-headers 78 ]) 79 ++ lib.optionals cudaSupport [ 80 cudaPackages.cuda_nvcc 81 cudaPackages.cuda_cudart 82 ]; 83 84 dependencies = [ 85 numpy 86 scipy 87 ]; 88 89 pypaBuildFlags = 90 lib.optionals gpuSupport [ "--config-setting=cmake.define.USE_GPU=ON" ] 91 ++ lib.optionals cudaSupport [ "--config-setting=cmake.define.USE_CUDA=ON" ]; 92 93 optional-dependencies = { 94 arrow = [ 95 cffi 96 pyarrow 97 ]; 98 dask = 99 [ 100 dask 101 pandas 102 ] 103 ++ dask.optional-dependencies.array 104 ++ dask.optional-dependencies.dataframe 105 ++ dask.optional-dependencies.distributed; 106 pandas = [ pandas ]; 107 scikit-learn = [ scikit-learn ]; 108 }; 109 110 # No python tests 111 doCheck = false; 112 113 pythonImportsCheck = [ "lightgbm" ]; 114 115 meta = { 116 description = "Fast, distributed, high performance gradient boosting (GBDT, GBRT, GBM or MART) framework"; 117 homepage = "https://github.com/Microsoft/LightGBM"; 118 changelog = "https://github.com/microsoft/LightGBM/releases/tag/v${version}"; 119 license = lib.licenses.mit; 120 maintainers = with lib.maintainers; [ teh ]; 121 }; 122}