{
lib,
stdenv,
fetchFromGitHub,
useCoefficients ? false,
indicateProgress ? false,
useGoogleHashmap ? false,
sparsehash ? null,
fileFormat ? "lowerTriangularCsv",
}:
assert lib.assertOneOf "fileFormat" fileFormat [
"lowerTriangularCsv"
"upperTriangularCsv"
"dipha"
];
assert useGoogleHashmap -> sparsehash != null;
let
version = "1.2.1";
in
stdenv.mkDerivation {
pname = "ripser";
inherit version;
src = fetchFromGitHub {
owner = "Ripser";
repo = "ripser";
rev = "v${version}";
sha256 = "sha256-BxmkPQ/nl5cF+xwQMTjXnLgkLgdmT/39y7Kzl2wDfpE=";
};
buildInputs = lib.optional useGoogleHashmap sparsehash;
buildFlags =
[
"-std=c++11"
"-O3"
"-D NDEBUG"
]
++ lib.optional useCoefficients "-D USE_COEFFICIENTS"
++ lib.optional indicateProgress "-D INDICATE_PROGRESS"
++ lib.optional useGoogleHashmap "-D USE_GOOGLE_HASHMAP"
++ lib.optional (fileFormat == "lowerTriangularCsv") "-D FILE_FORMAT_LOWER_TRIANGULAR_CSV"
++ lib.optional (fileFormat == "upperTriangularCsv") "-D FILE_FORMAT_UPPER_TRIANGULAR_CSV"
++ lib.optional (fileFormat == "dipha") "-D FILE_FORMAT_DIPHA";
buildPhase = "c++ ripser.cpp -o ripser $buildFlags";
installPhase = ''
mkdir -p $out/bin
cp ripser $out/bin
'';
meta = {
description = "Lean C++ code for the computation of Vietoris–Rips persistence barcodes";
mainProgram = "ripser";
homepage = "https://github.com/Ripser/ripser";
license = lib.licenses.lgpl3;
maintainers = with lib.maintainers; [ erikryb ];
platforms = lib.platforms.linux;
}