nixpkgs/pkgs/development/python-modules/Theano/default.nix
Guillaume Girol 33afbf39f6 treewide: switch to nativeCheckInputs
checkInputs used to be added to nativeBuildInputs. Now we have
nativeCheckInputs to do that instead. Doing this treewide change allows
to keep hashes identical to before the introduction of
nativeCheckInputs.
2023-01-21 12:00:00 +00:00

104 lines
3.1 KiB
Nix

{ lib, stdenv
, runCommandCC
, fetchPypi
, buildPythonPackage
, isPyPy
, pythonOlder
, isPy3k
, nose
, numpy
, scipy
, setuptools
, six
, libgpuarray
, cudaSupport ? false, cudaPackages ? {}
, cudnnSupport ? false
}:
let
inherit (cudaPackages) cudatoolkit cudnn;
in
assert cudnnSupport -> cudaSupport;
let
wrapped = command: buildTop: buildInputs:
runCommandCC "${command}-wrapped" { inherit buildInputs; } ''
type -P '${command}' || { echo '${command}: not found'; exit 1; }
cat > "$out" <<EOF
#!$(type -P bash)
$(declare -xp | sed -e '/^[^=]\+="\('"''${NIX_STORE//\//\\/}"'\|[^\/]\)/!d')
declare -x NIX_BUILD_TOP="${buildTop}"
$(type -P '${command}') "\$@"
EOF
chmod +x "$out"
'';
# Theano spews warnings and disabled flags if the compiler isn't named g++
cxx_compiler_name =
if stdenv.cc.isGNU then "g++" else
if stdenv.cc.isClang then "clang++" else
throw "Unknown C++ compiler";
cxx_compiler = wrapped cxx_compiler_name "\\$HOME/.theano"
( lib.optional cudaSupport libgpuarray_
++ lib.optional cudnnSupport cudnn );
# We need to be careful with overriding Python packages within the package set
# as this can lead to collisions!
libgpuarray_ = libgpuarray.override { inherit cudaSupport cudaPackages; };
in buildPythonPackage rec {
pname = "Theano";
version = "1.0.5";
disabled = isPyPy || pythonOlder "2.6" || (isPy3k && pythonOlder "3.3");
src = fetchPypi {
inherit pname version;
sha256 = "129f43ww2a6badfdr6b88kzjzz2b0wk0dwkvwb55z6dsagfkk53f";
};
postPatch = ''
substituteInPlace theano/configdefaults.py \
--replace 'StrParam(param, is_valid=warn_cxx)' 'StrParam('\'''${cxx_compiler}'\''', is_valid=warn_cxx)' \
--replace 'rc == 0 and config.cxx != ""' 'config.cxx != ""'
'' + lib.optionalString cudaSupport ''
substituteInPlace theano/configdefaults.py \
--replace 'StrParam(get_cuda_root)' 'StrParam('\'''${cudatoolkit}'\''')'
'' + lib.optionalString cudnnSupport ''
substituteInPlace theano/configdefaults.py \
--replace 'StrParam(default_dnn_base_path)' 'StrParam('\'''${cudnn}'\''')'
'';
# needs to be postFixup so it runs before pythonImportsCheck even when
# doCheck = false (meaning preCheck would be disabled)
postFixup = ''
mkdir -p check-phase
export HOME=$(pwd)/check-phase
'';
doCheck = false;
# takes far too long, also throws "TypeError: sort() missing 1 required positional argument: 'a'"
# when run from the installer, and testing with Python 3.5 hits github.com/Theano/Theano/issues/4276,
# the fix for which hasn't been merged yet.
# keep Nose around since running the tests by hand is possible from Python or bash
nativeCheckInputs = [ nose ];
# setuptools needed for cuda support
propagatedBuildInputs = [
libgpuarray_
numpy
numpy.blas
scipy
setuptools
six
];
pythonImportsCheck = [ "theano" ];
meta = with lib; {
homepage = "https://github.com/Theano/Theano";
description = "A Python library for large-scale array computation";
license = licenses.bsd3;
maintainers = [ ];
};
}