3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/development/python-modules/tensorflow-probability/default.nix
Matthew Bauer 2a8d05627b build-bazel-package: switch hash mode to “flat”
flat hashes can be substituted through hashed-mirrors, while recursive
hashes can’t. This is especially important for Bazel since the bazel
fetch dependencies can come from multiple different methods (git,
http, ftp, etc.). To do this, we create tar archives from the
output/external directory, which is then extracted to build. All of
the Bazel hashes are all updated.
2020-05-09 13:33:26 -05:00

131 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 = "0nmk7sbgl1ag20333v9r7l5cka6wapbskikfhi3y5a8l9f6hxkl3";
};
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 ];
};
}