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
|
2019-06-16 20:59:06 +01:00
|
|
|
inherit (pkgs) symlinkJoin callPackage nodePackages;
|
2018-04-24 22:53:36 +01:00
|
|
|
|
2020-11-30 13:09:26 +00:00
|
|
|
python3 = pkgs.python3.override {
|
2018-04-24 22:53:36 +01:00
|
|
|
packageOverrides = self: super: {
|
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 {
|
2020-10-22 09:20:17 +01:00
|
|
|
inherit flint arb;
|
2019-06-18 10:50:41 +01:00
|
|
|
inherit sage-src env-locations pynac singular;
|
2020-11-30 13:09:26 +00:00
|
|
|
ecl = maxima-ecl.ecl;
|
2018-11-12 22:28:29 +00:00
|
|
|
linbox = pkgs.linbox.override { withSage = true; };
|
2021-01-19 06:50:56 +00:00
|
|
|
pkg-config = pkgs.pkg-config; # not to confuse with pythonPackages.pkg-config
|
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-25 14:54:31 +00:00
|
|
|
jupyter-kernel-definition = {
|
|
|
|
displayName = "SageMath ${sage-src.version}";
|
|
|
|
argv = [
|
|
|
|
"${sage-with-env}/bin/sage" # FIXME which sage
|
|
|
|
"--python"
|
|
|
|
"-m"
|
|
|
|
"sage.repl.ipython_kernel"
|
|
|
|
"-f"
|
|
|
|
"{connection_file}"
|
|
|
|
];
|
|
|
|
language = "sagemath";
|
|
|
|
# just one 16x16 logo is available
|
|
|
|
logo32 = "${sage-src}/doc/common/themes/sage/static/sageicon.png";
|
|
|
|
logo64 = "${sage-src}/doc/common/themes/sage/static/sageicon.png";
|
|
|
|
};
|
|
|
|
|
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 {
|
2020-10-22 09:20:17 +01:00
|
|
|
inherit pari_data;
|
2019-03-09 16:23:57 +00:00
|
|
|
inherit singular maxima-ecl;
|
2020-11-30 13:09:26 +00:00
|
|
|
ecl = maxima-ecl.ecl;
|
|
|
|
cysignals = python3.pkgs.cysignals;
|
2018-11-24 19:47:03 +00:00
|
|
|
three = nodePackages.three;
|
|
|
|
mathjax = nodePackages.mathjax;
|
2018-11-12 22:28:29 +00:00
|
|
|
};
|
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 {
|
2020-11-30 13:09:26 +00:00
|
|
|
sagelib = python3.pkgs.sagelib;
|
2018-11-12 22:28:29 +00:00
|
|
|
inherit env-locations;
|
2020-11-30 13:09:26 +00:00
|
|
|
inherit python3 singular palp flint pynac pythonEnv maxima-ecl;
|
|
|
|
ecl = maxima-ecl.ecl;
|
2021-01-19 06:50:56 +00:00
|
|
|
pkg-config = pkgs.pkg-config; # not to confuse with pythonPackages.pkg-config
|
2018-11-12 22:28:29 +00:00
|
|
|
};
|
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;
|
2020-11-30 13:09:26 +00:00
|
|
|
inherit python3 maxima-ecl;
|
2018-11-12 22:28:29 +00:00
|
|
|
};
|
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 {
|
2020-11-30 13:09:26 +00:00
|
|
|
inherit python3 pythonEnv;
|
2018-11-12 22:28:29 +00:00
|
|
|
inherit sage-env;
|
2019-03-09 16:23:57 +00:00
|
|
|
inherit pynac singular maxima-ecl;
|
2021-01-19 06:50:56 +00:00
|
|
|
pkg-config = pkgs.pkg-config; # not to confuse with pythonPackages.pkg-config
|
2018-11-24 19:47:03 +00:00
|
|
|
three = nodePackages.three;
|
2018-11-12 22:28:29 +00:00
|
|
|
};
|
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 {};
|
|
|
|
|
2020-11-30 13:09:26 +00:00
|
|
|
pythonRuntimeDeps = with python3.pkgs; [
|
2018-04-24 22:53:36 +01:00
|
|
|
sagelib
|
|
|
|
cvxopt
|
|
|
|
networkx
|
|
|
|
service-identity
|
|
|
|
psutil
|
|
|
|
sympy
|
|
|
|
fpylll
|
|
|
|
matplotlib
|
2018-11-25 16:38:45 +00:00
|
|
|
tkinter # optional, as a matplotlib backend (use with `%matplotlib tk`)
|
2018-04-24 22:53:36 +01:00
|
|
|
scipy
|
|
|
|
ipywidgets
|
|
|
|
rpy2
|
|
|
|
sphinx
|
|
|
|
pillow
|
2017-10-20 01:36:29 +01:00
|
|
|
];
|
2014-04-22 20:10:36 +01:00
|
|
|
|
2020-11-30 13:09:26 +00:00
|
|
|
pythonEnv = python3.buildEnv.override {
|
2018-04-24 22:53:36 +01:00
|
|
|
extraLibs = pythonRuntimeDeps;
|
|
|
|
ignoreCollisions = true;
|
|
|
|
} // { extraLibs = pythonRuntimeDeps; }; # make the libs accessible
|
|
|
|
|
2018-12-28 21:46:10 +00:00
|
|
|
arb = pkgs.arb.override { inherit flint; };
|
|
|
|
|
|
|
|
singular = pkgs.singular.override { inherit flint; };
|
|
|
|
|
2020-11-30 13:09:26 +00:00
|
|
|
maxima-ecl = pkgs.maxima-ecl.override {
|
|
|
|
ecl = pkgs.ecl.override {
|
|
|
|
# "echo syntax error | ecl > /dev/full 2>&1" segfaults in
|
|
|
|
# ECL. We apply a patch to fix it (write_error.patch), but it
|
|
|
|
# only works if threads are disabled. sage 9.2 tests this
|
|
|
|
# (src/sage/interfaces/tests.py) and ships ecl like so.
|
|
|
|
# https://gitlab.com/embeddable-common-lisp/ecl/-/merge_requests/1#note_1657275
|
|
|
|
threadSupport = false;
|
|
|
|
|
|
|
|
# if we don't use the system boehmgc, sending a SIGINT to ecl
|
|
|
|
# can segfault if we it happens during memory allocation.
|
|
|
|
# src/sage/libs/ecl.pyx would intermittently fail in this case.
|
|
|
|
useBoehmgc = true;
|
|
|
|
};
|
|
|
|
};
|
2019-03-09 16:23:57 +00:00
|
|
|
|
2018-12-28 21:46:10 +00:00
|
|
|
# *not* to confuse with the python package "pynac"
|
|
|
|
pynac = pkgs.pynac.override { inherit singular flint; };
|
|
|
|
|
|
|
|
# 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.
|
|
|
|
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
|
|
|
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 {
|
2018-11-25 14:54:31 +00:00
|
|
|
inherit sage-tests sage-with-env sagedoc jupyter-kernel-definition;
|
2018-11-12 22:28:29 +00:00
|
|
|
inherit withDoc;
|
|
|
|
}
|