diff --git a/pkgs/development/python-modules/numpy-scipy-support.nix b/pkgs/development/python-modules/numpy-scipy-support.nix deleted file mode 100644 index 422de794e31b..000000000000 --- a/pkgs/development/python-modules/numpy-scipy-support.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - # Python package expression - python, - # Name of package (e.g. numpy or scipy) - pkgName, - # OpenBLAS math library - openblas -}: - -{ - # Re-export openblas here so that it can be sure that the same one will be used - # in the propagatedBuildInputs. - inherit openblas; - - # First "install" the package, then import what was installed, and call the - # .test() function, which will run the test suite. - checkPhase = '' - runHook preCheck - pushd dist - ${python.interpreter} -c 'import ${pkgName}; ${pkgName}.test("fast", verbose=10)' - popd - runHook postCheck - ''; - - # Creates a site.cfg telling the setup script where to find depended-on - # math libraries. - preBuild = '' - echo "Creating site.cfg file..." - cat << EOF > site.cfg - [openblas] - include_dirs = ${openblas}/include - library_dirs = ${openblas}/lib - EOF - ''; -} diff --git a/pkgs/development/python-modules/numpy.nix b/pkgs/development/python-modules/numpy.nix new file mode 100644 index 000000000000..141c8b14fa6d --- /dev/null +++ b/pkgs/development/python-modules/numpy.nix @@ -0,0 +1,51 @@ +{lib, python, buildPythonPackage, isPyPy, gfortran, nose, blas}: + +args: + +let + inherit (args) version; +in buildPythonPackage (args // rec { + + name = "numpy-${version}"; + + disabled = isPyPy; + buildInputs = args.buildInputs or [ gfortran nose ]; + propagatedBuildInputs = args.propagatedBuildInputs or [ passthru.blas ]; + + preConfigure = '' + sed -i 's/-faltivec//' numpy/distutils/system_info.py + ''; + + preBuild = '' + echo "Creating site.cfg file..." + cat << EOF > site.cfg + [openblas] + include_dirs = ${passthru.blas}/include + library_dirs = ${passthru.blas}/lib + EOF + ''; + + checkPhase = '' + runHook preCheck + pushd dist + ${python.interpreter} -c 'import numpy; numpy.test("fast", verbose=10)' + popd + runHook postCheck + ''; + + passthru = { + blas = blas; + }; + + # The large file support test is disabled because it takes forever + # and can cause the machine to run out of disk space when run. + prePatch = '' + sed -i 's/test_large_file_support/donttest/' numpy/lib/tests/test_format.py + ''; + + meta = { + description = "Scientific tools for Python"; + homepage = "http://numpy.scipy.org/"; + maintainers = with lib.maintainers; [ fridh ]; + } // (args.meta or {}); +}) diff --git a/pkgs/development/python-modules/scipy.nix b/pkgs/development/python-modules/scipy.nix new file mode 100644 index 000000000000..ae312cd32d59 --- /dev/null +++ b/pkgs/development/python-modules/scipy.nix @@ -0,0 +1,47 @@ +{lib, python, buildPythonPackage, isPyPy, gfortran, nose}: + +args: + +let + inherit (args) version; + inherit (args) numpy; +in buildPythonPackage (args // rec { + + name = "scipy-${version}"; + + buildInputs = (args.buildInputs or [ gfortran nose ]); + propagatedBuildInputs = (args.propagatedBuildInputs or [ passthru.blas numpy]); + + preConfigure = '' + sed -i '0,/from numpy.distutils.core/s//import setuptools;from numpy.distutils.core/' setup.py + ''; + + preBuild = '' + echo "Creating site.cfg file..." + cat << EOF > site.cfg + [openblas] + include_dirs = ${passthru.blas}/include + library_dirs = ${passthru.blas}/lib + EOF + ''; + + checkPhase = '' + runHook preCheck + pushd dist + ${python.interpreter} -c 'import scipy; scipy.test("fast", verbose=10)' + popd + runHook postCheck + ''; + + passthru = { + blas = numpy.blas; + }; + + setupPyBuildFlags = [ "--fcompiler='gnu95'" ]; + + meta = { + description = "SciPy (pronounced 'Sigh Pie') is open-source software for mathematics, science, and engineering. "; + homepage = http://www.scipy.org/; + maintainers = with lib.maintainers; [ fridh ]; + } // (args.meta or {}); +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 18671f3b4c73..65a8279ec92d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -12505,48 +12505,20 @@ in modules // { }; }; - numpy = let - support = import ../development/python-modules/numpy-scipy-support.nix { - inherit python; - openblas = pkgs.openblasCompat; - pkgName = "numpy"; - }; - in buildPythonPackage ( rec { - name = "numpy-${version}"; - version = "1.10.4"; + buildNumpyPackage = callPackage ../development/python-modules/numpy.nix { + gfortran = pkgs.gfortran; + blas = pkgs.openblasCompat; + }; + numpy = self.numpy_1_10; + + numpy_1_10 = self.buildNumpyPackage rec { + version = "1.10.4"; src = pkgs.fetchurl { - url = "https://pypi.python.org/packages/source/n/numpy/${name}.tar.gz"; + url = "https://pypi.python.org/packages/source/n/numpy/numpy-${version}.tar.gz"; sha256 = "7356e98fbcc529e8d540666f5a919912752e569150e9a4f8d869c686f14c720b"; }; - - disabled = isPyPy; # WIP - - preConfigure = '' - sed -i 's/-faltivec//' numpy/distutils/system_info.py - ''; - - inherit (support) preBuild checkPhase; - - buildInputs = [ pkgs.gfortran self.nose ]; - propagatedBuildInputs = [ support.openblas ]; - - # Disable failing test_f2py test. - # f2py couldn't be found by test, - # even though it was used successfully to build numpy - - # The large file support test is disabled because it takes forever - # and can cause the machine to run out of disk space when run. - prePatch = '' - sed -i 's/test_f2py/donttest/' numpy/tests/test_scripts.py - sed -i 's/test_large_file_support/donttest/' numpy/lib/tests/test_format.py - ''; - - meta = { - description = "Scientific tools for Python"; - homepage = "http://numpy.scipy.org/"; - }; - }); + }; numpydoc = buildPythonPackage rec { name = "numpydoc-${version}"; @@ -18488,47 +18460,19 @@ in modules // { }; }; + buildScipyPackage = callPackage ../development/python-modules/scipy.nix { + gfortran = pkgs.gfortran; + }; - scipy = let - support = import ../development/python-modules/numpy-scipy-support.nix { - inherit python; - openblas = pkgs.openblasCompat; - pkgName = "scipy"; - }; - in buildPythonPackage rec { - name = "scipy-${version}"; + scipy = self.scipy_0_16; + + scipy_0_16 = self.buildScipyPackage rec { version = "0.16.1"; - src = pkgs.fetchurl { - url = "http://pypi.python.org/packages/source/s/scipy/${name}.tar.gz"; + url = "https://pypi.python.org/packages/source/s/scipy/scipy-${version}.tar.gz"; sha256 = "ecd1efbb1c038accb0516151d1e6679809c6010288765eb5da6051550bf52260"; }; - - buildInputs = [ pkgs.gfortran self.nose ]; - propagatedBuildInputs = [ self.numpy ]; - - preConfigure = '' - sed -i '0,/from numpy.distutils.core/s//import setuptools;from numpy.distutils.core/' setup.py - ''; - - # First test: RuntimeWarning: Mean of empty slice. - # Second: SyntaxError: invalid syntax. Due to wrapper? - # Third: test checks permissions - prePatch = '' - substituteInPlace scipy/stats/tests/test_stats.py --replace "test_chisquare_masked_arrays" "remove_this_one" - rm scipy/linalg/tests/test_lapack.py - substituteInPlace scipy/weave/tests/test_catalog.py --replace "test_user" "remove_this_one" - ''; - - inherit (support) preBuild checkPhase; - - patches = [../development/python-modules/scipy-0.16.1-decorator-fix.patch]; - setupPyBuildFlags = [ "--fcompiler='gnu95'" ]; - - meta = { - description = "SciPy (pronounced 'Sigh Pie') is open-source software for mathematics, science, and engineering. "; - homepage = http://www.scipy.org/; - }; + numpy = self.numpy_1_10; }; scikitimage = buildPythonPackage rec { @@ -18563,7 +18507,7 @@ in modules // { }; buildInputs = with self; [ nose pillow pkgs.gfortran pkgs.glibcLocales ]; - propagatedBuildInputs = with self; [ numpy scipy pkgs.openblas ]; + propagatedBuildInputs = with self; [ numpy scipy numpy.blas ]; LC_ALL="en_US.UTF-8";