diff --git a/pkgs/development/libraries/taco/default.nix b/pkgs/development/libraries/taco/default.nix new file mode 100644 index 00000000000..1bd404806f1 --- /dev/null +++ b/pkgs/development/libraries/taco/default.nix @@ -0,0 +1,54 @@ +{ stdenv +, lib +, fetchgit +, cmake +, llvmPackages +, enablePython ? false +, python ? null +}: + +let pyEnv = python.withPackages (p: with p; [ numpy scipy ]); + +in stdenv.mkDerivation rec { + pname = "taco"; + version = "unstable-2022-08-02"; + + src = fetchgit { + url = "https://github.com/tensor-compiler/${pname}.git"; + rev = "2b8ece4c230a5f0f0a74bc6f48e28edfb6c1c95e"; + fetchSubmodules = true; + hash = "sha256-PnBocyRLiLALuVS3Gkt/yJeslCMKyK4zdsBI8BFaTSg="; + }; + + # Remove test cases from cmake build as they violate modern C++ expectations + patches = [ ./taco.patch ]; + + nativeBuildInputs = [ cmake ]; + + buildInputs = lib.optional stdenv.isDarwin llvmPackages.openmp; + + propagatedBuildInputs = lib.optional enablePython pyEnv; + + cmakeFlags = [ + "-DOPENMP=ON" + ] ++ lib.optional enablePython "-DPYTHON=ON" ; + + postInstall = lib.strings.optionalString enablePython '' + mkdir -p $out/${python.sitePackages} + cp -r lib/pytaco $out/${python.sitePackages}/. + ''; + + # The standard CMake test suite fails a single test of the CLI interface. + doCheck = false; + + # Cython somehow gets built with references to /build/. + # However, the python module works flawlessly. + dontFixup = enablePython; + + meta = with lib; { + description = "Computes sparse tensor expressions on CPUs and GPUs"; + license = licenses.mit; + homepage = "https://github.com/tensor-compiler/taco"; + maintainers = [ maintainers.sheepforce ]; + }; +} diff --git a/pkgs/development/libraries/taco/taco.patch b/pkgs/development/libraries/taco/taco.patch new file mode 100644 index 00000000000..1fc61c2aa5a --- /dev/null +++ b/pkgs/development/libraries/taco/taco.patch @@ -0,0 +1,13 @@ +diff --git a/test/tests-tensor_types.cpp b/test/tests-tensor_types.cpp +index 39d1b30a..c507da81 100644 +--- a/test/tests-tensor_types.cpp ++++ b/test/tests-tensor_types.cpp +@@ -45,7 +45,7 @@ TYPED_TEST_P(VectorTensorTest, types) { + ASSERT_EQ(t, a.getComponentType()); + ASSERT_EQ(1, a.getOrder()); + ASSERT_EQ(5, a.getDimension(0)); +- map,TypeParam> vals = {{{0}, 1.0}, {{2}, 2.0}}; ++ map,TypeParam> vals = {{{0}, (TypeParam)1.0}, {{2}, (TypeParam)2.0}}; + for (auto& val : vals) { + a.insert(val.first, val.second); + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9ae88afbebb..972af7d7892 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -22959,6 +22959,8 @@ with pkgs; dbcsr = callPackage ../development/libraries/science/math/dbcsr { }; + taco = callPackage ../development/libraries/taco { }; + ## libGL/libGLU/Mesa stuff # Default libGL implementation, should provide headers and diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index e663e10f266..8d7e8dd7c34 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -11799,6 +11799,11 @@ self: super: with self; { tabview = callPackage ../development/python-modules/tabview { }; + taco = toPythonModule (pkgs.taco.override { + inherit (self) python; + enablePython = true; + }); + tadasets = callPackage ../development/python-modules/tadasets { }; tag-expressions = callPackage ../development/python-modules/tag-expressions { };