summary refs log tree commit diff
path: root/pkgs/development/python-modules/retworkx/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules/retworkx/default.nix')
-rw-r--r--pkgs/development/python-modules/retworkx/default.nix77
1 files changed, 42 insertions, 35 deletions
diff --git a/pkgs/development/python-modules/retworkx/default.nix b/pkgs/development/python-modules/retworkx/default.nix
index 309f3532cfc..49e4b1c2fc3 100644
--- a/pkgs/development/python-modules/retworkx/default.nix
+++ b/pkgs/development/python-modules/retworkx/default.nix
@@ -1,53 +1,60 @@
 { lib
-, buildPythonPackage
-, pythonOlder
-, pythonAtLeast
+, rustPlatform
 , python
+, fetchpatch
 , fetchFromGitHub
-, fetchPypi
+, pipInstallHook
+, maturin
+, pip
   # Check inputs
 , pytestCheckHook
+, numpy
 }:
-let
-  rx-version = "0.3.4";
 
-  wheel-hashes = {
-    "3.7" = { python = "cp37"; sha256 = "1hfrdj8svkfdraa299gcj18a601l4zn646fkgq7m56brpagssf9l"; };
-    "3.8" = { python = "cp38"; sha256 = "0jm10ywaqr0b456pcp01pb7035nawlndfi998jv8p1a2f5xwjgiq"; };
-  };
-  lookup = set: key: default: if (builtins.hasAttr key set) then (builtins.getAttr key set) else default;
-  wheel-args = lookup
-    wheel-hashes
-    python.pythonVersion
-    (throw "retworkx python version & hash not included. Override attribute `wheel-args` with version & hash at https://pypi.org/project/retworkx");
+rustPlatform.buildRustPackage rec {
+  pname = "retworkx";
+  version = "0.4.0";
 
-  github-source = fetchFromGitHub {
+  src = fetchFromGitHub {
     owner = "Qiskit";
     repo = "retworkx";
-    rev = rx-version;
-    sha256 = "0cd3x64y49q9a3jrkiknlfkiccxkxgl624x5pqk7gm34s1lnzl8h";
+    rev = version;
+    sha256 = "1xqp6d39apkjvd0ad9vw81cp2iqzhpagfa4p171xqm3bwfn2imdc";
   };
-in
-buildPythonPackage rec {
-  pname = "retworkx";
-  version = rx-version;
-  format = "wheel";
 
-  disabled = pythonOlder "3.5" || pythonAtLeast "3.9"; # compiled versions only included for 3.5 <= py <= 3.8
+  cargoSha256 = "0bma0l14jv5qhcsxck7vw3ak1w3c8v84cq4hii86i4iqk523zns5";
+  cargoPatches = [
+      ( fetchpatch {
+        name = "retworkx-cargo-lock.patch";
+        url = "https://github.com/Qiskit/retworkx/commit/a02fd33d357a92dbe9530696a6d85aa59fe8a5b9.patch";
+        sha256 = "0gvxr1nqp9ll4skfks4p4d964pshal25kb1nbfzhpyipnzddizr5";
+      } )
+  ];
 
-  src = fetchPypi {
-    inherit pname version format;
-    inherit (wheel-args) python sha256;
-    abi = if pythonOlder "3.8" then "${wheel-args.python}m" else wheel-args.python;
-    platform = "manylinux2010_x86_64"; # i686, aarch64, and ppc64 also available, restricting to x86 for simplicity
-  };
+  propagatedBuildInputs = [ python ];
+
+  nativeBuildInputs = [ pipInstallHook maturin pip ];
 
-  pythonImportsCheck = [ "retworkx" ];
+  # Need to check AFTER python wheel is installed (b/c using Rust Build, not buildPythonPackage)
+  doCheck = false;
+  doInstallCheck = true;
+
+  buildPhase = ''
+    runHook preBuild
+    maturin build --release --manylinux off --strip --interpreter ${python.interpreter}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    install -Dm644 -t dist target/wheels/*.whl
+    pipInstallPhase
+  '';
 
-  checkInputs = [ pytestCheckHook ];
+  installCheckInputs = [ pytestCheckHook numpy ];
   preCheck = ''
-    pushd $(mktemp -d)
-    cp -r ${github-source}/$sourceRoot/tests .
+    export TESTDIR=$(mktemp -d)
+    cp -r $TMP/$sourceRoot/tests $TESTDIR
+    pushd $TESTDIR
   '';
   postCheck = "popd";
 
@@ -55,8 +62,8 @@ buildPythonPackage rec {
     description = "A python graph library implemented in Rust.";
     homepage = "https://retworkx.readthedocs.io/en/latest/index.html";
     downloadPage = "https://github.com/Qiskit/retworkx/releases";
+    changelog = "https://github.com/Qiskit/retworkx/releases/tag/${version}";
     license = licenses.asl20;
     maintainers = with maintainers; [ drewrisinger ];
-    platforms = platforms.x86_64;
   };
 }