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 ]
69 ++ lib.optionals cudaSupport [ cudaPackages.cuda_nvcc ];
70
71 dontUseCmakeConfigure = true;
72
73 buildInputs =
74 (lib.optionals stdenv.cc.isClang [ llvmPackages.openmp ])
75 ++ (lib.optionals gpuSupport [
76 boost
77 ocl-icd
78 opencl-headers
79 ])
80 ++ lib.optionals cudaSupport [
81 cudaPackages.cuda_nvcc
82 cudaPackages.cuda_cudart
83 ];
84
85 dependencies = [
86 numpy
87 scipy
88 ];
89
90 pypaBuildFlags =
91 lib.optionals gpuSupport [ "--config-setting=cmake.define.USE_GPU=ON" ]
92 ++ lib.optionals cudaSupport [ "--config-setting=cmake.define.USE_CUDA=ON" ];
93
94 optional-dependencies = {
95 arrow = [
96 cffi
97 pyarrow
98 ];
99 dask = [
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}