summary refs log tree commit diff
diff options
context:
space:
mode:
authorSandro <sandro.jaeckel@gmail.com>2023-07-12 14:11:12 +0200
committerGitHub <noreply@github.com>2023-07-12 14:11:12 +0200
commit207321e00ad832d68613c82570cc5cc45f9706eb (patch)
treee719ba09a9bc22a1dd3577ce79428465dd124f88
parent3a671cd64d03f4e55eb6c817d6294910e0ccc133 (diff)
parentc4618e062299160a94f813d42ae6a5de0ec51413 (diff)
downloadnixpkgs-207321e00ad832d68613c82570cc5cc45f9706eb.tar
nixpkgs-207321e00ad832d68613c82570cc5cc45f9706eb.tar.gz
nixpkgs-207321e00ad832d68613c82570cc5cc45f9706eb.tar.bz2
nixpkgs-207321e00ad832d68613c82570cc5cc45f9706eb.tar.lz
nixpkgs-207321e00ad832d68613c82570cc5cc45f9706eb.tar.xz
nixpkgs-207321e00ad832d68613c82570cc5cc45f9706eb.tar.zst
nixpkgs-207321e00ad832d68613c82570cc5cc45f9706eb.zip
Merge pull request #242776 from natsukium/shap/fix
-rw-r--r--pkgs/development/python-modules/shap/default.nix118
-rw-r--r--pkgs/development/python-modules/slicer/default.nix33
2 files changed, 89 insertions, 62 deletions
diff --git a/pkgs/development/python-modules/shap/default.nix b/pkgs/development/python-modules/shap/default.nix
index 96c9c1f952a..9284d645215 100644
--- a/pkgs/development/python-modules/shap/default.nix
+++ b/pkgs/development/python-modules/shap/default.nix
@@ -1,51 +1,68 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, writeText
-, isPy27
+, fetchpatch
 , pytestCheckHook
-, pytest-mpl
+, pythonOlder
+, writeText
+, catboost
+, cloudpickle
+, ipython
+, lightgbm
+, lime
+, matplotlib
+, nose
+, numba
 , numpy
-, scipy
-, scikit-learn
-, pandas
-, transformers
 , opencv4
-, lightgbm
-, catboost
+, pandas
 , pyspark
+, pytest-mpl
+, scikit-learn
+, scipy
 , sentencepiece
-, tqdm
+, setuptools
 , slicer
