diff options
Diffstat (limited to 'libre/sagemath')
-rw-r--r-- | libre/sagemath/PKGBUILD | 73 | ||||
-rw-r--r-- | libre/sagemath/anal.h | 65 | ||||
-rw-r--r-- | libre/sagemath/clean.patch | 24 | ||||
-rw-r--r-- | libre/sagemath/env.patch | 75 | ||||
-rw-r--r-- | libre/sagemath/is-package-installed.patch | 80 | ||||
-rw-r--r-- | libre/sagemath/jupyter-path.patch | 9 | ||||
-rw-r--r-- | libre/sagemath/linbox-1.4.patch | 470 | ||||
-rw-r--r-- | libre/sagemath/package.patch | 37 | ||||
-rw-r--r-- | libre/sagemath/paths.patch | 13 | ||||
-rw-r--r-- | libre/sagemath/sagemath-ipython5.patch | 548 | ||||
-rw-r--r-- | libre/sagemath/sagemath-singular4.patch | 137 | ||||
-rw-r--r-- | libre/sagemath/test-optional.patch | 36 |
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 |