04d3adb82f
This unbreaks the build by updating to a newer version, adding new dependencies and backporting some patches. 0.9 is released already, but that version is no longer compatible with tf1. 0.8.0 is compatible with tf1 and tf2.
130 lines
3.1 KiB
Nix
130 lines
3.1 KiB
Nix
{ lib
|
|
, fetchFromGitHub
|
|
, fetchpatch
|
|
, buildBazelPackage
|
|
, buildPythonPackage
|
|
, python
|
|
, setuptools
|
|
, wheel
|
|
, absl-py
|
|
, tensorflow
|
|
, six
|
|
, numpy
|
|
, decorator
|
|
, cloudpickle
|
|
, gast
|
|
, hypothesis
|
|
, scipy
|
|
, matplotlib
|
|
, mock
|
|
, pytest
|
|
}:
|
|
|
|
let
|
|
version = "0.8.0";
|
|
pname = "tensorflow_probability";
|
|
|
|
# first build all binaries and generate setup.py using bazel
|
|
bazel-wheel = buildBazelPackage {
|
|
name = "${pname}-${version}-py2.py3-none-any.whl";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "tensorflow";
|
|
repo = "probability";
|
|
rev = "${version}";
|
|
sha256 = "07cm8zba8n0ihzdm3k4a4rsg5v62xxsfvcw4h0niz91c0parqjqy";
|
|
};
|
|
|
|
patches = [
|
|
(fetchpatch {
|
|
name = "gast-0.3.patch";
|
|
url = "https://github.com/tensorflow/probability/commit/ae7a9d9771771ec1e7755a3588b9325f050a84cc.patch";
|
|
sha256 = "0kfhx30gshm8f3945na9yjjik71r20qmjzifbigaj4l8dwd9dz1a";
|
|
excludes = ["testing/*"];
|
|
})
|
|
(fetchpatch {
|
|
name = "cloudpickle-1.2.patch";
|
|
url = "https://github.com/tensorflow/probability/commit/78ef12b5afe3f567d16c70b74015ed1ddff1b0c8.patch";
|
|
sha256 = "12ms2xcljvvrnig0j78s3wfv4yf3bm5ps4rgfgv5lg2a8mzpc1ga";
|
|
})
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
# needed to create the output wheel in installPhase
|
|
python
|
|
setuptools
|
|
wheel
|
|
absl-py
|
|
tensorflow
|
|
];
|
|
|
|
bazelTarget = ":pip_pkg";
|
|
|
|
fetchAttrs = {
|
|
sha256 = "0135nxxvkmjzpd80r1g9fdkk9h62g0xlvp32g5zgk0hkma5kq0bx";
|
|
};
|
|
|
|
buildAttrs = {
|
|
preBuild = ''
|
|
patchShebangs .
|
|
'';
|
|
|
|
installPhase = ''
|
|
# work around timestamp issues
|
|
# https://github.com/NixOS/nixpkgs/issues/270#issuecomment-467583872
|
|
export SOURCE_DATE_EPOCH=315532800
|
|
|
|
# First build, then move. Otherwise pip_pkg would create the dir $out
|
|
# and then put the wheel in that directory. However we want $out to
|
|
# point directly to the wheel file.
|
|
./bazel-bin/pip_pkg . --release
|
|
mv *.whl "$out"
|
|
'';
|
|
};
|
|
};
|
|
in buildPythonPackage {
|
|
inherit version pname;
|
|
format = "wheel";
|
|
|
|
src = bazel-wheel;
|
|
|
|
propagatedBuildInputs = [
|
|
tensorflow
|
|
six
|
|
numpy
|
|
decorator
|
|
cloudpickle
|
|
gast
|
|
];
|
|
|
|
# Listed here:
|
|
# https://github.com/tensorflow/probability/blob/f01d27a6f256430f03b14beb14d37def726cb257/testing/run_tests.sh#L58
|
|
checkInputs = [
|
|
hypothesis
|
|
pytest
|
|
scipy
|
|
matplotlib
|
|
mock
|
|
];
|
|
|
|
# actual checks currently fail because for some reason
|
|
# tf.enable_eager_execution is called too late. Probably because upstream
|
|
# intents these tests to be run by bazel, not plain pytest.
|
|
# checkPhase = ''
|
|
# # tests need to import from other test files
|
|
# export PYTHONPATH="$PWD/tensorflow-probability:$PYTHONPATH"
|
|
# py.test
|
|
# '';
|
|
|
|
# sanity check
|
|
checkPhase = ''
|
|
python -c 'import tensorflow_probability'
|
|
'';
|
|
|
|
meta = with lib; {
|
|
description = "Library for probabilistic reasoning and statistical analysis";
|
|
homepage = "https://www.tensorflow.org/probability/";
|
|
license = licenses.asl20;
|
|
maintainers = with maintainers; [ timokau ];
|
|
};
|
|
}
|