From 8050166f82f5be2f6a8107149f0c9964d26c600d Mon Sep 17 00:00:00 2001 From: André Fabian Silva Delgado Date: Wed, 18 May 2016 15:29:17 -0300 Subject: sagemath-7.2-2.parabola1: updating version --- libre/sagemath/linbox-1.4.patch | 470 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 470 insertions(+) create mode 100644 libre/sagemath/linbox-1.4.patch (limited to 'libre/sagemath/linbox-1.4.patch') diff --git a/libre/sagemath/linbox-1.4.patch b/libre/sagemath/linbox-1.4.patch new file mode 100644 index 000000000..5897df763 --- /dev/null +++ b/libre/sagemath/linbox-1.4.patch @@ -0,0 +1,470 @@ +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, + ) + + ######################################################### +@@ -85,12 +112,6 @@ except ValueError: + singular_libs = ['singular', 'flint', 'ntl', 'gmpxx', 'gmp', 'readline', 'm'] + + ######################################################### +-### Givaro flags +-######################################################### +- +-givaro_extra_compile_args =['-D__STDC_LIMIT_MACROS'] +- +-######################################################### + ### Library order + ######################################################### + +@@ -105,8 +126,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", + "polybori", +@@ -593,13 +613,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'], +@@ -645,9 +662,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'], +@@ -667,8 +683,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'], +@@ -923,19 +938,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 = ['-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 = ["-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']), +@@ -1374,8 +1387,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'], +@@ -1395,8 +1407,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++'), + + ################################ + ## +@@ -1548,8 +1559,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 >": ++cdef extern from "linbox/matrix/dense-matrix.h" namespace "LinBox": ++ cdef cppclass BlasMatrixDouble "LinBox::DenseMatrix >": + 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 >": ++ cdef cppclass BlasMatrixFloat "LinBox::DenseMatrix >": + 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 >": ++ cdef cppclass EchelonFormDomainDouble "LinBox::EchelonFormDomain >": + EchelonFormDomainDouble(ModDoubleField) + int rowReducedEchelon(BlasMatrixDouble, BlasMatrixDouble) + +- cdef cppclass EchelonFormDomainFloat "LinBox::EchelonFormDomain >": ++ cdef cppclass EchelonFormDomainFloat "LinBox::EchelonFormDomain >": + 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::Element": ++ cdef cppclass ModDoubleFieldElement "Givaro::Modular::Element": + pass + +- cdef cppclass ModDoubleField "LinBox::Modular": ++ cdef cppclass ModDoubleField "Givaro::Modular": + 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::Element": ++ cdef cppclass ModFloatFieldElement "Givaro::Modular::Element": + pass + +- cdef cppclass ModFloatField "LinBox::Modular": ++ cdef cppclass ModFloatField "Givaro::Modular": + 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 +@@ -22,6 +22,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 +@@ -155,7 +156,7 @@ cdef FFgivE si2sa_GFqGivaro(number *n, ring *_ring, Cache_givaro cache): + order = cache.objectptr.cardinality() - 1 + + while z: +- c = cache.objectptr.initi(c, napGetCoeff(z)) ++ c = cache.objectptr.initi(c, 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": +- void (* push_back)(int elem) +- +- ctypedef struct constintvec "const std::vector" +- +- intvec intvec_factory "std::vector"(int len) +- +-cdef extern from "givaro/givgfq.h": +- ++cdef extern from "givaro/gfq.h": + ctypedef struct GivaroGfq "Givaro::GFqDom": + #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::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 +@@ -58,8 +58,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 +@@ -373,18 +374,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())) +@@ -394,8 +393,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 +@@ -434,8 +433,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 +@@ -572,19 +571,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 +@@ -269,7 +269,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 + +@@ -343,7 +344,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 + -- cgit v1.2.3-54-g00ecf