e264d4f4ac
On darwin the test session fails immediately, because it resolves some symlink to /nix/nix-installer, tries to stat that, and fails with PermissionError. The traceback is unfortunately completely outside of the projects code path, so kinda hard to debug.
120 lines
2.4 KiB
Nix
120 lines
2.4 KiB
Nix
{ stdenv
|
|
, lib
|
|
, buildPythonPackage
|
|
, fetchPypi
|
|
|
|
# build-system
|
|
, cython_3
|
|
, gfortran
|
|
, numpy
|
|
, scipy
|
|
, setuptools
|
|
, wheel
|
|
|
|
# native dependencies
|
|
, glibcLocales
|
|
, llvmPackages
|
|
, pytestCheckHook
|
|
, pytest-xdist
|
|
, pillow
|
|
, joblib
|
|
, threadpoolctl
|
|
, pythonOlder
|
|
}:
|
|
|
|
buildPythonPackage rec {
|
|
pname = "scikit-learn";
|
|
version = "1.4.1.post1";
|
|
pyproject = true;
|
|
|
|
disabled = pythonOlder "3.9";
|
|
|
|
src = fetchPypi {
|
|
inherit pname version;
|
|
hash = "sha256-k9PUlv8ZZUcPmXfQXl7DN2+x5jsQ5P2l450jwtiWmjA=";
|
|
};
|
|
|
|
buildInputs = [
|
|
pillow
|
|
glibcLocales
|
|
] ++ lib.optionals stdenv.cc.isClang [
|
|
llvmPackages.openmp
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
gfortran
|
|
];
|
|
|
|
build-system = [
|
|
cython_3
|
|
numpy
|
|
scipy
|
|
setuptools
|
|
wheel
|
|
];
|
|
|
|
propagatedBuildInputs = [
|
|
numpy.blas
|
|
];
|
|
|
|
dependencies = [
|
|
joblib
|
|
numpy
|
|
scipy
|
|
threadpoolctl
|
|
];
|
|
|
|
nativeCheckInputs = [
|
|
pytestCheckHook
|
|
pytest-xdist
|
|
];
|
|
|
|
env.LC_ALL="en_US.UTF-8";
|
|
|
|
preBuild = ''
|
|
export SKLEARN_BUILD_PARALLEL=$NIX_BUILD_CORES
|
|
'';
|
|
|
|
# PermissionError: [Errno 1] Operation not permitted: '/nix/nix-installer'
|
|
doCheck = !stdenv.isDarwin;
|
|
|
|
disabledTests = [
|
|
# Skip test_feature_importance_regression - does web fetch
|
|
"test_feature_importance_regression"
|
|
];
|
|
|
|
pytestFlagsArray = [
|
|
# verbose build outputs needed to debug hard-to-reproduce hydra failures
|
|
"-v"
|
|
"--pyargs" "sklearn"
|
|
|
|
# NuSVC memmap tests causes segmentation faults in certain environments
|
|
# (e.g. Hydra Darwin machines) related to a long-standing joblib issue
|
|
# (https://github.com/joblib/joblib/issues/563). See also:
|
|
# https://github.com/scikit-learn/scikit-learn/issues/17582
|
|
# Since we are overriding '-k' we need to include the 'disabledTests' from above manually.
|
|
"-k" "'not (NuSVC and memmap) ${toString (lib.forEach disabledTests (t: "and not ${t}"))}'"
|
|
];
|
|
|
|
preCheck = ''
|
|
cd $TMPDIR
|
|
export HOME=$TMPDIR
|
|
export OMP_NUM_THREADS=1
|
|
'';
|
|
|
|
pythonImportsCheck = [ "sklearn" ];
|
|
|
|
meta = with lib; {
|
|
description = "A set of python modules for machine learning and data mining";
|
|
changelog = let
|
|
major = versions.major version;
|
|
minor = versions.minor version;
|
|
dashVer = replaceStrings ["."] ["-"] version;
|
|
in
|
|
"https://scikit-learn.org/stable/whats_new/v${major}.${minor}.html#version-${dashVer}";
|
|
homepage = "https://scikit-learn.org";
|
|
license = licenses.bsd3;
|
|
maintainers = with maintainers; [ davhau ];
|
|
};
|
|
}
|