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 cmakeFlags = [
91 (lib.cmakeBool "USE_GPU" gpuSupport)
92 (lib.cmakeBool "USE_CUDA" cudaSupport)
93 ];
94
95 optional-dependencies = {
96 arrow = [
97 cffi
98 pyarrow
99 ];
100 dask = [
101 dask
102 pandas
103 ]
104 ++ dask.optional-dependencies.array
105 ++ dask.optional-dependencies.dataframe
106 ++ dask.optional-dependencies.distributed;
107 pandas = [ pandas ];
108 scikit-learn = [ scikit-learn ];
109 };
110
111 # No python tests
112 doCheck = false;
113
114 pythonImportsCheck = [ "lightgbm" ];
115
116 meta = {
117 description = "Fast, distributed, high performance gradient boosting (GBDT, GBRT, GBM or MART) framework";
118 homepage = "https://github.com/Microsoft/LightGBM";
119 changelog = "https://github.com/microsoft/LightGBM/releases/tag/v${version}";
120 license = lib.licenses.mit;
121 maintainers = with lib.maintainers; [ teh ];
122 };
123}