forked from mirrors/nixpkgs
2a8d05627b
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.
131 lines
3.1 KiB
Nix
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 ];
|
|
};
|
|
}
|