1{ lib
2, stdenv
3, buildPythonPackage
4, fetchPypi
5
6# build-system
7, cmake
8, ninja
9, pathspec
10, pyproject-metadata
11, scikit-build-core
12
13# dependencies
14, llvmPackages
15, numpy
16, scipy
17, scikit-learn
18, pythonOlder
19
20# optionals: gpu
21, boost
22, cudatoolkit
23, ocl-icd
24, opencl-headers
25, gpuSupport ? stdenv.isLinux
26}:
27
28buildPythonPackage rec {
29 pname = "lightgbm";
30 version = "4.1.0";
31 format = "pyproject";
32
33 disabled = pythonOlder "3.7";
34
35 src = fetchPypi {
36 inherit pname version;
37 hash = "sha256-vuWd0mmpOwk/LGENSmaDp+qHxj0+o1xiISPOLAILKrw=";
38 };
39
40 nativeBuildInputs = [
41 cmake
42 ninja
43 pathspec
44 pyproject-metadata
45 scikit-build-core
46 ];
47
48 dontUseCmakeConfigure = true;
49
50 buildInputs = (lib.optionals stdenv.cc.isClang [
51 llvmPackages.openmp
52 ]) ++ (lib.optionals gpuSupport [
53 boost
54 cudatoolkit
55 ocl-icd
56 opencl-headers
57 ]);
58
59 propagatedBuildInputs = [
60 numpy
61 scipy
62 scikit-learn
63 ];
64
65 pypaBuildFlags = lib.optionalString gpuSupport "--config-setting=cmake.define.USE_CUDA=ON";
66
67 postConfigure = ''
68 export HOME=$(mktemp -d)
69 '';
70
71 # The pypi package doesn't distribute the tests from the GitHub
72 # repository. It contains c++ tests which don't seem to wired up to
73 # `make check`.
74 doCheck = false;
75
76 pythonImportsCheck = [
77 "lightgbm"
78 ];
79
80 meta = {
81 description = "A fast, distributed, high performance gradient boosting (GBDT, GBRT, GBM or MART) framework";
82 homepage = "https://github.com/Microsoft/LightGBM";
83 changelog = "https://github.com/microsoft/LightGBM/releases/tag/v${version}";
84 license = lib.licenses.mit;
85 maintainers = with lib.maintainers; [ teh ];
86 };
87}