nixpkgs/pkgs/applications/science/math/sage/default.nix

164 lines
5.4 KiB
Nix
Raw Normal View History

2018-11-12 22:28:29 +00:00
{ pkgs
2018-04-24 22:53:36 +01:00
, withDoc ? false
2014-04-22 20:10:36 +01:00
}:
2018-11-12 22:28:29 +00:00
# Here sage and its dependencies are put together. Some dependencies may be pinned
# as a last resort. Patching sage for compatibility with newer dependency versions
# is always preferred, see `sage-src.nix` for that.
2018-04-24 22:53:36 +01:00
let
2018-11-12 22:28:29 +00:00
inherit (pkgs) fetchurl symlinkJoin callPackage nodePackages_8_x;
2018-04-24 22:53:36 +01:00
# https://trac.sagemath.org/ticket/15980 for tracking of python3 support
2018-11-12 22:28:29 +00:00
python = pkgs.python2.override {
2018-04-24 22:53:36 +01:00
packageOverrides = self: super: {
# python packages that appear unmaintained and were not accepted into the nixpkgs
# tree because of that. These packages are only dependencies of the more-or-less
# deprecated sagenb. However sagenb is still a default dependency and the doctests
# depend on it.
# See https://github.com/NixOS/nixpkgs/pull/38787 for a discussion.
2018-11-12 22:28:29 +00:00
# The dependency on the sage notebook (and therefore these packages) will be
# removed in the future:
# https://trac.sagemath.org/ticket/25837
2018-04-24 22:53:36 +01:00
flask-oldsessions = self.callPackage ./flask-oldsessions.nix {};
flask-openid = self.callPackage ./flask-openid.nix {};
python-openid = self.callPackage ./python-openid.nix {};
2018-11-12 22:28:29 +00:00
sagenb = self.callPackage ./sagenb.nix {
mathjax = nodePackages_8_x.mathjax;
};
2018-04-24 22:53:36 +01:00
2018-11-12 22:28:29 +00:00
# Package with a cyclic dependency with sage
2018-04-24 22:53:36 +01:00
pybrial = self.callPackage ./pybrial.nix {};
2018-11-12 22:28:29 +00:00
# `sagelib`, i.e. all of sage except some wrappers and runtime dependencies
2018-04-24 22:53:36 +01:00
sagelib = self.callPackage ./sagelib.nix {
inherit flint ecl arb;
inherit sage-src pynac singular;
2018-11-12 22:28:29 +00:00
linbox = pkgs.linbox.override { withSage = true; };
2018-04-24 22:53:36 +01:00
};
2018-11-12 22:28:29 +00:00
};
};
2018-04-24 22:53:36 +01:00
2018-11-12 22:28:29 +00:00
# A bash script setting various environment variables to tell sage where
# the files its looking fore are located. Also see `sage-env`.
env-locations = callPackage ./env-locations.nix {
inherit pari_data ecl;
inherit singular;
cysignals = python.pkgs.cysignals;
three = nodePackages_8_x.three;
mathjax = nodePackages_8_x.mathjax;
};
2018-04-24 22:53:36 +01:00
2018-11-12 22:28:29 +00:00
# The shell file that gets sourced on every sage start. Will also source
# the env-locations file.
sage-env = callPackage ./sage-env.nix {
sagelib = python.pkgs.sagelib;
inherit env-locations;
inherit python rWrapper ecl singular palp flint pynac pythonEnv;
2018-11-12 22:28:29 +00:00
pkg-config = pkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
};
2018-04-24 22:53:36 +01:00
2018-11-12 22:28:29 +00:00
# The documentation for sage, building it takes a lot of ram.
sagedoc = callPackage ./sagedoc.nix {
inherit sage-with-env;
inherit python;
};
2018-04-24 22:53:36 +01:00
2018-11-12 22:28:29 +00:00
# sagelib with added wrappers and a dependency on sage-tests to make sure thet tests were run.
sage-with-env = callPackage ./sage-with-env.nix {
inherit pythonEnv;
inherit sage-env;
inherit pynac singular;
2018-11-12 22:28:29 +00:00
pkg-config = pkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
three = nodePackages_8_x.three;
};
2018-04-24 22:53:36 +01:00
2018-11-12 22:28:29 +00:00
# Doesn't actually build anything, just runs sages testsuite. This is a
# separate derivation to make it possible to re-run the tests without
# rebuilding sagelib (which takes ~30 minutes).
# Running the tests should take something in the order of 1h.
sage-tests = callPackage ./sage-tests.nix {
inherit sage-with-env;
2014-04-22 20:10:36 +01:00
};
2018-04-24 22:53:36 +01:00
sage-src = callPackage ./sage-src.nix {};
pythonRuntimeDeps = with python.pkgs; [
sagelib
pybrial
sagenb
cvxopt
networkx
service-identity
psutil
sympy
fpylll
matplotlib
scipy
ipywidgets
rpy2
sphinx
typing
pillow
];
2014-04-22 20:10:36 +01:00
2018-04-24 22:53:36 +01:00
pythonEnv = python.buildEnv.override {
extraLibs = pythonRuntimeDeps;
ignoreCollisions = true;
} // { extraLibs = pythonRuntimeDeps; }; # make the libs accessible
# needs to be rWrapper, standard "R" doesn't include default packages
2018-11-12 22:28:29 +00:00
rWrapper = pkgs.rWrapper.override {
2018-04-24 22:53:36 +01:00
# https://trac.sagemath.org/ticket/25674
2018-11-12 22:28:29 +00:00
R = pkgs.R.overrideAttrs (attrs: rec {
2018-04-24 22:53:36 +01:00
name = "R-3.4.4";
src = fetchurl {
url = "http://cran.r-project.org/src/base/R-3/${name}.tar.gz";
sha256 = "0dq3jsnwsb5j3fhl0wi3p5ycv8avf8s5j1y4ap3d2mkjmcppvsdk";
};
});
};
2014-04-22 20:10:36 +01:00
2018-11-12 22:28:29 +00:00
arb = pkgs.arb.override { inherit flint; };
2018-11-12 22:28:29 +00:00
singular = pkgs.singular.override { inherit flint; };
2018-04-24 22:53:36 +01:00
# *not* to confuse with the python package "pynac"
2018-11-12 22:28:29 +00:00
pynac = pkgs.pynac.override { inherit singular flint; };
2018-04-24 22:53:36 +01:00
# With openblas (64 bit), the tests fail the same way as when sage is build with
# openblas instead of openblasCompat. Apparently other packages somehow use flints
# blas when it is available. Alternative would be to override flint to use
# openblasCompat.
2018-11-12 22:28:29 +00:00
flint = pkgs.flint.override { withBlas = false; };
2018-04-24 22:53:36 +01:00
# Multiple palp dimensions need to be available and sage expects them all to be
# in the same folder.
palp = symlinkJoin {
2018-11-12 22:28:29 +00:00
name = "palp-${pkgs.palp.version}";
2018-04-24 22:53:36 +01:00
paths = [
2018-11-12 22:28:29 +00:00
(pkgs.palp.override { dimensions = 4; doSymlink = false; })
(pkgs.palp.override { dimensions = 5; doSymlink = false; })
(pkgs.palp.override { dimensions = 6; doSymlink = true; })
(pkgs.palp.override { dimensions = 11; doSymlink = false; })
2018-04-24 22:53:36 +01:00
];
};
2016-08-29 13:46:51 +01:00
2018-04-24 22:53:36 +01:00
# Sage expects those in the same directory.
pari_data = symlinkJoin {
name = "pari_data";
2018-11-12 22:28:29 +00:00
paths = with pkgs; [
2018-04-24 22:53:36 +01:00
pari-galdata
pari-seadata-small
];
2014-04-22 20:10:36 +01:00
};
2018-04-24 22:53:36 +01:00
# https://trac.sagemath.org/ticket/22191
2018-11-12 22:28:29 +00:00
ecl = pkgs.ecl_16_1_2;
2018-04-24 22:53:36 +01:00
in
2018-11-12 22:28:29 +00:00
# A wrapper around sage that makes sure sage finds its docs (if they were build).
callPackage ./sage.nix {
inherit sage-tests sage-with-env sagedoc;
inherit withDoc;
}