summaryrefslogtreecommitdiff
path: root/libre/sagemath
diff options
context:
space:
mode:
Diffstat (limited to 'libre/sagemath')
-rw-r--r--libre/sagemath/PKGBUILD73
-rw-r--r--libre/sagemath/anal.h65
-rw-r--r--libre/sagemath/clean.patch24
-rw-r--r--libre/sagemath/env.patch75
-rw-r--r--libre/sagemath/is-package-installed.patch80
-rw-r--r--libre/sagemath/jupyter-path.patch9
-rw-r--r--libre/sagemath/linbox-1.4.patch470
-rw-r--r--libre/sagemath/package.patch37
-rw-r--r--libre/sagemath/paths.patch13
-rw-r--r--libre/sagemath/sagemath-ipython5.patch548
-rw-r--r--libre/sagemath/sagemath-singular4.patch137
-rw-r--r--libre/sagemath/test-optional.patch36
12 files changed, 228 insertions, 1339 deletions
diff --git a/libre/sagemath/PKGBUILD b/libre/sagemath/PKGBUILD
index 73f54e240..c27c8dad6 100644
--- a/libre/sagemath/PKGBUILD
+++ b/libre/sagemath/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 189079 2016-09-09 17:19:23Z arojas $
+# $Id: PKGBUILD 192974 2016-10-22 14:14:48Z arojas $
# Maintainer (Arch): Evgeniy Alekseev <arcanis.arch at gmail dot com>
# Maintainer (Arch): Antonio Rojas <arojas@archlinux.org>
# Contributor (Arch): Daniel Wallace <danielwallace at gtmanfred dot com>
@@ -10,54 +10,47 @@
# Maintainer: André Silva <emulatorman@parabola.nu>
pkgname=sagemath
-pkgver=7.3
-pkgrel=5.parabola1
+pkgver=7.4
+pkgrel=2.parabola1
pkgdesc="Free Mathematics Software, free software replacement of Magma, Maple, Mathematica, and Matlab, without nonfree nauty support"
arch=(i686 x86_64 armv7h)
url="http://www.sagemath.org"
license=(GPL)
-depends=(ipython2 cysignals ppl palp brial singular cliquer maxima-ecl gfan sympow tachyon python2-rpy2
- python2-matplotlib python2-scipy python2-sympy python2-networkx python2-pillow libgap flintqs lcalc lrcalc arb
+depends=(ipython2 cysignals ppl palp brial singular cliquer maxima-ecl gfan sympow tachyon python2-rpy2 fpylll
+ python2-matplotlib python2-scipy python2-sympy python2-networkx python2-pillow python2-future libgap flintqs lcalc lrcalc arb
eclib gmp-ecm zn_poly gd python2-cvxopt pynac linbox rubiks pari-galdata pari-seadata-small planarity rankwidth
sage-data-combinatorial_designs sage-data-elliptic_curves sage-data-graphs sage-data-polytopes_db sage-data-conway_polynomials)
optdepends=('cython2: to compile cython code' 'python2-pkgconfig: to compile cython code'
'jmol: 3D plots' 'sage-notebook: Browser-based (flask) notebook interface'
- 'sagemath-doc: Documentation and inline help' 'ipython2-notebook: Jupyter notebook interface' 'mathjax: Jupyter notebook interface'
+ 'sagemath-doc: Documentation and inline help' 'python2-igraph: igraph backend for graph theory'
'coin-or-cbc: COIN backend for numerical computations' 'coin-or-csdp: for computing Lovász theta-function of graphs'
'buckygen: for generating fullerene graphs' 'plantri: for generating some classes of graphs' 'benzene: for generating fusenes and benzenoids'
'modular_decomposition: modular decomposition of graphs' 'ffmpeg: to export animations to video' 'imagemagick: to show animations'
'coxeter3: Coxeter groups implementation' 'cryptominisat: SAT solver' 'gap-data: for computing Galois groups'
'lrs: Algorithms for linear reverse search used in game theory and for computing volume of polytopes'
'libhomfly: for computing the homfly polynomial of links' 'libbraiding: for computing in braid groups'
- 'python2-igraph: igraph backend for graph theory' 'sage-notebook-exporter: convert flask notebooks to jupyter'
- 'jupyter-notebook: Jupyter notebook interface')
+ 'sagemath-jupyter: Jupyter kernel')
makedepends=(cython2 boost ratpoints symmetrica fflas-ffpack python2-jinja coin-or-cbc libhomfly libbraiding
mcqd coxeter3 cryptominisat modular_decomposition bliss-graphs tdlib python2-pkgconfig meataxe) # libfes
conflicts=(sage-mathematics)
replaces=(sage-mathematics)
provides=(sage-mathematics)
source=("$pkgname-$pkgver.tar.gz::https://github.com/sagemath/sage/archive/$pkgver.tar.gz"
- anal.h env.patch paths.patch clean.patch skip-check.patch cython-sys-path.patch is-package-installed.patch package.patch
- disable-fes.patch jupyter-path.patch test-optional.patch python-2.7.11.patch linbox-1.4.patch ecm-7.patch
- sagemath-ipython5.patch increase-rtol.patch sagemath-singular4.patch)
-md5sums=('cb2aed3d24de7b2228a9b34e81a27870'
- 'a906a180d198186a39820b0a2f9a9c63'
- 'd4d3c235c99b2bc92dde9f6e53935a8d'
- '45b84ae5579273196df44f7464a01a30'
- '6d9ae0978ce6a05a0da2cafdfb178a09'
+ env.patch skip-check.patch cython-sys-path.patch is-package-installed.patch package.patch disable-fes.patch
+ jupyter-path.patch test-optional.patch python-2.7.11.patch ecm-7.patch increase-rtol.patch sagemath-singular4.patch)
+md5sums=('8311ee35a309dbc668b5148795211254'
+ '784ba3fca83f24ed0bbf62e01fa4e967'
'6cafcb381437d4751fd55b25d5090987'
'a1bcdd3fe620dbae60ed8b0e98b2ece7'
- 'b3ecf7c93a90e0afccbc686af9fdc85f'
- '9ba81f717ffd4e20b8b2f2a318307488'
+ '5dca842e4440e4ef235ae18c1b1f20e3'
+ '493a9e0eae9b2ef87544b42785ae11ea'
'06a67e611d10aa2381efe1f08ea4ffd9'
- '16b529194c6105c3364127bd8f1efa83'
- 'cdcabd475b80afe0534a5621e972736e'
+ '0d88207416dfb98a17bf8886257d9a02'
+ '921017fd2d9dadbb6b602ac0476bfd58'
'ef927896f2071b442b1d07d7e69f5f3a'
- 'a276f0fbbff6eade409d0569ebd728d4'
'0c9a57d35de80c2cd418ebec912efbbb'
- '2bcaca7284dda963ebdc17daf78cf6c9'
'39d3fded716d2a7ae0ab03e0896b7497'
- '803627177ff5c28e1e73f2678d15c4df')
+ '4bd7305e8b69add8356f9751470cf587')
prepare(){
cd sage-$pkgver
@@ -65,22 +58,14 @@ prepare(){
# Parabola-specific patches
# assume all optional packages are installed
patch -p0 -i ../package.patch
-# find L.h header
- sed -e 's|libLfunction|Lfunction|' -i src/sage/libs/lcalc/lcalc_sage.h
# don't try to link against libpng 1.2
sed -e 's|png12|png|' -i src/module_list.py
# set env variables
patch -p0 -i ../env.patch
-# fix paths in python imports
- patch -p0 -i ../paths.patch
-# don't try to remove installed files
- patch -p0 -i ../clean.patch
# skip checking build status
patch -p0 -i ../skip-check.patch
# supress warning about GAP install dir
sed -e "s|gapdir = os.path.join(SAGE_LOCAL, 'gap', 'latest')|gapdir = '/usr/lib/gap'|" -i src/sage/libs/gap/util.pyx
-# find bliss headers
- sed -e 's|graph.hh|bliss/graph.hh|' -i src/sage/graphs/bliss.pyx
# don't list optional packages when running tests
patch -p0 -i ../test-optional.patch
# set jupyter path
@@ -99,10 +84,6 @@ prepare(){
# patch -p0 -i ../fes02.patch
# disable fes module, fails to compile
patch -p0 -i ../disable-fes.patch
-# port to new givaro/fflas-ffpack/linbox http://trac.sagemath.org/ticket/17635
- patch -p1 -i ../linbox-1.4.patch
-# port to ipython 5.0 https://trac.sagemath.org/ticket/21006
- patch -p1 -i ../sagemath-ipython5.patch
# replace is_package_installed usage http://trac.sagemath.org/ticket/20377
patch -p1 -i ../is-package-installed.patch
# port to Singular 4 https://trac.sagemath.org/ticket/17254
@@ -113,11 +94,7 @@ prepare(){
sed -e 's|cython {OPT}|cython2 {OPT}|' -e 's|python setup.py|python2 setup.py|' -i src/sage/misc/cython.py
sed -e 's|exec ipython|exec ipython2|' -e 's|cygdb|cygdb2|' -i src/bin/sage
sed -e "s|'cython'|'cython2'|" -i src/bin/sage-cython
- sed -e 's|python -c|python2 -c|' -i src/Makefile
-
-# copy required private PARI header
- mkdir -p src/pari
- cp "$srcdir"/anal.h src/pari/anal.h
+ sed -e 's|python -c|python2 -c|' -i src/generate_py_source.mk
}
@@ -125,22 +102,18 @@ build() {
cd sage-$pkgver/src
export SAGE_LOCAL="/usr"
+ export SAGE_ROOT="$PWD"
export SAGE_SRC="$PWD"
export CC=gcc
- make sage/libs/pari/auto_gen.pxi
- make sage/ext/interpreters/__init__.py
-
python2 setup.py build
}
package() {
cd sage-$pkgver/src
- export SAGE_ROOT="/usr"
- export SAGE_LOCAL="$SAGE_ROOT"
- export SAGE_SRC="$PWD"
- export CC=gcc
+ export SAGE_ROOT="$PWD"
+ export SAGE_LOCAL="/usr"
export JUPYTER_PATH="$pkgdir"/usr/share/jupyter
python2 setup.py install --root="$pkgdir" --optimize=1 --skip-build
@@ -158,9 +131,13 @@ package() {
mkdir -p "$pkgdir"/usr/share/sage
cp -r ext "$pkgdir"/usr/share/sage
-# Create SAGE_SRC, needed for the notebook
+# Create SAGE_SRC, needed for the notebook and help
mkdir "$pkgdir"/usr/share/sage/source
+ ln -s /usr/share/doc/sage "$pkgdir"/usr/share/sage/source/doc
# Remove sage_setup
rm -r "$pkgdir"/usr/lib/python2.7/site-packages/sage_setup
+
+# Split jupyter kernel
+ rm -r "$pkgdir"/usr/share/jupyter
}
diff --git a/libre/sagemath/anal.h b/libre/sagemath/anal.h
deleted file mode 100644
index f77d47025..000000000
--- a/libre/sagemath/anal.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (C) 2000 The PARI group.
-
-This file is part of the PARI/GP package.
-
-PARI/GP is free software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the Free Software
-Foundation. It is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY WHATSOEVER.
-
-Check the License for details. You should have received a copy of it, along
-with the package; see the file 'COPYING'. If not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
-
-/*************************************************************************/
-/* */
-/* Declarations specific to the analyzer */
-/* */
-/*************************************************************************/
-BEGINEXTERN
-/* GP control structures */
-#define EXPR_WRAP(code, call) \
-{ GEN z; GEN __E = code; \
- push_lex(gen_0, __E); z = call; pop_lex(1); return z; }
-#define EXPR_ARG __E, &gp_eval
-#define EXPR_ARGUPTO __E, &gp_evalupto
-#define EXPR_ARGBOOL __E, &gp_evalbool
-
-/* functions */
-void changevalue(entree *ep, GEN val);
-void freeep(entree *ep);
-void pari_fill_hashtable(entree **table, entree *ep);
-
-void compile_err(const char *msg, const char *str);
-void compile_varerr(const char *str);
-
-#ifdef STACK_CHECK
-extern THREAD void *PARI_stack_limit;
-#endif
-
-extern entree **varentries;
-
-struct node_loc
-{
- const char *start,*end;
-};
-
-union token_value { long val; };
-
-int pari_lex(union token_value *yylval, struct node_loc *yylloc, char **lex);
-int pari_parse(char **lex);
-entree* fetch_entry(const char *s, long len);
-entree* fetch_member(const char *s, long len);
-void pari_close_parser(void);
-void pari_close_compiler(void);
-void pari_close_evaluator(void);
-void pari_init_parser(void);
-void pari_init_compiler(void);
-void pari_init_evaluator(void);
-void optimizenode(long n);
-void push_frame(GEN C, long lpc, long flag);
-const char * closure_func_err(void);
-GEN gp_closure(long n);
-long eval_mnemonic(GEN str, const char *tmplate);
-
-ENDEXTERN
diff --git a/libre/sagemath/clean.patch b/libre/sagemath/clean.patch
deleted file mode 100644
index cfca01fcb..000000000
--- a/libre/sagemath/clean.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- src/setup.py.orig 2014-11-16 10:34:05.521441703 +0100
-+++ src/setup.py 2014-11-16 10:34:16.054812569 +0100
-@@ -620,21 +620,6 @@
-
-
- #########################################################
--### Clean
--#########################################################
--
--print('Cleaning up stale installed files....')
--t = time.time()
--from sage_setup.clean import clean_install_dir
--output_dirs = SITE_PACKAGES + glob.glob(os.path.join(SAGE_SRC, 'build', 'lib*'))
--for output_dir in output_dirs:
-- print('- cleaning {0}'.format(output_dir))
-- clean_install_dir(output_dir, python_packages, python_modules,
-- ext_modules, python_data_files)
--print('Finished cleaning, time: %.2f seconds.' % (time.time() - t))
--
--
--#########################################################
- ### Install also Jupyter kernel spec
- #########################################################
-
diff --git a/libre/sagemath/env.patch b/libre/sagemath/env.patch
index 5cb93b75f..d7550e5db 100644
--- a/libre/sagemath/env.patch
+++ b/libre/sagemath/env.patch
@@ -41,72 +41,47 @@
-fi
+NEW_SAGE_ROOT="/usr"
- # Don't execute the commands more than once for the same version of
- # sage-env. Check this after checking the validity of SAGE_ROOT, but
-@@ -245,21 +211,13 @@
+ # Display the Sage startup banner, used in src/bin/sage
+ sage_banner() {
+@@ -187,7 +187,7 @@
+
+ # SAGE_LOCAL is the installation prefix and can be customized
+ if [ -z "$SAGE_LOCAL" ]; then
+- export SAGE_LOCAL="$SAGE_ROOT/local"
++ export SAGE_LOCAL="/usr"
fi
- # Setting Sage-related location environment variables.
--export SAGE_LOCAL="$SAGE_ROOT/local"
--export SAGE_ETC="$SAGE_LOCAL/etc"
--export SAGE_SHARE="$SAGE_LOCAL/share"
--export SAGE_EXTCODE="$SAGE_SHARE/sage/ext"
--export SAGE_SPKG_INST="$SAGE_LOCAL/var/lib/sage/installed"
--export SAGE_LOGS="$SAGE_ROOT/logs/pkgs"
+ # sage-env must know where the Sage's script files are
+@@ -233,8 +233,8 @@
+ export SAGE_EXTCODE="$SAGE_SHARE/sage/ext"
+ export SAGE_SPKG_INST="$SAGE_LOCAL/var/lib/sage/installed"
+ export SAGE_LOGS="$SAGE_ROOT/logs/pkgs"
-export SAGE_SRC="$SAGE_ROOT/src"
-export SAGE_DOC_SRC="$SAGE_SRC/doc"
--export SAGE_DOC="$SAGE_SHARE/doc/sage"
--
--if [ -z "${SAGE_ORIG_PATH_SET}" ]; then
-- SAGE_ORIG_PATH=$PATH && export SAGE_ORIG_PATH
-- SAGE_ORIG_PATH_SET=True && export SAGE_ORIG_PATH_SET
--fi
--export PATH="$SAGE_ROOT/build/bin:$SAGE_SRC/bin:$SAGE_LOCAL/bin:$PATH"
-+export SAGE_LOCAL="$SAGE_ROOT"
-+export SAGE_ETC="/etc/sage"
-+export SAGE_SHARE="$SAGE_LOCAL/share/sage"
-+export SAGE_EXTCODE="$SAGE_SHARE/ext"
-+export SAGE_SRC="$SAGE_SHARE/source"
-+export SAGE_DOC_SRC="/usr/share/doc/sage"
-+export SAGE_DOC="/usr/share/doc/sage"
++export SAGE_SRC="$SAGE_SHARE/sage/source"
++export SAGE_DOC_SRC="$SAGE_SHARE/doc/sage"
+ export SAGE_DOC="$SAGE_SHARE/doc/sage"
- if [ "$SAGE_BANNER" = "bare" ]; then
- export SAGE_BANNER_TEXT=$(cat "$SAGE_ROOT/VERSION.txt")
-@@ -319,9 +277,6 @@
- GPHELP="$SAGE_LOCAL/bin/gphelp" && export GPHELP
- GPDOCDIR="$SAGE_LOCAL/share/pari/doc" && export GPDOCDIR
-
--SINGULARPATH="$SAGE_LOCAL/share/singular" && export SINGULARPATH
--SINGULAR_EXECUTABLE="$SAGE_LOCAL/bin/Singular" && export SINGULAR_EXECUTABLE
--
- if [ -z "$SAGE_REPO_ANONYMOUS" ]; then
- SAGE_REPO_ANONYMOUS="git://trac.sagemath.org/sage.git"
- export SAGE_REPO_ANONYMOUS
-@@ -364,10 +319,10 @@
+ if [ -z "${SAGE_ORIG_PATH_SET}" ]; then
+@@ -374,6 +337,9 @@
export SAGE_STARTUP_FILE
fi
+export LIBMTX="$DOT_SAGE/meataxe"
+[[ -d $LIBMTX ]] || mkdir $LIBMTX # Create meataxe data dir
+
--IPYTHONDIR=`find "$SAGE_SPKG_INST" -name "ipython*"`
--if [ -n "$IPYTHONDIR" ]; then
-- export IPYTHONDIR="$DOT_SAGE/${IPYTHONDIR##*/}"
--fi
-+export IPYTHONDIR="$DOT_SAGE/ipython"
-
- if [ "$PYTHON_EGG_CACHE" = "" ]; then
- PYTHON_EGG_CACHE="$DOT_SAGE/.python-eggs"
-@@ -453,8 +400,6 @@
+ if [ -z "$IPYTHONDIR" ]; then
+ # We hardcode a version number in the directory name. The idea is
+ # that we keep using the same version number as long as that is
+@@ -468,7 +400,6 @@
fi
fi
fi
--MAXIMA_PREFIX="$SAGE_ROOT/local" && export MAXIMA_PREFIX
--
+-export MAXIMA_PREFIX="$SAGE_LOCAL"
+
PERL5LIB="$SAGE_LOCAL/lib/perl5:$PERL5LIB" && export PERL5LIB
- ############ architecture flags
-@@ -622,9 +567,6 @@
+@@ -629,9 +608,6 @@
LD_LIBRARY_PATH="$SAGE_LOCAL/bin:$LD_LIBRARY_PATH" && export LD_LIBRARY_PATH
fi
diff --git a/libre/sagemath/is-package-installed.patch b/libre/sagemath/is-package-installed.patch
index 0f1c59084..000b8cb3e 100644
--- a/libre/sagemath/is-package-installed.patch
+++ b/libre/sagemath/is-package-installed.patch
@@ -10,7 +10,7 @@ index 0a5f794..2969d92 100644
from sage.env import SAGE_SHARE
from sage.misc.all import walltime
-@@ -828,7 +827,7 @@ class MiniCremonaDatabase(SQLDatabase):
+@@ -824,7 +823,7 @@ class MiniCremonaDatabase(SQLDatabase):
if N < self.largest_conductor():
message = "There is no elliptic curve with label " + label \
+ " in the database"
@@ -19,7 +19,7 @@ index 0a5f794..2969d92 100644
message = "There is no elliptic curve with label " + label \
+ " in the currently available databases"
else:
-@@ -1677,7 +1676,7 @@ def CremonaDatabase(name=None,mini=None,set_global=None):
+@@ -1673,7 +1672,7 @@ def CremonaDatabase(name=None,mini=None,set_global=None):
if name is None and not set_global:
return _db
if set_global and name is None:
@@ -103,7 +103,7 @@ diff --git a/src/sage/graphs/generic_graph.py b/src/sage/graphs/generic_graph.py
index 252984f..ce19682 100644
--- a/src/sage/graphs/generic_graph.py
+++ b/src/sage/graphs/generic_graph.py
-@@ -7856,7 +7856,6 @@ class GenericGraph(GenericGraph_pyx):
+@@ -7858,7 +7858,6 @@ class GenericGraph(GenericGraph_pyx):
sage: abs(flow_ff-flow_igraph) < 0.00001 # optional python_igraph
True
"""
@@ -111,7 +111,7 @@ index 252984f..ce19682 100644
self._scream_if_not_simple(allow_loops=True)
if vertex_bound and algorithm in ["FF", "igraph"]:
raise ValueError("This method does not support both " +
-@@ -7874,10 +7873,12 @@ class GenericGraph(GenericGraph_pyx):
+@@ -7876,10 +7875,12 @@ class GenericGraph(GenericGraph_pyx):
if algorithm is None:
if vertex_bound:
algorithm = "LP"
@@ -127,64 +127,6 @@ index 252984f..ce19682 100644
if (algorithm == "FF"):
return self._ford_fulkerson(x,y, value_only=value_only, integer=integer, use_edge_labels=use_edge_labels)
-@@ -20251,17 +20252,22 @@ class GenericGraph(GenericGraph_pyx):
- Subgroup of (Permutation Group with generators [(0,7)(1,4)(2,3)(6,8)]) generated by [(0,7)(1,4)(2,3)(6,8)]]
-
- """
-- from sage.misc.package import is_package_installed
-+ has_bliss=True
-+ try:
-+ from sage.graphs.bliss import automorphism_group
-+ except ImportError:
-+ has_bliss=False
-+
- if (algorithm == 'bliss' or # explicit choice from the user; or
- (algorithm is None and # by default
- not edge_labels and
-- is_package_installed('bliss'))):
-+ has_bliss)):
-+
-+ if (not has_bliss):
-+ raise NotImplementedError("you need to install bliss or set algorithm=sage to use this command")
-+
- if edge_labels:
- raise ValueError("bliss cannot be used when edge_labels is True")
-- try:
-- from sage.graphs.bliss import automorphism_group
-- except ImportError:
-- raise ImportError("You must install the 'bliss' package to run this command.")
-
- A = automorphism_group(self, partition)
-
-@@ -20903,17 +20909,22 @@ class GenericGraph(GenericGraph_pyx):
- True
-
- """
-- from sage.misc.package import is_package_installed
-+ has_bliss=True
-+ try:
-+ from sage.graphs.bliss import canonical_form
-+ except ImportError:
-+ has_bliss=False
-+
- if (algorithm == 'bliss' or # explicit request; or
- (algorithm is None and # default choice
-- is_package_installed('bliss') and
-+ has_bliss and
- not edge_labels)):
-+
-+ if (not has_bliss):
-+ raise NotImplementedError("you need to install bliss or set algorithm=sage to use this command")
-+
- if edge_labels:
- raise ValueError("bliss cannot be used when edge_labels is True")
-- try:
-- from sage.graphs.bliss import canonical_form
-- except ImportError:
-- raise ImportError("You must install the 'bliss' package to run this command.")
- return canonical_form(self, partition, return_graph, certify)
-
- if (algorithm is not None and
diff --git a/src/sage/graphs/graph_generators.py b/src/sage/graphs/graph_generators.py
index 5919ab3..1766796 100644
--- a/src/sage/graphs/graph_generators.py
@@ -270,7 +212,7 @@ diff --git a/src/sage/groups/generic.py b/src/sage/groups/generic.py
index c801636..f43e6d9 100644
--- a/src/sage/groups/generic.py
+++ b/src/sage/groups/generic.py
-@@ -1396,15 +1396,15 @@ def structure_description(G, latex=False):
+@@ -1400,15 +1400,15 @@ def structure_description(G, latex=False):
sage: groups.matrix.GL(4,2).structure_description() # optional - database_gap
'A8'
"""
@@ -285,7 +227,7 @@ index c801636..f43e6d9 100644
description = str(G._gap_().StructureDescription())
except RuntimeError:
- if not is_package_installed('database_gap'):
-+ if not os.path.isfile(os.path.join(SAGE_LOCAL, "gap", "latest", "small", "readsml.g")):
++ if not os.path.isfile(os.path.join(SAGE_LOCAL, "lib", "gap", "small", "readsml.g")):
raise RuntimeError("You must install the optional database_gap package first.")
raise
@@ -310,7 +252,7 @@ index e42db61..d4d5684 100644
load_hap()
from sage.arith.all import is_prime
if not (p == 0 or is_prime(p)):
-@@ -1683,9 +1680,7 @@ class PermutationGroup_generic(group.FiniteGroup):
+@@ -1682,9 +1679,7 @@ class PermutationGroup_generic(group.FiniteGroup):
try:
return [Integer(n) for n in self._gap_().IdGroup()]
except RuntimeError:
@@ -321,7 +263,7 @@ index e42db61..d4d5684 100644
def id(self):
"""
-@@ -1736,9 +1731,7 @@ class PermutationGroup_generic(group.FiniteGroup):
+@@ -1735,9 +1730,7 @@ class PermutationGroup_generic(group.FiniteGroup):
try:
return Integer(self._gap_().PrimitiveIdentification())
except RuntimeError:
@@ -332,7 +274,7 @@ index e42db61..d4d5684 100644
def center(self):
"""
-@@ -4114,8 +4107,6 @@ class PermutationGroup_generic(group.FiniteGroup):
+@@ -4113,8 +4106,6 @@ class PermutationGroup_generic(group.FiniteGroup):
- David Joyner and Graham Ellis
"""
@@ -361,7 +303,7 @@ diff --git a/src/sage/rings/polynomial/multi_polynomial_sequence.py b/src/sage/r
index da41cb0..49cae0b 100644
--- a/src/sage/rings/polynomial/multi_polynomial_sequence.py
+++ b/src/sage/rings/polynomial/multi_polynomial_sequence.py
-@@ -159,7 +159,6 @@ from sage.misc.cachefunc import cached_method
+@@ -163,7 +163,6 @@ from sage.misc.cachefunc import cached_method
from types import GeneratorType
from sage.misc.converting_dict import KeyConvertingDict
@@ -369,7 +311,7 @@ index da41cb0..49cae0b 100644
from sage.structure.sequence import Sequence, Sequence_generic
-@@ -1429,10 +1428,11 @@ class PolynomialSequence_gf2(PolynomialSequence_generic):
+@@ -1433,10 +1432,11 @@ class PolynomialSequence_gf2(PolynomialSequence_generic):
if S != []:
if algorithm == "exhaustive_search":
diff --git a/libre/sagemath/jupyter-path.patch b/libre/sagemath/jupyter-path.patch
index 3201e9a6e..3eec99a89 100644
--- a/libre/sagemath/jupyter-path.patch
+++ b/libre/sagemath/jupyter-path.patch
@@ -10,15 +10,6 @@
class SageKernelSpec(object):
-@@ -151,7 +151,7 @@
- '{connection_file}']
- """
- return [
-- os.path.join(SAGE_ROOT, 'sage'),
-+ os.path.join(SAGE_ROOT, 'bin', 'sage'),
- '--python',
- '-m', 'sage.repl.ipython_kernel',
- '-f', '{connection_file}',
@@ -208,7 +208,7 @@
sage: spec._symlink_resources() # not tested
"""
diff --git a/libre/sagemath/linbox-1.4.patch b/libre/sagemath/linbox-1.4.patch
deleted file mode 100644
index b3955eb51..000000000
--- a/libre/sagemath/linbox-1.4.patch
+++ /dev/null
@@ -1,470 +0,0 @@
-diff --git a/src/module_list.py b/src/module_list.py
-index a49ed36..7798cb8 100644
---- a/src/module_list.py
-+++ b/src/module_list.py
-@@ -27,6 +27,18 @@ lapack_libs = list(lapack_pc['libraries'])
- lapack_library_dirs = list(lapack_pc['library_dirs'])
- lapack_include_dirs = list(lapack_pc['include_dirs'])
-
-+# FFLAS-FFPACK
-+fflas_ffpack_pc = pkgconfig.parse('fflas-ffpack')
-+fflas_ffpack_libs = list(fflas_ffpack_pc['libraries'])
-+fflas_ffpack_library_dirs = list(fflas_ffpack_pc['library_dirs'])
-+fflas_ffpack_cflags = pkgconfig.cflags('fflas-ffpack').split()
-+
-+# Givaro
-+givaro_pc = pkgconfig.parse('givaro')
-+givaro_libs = list(givaro_pc['libraries'])
-+givaro_library_dirs = list(givaro_pc['library_dirs'])
-+givaro_cflags = pkgconfig.cflags('givaro').split()
-+
- # GNU Scientific Library
- # Note we replace the built-in gslcblas with the above cblas
- gsl_pc = pkgconfig.parse('gsl')
-@@ -40,6 +52,12 @@ gd_libs = list(gd_pc['libraries'])
- gd_library_dirs = list(gd_pc['library_dirs'])
- gd_include_dirs = list(gd_pc['include_dirs'])
-
-+# LinBox
-+linbox_pc = pkgconfig.parse('linbox')
-+linbox_libs = list(linbox_pc['libraries'])
-+linbox_library_dirs = list(linbox_pc['library_dirs'])
-+linbox_cflags = pkgconfig.cflags('linbox').split()
-+
- # PNG image library
- png_pc = pkgconfig.parse('libpng')
- png_libs = list(png_pc['libraries'])
-@@ -58,9 +76,18 @@ zlib_include_dirs = list(zlib_pc['include_dirs'])
- #########################################################
-
- aliases = dict(
-+ FFLASFFPACK_CFLAGS=fflas_ffpack_cflags,
-+ FFLASFFPACK_LIBRARIES=fflas_ffpack_libs,
-+ FFLASFFPACK_LIBDIR=fflas_ffpack_library_dirs,
-+ GIVARO_CFLAGS=givaro_cflags,
-+ GIVARO_LIBRARIES=givaro_libs,
-+ GIVARO_LIBDIR=givaro_library_dirs,
- GSL_LIBRARIES=gsl_libs,
- GSL_LIBDIR=gsl_library_dirs,
- GSL_INCDIR=gsl_include_dirs,
-+ LINBOX_CFLAGS=linbox_cflags,
-+ LINBOX_LIBRARIES=linbox_libs,
-+ LINBOX_LIBDIR=linbox_library_dirs,
- )
-
- #########################################################
-@@ -91,12 +118,6 @@ except ValueError:
- singular_libs = ['singular', 'flint', 'ntl', 'gmpxx', 'gmp', 'readline', 'm']
-
- #########################################################
--### Givaro flags
--#########################################################
--
--givaro_extra_compile_args =['-D__STDC_LIMIT_MACROS']
--
--#########################################################
- ### Library order
- #########################################################
-
-@@ -111,8 +132,7 @@ givaro_extra_compile_args =['-D__STDC_LIMIT_MACROS']
- # at the very end of the list.
- library_order_list = [
- "singular", "ec", "ecm",
-- "linboxsage", "ntl", "iml", "linbox", "givaro",
--] + gsl_libs + [
-+] + linbox_libs + gsl_libs + [
- "pari", "flint", "ratpoints", "ecl", "glpk", "ppl",
- "arb", "fplll", "mpfi", "mpfr", "mpc", "gmp", "gmpxx",
- "brial",
-@@ -611,13 +631,10 @@ ext_modules = [
-
- Extension('sage.libs.linbox.linbox',
- sources = ['sage/libs/linbox/linbox.pyx'],
-- libraries = ['linboxsage', 'ntl', 'iml', 'linbox',
-- 'givaro', 'mpfr', 'gmp', 'gmpxx'] + cblas_libs,
-+ libraries = linbox_libs,
- language = 'c++',
- library_dirs = cblas_library_dirs,
-- include_dirs = cblas_include_dirs,
-- extra_compile_args = givaro_extra_compile_args,
-- depends = [os.path.join(SAGE_INC, 'givaro', 'givconfig.h')]),
-+ include_dirs = cblas_include_dirs),
-
- Extension('sage.libs.lcalc.lcalc_Lfunction',
- sources = ['sage/libs/lcalc/lcalc_Lfunction.pyx'],
-@@ -665,9 +682,8 @@ ext_modules = [
-
- Extension('sage.libs.singular.singular',
- sources = ['sage/libs/singular/singular.pyx'],
-- libraries = ['givaro'] + singular_libs,
-- language="c++",
-- extra_compile_args = givaro_extra_compile_args),
-+ libraries = singular_libs,
-+ language="c++"),
-
- Extension('sage.libs.singular.polynomial',
- sources = ['sage/libs/singular/polynomial.pyx'],
-@@ -687,8 +703,7 @@ ext_modules = [
- Extension('sage.libs.singular.function',
- sources = ['sage/libs/singular/function.pyx'],
- libraries = singular_libs,
-- language="c++",
-- extra_compile_args = givaro_extra_compile_args),
-+ language="c++"),
-
- Extension('sage.libs.singular.option',
- sources = ['sage/libs/singular/option.pyx'],
-@@ -944,19 +959,17 @@ ext_modules = [
- Extension('sage.matrix.matrix_modn_dense_float',
- sources = ['sage/matrix/matrix_modn_dense_float.pyx'],
- language="c++",
-- libraries = ['ntl', 'linbox', 'givaro', 'mpfr', 'gmpxx', 'gmp'] + cblas_libs,
-+ libraries = linbox_libs + cblas_libs,
- library_dirs = cblas_library_dirs,
-- include_dirs = cblas_include_dirs,
-- extra_compile_args = nocxx11_args + ['-DDISABLE_COMMENTATOR'] + givaro_extra_compile_args),
-+ include_dirs = cblas_include_dirs),
-
- Extension('sage.matrix.matrix_modn_dense_double',
- sources = ['sage/matrix/matrix_modn_dense_double.pyx'],
- language="c++",
-- libraries = ['ntl', 'linbox', 'givaro', 'mpfr', 'gmpxx', 'gmp'] + cblas_libs,
-+ libraries = linbox_libs + cblas_libs,
- library_dirs = cblas_library_dirs,
- include_dirs = cblas_include_dirs,
-- extra_compile_args = nocxx11_args + ["-D_XPG6", "-DDISABLE_COMMENTATOR"]
-- + m4ri_extra_compile_args + givaro_extra_compile_args),
-+ extra_compile_args = ["-D_XPG6"]),
-
- Extension('sage.matrix.matrix_modn_sparse',
- sources = ['sage/matrix/matrix_modn_sparse.pyx']),
-@@ -1400,8 +1413,7 @@ ext_modules = [
- Extension('sage.rings.finite_rings.element_givaro',
- sources = ["sage/rings/finite_rings/element_givaro.pyx"],
- libraries = ['givaro', 'ntl', 'gmpxx', 'gmp', 'm'],
-- language='c++',
-- extra_compile_args = givaro_extra_compile_args),
-+ language='c++'),
-
- Extension('sage.rings.finite_rings.element_ntl_gf2e',
- sources = ['sage/rings/finite_rings/element_ntl_gf2e.pyx'],
-@@ -1421,8 +1433,7 @@ ext_modules = [
- sources = ["sage/rings/finite_rings/hom_finite_field_givaro.pyx"],
- # this order is needed to compile under windows.
- libraries = ['givaro', 'ntl', 'gmpxx', 'gmp', 'm'],
-- language='c++',
-- extra_compile_args = givaro_extra_compile_args),
-+ language='c++'),
-
- ################################
- ##
-@@ -1574,8 +1585,7 @@ ext_modules = [
- Extension('sage.rings.polynomial.plural',
- sources = ['sage/rings/polynomial/plural.pyx'],
- libraries = ['m', 'readline', 'singular', 'givaro', 'gmpxx', 'gmp'],
-- language="c++",
-- extra_compile_args = givaro_extra_compile_args),
-+ language="c++"),
-
- Extension('sage.rings.polynomial.multi_polynomial_libsingular',
- sources = ['sage/rings/polynomial/multi_polynomial_libsingular.pyx'],
-diff --git a/src/sage/libs/linbox/echelonform.pxd b/src/sage/libs/linbox/echelonform.pxd
-index 3097c8b..cf4902d 100644
---- a/src/sage/libs/linbox/echelonform.pxd
-+++ b/src/sage/libs/linbox/echelonform.pxd
-@@ -1,23 +1,27 @@
-+# distutils: extra_compile_args = LINBOX_CFLAGS
-+# distutils: libraries = LINBOX_LIBRARIES
-+# distutils: library_dirs = LINBOX_LIBDIR
-+
- from sage.libs.linbox.modular cimport ModDoubleField, ModDoubleFieldElement, ModFloatField, ModFloatFieldElement
- from libc.stdint cimport uint64_t
-
--cdef extern from "linbox/matrix/blas-matrix.h" namespace "LinBox":
-- cdef cppclass BlasMatrixDouble "LinBox::BlasMatrix<LinBox::Modular<double> >":
-+cdef extern from "linbox/matrix/dense-matrix.h" namespace "LinBox":
-+ cdef cppclass BlasMatrixDouble "LinBox::DenseMatrix<Givaro::Modular<double> >":
- BlasMatrixDouble(ModDoubleField F, uint64_t nrows, uint64_t ncols)
- void setEntry(size_t i, size_t j, ModDoubleFieldElement t)
- ModDoubleFieldElement &getEntry(size_t i, size_t j)
-
-- cdef cppclass BlasMatrixFloat "LinBox::BlasMatrix<LinBox::Modular<float> >":
-+ cdef cppclass BlasMatrixFloat "LinBox::DenseMatrix<Givaro::Modular<float> >":
- BlasMatrixFloat(ModFloatField F, uint64_t nrows, uint64_t ncols)
- void setEntry(size_t i, size_t j, ModFloatFieldElement t)
- ModFloatFieldElement &getEntry(size_t i, size_t j)
-
- cdef extern from "linbox/algorithms/echelon-form.h":
-- cdef cppclass EchelonFormDomainDouble "LinBox::EchelonFormDomain<LinBox::Modular<double> >":
-+ cdef cppclass EchelonFormDomainDouble "LinBox::EchelonFormDomain<Givaro::Modular<double> >":
- EchelonFormDomainDouble(ModDoubleField)
- int rowReducedEchelon(BlasMatrixDouble, BlasMatrixDouble)
-
-- cdef cppclass EchelonFormDomainFloat "LinBox::EchelonFormDomain<LinBox::Modular<float> >":
-+ cdef cppclass EchelonFormDomainFloat "LinBox::EchelonFormDomain<Givaro::Modular<float> >":
- EchelonFormDomainFloat(ModFloatField)
- int rowReducedEchelon(BlasMatrixFloat, BlasMatrixFloat)
-
-diff --git a/src/sage/libs/linbox/fflas.pxd b/src/sage/libs/linbox/fflas.pxd
-index e102004..01ab1b1 100644
---- a/src/sage/libs/linbox/fflas.pxd
-+++ b/src/sage/libs/linbox/fflas.pxd
-@@ -1,3 +1,7 @@
-+# distutils: extra_compile_args = FFLASFFPACK_CFLAGS
-+# distutils: libraries = FFLASFFPACK_LIBRARIES
-+# distutils: library_dirs = FFLASFFPACK_LIBDIR
-+
- from .modular cimport ModDoubleField, ModFloatField, ModDoubleFieldElement, ModFloatFieldElement
-
- cdef extern from "fflas-ffpack/fflas-ffpack.h" namespace "std":
-diff --git a/src/sage/libs/linbox/linbox.pyx b/src/sage/libs/linbox/linbox.pyx
-index e932347..a9bd6d1 100644
---- a/src/sage/libs/linbox/linbox.pyx
-+++ b/src/sage/libs/linbox/linbox.pyx
-@@ -1,3 +1,7 @@
-+# distutils: extra_compile_args = LINBOX_CFLAGS
-+# distutils: libraries = LINBOX_LIBRARIES
-+# distutils: library_dirs = LINBOX_LIBDIR
-+
- r"""
- Linbox interface
- """
-diff --git a/src/sage/libs/linbox/modular.pxd b/src/sage/libs/linbox/modular.pxd
-index 7ef204c..ea5fb29 100644
---- a/src/sage/libs/linbox/modular.pxd
-+++ b/src/sage/libs/linbox/modular.pxd
-@@ -1,10 +1,10 @@
--cdef extern from "linbox/field/modular.h":
-+cdef extern from "givaro/modular.h":
- # double
-
-- cdef cppclass ModDoubleFieldElement "LinBox::Modular<double>::Element":
-+ cdef cppclass ModDoubleFieldElement "Givaro::Modular<double>::Element":
- pass
-
-- cdef cppclass ModDoubleField "LinBox::Modular<double>":
-+ cdef cppclass ModDoubleField "Givaro::Modular<double>":
- ModDoubleField(int modulus)
- ModDoubleFieldElement init(ModDoubleFieldElement res, int v)
- ModDoubleFieldElement init(ModDoubleFieldElement res, double v)
-@@ -20,10 +20,10 @@ cdef extern from "linbox/field/modular.h":
-
-
- # float
-- cdef cppclass ModFloatFieldElement "LinBox::Modular<float>::Element":
-+ cdef cppclass ModFloatFieldElement "Givaro::Modular<float>::Element":
- pass
-
-- cdef cppclass ModFloatField "LinBox::Modular<float>":
-+ cdef cppclass ModFloatField "Givaro::Modular<float>":
- ModFloatField(int modulus)
- ModFloatFieldElement init(ModFloatFieldElement res, int v)
- ModFloatFieldElement init(ModFloatFieldElement res, double v)
-diff --git a/src/sage/libs/singular/singular.pyx b/src/sage/libs/singular/singular.pyx
-index 33d7f7ec..77f6e0a 100644
---- a/src/sage/libs/singular/singular.pyx
-+++ b/src/sage/libs/singular/singular.pyx
-@@ -23,6 +23,7 @@ cdef extern from "limits.h":
-
- import os
-
-+from libc.stdint cimport int64_t
- from sage.libs.singular.decl cimport intvec
- from sage.libs.singular.decl cimport SR_HDL, SR_INT, SR_TO_INT
- from sage.libs.singular.decl cimport singular_options, singular_verbose_options
-@@ -156,7 +157,7 @@ cdef FFgivE si2sa_GFqGivaro(number *n, ring *_ring, Cache_givaro cache):
- order = cache.objectptr.cardinality() - 1
-
- while z:
-- c = cache.objectptr.initi(c, <long>napGetCoeff(z))
-+ c = cache.objectptr.initi(c, <int64_t>napGetCoeff(z))
- e = napGetExpFrom(z,1, _ring)
- if e == 0:
- ret = cache.objectptr.add(ret, c, ret)
-diff --git a/src/sage/rings/finite_rings/element_givaro.pxd b/src/sage/rings/finite_rings/element_givaro.pxd
-index 68def46..91c4ed7 100644
---- a/src/sage/rings/finite_rings/element_givaro.pxd
-+++ b/src/sage/rings/finite_rings/element_givaro.pxd
-@@ -1,9 +1,15 @@
--from sage.structure.element cimport Element, RingElement, ModuleElement
--from sage.rings.finite_rings.element_base cimport FinitePolyExtElement
-+# distutils: extra_compile_args = GIVARO_CFLAGS
-+
-+from libcpp.vector cimport vector
-+ctypedef vector[int] intvec
-+
-+from libc.stdint cimport int64_t
-
--from sage.structure.parent cimport Parent
-+from sage.rings.finite_rings.element_base cimport FinitePolyExtElement
-+from sage.structure.parent cimport Parent
- from sage.structure.sage_object cimport SageObject
-
-+
- cdef extern from "givaro/givconfig.h":
- pass
-
-@@ -13,16 +19,7 @@ cdef extern from "givaro/givrandom.h":
-
- GivRandom GivRandomSeeded "Givaro::GivRandom"(unsigned long seed)
-
--cdef extern from "givaro/givgfq.h":
-- ctypedef struct intvec "std::vector<unsigned int>":
-- void (* push_back)(int elem)
--
-- ctypedef struct constintvec "const std::vector<unsigned int>"
--
-- intvec intvec_factory "std::vector<unsigned int>"(int len)
--
--cdef extern from "givaro/givgfq.h":
--
-+cdef extern from "givaro/gfq.h":
- ctypedef struct GivaroGfq "Givaro::GFqDom<int>":
- #attributes
- unsigned int one
-@@ -40,10 +37,10 @@ cdef extern from "givaro/givgfq.h":
- unsigned int (* cardinality)()
- int (* exponent)()
- int (* random)(GivRandom gen, int res)
-- int (* initi "init")(int res, int e)
-+ int (* initi "init")(int res, int64_t e)
- int (* initd "init")(int res, double e)
- int (* indeterminate)()
-- int (* convert)(int r, int p)
-+ int (* convert)(int64_t r, int p)
- int (* read)(int r, int p)
- int (* axpyin)(int r, int a, int x)
- int (* axpy)(int r, int a, int b, int c)
-@@ -60,7 +57,12 @@ cdef extern from "givaro/givgfq.h":
- void delete "delete "(void *o)
- int gfq_element_factory "Givaro::GFqDom<int>::Element"()
-
--cdef class FiniteField_givaroElement(FinitePolyExtElement) #forward declaration
-+
-+cdef class FiniteField_givaroElement(FinitePolyExtElement):
-+ cdef int element
-+ cdef Cache_givaro _cache
-+ cdef object _multiplicative_order
-+ cdef FiniteField_givaroElement _new_c(self, int value)
-
- cdef class Cache_givaro(SageObject):
- cdef GivaroGfq *objectptr # C++ object
-@@ -85,11 +87,4 @@ cdef class FiniteField_givaro_iterator:
- cdef int iterator
- cdef Cache_givaro _cache
-
--cdef class FiniteField_givaroElement(FinitePolyExtElement):
-- cdef int element
-- cdef Cache_givaro _cache
-- cdef object _multiplicative_order
-- cdef FiniteField_givaroElement _new_c(self, int value)
--
--
- cdef inline FiniteField_givaroElement make_FiniteField_givaroElement(Cache_givaro cache, int x)
-diff --git a/src/sage/rings/finite_rings/element_givaro.pyx b/src/sage/rings/finite_rings/element_givaro.pyx
-index d32b5cf..f2afa44 100644
---- a/src/sage/rings/finite_rings/element_givaro.pyx
-+++ b/src/sage/rings/finite_rings/element_givaro.pyx
-@@ -59,8 +59,9 @@ from sage.misc.randstate cimport randstate, current_randstate
- from sage.rings.finite_rings.finite_field_base cimport FiniteField
- from sage.rings.ring cimport Ring
- from element_ext_pari import FiniteField_ext_pariElement
--from element_pari_ffelt import FiniteFieldElement_pari_ffelt
-+from element_pari_ffelt cimport FiniteFieldElement_pari_ffelt
- from sage.structure.sage_object cimport SageObject
-+from sage.structure.element cimport Element, ModuleElement, RingElement
- import operator
- import sage.arith.all
- import finite_field_constructor as finite_field
-@@ -374,18 +375,16 @@ cdef class Cache_givaro(SageObject):
- elif isinstance(e, int) or \
- isinstance(e, Integer) or \
- isinstance(e, long) or is_IntegerMod(e):
-- try:
-- e_int = e
-- except OverflowError:
-- e_int = e % self.characteristic()
-+ e_int = e % self.characteristic()
- res = self.objectptr.initi(res, e_int)
-
- elif e is None:
- e_int = 0
-- res = self.objectptr.initi(res,e_int)
-+ res = self.objectptr.initi(res, e_int)
-
- elif isinstance(e, float):
-- res = self.objectptr.initd(res,e)
-+ e_int = int(e) % self.characteristic()
-+ res = self.objectptr.initd(res, e_int)
-
- elif isinstance(e, str):
- return self.parent(eval(e.replace("^","**"),self.parent.gens_dict()))
-@@ -395,8 +394,8 @@ cdef class Cache_givaro(SageObject):
- raise TypeError("e.parent must match self.vector_space")
- ret = self._zero_element
- for i in range(len(e)):
-- e_entry = e[i] % self.characteristic()
-- res = self.objectptr.initi(res, int(e_entry))
-+ e_int = e[i] % self.characteristic()
-+ res = self.objectptr.initi(res, e_int)
- to_add = make_FiniteField_givaroElement(self, res)
- ret = ret + to_add*self.parent.gen()**i
- return ret
-@@ -435,8 +434,8 @@ cdef class Cache_givaro(SageObject):
- raise ValueError("list is too long")
- ret = self._zero_element
- for i in range(len(e)):
-- e_entry = e[i] % self.characteristic()
-- res = self.objectptr.initi(res, int(e_entry))
-+ e_int = e[i] % self.characteristic()
-+ res = self.objectptr.initi(res, e_int)
- to_add = make_FiniteField_givaroElement(self, res)
- ret = ret + to_add*self.parent.gen()**i
- return ret
-@@ -573,19 +572,17 @@ cdef class Cache_givaro(SageObject):
- cdef int ret = k.zero
- cdef int a = k.indeterminate()
- cdef int at = k.one
-- cdef unsigned int ch = k.characteristic()
-- cdef int _n, t, i
-+ cdef int ch = k.characteristic()
-+ cdef int t, i
-
- if n<0 or n>k.cardinality():
- raise TypeError("n must be between 0 and self.order()")
-
-- _n = n
--
- for i from 0 <= i < k.exponent():
-- t = k.initi(t, _n%ch)
-+ t = k.initi(t, n % ch)
- ret = k.axpy(ret, t, at, ret)
- at = k.mul(at,at,a)
-- _n = _n/ch
-+ n //= ch
- return make_FiniteField_givaroElement(self, ret)
-
- def _element_repr(self, FiniteField_givaroElement e):
-diff --git a/src/sage/rings/finite_rings/finite_field_givaro.py b/src/sage/rings/finite_rings/finite_field_givaro.py
-index adbaab3..c431f6d 100644
---- a/src/sage/rings/finite_rings/finite_field_givaro.py
-+++ b/src/sage/rings/finite_rings/finite_field_givaro.py
-@@ -270,7 +270,8 @@ class FiniteField_givaro(FiniteField):
- sage: k(2) # indirect doctest
- 0
-
-- Floats coerce in:
-+ Floats are converted like integers::
-+
- sage: k(float(2.0))
- 0
-
-@@ -344,7 +345,7 @@ class FiniteField_givaro(FiniteField):
- sage: k(pari('Mod(1,2)'))
- 1
- sage: k(pari('Mod(2,3)'))
-- 0
-+ a
- sage: k(pari('Mod(1,3)*a^20'))
- a^7 + a^5 + a^4 + a^2
-
diff --git a/libre/sagemath/package.patch b/libre/sagemath/package.patch
index b2a0d2dcf..ef449fdf3 100644
--- a/libre/sagemath/package.patch
+++ b/libre/sagemath/package.patch
@@ -1,11 +1,40 @@
--- src/sage/misc/package.py.orig 2014-11-23 15:58:13.000000000 +0100
+++ src/sage/misc/package.py 2015-01-22 20:32:25.651383902 +0100
-@@ -204,7 +204,7 @@
- Otherwise, installing "pillow" will cause this function to think
- that "pil" is installed, for example.
+@@ -343,7 +343,7 @@
+ sage: for pkg in list_packages('pip', local=True):
+ ....: assert not is_package_installed(pkg)
"""
-- return any(p.split('-')[0] == package for p in installed_packages())
+- return any(p.split('-')[0] == package for p in installed_packages(exclude_pip))
+ return True
def package_versions(package_type, local=False):
r"""
+--- src/sage_setup/optional_extension.py.orig 2016-10-19 18:35:10.092577510 +0000
++++ src/sage_setup/optional_extension.py 2016-10-19 18:38:13.514765366 +0000
+@@ -21,8 +21,6 @@
+ from distutils.extension import Extension
+ from sage.misc.package import is_package_installed, list_packages
+
+-all_packages = list_packages(local=True)
+-
+
+ class CythonizeExtension(Extension):
+ """
+@@ -75,15 +73,7 @@
+ try:
+ condition = kwds.pop("condition")
+ except KeyError:
+- pkg = kwds.pop("package")
+- try:
+- pkginfo = all_packages[pkg]
+- except KeyError:
+- # Might be an installed old-style package
+- condition = is_package_installed(pkg)
+- else:
+- condition = (pkginfo["installed_version"] == pkginfo["remote_version"])
+-
++ condition = True
+ if condition:
+ return Extension(*args, **kwds)
+ else:
+
diff --git a/libre/sagemath/paths.patch b/libre/sagemath/paths.patch
deleted file mode 100644
index 79b37408c..000000000
--- a/libre/sagemath/paths.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- src/sage/env.py.orig 2014-06-25 10:47:25.827203554 +1200
-+++ src/sage/env.py 2014-06-25 10:49:07.667402821 +1200
-@@ -90,8 +90,8 @@
-
- # bunch of sage directories and files
- _add_variable_or_fallback('SAGE_ROOT', None)
--_add_variable_or_fallback('SAGE_LOCAL', opj('$SAGE_ROOT', 'local'))
--_add_variable_or_fallback('SAGE_ETC', opj('$SAGE_LOCAL', 'etc'))
-+_add_variable_or_fallback('SAGE_LOCAL', '/usr')
-+_add_variable_or_fallback('SAGE_ETC', '/etc/sage')
- _add_variable_or_fallback('SAGE_INC', opj('$SAGE_LOCAL', 'include'))
- _add_variable_or_fallback('SAGE_SHARE', opj('$SAGE_LOCAL', 'share'))
-
diff --git a/libre/sagemath/sagemath-ipython5.patch b/libre/sagemath/sagemath-ipython5.patch
deleted file mode 100644
index 0f05de4d8..000000000
--- a/libre/sagemath/sagemath-ipython5.patch
+++ /dev/null
@@ -1,548 +0,0 @@
-diff --git a/src/sage/doctest/forker.py b/src/sage/doctest/forker.py
-index 2654016..d3daed6 100644
---- a/src/sage/doctest/forker.py
-+++ b/src/sage/doctest/forker.py
-@@ -116,10 +116,6 @@ def init_sage():
- from sage.structure.debug_options import debug
- debug.refine_category_hash_check = True
-
-- # Disable IPython colors during doctests
-- from sage.repl.interpreter import DEFAULT_SAGE_CONFIG
-- DEFAULT_SAGE_CONFIG.TerminalInteractiveShell.colors = 'NoColor'
--
- # We import readline before forking, otherwise Pdb doesn't work
- # os OS X: http://trac.sagemath.org/14289
- import readline
-@@ -1088,15 +1084,13 @@ class SageDocTestRunner(doctest.DocTestRunner):
- sage: _ = sage0.eval("import doctest, sys, os, multiprocessing, subprocess")
- sage: _ = sage0.eval("from sage.doctest.parsing import SageOutputChecker")
- sage: _ = sage0.eval("import sage.doctest.forker as sdf")
-- sage: _ = sage0.eval("sdf.init_sage()")
- sage: _ = sage0.eval("from sage.doctest.control import DocTestDefaults")
- sage: _ = sage0.eval("DD = DocTestDefaults(debug=True)")
- sage: _ = sage0.eval("ex1 = doctest.Example('a = 17', '')")
- sage: _ = sage0.eval("ex2 = doctest.Example('2*a', '1')")
- sage: _ = sage0.eval("DT = doctest.DocTest([ex1,ex2], globals(), 'doubling', None, 0, None)")
- sage: _ = sage0.eval("DTR = sdf.SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)")
-- sage: sage0._prompt = r"debug: "
-- sage: print(sage0.eval("DTR.run(DT, clear_globs=False)")) # indirect doctest
-+ sage: print(sage0.eval("sdf.init_sage(); DTR.run(DT, clear_globs=False)")) # indirect doctest
- **********************************************************************
- Line 1, in doubling
- Failed example:
-@@ -1110,7 +1104,6 @@ class SageDocTestRunner(doctest.DocTestRunner):
- ...
- sage: sage0.eval("a")
- '...17'
-- sage: sage0._prompt = "sage: "
- sage: sage0.eval("quit")
- 'Returning to doctests...TestResults(failed=1, attempted=2)'
- """
-@@ -1144,13 +1137,14 @@ class SageDocTestRunner(doctest.DocTestRunner):
- print(src)
- if ex.want:
- print(doctest._indent(ex.want[:-1]))
-- from sage.repl.interpreter import DEFAULT_SAGE_CONFIG
-+ from sage.repl.configuration import sage_ipython_config
-+ from sage.repl.prompts import DebugPrompts
- from IPython.terminal.embed import InteractiveShellEmbed
-- import copy
-- cfg = copy.deepcopy(DEFAULT_SAGE_CONFIG)
-- prompt_config = cfg.PromptManager
-- prompt_config.in_template = 'debug: '
-- prompt_config.in2_template = '.....: '
-+ cfg = sage_ipython_config.default()
-+ # Currently this doesn't work: prompts only work in pty
-+ # We keep simple_prompt=True, prompts will be "In [0]:"
-+ # cfg.InteractiveShell.prompts_class = DebugPrompts
-+ # cfg.InteractiveShell.simple_prompt = False
- shell = InteractiveShellEmbed(config=cfg, banner1='', user_ns=dict(globs))
- shell(header='', stack_depth=2)
- except KeyboardInterrupt:
-@@ -1248,6 +1242,7 @@ class SageDocTestRunner(doctest.DocTestRunner):
- sage: _ = sage0.eval("ex = doctest.Example('E = EllipticCurve([0,0]); E', 'A singular Elliptic Curve')")
- sage: _ = sage0.eval("DT = doctest.DocTest([ex], globals(), 'singular_curve', None, 0, None)")
- sage: _ = sage0.eval("DTR = sdf.SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)")
-+ sage: old_prompt = sage0._prompt
- sage: sage0._prompt = r"\(Pdb\) "
- sage: sage0.eval("DTR.run(DT, clear_globs=False)") # indirect doctest
- '... ArithmeticError("invariants " + str(ainvs) + " define a singular curve")'
-@@ -1257,7 +1252,7 @@ class SageDocTestRunner(doctest.DocTestRunner):
- '...EllipticCurve_field.__init__(self, K, ainvs)'
- sage: sage0.eval("p ainvs")
- '(0, 0, 0, 0, 0)'
-- sage: sage0._prompt = "sage: "
-+ sage: sage0._prompt = old_prompt
- sage: sage0.eval("quit")
- 'TestResults(failed=1, attempted=1)'
- """
-diff --git a/src/sage/doctest/test.py b/src/sage/doctest/test.py
-index d69136f..a6cc4d0 100644
---- a/src/sage/doctest/test.py
-+++ b/src/sage/doctest/test.py
-@@ -360,7 +360,7 @@ Test the ``--debug`` option::
- s...: b = 5
- s...: a + b
- 8
-- debug:
-+ In [1]:
- <BLANKLINE>
- Returning to doctests...
- **********************************************************************
-diff --git a/src/sage/interfaces/sage0.py b/src/sage/interfaces/sage0.py
-index 87bfc0b..77cd151 100644
---- a/src/sage/interfaces/sage0.py
-+++ b/src/sage/interfaces/sage0.py
-@@ -18,6 +18,7 @@ from __future__ import absolute_import
-
- import cPickle
- import os
-+import re
-
- from .expect import Expect, ExpectElement, FunctionElement
- import sage.repl.preparse
-@@ -146,10 +147,17 @@ class Sage(ExtraTabCompletion, Expect):
- if init_code is None:
- init_code = ['from sage.all import *', 'import cPickle']
- else:
-- # Disable the IPython history (implemented as SQLite database)
-- # to avoid problems with locking.
-- command = "sage-ipython --HistoryManager.hist_file=:memory: --colors=NoColor"
-- prompt = "sage: "
-+ command = ' '.join([
-+ 'sage-ipython',
-+ # Disable the IPython history (implemented as SQLite database)
-+ # to avoid problems with locking.
-+ '--HistoryManager.hist_file=:memory:',
-+ # Disable everything that prints ANSI codes
-+ '--colors=NoColor',
-+ '--no-term-title',
-+ '--simple-prompt',
-+ ])
-+ prompt = re.compile('In \[\d+\]: ')
- if init_code is None:
- init_code = ['import cPickle']
-
-diff --git a/src/sage/misc/trace.py b/src/sage/misc/trace.py
-index 0da17e7..efcaa33 100644
---- a/src/sage/misc/trace.py
-+++ b/src/sage/misc/trace.py
-@@ -54,6 +54,7 @@ def trace(code, preparse=True):
- sage: import pexpect
- sage: s = pexpect.spawn('sage')
- sage: _ = s.sendline("trace('print(factor(10))'); print(3+97)")
-+ sage: _ = s.expect('ipdb>', timeout=90)
- sage: _ = s.sendline("s"); _ = s.sendline("c");
- sage: _ = s.expect('100', timeout=90)
-
-diff --git a/src/sage/repl/configuration.py b/src/sage/repl/configuration.py
-new file mode 100644
-index 0000000..5034039
---- /dev/null
-+++ b/src/sage/repl/configuration.py
-@@ -0,0 +1,152 @@
-+r"""
-+Sage's IPython Configuration
-+"""
-+
-+#*****************************************************************************
-+# Copyright (C) 2016 Volker Braun <vbraun.name@gmail.com>
-+#
-+# Distributed under the terms of the GNU General Public License (GPL)
-+# as published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+# http://www.gnu.org/licenses/
-+#*****************************************************************************
-+
-+from __future__ import absolute_import
-+
-+import sys
-+import copy
-+from traitlets.config.loader import Config
-+
-+from sage.repl.prompts import SagePrompts
-+
-+
-+# Name of the Sage IPython extension
-+SAGE_EXTENSION = 'sage'
-+
-+
-+class SageIpythonConfiguration(object):
-+
-+ def _doctest_mode(self):
-+ """
-+ Whether we are in doctest mode
-+
-+ This returns ``True`` during doctests.
-+
-+ EXAMPLES::
-+
-+ sage: from sage.repl.configuration import sage_ipython_config
-+ sage: sage_ipython_config._doctest_mode()
-+ True
-+ """
-+ from sage.doctest import DOCTEST_MODE
-+ return DOCTEST_MODE
-+
-+ def _allow_ansi(self):
-+ """
-+ Whether to allow ANSI escape sequences
-+
-+ This returns ``False`` during doctests to avoid ANSI escape
-+ sequences.
-+
-+ EXAMPLES::
-+
-+ sage: from sage.repl.configuration import sage_ipython_config
-+ sage: sage_ipython_config._allow_ansi()
-+ False
-+ """
-+ return (not self._doctest_mode()) and sys.stdout.isatty()
-+
-+ def colors(self):
-+ """
-+ Return the IPython color palette
-+
-+ This returns ``'NoColor'`` during doctests to avoid ANSI escape
-+ sequences.
-+
-+ EXAMPLES::
-+
-+ sage: from sage.repl.configuration import sage_ipython_config
-+ sage: sage_ipython_config.simple_prompt()
-+ True
-+ """
-+ return 'LightBG' if self._allow_ansi() else 'NoColor'
-+
-+ def simple_prompt(self):
-+ """
-+ Return whether to use the simple prompt
-+
-+ This returns ``True`` during doctests to avoid ANSI escape sequences.
-+
-+ EXAMPLES::
-+
-+ sage: from sage.repl.configuration import sage_ipython_config
-+ sage: sage_ipython_config.simple_prompt()
-+ True
-+ """
-+ return not self._allow_ansi()
-+
-+ def term_title(self):
-+ """
-+ Return whether to set the terminal title
-+
-+ This returns false during doctests to avoid ANSI escape sequences.
-+
-+ EXAMPLES::
-+
-+ sage: from sage.repl.configuration import sage_ipython_config
-+ sage: sage_ipython_config.term_title()
-+ False
-+ """
-+ return self._allow_ansi()
-+
-+ def default(self):
-+ """
-+ Return a new default configuration object
-+
-+ EXAMPLES::
-+
-+ sage: from sage.repl.configuration import sage_ipython_config
-+ sage: sage_ipython_config.default()
-+ {'InteractiveShell': {'colors': ...
-+ """
-+ from sage.repl.interpreter import SageTerminalInteractiveShell
-+ cfg = Config(
-+ TerminalIPythonApp=Config(
-+ display_banner=False,
-+ verbose_crash=True,
-+ test_shell=False,
-+ shell_class=SageTerminalInteractiveShell,
-+ ),
-+ InteractiveShell=Config(
-+ prompts_class=SagePrompts,
-+ ast_node_interactivity='all',
-+ colors=self.colors(),
-+ simple_prompt=self.simple_prompt(),
-+ term_title=self.term_title(),
-+ confirm_exit=False,
-+ separate_in=''
-+ ),
-+ InteractiveShellApp=Config(extensions=[SAGE_EXTENSION]),
-+ )
-+ if self._doctest_mode():
-+ # Using the file-backed history causes problems in parallel tests
-+ cfg.HistoryManager = Config(hist_file=':memory:')
-+ return cfg
-+
-+ def copy(self):
-+ """
-+ Return a copy of the current configuration
-+
-+ EXAMPLES::
-+
-+ sage: from sage.repl.configuration import sage_ipython_config
-+ sage: sage_ipython_config.copy()
-+ {'InteractiveShell': {'colors': ...
-+ """
-+ try:
-+ return copy.deepcopy(get_ipython().config)
-+ except NameError:
-+ return self.default()
-+
-+
-+sage_ipython_config = SageIpythonConfiguration()
-diff --git a/src/sage/repl/interpreter.py b/src/sage/repl/interpreter.py
-index e0499c7..1f4eda7 100644
---- a/src/sage/repl/interpreter.py
-+++ b/src/sage/repl/interpreter.py
-@@ -102,18 +102,15 @@ Check that Cython source code appears in tracebacks::
- #*****************************************************************************
-
-
--import copy
- import os
- import re
--import sys
- from sage.repl.preparse import preparse
-+from sage.repl.prompts import SagePrompts, InterfacePrompts
-
--from traitlets.config.loader import Config
- from traitlets import Bool, Type
-
- from sage.env import SAGE_LOCAL
--
--SAGE_EXTENSION = 'sage'
-+from sage.repl.configuration import sage_ipython_config, SAGE_EXTENSION
-
- def embedded():
- """
-@@ -370,31 +367,7 @@ class SageTestShell(SageShellOverride, TerminalInteractiveShell):
- rc = super(SageTestShell, self).run_cell(*args, **kwds)
-
-
--###################################################################
--# Default configuration
--###################################################################
--
--DEFAULT_SAGE_CONFIG = Config(
-- PromptManager = Config(
-- in_template = 'sage: ',
-- in2_template = '....: ',
-- justify = False,
-- out_template = ''),
-- TerminalIPythonApp = Config(
-- display_banner = False,
-- verbose_crash = True,
-- test_shell = False,
-- shell_class = SageTerminalInteractiveShell,
-- ),
-- InteractiveShell = Config(
-- ast_node_interactivity = 'all',
-- colors = 'LightBG' if sys.stdout.isatty() else 'NoColor',
-- confirm_exit = False,
-- separate_in = ''),
-- InteractiveShellApp = Config(extensions=[SAGE_EXTENSION]),
--)
--
--
-+
- ###################################################################
- # Transformers used in the SageInputSplitter
- ###################################################################
-@@ -614,19 +587,17 @@ def interface_shell_embed(interface):
- sage: shell = interface_shell_embed(gap)
- sage: shell.run_cell('List( [1..10], IsPrime )')
- [ false, true, true, false, true, false, true, false, false, false ]
-- <IPython.core.interactiveshell.ExecutionResult object at 0x...>
-- """
-- try:
-- cfg = copy.deepcopy(get_ipython().config)
-- except NameError:
-- cfg = copy.deepcopy(DEFAULT_SAGE_CONFIG)
-- cfg.PromptManager['in_template'] = interface.name() + ': '
-- cfg.PromptManager['in2_template'] = len(interface.name())*'.' + ': '
-+ <repr(<IPython.core.interactiveshell.ExecutionResult at 0x...>) failed:
-+ AttributeError: type object 'ExecutionResult' has no attribute '__qualname__'>
-
-+ Note that the repr error is https://github.com/ipython/ipython/issues/9756
-+ """
-+ cfg = sage_ipython_config.copy()
- ipshell = InteractiveShellEmbed(config=cfg,
- banner1='\n --> Switching to %s <--\n\n'%interface,
-- exit_msg = '\n --> Exiting back to Sage <--\n')
-+ exit_msg='\n --> Exiting back to Sage <--\n')
- ipshell.interface = interface
-+ ipshell.prompts = InterfacePrompts(interface.name())
-
- while ipshell.prefilter_manager.transformers:
- ipshell.prefilter_manager.transformers.pop()
-@@ -669,7 +640,7 @@ def get_test_shell():
- sage: out + err
- ''
- """
-- config = copy.deepcopy(DEFAULT_SAGE_CONFIG)
-+ config = sage_ipython_config.default()
- config.TerminalIPythonApp.test_shell = True
- config.TerminalIPythonApp.shell_class = SageTestShell
- app = SageTerminalApp.instance(config=config)
-@@ -748,12 +719,9 @@ class SageTerminalApp(TerminalIPythonApp):
- sage: os.environ['IPYTHONDIR'] = IPYTHONDIR
- """
- super(SageTerminalApp, self).load_config_file(*args, **kwds)
--
-- newconfig = copy.deepcopy(DEFAULT_SAGE_CONFIG)
--
-+ newconfig = sage_ipython_config.default()
- # merge in the config loaded from file
- newconfig.merge(self.config)
--
- self.config = newconfig
-
- def init_shell(self):
-@@ -767,7 +735,7 @@ class SageTerminalApp(TerminalIPythonApp):
-
- EXAMPLES::
-
-- sage: from sage.repl.interpreter import SageTerminalApp, DEFAULT_SAGE_CONFIG
-+ sage: from sage.repl.interpreter import SageTerminalApp
- sage: app = SageTerminalApp.instance()
- sage: app.shell
- <sage.repl.interpreter.SageTestShell object at 0x...>
-@@ -776,7 +744,6 @@ class SageTerminalApp(TerminalIPythonApp):
- self.shell = self.shell_class.instance(
- parent=self,
- config=self.config,
-- display_banner=False,
- profile_dir=self.profile_dir,
- ipython_dir=self.ipython_dir)
- self.shell.configurables.append(self)
-diff --git a/src/sage/repl/ipython_tests.py b/src/sage/repl/ipython_tests.py
-index 0fa568d..2bb34cd 100644
---- a/src/sage/repl/ipython_tests.py
-+++ b/src/sage/repl/ipython_tests.py
-@@ -100,6 +100,12 @@ Next, test the pinfo2 magic for Cython code::
- ...
- File: .../sage/tests/stl_vector.pyx
- Type: type
-+
-+Test that there are no warnings being ignored internally::
-+
-+ sage: import warnings
-+ sage: warnings.simplefilter('error'); get_test_shell()
-+ <sage.repl.interpreter.SageTestShell object at 0x...>
- '''
-
-
-diff --git a/src/sage/repl/prompts.py b/src/sage/repl/prompts.py
-new file mode 100644
-index 0000000..e885730
---- /dev/null
-+++ b/src/sage/repl/prompts.py
-@@ -0,0 +1,92 @@
-+r"""
-+Sage Commandline Prompts
-+"""
-+
-+#*****************************************************************************
-+# Copyright (C) 2016 Volker Braun <vbraun.name@gmail.com>
-+#
-+# This program is free software: you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation, either version 2 of the License, or
-+# (at your option) any later version.
-+# http://www.gnu.org/licenses/
-+#*****************************************************************************
-+
-+from pygments.token import Token
-+from IPython.terminal.prompts import Prompts
-+
-+
-+class SagePrompts(Prompts):
-+
-+ def in_prompt_tokens(self, cli=None):
-+ return [
-+ (Token.Prompt, 'sage: '),
-+ ]
-+
-+ def continuation_prompt_tokens(self, cli=None, width=None):
-+ return [
-+ (Token.Prompt, '....: '),
-+ ]
-+
-+ def rewrite_prompt_tokens(self):
-+ return [
-+ (Token.Prompt, '----> '),
-+ ]
-+
-+ def out_prompt_tokens(self):
-+ return [
-+ (Token.OutPrompt, ''),
-+ ]
-+
-+
-+class InterfacePrompts(Prompts):
-+
-+ def __init__(self, interface_name):
-+ self.__name = interface_name
-+ self.__width = len(interface_name)
-+
-+ def in_prompt_tokens(self, cli=None):
-+ return [
-+ (Token.Prompt, self.__name + ': '),
-+ ]
-+
-+ def continuation_prompt_tokens(self, cli=None, width=None):
-+ return [
-+ (Token.Prompt, '.' * self.__width + ': '),
-+ ]
-+
-+ def rewrite_prompt_tokens(self):
-+ return [
-+ (Token.Prompt, '-' * self.__width + '> '),
-+ ]
-+
-+ def out_prompt_tokens(self):
-+ return [
-+ (Token.OutPrompt, ''),
-+ ]
-+
-+
-+class DebugPrompts(Prompts):
-+
-+ def in_prompt_tokens(self, cli=None):
-+ return [
-+ (Token.Prompt, 'debug: '),
-+ ]
-+
-+ def continuation_prompt_tokens(self, cli=None, width=None):
-+ return [
-+ (Token.Prompt, '.....: '),
-+ ]
-+
-+ def rewrite_prompt_tokens(self):
-+ return [
-+ (Token.Prompt, '-----> '),
-+ ]
-+
-+ def out_prompt_tokens(self):
-+ return [
-+ (Token.OutPrompt, ''),
-+ ]
-+
-+
-+
-diff --git a/src/sage/tests/cmdline.py b/src/sage/tests/cmdline.py
-index 0d15d82..417ec5e 100644
---- a/src/sage/tests/cmdline.py
-+++ b/src/sage/tests/cmdline.py
-@@ -385,7 +385,7 @@ def test_executable(args, input="", timeout=100.0, **kwds):
- **********************************************************************
- Previously executed commands:
- s...: assert True == False
-- debug:
-+ In [1]:
- <BLANKLINE>
- Returning to doctests...
- **********************************************************************
diff --git a/libre/sagemath/sagemath-singular4.patch b/libre/sagemath/sagemath-singular4.patch
index 09490c193..aa34bdbe0 100644
--- a/libre/sagemath/sagemath-singular4.patch
+++ b/libre/sagemath/sagemath-singular4.patch
@@ -1,3 +1,16 @@
+diff --git a/src/bin/sage b/src/bin/sage
+index 46da103..96de4bc 100755
+--- a/src/bin/sage
++++ b/src/bin/sage
+@@ -472,7 +472,7 @@ fi
+
+ if [ "$1" = '-singular' -o "$1" = '--singular' ]; then
+ shift
+- exec singular "$@"
++ exec Singular "$@"
+ fi
+
+ if [ "$1" = '-sqlite3' -o "$1" = '--sqlite3' ]; then
diff --git a/src/doc/de/tutorial/interfaces.rst b/src/doc/de/tutorial/interfaces.rst
index c452b11..037cfc3 100644
--- a/src/doc/de/tutorial/interfaces.rst
@@ -95,7 +108,7 @@ index 4be09f9..41b04ca 100644
// number of vars : 2
// block 1 : ordering dp
diff --git a/src/module_list.py b/src/module_list.py
-index 5948fa2..240078c 100644
+index 0dee41b..ec842b7 100644
--- a/src/module_list.py
+++ b/src/module_list.py
@@ -58,6 +58,12 @@ linbox_libs = list(linbox_pc['libraries'])
@@ -144,7 +157,7 @@ index 5948fa2..240078c 100644
+ "ec", "ecm",
] + linbox_libs + gsl_libs + [
"pari", "flint", "ratpoints", "ecl", "glpk", "ppl",
- "arb", "fplll", "mpfi", "mpfr", "mpc", "gmp", "gmpxx",
+ "arb", "mpfi", "mpfr", "mpc", "gmp", "gmpxx",
@@ -190,20 +193,7 @@ ext_modules = [
language='c++',
libraries = ["flint", "gmp", "gmpxx", "m", "ntl"]),
@@ -167,7 +180,7 @@ index 5948fa2..240078c 100644
Extension('sage.algebras.quatalg.quaternion_algebra_cython',
sources = ['sage/algebras/quatalg/quaternion_algebra_cython.pyx'],
-@@ -678,35 +668,7 @@ ext_modules = [
+@@ -675,35 +665,7 @@ ext_modules = [
sources = ['sage/libs/readline.pyx'],
libraries = ['readline']),
@@ -204,7 +217,7 @@ index 5948fa2..240078c 100644
Extension('sage.libs.symmetrica.symmetrica',
sources = ["sage/libs/symmetrica/symmetrica.pyx"],
-@@ -973,9 +935,7 @@ ext_modules = [
+@@ -970,9 +932,7 @@ ext_modules = [
sources = ['sage/matrix/matrix_modn_sparse.pyx']),
Extension('sage.matrix.matrix_mpolynomial_dense',
@@ -215,7 +228,7 @@ index 5948fa2..240078c 100644
Extension('sage.matrix.matrix_rational_dense',
sources = ['sage/matrix/matrix_rational_dense.pyx'],
-@@ -1585,19 +1545,13 @@ ext_modules = [
+@@ -1569,19 +1529,13 @@ ext_modules = [
sources = ['sage/rings/polynomial/multi_polynomial.pyx']),
Extension('sage.rings.polynomial.multi_polynomial_ideal_libsingular',
@@ -239,7 +252,7 @@ index 5948fa2..240078c 100644
Extension('sage.rings.polynomial.multi_polynomial_ring_generic',
sources = ['sage/rings/polynomial/multi_polynomial_ring_generic.pyx']),
diff --git a/src/sage/arith/misc.py b/src/sage/arith/misc.py
-index c0ffd96..c03a365 100644
+index a7fa5a1..c943bc5 100644
--- a/src/sage/arith/misc.py
+++ b/src/sage/arith/misc.py
@@ -3246,7 +3246,7 @@ def binomial(x, m, **kwds):
@@ -252,7 +265,7 @@ index c0ffd96..c03a365 100644
Multivariate Polynomial Ring in x, y over Ring of integers modulo 7
diff --git a/src/sage/categories/pushout.py b/src/sage/categories/pushout.py
-index c04531a..979e56f 100644
+index 60dfc3a..37a0914 100644
--- a/src/sage/categories/pushout.py
+++ b/src/sage/categories/pushout.py
@@ -3201,6 +3201,7 @@ class BlackBoxConstructionFunctor(ConstructionFunctor):
@@ -264,10 +277,10 @@ index c04531a..979e56f 100644
// number of vars : 1
// block 1 : ordering lp
diff --git a/src/sage/interfaces/expect.py b/src/sage/interfaces/expect.py
-index 8149e1e..309bc09 100644
+index f9de7d0..c86a9bd 100644
--- a/src/sage/interfaces/expect.py
+++ b/src/sage/interfaces/expect.py
-@@ -1210,6 +1210,7 @@ If this all works, you can then make calls like:
+@@ -1212,6 +1212,7 @@ If this all works, you can then make calls like:
sage: R.<x> = QQ[]; f = x^3 + x + 1; g = x^3 - x - 1; r = f.resultant(g); gap(ZZ); singular(R)
Integers
@@ -276,10 +289,10 @@ index 8149e1e..309bc09 100644
// number of vars : 1
// block 1 : ordering lp
diff --git a/src/sage/interfaces/interface.py b/src/sage/interfaces/interface.py
-index 7c86013..0ee4207 100644
+index 816acfa..95b4a91 100644
--- a/src/sage/interfaces/interface.py
+++ b/src/sage/interfaces/interface.py
-@@ -732,6 +732,7 @@ class InterfaceElement(RingElement):
+@@ -733,6 +733,7 @@ class InterfaceElement(Element):
PolynomialRing( Rationals, ["x"] )
sage: S = singular.ring(0, ('x'))
sage: loads(dumps(S))
@@ -288,7 +301,7 @@ index 7c86013..0ee4207 100644
// number of vars : 1
// block 1 : ordering lp
diff --git a/src/sage/interfaces/singular.py b/src/sage/interfaces/singular.py
-index 5ebe7d2..4994909 100644
+index 5ebe7d2..0887e0c 100644
--- a/src/sage/interfaces/singular.py
+++ b/src/sage/interfaces/singular.py
@@ -64,6 +64,7 @@ factorization::
@@ -456,6 +469,36 @@ index 5ebe7d2..4994909 100644
// characteristic : 0
// number of vars : 1
// block 1 : ordering lp
+@@ -2252,13 +2275,15 @@ def generate_docstring_dictionary():
+ sage: from sage.interfaces.singular import generate_docstring_dictionary
+ sage: generate_docstring_dictionary()
+ """
++ from sage.env import SAGE_LOCAL
++
+ global nodes
+ global node_names
+
+ nodes.clear()
+ node_names.clear()
+
+- singular_docdir = os.environ["SAGE_LOCAL"]+"/share/singular/"
++ singular_docdir = SAGE_LOCAL+"/share/singular/"
+
+ new_node = re.compile("File: singular\.hlp, Node: ([^,]*),.*")
+ new_lookup = re.compile("\* ([^:]*):*([^.]*)\..*")
+diff --git a/src/sage/interfaces/tests.py b/src/sage/interfaces/tests.py
+index e41f15c..af9797a 100644
+--- a/src/sage/interfaces/tests.py
++++ b/src/sage/interfaces/tests.py
+@@ -39,7 +39,7 @@ Test that write errors to stderr are handled gracefully by GAP
+ 0
+ sage: subprocess.call("echo syntax error | ipython", **kwds) in (0,1)
+ True
+- sage: subprocess.call("echo syntax error | singular", **kwds)
++ sage: subprocess.call("echo syntax error | Singular", **kwds)
+ 0
+ """
+ from __future__ import print_function
diff --git a/src/sage/libs/singular/decl.pxd b/src/sage/libs/singular/decl.pxd
index 7a5af56..8235e9d 100644
--- a/src/sage/libs/singular/decl.pxd
@@ -1845,7 +1888,7 @@ index b02b53a..e06566e 100644
-
-
diff --git a/src/sage/libs/singular/singular.pyx b/src/sage/libs/singular/singular.pyx
-index 7245090..c83c5ea 100644
+index 7245090..7495325 100644
--- a/src/sage/libs/singular/singular.pyx
+++ b/src/sage/libs/singular/singular.pyx
@@ -5,12 +5,14 @@ AUTHOR:
@@ -2491,7 +2534,7 @@ index 7245090..c83c5ea 100644
cdef init_libsingular():
"""
-@@ -712,18 +761,25 @@ cdef init_libsingular():
+@@ -712,18 +761,26 @@ cdef init_libsingular():
cdef void *handle = NULL
@@ -2505,6 +2548,7 @@ index 7245090..c83c5ea 100644
- print(err)
- break
+ import os
++ from sage.env import SAGE_LOCAL
+ UNAME = os.uname()[0]
+ if UNAME[:6] == "CYGWIN":
+ extension = "dll"
@@ -2514,7 +2558,7 @@ index 7245090..c83c5ea 100644
+ extension = "so"
+
+ # library name changed from libsingular to libSingular btw 3.x and 4.x
-+ lib = os.environ['SAGE_LOCAL']+"/lib/libSingular."+extension
++ lib = SAGE_LOCAL+"/lib/libSingular."+extension
+
+ if not os.path.exists(lib):
+ raise ImportError("cannot locate Singular library ({})".format(lib))
@@ -2528,7 +2572,7 @@ index 7245090..c83c5ea 100644
# load SINGULAR
siInit(lib)
-@@ -737,9 +793,7 @@ cdef init_libsingular():
+@@ -737,9 +794,7 @@ cdef init_libsingular():
_saved_options = (int(singular_options), 0, 0)
_saved_verbose_options = int(singular_verbose_options)
@@ -2545,13 +2589,13 @@ index 2348c4b..8abb91c 100644
+++ b/src/sage/misc/cython.py
@@ -310,7 +310,7 @@ def cython(filename, verbose=False, compile_message=False,
sage: code = [
- ... "#clang C++",
- ... "#cinclude %s/include/singular %s/include/factory"%(SAGE_LOCAL, SAGE_LOCAL),
-- ... "#clib m readline singular givaro ntl gmpxx gmp",
-+ ... "#clib m readline Singular givaro ntl gmpxx gmp",
- ... "from sage.rings.polynomial.multi_polynomial_libsingular cimport MPolynomial_libsingular",
- ... "from sage.libs.singular.polynomial cimport singular_polynomial_pow",
- ... "def test(MPolynomial_libsingular p):",
+ ....: "#clang C++",
+ ....: "#cinclude %s/include/singular %s/include/factory"%(SAGE_LOCAL, SAGE_LOCAL),
+- ....: "#clib m readline singular givaro ntl gmpxx gmp",
++ ....: "#clib m readline Singular givaro ntl gmpxx gmp",
+ ....: "from sage.rings.polynomial.multi_polynomial_libsingular cimport MPolynomial_libsingular",
+ ....: "from sage.libs.singular.polynomial cimport singular_polynomial_pow",
+ ....: "def test(MPolynomial_libsingular p):",
diff --git a/src/sage/rings/multi_power_series_ring_element.py b/src/sage/rings/multi_power_series_ring_element.py
index 6388859..142f38b 100644
--- a/src/sage/rings/multi_power_series_ring_element.py
@@ -3308,7 +3352,7 @@ index d4ff6fd..3abece4 100644
To produce a dense polynomial, pick ``terms=Infinity``::
diff --git a/src/sage/rings/polynomial/pbori.pyx b/src/sage/rings/polynomial/pbori.pyx
-index 4f2ab18..bd7fb83 100644
+index 54e00d9..13b6cdb 100644
--- a/src/sage/rings/polynomial/pbori.pyx
+++ b/src/sage/rings/polynomial/pbori.pyx
@@ -1370,6 +1370,7 @@ cdef class BooleanPolynomialRing(MPolynomialRing_generic):
@@ -3610,11 +3654,49 @@ index 20a1a2d..8e59d6d 100644
// characteristic : 2
// number of vars : 2
// block 1 : ordering dp
+diff --git a/src/sage/schemes/curves/affine_curve.py b/src/sage/schemes/curves/affine_curve.py
+index 40235a1..72c520d 100644
+--- a/src/sage/schemes/curves/affine_curve.py
++++ b/src/sage/schemes/curves/affine_curve.py
+@@ -729,9 +729,9 @@ class AffineCurve(Curve_generic, AlgebraicScheme_subscheme_affine):
+ (Affine Plane Curve over Number Field in a0 with defining polynomial y^4 - 4*y^2 + 16 defined by
+ 24*x^2*ss1^3 + 24*ss1^3 + (a0^3 - 8*a0),
+ Affine Plane Curve over Number Field in a0 with defining polynomial y^4 - 4*y^2 + 16 defined by
+- 24*s1^2*ss0 + (a0^3 - 8*a0)*ss0^2 + (6*a0^3)*s1,
++ 24*s1^2*ss0 + (a0^3 - 8*a0)*ss0^2 + (-6*a0^3)*s1,
+ Affine Plane Curve over Number Field in a0 with defining polynomial y^4 - 4*y^2 + 16 defined by
+- 8*y^2*s0^4 + (-4*a0^3)*y*s0^3 - 32*s0^2 + (a0^3 - 8*a0)*y)
++ 8*y^2*s0^4 + (4*a0^3)*y*s0^3 - 32*s0^2 + (a0^3 - 8*a0)*y)
+
+ ::
+
+@@ -1471,7 +1471,7 @@ class AffinePlaneCurve(AffineCurve):
+ To: Affine Plane Curve over Number Field in a with defining
+ polynomial a^2 + 7 defined by x^2 + y^2 + 7
+ Defn: Defined on coordinates by sending (t) to
+- (((7*a)*t^2 + (a))/(-7*t^2 + 1), (-14*t)/(-7*t^2 + 1))
++ ((-7*t^2 + 7)/((-a)*t^2 + (-a)), 14*t/((-a)*t^2 + (-a)))
+ """
+ para = self.projective_closure(i=0).rational_parameterization().defining_polynomials()
+ # these polynomials are homogeneous in two indeterminants, so dehomogenize wrt one of the variables
+diff --git a/src/sage/schemes/curves/projective_curve.py b/src/sage/schemes/curves/projective_curve.py
+index f666231..e62a177 100644
+--- a/src/sage/schemes/curves/projective_curve.py
++++ b/src/sage/schemes/curves/projective_curve.py
+@@ -1537,7 +1537,7 @@ class ProjectivePlaneCurve(ProjectiveCurve):
+ To: Projective Plane Curve over Number Field in a with defining
+ polynomial a^2 + 1 defined by x^2 + y^2 + z^2
+ Defn: Defined on coordinates by sending (s : t) to
+- (s^2 - t^2 : (a)*s^2 + (a)*t^2 : -2*s*t)
++ ((-a)*s^2 + (-a)*t^2 : s^2 - t^2 : 2*s*t)
+ """
+ if self.genus() != 0:
+ raise TypeError("this curve must have geometric genus zero")
diff --git a/src/sage/structure/element.pyx b/src/sage/structure/element.pyx
-index e3114f4..839151f 100644
+index 6eaf3ec..1cc469c 100644
--- a/src/sage/structure/element.pyx
+++ b/src/sage/structure/element.pyx
-@@ -1781,15 +1781,14 @@ cdef class RingElement(ModuleElement):
+@@ -2391,15 +2391,14 @@ cdef class RingElement(ModuleElement):
...
OverflowError: Exponent overflow (2147483648).
@@ -3636,7 +3718,7 @@ index e3114f4..839151f 100644
"""
if dummy is not None:
diff --git a/src/sage/tests/french_book/mpoly.py b/src/sage/tests/french_book/mpoly.py
-index e12740c..82b2988 100644
+index 430b9a3..19975ac 100644
--- a/src/sage/tests/french_book/mpoly.py
+++ b/src/sage/tests/french_book/mpoly.py
@@ -163,7 +163,7 @@ Sage example in ./mpoly.tex, line 432::
@@ -3647,4 +3729,3 @@ index e12740c..82b2988 100644
+ [z^17 - 1, -2*z^10 + y, -3/4*y^2 + x]
Sage example in ./mpoly.tex, line 534::
-
diff --git a/libre/sagemath/test-optional.patch b/libre/sagemath/test-optional.patch
index 385f0bbe9..1918cbe5d 100644
--- a/libre/sagemath/test-optional.patch
+++ b/libre/sagemath/test-optional.patch
@@ -1,11 +1,25 @@
---- src/sage/doctest/control.py.orig 2015-10-31 09:40:55.173671531 +0100
-+++ src/sage/doctest/control.py 2015-10-31 09:40:05.370125436 +0100
-@@ -253,7 +253,7 @@
- if 'optional' in options.optional:
- options.optional.discard('optional')
- from sage.misc.package import package_versions
-- optional_pkgs = package_versions("optional", local=True)
-+ optional_pkgs = {}
- for pkg, versions in optional_pkgs.items():
- if versions[0] == versions[1]:
- options.optional.add(pkg)
+--- src/sage/doctest/control.py.orig 2016-10-20 19:39:53.714618246 +0200
++++ src/sage/doctest/control.py 2016-10-20 19:40:15.158049920 +0200
+@@ -307,22 +307,6 @@
+ if "all" in options.optional:
+ # Special case to run all optional tests
+ options.optional = True
+- else:
+- # We replace the 'optional' tag by all optional
+- # packages for which the installed version matches the
+- # latest available version (this implies in particular
+- # that the package is actually installed).
+- if 'optional' in options.optional:
+- options.optional.discard('optional')
+- from sage.misc.package import list_packages
+- for pkg in list_packages('optional', local=True).values():
+- if pkg['installed_version'] == pkg['remote_version']:
+- options.optional.add(pkg['name'])
+-
+- # Check that all tags are valid
+- for o in options.optional:
+- if not optionaltag_regex.search(o):
+- raise ValueError('invalid optional tag {!r}'.format(o))
+
+ self.options = options
+ self.files = args