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}