-, numba
-, matplotlib
-, nose
-, lime
-, cloudpickle
-, ipython
+, tqdm
+, transformers
+, xgboost
 }:
 
 buildPythonPackage rec {
   pname = "shap";
-  version = "0.41.0";
-  disabled = isPy27;
+  version = "0.42.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.7";
 
   src = fetchFromGitHub {
     owner = "slundberg";
-    repo = pname;
+    repo = "shap";
     rev = "refs/tags/v${version}";
-    hash = "sha256-rYVWQ3VRvIObSQPwDRsxhTOGOKNkYkLtiHzVwoB3iJ0=";
+    hash = "sha256-VGlswr9ywHk4oKSmmAzEC7+E0V2XEFlg19zXVktUdhc=";
   };
 
+  patches = [
+    (fetchpatch {
+      name = "fix-circular-import-error.patch";
+      url = "https://github.com/slundberg/shap/commit/ce118526b19b4a206cf8b496c2cd2b215ef7a91b.patch";
+      hash = "sha256-n2yFjFgc2VSFKb4ZJx775HblULWfnQSEnqjfPa8AOt0=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
   propagatedBuildInputs = [
+    cloudpickle
+    numba
     numpy
-    scipy
-    scikit-learn
     pandas
-    tqdm
+    scikit-learn
+    scipy
     slicer
-    numba
-    cloudpickle
+    tqdm
   ];
 
   passthru.optional-dependencies = {
@@ -58,7 +75,7 @@ buildPythonPackage rec {
     # tests that try to access the network will raise, get caught, be marked as skipped and tagged as xfailed.
     conftestSkipNetworkErrors = writeText "conftest.py" ''
       from _pytest.runner import pytest_runtest_makereport as orig_pytest_runtest_makereport
-      import urllib, requests
+      import urllib, requests, transformers
 
       class NetworkAccessDeniedError(RuntimeError): pass
       def deny_network_access(*a, **kw):
@@ -68,6 +85,7 @@ buildPythonPackage rec {
       requests.get  = deny_network_access
       urllib.request.urlopen = deny_network_access
       urllib.request.Request = deny_network_access
+      transformers.AutoTokenizer.from_pretrained = deny_network_access
 
       def pytest_runtest_makereport(item, call):
         tr = orig_pytest_runtest_makereport(item, call)
@@ -81,55 +99,41 @@ buildPythonPackage rec {
     # when importing the local copy the extension is not found
     rm -r shap
 
-    # coverage testing is a waste considering how much we have to skip
-    substituteInPlace pytest.ini \
-      --replace "--cov=shap --cov-report=term-missing" ""
-
     # Add pytest hook skipping tests that access network.
     # These tests are marked as "Expected fail" (xfail)
     cat ${conftestSkipNetworkErrors} >> tests/conftest.py
   '';
+
   nativeCheckInputs = [
-    pytestCheckHook
-    pytest-mpl
+    ipython
     matplotlib
     nose
-    ipython
+    pytest-mpl
+    pytestCheckHook
     # optional dependencies, which only serve to enable more tests:
-    opencv4
-    #pytorch # we already skip all its tests due to slowness, adding it does nothing
-    transformers
-    #xgboost # numerically unstable? xgboost tests randomly fails pending on nixpkgs revision
-    lightgbm
     catboost
+    lightgbm
+    opencv4
     pyspark
     sentencepiece
+    #torch # we already skip all its tests due to slowness, adding it does nothing
+    transformers
+    xgboost
   ];
+
   disabledTestPaths = [
-    # takes forever without GPU acceleration
-    "tests/explainers/test_deep.py"
-    "tests/explainers/test_gradient.py"
-    # requires GPU. We skip here instead of having pytest repeatedly check for GPU
-    "tests/explainers/test_gpu_tree.py"
     # The resulting plots look sane, but does not match pixel-perfectly with the baseline.
     # Likely due to a matplotlib version mismatch, different backend, or due to missing fonts.
     "tests/plots/test_summary.py" # FIXME: enable
-    # 100% of the tests in these paths require network
-    "tests/explainers/test_explainer.py"
-    "tests/explainers/test_exact.py"
-    "tests/explainers/test_partition.py"
-    "tests/maskers/test_fixed_composite.py"
-    "tests/maskers/test_text.py"
-    "tests/models/test_teacher_forcing_logits.py"
-    "tests/models/test_text_generation.py"
   ];
+
   disabledTests = [
-    # unstable. A xgboost-enabled test. possibly related: https://github.com/slundberg/shap/issues/2480
-    "test_provided_background_tree_path_dependent"
+    # The same reason as above test_summary.py
+    "test_simple_bar_with_cohorts_dict"
+    "test_random_summary_violin_with_data2"
+    "test_random_summary_layered_violin_with_data2"
   ];
 
-  #pytestFlagsArray = ["-x" "-W" "ignore"]; # uncomment this to debug
-
   pythonImportsCheck = [
     "shap"
     "shap.explainers"
@@ -149,9 +153,5 @@ buildPythonPackage rec {
     changelog = "https://github.com/slundberg/shap/releases/tag/v${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ evax ];
-    platforms = platforms.unix;
-    # No support for scikit-learn > 1.2
-    # https://github.com/slundberg/shap/issues/2866
-    broken = true;
   };
 }
diff --git a/pkgs/development/python-modules/slicer/default.nix b/pkgs/development/python-modules/slicer/default.nix
index 7228c791461..f678dfb2eaa 100644
--- a/pkgs/development/python-modules/slicer/default.nix
+++ b/pkgs/development/python-modules/slicer/default.nix
@@ -1,8 +1,10 @@
 { lib
 , buildPythonPackage
+, dos2unix
+, fetchpatch
 , fetchPypi
-, isPy27
 , pytestCheckHook
+, pythonOlder
 , pandas
 , torch
 , scipy
@@ -11,13 +13,38 @@
 buildPythonPackage rec {
   pname = "slicer";
   version = "0.0.7";
-  disabled = isPy27;
+  format = "setuptools";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f5d5f7b45f98d155b9c0ba6554fa9770c6b26d5793a3e77a1030fb56910ebeec";
+    hash = "sha256-9dX3tF+Y0VW5wLplVPqXcMaybVeTo+d6EDD7VpEOvuw=";
   };
 
+  prePatch = ''
+    dos2unix slicer/*
+  '';
+
+  patches = [
+    # these patches add support for numpy>=1.24
+    (fetchpatch {
+      url = "https://github.com/interpretml/slicer/commit/028e09e639c4a3c99abe1d537cce30af2eebb081.patch";
+      hash = "sha256-jh/cbz7cx2ks6jMNh1gI1n5RS/OHBtSIDZRxUGyrl/I=";
+    })
+    (fetchpatch {
+      url = "https://github.com/interpretml/slicer/commit/d4bb09f136d7e1f64711633c16a37e7bee738696.patch";
+      hash = "sha256-9rh99s4JWF4iKClZ19jvqSeRulL32xB5Use8PGkh/SA=";
+    })
+    (fetchpatch {
+      url = "https://github.com/interpretml/slicer/commit/74b3683a5a7bd982f9eaaf8d8d665dfdaf2c6604.patch";
+      hash = "sha256-R3zsC3udYPFUT93eRhb6wyc9S5n2wceiOunWJ8K+648=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    dos2unix
+  ];
+
   nativeCheckInputs = [ pytestCheckHook pandas torch scipy ];
 
   disabledTests = [