Date: Sunday, January 30, 2022 @ 17:02:43 Author: arojas Revision: 1120402
Update to 9.5 Modified: sagemath/trunk/PKGBUILD sagemath/trunk/latte-count.patch sagemath/trunk/sagemath-lrcalc2.patch sagemath/trunk/sagemath-optional-packages.patch sagemath/trunk/test-optional.patch Deleted: sagemath/trunk/sagemath-lcalc2.patch sagemath/trunk/sagemath-mpmath.patch sagemath/trunk/sagemath-singular-4.2.1.p1.patch ----------------------------------+ PKGBUILD | 71 ++--- latte-count.patch | 22 - sagemath-lcalc2.patch | 507 ------------------------------------- sagemath-lrcalc2.patch | 208 +++++++++++---- sagemath-mpmath.patch | 14 - sagemath-optional-packages.patch | 20 - sagemath-singular-4.2.1.p1.patch | 266 ------------------- test-optional.patch | 28 -- 8 files changed, 223 insertions(+), 913 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2022-01-30 16:49:28 UTC (rev 1120401) +++ PKGBUILD 2022-01-30 17:02:43 UTC (rev 1120402) @@ -6,36 +6,47 @@ # Contributor: Stefan Husmann <stefan-husmann at t-online dot de> pkgname=sagemath -pkgver=9.4 -pkgrel=10 +pkgver=9.5 +pkgrel=1 pkgdesc='Open Source Mathematics Software, free alternative to Magma, Maple, Mathematica, and Matlab' arch=(x86_64) url='http://www.sagemath.org' license=(GPL) -depends=(palp brial cliquer maxima-ecl gfan sympow nauty python-rpy2 python-fpylll python-psutil python-cypari2 +depends=(palp brial cliquer maxima-ecl gfan sympow nauty python-rpy2 python-fpylll python-cypari2 python-matplotlib python-scipy python-sympy python-networkx python-pplpy python-sphinx python-ipywidgets python-memory-allocator - gap flintqs lcalc lrcalc arb eclib zn_poly gd python-cvxopt pynac linbox m4rie pari-galdata pari-seadata-small planarity rankwidth tachyon + gap flintqs lcalc lrcalc arb eclib zn_poly gd python-cvxopt singular linbox m4rie pari-galdata pari-seadata-small planarity rankwidth tachyon sage-data-combinatorial_designs sage-data-elliptic_curves sage-data-graphs sage-data-polytopes_db sage-data-conway_polynomials - iml giac libhomfly libbraiding symmetrica threejs-sage) -optdepends=('cython: to compile cython code' 'python-pkgconfig: to compile cython code' - 'jmol: alternative 3D plot engine' 'jupyter-jsmol: alternative 3D plot engine in the Jupyter notebook' - 'sagemath-doc: HTML documentation' 'python-igraph: igraph backend for graph theory' + iml giac libhomfly libbraiding symmetrica threejs-sage python-primecountpy) +optdepends=('cython: to compile cython code' + 'python-pkgconfig: to compile cython code' + 'jmol: alternative 3D plot engine' + 'jupyter-jsmol: alternative 3D plot engine in the Jupyter notebook' + 'sagemath-doc: HTML documentation' + 'python-igraph: igraph backend for graph theory' + 'bliss: bliss backend for graph theory' 'sage-numerical-backends-coin: COIN mixed integer linear programming backend' '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' - 'bliss: bliss backend for graph theory' - 'ffmpeg: to export animations to video' 'imagemagick: to show animations' + 'buckygen: for generating fullerene graphs' + 'plantri: for generating some classes of graphs' + 'benzene: for generating fusenes and benzenoids' + 'ffmpeg: to export animations to video' + 'imagemagick: to show animations' 'coxeter: Coxeter groups implementation' 'rubiks: Rubiks cube algorithms' 'lrs: Algorithms for linear reverse search used in game theory and for computing volume of polytopes' 'python-pynormaliz: Normaliz backend for polyhedral computations' - 'latte-integrale: integral point count in polyhedra' 'python-jupymake: polymake backend for polyhedral computations' - 'shared_meataxe: faster matrix arithmetic over finite fields' 'openblas: faster linear algebra' - 'sirocco: for computing the fundamental group of the complement of a plane curve' 'primecount: faster prime_pi implementation' - 'dot2tex: for displaying some diagrams' 'cryptominisat5: SAT solver' 'python-pycosat: picosat SAT solver' - 'python-pip: to install optional packages with sage -pip' 'sage-notebook-exporter: convert flask notebooks to Jupyter' + 'latte-integrale: integral point count in polyhedra' + 'python-jupymake: polymake backend for polyhedral computations' + 'shared_meataxe: faster matrix arithmetic over finite fields' + 'openblas: faster linear algebra' + 'sirocco: for computing the fundamental group of the complement of a plane curve' + 'dot2tex: for displaying some diagrams' + 'cryptominisat5: SAT solver' + 'python-pycosat: picosat SAT solver' + 'python-pip: to install optional packages with sage -pip' + 'sage-notebook-exporter: convert flask notebooks to Jupyter' 'python-database-knotinfo: interface to the KnotInfo and LinkInfo databases') -makedepends=(cython boost ratpoints python-jinja sirocco mcqd coxeter bliss tdlib python-pkgconfig shared_meataxe primecount) +makedepends=(cython boost ratpoints python-jinja sirocco mcqd coxeter bliss tdlib python-pkgconfig shared_meataxe) conflicts=(sagemath-jupyter) replaces=(sagemath-jupyter) source=(https://github.com/sagemath/sage/archive/$pkgver/$pkgname-$pkgver.tar.gz @@ -43,19 +54,13 @@ latte-count.patch test-optional.patch sagemath-lrcalc2.patch - sagemath-lcalc2.patch - sagemath-mpmath.patch - sagemath-singular-4.2.1.p1.patch sagemath-linbox-1.7.patch sagemath-bliss-0.77.patch) -sha256sums=('47190f37e679c2483dadc13112595bacb399dfe4c4a0cde18d3627f5b2db0ea5' - '665fc76fa57b1c50f122a8d1874e187afc97a9120921706176b63da3d9d30651' - '88e944f23c3b2391dc2e9f9be8e1131152d837dc8c829dfc714663869a272e81' - 'af984186f852d2847d770a18fb6822296c50a652dbf55a1ed59d27517c3d3ee4' - '240ac4c29d96d56407a20e1b7f9846e342a7eb2bb4edd6e5c86b3b5a8ff462f9' - '791b3f2c6e5529b09c3abf2f9703b6cf754d633a7a4177645b70b72ea014135a' - 'be1c871fe6306a053169dce3edbb8bc78a96254ae7c83b2b741257ef3445b6eb' - 'e3cdfe730d0b0f422fe837e465ecde3419b16de50bef3dd2b674f275f528ed97' +sha256sums=('8d70a3b26080802c5b2e33dda4c23795d494d8216a0c2ecfcd608ebab0e64ff6' + 'eee5fa15d8c7be7e009166dbde3ea24bb10d7793dc12880516f278f86b1a6694' + '2bf9e2b44c20c5bec9d90782f59a87374a3c726241179191e9589179e1550a03' + '9d042070df3dfd53a1248659677798da888f733548eda91a6d5169c7aa1907e1' + 'c8a1fb98f454dfd52101373e478e396d83a7d55c2c658b1d246a86603cbb15e8' 'eacea27b214d32cb886a75695153dfc36b5bad2fd2517e8e4eee18e74220e9e3' '49ede468b8e1e7b8d7a390aab9ff1a6e899a0c5e487632cbf76902d80c637505') @@ -65,12 +70,6 @@ # Upstream patches # Replace lrcalc.pyx with a wrapper over lrcalc's python bindings https://trac.sagemath.org/ticket/31355 patch -p1 -i ../sagemath-lrcalc2.patch -# Port to lcalc 2 https://trac.sagemath.org/ticket/32037 - patch -p1 -i ../sagemath-lcalc2.patch -# Make it work with vanilla mpmath https://trac.sagemath.org/ticket/32799 - patch -p1 -i ../sagemath-mpmath.patch -# Fix build with singular 4.2.1.p1 https://trac.sagemath.org/ticket/32907 - patch -p1 -i ../sagemath-singular-4.2.1.p1.patch # Fix build with linbox 1.7 https://trac.sagemath.org/ticket/32959 patch -p1 -i ../sagemath-linbox-1.7.patch # Fix build with bliss 0.77 https://trac.sagemath.org/ticket/33010 @@ -92,6 +91,7 @@ cd sage-$pkgver/pkgs/sagemath-standard export SAGE_NUM_THREADS=10 + export PYTHONPATH="$PWD"/../sage-setup python setup.py build } @@ -100,9 +100,6 @@ python setup.py install --root="$pkgdir" --optimize=1 -# Remove sage_setup - rm -r "$pkgdir"/usr/lib/python*/site-packages/sage_setup - # fix symlinks to assets _pythonpath=`python -c "from sysconfig import get_path; print(get_path('platlib'))"` for _i in $(ls "$srcdir"/sage-$pkgver/src/sage/ext_data/notebook-ipython); do Modified: latte-count.patch =================================================================== --- latte-count.patch 2022-01-30 16:49:28 UTC (rev 1120401) +++ latte-count.patch 2022-01-30 17:02:43 UTC (rev 1120402) @@ -2,7 +2,7 @@ index 268af9db0d..70d41dfa30 100644 --- a/src/sage/geometry/polyhedron/base_ZZ.py +++ b/src/sage/geometry/polyhedron/base_ZZ.py -@@ -193,7 +193,7 @@ class Polyhedron_ZZ(Polyhedron_base): +@@ -194,7 +194,7 @@ class Polyhedron_ZZ(Polyhedron_base): sage: p = P._ehrhart_polynomial_latte(maxdet=5, verbose=True) # optional - latte_int This is LattE integrale ... ... @@ -11,7 +11,7 @@ ... sage: p # optional - latte_int 1/2*t^2 + 3/2*t + 1 -@@ -201,7 +201,7 @@ class Polyhedron_ZZ(Polyhedron_base): +@@ -202,7 +202,7 @@ class Polyhedron_ZZ(Polyhedron_base): sage: p = P._ehrhart_polynomial_latte(dual=True, verbose=True) # optional - latte_int This is LattE integrale ... ... @@ -20,7 +20,7 @@ ... sage: p # optional - latte_int 1/2*t^2 + 3/2*t + 1 -@@ -209,7 +209,7 @@ class Polyhedron_ZZ(Polyhedron_base): +@@ -210,7 +210,7 @@ class Polyhedron_ZZ(Polyhedron_base): sage: p = P._ehrhart_polynomial_latte(irrational_primal=True, verbose=True) # optional - latte_int This is LattE integrale ... ... @@ -29,7 +29,7 @@ ... sage: p # optional - latte_int 1/2*t^2 + 3/2*t + 1 -@@ -217,7 +217,7 @@ class Polyhedron_ZZ(Polyhedron_base): +@@ -218,7 +218,7 @@ class Polyhedron_ZZ(Polyhedron_base): sage: p = P._ehrhart_polynomial_latte(irrational_all_primal=True, verbose=True) # optional - latte_int This is LattE integrale ... ... @@ -38,7 +38,7 @@ ... sage: p # optional - latte_int 1/2*t^2 + 3/2*t + 1 -@@ -229,7 +229,7 @@ class Polyhedron_ZZ(Polyhedron_base): +@@ -230,7 +230,7 @@ class Polyhedron_ZZ(Polyhedron_base): ... RuntimeError: LattE integrale program failed (exit code 1): ... @@ -73,14 +73,10 @@ index 63d227fd35..040a5cf1f9 100644 --- a/src/sage/features/latte.py +++ b/src/sage/features/latte.py -@@ -9,10 +9,10 @@ from . import Executable, Feature, FeatureTestResult - - class Latte_count(Executable): - r""" -- Feature for the executable ``count`` from the LattE suite. -+ Feature for the executable ``latte-count`` from the LattE suite. - """ - def __init__(self): +@@ -21,7 +21,7 @@ from . import Executable, Feature, FeatureTestResult + sage: isinstance(Latte_count(), Latte_count) + True + """ - Executable.__init__(self, "count", executable="count", + Executable.__init__(self, "latte-count", executable="latte-count", spkg="latte_int", Deleted: sagemath-lcalc2.patch =================================================================== --- sagemath-lcalc2.patch 2022-01-30 16:49:28 UTC (rev 1120401) +++ sagemath-lcalc2.patch 2022-01-30 17:02:43 UTC (rev 1120402) @@ -1,507 +0,0 @@ -diff --git a/src/sage/lfunctions/lcalc.py b/src/sage/lfunctions/lcalc.py -index aabbd47..6efa5fe 100644 ---- a/src/sage/lfunctions/lcalc.py -+++ b/src/sage/lfunctions/lcalc.py -@@ -225,19 +225,54 @@ class LCalc(SageObject): - EXAMPLES:: - - sage: I = CC.0 -- sage: lcalc.values_along_line(0.5, 0.5+20*I, 5) -- [(0.500000000, -1.46035451), (0.500000000 + 4.00000000*I, 0.606783764 + 0.0911121400*I), (0.500000000 + 8.00000000*I, 1.24161511 + 0.360047588*I), (0.500000000 + 12.0000000*I, 1.01593665 - 0.745112472*I), (0.500000000 + 16.0000000*I, 0.938545408 + 1.21658782*I)] -+ sage: values = lcalc.values_along_line(0.5, 0.5+20*I, 5) -+ sage: values[0][0] # abs tol 1e-8 -+ 0.5 -+ sage: values[0][1] # abs tol 1e-8 -+ -1.46035451 + 0.0*I -+ sage: values[1][0] # abs tol 1e-8 -+ 0.5 + 4.0*I -+ sage: values[1][1] # abs tol 1e-8 -+ 0.606783764 + 0.0911121400*I -+ sage: values[2][0] # abs tol 1e-8 -+ 0.5 + 8.0*I -+ sage: values[2][1] # abs tol 1e-8 -+ 1.24161511 + 0.360047588*I -+ sage: values[3][0] # abs tol 1e-8 -+ 0.5 + 12.0*I -+ sage: values[3][1] # abs tol 1e-8 -+ 1.01593665 - 0.745112472*I -+ sage: values[4][0] # abs tol 1e-8 -+ 0.5 + 16.0*I -+ sage: values[4][1] # abs tol 1e-8 -+ 0.938545408 + 1.21658782*I - - Sometimes warnings are printed (by lcalc) when this command is - run:: - - sage: E = EllipticCurve('389a') -- sage: E.lseries().values_along_line(0.5, 3, 5) -- [(0.000000000, 0.209951303), -- (0.500000000, -...e-16), -- (1.00000000, 0.133768433), -- (1.50000000, 0.360092864), -- (2.00000000, 0.552975867)] -+ sage: values = E.lseries().values_along_line(0.5, 3, 5) -+ sage: values[0][0] # abs tol 1e-8 -+ 0.0 -+ sage: values[0][1] # abs tol 1e-8 -+ 0.209951303 + 0.0*I -+ sage: values[1][0] # abs tol 1e-8 -+ 0.5 -+ sage: values[1][1] # abs tol 1e-8 -+ 0.0 + 0.0*I -+ sage: values[2][0] # abs tol 1e-8 -+ 1.0 -+ sage: values[2][1] # abs tol 1e-8 -+ 0.133768433 - 0.0*I -+ sage: values[3][0] # abs tol 1e-8 -+ 1.5 -+ sage: values[3][1] # abs tol 1e-8 -+ 0.360092864 - 0.0*I -+ sage: values[4][0] # abs tol 1e-8 -+ 2.0 -+ sage: values[4][1] # abs tol 1e-8 -+ 0.552975867 + 0.0*I -+ - """ - L = self._compute_L(L) - CC = sage.rings.all.ComplexField(prec) -@@ -281,8 +316,31 @@ class LCalc(SageObject): - - EXAMPLES:: - -- sage: lcalc.twist_values(0.5, -10, 10) -- [(-8, 1.10042141), (-7, 1.14658567), (-4, 0.667691457), (-3, 0.480867558), (5, 0.231750947), (8, 0.373691713)] -+ sage: values = lcalc.twist_values(0.5, -10, 10) -+ sage: values[0][0] -+ -8 -+ sage: values[0][1] # abs tol 1e-8 -+ 1.10042141 + 0.0*I -+ sage: values[1][0] -+ -7 -+ sage: values[1][1] # abs tol 1e-8 -+ 1.14658567 + 0.0*I -+ sage: values[2][0] -+ -4 -+ sage: values[2][1] # abs tol 1e-8 -+ 0.667691457 + 0.0*I -+ sage: values[3][0] -+ -3 -+ sage: values[3][1] # abs tol 1e-8 -+ 0.480867558 + 0.0*I -+ sage: values[4][0] -+ 5 -+ sage: values[4][1] # abs tol 1e-8 -+ 0.231750947 + 0.0*I -+ sage: values[5][0] -+ 8 -+ sage: values[5][1] # abs tol 1e-8 -+ 0.373691713 + 0.0*I - """ - L = self._compute_L(L) - CC = sage.rings.all.ComplexField(prec) -diff --git a/src/sage/lfunctions/zero_sums.pyx b/src/sage/lfunctions/zero_sums.pyx -index 225fe7d..8b0e566 100644 ---- a/src/sage/lfunctions/zero_sums.pyx -+++ b/src/sage/lfunctions/zero_sums.pyx -@@ -829,8 +829,11 @@ cdef class LFunctionZeroSum_abstract(SageObject): - EXAMPLES:: - - sage: E = EllipticCurve("11a") -- sage: E.lseries().zeros(2) -- [6.36261389, 8.60353962] -+ sage: zeros = E.lseries().zeros(2) -+ sage: zeros[0] # abs tol 1e-8 -+ 6.36261389 -+ sage: zeros[1] # abs tol 1e-8 -+ 8.60353962 - - E is a rank zero curve; the lowest zero has imaginary part ~6.36. The - zero sum with tau=0 indicates that there are no zeros at the central -diff --git a/src/sage/libs/lcalc/lcalc_Lfunction.pxd b/src/sage/libs/lcalc/lcalc_Lfunction.pxd -index d1dbb5d..5edf084 100644 ---- a/src/sage/libs/lcalc/lcalc_Lfunction.pxd -+++ b/src/sage/libs/lcalc/lcalc_Lfunction.pxd -@@ -21,7 +21,7 @@ cdef extern from "lcalc_sage.h": - int (* compute_rank) () - double (* N) (double T) - void (* find_zeros_v)(double T1, double T2, double stepsize, doublevec result ) -- void (*find_zeros_via_N_v)(long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec result) -+ int (*find_zeros)(long count, long start, double max_refine, int rank, const char* message_stamp, doublevec* result) - void (*print_data_L)() - - #Constructor and destructor -@@ -38,7 +38,7 @@ cdef extern from "lcalc_sage.h": - double (* N) (double T) - double *dirichlet_coefficient - void (* find_zeros_v)(double T1, double T2, double stepsize, doublevec result ) -- void (*find_zeros_via_N_v)(long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec result) -+ int (*find_zeros)(long count, long start, double max_refine, int rank, const char* message_stamp, doublevec* result) - void (*print_data_L)() - - #Constructor and destructor -@@ -54,7 +54,7 @@ cdef extern from "lcalc_sage.h": - int (* compute_rank) () - double (* N) (double T) - void (* find_zeros_v)(double T1, double T2, double stepsize, doublevec result ) -- void (*find_zeros_via_N_v)(long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec result) -+ int (*find_zeros)(long count, long start, double max_refine, int rank, const char* message_stamp, doublevec* result) - void (*print_data_L)() - - #Constructor and destructor -@@ -70,7 +70,7 @@ cdef extern from "lcalc_sage.h": - int (* compute_rank) () - double (* N) (double T) - void (* find_zeros_v)(double T1, double T2, double stepsize, doublevec result ) -- void (*find_zeros_via_N_v)(long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec result)#puts result in vector<double> result -+ int (*find_zeros)(long count, long start, double max_refine, int rank, const char* message_stamp, doublevec* result) - void (*find_zeros_via_N)(long count,int do_negative,double max_refine, int rank, int test_explicit_formula, char *filename) #puts result in filename - - #Constructor and destructor -@@ -111,7 +111,7 @@ cdef class Lfunction: - #strange bug, replacing Double with double gives me a compile error - cdef Double __typedN(self, double T) - cdef void __find_zeros_v(self, double T1, double T2, double stepsize,doublevec *result) -- cdef void __find_zeros_via_N_v(self, long count,int do_negative,double max_refine, int rank, int test_explicit_formula,doublevec *result) -+ cdef int __find_zeros(self, long count, long start, double max_refine, int rank, const char* message_stamp, doublevec* result) - - cdef str _repr - -diff --git a/src/sage/libs/lcalc/lcalc_Lfunction.pyx b/src/sage/libs/lcalc/lcalc_Lfunction.pyx -index 7e54d7e..88a6e13 100644 ---- a/src/sage/libs/lcalc/lcalc_Lfunction.pyx -+++ b/src/sage/libs/lcalc/lcalc_Lfunction.pyx -@@ -143,29 +143,29 @@ cdef class Lfunction: - sage: chi = DirichletGroup(5)[2] #This is a quadratic character - sage: from sage.libs.lcalc.lcalc_Lfunction import * - sage: L=Lfunction_from_character(chi, type="int") -- sage: L.value(.5) # abs tol 3e-15 -+ sage: L.value(.5) # abs tol 1e-8 - 0.231750947504016 + 5.75329642226136e-18*I -- sage: L.value(.2+.4*I) -- 0.102558603193... + 0.190840777924...*I -+ sage: L.value(.2+.4*I) # abs tol 1e-8 -+ 0.102558603193 + 0.190840777924*I - - sage: L=Lfunction_from_character(chi, type="double") -- sage: L.value(.6) # abs tol 3e-15 -+ sage: L.value(.6) # abs tol 1e-8 - 0.274633355856345 + 6.59869267328199e-18*I -- sage: L.value(.6+I) -- 0.362258705721... + 0.433888250620...*I -+ sage: L.value(.6+I) # abs tol 1e-8 -+ 0.362258705721 + 0.433888250620*I - - sage: chi = DirichletGroup(5)[1] - sage: L=Lfunction_from_character(chi, type="complex") -- sage: L.value(.5) -- 0.763747880117... + 0.216964767518...*I -- sage: L.value(.6+5*I) -- 0.702723260619... - 1.10178575243...*I -+ sage: L.value(.5) # abs tol 1e-8 -+ 0.763747880117 + 0.216964767518*I -+ sage: L.value(.6+5*I) # abs tol 1e-8 -+ 0.702723260619 - 1.10178575243*I - - sage: L=Lfunction_Zeta() -- sage: L.value(.5) -- -1.46035450880... -- sage: L.value(.4+.5*I) -- -0.450728958517... - 0.780511403019...*I -+ sage: L.value(.5) # abs tol 1e-8 -+ -1.46035450880 + 0.0*I -+ sage: L.value(.4+.5*I) # abs tol 1e-8 -+ -0.450728958517 - 0.780511403019*I - """ - cdef ComplexNumber complexified_s = CCC(s) - cdef c_Complex z = new_Complex(mpfr_get_d(complexified_s.__re, MPFR_RNDN), mpfr_get_d(complexified_s.__im, MPFR_RNDN)) -@@ -185,23 +185,21 @@ cdef class Lfunction: - sage: chi = DirichletGroup(5)[2] # Quadratic character - sage: from sage.libs.lcalc.lcalc_Lfunction import * - sage: L = Lfunction_from_character(chi, type="int") -- sage: L.hardy_z_function(0) -- 0.231750947504... -- sage: L.hardy_z_function(.5).imag() # abs tol 1e-15 -+ sage: L.hardy_z_function(0) # abs tol 1e-8 -+ 0.231750947504 + 0.0*I -+ sage: L.hardy_z_function(.5).imag() # abs tol 1e-8 - 1.17253174178320e-17 -- sage: L.hardy_z_function(.4+.3*I) -- 0.2166144222685... - 0.00408187127850...*I - sage: chi = DirichletGroup(5)[1] - sage: L = Lfunction_from_character(chi, type="complex") -- sage: L.hardy_z_function(0) -- 0.793967590477... -- sage: L.hardy_z_function(.5).imag() # abs tol 1e-15 -+ sage: L.hardy_z_function(0) # abs tol 1e-8 -+ 0.793967590477 + 0.0*I -+ sage: L.hardy_z_function(.5).imag() # abs tol 1e-8 - 0.000000000000000 - sage: E = EllipticCurve([-82,0]) - sage: L = Lfunction_from_elliptic_curve(E, number_of_coeffs=40000) -- sage: L.hardy_z_function(2.1) -- -0.00643179176869... -- sage: L.hardy_z_function(2.1).imag() # abs tol 1e-15 -+ sage: L.hardy_z_function(2.1) # abs tol 1e-8 -+ -0.00643179176863296 - 1.47189978221606e-19*I -+ sage: L.hardy_z_function(2.1).imag() # abs tol 1e-8 - -3.93833660115668e-19 - """ - #This takes s -> .5 + I*s -@@ -241,8 +239,8 @@ cdef class Lfunction: - sage: from sage.libs.lcalc.lcalc_Lfunction import * - sage: chi = DirichletGroup(5)[2] #This is a quadratic character - sage: L=Lfunction_from_character(chi, type="complex") -- sage: L.__N(10) -- 3.17043978326... -+ sage: L.__N(10) # abs tol 1e-8 -+ 4.0 - """ - cdef RealNumber real_T=RRR(T) - cdef double double_T = mpfr_get_d(real_T.value, MPFR_RNDN) -@@ -307,18 +305,21 @@ cdef class Lfunction: - return returnvalue - - #The default values are from L.h. See L.h -- def find_zeros_via_N(self, count=0, do_negative=False, max_refine=1025, -- rank=-1, test_explicit_formula=0): -+ def find_zeros_via_N(self, count=0, start=0, max_refine=1025, rank=-1): - """ -- Finds ``count`` number of zeros with positive imaginary part -- starting at real axis. This function also verifies that all -- the zeros have been found. -+ Find ``count`` zeros (in order of increasing magnitude) and output -+ their imaginary parts. This function verifies that no zeros -+ are missed, and that all values output are indeed zeros. -+ -+ If this L-function is self-dual (if its Dirichlet coefficients -+ are real, up to a tolerance of 1e-6), then only the zeros with -+ positive imaginary parts are output. Their conjugates, which -+ are also zeros, are not output. - - INPUT: - - - ``count`` - number of zeros to be found -- - ``do_negative`` - (default: False) False to ignore zeros below the -- real axis. -+ - ``start`` - (default: 0) how many initial zeros to skip - - ``max_refine`` - when some zeros are found to be missing, the step - size used to find zeros is refined. max_refine gives an upper limit - on when lcalc should give up. Use default value unless you know -@@ -326,13 +327,9 @@ cdef class Lfunction: - - ``rank`` - integer (default: -1) analytic rank of the L-function. - If -1 is passed, then we attempt to compute it. (Use default if in - doubt) -- - ``test_explicit_formula`` - integer (default: 0) If nonzero, test -- the explicit formula for additional confidence that all the zeros -- have been found and are accurate. This is still being tested, so -- using the default is recommended. - - OUTPUT: -- -+ - list -- A list of the imaginary parts of the zeros that have been found - - EXAMPLES:: -@@ -349,21 +346,26 @@ cdef class Lfunction: - - sage: chi = DirichletGroup(5)[1] - sage: L=Lfunction_from_character(chi, type="complex") -- sage: L.find_zeros_via_N(3) -- [6.18357819545..., 8.45722917442..., 12.6749464170...] -+ sage: zeros = L.find_zeros_via_N(3) -+ sage: zeros[0] # abs tol 1e-8 -+ -4.13290370521286 -+ sage: zeros[1] # abs tol 1e-8 -+ 6.18357819545086 -+ sage: zeros[2] # abs tol 1e-8 -+ 8.45722917442320 - - sage: L=Lfunction_Zeta() - sage: L.find_zeros_via_N(3) - [14.1347251417..., 21.0220396387..., 25.0108575801...] - """ -- cdef Integer count_I = Integer(count) -- cdef Integer do_negative_I = Integer(do_negative) -- cdef RealNumber max_refine_R = RRR(max_refine) -- cdef Integer rank_I = Integer(rank) -- cdef Integer test_explicit_I = Integer(test_explicit_formula) -+ -+ # This is the default value for message_stamp, but we have to -+ # pass it explicitly since we're passing in the next argument, -+ # our &result pointer. -+ cdef const char* message_stamp = "" - cdef doublevec result - sig_on() -- self.__find_zeros_via_N_v(mpz_get_si(count_I.value), mpz_get_si(do_negative_I.value), mpfr_get_d(max_refine_R.value, MPFR_RNDN), mpz_get_si(rank_I.value), mpz_get_si(test_explicit_I.value), &result) -+ self.__find_zeros(count, start, max_refine, rank, message_stamp, &result) - sig_off() - returnvalue = [] - for i in range(result.size()): -@@ -390,7 +392,7 @@ cdef class Lfunction: - cdef void __find_zeros_v(self,double T1, double T2, double stepsize, doublevec *result): - raise NotImplementedError - -- cdef void __find_zeros_via_N_v(self, long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec *result): -+ cdef int __find_zeros(self, long count, long start, double max_refine, int rank, const char* message_stamp, doublevec *result): - raise NotImplementedError - - ############################################################################## -@@ -486,8 +488,8 @@ cdef class Lfunction_I(Lfunction): - cdef double __typedN(self, double T): - return (<c_Lfunction_I *>self.thisptr).N(T) - -- cdef void __find_zeros_via_N_v(self, long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec *result): -- (<c_Lfunction_I *>self.thisptr).find_zeros_via_N_v(count, do_negative, max_refine, rank, test_explicit_formula, result[0]) -+ cdef int __find_zeros(self, long count, long start, double max_refine, int rank, const char* message_stamp, doublevec *result): -+ (<c_Lfunction_I *>self.thisptr).find_zeros(count, start, max_refine, rank, message_stamp, result) - - # debug tools - def _print_data_to_standard_output(self): -@@ -500,7 +502,7 @@ cdef class Lfunction_I(Lfunction): - sage: from sage.libs.lcalc.lcalc_Lfunction import * - sage: chi = DirichletGroup(5)[2] #This is a quadratic character - sage: L=Lfunction_from_character(chi, type="int") -- sage: L._print_data_to_standard_output() # tol 1e-15 -+ sage: L._print_data_to_standard_output() # tol 1e-8 - ----------------------------------------------- - <BLANKLINE> - Name of L_function: -@@ -624,8 +626,8 @@ cdef class Lfunction_D(Lfunction): - cdef double __typedN(self, double T): - return (<c_Lfunction_D *>self.thisptr).N(T) - -- cdef void __find_zeros_via_N_v(self, long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec *result): -- (<c_Lfunction_D *>self.thisptr).find_zeros_via_N_v(count, do_negative, max_refine, rank, test_explicit_formula, result[0]) -+ cdef int __find_zeros(self, long count, long start,double max_refine, int rank, const char* message_stamp, doublevec *result): -+ (<c_Lfunction_D *>self.thisptr).find_zeros(count, start, max_refine, rank, message_stamp, result) - - # debug tools - def _print_data_to_standard_output(self): -@@ -638,7 +640,7 @@ cdef class Lfunction_D(Lfunction): - sage: from sage.libs.lcalc.lcalc_Lfunction import * - sage: chi = DirichletGroup(5)[2] #This is a quadratic character - sage: L=Lfunction_from_character(chi, type="double") -- sage: L._print_data_to_standard_output() # tol 1e-15 -+ sage: L._print_data_to_standard_output() # tol 1e-8 - ----------------------------------------------- - <BLANKLINE> - Name of L_function: -@@ -769,8 +771,8 @@ cdef class Lfunction_C: - cdef double __typedN(self, double T): - return (<c_Lfunction_C *>self.thisptr).N(T) - -- cdef void __find_zeros_via_N_v(self, long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec *result): -- (<c_Lfunction_C *>self.thisptr).find_zeros_via_N_v(count, do_negative, max_refine, rank, test_explicit_formula, result[0]) -+ cdef int __find_zeros(self, long count, long start, double max_refine, int rank, const char* message_stamp, doublevec *result): -+ (<c_Lfunction_C *>self.thisptr).find_zeros(count, start, max_refine, rank, message_stamp, result) - - # debug tools - def _print_data_to_standard_output(self): -@@ -783,7 +785,7 @@ cdef class Lfunction_C: - sage: from sage.libs.lcalc.lcalc_Lfunction import * - sage: chi = DirichletGroup(5)[1] - sage: L=Lfunction_from_character(chi, type="complex") -- sage: L._print_data_to_standard_output() # tol 1e-15 -+ sage: L._print_data_to_standard_output() # tol 1e-8 - ----------------------------------------------- - <BLANKLINE> - Name of L_function: -@@ -854,8 +856,8 @@ cdef class Lfunction_Zeta(Lfunction): - cdef double __typedN(self, double T): - return (<c_Lfunction_Zeta *>self.thisptr).N(T) - -- cdef void __find_zeros_via_N_v(self, long count,int do_negative,double max_refine, int rank, int test_explicit_formula, doublevec *result): -- (<c_Lfunction_Zeta *>self.thisptr).find_zeros_via_N_v(count, do_negative, max_refine, rank, test_explicit_formula, result[0]) -+ cdef int __find_zeros(self, long count, long start, double max_refine, int rank, const char* message_stamp, doublevec *result): -+ (<c_Lfunction_Zeta *>self.thisptr).find_zeros(count, start, max_refine, rank, message_stamp, result) - - def __dealloc__(self): - """ -@@ -950,10 +952,11 @@ def Lfunction_from_elliptic_curve(E, number_of_coeffs=10000): - sage: L = Lfunction_from_elliptic_curve(EllipticCurve('37')) - sage: L - L-function with real Dirichlet coefficients -- sage: L.value(0.5).abs() < 1e-15 # "noisy" zero on some platforms (see #9615) -+ sage: L.value(0.5).abs() < 1e-8 # "noisy" zero on some platforms (see #9615) - True -- sage: L.value(0.5, derivative=1) -- 0.305999... -+ sage: L.value(0.5, derivative=1) # abs tol 1e-6 -+ 0.305999773835200 + 0.0*I -+ - """ - import sage.libs.lcalc.lcalc_Lfunction - Q = RRR(E.conductor()).sqrt() / RRR(2 * pi) -diff --git a/src/sage/libs/lcalc/lcalc_sage.h b/src/sage/libs/lcalc/lcalc_sage.h -index 4985289..891a40c 100644 ---- a/src/sage/libs/lcalc/lcalc_sage.h -+++ b/src/sage/libs/lcalc/lcalc_sage.h -@@ -1,4 +1,4 @@ --#include "Lfunction/L.h" -+#include "lcalc/L.h" - int *new_ints(int l) - { - return new int[l]; -@@ -62,4 +62,3 @@ void testL(L_function<Complex> *L) - cout << "Value at 1" << L->value(1.0) <<endl; - cout << "Value at .5+I" << L->value(.5+I) <<endl; - } -- -diff --git a/src/sage/modular/dirichlet.py b/src/sage/modular/dirichlet.py -index d101f6a..23a9b1b 100644 ---- a/src/sage/modular/dirichlet.py -+++ b/src/sage/modular/dirichlet.py -@@ -751,8 +751,8 @@ class DirichletCharacter(MultiplicativeGroupElement): - sage: a = a.primitive_character() - sage: L = a.lfunction(algorithm='lcalc'); L - L-function with complex Dirichlet coefficients -- sage: L.value(4) # abs tol 1e-14 -- 0.988944551741105 - 5.16608739123418e-18*I -+ sage: L.value(4) # abs tol 1e-8 -+ 0.988944551741105 + 0.0*I - """ - if algorithm is None: - algorithm = 'pari' -diff --git a/src/sage/schemes/elliptic_curves/ell_rational_field.py b/src/sage/schemes/elliptic_curves/ell_rational_field.py -index bda999e..1736ce4 100644 ---- a/src/sage/schemes/elliptic_curves/ell_rational_field.py -+++ b/src/sage/schemes/elliptic_curves/ell_rational_field.py -@@ -1516,7 +1516,7 @@ class EllipticCurve_rational_field(EllipticCurve_number_field): - sage: EllipticCurve([1234567,89101112]).analytic_rank(algorithm='rubinstein') - Traceback (most recent call last): - ... -- RuntimeError: unable to compute analytic rank using rubinstein algorithm (unable to convert ' 6.19283e+19 and is too large' to an integer) -+ RuntimeError: unable to compute analytic rank using rubinstein algorithm (unable to convert ' 6.19283... and is too large' to an integer) - sage: EllipticCurve([1234567,89101112]).analytic_rank(algorithm='sympow') - Traceback (most recent call last): - ... -diff --git a/src/sage/schemes/elliptic_curves/lseries_ell.py b/src/sage/schemes/elliptic_curves/lseries_ell.py -index 1fcd02f..8536db5 100644 ---- a/src/sage/schemes/elliptic_curves/lseries_ell.py -+++ b/src/sage/schemes/elliptic_curves/lseries_ell.py -@@ -400,8 +400,22 @@ class Lseries_ell(SageObject): - - sage: E = EllipticCurve('37a') - sage: vals = E.lseries().twist_values(1, -12, -4) -- sage: vals # abs tol 1e-15 -- [(-11, 1.47824342), (-8, 8.9590946e-18), (-7, 1.85307619), (-4, 2.45138938)] -+ sage: vals[0][0] -+ -11 -+ sage: vals[0][1] # abs tol 1e-8 -+ 1.47824342 + 0.0*I -+ sage: vals[1][0] -+ -8 -+ sage: vals[1][1] # abs tol 1e-8 -+ 0.0 + 0.0*I -+ sage: vals[2][0] -+ -7 -+ sage: vals[2][1] # abs tol 1e-8 -+ 1.85307619 + 0.0*I -+ sage: vals[3][0] -+ -4 -+ sage: vals[3][1] # abs tol 1e-8 -+ 2.45138938 + 0.0*I - sage: F = E.quadratic_twist(-8) - sage: F.rank() - 1 - Modified: sagemath-lrcalc2.patch =================================================================== --- sagemath-lrcalc2.patch 2022-01-30 16:49:28 UTC (rev 1120401) +++ sagemath-lrcalc2.patch 2022-01-30 17:02:43 UTC (rev 1120402) @@ -1,12 +1,13 @@ diff --git a/build/pkgs/lrcalc/checksums.ini b/build/pkgs/lrcalc/checksums.ini -index 7a0e6a1b96..70de56c40d 100644 +index 7a0e6a1b96..8b8620ba52 100644 --- a/build/pkgs/lrcalc/checksums.ini +++ b/build/pkgs/lrcalc/checksums.ini @@ -1,4 +1,5 @@ - tarball=lrcalc-VERSION.tar.gz +-tarball=lrcalc-VERSION.tar.gz -sha1=89c288875bc3e3e2919876cb645bdfd7316b5965 -md5=6bba16c0cca9debccd0af847bd3d4a23 -cksum=3738483656 ++tarball=liblrcalc-VERSION.tar.gz +sha1=2a98661eb39c7ef526c932f7886fc3142fd639ab +md5=7cfa8f67287f2b70a15a833b94bc24b6 +cksum=2250996027 @@ -114,17 +115,127 @@ --- -2.1.1.1.g1fb337f - +diff --git a/build/pkgs/lrcalc/spkg-configure.m4 b/build/pkgs/lrcalc/spkg-configure.m4 +index f2f8b74f8f..b8171ce23f 100644 +--- a/build/pkgs/lrcalc/spkg-configure.m4 ++++ b/build/pkgs/lrcalc/spkg-configure.m4 +@@ -1,9 +1,10 @@ + SAGE_SPKG_CONFIGURE([lrcalc], [ +- AC_CHECK_HEADERS([lrcalc/schublib.h], [ ++ AC_LANG_PUSH([C]) ++ AC_CHECK_HEADERS([lrcalc/schublib.h] [lrcalc/lrcoef.h], [ + AC_SEARCH_LIBS([mult_poly_schubert], [lrcalc], [], [sage_spkg_install_lrcalc=yes]) + ], [sage_spkg_install_lrcalc=yes], +- [[#ifndef _HASHTAB_H +- #include <lrcalc/hashtab.h> +- #include <lrcalc/vector.h> ++ [[#ifndef _IVECTOR_H ++ #include <lrcalc/ivector.h> + #endif]]) ++ AC_LANG_POP + ]) diff --git a/build/pkgs/lrcalc/spkg-install.in b/build/pkgs/lrcalc/spkg-install.in -index d6665bfb42..a34493b776 100644 +index d6665bfb42..a863950189 100644 --- a/build/pkgs/lrcalc/spkg-install.in +++ b/build/pkgs/lrcalc/spkg-install.in -@@ -7,3 +7,6 @@ cp "$SAGE_ROOT"/config/config.sub . +@@ -1,9 +1,5 @@ + cd src + +-# Use newer version of config.guess and config.sub (see Trac #19725) +-cp "$SAGE_ROOT"/config/config.guess . +-cp "$SAGE_ROOT"/config/config.sub . +- sdh_configure sdh_make sdh_make_install +diff --git a/build/pkgs/lrcalc_python/SPKG.rst b/build/pkgs/lrcalc_python/SPKG.rst +new file mode 100644 +index 0000000000..3a98d556ca +--- /dev/null ++++ b/build/pkgs/lrcalc_python/SPKG.rst +@@ -0,0 +1,22 @@ ++lrcalc_python: Littlewood-Richardson calculator ++=============================================== + -+cd python -+sdh_pip_install . ++Description ++----------- ++ ++Python bindings for the Littlewood-Richardson Calculator ++ ++http://sites.math.rutgers.edu/~asbuch/lrcalc/ ++ ++License ++------- ++ ++GNU General Public License V3 ++ ++ ++Upstream Contact ++---------------- ++ ++Anders S. Buch ([email protected]) ++ ++https://bitbucket.org/asbuch/lrcalc +diff --git a/build/pkgs/lrcalc_python/checksums.ini b/build/pkgs/lrcalc_python/checksums.ini +new file mode 100644 +index 0000000000..bdfef8711e +--- /dev/null ++++ b/build/pkgs/lrcalc_python/checksums.ini +@@ -0,0 +1,5 @@ ++tarball=lrcalc-VERSION.tar.gz ++sha1=3e9366d9e8b8beccec70b07d174b8f6683c01574 ++md5=4ae444d12ed8e0dd770594ea3ef4a208 ++cksum=2741305196 ++upstream_url=https://pypi.io/packages/source/l/lrcalc/lrcalc-VERSION.tar.gz +diff --git a/build/pkgs/lrcalc_python/dependencies b/build/pkgs/lrcalc_python/dependencies +new file mode 100644 +index 0000000000..63e5177ae0 +--- /dev/null ++++ b/build/pkgs/lrcalc_python/dependencies +@@ -0,0 +1,5 @@ ++$(PYTHON) lrcalc | $(PYTHON_TOOLCHAIN) cython ++ ++---------- ++All lines of this file are ignored except the first. ++It is copied by SAGE_ROOT/build/make/install into SAGE_ROOT/build/make/Makefile. +diff --git a/build/pkgs/lrcalc_python/install-requires.txt b/build/pkgs/lrcalc_python/install-requires.txt +new file mode 100644 +index 0000000000..8b44d97f4b +--- /dev/null ++++ b/build/pkgs/lrcalc_python/install-requires.txt +@@ -0,0 +1 @@ ++lrcalc ~=2.1 +diff --git a/build/pkgs/lrcalc_python/package-version.txt b/build/pkgs/lrcalc_python/package-version.txt +new file mode 100644 +index 0000000000..879b416e60 +--- /dev/null ++++ b/build/pkgs/lrcalc_python/package-version.txt +@@ -0,0 +1 @@ ++2.1 +diff --git a/build/pkgs/lrcalc_python/spkg-install.in b/build/pkgs/lrcalc_python/spkg-install.in +new file mode 100644 +index 0000000000..deba1bb42b +--- /dev/null ++++ b/build/pkgs/lrcalc_python/spkg-install.in +@@ -0,0 +1 @@ ++cd src && sdh_pip_install . +diff --git a/build/pkgs/lrcalc_python/type b/build/pkgs/lrcalc_python/type +new file mode 100644 +index 0000000000..a6a7b9cd72 +--- /dev/null ++++ b/build/pkgs/lrcalc_python/type +@@ -0,0 +1 @@ ++standard +diff --git a/build/pkgs/sagelib/dependencies b/build/pkgs/sagelib/dependencies +index 9c7797b1f4..3369d4d905 100644 +--- a/build/pkgs/sagelib/dependencies ++++ b/build/pkgs/sagelib/dependencies +@@ -1,4 +1,4 @@ +-FORCE $(SCRIPTS) arb boost_cropped $(BLAS) brial cliquer cypari cysignals cython ecl eclib ecm flint libgd gap giac givaro glpk gmpy2 gsl iml jinja2 jupyter_core lcalc lrcalc libbraiding libhomfly libpng linbox m4ri m4rie memory_allocator mpc mpfi mpfr $(MP_LIBRARY) ntl numpy pari pip pkgconfig planarity ppl pplpy primesieve primecount primecountpy pycygwin $(PYTHON) ratpoints requests rw sage_conf singular symmetrica zn_poly $(PCFILES) | $(PYTHON_TOOLCHAIN) sage_setup ++FORCE $(SCRIPTS) arb boost_cropped $(BLAS) brial cliquer cypari cysignals cython ecl eclib ecm flint libgd gap giac givaro glpk gmpy2 gsl iml jinja2 jupyter_core lcalc lrcalc_python libbraiding libhomfly libpng linbox m4ri m4rie memory_allocator mpc mpfi mpfr $(MP_LIBRARY) ntl numpy pari pip pkgconfig planarity ppl pplpy primesieve primecount primecountpy pycygwin $(PYTHON) ratpoints requests rw sage_conf singular symmetrica zn_poly $(PCFILES) | $(PYTHON_TOOLCHAIN) sage_setup + + ---------- + All lines of this file are ignored except the first. diff --git a/src/sage/libs/lrcalc/lrcalc.pxd b/src/sage/libs/lrcalc/lrcalc.pxd deleted file mode 100644 index 10b88db93f..0000000000 @@ -212,10 +323,10 @@ similarity index 65% rename from src/sage/libs/lrcalc/lrcalc.pyx rename to src/sage/libs/lrcalc/lrcalc.py -index 1cf67dc15a..d4e2f5d538 100644 +index b591081ec4..65db959944 100644 --- a/src/sage/libs/lrcalc/lrcalc.pyx +++ b/src/sage/libs/lrcalc/lrcalc.py -@@ -187,180 +187,16 @@ AUTHORS: +@@ -187,180 +187,24 @@ AUTHORS: # https://www.gnu.org/licenses/ # **************************************************************************** @@ -224,8 +335,12 @@ from sage.combinat.partition import _Partitions from sage.combinat.permutation import Permutation -from sage.combinat.skew_tableau import SkewTableau ++from sage.combinat.skew_tableau import SkewTableaux ++from sage.combinat.skew_partition import SkewPartition ++from sage.rings.integer import Integer ++import lrcalc + - -- -cdef vector* iterable_to_vector(it): - """ - Return an lrcalc vector (which is a list of integers) from a Python iterable. @@ -285,9 +400,12 @@ - """ - A wrapper function which transforms the data set ``st`` used in - ``lrcalc`` to a ``SkewTableau`` in Sage. -- -- TESTS:: -- ++def _lrcalc_dict_to_sage(result): ++ r""" ++ Translate from lrcalc output format to Sage expected format. + + TESTS:: + - sage: from sage.libs.lrcalc.lrcalc import test_skewtab_to_SkewTableau - sage: test_skewtab_to_SkewTableau([],[]) - [] @@ -329,11 +447,11 @@ -cdef dict sf_hashtab_to_dict(hashtab *ht): - """ - Return a dictionary representing a Schur function. The keys are -- partitions and the values are integers <type 'sage.rings.integer.Integer'>. +- partitions and the values are integers <class 'sage.rings.integer.Integer'>. - - EXAMPLES:: - -- sage: from sage.libs.lrcalc.lrcalc import mult + sage: from sage.libs.lrcalc.lrcalc import mult - sage: sorted(mult([1],[1]).items()) #indirect doctest - [([1, 1], 1), ([2], 1)] - sage: assert isinstance(mult([1],[1]),dict)#indirect doctest @@ -352,7 +470,7 @@ -cdef dict schubert_hashtab_to_dict(hashtab *ht): - """ - Return a dictionary corresponding to a Schubert polynomial whose keys -- are permutations and whose values are integers <type 'sage.rings.integer.Integer'>. +- are permutations and whose values are integers <class 'sage.rings.integer.Integer'>. - - EXAMPLES:: - @@ -373,7 +491,7 @@ -cdef dict vp_hashtab_to_dict(hashtab *ht): - """ - Return a dictionary corresponding to the coproduct of a Schur function whose keys are -- pairs of partitions and whose values are integers <type 'sage.rings.integer.Integer'>. +- pairs of partitions and whose values are integers <class 'sage.rings.integer.Integer'>. - - EXAMPLES:: - @@ -380,7 +498,9 @@ - sage: from sage.libs.lrcalc.lrcalc import coprod - sage: coprod([1]) #indirect doctest - {([1], []): 1} -- """ ++ sage: mult([2,1],[3,2,1],3) # indirect doctest ++ {[3, 3, 3]: 1, [4, 3, 2]: 2, [4, 4, 1]: 1, [5, 2, 2]: 1, [5, 3, 1]: 1} + """ - cdef hash_itr itr - cdef vecpair* vp - cdef dict result = {} @@ -392,18 +512,12 @@ - result[(p1, p2)] = Integer(hash_intvalue(itr)) - hash_next(itr) - return result -+from sage.combinat.skew_tableau import SkewTableaux -+from sage.combinat.skew_partition import SkewPartition -+from sage.combinat.words.word import Word -+from sage.rings.integer import Integer -+import lrcalc +- ++ return {_Partitions(la):Integer(k) for la,k in result.items()} -+def _lrcalc_dict_to_sage(result): -+ return dict({_Partitions(i):Integer(k) for i,k in result.items()}) - def lrcoef_unsafe(outer, inner1, inner2): r""" -@@ -392,18 +228,7 @@ def lrcoef_unsafe(outer, inner1, inner2): +@@ -392,18 +236,7 @@ def lrcoef_unsafe(outer, inner1, inner2): sage: lrcoef_unsafe([2,1,1,1,1], [2,1], [2,1]) 0 """ @@ -423,7 +537,7 @@ def lrcoef(outer, inner1, inner2): -@@ -510,44 +335,23 @@ def mult(part1, part2, maxrows=None, level=None, quantum=None): +@@ -510,44 +343,24 @@ def mult(part1, part2, maxrows=None, level=None, quantum=None): if quantum is not None and (level is None or maxrows is None): raise ValueError('missing parameters maxrows or level') @@ -473,7 +587,8 @@ + P = quantum.parent() + output = {} + for i,k in result.items(): -+ output[_Partitions(i[0])] = output.get(_Partitions(i[0]), P.zero()) + k*quantum**(i[1]) ++ la = _Partitions(i[0]) ++ output[la] = output.get(la, P.zero()) + k*quantum**(i[1]) + return output + + @@ -481,7 +596,7 @@ """ Compute the Schur expansion of a skew Schur function. -@@ -572,14 +376,7 @@ def skew(outer, inner, maxrows=0): +@@ -572,14 +385,7 @@ def skew(outer, inner, maxrows=0): sage: sorted(skew([2,1],[1]).items()) [([1, 1], 1), ([2], 1)] """ @@ -497,7 +612,7 @@ def coprod(part, all=0): -@@ -609,12 +406,8 @@ def coprod(part, all=0): +@@ -609,12 +415,8 @@ def coprod(part, all=0): sage: sorted(coprod([2,1]).items()) [(([1, 1], [1]), 1), (([2], [1]), 1), (([2, 1], []), 1)] """ @@ -508,11 +623,11 @@ - hash_free(ht) - return result + result = lrcalc.coprod(part, all) -+ return dict({tuple(_Partitions(j) for j in i):Integer(k) for i,k in result.items()}) ++ return {tuple(_Partitions(mu) for mu in la):Integer(k) for la,k in result.items()} def mult_schubert(w1, w2, rank=0): -@@ -646,17 +439,11 @@ def mult_schubert(w1, w2, rank=0): +@@ -646,17 +448,11 @@ def mult_schubert(w1, w2, rank=0): ([6, 4, 3, 1, 2, 5], 1), ([6, 5, 2, 1, 3, 4], 1), ([7, 3, 4, 1, 2, 5, 6], 1), ([7, 4, 2, 1, 3, 5, 6], 1)] """ @@ -525,7 +640,7 @@ - hash_free(ht) - return result + result = lrcalc.schubmult(w1, w2, rank) -+ return dict({Permutation(list(i)):Integer(k) for i,k in result.items()}) ++ return {Permutation(list(la)):Integer(k) for la,k in result.items()} -def lrskew(outer, inner, weight=None, maxrows=0): @@ -533,7 +648,7 @@ r""" Iterate over the skew LR tableaux of shape ``outer / inner``. -@@ -703,21 +490,23 @@ def lrskew(outer, inner, weight=None, maxrows=0): +@@ -703,21 +499,20 @@ def lrskew(outer, inner, weight=None, maxrows=0): sage: list(lrskew([3,2,1],[2], weight=[3,1])) [[[None, None, 1], [1, 1], [2]]] """ @@ -547,12 +662,9 @@ - yield skewtab_to_SkewTableau(st) - while st_next(st): - yield skewtab_to_SkewTableau(st) -+ while True: -+ try: -+ word = Word([i+1 for i in next(iterator)]) -+ yield SkewTableaux().from_shape_and_word(shape, word) -+ except StopIteration: -+ break ++ ST = SkewTableaux() ++ for data in iterator: ++ yield ST.from_shape_and_word(shape, [i+1 for i in data]) else: wt = _Partitions(weight) - r = skewtab_to_SkewTableau(st) @@ -563,11 +675,11 @@ - if r.weight() == wt: - yield r - st_free(st) -+ while True: -+ try: -+ word = Word([i+1 for i in next(iterator)]) -+ r = SkewTableaux().from_shape_and_word(shape, word) -+ if r.weight() == wt: -+ yield r -+ except StopIteration: -+ break ++ ST = SkewTableaux() ++ for data in iterator: ++ m = max(data) + 1 ++ w = [0] * m ++ for j in data: ++ w[j] += 1 ++ if w == wt: ++ yield ST.from_shape_and_word(shape, [i+1 for i in data]) Deleted: sagemath-mpmath.patch =================================================================== --- sagemath-mpmath.patch 2022-01-30 16:49:28 UTC (rev 1120401) +++ sagemath-mpmath.patch 2022-01-30 17:02:43 UTC (rev 1120402) @@ -1,14 +0,0 @@ -diff --git a/src/sage/env.py b/src/sage/env.py -index e5af037..40ace13 100644 ---- a/src/sage/env.py -+++ b/src/sage/env.py -@@ -237,6 +237,9 @@ LIBSINGULAR_PATH = var("LIBSINGULAR_PATH", "libSingular.so") - OPENMP_CFLAGS = var("OPENMP_CFLAGS", "") - OPENMP_CXXFLAGS = var("OPENMP_CXXFLAGS", "") - -+# Make sure mpmath uses Sage types -+os.environ['MPMATH_SAGE'] = '1' -+ - # misc - SAGE_BANNER = var("SAGE_BANNER", "") - SAGE_IMPORTALL = var("SAGE_IMPORTALL", "yes") Modified: sagemath-optional-packages.patch =================================================================== --- sagemath-optional-packages.patch 2022-01-30 16:49:28 UTC (rev 1120401) +++ sagemath-optional-packages.patch 2022-01-30 17:02:43 UTC (rev 1120402) @@ -1,17 +1,17 @@ -diff --git a/build/pkgs/sagelib/src/setup.py b/build/pkgs/sagelib/src/setup.py -index 0d7c29d746..fb34cbfd5e 100755 ---- a/build/pkgs/sagelib/src/setup.py -+++ b/build/pkgs/sagelib/src/setup.py -@@ -75,10 +75,9 @@ if sdist: - else: +diff --git a/pkgs/sagemath-standard/setup.py b/pkgs/sagemath-standard/setup.py +index 6744236593..a038006449 100755 +--- a/pkgs/sagemath-standard/setup.py ++++ b/pkgs/sagemath-standard/setup.py +@@ -81,10 +81,9 @@ else: + from sage_setup.optional_extension import is_package_installed_and_updated distributions = [''] - optional_packages_with_extensions = ['mcqd', 'bliss', 'tdlib', 'primecount', + optional_packages_with_extensions = ['mcqd', 'bliss', 'tdlib', - 'coxeter3', 'fes', 'sirocco', 'meataxe'] + 'coxeter3', 'sirocco', 'meataxe'] - distributions += ['sage-{}'.format(pkg) + distributions += ['sagemath-{}'.format(pkg) - for pkg in optional_packages_with_extensions - if is_package_installed_and_updated(pkg)] + for pkg in optional_packages_with_extensions] log.warn('distributions = {0}'.format(distributions)) - - from sage_setup.find import find_python_sources + from sage_setup.find import find_python_sources + python_packages, python_modules, cython_modules = find_python_sources( Deleted: sagemath-singular-4.2.1.p1.patch =================================================================== --- sagemath-singular-4.2.1.p1.patch 2022-01-30 16:49:28 UTC (rev 1120401) +++ sagemath-singular-4.2.1.p1.patch 2022-01-30 17:02:43 UTC (rev 1120402) @@ -1,266 +0,0 @@ -diff --git a/src/sage/libs/singular/decl.pxd b/src/sage/libs/singular/decl.pxd -index 806937ff6e..68741d7588 100644 ---- a/src/sage/libs/singular/decl.pxd -+++ b/src/sage/libs/singular/decl.pxd -@@ -747,21 +747,21 @@ cdef extern from "singular/Singular/libsingular.h": - - # general number constructor - -- number *n_Init(int n, ring *r) -+ number *n_Init(int n, n_Procs_s *cf) - - # general number destructor - -- void n_Delete(number **n, ring *r) -+ void n_Delete(number **n, n_Procs_s *cf) - - # Copy this number -- number *n_Copy(number *n, ring* r) -+ number *n_Copy(number *n, n_Procs_s *cf) - - # Invert this number - int n_IsUnit(number *n, const n_Procs_s *cf) - number *n_Invers(number *n, const n_Procs_s *cf) - - # Characteristic of coefficient domain -- int n_GetChar(const ring* r) -+ int n_GetChar(const n_Procs_s *cf) - - # rational number from int - -diff --git a/src/sage/libs/singular/polynomial.pyx b/src/sage/libs/singular/polynomial.pyx -index 7687de8f2d..027e0b574a 100644 ---- a/src/sage/libs/singular/polynomial.pyx -+++ b/src/sage/libs/singular/polynomial.pyx -@@ -130,7 +130,7 @@ cdef int singular_polynomial_rmul(poly **ret, poly *p, RingElement n, ring *r): - rChangeCurrRing(r) - cdef number *_n = sa2si(n, r) - ret[0] = pp_Mult_nn(p, _n, r) -- n_Delete(&_n, r) -+ n_Delete(&_n, r.cf) - return 0 - - cdef int singular_polynomial_call(poly **ret, poly *p, ring *r, list args, poly *(*get_element)(object)): -@@ -275,7 +275,7 @@ cdef int singular_polynomial_cmp(poly *p, poly *q, ring *r): - h = r.cf.cfSub(p_GetCoeff(p, r),p_GetCoeff(q, r),r.cf) - # compare coeffs - ret = -1+r.cf.cfIsZero(h,r.cf)+2*r.cf.cfGreaterZero(h, r.cf) # -1: <, 0:==, 1: > -- n_Delete(&h, r) -+ n_Delete(&h, r.cf) - p = pNext(p) - q = pNext(q) - -@@ -346,7 +346,7 @@ cdef int singular_polynomial_div_coeff(poly** ret, poly *p, poly *q, ring *r) ex - cdef number *n = p_GetCoeff(q, r) - n = r.cf.cfInvers(n,r.cf) - ret[0] = pp_Mult_nn(p, n, r) -- n_Delete(&n, r) -+ n_Delete(&n, r.cf) - sig_off() - return 0 - -diff --git a/src/sage/libs/singular/singular.pyx b/src/sage/libs/singular/singular.pyx -index ce93c3b8cb..c4eba5fe59 100644 ---- a/src/sage/libs/singular/singular.pyx -+++ b/src/sage/libs/singular/singular.pyx -@@ -669,7 +669,7 @@ cdef object si2sa(number *n, ring *_ring, object base): - cdef number *sa2si(Element elem, ring * _ring): - cdef int i = 0 - if isinstance(elem._parent, FiniteField_prime_modn): -- return n_Init(int(elem),_ring) -+ return n_Init(int(elem),_ring.cf) - - elif isinstance(elem._parent, RationalField): - return sa2si_QQ(elem, _ring) -@@ -690,7 +690,7 @@ cdef number *sa2si(Element elem, ring * _ring): - return sa2si_NF(elem, _ring) - elif isinstance(elem._parent, IntegerModRing_generic): - if _ring.cf.type == n_unknown: -- return n_Init(int(elem),_ring) -+ return n_Init(int(elem),_ring.cf) - return sa2si_ZZmod(elem, _ring) - else: - raise ValueError("cannot convert to SINGULAR number") -diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx -index 6f884ea2c1..dcbc2a52a8 100644 ---- a/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx -+++ b/src/sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx -@@ -329,7 +329,7 @@ def interred_libsingular(I): - n = r.cf.cfInvers(n,r.cf) - result.m[j] = pp_Mult_nn(p, n, r) - p_Delete(&p,r) -- n_Delete(&n,r) -+ n_Delete(&n,r.cf) - - id_Delete(&i,r) - -diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx -index 2c69227760..4ab9a36f78 100644 ---- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx -+++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx -@@ -1652,7 +1652,7 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - else: - raise ArithmeticError("Cannot divide these coefficients.") - else: -- p_SetCoeff0(res, n_Init(1, r), r) -+ p_SetCoeff0(res, n_Init(1, r.cf), r) - return new_MP(self, res) - - def monomial_divides(self, MPolynomial_libsingular a, MPolynomial_libsingular b): -@@ -1805,7 +1805,7 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - if r is not currRing: - rChangeCurrRing(r) - flt = pMDivide(f._poly, h._poly) -- p_SetCoeff(flt, n_Init(1, r), r) -+ p_SetCoeff(flt, n_Init(1, r.cf), r) - return (new_MP(self, flt), h) - return (self._zero_element, self._zero_element) - -@@ -2885,7 +2885,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - flag = 1 - if flag == 0: - newptemp = p_LmInit(p,r) -- p_SetCoeff(newptemp,n_Copy(p_GetCoeff(p,r),r),r) -+ p_SetCoeff(newptemp,n_Copy(p_GetCoeff(p,r),r.cf),r) - for i from 0<=i<gens: - if exps[i] != -1: - p_SetExp(newptemp,i+1,0,r) -@@ -3187,7 +3187,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - t = pNext(p) - p.next = NULL - coeff = si2sa(p_GetCoeff(p, _ring), _ring, base) -- p_SetCoeff(p, n_Init(1,_ring), _ring) -+ p_SetCoeff(p, n_Init(1,_ring.cf), _ring) - p_Setm(p, _ring) - yield (coeff, new_MP(parent, p)) - p = t -@@ -3716,7 +3716,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - while p: - t = pNext(p) - p.next = NULL -- p_SetCoeff(p, n_Init(1,_ring), _ring) -+ p_SetCoeff(p, n_Init(1,_ring.cf), _ring) - p_Setm(p, _ring) - l.append( new_MP(parent,p) ) - p = t -@@ -3993,7 +3993,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - if self._poly == NULL: - return self._parent._zero_element - _p = p_Head(self._poly, _ring) -- p_SetCoeff(_p, n_Init(1,_ring), _ring) -+ p_SetCoeff(_p, n_Init(1,_ring.cf), _ring) - p_Setm(_p,_ring) - return new_MP(self._parent, _p) - -@@ -4142,7 +4142,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - elif p_IsOne(_right._poly, r): - return self - -- if n_GetChar(r) > 1<<29: -+ if n_GetChar(r.cf) > 1<<29: - raise NotImplementedError("Division of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.") - - if r.cf.type != n_unknown: -@@ -4153,7 +4153,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - while p: - if p_DivisibleBy(_right._poly, p, r): - temp = p_MDivide(p, _right._poly, r) -- p_SetCoeff0(temp, n_Copy(p_GetCoeff(p, r), r), r) -+ p_SetCoeff0(temp, n_Copy(p_GetCoeff(p, r), r.cf), r) - quo = p_Add_q(quo, temp, r) - p = pNext(p) - return new_MP(parent, quo) -@@ -4458,7 +4458,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - except Exception: - raise NotImplementedError("Factorization of multivariate polynomials over %s is not implemented."%self._parent._base) - -- if n_GetChar(_ring) > 1<<29: -+ if n_GetChar(_ring.cf) > 1<<29: - raise NotImplementedError("Factorization of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.") - - # I make a temporary copy of the poly in self because singclap_factorize appears to modify it's parameter -@@ -4842,7 +4842,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - if _ring.cf.type == n_Znm or _ring.cf.type == n_Zn or _ring.cf.type == n_Z2m : - raise NotImplementedError("GCD over rings not implemented.") - -- if n_GetChar(_ring) > 1<<29: -+ if n_GetChar(_ring.cf) > 1<<29: - raise NotImplementedError("GCD of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.") - - cdef int count = singular_polynomial_length_bounded(self._poly,20) \ -@@ -4915,7 +4915,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - else: - _g = <MPolynomial_libsingular>g - -- if n_GetChar(_ring) > 1<<29: -+ if n_GetChar(_ring.cf) > 1<<29: - raise NotImplementedError("LCM of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.") - - cdef int count = singular_polynomial_length_bounded(self._poly,20) \ -@@ -4995,7 +4995,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - py_rem = self - right*py_quo - return py_quo, py_rem - -- if n_GetChar(r) > 1<<29: -+ if n_GetChar(r.cf) > 1<<29: - raise NotImplementedError("Division of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.") - - cdef int count = singular_polynomial_length_bounded(self._poly,15) -@@ -5450,7 +5450,7 @@ cdef class MPolynomial_libsingular(MPolynomial): - raise TypeError("second parameter needs to be an element of self.parent() or None") - - -- if n_GetChar(_ring) > 1<<29: -+ if n_GetChar(_ring.cf) > 1<<29: - raise NotImplementedError("Resultants of multivariate polynomials over prime fields with characteristic > 2^29 is not implemented.") - - if is_IntegerRing(self._parent._base): -diff --git a/src/sage/rings/polynomial/plural.pyx b/src/sage/rings/polynomial/plural.pyx -index 349871f508..540bc5cd29 100644 ---- a/src/sage/rings/polynomial/plural.pyx -+++ b/src/sage/rings/polynomial/plural.pyx -@@ -1063,7 +1063,7 @@ cdef class NCPolynomialRing_plural(Ring): - else: - raise ArithmeticError("Cannot divide these coefficients.") - else: -- p_SetCoeff0(res, n_Init(1, r), r) -+ p_SetCoeff0(res, n_Init(1, r.cf), r) - return new_NCP(self, res) - - def monomial_divides(self, NCPolynomial_plural a, NCPolynomial_plural b): -@@ -1251,7 +1251,7 @@ cdef class NCPolynomialRing_plural(Ring): - h = <NCPolynomial_plural>g - if p_LmDivisibleBy(h._poly, m, r): - flt = pMDivide(f._poly, h._poly) -- p_SetCoeff(flt, n_Init(1, r), r) -+ p_SetCoeff(flt, n_Init(1, r.cf), r) - return (new_NCP(self,flt), h) - return (self._zero_element, self._zero_element) - -@@ -2112,7 +2112,7 @@ cdef class NCPolynomial_plural(RingElement): - flag = 1 - if flag == 0: - newptemp = p_LmInit(p,r) -- p_SetCoeff(newptemp,n_Copy(p_GetCoeff(p,r),r),r) -+ p_SetCoeff(newptemp,n_Copy(p_GetCoeff(p,r),r.cf),r) - for i from 0<=i<gens: - if exps[i] != -1: - p_SetExp(newptemp,i+1,0,r) -@@ -2545,7 +2545,7 @@ cdef class NCPolynomial_plural(RingElement): - while p: - t = pNext(p) - p.next = NULL -- p_SetCoeff(p, n_Init(1,_ring), _ring) -+ p_SetCoeff(p, n_Init(1,_ring.cf), _ring) - p_Setm(p, _ring) - l.append( new_NCP(parent,p) ) - p = t -@@ -2650,7 +2650,7 @@ cdef class NCPolynomial_plural(RingElement): - if self._poly == NULL: - return (<NCPolynomialRing_plural>self._parent)._zero_element - _p = p_Head(self._poly, _ring) -- p_SetCoeff(_p, n_Init(1,_ring), _ring) -+ p_SetCoeff(_p, n_Init(1,_ring.cf), _ring) - p_Setm(_p,_ring) - return new_NCP((<NCPolynomialRing_plural>self._parent), _p) - Modified: test-optional.patch =================================================================== --- test-optional.patch 2022-01-30 16:49:28 UTC (rev 1120401) +++ test-optional.patch 2022-01-30 17:02:43 UTC (rev 1120402) @@ -2,24 +2,16 @@ index 2d93841e50..937e20cd2e 100644 --- a/src/sage/doctest/control.py +++ b/src/sage/doctest/control.py -@@ -357,20 +357,6 @@ class DocTestController(SageObject): - # 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') +@@ -400,11 +400,6 @@ class DocTestController(SageObject): + # 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'] and pkg['installed_version'] == pkg['remote_version']: -- options.optional.add(pkg['name']) +- if pkg.is_installed() and pkg.installed_version == pkg.remote_version: +- options.optional.add(pkg.name) - -- from sage.features import package_systems -- options.optional.update(system.name for system in package_systems()) -- - # Check that all tags are valid - for o in options.optional: - if not optionaltag_regex.search(o): + from sage.features import package_systems + options.optional.update(system.name + +
