diff --git a/pkgs/development/python-modules/fastdtw/default.nix b/pkgs/development/python-modules/fastdtw/default.nix new file mode 100644 index 000000000000..cb75a599d03a --- /dev/null +++ b/pkgs/development/python-modules/fastdtw/default.nix @@ -0,0 +1,65 @@ +{ lib +, buildPythonPackage +, fetchFromGitHub +, fetchpatch +, cython +, numpy + # Check Inputs +, pytestCheckHook +, python +}: + +buildPythonPackage rec { + pname = "fastdtw"; + version = "0.3.4"; + + src = fetchFromGitHub { + owner = "slaypni"; + repo = pname; + rev = "v${version}"; + sha256 = "0irc5x4ahfp7f7q4ic97qa898s2awi0vdjznahxrfjirn8b157dw"; + }; + + patches = [ + # Removes outdated cythonized C++ file, which doesn't match CPython. Will be auto-used if left. + # Remove when PR 40 merged + (fetchpatch { + url = "https://patch-diff.githubusercontent.com/raw/slaypni/fastdtw/pull/40.patch"; + sha256 = "0xjma0h84bk1n32wgk99rwfc85scp187a7fykhnylmcc73ppal9q"; + }) + ]; + + nativeBuildInputs = [ + cython + ]; + + propagatedBuildInputs = [ + numpy + ]; + + pythonImportsCheck = [ "fastdtw.fastdtw" ]; + checkInputs = [ pytestCheckHook ]; + dontUseSetuptoolsCheck = true; # looks for pytest-runner + preCheck = '' + echo "Temporarily moving tests to $OUT to find cython modules" + export PACKAGEDIR=$out/${python.sitePackages} + cp -r $TMP/source/tests $PACKAGEDIR + pushd $PACKAGEDIR + ''; + postCheck = '' + rm -rf tests + popd + ''; + + + meta = with lib; { + description = "Python implementation of FastDTW (Dynamic Time Warping)"; + longDescription = '' + FastDTW is an approximate Dynamic Time Warping (DTW) algorithm that provides + optimal or near-optimal alignments with an O(N) time and memory complexity. + ''; + homepage = "https://github.com/slaypni/fastdtw"; + license = licenses.mit; + maintainers = with maintainers; [ drewrisinger ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 3b5e60ae9607..b9a6fc9f448e 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2647,6 +2647,8 @@ in { Fabric = callPackage ../development/python-modules/Fabric { }; + fastdtw = callPackage ../development/python-modules/fastdtw { }; + faulthandler = if ! isPy3k then callPackage ../development/python-modules/faulthandler {} else throw "faulthandler is built into ${python.executable}";