diff --git a/common/shlibs b/common/shlibs index 7d054d773f6672..47de8309518977 100644 --- a/common/shlibs +++ b/common/shlibs @@ -4250,7 +4250,7 @@ libcxsparse.so.4 SuiteSparse-6.0.1_1 libspqr.so.4 SuiteSparse-7.2.0_1 libsuitesparseconfig.so.7 SuiteSparse-7.0.1_1 libumfpack.so.6 SuiteSparse-6.0.1_1 -libecl.so.24.5 ecl-24.5.10_1 +libecl.so.26.5 ecl-26.5.5_1 libecm.so.1 ecm-7.0.4_3 libcliquer.so.1 cliquer-1.22_1 libomalloc-0.9.6.so singular-4.2.1_1 diff --git a/srcpkgs/ecl/files/cross_config b/srcpkgs/ecl/files/cross_config index 78b074c3c7c0e2..d490c2d0bbf7e6 100644 --- a/srcpkgs/ecl/files/cross_config +++ b/srcpkgs/ecl/files/cross_config @@ -13,10 +13,11 @@ ECL_STACK_DIR=down ### 1.2) Choose an integer datatype which is large enough to host a pointer if [ "$XBPS_TARGET_WORDSIZE" = "64" ]; then - CL_FIXNUM_TYPE="long long int" + CL_FIXNUM_TYPE=long CL_FIXNUM_BITS=64 CL_FIXNUM_MAX=2305843009213693951LL CL_FIXNUM_MIN=-2305843009213693952LL + CL_SHORT_BITS=16 CL_INT_BITS=32 CL_LONG_BITS=64 else @@ -24,6 +25,7 @@ else CL_FIXNUM_BITS=32 CL_FIXNUM_MAX=536870911L CL_FIXNUM_MIN=-536870912L + CL_SHORT_BITS=16 CL_INT_BITS=32 CL_LONG_BITS=32 fi diff --git a/srcpkgs/ecl/template b/srcpkgs/ecl/template index de21325cb01876..7969952113e723 100644 --- a/srcpkgs/ecl/template +++ b/srcpkgs/ecl/template @@ -1,6 +1,6 @@ # Template file for 'ecl' pkgname=ecl -version=24.5.10 +version=26.5.5 revision=1 build_style=gnu-configure configure_args="--enable-gmp=system --enable-boehm=system @@ -14,7 +14,7 @@ license="LGPL-2.1-or-later" homepage="https://ecl.common-lisp.dev/" changelog="https://gitlab.com/embeddable-common-lisp/ecl/-/raw/develop/CHANGELOG" distfiles="https://ecl.common-lisp.dev/static/files/release/ecl-${version}.tgz" -checksum=e4ea65bb1861e0e495386bfa8bc673bd014e96d3cf9d91e9038f91435cbe622b +checksum=a01a5bcda8c5b73e59dda3494fd13e5fec5db6aa1dad782c3cc3bb57f1633435 if [ "$CROSS_BUILD" ]; then # Depend on system ecl diff --git a/srcpkgs/lcalc/template b/srcpkgs/lcalc/template index 70e2797611bc93..62af3836aa96d1 100644 --- a/srcpkgs/lcalc/template +++ b/srcpkgs/lcalc/template @@ -1,28 +1,24 @@ # Template file for 'lcalc' pkgname=lcalc -version=2.1.1 +version=2.2.1 revision=1 build_style=gnu-configure configure_args="--with-pari" -hostmakedepends="automake libtool pkg-config gengetopt" +hostmakedepends="gengetopt" makedepends="gmp-devel pari-devel" short_desc="Michael Rubinstein's L-function calculator" maintainer="Gonzalo Tornaría " license="GPL-2.0-or-later" homepage="https://gitlab.com/sagemath/lcalc" changelog="https://gitlab.com/sagemath/lcalc/-/raw/master/doc/ChangeLog" -distfiles="https://gitlab.com/sagemath/lcalc/-/archive/${version}/lcalc-${version}.tar.bz2" -checksum=f93c1ac7ad6d5524f52888cae5eefc5a00af635d34d53831e16e221166b5b6cd +distfiles="https://gitlab.com/-/project/12934202/uploads/0bcf82cdd02412faf9ec0cf80e656610/lcalc-${version}.tar.xz" +checksum=aa2c3979b12e12df2ecb681c1a25a0f5a3811c195f61a3baa7512fef1460c40f case $XBPS_TARGET_MACHINE in # avoid numerical noise caused by extended-precision of registers i686*) CXXFLAGS="-mfpmath=sse -msse2" ;; esac -pre_configure() { - autoreconf -fi -} - lcalc-devel_package() { depends="${sourcepkg}>=${version}_${revision}" short_desc+=" - development files" diff --git a/srcpkgs/libbraiding/template b/srcpkgs/libbraiding/template index 9a7dce708562db..af55ba689932af 100644 --- a/srcpkgs/libbraiding/template +++ b/srcpkgs/libbraiding/template @@ -1,7 +1,7 @@ # Template file for 'libbraiding' pkgname=libbraiding -version=1.3.1 -revision=2 +version=1.3.2 +revision=1 build_style=gnu-configure short_desc="Library to compute several properties of braids" maintainer="Gonzalo Tornaría " @@ -9,7 +9,7 @@ license="GPL-2.0-or-later" homepage="https://github.com/miguelmarco/libbraiding/" changelog="https://github.com/miguelmarco/libbraiding/releases" distfiles="https://github.com/miguelmarco/libbraiding/releases/download/$version/libbraiding-$version.tar.gz" -checksum=d1738c3ad64a90ca0ad968d2e3c9069b0de08abcf37fb44a151a229d88203950 +checksum=d43a32e7770d5c9a89ae489c5ac353da9610a761f76745382cf7612eab046ffd libbraiding-devel_package() { depends="${sourcepkg}>=${version}_${revision} ${makedepends}" diff --git a/srcpkgs/libhomfly/template b/srcpkgs/libhomfly/template index 4b703dbd6cf046..d61e89c0991279 100644 --- a/srcpkgs/libhomfly/template +++ b/srcpkgs/libhomfly/template @@ -1,6 +1,6 @@ # Template file for 'libhomfly' pkgname=libhomfly -version=1.03 +version=1.04 revision=1 build_style=gnu-configure makedepends="gc-devel" @@ -8,8 +8,9 @@ short_desc="Library to compute the homfly polynomial of knots and links" maintainer="Gonzalo Tornaría " license="custom:unlicense" homepage="https://github.com/miguelmarco/libhomfly/" +changelog="https://github.com/miguelmarco/libhomfly/releases" distfiles="https://github.com/miguelmarco/libhomfly/releases/download/${version}/libhomfly-${version}.tar.gz" -checksum=2a06e93cccd91d33ed9c345eba2e59b2ba175c11e454cf2029644a9364250871 +checksum=659a77b4f4b53340d24a7d6a69f4219e77ab9439a6ab8afa0156b7f6bd7af64f post_install() { vlicense LICENSE diff --git a/srcpkgs/libmpc/template b/srcpkgs/libmpc/template index 0d5622143a584e..c97a690c1be05e 100644 --- a/srcpkgs/libmpc/template +++ b/srcpkgs/libmpc/template @@ -1,6 +1,6 @@ # Template file for 'libmpc' pkgname=libmpc -version=1.3.1 +version=1.4.1 revision=1 bootstrap=yes build_style=gnu-configure @@ -10,8 +10,8 @@ maintainer="Gonzalo Tornaría " license="LGPL-3.0-or-later" homepage="https://www.multiprecision.org/mpc/" changelog="https://gitlab.inria.fr/mpc/mpc/-/raw/master/NEWS" -distfiles="${GNU_SITE}/mpc/mpc-${version}.tar.gz" -checksum=ab642492f5cf882b74aa0cb730cd410a81edcdbec895183ce930e706c1c759b8 +distfiles="${GNU_SITE}/mpc/mpc-${version}.tar.xz" +checksum=91204cd32f164bd3b7c992d4a6a8ce6519511aadab30f78b6982d0bf8d73e931 if [ -z "$CHROOT_READY" ]; then CFLAGS="-I${XBPS_MASTERDIR}/usr/include" diff --git a/srcpkgs/maxima/template b/srcpkgs/maxima/template index 9259b48f50822b..6044cae7918eaa 100644 --- a/srcpkgs/maxima/template +++ b/srcpkgs/maxima/template @@ -1,10 +1,10 @@ # Template file for 'maxima' pkgname=maxima -version=5.47.0 -revision=4 +version=5.49.0 +revision=1 build_style=gnu-configure -configure_args="$(vopt_enable clisp) $(vopt_enable sbcl) $(vopt_enable ecl) - makeinfo_found=true" +configure_args="$(vopt_enable clisp) $(vopt_enable sbcl) $(vopt_enable ecl)" +hostmakedepends="texinfo" makedepends="$(vopt_if clisp clisp) $(vopt_if sbcl sbcl) $(vopt_if ecl ecl)" depends="$(vopt_if clisp clisp) rlwrap" checkdepends="gnuplot" @@ -14,7 +14,7 @@ license="GPL-2.0-only" homepage="http://maxima.sourceforge.net" changelog="https://sourceforge.net/p/maxima/code/ci/master/tree/changelogs/ChangeLog-${version%.*}.md?format=raw" distfiles="${SOURCEFORGE_SITE}/maxima/maxima-${version}.tar.gz" -checksum=9104021b24fd53e8c03a983509cb42e937a925e8c0c85c335d7709a14fd40f7a +checksum=6d401a4aa307cd3a5a9cadca4fa96c4ef0e24ff95a18bb6a8f803e3d2114adee nocross=yes # maxima-sbcl is nopie and should NOT be stripped or it won't work @@ -43,22 +43,6 @@ esac vopt_conflict clisp sbcl -pre_build() { - # do not rebuild these files if they exist - touch -c doc/info/*.html - touch -c doc/info/maxima.info* - touch -c doc/info/maxima_toc.html - touch -c doc/info/maxima-index.lisp - touch -c doc/info/maxima-index-html.lisp - touch -c interfaces/xmaxima/doc/xmaxima.info - touch -c interfaces/xmaxima/doc/xmaxima.html -} - -post_build() { - # this one needs to be done after building - touch -c interfaces/emacs/imaxima/imaxima.info -} - do_check() { if [ "$build_option_ecl" ]; then echo "maxima-ecl: check that maxima.fas works (#34273)" @@ -80,7 +64,7 @@ do_check() { timeout -v 30s ./maxima-local -q -l sbcl --batch-string=" showtime : true $ a : 10^(10^5) $ - b : a^1000 $ + b : a^600 $ " echo PASS fi diff --git a/srcpkgs/python3-cypari2/patches/fix-memleak.patch b/srcpkgs/python3-cypari2/patches/fix-memleak.patch new file mode 100644 index 00000000000000..c5ecf28f0ada78 --- /dev/null +++ b/srcpkgs/python3-cypari2/patches/fix-memleak.patch @@ -0,0 +1,18 @@ +--- a/cypari2/custom_block.pyx ++++ b/cypari2/custom_block.pyx +@@ -6,6 +6,7 @@ + #***************************************************************************** + + from cysignals.signals cimport add_custom_signals ++from .stack cimport reset_avma + + cdef extern from "pari/pari.h": + int PARI_SIGINT_block, PARI_SIGINT_pending +@@ -16,6 +17,7 @@ cdef int custom_signal_is_blocked() noexcept: + cdef void custom_signal_unblock() noexcept: + global PARI_SIGINT_block + PARI_SIGINT_block = 0 ++ reset_avma() + + cdef void custom_set_pending_signal(int sig) noexcept: + global PARI_SIGINT_pending diff --git a/srcpkgs/python3-cypari2/template b/srcpkgs/python3-cypari2/template index 3dfa683d22d922..31056974043705 100644 --- a/srcpkgs/python3-cypari2/template +++ b/srcpkgs/python3-cypari2/template @@ -1,7 +1,7 @@ # Template file for 'python3-cypari2' pkgname=python3-cypari2 version=2.2.4 -revision=1 +revision=2 build_style=python3-pep517 build_helper="meson qemu" hostmakedepends="python3-meson-python python3-Cython diff --git a/srcpkgs/python3-mpmath/patches/fix-pytest.patch b/srcpkgs/python3-mpmath/patches/fix-pytest.patch deleted file mode 100644 index f67d5b39b3299a..00000000000000 --- a/srcpkgs/python3-mpmath/patches/fix-pytest.patch +++ /dev/null @@ -1,47 +0,0 @@ -commit ccebfbacbe1dc65716b8b7a9cd3c930447dbfa03 -Author: Gonzalo Tornaría -Date: Sun Mar 19 11:03:30 2023 -0300 - - Fix running pytest - - Running pytest doesn't work quite right. Changes here: - - move all pytest configuration from setup.cfg to pytest.ini to avoid - having different configurations - - add . to pythonpath so the mpmath module here takes precedence in - case mpmath is installed in system - - fix norecursedirs: doc/source/plots -> docs/plots - - add build to norecursedirs so pytest works even after building mpmath - - add '*.rst' to globs so pytest picks a few tests in docs/*.rst - -diff --git a/pytest.ini b/pytest.ini -index 95697f2..93f753f 100644 ---- a/pytest.ini -+++ b/pytest.ini -@@ -0,0 +1,10 @@ -+[pytest] -+pythonpath = . -+doctest_optionflags = IGNORE_EXCEPTION_DETAIL -+addopts = --doctest-modules -+ --ignore=setup.py -+ --doctest-glob='*.txt' -+ --doctest-glob='*.rst' -+norecursedirs = docs/plots demo .eggs .git build -+markers = -+ slow: marks tests as slow (deselect with '-m "not slow"') -diff --git a/setup.cfg b/setup.cfg -index 9dd3067..2761b08 100644 ---- a/setup.cfg -+++ b/setup.cfg -@@ -45,12 +45,6 @@ docs = sphinx - select = E101,W191,W291,W293,E111,E112,E113,W292,W391 - exclude = .eggs,.git - --[tool:pytest] --doctest_optionflags = IGNORE_EXCEPTION_DETAIL --addopts = --doctest-modules -- --ignore=setup.py -- --doctest-glob='*.txt' --norecursedirs = doc/source/plots demo .eggs .git - - [coverage:run] - branch = True diff --git a/srcpkgs/python3-mpmath/template b/srcpkgs/python3-mpmath/template index fccf8b7881929a..7698e23f1f1138 100644 --- a/srcpkgs/python3-mpmath/template +++ b/srcpkgs/python3-mpmath/template @@ -1,18 +1,18 @@ # Template file for 'python3-mpmath' pkgname=python3-mpmath -version=1.3.0 -revision=4 -build_style=python3-module -hostmakedepends="python3-setuptools" +version=1.4.1 +revision=1 +build_style=python3-pep517 +hostmakedepends="python3-setuptools_scm" depends="python3 python3-gmpy2" -checkdepends="$depends python3-pytest" +checkdepends="$depends python3-pytest python3-hypothesis python3-pexpect" short_desc="Python3 library for arbitrary-precision floating-point arithmetic" maintainer="Gonzalo Tornaría " license="BSD-3-Clause" homepage="http://mpmath.org/" changelog="https://github.com/mpmath/mpmath/raw/master/CHANGES" distfiles="${PYPI_SITE}/m/mpmath/mpmath-${version}.tar.gz" -checksum=7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f +checksum=efd6d1b75f09d69524a67609949812668b28e81ecbfe0ab449ced8c13e92642e if [ "$XBPS_CHECK_PKGS" != full ]; then make_check_args="-m not(slow)" diff --git a/srcpkgs/python3-sympy/patches/28060.patch b/srcpkgs/python3-sympy/patches/28060.patch new file mode 100644 index 00000000000000..174531fc1a331b --- /dev/null +++ b/srcpkgs/python3-sympy/patches/28060.patch @@ -0,0 +1,390 @@ +From 2bfc02884645447072ebb02afa93acd648eb1970 Mon Sep 17 00:00:00 2001 +From: Sangyub Lee +Date: Sat, 10 May 2025 20:02:30 +0200 +Subject: [PATCH 1/8] Replace deprecated bitcount + +--- + sympy/core/evalf.py | 3 +-- + sympy/core/numbers.py | 4 ++-- + sympy/ntheory/partitions_.py | 5 +++-- + sympy/physics/quantum/qubit.py | 6 +++--- + 4 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/sympy/core/evalf.py b/sympy/core/evalf.py +index 55a981090360..da173bf6d21d 100644 +--- a/sympy/core/evalf.py ++++ b/sympy/core/evalf.py +@@ -16,7 +16,6 @@ + mpf_atan, mpf_atan2, mpf_cmp, mpf_cos, mpf_e, mpf_exp, mpf_log, mpf_lt, + mpf_mul, mpf_neg, mpf_pi, mpf_pow, mpf_pow_int, mpf_shift, mpf_sin, + mpf_sqrt, normalize, round_nearest, to_int, to_str, mpf_tan) +-from mpmath.libmp import bitcount as mpmath_bitcount + from mpmath.libmp.backend import MPZ + from mpmath.libmp.libmpc import _infs_nan + from mpmath.libmp.libmpf import dps_to_prec, prec_to_dps +@@ -50,7 +49,7 @@ + def bitcount(n): + """Return smallest integer, b, such that |n|/2**b < 1. + """ +- return mpmath_bitcount(abs(int(n))) ++ return MPZ(abs(int(n))).bit_length() + + # Used in a few places as placeholder values to denote exponents and + # precision levels, e.g. of exact numbers. Must be careful to avoid +diff --git a/sympy/core/numbers.py b/sympy/core/numbers.py +index a5483ea707f8..4d9c65132dd2 100644 +--- a/sympy/core/numbers.py ++++ b/sympy/core/numbers.py +@@ -24,7 +24,7 @@ + from sympy.multipledispatch import dispatch + import mpmath + import mpmath.libmp as mlib +-from mpmath.libmp import bitcount, round_nearest as rnd ++from mpmath.libmp import round_nearest as rnd + from mpmath.libmp.backend import MPZ + from mpmath.libmp import mpf_pow, mpf_pi, mpf_e, phi_fixed + from mpmath.ctx_mp_python import mpnumeric +@@ -910,7 +910,7 @@ def __new__(cls, num, dps=None, precision=None): + # don't compute number or else it may + # over/underflow + return Float._new( +- (num[0], num[1], num[2], bitcount(num[1])), ++ (num[0], num[1], num[2], MPZ(num[1]).bit_length()), + precision) + elif isinstance(num, (Number, NumberSymbol)): + _mpf_ = num._as_mpf_val(precision) +diff --git a/sympy/ntheory/partitions_.py b/sympy/ntheory/partitions_.py +index 953fa9e2fef1..ebabdcdf64ac 100644 +--- a/sympy/ntheory/partitions_.py ++++ b/sympy/ntheory/partitions_.py +@@ -1,7 +1,8 @@ + from mpmath.libmp import (fzero, from_int, from_rational, +- fone, fhalf, bitcount, to_int, mpf_mul, mpf_div, mpf_sub, ++ fone, fhalf, to_int, mpf_mul, mpf_div, mpf_sub, + mpf_add, mpf_sqrt, mpf_pi, mpf_cosh_sinh, mpf_cos, mpf_sin) + from .residue_ntheory import _sqrt_mod_prime_power, is_quad_residue ++from sympy.core.evalf import bitcount + from sympy.utilities.decorator import deprecated + from sympy.utilities.memoization import recurrence_memo + +@@ -236,7 +237,7 @@ def _M(n, N): + # On average, the terms decrease rapidly in magnitude. + # Dynamically reducing the precision greatly improves + # performance. +- p = bitcount(abs(to_int(d))) + 50 ++ p = bitcount(to_int(d)) + 50 + return int(to_int(mpf_add(s, fhalf, prec))) + + +diff --git a/sympy/physics/quantum/qubit.py b/sympy/physics/quantum/qubit.py +index 71d1dbc01e3a..83cb0b0f128f 100644 +--- a/sympy/physics/quantum/qubit.py ++++ b/sympy/physics/quantum/qubit.py +@@ -10,6 +10,7 @@ + import math + + from sympy.core.add import Add ++from sympy.core.evalf import bitcount + from sympy.core.mul import Mul + from sympy.core.numbers import Integer + from sympy.core.power import Pow +@@ -29,7 +30,6 @@ + from sympy.physics.quantum.matrixutils import ( + numpy_ndarray, scipy_sparse_matrix + ) +-from mpmath.libmp.libintmath import bitcount + + __all__ = [ + 'Qubit', +@@ -307,7 +307,7 @@ def _eval_args(cls, args, nqubits=None): + # that integer with the minimal number of bits. + if len(args) == 1 and args[0] > 1: + #rvalues is the minimum number of bits needed to express the number +- rvalues = reversed(range(bitcount(abs(args[0])))) ++ rvalues = reversed(range(bitcount(args[0]))) + qubit_values = [(args[0] >> i) & 1 for i in rvalues] + return QubitState._eval_args(qubit_values) + # For two numbers, the second number is the number of bits +@@ -319,7 +319,7 @@ def _eval_args(cls, args, nqubits=None): + + @classmethod + def _eval_args_with_nqubits(cls, number, nqubits): +- need = bitcount(abs(number)) ++ need = bitcount(number) + if nqubits < need: + raise ValueError( + 'cannot represent %s with %s bits' % (number, nqubits)) + +From b1adb17b276d45665392c5a397ee4308c07a8f5a Mon Sep 17 00:00:00 2001 +From: Sangyub Lee +Date: Sat, 10 May 2025 20:45:35 +0200 +Subject: [PATCH 2/8] Use mpmath native bit_length + +--- + sympy/ntheory/partitions_.py | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/sympy/ntheory/partitions_.py b/sympy/ntheory/partitions_.py +index ebabdcdf64ac..bcadd0b813c2 100644 +--- a/sympy/ntheory/partitions_.py ++++ b/sympy/ntheory/partitions_.py +@@ -2,7 +2,6 @@ + fone, fhalf, to_int, mpf_mul, mpf_div, mpf_sub, + mpf_add, mpf_sqrt, mpf_pi, mpf_cosh_sinh, mpf_cos, mpf_sin) + from .residue_ntheory import _sqrt_mod_prime_power, is_quad_residue +-from sympy.core.evalf import bitcount + from sympy.utilities.decorator import deprecated + from sympy.utilities.memoization import recurrence_memo + +@@ -237,7 +236,7 @@ def _M(n, N): + # On average, the terms decrease rapidly in magnitude. + # Dynamically reducing the precision greatly improves + # performance. +- p = bitcount(to_int(d)) + 50 ++ p = to_int(d).bit_length() + 50 + return int(to_int(mpf_add(s, fhalf, prec))) + + + +From 942ff9c2452585892c4cd6ff247323f38733b3e4 Mon Sep 17 00:00:00 2001 +From: Sangyub Lee +Date: Sat, 10 May 2025 20:53:05 +0200 +Subject: [PATCH 3/8] Use python native bit_length for qubit + +--- + sympy/physics/quantum/qubit.py | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/sympy/physics/quantum/qubit.py b/sympy/physics/quantum/qubit.py +index 83cb0b0f128f..a1abc856e4b1 100644 +--- a/sympy/physics/quantum/qubit.py ++++ b/sympy/physics/quantum/qubit.py +@@ -10,7 +10,6 @@ + import math + + from sympy.core.add import Add +-from sympy.core.evalf import bitcount + from sympy.core.mul import Mul + from sympy.core.numbers import Integer + from sympy.core.power import Pow +@@ -307,7 +306,7 @@ def _eval_args(cls, args, nqubits=None): + # that integer with the minimal number of bits. + if len(args) == 1 and args[0] > 1: + #rvalues is the minimum number of bits needed to express the number +- rvalues = reversed(range(bitcount(args[0]))) ++ rvalues = reversed(range(int(args[0]).bit_length())) + qubit_values = [(args[0] >> i) & 1 for i in rvalues] + return QubitState._eval_args(qubit_values) + # For two numbers, the second number is the number of bits +@@ -319,7 +318,7 @@ def _eval_args(cls, args, nqubits=None): + + @classmethod + def _eval_args_with_nqubits(cls, number, nqubits): +- need = bitcount(number) ++ need = int(number).bit_length() + if nqubits < need: + raise ValueError( + 'cannot represent %s with %s bits' % (number, nqubits)) + +From 86df1f99890ff1afb01959c382618c5970fcf582 Mon Sep 17 00:00:00 2001 +From: Sangyub Lee +Date: Sat, 10 May 2025 21:41:05 +0200 +Subject: [PATCH 4/8] Remove bitcount from documentations + +--- + sympy/core/evalf.py | 7 +++---- + sympy/core/sympify.py | 4 ++-- + 2 files changed, 5 insertions(+), 6 deletions(-) + +diff --git a/sympy/core/evalf.py b/sympy/core/evalf.py +index da173bf6d21d..97fd66346063 100644 +--- a/sympy/core/evalf.py ++++ b/sympy/core/evalf.py +@@ -83,10 +83,9 @@ class PrecisionExhausted(ArithmeticError): + Explanation + =========== + +->>> from sympy.core.evalf import bitcount + >>> sign, man, exp, bc = 0, 5, 1, 3 + >>> n = [1, -1][sign]*man*2**exp +->>> n, bitcount(man) ++>>> n, man.bit_length() + (10, 3) + + A temporary result is a tuple (re, im, re_acc, im_acc) where +@@ -133,9 +132,9 @@ def fastlog(x: MPF_TUP | None) -> int | Any: + ======== + + >>> from sympy import log +- >>> from sympy.core.evalf import fastlog, bitcount ++ >>> from sympy.core.evalf import fastlog + >>> s, m, e = 0, 5, 1 +- >>> bc = bitcount(m) ++ >>> bc = m.bit_length() + >>> n = [1, -1][s]*m*2**e + >>> n, (log(n)/log(2)).evalf(2), fastlog((s, m, e, bc)) + (10, 3.3, 4) +diff --git a/sympy/core/sympify.py b/sympy/core/sympify.py +index df30fbb85d5f..33a88d98579d 100644 +--- a/sympy/core/sympify.py ++++ b/sympy/core/sympify.py +@@ -202,11 +202,11 @@ def sympify(a, locals=None, convert_xor=True, strict=False, rational=False, + ... + TypeError: unbound method... + +- In order to have ``bitcount`` be recognized it can be imported into a ++ In order to have ``bitcount`` be recognized it can be defined in a + namespace dictionary and passed as locals: + + >>> ns = {} +- >>> exec('from sympy.core.evalf import bitcount', ns) ++ >>> exec('bitcount = lambda n: int(n).bit_length()', ns) + >>> sympify(s, locals=ns) + 6 + + +From 4a660fbabe750c7b8fc7f84521ac3ee10755a7f2 Mon Sep 17 00:00:00 2001 +From: Sangyub Lee +Date: Sat, 10 May 2025 22:08:15 +0200 +Subject: [PATCH 5/8] Use mpz(n).bit_length() + +--- + sympy/core/evalf.py | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/sympy/core/evalf.py b/sympy/core/evalf.py +index 97fd66346063..fa7d8bcdc03a 100644 +--- a/sympy/core/evalf.py ++++ b/sympy/core/evalf.py +@@ -553,7 +553,7 @@ def add_terms(terms: list, prec: int, target_prec: int) -> \ + # first: quick test + if ((delta > working_prec) and + ((not sum_man) or +- delta - bitcount(abs(sum_man)) > working_prec)): ++ delta - MPZ(sum_man).bit_length() > working_prec)): + sum_man = man + sum_exp = exp + else: +@@ -575,7 +575,7 @@ def add_terms(terms: list, prec: int, target_prec: int) -> \ + sum_man = -sum_man + else: + sum_sign = 0 +- sum_bc = bitcount(sum_man) ++ sum_bc = MPZ(sum_man).bit_length() + sum_accuracy = sum_exp + sum_bc - absolute_error + r = normalize(sum_sign, sum_man, sum_exp, sum_bc, target_prec, + rnd), sum_accuracy +@@ -715,7 +715,7 @@ def evalf_mul(v: 'Mul', prec: int, options: OPT_DICT) -> TMP_RES: + acc = min(acc, w_acc) + sign = (direction & 2) >> 1 + if not complex_factors: +- v = normalize(sign, man, exp, bitcount(man), prec, rnd) ++ v = normalize(sign, man, exp, MPZ(man).bit_length(), prec, rnd) + # multiply by i + if direction & 1: + return None, v, None, acc +@@ -725,7 +725,7 @@ def evalf_mul(v: 'Mul', prec: int, options: OPT_DICT) -> TMP_RES: + # initialize with the first term + if (man, exp, bc) != start: + # there was a real part; give it an imaginary part +- re, im = (sign, man, exp, bitcount(man)), (0, MPZ(0), 0, 0) ++ re, im = (sign, man, exp, MPZ(man).bit_length()), (0, MPZ(0), 0, 0) + i0 = 0 + else: + # there is no real part to start (other than the starting 1) + +From 7f32c2d9044e3fce1d42df3ef402fb934c251db7 Mon Sep 17 00:00:00 2001 +From: Sangyub Lee +Date: Sat, 10 May 2025 23:31:52 +0200 +Subject: [PATCH 6/8] Remove redundant MPZ + +--- + sympy/core/evalf.py | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/sympy/core/evalf.py b/sympy/core/evalf.py +index fa7d8bcdc03a..8c2881f2d598 100644 +--- a/sympy/core/evalf.py ++++ b/sympy/core/evalf.py +@@ -553,7 +553,7 @@ def add_terms(terms: list, prec: int, target_prec: int) -> \ + # first: quick test + if ((delta > working_prec) and + ((not sum_man) or +- delta - MPZ(sum_man).bit_length() > working_prec)): ++ delta - sum_man.bit_length() > working_prec)): + sum_man = man + sum_exp = exp + else: +@@ -575,7 +575,7 @@ def add_terms(terms: list, prec: int, target_prec: int) -> \ + sum_man = -sum_man + else: + sum_sign = 0 +- sum_bc = MPZ(sum_man).bit_length() ++ sum_bc = sum_man.bit_length() + sum_accuracy = sum_exp + sum_bc - absolute_error + r = normalize(sum_sign, sum_man, sum_exp, sum_bc, target_prec, + rnd), sum_accuracy +@@ -715,7 +715,7 @@ def evalf_mul(v: 'Mul', prec: int, options: OPT_DICT) -> TMP_RES: + acc = min(acc, w_acc) + sign = (direction & 2) >> 1 + if not complex_factors: +- v = normalize(sign, man, exp, MPZ(man).bit_length(), prec, rnd) ++ v = normalize(sign, man, exp, man.bit_length(), prec, rnd) + # multiply by i + if direction & 1: + return None, v, None, acc +@@ -725,7 +725,7 @@ def evalf_mul(v: 'Mul', prec: int, options: OPT_DICT) -> TMP_RES: + # initialize with the first term + if (man, exp, bc) != start: + # there was a real part; give it an imaginary part +- re, im = (sign, man, exp, MPZ(man).bit_length()), (0, MPZ(0), 0, 0) ++ re, im = (sign, man, exp, man.bit_length()), (0, MPZ(0), 0, 0) + i0 = 0 + else: + # there is no real part to start (other than the starting 1) + +From 4cdb80777410909085e500a5bd1cf8397b869112 Mon Sep 17 00:00:00 2001 +From: Sangyub Lee +Date: Sun, 11 May 2025 01:10:33 +0200 +Subject: [PATCH 7/8] Remove extra mpz + +--- + sympy/core/numbers.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sympy/core/numbers.py b/sympy/core/numbers.py +index 4d9c65132dd2..46424fb5579b 100644 +--- a/sympy/core/numbers.py ++++ b/sympy/core/numbers.py +@@ -910,7 +910,7 @@ def __new__(cls, num, dps=None, precision=None): + # don't compute number or else it may + # over/underflow + return Float._new( +- (num[0], num[1], num[2], MPZ(num[1]).bit_length()), ++ (num[0], num[1], num[2], num[1].bit_length(), + precision) + elif isinstance(num, (Number, NumberSymbol)): + _mpf_ = num._as_mpf_val(precision) + +From e0a7d9121432ce94bd2cf90b4502abed34231d88 Mon Sep 17 00:00:00 2001 +From: Sangyub Lee +Date: Sun, 11 May 2025 01:13:09 +0200 +Subject: [PATCH 8/8] Fix syntax error + +--- + sympy/core/numbers.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sympy/core/numbers.py b/sympy/core/numbers.py +index 46424fb5579b..2425e0c081f2 100644 +--- a/sympy/core/numbers.py ++++ b/sympy/core/numbers.py +@@ -910,7 +910,7 @@ def __new__(cls, num, dps=None, precision=None): + # don't compute number or else it may + # over/underflow + return Float._new( +- (num[0], num[1], num[2], num[1].bit_length(), ++ (num[0], num[1], num[2], num[1].bit_length()), + precision) + elif isinstance(num, (Number, NumberSymbol)): + _mpf_ = num._as_mpf_val(precision) diff --git a/srcpkgs/python3-sympy/patches/29250.patch b/srcpkgs/python3-sympy/patches/29250.patch new file mode 100644 index 00000000000000..004078f0a5f152 --- /dev/null +++ b/srcpkgs/python3-sympy/patches/29250.patch @@ -0,0 +1,71 @@ +Backported from https://github.com/sympy/sympy/pull/29250 + +--- a/sympy/core/evalf.py ++++ b/sympy/core/evalf.py +@@ -13,7 +13,7 @@ + from mpmath import inf as mpmath_inf + from mpmath.libmp import (from_int, from_man_exp, from_rational, fhalf, + fnan, finf, fninf, fnone, fone, fzero, mpf_abs, mpf_add, +- mpf_atan, mpf_atan2, mpf_cmp, mpf_cos, mpf_e, mpf_exp, mpf_log, mpf_lt, ++ mpf_atan, mpf_atan2, mpf_cmp, mpf_cos, mpf_e, mpf_exp, mpf_ln, mpf_lt, + mpf_mul, mpf_neg, mpf_pi, mpf_pow, mpf_pow_int, mpf_shift, mpf_sin, + mpf_sqrt, normalize, round_nearest, to_int, to_str, mpf_tan) + from mpmath.libmp import bitcount as mpmath_bitcount +@@ -992,7 +992,7 @@ + + imaginary_term = (mpf_cmp(xre, fzero) < 0) + +- re = mpf_log(mpf_abs(xre), prec, rnd) ++ re = mpf_ln(mpf_abs(xre), prec, rnd) + size = fastlog(re) + if prec - size > workprec and re != fzero: + from .add import Add +@@ -1001,7 +1001,7 @@ + xre, xim, _, _ = evalf_add(add, prec, options) + prec2 = workprec - fastlog(xre) + # xre is now x - 1 so we add 1 back here to calculate x +- re = mpf_log(mpf_abs(mpf_add(xre, fone, prec2)), prec, rnd) ++ re = mpf_ln(mpf_abs(mpf_add(xre, fone, prec2)), prec, rnd) + + re_acc = prec + +--- a/sympy/core/expr.py ++++ b/sympy/core/expr.py +@@ -18,7 +18,7 @@ + from sympy.utilities.exceptions import sympy_deprecation_warning + from sympy.utilities.misc import as_int, func_name, filldedent + from sympy.utilities.iterables import has_variety, sift +-from mpmath.libmp import mpf_log, prec_to_dps ++from mpmath.libmp import mpf_ln, prec_to_dps + from mpmath.libmp.libintmath import giant_steps + + +@@ -4065,7 +4065,7 @@ + try: + mag_first_dig = int(ceil(log10(xpos))) + except (ValueError, OverflowError): +- mag_first_dig = int(ceil(Float(mpf_log(xpos._mpf_, 53))/log(10))) ++ mag_first_dig = int(ceil(Float(mpf_ln(xpos._mpf_, 53))/log(10))) + # check that we aren't off by 1 + if (xpos/S(10)**mag_first_dig) >= 1: + assert 1 <= (xpos/S(10)**mag_first_dig) < 10 +--- a/sympy/polys/polytools.py ++++ b/sympy/polys/polytools.py +@@ -3726,7 +3726,7 @@ + try: + # We need to add extra precision to guard against losing accuracy. + # 10 times the degree of the polynomial seems to work well. +- roots = mpmath.polyroots(coeffs, maxsteps=maxsteps, ++ roots = mpmath.polyroots(coeffs, maxsteps=maxsteps, asc=False, + cleanup=cleanup, error=False, extraprec=f.degree()*10) + + # Mpmath puts real roots first, then complex ones (as does all_roots) +@@ -3736,7 +3736,7 @@ + except NoConvergence: + try: + # If roots did not converge try again with more extra precision. +- roots = mpmath.polyroots(coeffs, maxsteps=maxsteps, ++ roots = mpmath.polyroots(coeffs, maxsteps=maxsteps, asc=False, + cleanup=cleanup, error=False, extraprec=f.degree()*15) + roots = list(map(sympify, + sorted(roots, key=lambda r: (1 if r.imag else 0, r.real, abs(r.imag), sign(r.imag))))) diff --git a/srcpkgs/python3-sympy/template b/srcpkgs/python3-sympy/template index 116d184de077ab..9225017fbf52e1 100644 --- a/srcpkgs/python3-sympy/template +++ b/srcpkgs/python3-sympy/template @@ -1,7 +1,7 @@ # Template file for 'python3-sympy' pkgname=python3-sympy version=1.14.0 -revision=2 +revision=3 build_style=python3-pep517 hostmakedepends="python3-setuptools python3-wheel" depends="python3-mpmath" diff --git a/srcpkgs/sagemath/patches/40520-Use_accelerate_for_Conda_on_macos.patch b/srcpkgs/sagemath/patches/40520-Use_accelerate_for_Conda_on_macos.patch deleted file mode 100644 index 43d0dc9938bb7d..00000000000000 --- a/srcpkgs/sagemath/patches/40520-Use_accelerate_for_Conda_on_macos.patch +++ /dev/null @@ -1,2003 +0,0 @@ -diff --git a/src/sage/algebras/finite_dimensional_algebras/meson.build b/src/sage/algebras/finite_dimensional_algebras/meson.build -index 5cf644da91b..7f13ad17471 100644 ---- a/src/sage/algebras/finite_dimensional_algebras/meson.build -+++ b/src/sage/algebras/finite_dimensional_algebras/meson.build -@@ -10,7 +10,7 @@ py.install_sources( - ) - - extension_data = { -- 'finite_dimensional_algebra_element' : files( -+ 'finite_dimensional_algebra_element': files( - 'finite_dimensional_algebra_element.pyx', - ), - } -diff --git a/src/sage/algebras/fusion_rings/meson.build b/src/sage/algebras/fusion_rings/meson.build -index 4dec6963a36..ca204c31ec0 100644 ---- a/src/sage/algebras/fusion_rings/meson.build -+++ b/src/sage/algebras/fusion_rings/meson.build -@@ -16,7 +16,7 @@ py.install_sources( - ) - - extension_data = { -- 'fast_parallel_fusion_ring_braid_repn' : files( -+ 'fast_parallel_fusion_ring_braid_repn': files( - 'fast_parallel_fusion_ring_braid_repn.pyx', - ), - } -diff --git a/src/sage/algebras/lie_algebras/meson.build b/src/sage/algebras/lie_algebras/meson.build -index b08b21eaf80..f4df322b84b 100644 ---- a/src/sage/algebras/lie_algebras/meson.build -+++ b/src/sage/algebras/lie_algebras/meson.build -@@ -29,7 +29,7 @@ py.install_sources( - subdir: 'sage/algebras/lie_algebras', - ) - --extension_data = {'lie_algebra_element' : files('lie_algebra_element.pyx')} -+extension_data = {'lie_algebra_element': files('lie_algebra_element.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/algebras/meson.build b/src/sage/algebras/meson.build -index 59262513251..3ea2e21c30f 100644 ---- a/src/sage/algebras/meson.build -+++ b/src/sage/algebras/meson.build -@@ -48,9 +48,9 @@ py.install_sources( - ) - - extension_data = { -- 'clifford_algebra_element' : files('clifford_algebra_element.pyx'), -- 'exterior_algebra_groebner' : files('exterior_algebra_groebner.pyx'), -- 'octonion_algebra' : files('octonion_algebra.pyx'), -+ 'clifford_algebra_element': files('clifford_algebra_element.pyx'), -+ 'exterior_algebra_groebner': files('exterior_algebra_groebner.pyx'), -+ 'octonion_algebra': files('octonion_algebra.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/arith/meson.build b/src/sage/arith/meson.build -index b11957b8743..335ac643b80 100644 ---- a/src/sage/arith/meson.build -+++ b/src/sage/arith/meson.build -@@ -19,12 +19,12 @@ py.install_sources( - ) - - extension_data = { -- 'functions' : files('functions.pyx'), -- 'multi_modular' : files('multi_modular.pyx'), -- 'numerical_approx' : files('numerical_approx.pyx'), -- 'power' : files('power.pyx'), -- 'rational_reconstruction' : files('rational_reconstruction.pyx'), -- 'srange' : files('srange.pyx'), -+ 'functions': files('functions.pyx'), -+ 'multi_modular': files('multi_modular.pyx'), -+ 'numerical_approx': files('numerical_approx.pyx'), -+ 'power': files('power.pyx'), -+ 'rational_reconstruction': files('rational_reconstruction.pyx'), -+ 'srange': files('srange.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/calculus/meson.build b/src/sage/calculus/meson.build -index 60f5cac8614..a90345327d8 100644 ---- a/src/sage/calculus/meson.build -+++ b/src/sage/calculus/meson.build -@@ -22,12 +22,12 @@ py.install_sources( - ) - - extension_data = { -- 'integration' : files('integration.pyx'), -- 'interpolation' : files('interpolation.pyx'), -- 'interpolators' : files('interpolators.pyx'), -- 'ode' : files('ode.pyx'), -- 'riemann' : files('riemann.pyx'), -- 'var' : files('var.pyx'), -+ 'integration': files('integration.pyx'), -+ 'interpolation': files('interpolation.pyx'), -+ 'interpolators': files('interpolators.pyx'), -+ 'ode': files('ode.pyx'), -+ 'riemann': files('riemann.pyx'), -+ 'var': files('var.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/calculus/transforms/meson.build b/src/sage/calculus/transforms/meson.build -index 3876840f7cc..568602ac5d5 100644 ---- a/src/sage/calculus/transforms/meson.build -+++ b/src/sage/calculus/transforms/meson.build -@@ -9,7 +9,7 @@ py.install_sources( - subdir: 'sage/calculus/transforms', - ) - --extension_data = {'dwt' : files('dwt.pyx'), 'fft' : files('fft.pyx')} -+extension_data = {'dwt': files('dwt.pyx'), 'fft': files('fft.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/categories/examples/meson.build b/src/sage/categories/examples/meson.build -index 41580a11cca..b249a5d9be9 100644 ---- a/src/sage/categories/examples/meson.build -+++ b/src/sage/categories/examples/meson.build -@@ -37,7 +37,7 @@ py.install_sources( - subdir: 'sage/categories/examples', - ) - --extension_data = {'semigroups_cython' : files('semigroups_cython.pyx')} -+extension_data = {'semigroups_cython': files('semigroups_cython.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/categories/meson.build b/src/sage/categories/meson.build -index 984e8d50d99..ae9f9072852 100644 ---- a/src/sage/categories/meson.build -+++ b/src/sage/categories/meson.build -@@ -210,13 +210,13 @@ py.install_sources( - ) - - extension_data = { -- 'action' : files('action.pyx'), -- 'category_cy_helper' : files('category_cy_helper.pyx'), -- 'category_singleton' : files('category_singleton.pyx'), -- 'coercion_methods' : files('coercion_methods.pyx'), -- 'functor' : files('functor.pyx'), -- 'map' : files('map.pyx'), -- 'morphism' : files('morphism.pyx'), -+ 'action': files('action.pyx'), -+ 'category_cy_helper': files('category_cy_helper.pyx'), -+ 'category_singleton': files('category_singleton.pyx'), -+ 'coercion_methods': files('coercion_methods.pyx'), -+ 'functor': files('functor.pyx'), -+ 'map': files('map.pyx'), -+ 'morphism': files('morphism.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/coding/codecan/meson.build b/src/sage/coding/codecan/meson.build -index 67e74deea79..e88c99dccaf 100644 ---- a/src/sage/coding/codecan/meson.build -+++ b/src/sage/coding/codecan/meson.build -@@ -8,8 +8,8 @@ py.install_sources( - ) - - extension_data = { -- 'autgroup_can_label' : files('autgroup_can_label.pyx'), -- 'codecan' : files('codecan.pyx'), -+ 'autgroup_can_label': files('autgroup_can_label.pyx'), -+ 'codecan': files('codecan.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/coding/meson.build b/src/sage/coding/meson.build -index 8e042ee0a5a..f22db3d34a5 100644 ---- a/src/sage/coding/meson.build -+++ b/src/sage/coding/meson.build -@@ -42,9 +42,9 @@ py.install_sources( - ) - - extension_data = { -- 'ag_code_decoders' : files('ag_code_decoders.pyx'), -- 'binary_code' : files('binary_code.pyx'), -- 'kasami_codes' : files('kasami_codes.pyx'), -+ 'ag_code_decoders': files('ag_code_decoders.pyx'), -+ 'binary_code': files('binary_code.pyx'), -+ 'kasami_codes': files('kasami_codes.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/combinat/crystals/meson.build b/src/sage/combinat/crystals/meson.build -index ee8da89b536..7353b581a7c 100644 ---- a/src/sage/combinat/crystals/meson.build -+++ b/src/sage/combinat/crystals/meson.build -@@ -44,10 +44,10 @@ py.install_sources( - ) - - extension_data = { -- 'letters' : files('letters.pyx'), -- 'pbw_datum' : files('pbw_datum.pyx'), -- 'spins' : files('spins.pyx'), -- 'tensor_product_element' : files('tensor_product_element.pyx'), -+ 'letters': files('letters.pyx'), -+ 'pbw_datum': files('pbw_datum.pyx'), -+ 'spins': files('spins.pyx'), -+ 'tensor_product_element': files('tensor_product_element.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/combinat/designs/meson.build b/src/sage/combinat/designs/meson.build -index 6f835bac5d1..1553c59f2e8 100644 ---- a/src/sage/combinat/designs/meson.build -+++ b/src/sage/combinat/designs/meson.build -@@ -29,13 +29,13 @@ py.install_sources( - ) - - extension_data = { -- 'designs_pyx' : files('designs_pyx.pyx'), -- 'evenly_distributed_sets' : files('evenly_distributed_sets.pyx'), -- 'gen_quadrangles_with_spread' : files('gen_quadrangles_with_spread.pyx'), -- 'orthogonal_arrays_find_recursive' : files( -+ 'designs_pyx': files('designs_pyx.pyx'), -+ 'evenly_distributed_sets': files('evenly_distributed_sets.pyx'), -+ 'gen_quadrangles_with_spread': files('gen_quadrangles_with_spread.pyx'), -+ 'orthogonal_arrays_find_recursive': files( - 'orthogonal_arrays_find_recursive.pyx', - ), -- 'subhypergraph_search' : files('subhypergraph_search.pyx'), -+ 'subhypergraph_search': files('subhypergraph_search.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/combinat/integer_lists/meson.build b/src/sage/combinat/integer_lists/meson.build -index cf3521f832c..3008fe329dc 100644 ---- a/src/sage/combinat/integer_lists/meson.build -+++ b/src/sage/combinat/integer_lists/meson.build -@@ -9,7 +9,7 @@ py.install_sources( - subdir: 'sage/combinat/integer_lists', - ) - --extension_data = {'base' : files('base.pyx'), 'invlex' : files('invlex.pyx')} -+extension_data = {'base': files('base.pyx'), 'invlex': files('invlex.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/combinat/meson.build b/src/sage/combinat/meson.build -index 9ee037678c8..bcd9d93a801 100644 ---- a/src/sage/combinat/meson.build -+++ b/src/sage/combinat/meson.build -@@ -145,17 +145,17 @@ py.install_sources( - ) - - extension_data = { -- 'combinat_cython' : files('combinat_cython.pyx'), -- 'debruijn_sequence' : files('debruijn_sequence.pyx'), -- 'degree_sequences' : files('degree_sequences.pyx'), -- 'enumeration_mod_permgroup' : files('enumeration_mod_permgroup.pyx'), -- 'expnums' : files('expnums.pyx'), -- 'fast_vector_partitions' : files('fast_vector_partitions.pyx'), -- 'partitions' : files('partitions.pyx'), -- 'permutation_cython' : files('permutation_cython.pyx'), -- 'q_bernoulli' : files('q_bernoulli.pyx'), -- 'set_partition_iterator' : files('set_partition_iterator.pyx'), -- 'subword_complex_c' : files('subword_complex_c.pyx'), -+ 'combinat_cython': files('combinat_cython.pyx'), -+ 'debruijn_sequence': files('debruijn_sequence.pyx'), -+ 'degree_sequences': files('degree_sequences.pyx'), -+ 'enumeration_mod_permgroup': files('enumeration_mod_permgroup.pyx'), -+ 'expnums': files('expnums.pyx'), -+ 'fast_vector_partitions': files('fast_vector_partitions.pyx'), -+ 'partitions': files('partitions.pyx'), -+ 'permutation_cython': files('permutation_cython.pyx'), -+ 'q_bernoulli': files('q_bernoulli.pyx'), -+ 'set_partition_iterator': files('set_partition_iterator.pyx'), -+ 'subword_complex_c': files('subword_complex_c.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/combinat/posets/meson.build b/src/sage/combinat/posets/meson.build -index 32c323c9dd0..ef7555d8465 100644 ---- a/src/sage/combinat/posets/meson.build -+++ b/src/sage/combinat/posets/meson.build -@@ -22,9 +22,9 @@ py.install_sources( - ) - - extension_data = { -- 'hasse_cython' : files('hasse_cython.pyx'), -- 'hasse_cython_flint' : files('hasse_cython_flint.pyx'), -- 'linear_extension_iterator' : files('linear_extension_iterator.pyx'), -+ 'hasse_cython': files('hasse_cython.pyx'), -+ 'hasse_cython_flint': files('hasse_cython_flint.pyx'), -+ 'linear_extension_iterator': files('linear_extension_iterator.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/combinat/rigged_configurations/meson.build b/src/sage/combinat/rigged_configurations/meson.build -index 549150d8ea6..c4422d13c7b 100644 ---- a/src/sage/combinat/rigged_configurations/meson.build -+++ b/src/sage/combinat/rigged_configurations/meson.build -@@ -27,7 +27,7 @@ py.install_sources( - subdir: 'sage/combinat/rigged_configurations', - ) - --extension_data = {'rigged_partition' : files('rigged_partition.pyx')} -+extension_data = {'rigged_partition': files('rigged_partition.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/combinat/root_system/meson.build b/src/sage/combinat/root_system/meson.build -index 66c596818b9..c79fedc2f4d 100644 ---- a/src/sage/combinat/root_system/meson.build -+++ b/src/sage/combinat/root_system/meson.build -@@ -62,9 +62,9 @@ py.install_sources( - ) - - extension_data = { -- 'braid_orbit' : files('braid_orbit.pyx'), -- 'reflection_group_c' : files('reflection_group_c.pyx'), -- 'reflection_group_element' : files('reflection_group_element.pyx'), -+ 'braid_orbit': files('braid_orbit.pyx'), -+ 'reflection_group_c': files('reflection_group_c.pyx'), -+ 'reflection_group_element': files('reflection_group_element.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/combinat/words/meson.build b/src/sage/combinat/words/meson.build -index 943528e2fa1..1fa9bf3baee 100644 ---- a/src/sage/combinat/words/meson.build -+++ b/src/sage/combinat/words/meson.build -@@ -23,8 +23,8 @@ py.install_sources( - ) - - extension_data = { -- 'word_char' : files('word_char.pyx'), -- 'word_datatypes' : files('word_datatypes.pyx'), -+ 'word_char': files('word_char.pyx'), -+ 'word_datatypes': files('word_datatypes.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/cpython/meson.build b/src/sage/cpython/meson.build -index 850d414b24f..e675ca84dad 100644 ---- a/src/sage/cpython/meson.build -+++ b/src/sage/cpython/meson.build -@@ -28,14 +28,14 @@ py.install_sources( - ) - - extension_data = { -- 'atexit' : files('atexit.pyx'), -- 'builtin_types' : files('builtin_types.pyx'), -- 'cython_metaclass' : files('cython_metaclass.pyx'), -- 'debug' : files('debug.pyx'), -- 'dict_del_by_value' : files('dict_del_by_value.pyx'), -- 'getattr' : files('getattr.pyx'), -- 'string' : files('string.pyx'), -- 'type' : files('type.pyx'), -+ 'atexit': files('atexit.pyx'), -+ 'builtin_types': files('builtin_types.pyx'), -+ 'cython_metaclass': files('cython_metaclass.pyx'), -+ 'debug': files('debug.pyx'), -+ 'dict_del_by_value': files('dict_del_by_value.pyx'), -+ 'getattr': files('getattr.pyx'), -+ 'string': files('string.pyx'), -+ 'type': files('type.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/crypto/meson.build b/src/sage/crypto/meson.build -index 62d6f49faa5..102a606c32b 100644 ---- a/src/sage/crypto/meson.build -+++ b/src/sage/crypto/meson.build -@@ -19,8 +19,8 @@ py.install_sources( - ) - - extension_data = { -- 'boolean_function' : files('boolean_function.pyx'), -- 'sbox' : files('sbox.pyx'), -+ 'boolean_function': files('boolean_function.pyx'), -+ 'sbox': files('sbox.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/data_structures/meson.build b/src/sage/data_structures/meson.build -index f0f33d885cb..0cc6d13bf83 100644 ---- a/src/sage/data_structures/meson.build -+++ b/src/sage/data_structures/meson.build -@@ -25,12 +25,12 @@ py.install_sources( - ) - - extension_data = { -- 'binary_search' : files('binary_search.pyx'), -- 'bitset' : files('bitset.pyx'), -- 'bitset_base' : files('bitset_base.pyx'), -- 'blas_dict' : files('blas_dict.pyx'), -- 'bounded_integer_sequences' : files('bounded_integer_sequences.pyx'), -- 'list_of_pairs' : files('list_of_pairs.pyx'), -+ 'binary_search': files('binary_search.pyx'), -+ 'bitset': files('bitset.pyx'), -+ 'bitset_base': files('bitset_base.pyx'), -+ 'blas_dict': files('blas_dict.pyx'), -+ 'bounded_integer_sequences': files('bounded_integer_sequences.pyx'), -+ 'list_of_pairs': files('list_of_pairs.pyx'), - } - - foreach name, pyx : extension_data -@@ -49,7 +49,7 @@ foreach name, pyx : extension_data - ) - endforeach - --extension_data_cpp = {'pairing_heap' : files('pairing_heap.pyx')} -+extension_data_cpp = {'pairing_heap': files('pairing_heap.pyx')} - - foreach name, pyx : extension_data_cpp - py.extension_module( -diff --git a/src/sage/dynamics/arithmetic_dynamics/meson.build b/src/sage/dynamics/arithmetic_dynamics/meson.build -index 6f56eb5d8cd..ca46499c713 100644 ---- a/src/sage/dynamics/arithmetic_dynamics/meson.build -+++ b/src/sage/dynamics/arithmetic_dynamics/meson.build -@@ -14,7 +14,7 @@ py.install_sources( - subdir: 'sage/dynamics/arithmetic_dynamics', - ) - --extension_data = {'projective_ds_helper' : files('projective_ds_helper.pyx')} -+extension_data = {'projective_ds_helper': files('projective_ds_helper.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/dynamics/complex_dynamics/meson.build b/src/sage/dynamics/complex_dynamics/meson.build -index f39e2237898..5319488776e 100644 ---- a/src/sage/dynamics/complex_dynamics/meson.build -+++ b/src/sage/dynamics/complex_dynamics/meson.build -@@ -6,7 +6,7 @@ py.install_sources( - subdir: 'sage/dynamics/complex_dynamics', - ) - --extension_data = {'mandel_julia_helper' : files('mandel_julia_helper.pyx')} -+extension_data = {'mandel_julia_helper': files('mandel_julia_helper.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/env.py b/src/sage/env.py -index 57b7371dd6a..6c3df0d93a7 100644 ---- a/src/sage/env.py -+++ b/src/sage/env.py -@@ -324,17 +324,8 @@ def sage_include_directories(use_sources=False): - return dirs - - --def get_cblas_pc_module_name() -> str: -- """ -- Return the name of the BLAS libraries to be used. -- """ -- import pkgconfig -- cblas_pc_modules = CBLAS_PC_MODULES.split(':') -- return next(blas_lib for blas_lib in cblas_pc_modules if pkgconfig.exists(blas_lib)) -- -- - default_required_modules = ('fflas-ffpack', 'givaro', 'gsl', 'linbox', 'Singular', -- 'libpng', 'gdlib', 'm4ri', 'zlib', 'cblas', 'ecl') -+ 'libpng', 'gdlib', 'm4ri', 'zlib', 'ecl') - - - default_optional_modules = ('lapack',) -@@ -359,7 +350,7 @@ def cython_aliases(required_modules=None, optional_modules=None): - sage: cython_aliases() - {...} - sage: sorted(cython_aliases().keys()) -- ['CBLAS_CFLAGS', -+ ['ECL_CFLAGS', - ..., - 'ZLIB_LIBRARIES'] - sage: cython_aliases(required_modules=('module-that-is-assumed-to-not-exist')) -@@ -406,8 +397,6 @@ def cython_aliases(required_modules=None, optional_modules=None): - for lib, required in itertools.chain(((lib, True) for lib in required_modules), - ((lib, False) for lib in optional_modules)): - var = lib.upper().replace("-", "") + "_" -- if lib == 'cblas': -- lib = get_cblas_pc_module_name() - if lib == 'zlib': - aliases[var + "CFLAGS"] = "" - try: -diff --git a/src/sage/ext/interpreters/meson.build b/src/sage/ext/interpreters/meson.build -index f965ce83da0..8445b7028c5 100644 ---- a/src/sage/ext/interpreters/meson.build -+++ b/src/sage/ext/interpreters/meson.build -@@ -41,12 +41,12 @@ interpreters = custom_target( - #endforeach - - extension_data = { -- 'wrapper_cc' : interpreters[7], -- 'wrapper_cdf' : interpreters[9], -- 'wrapper_el' : interpreters[11], -- 'wrapper_py' : interpreters[13], -- 'wrapper_rdf' : interpreters[15], -- 'wrapper_rr' : interpreters[17], -+ 'wrapper_cc': interpreters[7], -+ 'wrapper_cdf': interpreters[9], -+ 'wrapper_el': interpreters[11], -+ 'wrapper_py': interpreters[13], -+ 'wrapper_rdf': interpreters[15], -+ 'wrapper_rr': interpreters[17], - } - - interpreters_dep = declare_dependency( -diff --git a/src/sage/ext/meson.build b/src/sage/ext/meson.build -index 3c8ee5056d8..833684f832a 100644 ---- a/src/sage/ext/meson.build -+++ b/src/sage/ext/meson.build -@@ -14,9 +14,9 @@ py.install_sources( - ) - - extension_data = { -- 'fast_callable' : files('fast_callable.pyx'), -- 'fast_eval' : files('fast_eval.pyx'), -- 'memory' : files('memory.pyx'), -+ 'fast_callable': files('fast_callable.pyx'), -+ 'fast_eval': files('fast_eval.pyx'), -+ 'memory': files('memory.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/functions/meson.build b/src/sage/functions/meson.build -index c37ec96e9ff..2616fd37e50 100644 ---- a/src/sage/functions/meson.build -+++ b/src/sage/functions/meson.build -@@ -24,7 +24,7 @@ py.install_sources( - subdir: 'sage/functions', - ) - --extension_data = {'prime_pi' : files('prime_pi.pyx')} -+extension_data = {'prime_pi': files('prime_pi.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/games/meson.build b/src/sage/games/meson.build -index 11e322b4f67..d2aada916b1 100644 ---- a/src/sage/games/meson.build -+++ b/src/sage/games/meson.build -@@ -8,7 +8,7 @@ py.install_sources( - subdir: 'sage/games', - ) - --extension_data = {'sudoku_backtrack' : files('sudoku_backtrack.pyx')} -+extension_data = {'sudoku_backtrack': files('sudoku_backtrack.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/geometry/meson.build b/src/sage/geometry/meson.build -index 2acd9926344..25cef06e740 100644 ---- a/src/sage/geometry/meson.build -+++ b/src/sage/geometry/meson.build -@@ -30,12 +30,12 @@ py.install_sources( - ) - - extension_data = { -- 'abc' : files('abc.pyx'), -- 'integral_points_generic_dense' : files('integral_points_generic_dense.pyx'), -- 'integral_points_integer_dense' : files('integral_points_integer_dense.pyx'), -- 'palp_normal_form' : files('palp_normal_form.pyx'), -- 'point_collection' : files('point_collection.pyx'), -- 'toric_lattice_element' : files('toric_lattice_element.pyx'), -+ 'abc': files('abc.pyx'), -+ 'integral_points_generic_dense': files('integral_points_generic_dense.pyx'), -+ 'integral_points_integer_dense': files('integral_points_integer_dense.pyx'), -+ 'palp_normal_form': files('palp_normal_form.pyx'), -+ 'point_collection': files('point_collection.pyx'), -+ 'toric_lattice_element': files('toric_lattice_element.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/geometry/polyhedron/combinatorial_polyhedron/meson.build b/src/sage/geometry/polyhedron/combinatorial_polyhedron/meson.build -index a183940837c..9d023ed141d 100644 ---- a/src/sage/geometry/polyhedron/combinatorial_polyhedron/meson.build -+++ b/src/sage/geometry/polyhedron/combinatorial_polyhedron/meson.build -@@ -20,13 +20,13 @@ py.install_sources( - ) - - extension_data = { -- 'base' : files('base.pyx'), -- 'combinatorial_face' : files('combinatorial_face.pyx'), -- 'conversions' : files('conversions.pyx'), -- 'face_iterator' : files('face_iterator.pyx'), -- 'face_list_data_structure' : files('face_list_data_structure.pyx'), -- 'list_of_faces' : files('list_of_faces.pyx'), -- 'polyhedron_face_lattice' : files('polyhedron_face_lattice.pyx'), -+ 'base': files('base.pyx'), -+ 'combinatorial_face': files('combinatorial_face.pyx'), -+ 'conversions': files('conversions.pyx'), -+ 'face_iterator': files('face_iterator.pyx'), -+ 'face_list_data_structure': files('face_list_data_structure.pyx'), -+ 'list_of_faces': files('list_of_faces.pyx'), -+ 'polyhedron_face_lattice': files('polyhedron_face_lattice.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/graphs/base/meson.build b/src/sage/graphs/base/meson.build -index 903db152bfe..25922eb6154 100644 ---- a/src/sage/graphs/base/meson.build -+++ b/src/sage/graphs/base/meson.build -@@ -22,11 +22,11 @@ py.install_sources( - ) - - extension_data = { -- 'dense_graph' : files('dense_graph.pyx'), -- 'graph_backends' : files('graph_backends.pyx'), -- 'sparse_graph' : files('sparse_graph.pyx'), -- 'static_dense_graph' : files('static_dense_graph.pyx'), -- 'static_sparse_backend' : files('static_sparse_backend.pyx'), -+ 'dense_graph': files('dense_graph.pyx'), -+ 'graph_backends': files('graph_backends.pyx'), -+ 'sparse_graph': files('sparse_graph.pyx'), -+ 'static_dense_graph': files('static_dense_graph.pyx'), -+ 'static_sparse_backend': files('static_sparse_backend.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/graphs/generators/meson.build b/src/sage/graphs/generators/meson.build -index eda4837c26c..6cbee41a2ef 100644 ---- a/src/sage/graphs/generators/meson.build -+++ b/src/sage/graphs/generators/meson.build -@@ -20,8 +20,8 @@ py.install_sources( - ) - - extension_data = { -- 'distance_regular' : files('distance_regular.pyx'), -- 'trees' : files('trees.pyx'), -+ 'distance_regular': files('distance_regular.pyx'), -+ 'trees': files('trees.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/graphs/graph_decompositions/meson.build b/src/sage/graphs/graph_decompositions/meson.build -index e30b80fac1e..06763ab1771 100644 ---- a/src/sage/graphs/graph_decompositions/meson.build -+++ b/src/sage/graphs/graph_decompositions/meson.build -@@ -31,13 +31,13 @@ py.install_sources( - ) - - extension_data = { -- 'bandwidth' : files('bandwidth.pyx'), -- 'cutwidth' : files('cutwidth.pyx'), -- 'fast_digraph' : files('fast_digraph.pyx'), -- 'graph_products' : files('graph_products.pyx'), -- 'rankwidth' : files('rankwidth.pyx'), -- 'tree_decomposition' : files('tree_decomposition.pyx'), -- 'vertex_separation' : files('vertex_separation.pyx'), -+ 'bandwidth': files('bandwidth.pyx'), -+ 'cutwidth': files('cutwidth.pyx'), -+ 'fast_digraph': files('fast_digraph.pyx'), -+ 'graph_products': files('graph_products.pyx'), -+ 'rankwidth': files('rankwidth.pyx'), -+ 'tree_decomposition': files('tree_decomposition.pyx'), -+ 'vertex_separation': files('vertex_separation.pyx'), - } - - foreach name, pyx : extension_data -@@ -57,8 +57,8 @@ endforeach - - extension_data_cpp = { - 'clique_separators': files('clique_separators.pyx'), -- 'slice_decomposition' : files('slice_decomposition.pyx'), -- 'modular_decomposition' : files('modular_decomposition.pyx'), -+ 'slice_decomposition': files('slice_decomposition.pyx'), -+ 'modular_decomposition': files('modular_decomposition.pyx'), - } - - foreach name, pyx : extension_data_cpp -diff --git a/src/sage/graphs/meson.build b/src/sage/graphs/meson.build -index d55d4013b03..fce249794c7 100644 ---- a/src/sage/graphs/meson.build -+++ b/src/sage/graphs/meson.build -@@ -94,27 +94,27 @@ py.install_sources( - - - extension_data = { -- 'asteroidal_triples' : files('asteroidal_triples.pyx'), -- 'centrality' : files('centrality.pyx'), -- 'chrompoly' : files('chrompoly.pyx'), -- 'cliquer' : files('cliquer.pyx'), -- 'comparability' : files('comparability.pyx'), -- 'connectivity' : files('connectivity.pyx'), -- 'convexity_properties' : files('convexity_properties.pyx'), -- 'distances_all_pairs' : files('distances_all_pairs.pyx'), -- 'generic_graph_pyx' : files('generic_graph_pyx.pyx'), -- 'genus' : files('genus.pyx'), -- 'graph_generators_pyx' : files('graph_generators_pyx.pyx'), -- 'hyperbolicity' : files('hyperbolicity.pyx'), -- 'independent_sets' : files('independent_sets.pyx'), -- 'isoperimetric_inequalities' : files('isoperimetric_inequalities.pyx'), -- 'line_graph' : files('line_graph.pyx'), -- 'matchpoly' : files('matchpoly.pyx'), -- 'planarity' : files('planarity.pyx'), -- 'spanning_tree' : files('spanning_tree.pyx'), -- 'strongly_regular_db' : files('strongly_regular_db.pyx'), -- 'views' : files('views.pyx'), -- 'weakly_chordal' : files('weakly_chordal.pyx'), -+ 'asteroidal_triples': files('asteroidal_triples.pyx'), -+ 'centrality': files('centrality.pyx'), -+ 'chrompoly': files('chrompoly.pyx'), -+ 'cliquer': files('cliquer.pyx'), -+ 'comparability': files('comparability.pyx'), -+ 'connectivity': files('connectivity.pyx'), -+ 'convexity_properties': files('convexity_properties.pyx'), -+ 'distances_all_pairs': files('distances_all_pairs.pyx'), -+ 'generic_graph_pyx': files('generic_graph_pyx.pyx'), -+ 'genus': files('genus.pyx'), -+ 'graph_generators_pyx': files('graph_generators_pyx.pyx'), -+ 'hyperbolicity': files('hyperbolicity.pyx'), -+ 'independent_sets': files('independent_sets.pyx'), -+ 'isoperimetric_inequalities': files('isoperimetric_inequalities.pyx'), -+ 'line_graph': files('line_graph.pyx'), -+ 'matchpoly': files('matchpoly.pyx'), -+ 'planarity': files('planarity.pyx'), -+ 'spanning_tree': files('spanning_tree.pyx'), -+ 'strongly_regular_db': files('strongly_regular_db.pyx'), -+ 'views': files('views.pyx'), -+ 'weakly_chordal': files('weakly_chordal.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/groups/matrix_gps/meson.build b/src/sage/groups/matrix_gps/meson.build -index 00ab019a0b1..0faf67b8329 100644 ---- a/src/sage/groups/matrix_gps/meson.build -+++ b/src/sage/groups/matrix_gps/meson.build -@@ -29,8 +29,8 @@ py.install_sources( - ) - - extension_data = { -- 'group_element' : files('group_element.pyx'), -- 'group_element_gap' : files('group_element_gap.pyx'), -+ 'group_element': files('group_element.pyx'), -+ 'group_element_gap': files('group_element_gap.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/groups/meson.build b/src/sage/groups/meson.build -index 256c3a76b92..86c294ea3ce 100644 ---- a/src/sage/groups/meson.build -+++ b/src/sage/groups/meson.build -@@ -33,8 +33,8 @@ py.install_sources( - ) - - extension_data = { -- 'group' : files('group.pyx'), -- 'libgap_wrapper' : files('libgap_wrapper.pyx'), -+ 'group': files('group.pyx'), -+ 'libgap_wrapper': files('libgap_wrapper.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/groups/perm_gps/meson.build b/src/sage/groups/perm_gps/meson.build -index 0ea630f847d..1c3461bea81 100644 ---- a/src/sage/groups/perm_gps/meson.build -+++ b/src/sage/groups/perm_gps/meson.build -@@ -13,7 +13,7 @@ py.install_sources( - subdir: 'sage/groups/perm_gps', - ) - --extension_data = {'permgroup_element' : files('permgroup_element.pyx')} -+extension_data = {'permgroup_element': files('permgroup_element.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/groups/perm_gps/partn_ref/meson.build b/src/sage/groups/perm_gps/partn_ref/meson.build -index 3e5687721ec..c047b23bd03 100644 ---- a/src/sage/groups/perm_gps/partn_ref/meson.build -+++ b/src/sage/groups/perm_gps/partn_ref/meson.build -@@ -25,18 +25,18 @@ py.install_sources( - ) - - extension_data = { -- 'automorphism_group_canonical_label' : files( -+ 'automorphism_group_canonical_label': files( - 'automorphism_group_canonical_label.pyx', - ), -- 'canonical_augmentation' : files('canonical_augmentation.pyx'), -- 'data_structures' : files('data_structures.pyx'), -- 'double_coset' : files('double_coset.pyx'), -- 'refinement_binary' : files('refinement_binary.pyx'), -- 'refinement_graphs' : files('refinement_graphs.pyx'), -- 'refinement_lists' : files('refinement_lists.pyx'), -- 'refinement_matrices' : files('refinement_matrices.pyx'), -- 'refinement_python' : files('refinement_python.pyx'), -- 'refinement_sets' : files('refinement_sets.pyx'), -+ 'canonical_augmentation': files('canonical_augmentation.pyx'), -+ 'data_structures': files('data_structures.pyx'), -+ 'double_coset': files('double_coset.pyx'), -+ 'refinement_binary': files('refinement_binary.pyx'), -+ 'refinement_graphs': files('refinement_graphs.pyx'), -+ 'refinement_lists': files('refinement_lists.pyx'), -+ 'refinement_matrices': files('refinement_matrices.pyx'), -+ 'refinement_python': files('refinement_python.pyx'), -+ 'refinement_sets': files('refinement_sets.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/groups/perm_gps/partn_ref2/meson.build b/src/sage/groups/perm_gps/partn_ref2/meson.build -index 55e2ad83c52..7d0da166ddc 100644 ---- a/src/sage/groups/perm_gps/partn_ref2/meson.build -+++ b/src/sage/groups/perm_gps/partn_ref2/meson.build -@@ -6,7 +6,7 @@ py.install_sources( - subdir: 'sage/groups/perm_gps/partn_ref2', - ) - --extension_data = {'refinement_generic' : files('refinement_generic.pyx')} -+extension_data = {'refinement_generic': files('refinement_generic.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/groups/semimonomial_transformations/meson.build b/src/sage/groups/semimonomial_transformations/meson.build -index e9b3232b24a..d210dca2aff 100644 ---- a/src/sage/groups/semimonomial_transformations/meson.build -+++ b/src/sage/groups/semimonomial_transformations/meson.build -@@ -8,7 +8,7 @@ py.install_sources( - ) - - extension_data = { -- 'semimonomial_transformation' : files('semimonomial_transformation.pyx'), -+ 'semimonomial_transformation': files('semimonomial_transformation.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/interacts/meson.build b/src/sage/interacts/meson.build -index b3e2bbdddeb..ad9212363db 100644 ---- a/src/sage/interacts/meson.build -+++ b/src/sage/interacts/meson.build -@@ -11,7 +11,7 @@ py.install_sources( - subdir: 'sage/interacts', - ) - --extension_data = {'library_cython' : files('library_cython.pyx')} -+extension_data = {'library_cython': files('library_cython.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/interfaces/meson.build b/src/sage/interfaces/meson.build -index 18d13e7771b..6245e54154b 100644 ---- a/src/sage/interfaces/meson.build -+++ b/src/sage/interfaces/meson.build -@@ -65,8 +65,8 @@ py.install_sources( - ) - - extension_data = { -- 'process' : files('process.pyx'), -- 'sagespawn' : files('sagespawn.pyx'), -+ 'process': files('process.pyx'), -+ 'sagespawn': files('sagespawn.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/lfunctions/meson.build b/src/sage/lfunctions/meson.build -index 09a51db11bb..8537e233edc 100644 ---- a/src/sage/lfunctions/meson.build -+++ b/src/sage/lfunctions/meson.build -@@ -9,7 +9,7 @@ py.install_sources( - subdir: 'sage/lfunctions', - ) - --extension_data = {'zero_sums' : files('zero_sums.pyx')} -+extension_data = {'zero_sums': files('zero_sums.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/libs/arb/meson.build b/src/sage/libs/arb/meson.build -index a3ee01097af..e58eddb2f6f 100644 ---- a/src/sage/libs/arb/meson.build -+++ b/src/sage/libs/arb/meson.build -@@ -19,7 +19,7 @@ py.install_sources( - subdir: 'sage/libs/arb', - ) - --extension_data = {'arith' : files('arith.pyx')} -+extension_data = {'arith': files('arith.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/libs/flint/meson.build b/src/sage/libs/flint/meson.build -index 2350dbaf013..eeefdc536ea 100644 ---- a/src/sage/libs/flint/meson.build -+++ b/src/sage/libs/flint/meson.build -@@ -162,17 +162,17 @@ py.install_sources( - ) - - extension_data = { -- 'arith' : files('arith.pyx'), -- 'arith_sage' : files('arith_sage.pyx'), -- 'flint_sage' : files('flint_sage.pyx'), -- 'fmpq_poly_sage' : files('fmpq_poly_sage.pyx'), -- 'fmpz_factor_sage' : files('fmpz_factor_sage.pyx'), -- 'fmpz_poly' : files('fmpz_poly.pyx'), -- 'fmpz_poly_sage' : files('fmpz_poly_sage.pyx'), -- 'qsieve' : files('qsieve.pyx'), -- 'qsieve_sage' : files('qsieve_sage.pyx'), -- 'ulong_extras' : files('ulong_extras.pyx'), -- 'ulong_extras_sage' : files('ulong_extras_sage.pyx'), -+ 'arith': files('arith.pyx'), -+ 'arith_sage': files('arith_sage.pyx'), -+ 'flint_sage': files('flint_sage.pyx'), -+ 'fmpq_poly_sage': files('fmpq_poly_sage.pyx'), -+ 'fmpz_factor_sage': files('fmpz_factor_sage.pyx'), -+ 'fmpz_poly': files('fmpz_poly.pyx'), -+ 'fmpz_poly_sage': files('fmpz_poly_sage.pyx'), -+ 'qsieve': files('qsieve.pyx'), -+ 'qsieve_sage': files('qsieve_sage.pyx'), -+ 'ulong_extras': files('ulong_extras.pyx'), -+ 'ulong_extras_sage': files('ulong_extras_sage.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/libs/gap/meson.build b/src/sage/libs/gap/meson.build -index ed0bad3bcce..af77ea307b0 100644 ---- a/src/sage/libs/gap/meson.build -+++ b/src/sage/libs/gap/meson.build -@@ -23,9 +23,9 @@ py.install_sources( - fs.copyfile('sage.gaprc') - - extension_data = { -- 'element' : files('element.pyx'), -- 'libgap' : files('libgap.pyx'), -- 'util' : files('util.pyx'), -+ 'element': files('element.pyx'), -+ 'libgap': files('libgap.pyx'), -+ 'util': files('util.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/libs/gmp/meson.build b/src/sage/libs/gmp/meson.build -index 42a1e652267..26bf24d5084 100644 ---- a/src/sage/libs/gmp/meson.build -+++ b/src/sage/libs/gmp/meson.build -@@ -15,7 +15,7 @@ py.install_sources( - subdir: 'sage/libs/gmp', - ) - --extension_data = {'pylong' : files('pylong.pyx')} -+extension_data = {'pylong': files('pylong.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/libs/gsl/meson.build b/src/sage/libs/gsl/meson.build -index b96776f35a8..a70c61d1297 100644 ---- a/src/sage/libs/gsl/meson.build -+++ b/src/sage/libs/gsl/meson.build -@@ -68,7 +68,7 @@ py.install_sources( - subdir: 'sage/libs/gsl', - ) - --extension_data = {'array' : files('array.pyx')} -+extension_data = {'array': files('array.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/libs/mpmath/meson.build b/src/sage/libs/mpmath/meson.build -index a49cfaa64df..cc8cdc84e98 100644 ---- a/src/sage/libs/mpmath/meson.build -+++ b/src/sage/libs/mpmath/meson.build -@@ -12,10 +12,10 @@ py.install_sources( - ) - - extension_data = { -- 'ext_impl' : files('ext_impl.pyx'), -- 'ext_libmp' : files('ext_libmp.pyx'), -- 'ext_main' : files('ext_main.pyx'), -- 'utils' : files('utils.pyx'), -+ 'ext_impl': files('ext_impl.pyx'), -+ 'ext_libmp': files('ext_libmp.pyx'), -+ 'ext_main': files('ext_main.pyx'), -+ 'utils': files('utils.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/libs/pari/meson.build b/src/sage/libs/pari/meson.build -index 9df9ad0861e..817aca83c0c 100644 ---- a/src/sage/libs/pari/meson.build -+++ b/src/sage/libs/pari/meson.build -@@ -21,14 +21,14 @@ py.install_sources( - ) - - extension_data = { -- 'convert_flint' : files('convert_flint.pyx'), -- 'convert_gmp' : files('convert_gmp.pyx'), -- 'convert_sage' : files('convert_sage.pyx'), -- 'convert_sage_complex_double' : files('convert_sage_complex_double.pyx'), -- 'convert_sage_matrix' : files('convert_sage_matrix.pyx'), -- 'convert_sage_real_double' : files('convert_sage_real_double.pyx'), -- 'convert_sage_real_mpfr' : files('convert_sage_real_mpfr.pyx'), -- 'misc' : files('misc.pyx'), -+ 'convert_flint': files('convert_flint.pyx'), -+ 'convert_gmp': files('convert_gmp.pyx'), -+ 'convert_sage': files('convert_sage.pyx'), -+ 'convert_sage_complex_double': files('convert_sage_complex_double.pyx'), -+ 'convert_sage_matrix': files('convert_sage_matrix.pyx'), -+ 'convert_sage_real_double': files('convert_sage_real_double.pyx'), -+ 'convert_sage_real_mpfr': files('convert_sage_real_mpfr.pyx'), -+ 'misc': files('misc.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/libs/symmetrica/meson.build b/src/sage/libs/symmetrica/meson.build -index 2cc224eb082..6d14c74c397 100644 ---- a/src/sage/libs/symmetrica/meson.build -+++ b/src/sage/libs/symmetrica/meson.build -@@ -15,7 +15,7 @@ py.install_sources( - subdir: 'sage/libs/symmetrica', - ) - --extension_data = {'symmetrica' : files('symmetrica.pyx')} -+extension_data = {'symmetrica': files('symmetrica.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/matrix/meson.build b/src/sage/matrix/meson.build -index 3e703312d11..c15ff3f0dd6 100644 ---- a/src/sage/matrix/meson.build -+++ b/src/sage/matrix/meson.build -@@ -101,40 +101,40 @@ py.install_sources( - ) - - extension_data = { -- 'action' : files('action.pyx'), -- 'args' : files('args.pyx'), -- 'change_ring' : files('change_ring.pyx'), -- 'constructor' : files('constructor.pyx'), -- 'echelon_matrix' : files('echelon_matrix.pyx'), -- 'matrix0' : files('matrix0.pyx'), -- 'matrix1' : files('matrix1.pyx'), -- 'matrix2' : files('matrix2.pyx'), -- 'matrix_cdv' : files('matrix_cdv.pyx'), -- 'matrix_complex_ball_dense' : files('matrix_complex_ball_dense.pyx'), -- 'matrix_complex_double_dense' : files('matrix_complex_double_dense.pyx'), -- 'matrix_dense' : files('matrix_dense.pyx'), -- 'matrix_double_dense' : files('matrix_double_dense.pyx'), -- 'matrix_double_sparse' : files('matrix_double_sparse.pyx'), -- 'matrix_gap' : files('matrix_gap.pyx'), -- 'matrix_generic_dense' : files('matrix_generic_dense.pyx'), -- 'matrix_generic_sparse' : files('matrix_generic_sparse.pyx'), -- 'matrix_gfpn_dense' : files('matrix_gfpn_dense.pyx'), -+ 'action': files('action.pyx'), -+ 'args': files('args.pyx'), -+ 'change_ring': files('change_ring.pyx'), -+ 'constructor': files('constructor.pyx'), -+ 'echelon_matrix': files('echelon_matrix.pyx'), -+ 'matrix0': files('matrix0.pyx'), -+ 'matrix1': files('matrix1.pyx'), -+ 'matrix2': files('matrix2.pyx'), -+ 'matrix_cdv': files('matrix_cdv.pyx'), -+ 'matrix_complex_ball_dense': files('matrix_complex_ball_dense.pyx'), -+ 'matrix_complex_double_dense': files('matrix_complex_double_dense.pyx'), -+ 'matrix_dense': files('matrix_dense.pyx'), -+ 'matrix_double_dense': files('matrix_double_dense.pyx'), -+ 'matrix_double_sparse': files('matrix_double_sparse.pyx'), -+ 'matrix_gap': files('matrix_gap.pyx'), -+ 'matrix_generic_dense': files('matrix_generic_dense.pyx'), -+ 'matrix_generic_sparse': files('matrix_generic_sparse.pyx'), -+ 'matrix_gfpn_dense': files('matrix_gfpn_dense.pyx'), - 'matrix_gf2e_dense': files('matrix_gf2e_dense.pyx'), -- 'matrix_laurent_mpolynomial_dense' : files( -+ 'matrix_laurent_mpolynomial_dense': files( - 'matrix_laurent_mpolynomial_dense.pyx', - ), -- 'matrix_numpy_dense' : files('matrix_numpy_dense.pyx'), -- 'matrix_numpy_integer_dense' : files('matrix_numpy_integer_dense.pyx'), -- 'matrix_polynomial_dense' : files('matrix_polynomial_dense.pyx'), -- 'matrix_real_double_dense' : files('matrix_real_double_dense.pyx'), -- 'matrix_sparse' : files('matrix_sparse.pyx'), -- 'matrix_symbolic_dense' : files('matrix_symbolic_dense.pyx'), -- 'matrix_symbolic_sparse' : files('matrix_symbolic_sparse.pyx'), -- 'matrix_window' : files('matrix_window.pyx'), -- 'misc' : files('misc.pyx'), -- 'misc_flint' : files('misc_flint.pyx'), -- 'misc_mpfr' : files('misc_mpfr.pyx'), -- 'strassen' : files('strassen.pyx'), -+ 'matrix_numpy_dense': files('matrix_numpy_dense.pyx'), -+ 'matrix_numpy_integer_dense': files('matrix_numpy_integer_dense.pyx'), -+ 'matrix_polynomial_dense': files('matrix_polynomial_dense.pyx'), -+ 'matrix_real_double_dense': files('matrix_real_double_dense.pyx'), -+ 'matrix_sparse': files('matrix_sparse.pyx'), -+ 'matrix_symbolic_dense': files('matrix_symbolic_dense.pyx'), -+ 'matrix_symbolic_sparse': files('matrix_symbolic_sparse.pyx'), -+ 'matrix_window': files('matrix_window.pyx'), -+ 'misc': files('misc.pyx'), -+ 'misc_flint': files('misc_flint.pyx'), -+ 'misc_mpfr': files('misc_mpfr.pyx'), -+ 'strassen': files('strassen.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/matroids/meson.build b/src/sage/matroids/meson.build -index 98187387863..a69fcbef5fb 100644 ---- a/src/sage/matroids/meson.build -+++ b/src/sage/matroids/meson.build -@@ -47,20 +47,20 @@ py.install_sources( - ) - - extension_data = { -- 'basis_exchange_matroid' : files('basis_exchange_matroid.pyx'), -- 'basis_matroid' : files('basis_matroid.pyx'), -- 'circuit_closures_matroid' : files('circuit_closures_matroid.pyx'), -- 'circuits_matroid' : files('circuits_matroid.pyx'), -- 'extension' : files('extension.pyx'), -- 'lean_matrix' : files('lean_matrix.pyx'), -- 'linear_matroid' : files('linear_matroid.pyx'), -- 'matroid' : files('matroid.pyx'), -- 'set_system' : files('set_system.pyx'), -- 'transversal_matroid' : files('transversal_matroid.pyx'), -- 'union_matroid' : files('union_matroid.pyx'), -- 'unpickling' : files('unpickling.pyx'), -- 'flats_matroid' : files('flats_matroid.pyx'), -- 'graphic_matroid' : files('graphic_matroid.pyx'), -+ 'basis_exchange_matroid': files('basis_exchange_matroid.pyx'), -+ 'basis_matroid': files('basis_matroid.pyx'), -+ 'circuit_closures_matroid': files('circuit_closures_matroid.pyx'), -+ 'circuits_matroid': files('circuits_matroid.pyx'), -+ 'extension': files('extension.pyx'), -+ 'lean_matrix': files('lean_matrix.pyx'), -+ 'linear_matroid': files('linear_matroid.pyx'), -+ 'matroid': files('matroid.pyx'), -+ 'set_system': files('set_system.pyx'), -+ 'transversal_matroid': files('transversal_matroid.pyx'), -+ 'union_matroid': files('union_matroid.pyx'), -+ 'unpickling': files('unpickling.pyx'), -+ 'flats_matroid': files('flats_matroid.pyx'), -+ 'graphic_matroid': files('graphic_matroid.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/misc/cython.py b/src/sage/misc/cython.py -index 5c2b53217a2..82ab564d4e1 100644 ---- a/src/sage/misc/cython.py -+++ b/src/sage/misc/cython.py -@@ -50,16 +50,12 @@ def _standard_libs_libdirs_incdirs_aliases(): - {...}) - """ - aliases = cython_aliases() -- standard_libs = [ -- 'mpfr', 'gmp', 'gmpxx', 'pari', 'm', -- 'ec', 'gsl', -- ] + aliases["CBLAS_LIBRARIES"] + [ -- 'ntl'] -+ standard_libs = ["mpfr", "gmp", "gmpxx", "pari", "m", "ec", "gsl", "ntl"] - standard_libdirs = [] - if SAGE_LOCAL: - standard_libdirs.append(os.path.join(SAGE_LOCAL, "lib")) -- standard_libdirs.extend(aliases["CBLAS_LIBDIR"] + aliases["NTL_LIBDIR"]) -- standard_incdirs = [dir.as_posix() for dir in get_include_dirs()] + aliases["CBLAS_INCDIR"] + aliases["NTL_INCDIR"] -+ standard_libdirs.extend(aliases["NTL_LIBDIR"]) -+ standard_incdirs = [dir.as_posix() for dir in get_include_dirs()] + aliases["NTL_INCDIR"] - return standard_libs, standard_libdirs, standard_incdirs, aliases - - ################################################################ -diff --git a/src/sage/misc/meson.build b/src/sage/misc/meson.build -index f44095ff136..e56df568eb2 100644 ---- a/src/sage/misc/meson.build -+++ b/src/sage/misc/meson.build -@@ -119,38 +119,38 @@ py.install_sources( - ) - - extension_data = { -- 'allocator' : files('allocator.pyx'), -- 'binary_tree' : files('binary_tree.pyx'), -- 'c3' : files('c3.pyx'), -- 'c3_controlled' : files('c3_controlled.pyx'), -- 'cachefunc' : files('cachefunc.pyx'), -- 'callable_dict' : files('callable_dict.pyx'), -- 'citation' : files('citation.pyx'), -- 'classcall_metaclass' : files('classcall_metaclass.pyx'), -- 'constant_function' : files('constant_function.pyx'), -- 'derivative' : files('derivative.pyx'), -- 'fast_methods' : files('fast_methods.pyx'), -- 'fpickle' : files('fpickle.pyx'), -- 'function_mangling' : files('function_mangling.pyx'), -- 'inherit_comparison' : files('inherit_comparison.pyx'), -- 'instancedoc' : files('instancedoc.pyx'), -- 'lazy_attribute' : files('lazy_attribute.pyx'), -- 'lazy_import' : files('lazy_import.pyx'), -- 'lazy_list' : files('lazy_list.pyx'), -- 'lazy_string' : files('lazy_string.pyx'), -- 'misc_c' : files('misc_c.pyx'), -- 'nested_class' : files('nested_class.pyx'), -- 'parser' : files('parser.pyx'), -- 'persist' : files('persist.pyx'), -- 'pickle_old' : files('pickle_old.pyx'), -- 'randstate' : files('randstate.pyx'), -- 'reset' : files('reset.pyx'), -- 'sage_ostools' : files('sage_ostools.pyx'), -- 'sage_timeit_class' : files('sage_timeit_class.pyx'), -- 'search' : files('search.pyx'), -- 'session' : files('session.pyx'), -- 'stopgap' : files('stopgap.pyx'), -- 'weak_dict' : files('weak_dict.pyx'), -+ 'allocator': files('allocator.pyx'), -+ 'binary_tree': files('binary_tree.pyx'), -+ 'c3': files('c3.pyx'), -+ 'c3_controlled': files('c3_controlled.pyx'), -+ 'cachefunc': files('cachefunc.pyx'), -+ 'callable_dict': files('callable_dict.pyx'), -+ 'citation': files('citation.pyx'), -+ 'classcall_metaclass': files('classcall_metaclass.pyx'), -+ 'constant_function': files('constant_function.pyx'), -+ 'derivative': files('derivative.pyx'), -+ 'fast_methods': files('fast_methods.pyx'), -+ 'fpickle': files('fpickle.pyx'), -+ 'function_mangling': files('function_mangling.pyx'), -+ 'inherit_comparison': files('inherit_comparison.pyx'), -+ 'instancedoc': files('instancedoc.pyx'), -+ 'lazy_attribute': files('lazy_attribute.pyx'), -+ 'lazy_import': files('lazy_import.pyx'), -+ 'lazy_list': files('lazy_list.pyx'), -+ 'lazy_string': files('lazy_string.pyx'), -+ 'misc_c': files('misc_c.pyx'), -+ 'nested_class': files('nested_class.pyx'), -+ 'parser': files('parser.pyx'), -+ 'persist': files('persist.pyx'), -+ 'pickle_old': files('pickle_old.pyx'), -+ 'randstate': files('randstate.pyx'), -+ 'reset': files('reset.pyx'), -+ 'sage_ostools': files('sage_ostools.pyx'), -+ 'sage_timeit_class': files('sage_timeit_class.pyx'), -+ 'search': files('search.pyx'), -+ 'session': files('session.pyx'), -+ 'stopgap': files('stopgap.pyx'), -+ 'weak_dict': files('weak_dict.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/modular/arithgroup/meson.build b/src/sage/modular/arithgroup/meson.build -index 14de8056ac4..f099b12eb07 100644 ---- a/src/sage/modular/arithgroup/meson.build -+++ b/src/sage/modular/arithgroup/meson.build -@@ -17,8 +17,8 @@ py.install_sources( - ) - - extension_data = { -- 'arithgroup_element' : files('arithgroup_element.pyx'), -- 'congroup' : files('congroup.pyx'), -+ 'arithgroup_element': files('arithgroup_element.pyx'), -+ 'congroup': files('congroup.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/modular/meson.build b/src/sage/modular/meson.build -index ce0b69b112e..4d66ac75fc1 100644 ---- a/src/sage/modular/meson.build -+++ b/src/sage/modular/meson.build -@@ -17,7 +17,7 @@ py.install_sources( - subdir: 'sage/modular', - ) - --extension_data = {'hypergeometric_misc' : files('hypergeometric_misc.pyx')} -+extension_data = {'hypergeometric_misc': files('hypergeometric_misc.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/modular/modform/meson.build b/src/sage/modular/modform/meson.build -index 11ec687d275..0ed9fee9966 100644 ---- a/src/sage/modular/modform/meson.build -+++ b/src/sage/modular/modform/meson.build -@@ -32,8 +32,8 @@ py.install_sources( - ) - - extension_data = { -- 'eis_series_cython' : files('eis_series_cython.pyx'), -- 'l_series_gross_zagier_coeffs' : files('l_series_gross_zagier_coeffs.pyx'), -+ 'eis_series_cython': files('eis_series_cython.pyx'), -+ 'l_series_gross_zagier_coeffs': files('l_series_gross_zagier_coeffs.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/modular/modsym/meson.build b/src/sage/modular/modsym/meson.build -index 63e8ced7d53..6b284a0766a 100644 ---- a/src/sage/modular/modsym/meson.build -+++ b/src/sage/modular/modsym/meson.build -@@ -27,11 +27,11 @@ py.install_sources( - ) - - extension_data = { -- 'apply' : files('apply.pyx'), -- 'heilbronn' : files('heilbronn.pyx'), -- 'manin_symbol' : files('manin_symbol.pyx'), -- 'p1list' : files('p1list.pyx'), -- 'relation_matrix_pyx' : files('relation_matrix_pyx.pyx'), -+ 'apply': files('apply.pyx'), -+ 'heilbronn': files('heilbronn.pyx'), -+ 'manin_symbol': files('manin_symbol.pyx'), -+ 'p1list': files('p1list.pyx'), -+ 'relation_matrix_pyx': files('relation_matrix_pyx.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/modular/pollack_stevens/meson.build b/src/sage/modular/pollack_stevens/meson.build -index 8724ee0df43..f34fc978707 100644 ---- a/src/sage/modular/pollack_stevens/meson.build -+++ b/src/sage/modular/pollack_stevens/meson.build -@@ -13,7 +13,7 @@ py.install_sources( - subdir: 'sage/modular/pollack_stevens', - ) - --extension_data = {'dist' : files('dist.pyx')} -+extension_data = {'dist': files('dist.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/modules/meson.build b/src/sage/modules/meson.build -index 6d73f06888c..e74fa44c904 100644 ---- a/src/sage/modules/meson.build -+++ b/src/sage/modules/meson.build -@@ -68,20 +68,20 @@ py.install_sources( - ) - - extension_data = { -- 'finite_submodule_iter' : files('finite_submodule_iter.pyx'), -- 'free_module_element' : files('free_module_element.pyx'), -- 'module' : files('module.pyx'), -- 'vector_complex_double_dense' : files('vector_complex_double_dense.pyx'), -- 'vector_double_dense' : files('vector_double_dense.pyx'), -- 'vector_integer_dense' : files('vector_integer_dense.pyx'), -- 'vector_integer_sparse' : files('vector_integer_sparse.pyx'), -- 'vector_modn_dense' : files('vector_modn_dense.pyx'), -- 'vector_modn_sparse' : files('vector_modn_sparse.pyx'), -- 'vector_numpy_dense' : files('vector_numpy_dense.pyx'), -- 'vector_numpy_integer_dense' : files('vector_numpy_integer_dense.pyx'), -- 'vector_rational_dense' : files('vector_rational_dense.pyx'), -- 'vector_rational_sparse' : files('vector_rational_sparse.pyx'), -- 'vector_real_double_dense' : files('vector_real_double_dense.pyx'), -+ 'finite_submodule_iter': files('finite_submodule_iter.pyx'), -+ 'free_module_element': files('free_module_element.pyx'), -+ 'module': files('module.pyx'), -+ 'vector_complex_double_dense': files('vector_complex_double_dense.pyx'), -+ 'vector_double_dense': files('vector_double_dense.pyx'), -+ 'vector_integer_dense': files('vector_integer_dense.pyx'), -+ 'vector_integer_sparse': files('vector_integer_sparse.pyx'), -+ 'vector_modn_dense': files('vector_modn_dense.pyx'), -+ 'vector_modn_sparse': files('vector_modn_sparse.pyx'), -+ 'vector_numpy_dense': files('vector_numpy_dense.pyx'), -+ 'vector_numpy_integer_dense': files('vector_numpy_integer_dense.pyx'), -+ 'vector_rational_dense': files('vector_rational_dense.pyx'), -+ 'vector_rational_sparse': files('vector_rational_sparse.pyx'), -+ 'vector_real_double_dense': files('vector_real_double_dense.pyx'), - } - - foreach name, pyx : extension_data -@@ -96,7 +96,7 @@ foreach name, pyx : extension_data - endforeach - - extension_data_cpp = { -- 'numpy_util' : files('numpy_util.pyx'), -+ 'numpy_util': files('numpy_util.pyx'), - 'vector_mod2_dense': files('vector_mod2_dense.pyx'), - } - -diff --git a/src/sage/modules/with_basis/meson.build b/src/sage/modules/with_basis/meson.build -index 971012fcf4c..f96bfba3cf7 100644 ---- a/src/sage/modules/with_basis/meson.build -+++ b/src/sage/modules/with_basis/meson.build -@@ -11,7 +11,7 @@ py.install_sources( - subdir: 'sage/modules/with_basis', - ) - --extension_data = {'indexed_element' : files('indexed_element.pyx')} -+extension_data = {'indexed_element': files('indexed_element.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/monoids/meson.build b/src/sage/monoids/meson.build -index 9b590ee95df..8f07db72cb2 100644 ---- a/src/sage/monoids/meson.build -+++ b/src/sage/monoids/meson.build -@@ -18,7 +18,7 @@ py.install_sources( - ) - - extension_data = { -- 'free_abelian_monoid_element' : files('free_abelian_monoid_element.pyx'), -+ 'free_abelian_monoid_element': files('free_abelian_monoid_element.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/numerical/backends/meson.build b/src/sage/numerical/backends/meson.build -index 57454e81e88..c9fa626eafe 100644 ---- a/src/sage/numerical/backends/meson.build -+++ b/src/sage/numerical/backends/meson.build -@@ -38,17 +38,17 @@ py.install_sources( - ) - - extension_data = { -- 'cvxopt_backend' : files('cvxopt_backend.pyx'), -- 'cvxopt_sdp_backend' : files('cvxopt_sdp_backend.pyx'), -- 'cvxpy_backend' : files('cvxpy_backend.pyx'), -- 'generic_backend' : files('generic_backend.pyx'), -- 'generic_sdp_backend' : files('generic_sdp_backend.pyx'), -- 'glpk_backend' : files('glpk_backend.pyx'), -- 'glpk_exact_backend' : files('glpk_exact_backend.pyx'), -- 'glpk_graph_backend' : files('glpk_graph_backend.pyx'), -- 'interactivelp_backend' : files('interactivelp_backend.pyx'), -- 'matrix_sdp_backend' : files('matrix_sdp_backend.pyx'), -- 'ppl_backend' : files('ppl_backend.pyx'), -+ 'cvxopt_backend': files('cvxopt_backend.pyx'), -+ 'cvxopt_sdp_backend': files('cvxopt_sdp_backend.pyx'), -+ 'cvxpy_backend': files('cvxpy_backend.pyx'), -+ 'generic_backend': files('generic_backend.pyx'), -+ 'generic_sdp_backend': files('generic_sdp_backend.pyx'), -+ 'glpk_backend': files('glpk_backend.pyx'), -+ 'glpk_exact_backend': files('glpk_exact_backend.pyx'), -+ 'glpk_graph_backend': files('glpk_graph_backend.pyx'), -+ 'interactivelp_backend': files('interactivelp_backend.pyx'), -+ 'matrix_sdp_backend': files('matrix_sdp_backend.pyx'), -+ 'ppl_backend': files('ppl_backend.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/numerical/meson.build b/src/sage/numerical/meson.build -index 718df394a61..cf7ad6b7c3b 100644 ---- a/src/sage/numerical/meson.build -+++ b/src/sage/numerical/meson.build -@@ -19,11 +19,11 @@ py.install_sources( - ) - - extension_data = { -- 'gauss_legendre' : files('gauss_legendre.pyx'), -- 'linear_functions' : files('linear_functions.pyx'), -- 'linear_tensor_element' : files('linear_tensor_element.pyx'), -- 'mip' : files('mip.pyx'), -- 'sdp' : files('sdp.pyx'), -+ 'gauss_legendre': files('gauss_legendre.pyx'), -+ 'linear_functions': files('linear_functions.pyx'), -+ 'linear_tensor_element': files('linear_tensor_element.pyx'), -+ 'mip': files('mip.pyx'), -+ 'sdp': files('sdp.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/plot/meson.build b/src/sage/plot/meson.build -index aa0ef708923..28eaedf478c 100644 ---- a/src/sage/plot/meson.build -+++ b/src/sage/plot/meson.build -@@ -34,7 +34,7 @@ py.install_sources( - subdir: 'sage/plot', - ) - --extension_data = {'complex_plot' : files('complex_plot.pyx')} -+extension_data = {'complex_plot': files('complex_plot.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/plot/plot3d/meson.build b/src/sage/plot/plot3d/meson.build -index cf8e33a2c5d..ab5e1d17d99 100644 ---- a/src/sage/plot/plot3d/meson.build -+++ b/src/sage/plot/plot3d/meson.build -@@ -28,12 +28,12 @@ py.install_sources( - ) - - extension_data = { -- 'base' : files('base.pyx'), -- 'implicit_surface' : files('implicit_surface.pyx'), -- 'index_face_set' : files('index_face_set.pyx'), -- 'shapes' : files('shapes.pyx'), -- 'transform' : files('transform.pyx'), -- 'parametric_surface' : files('parametric_surface.pyx'), -+ 'base': files('base.pyx'), -+ 'implicit_surface': files('implicit_surface.pyx'), -+ 'index_face_set': files('index_face_set.pyx'), -+ 'shapes': files('shapes.pyx'), -+ 'transform': files('transform.pyx'), -+ 'parametric_surface': files('parametric_surface.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/probability/meson.build b/src/sage/probability/meson.build -index 008efb6bf34..b58d3c10cea 100644 ---- a/src/sage/probability/meson.build -+++ b/src/sage/probability/meson.build -@@ -7,7 +7,7 @@ py.install_sources( - ) - - extension_data = { -- 'probability_distribution' : files('probability_distribution.pyx'), -+ 'probability_distribution': files('probability_distribution.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/quadratic_forms/meson.build b/src/sage/quadratic_forms/meson.build -index d7d8bb0a6c1..170c8920dba 100644 ---- a/src/sage/quadratic_forms/meson.build -+++ b/src/sage/quadratic_forms/meson.build -@@ -36,9 +36,9 @@ py.install_sources( - ) - - extension_data = { -- 'count_local_2' : files('count_local_2.pyx'), -- 'quadratic_form__evaluate' : files('quadratic_form__evaluate.pyx'), -- 'ternary' : files('ternary.pyx'), -+ 'count_local_2': files('count_local_2.pyx'), -+ 'quadratic_form__evaluate': files('quadratic_form__evaluate.pyx'), -+ 'ternary': files('ternary.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/quivers/meson.build b/src/sage/quivers/meson.build -index 6d93bb01a06..451056ea4bb 100644 ---- a/src/sage/quivers/meson.build -+++ b/src/sage/quivers/meson.build -@@ -15,8 +15,8 @@ py.install_sources( - ) - - extension_data = { -- 'algebra_elements' : files('algebra_elements.pyx'), -- 'paths' : files('paths.pyx'), -+ 'algebra_elements': files('algebra_elements.pyx'), -+ 'paths': files('paths.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/rings/convert/meson.build b/src/sage/rings/convert/meson.build -index 2e248c33814..61dba9fe0e6 100644 ---- a/src/sage/rings/convert/meson.build -+++ b/src/sage/rings/convert/meson.build -@@ -6,7 +6,7 @@ py.install_sources( - subdir: 'sage/rings/convert', - ) - --extension_data = {'mpfi' : files('mpfi.pyx')} -+extension_data = {'mpfi': files('mpfi.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/rings/finite_rings/meson.build b/src/sage/rings/finite_rings/meson.build -index 41ee9f0f0c6..8af2dd5b89a 100644 ---- a/src/sage/rings/finite_rings/meson.build -+++ b/src/sage/rings/finite_rings/meson.build -@@ -40,16 +40,16 @@ py.install_sources( - ) - - extension_data = { -- 'element_base' : files('element_base.pyx'), -- 'element_pari_ffelt' : files('element_pari_ffelt.pyx'), -- 'finite_field_base' : files('finite_field_base.pyx'), -- 'hom_finite_field' : files('hom_finite_field.pyx'), -- 'hom_prime_finite_field' : files('hom_prime_finite_field.pyx'), -- 'integer_mod' : files('integer_mod.pyx'), -- 'residue_field' : files('residue_field.pyx'), -- 'residue_field_givaro' : files('residue_field_givaro.pyx'), -- 'residue_field_ntl_gf2e' : files('residue_field_ntl_gf2e.pyx'), -- 'residue_field_pari_ffelt' : files('residue_field_pari_ffelt.pyx'), -+ 'element_base': files('element_base.pyx'), -+ 'element_pari_ffelt': files('element_pari_ffelt.pyx'), -+ 'finite_field_base': files('finite_field_base.pyx'), -+ 'hom_finite_field': files('hom_finite_field.pyx'), -+ 'hom_prime_finite_field': files('hom_prime_finite_field.pyx'), -+ 'integer_mod': files('integer_mod.pyx'), -+ 'residue_field': files('residue_field.pyx'), -+ 'residue_field_givaro': files('residue_field_givaro.pyx'), -+ 'residue_field_ntl_gf2e': files('residue_field_ntl_gf2e.pyx'), -+ 'residue_field_pari_ffelt': files('residue_field_pari_ffelt.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/rings/function_field/meson.build b/src/sage/rings/function_field/meson.build -index d99579c9c54..b8673f2b9fa 100644 ---- a/src/sage/rings/function_field/meson.build -+++ b/src/sage/rings/function_field/meson.build -@@ -38,11 +38,11 @@ py.install_sources( - ) - - extension_data = { -- 'element' : files('element.pyx'), -- 'element_polymod' : files('element_polymod.pyx'), -- 'element_rational' : files('element_rational.pyx'), -- 'hermite_form_polynomial' : files('hermite_form_polynomial.pyx'), -- 'khuri_makdisi' : files('khuri_makdisi.pyx'), -+ 'element': files('element.pyx'), -+ 'element_polymod': files('element_polymod.pyx'), -+ 'element_rational': files('element_rational.pyx'), -+ 'hermite_form_polynomial': files('hermite_form_polynomial.pyx'), -+ 'khuri_makdisi': files('khuri_makdisi.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/rings/meson.build b/src/sage/rings/meson.build -index 743c223dcc7..ec65cf584b5 100644 ---- a/src/sage/rings/meson.build -+++ b/src/sage/rings/meson.build -@@ -121,42 +121,42 @@ py.install_sources( - ) - - extension_data = { -- 'abc' : files('abc.pyx'), -- 'complex_arb' : files('complex_arb.pyx'), -- 'complex_conversion' : files('complex_conversion.pyx'), -- 'complex_interval' : files('complex_interval.pyx'), -- 'complex_mpc' : files('complex_mpc.pyx'), -- 'complex_mpfr' : files('complex_mpfr.pyx'), -- 'factorint' : files('factorint.pyx'), -- 'factorint_flint' : files('factorint_flint.pyx'), -- 'factorint_pari' : files('factorint_pari.pyx'), -- 'fast_arith' : files('fast_arith.pyx'), -- 'fraction_field_element' : files('fraction_field_element.pyx'), -- 'integer' : files('integer.pyx'), -- 'integer_ring' : files('integer_ring.pyx'), -- 'laurent_series_ring_element' : files('laurent_series_ring_element.pyx'), -- 'morphism' : files('morphism.pyx'), -- 'noncommutative_ideals' : files('noncommutative_ideals.pyx'), -- 'power_series_mpoly' : files('power_series_mpoly.pyx'), -- 'power_series_pari' : files('power_series_pari.pyx'), -- 'power_series_poly' : files('power_series_poly.pyx'), -- 'power_series_ring_element' : files('power_series_ring_element.pyx'), -- 'puiseux_series_ring_element' : files('puiseux_series_ring_element.pyx'), -- 'real_arb' : files('real_arb.pyx'), -- 'real_double' : files('real_double.pyx'), -- 'real_double_element_gsl' : files('real_double_element_gsl.pyx'), -- 'real_interval_absolute' : files('real_interval_absolute.pyx'), -- 'real_lazy' : files('real_lazy.pyx'), -- 'real_mpfi' : files('real_mpfi.pyx'), -- 'real_mpfr' : files('real_mpfr.pyx'), -- 'ring' : files('ring.pyx'), -- 'ring_extension' : files('ring_extension.pyx'), -- 'ring_extension_conversion' : files('ring_extension_conversion.pyx'), -- 'ring_extension_element' : files('ring_extension_element.pyx'), -- 'ring_extension_morphism' : files('ring_extension_morphism.pyx'), -- 'sum_of_squares' : files('sum_of_squares.pyx'), -- 'tate_algebra_element' : files('tate_algebra_element.pyx'), -- 'tate_algebra_ideal' : files('tate_algebra_ideal.pyx'), -+ 'abc': files('abc.pyx'), -+ 'complex_arb': files('complex_arb.pyx'), -+ 'complex_conversion': files('complex_conversion.pyx'), -+ 'complex_interval': files('complex_interval.pyx'), -+ 'complex_mpc': files('complex_mpc.pyx'), -+ 'complex_mpfr': files('complex_mpfr.pyx'), -+ 'factorint': files('factorint.pyx'), -+ 'factorint_flint': files('factorint_flint.pyx'), -+ 'factorint_pari': files('factorint_pari.pyx'), -+ 'fast_arith': files('fast_arith.pyx'), -+ 'fraction_field_element': files('fraction_field_element.pyx'), -+ 'integer': files('integer.pyx'), -+ 'integer_ring': files('integer_ring.pyx'), -+ 'laurent_series_ring_element': files('laurent_series_ring_element.pyx'), -+ 'morphism': files('morphism.pyx'), -+ 'noncommutative_ideals': files('noncommutative_ideals.pyx'), -+ 'power_series_mpoly': files('power_series_mpoly.pyx'), -+ 'power_series_pari': files('power_series_pari.pyx'), -+ 'power_series_poly': files('power_series_poly.pyx'), -+ 'power_series_ring_element': files('power_series_ring_element.pyx'), -+ 'puiseux_series_ring_element': files('puiseux_series_ring_element.pyx'), -+ 'real_arb': files('real_arb.pyx'), -+ 'real_double': files('real_double.pyx'), -+ 'real_double_element_gsl': files('real_double_element_gsl.pyx'), -+ 'real_interval_absolute': files('real_interval_absolute.pyx'), -+ 'real_lazy': files('real_lazy.pyx'), -+ 'real_mpfi': files('real_mpfi.pyx'), -+ 'real_mpfr': files('real_mpfr.pyx'), -+ 'ring': files('ring.pyx'), -+ 'ring_extension': files('ring_extension.pyx'), -+ 'ring_extension_conversion': files('ring_extension_conversion.pyx'), -+ 'ring_extension_element': files('ring_extension_element.pyx'), -+ 'ring_extension_morphism': files('ring_extension_morphism.pyx'), -+ 'sum_of_squares': files('sum_of_squares.pyx'), -+ 'tate_algebra_element': files('tate_algebra_element.pyx'), -+ 'tate_algebra_ideal': files('tate_algebra_ideal.pyx'), - } - - foreach name, pyx : extension_data -@@ -226,7 +226,7 @@ extension_data_cpp = { - ), - 'bernoulli_mod_p': files('bernoulli_mod_p.pyx'), - # Has to be compiled as c++ due to https://github.com/cython/cython/issues/6524 -- 'complex_double' : files('complex_double.pyx'), -+ 'complex_double': files('complex_double.pyx'), - 'fraction_field_FpT': files('fraction_field_FpT.pyx'), - 'rational': files('rational.pyx'), - } -diff --git a/src/sage/rings/number_field/meson.build b/src/sage/rings/number_field/meson.build -index f8659c09448..6a2d77e7d14 100644 ---- a/src/sage/rings/number_field/meson.build -+++ b/src/sage/rings/number_field/meson.build -@@ -37,11 +37,11 @@ py.install_sources( - ) - - extension_data = { -- 'number_field_base' : files('number_field_base.pyx'), -- 'number_field_element_base' : files('number_field_element_base.pyx'), -- 'number_field_morphisms' : files('number_field_morphisms.pyx'), -- 'totallyreal' : files('totallyreal.pyx'), -- 'totallyreal_data' : files('totallyreal_data.pyx'), -+ 'number_field_base': files('number_field_base.pyx'), -+ 'number_field_element_base': files('number_field_element_base.pyx'), -+ 'number_field_morphisms': files('number_field_morphisms.pyx'), -+ 'totallyreal': files('totallyreal.pyx'), -+ 'totallyreal_data': files('totallyreal_data.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/rings/padics/meson.build b/src/sage/rings/padics/meson.build -index b85d18ca5ed..f40436ebe60 100644 ---- a/src/sage/rings/padics/meson.build -+++ b/src/sage/rings/padics/meson.build -@@ -82,24 +82,24 @@ py.install_sources( - ) - - extension_data = { -- 'common_conversion' : files('common_conversion.pyx'), -- 'local_generic_element' : files('local_generic_element.pyx'), -- 'morphism' : files('morphism.pyx'), -- 'padic_capped_absolute_element' : files('padic_capped_absolute_element.pyx'), -- 'padic_capped_relative_element' : files('padic_capped_relative_element.pyx'), -- 'padic_fixed_mod_element' : files('padic_fixed_mod_element.pyx'), -- 'padic_floating_point_element' : files('padic_floating_point_element.pyx'), -- 'padic_generic_element' : files('padic_generic_element.pyx'), -- 'padic_relaxed_element' : files('padic_relaxed_element.pyx'), -- 'padic_relaxed_errors' : files('padic_relaxed_errors.pyx'), -- 'qadic_flint_CA' : files('qadic_flint_CA.pyx'), -- 'qadic_flint_CR' : files('qadic_flint_CR.pyx'), -- 'qadic_flint_FM' : files('qadic_flint_FM.pyx'), -- 'qadic_flint_FP' : files('qadic_flint_FP.pyx'), -- 'relative_ramified_CA' : files('relative_ramified_CA.pyx'), -- 'relative_ramified_CR' : files('relative_ramified_CR.pyx'), -- 'relative_ramified_FM' : files('relative_ramified_FM.pyx'), -- 'relative_ramified_FP' : files('relative_ramified_FP.pyx'), -+ 'common_conversion': files('common_conversion.pyx'), -+ 'local_generic_element': files('local_generic_element.pyx'), -+ 'morphism': files('morphism.pyx'), -+ 'padic_capped_absolute_element': files('padic_capped_absolute_element.pyx'), -+ 'padic_capped_relative_element': files('padic_capped_relative_element.pyx'), -+ 'padic_fixed_mod_element': files('padic_fixed_mod_element.pyx'), -+ 'padic_floating_point_element': files('padic_floating_point_element.pyx'), -+ 'padic_generic_element': files('padic_generic_element.pyx'), -+ 'padic_relaxed_element': files('padic_relaxed_element.pyx'), -+ 'padic_relaxed_errors': files('padic_relaxed_errors.pyx'), -+ 'qadic_flint_CA': files('qadic_flint_CA.pyx'), -+ 'qadic_flint_CR': files('qadic_flint_CR.pyx'), -+ 'qadic_flint_FM': files('qadic_flint_FM.pyx'), -+ 'qadic_flint_FP': files('qadic_flint_FP.pyx'), -+ 'relative_ramified_CA': files('relative_ramified_CA.pyx'), -+ 'relative_ramified_CR': files('relative_ramified_CR.pyx'), -+ 'relative_ramified_FM': files('relative_ramified_FM.pyx'), -+ 'relative_ramified_FP': files('relative_ramified_FP.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/rings/polynomial/meson.build b/src/sage/rings/polynomial/meson.build -index 64df9a6b861..5db1364f8f3 100644 ---- a/src/sage/rings/polynomial/meson.build -+++ b/src/sage/rings/polynomial/meson.build -@@ -102,28 +102,28 @@ py.install_sources( - ) - - extension_data = { -- 'commutative_polynomial' : files('commutative_polynomial.pyx'), -- 'cyclotomic' : files('cyclotomic.pyx'), -- 'evaluation_flint' : files('evaluation_flint.pyx'), -- 'hilbert' : files('hilbert.pyx'), -- 'laurent_polynomial' : files('laurent_polynomial.pyx'), -- 'laurent_polynomial_mpair' : files('laurent_polynomial_mpair.pyx'), -- 'multi_polynomial' : files('multi_polynomial.pyx'), -- 'multi_polynomial_ring_base' : files('multi_polynomial_ring_base.pyx'), -- 'ore_polynomial_element' : files('ore_polynomial_element.pyx'), -- 'polydict' : files('polydict.pyx'), -- 'polynomial_compiled' : files('polynomial_compiled.pyx'), -- 'polynomial_complex_arb' : files('polynomial_complex_arb.pyx'), -- 'polynomial_element' : files('polynomial_element.pyx'), -- 'polynomial_number_field' : files('polynomial_number_field.pyx'), -- 'polynomial_real_mpfr_dense' : files('polynomial_real_mpfr_dense.pyx'), -- 'polynomial_ring_homomorphism' : files('polynomial_ring_homomorphism.pyx'), -- 'real_roots' : files('real_roots.pyx'), -- 'refine_root' : files('refine_root.pyx'), -- 'skew_polynomial_element' : files('skew_polynomial_element.pyx'), -- 'skew_polynomial_finite_field' : files('skew_polynomial_finite_field.pyx'), -- 'skew_polynomial_finite_order' : files('skew_polynomial_finite_order.pyx'), -- 'symmetric_reduction' : files('symmetric_reduction.pyx'), -+ 'commutative_polynomial': files('commutative_polynomial.pyx'), -+ 'cyclotomic': files('cyclotomic.pyx'), -+ 'evaluation_flint': files('evaluation_flint.pyx'), -+ 'hilbert': files('hilbert.pyx'), -+ 'laurent_polynomial': files('laurent_polynomial.pyx'), -+ 'laurent_polynomial_mpair': files('laurent_polynomial_mpair.pyx'), -+ 'multi_polynomial': files('multi_polynomial.pyx'), -+ 'multi_polynomial_ring_base': files('multi_polynomial_ring_base.pyx'), -+ 'ore_polynomial_element': files('ore_polynomial_element.pyx'), -+ 'polydict': files('polydict.pyx'), -+ 'polynomial_compiled': files('polynomial_compiled.pyx'), -+ 'polynomial_complex_arb': files('polynomial_complex_arb.pyx'), -+ 'polynomial_element': files('polynomial_element.pyx'), -+ 'polynomial_number_field': files('polynomial_number_field.pyx'), -+ 'polynomial_real_mpfr_dense': files('polynomial_real_mpfr_dense.pyx'), -+ 'polynomial_ring_homomorphism': files('polynomial_ring_homomorphism.pyx'), -+ 'real_roots': files('real_roots.pyx'), -+ 'refine_root': files('refine_root.pyx'), -+ 'skew_polynomial_element': files('skew_polynomial_element.pyx'), -+ 'skew_polynomial_finite_field': files('skew_polynomial_finite_field.pyx'), -+ 'skew_polynomial_finite_order': files('skew_polynomial_finite_order.pyx'), -+ 'symmetric_reduction': files('symmetric_reduction.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/rings/polynomial/weil/meson.build b/src/sage/rings/polynomial/weil/meson.build -index 86a37c42c2f..4f3e0073121 100644 ---- a/src/sage/rings/polynomial/weil/meson.build -+++ b/src/sage/rings/polynomial/weil/meson.build -@@ -6,7 +6,7 @@ py.install_sources( - subdir: 'sage/rings/polynomial/weil', - ) - --extension_data = {'weil_polynomials' : files('weil_polynomials.pyx')} -+extension_data = {'weil_polynomials': files('weil_polynomials.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/rings/semirings/meson.build b/src/sage/rings/semirings/meson.build -index b92ea837850..ae143c6ef83 100644 ---- a/src/sage/rings/semirings/meson.build -+++ b/src/sage/rings/semirings/meson.build -@@ -9,7 +9,7 @@ py.install_sources( - subdir: 'sage/rings/semirings', - ) - --extension_data = {'tropical_semiring' : files('tropical_semiring.pyx')} -+extension_data = {'tropical_semiring': files('tropical_semiring.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/sat/solvers/meson.build b/src/sage/sat/solvers/meson.build -index ef9d98ea04c..ac37d2c3ced 100644 ---- a/src/sage/sat/solvers/meson.build -+++ b/src/sage/sat/solvers/meson.build -@@ -9,7 +9,7 @@ py.install_sources( - subdir: 'sage/sat/solvers', - ) - --extension_data = {'satsolver' : files('satsolver.pyx')} -+extension_data = {'satsolver': files('satsolver.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/schemes/elliptic_curves/meson.build b/src/sage/schemes/elliptic_curves/meson.build -index 155f8e8a2d9..fd1488b36be 100644 ---- a/src/sage/schemes/elliptic_curves/meson.build -+++ b/src/sage/schemes/elliptic_curves/meson.build -@@ -59,9 +59,9 @@ py.install_sources( - ) - - extension_data = { -- 'descent_two_isogeny' : files('descent_two_isogeny.pyx'), -- 'mod_sym_num' : files('mod_sym_num.pyx'), -- 'period_lattice_region' : files('period_lattice_region.pyx'), -+ 'descent_two_isogeny': files('descent_two_isogeny.pyx'), -+ 'mod_sym_num': files('mod_sym_num.pyx'), -+ 'period_lattice_region': files('period_lattice_region.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/schemes/toric/meson.build b/src/sage/schemes/toric/meson.build -index b534a186130..4a78d14e568 100644 ---- a/src/sage/schemes/toric/meson.build -+++ b/src/sage/schemes/toric/meson.build -@@ -18,7 +18,7 @@ py.install_sources( - subdir: 'sage/schemes/toric', - ) - --extension_data = {'divisor_class' : files('divisor_class.pyx')} -+extension_data = {'divisor_class': files('divisor_class.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/src/sage/sets/meson.build b/src/sage/sets/meson.build -index 1ab6ba327dd..4f1d4a6638d 100644 ---- a/src/sage/sets/meson.build -+++ b/src/sage/sets/meson.build -@@ -29,11 +29,11 @@ py.install_sources( - ) - - extension_data = { -- 'disjoint_set' : files('disjoint_set.pyx'), -- 'family' : files('family.pyx'), -- 'finite_set_map_cy' : files('finite_set_map_cy.pyx'), -- 'pythonclass' : files('pythonclass.pyx'), -- 'recursively_enumerated_set' : files('recursively_enumerated_set.pyx'), -+ 'disjoint_set': files('disjoint_set.pyx'), -+ 'family': files('family.pyx'), -+ 'finite_set_map_cy': files('finite_set_map_cy.pyx'), -+ 'pythonclass': files('pythonclass.pyx'), -+ 'recursively_enumerated_set': files('recursively_enumerated_set.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/stats/distributions/meson.build b/src/sage/stats/distributions/meson.build -index df2b2d246b9..cde85eacda9 100644 ---- a/src/sage/stats/distributions/meson.build -+++ b/src/sage/stats/distributions/meson.build -@@ -11,7 +11,7 @@ py.install_sources( - ) - - extension_data = { -- 'discrete_gaussian_integer' : files( -+ 'discrete_gaussian_integer': files( - 'dgs_bern.c', - 'dgs_gauss_dp.c', - 'dgs_gauss_mp.c', -diff --git a/src/sage/stats/hmm/meson.build b/src/sage/stats/hmm/meson.build -index d45861127e9..c1acc958caf 100644 ---- a/src/sage/stats/hmm/meson.build -+++ b/src/sage/stats/hmm/meson.build -@@ -12,10 +12,10 @@ py.install_sources( - ) - - extension_data = { -- 'chmm' : files('chmm.pyx'), -- 'distributions' : files('distributions.pyx'), -- 'hmm' : files('hmm.pyx'), -- 'util' : files('util.pyx'), -+ 'chmm': files('chmm.pyx'), -+ 'distributions': files('distributions.pyx'), -+ 'hmm': files('hmm.pyx'), -+ 'util': files('util.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/stats/meson.build b/src/sage/stats/meson.build -index 35e8edb05a8..6a75bccdee6 100644 ---- a/src/sage/stats/meson.build -+++ b/src/sage/stats/meson.build -@@ -11,8 +11,8 @@ py.install_sources( - ) - - extension_data = { -- 'intlist' : files('intlist.pyx'), -- 'time_series' : files('time_series.pyx'), -+ 'intlist': files('intlist.pyx'), -+ 'time_series': files('time_series.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/structure/meson.build b/src/sage/structure/meson.build -index 74de406646c..a3a6970d743 100644 ---- a/src/sage/structure/meson.build -+++ b/src/sage/structure/meson.build -@@ -57,25 +57,25 @@ py.install_sources( - ) - - extension_data = { -- 'category_object' : files('category_object.pyx'), -- 'coerce' : files('coerce.pyx'), -- 'coerce_actions' : files('coerce_actions.pyx'), -- 'coerce_dict' : files('coerce_dict.pyx'), -- 'coerce_maps' : files('coerce_maps.pyx'), -- 'debug_options' : files('debug_options.pyx'), -- 'element' : files('element.pyx'), -- 'element_wrapper' : files('element_wrapper.pyx'), -- 'factory' : files('factory.pyx'), -- 'list_clone' : files('list_clone.pyx'), -- 'list_clone_demo' : files('list_clone_demo.pyx'), -- 'list_clone_timings_cy' : files('list_clone_timings_cy.pyx'), -- 'mutability' : files('mutability.pyx'), -- 'parent' : files('parent.pyx'), -- 'parent_base' : files('parent_base.pyx'), -- 'parent_gens' : files('parent_gens.pyx'), -- 'parent_old' : files('parent_old.pyx'), -- 'richcmp' : files('richcmp.pyx'), -- 'sage_object' : files('sage_object.pyx'), -+ 'category_object': files('category_object.pyx'), -+ 'coerce': files('coerce.pyx'), -+ 'coerce_actions': files('coerce_actions.pyx'), -+ 'coerce_dict': files('coerce_dict.pyx'), -+ 'coerce_maps': files('coerce_maps.pyx'), -+ 'debug_options': files('debug_options.pyx'), -+ 'element': files('element.pyx'), -+ 'element_wrapper': files('element_wrapper.pyx'), -+ 'factory': files('factory.pyx'), -+ 'list_clone': files('list_clone.pyx'), -+ 'list_clone_demo': files('list_clone_demo.pyx'), -+ 'list_clone_timings_cy': files('list_clone_timings_cy.pyx'), -+ 'mutability': files('mutability.pyx'), -+ 'parent': files('parent.pyx'), -+ 'parent_base': files('parent_base.pyx'), -+ 'parent_gens': files('parent_gens.pyx'), -+ 'parent_old': files('parent_old.pyx'), -+ 'richcmp': files('richcmp.pyx'), -+ 'sage_object': files('sage_object.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/symbolic/meson.build b/src/sage/symbolic/meson.build -index bb8e3c1433e..44e605742b0 100644 ---- a/src/sage/symbolic/meson.build -+++ b/src/sage/symbolic/meson.build -@@ -33,8 +33,8 @@ py.install_sources( - ) - - extension_data = { -- 'function' : files('function.pyx'), -- 'ring' : files('ring.pyx'), -+ 'function': files('function.pyx'), -+ 'ring': files('ring.pyx'), - } - - foreach name, pyx : extension_data -diff --git a/src/sage/tests/meson.build b/src/sage/tests/meson.build -index a76a068cf60..e6d5293ae74 100644 ---- a/src/sage/tests/meson.build -+++ b/src/sage/tests/meson.build -@@ -24,7 +24,7 @@ py.install_sources( - subdir: 'sage/tests', - ) - --extension_data = {'cython' : files('cython.pyx')} -+extension_data = {'cython': files('cython.pyx')} - - foreach name, pyx : extension_data - py.extension_module( -diff --git a/virtual-packages.yml b/virtual-packages.yml -new file mode 100644 -index 00000000000..30b838c0188 diff --git a/srcpkgs/sagemath/patches/40679-Update_to_maxima_5.49.patch b/srcpkgs/sagemath/patches/40679-Update_to_maxima_5.49.patch new file mode 100644 index 00000000000000..1fde72cc1d199b --- /dev/null +++ b/srcpkgs/sagemath/patches/40679-Update_to_maxima_5.49.patch @@ -0,0 +1,615 @@ +diff --git a/src/sage/calculus/calculus.py b/src/sage/calculus/calculus.py +index 270e3c49058..0f64e09e18b 100644 +--- a/src/sage/calculus/calculus.py ++++ b/src/sage/calculus/calculus.py +@@ -133,8 +133,8 @@ + [x^2 + x 2*x^3] + [ 2 x^2 + x] + sage: e^M +- [ 1/2*(e^(2*sqrt(x)) + 1)*e^(x - sqrt(x)) 1/2*(x*e^(2*sqrt(x)) - x)*sqrt(x)*e^(x - sqrt(x))] +- [ 1/2*(e^(2*sqrt(x)) - 1)*e^(x - sqrt(x))/x^(3/2) 1/2*(e^(2*sqrt(x)) + 1)*e^(x - sqrt(x))] ++ [ 1/2*(e^(2*sqrt(x)) + 1)*e^(x - sqrt(x)) 1/2*x^(3/2)*(e^(2*sqrt(x)) - 1)*e^(x - sqrt(x))] ++ [1/2*(e^(2*sqrt(x)) - 1)*e^(x - sqrt(x))/x^(3/2) 1/2*(e^(2*sqrt(x)) + 1)*e^(x - sqrt(x))] + + Complex exponentiation works, but may require a patched version of + maxima (:issue:`32898`) for now:: +@@ -1247,7 +1247,7 @@ def limit(ex, *args, dir=None, taylor=False, algorithm='maxima', **kwargs): + + sage: limit(sin(x)/x, x, 0, algorithm='sympy') + 1 +- sage: limit(sin(x)/x, x, 0, algorithm='giac') # needs sage.libs.giac ++ sage: limit(sin(x)/x, x, 0, algorithm='giac') # needs sage.libs.giac + 1 + sage: limit(x^x, x, 0, dir='+', algorithm='fricas') # optional - fricas + 1 +diff --git a/src/sage/calculus/test_sympy.py b/src/sage/calculus/test_sympy.py +index aa084799a10..e081e9674d9 100644 +--- a/src/sage/calculus/test_sympy.py ++++ b/src/sage/calculus/test_sympy.py +@@ -63,7 +63,7 @@ + sage: diff(tan(x), x) + tan(x)^2 + 1 + sage: limit((tan(x+y) - tan(x))/y, y=0) +- cos(x)^(-2) ++ tan(x)^2 + 1 + sage: diff(sin(2*x), x, 1) + 2*cos(2*x) + sage: diff(sin(2*x), x, 2) +diff --git a/src/sage/calculus/tests.py b/src/sage/calculus/tests.py +index 2879dda115d..abdbbad932e 100644 +--- a/src/sage/calculus/tests.py ++++ b/src/sage/calculus/tests.py +@@ -119,7 +119,7 @@ + sage: integrate(exp(1-x^2),x) + 1/2*sqrt(pi)*erf(x)*e + sage: integrate(sin(x^2),x) +- 1/16*sqrt(pi)*((I + 1)*sqrt(2)*erf((1/2*I + 1/2)*sqrt(2)*x) + (I - 1)*sqrt(2)*erf((1/2*I - 1/2)*sqrt(2)*x) - (I - 1)*sqrt(2)*erf(sqrt(-I)*x) + (I + 1)*sqrt(2)*erf((-1)^(1/4)*x)) ++ 1/16*sqrt(pi)*((I + 1)*sqrt(2)*erf((1/2*I + 1/2)*sqrt(2)*x) - (I - 1)*sqrt(2)*erf(sqrt(-I)*x) - 2*sqrt(2)*imag_part(erf((-1)^(1/4)*x)) + 2*sqrt(2)*real_part(erf((-1)^(1/4)*x))) + + sage: integrate((1-x^2)^n,x) # long time + x*hypergeometric((1/2, -n), (3/2,), x^2*exp_polar(2*I*pi)) +diff --git a/src/sage/functions/bessel.py b/src/sage/functions/bessel.py +index db32eebe381..056bceaf49c 100644 +--- a/src/sage/functions/bessel.py ++++ b/src/sage/functions/bessel.py +@@ -1864,7 +1864,7 @@ class SphericalHankel1(BuiltinFunction): + sage: spherical_hankel1(3 + 0.2 * I, 3) + 0.201654587512037 - 0.531281544239273*I + sage: spherical_hankel1(1, x).simplify() +- -(x + I)*e^(I*x)/x^2 ++ -I*(-I*x + 1)*e^(I*x)/x^2 + sage: spherical_hankel1(3 + 2 * I, 5 - 0.2 * I) + 1.25375216869913 - 0.518011435921789*I + sage: integrate(spherical_hankel1(3, x), x) +@@ -1962,11 +1962,11 @@ class SphericalHankel2(BuiltinFunction): + sage: spherical_hankel2(3 + 0.2 * I, 3) + 0.0998874108557565 + 0.479149050937147*I + sage: spherical_hankel2(1, x).simplify() +- -(x - I)*e^(-I*x)/x^2 ++ I*(I*x + 1)*e^(-I*x)/x^2 + sage: spherical_hankel2(2,i).simplify() + -e + sage: spherical_hankel2(2,x).simplify() +- (-I*x^2 - 3*x + 3*I)*e^(-I*x)/x^3 ++ -I*(x^2 - 3*I*x - 3)*e^(-I*x)/x^3 + sage: spherical_hankel2(3 + 2*I, 5 - 0.2*I) + 0.0217627632692163 + 0.0224001906110906*I + sage: integrate(spherical_hankel2(3, x), x) +diff --git a/src/sage/interfaces/maxima.py b/src/sage/interfaces/maxima.py +index 154a2cc34e0..1eebc46e03a 100644 +--- a/src/sage/interfaces/maxima.py ++++ b/src/sage/interfaces/maxima.py +@@ -194,7 +194,7 @@ + You can even nicely typeset the solution in latex:: + + sage: latex(s) +- \left[ \left[ a=-...{{\sqrt{79}\,i-11}\over{4}}... , b={{...\sqrt{79}\,i+9...}\over{4}} , c={{\sqrt{79}\,i+1}\over{10}} \right] , \left[ a={{...\sqrt{79}\,i+11}\over{4}} , b=-...{{\sqrt{79}\,i-9...}\over{4}}... , c=-...{{...\sqrt{79}\,i-1}\over{10}}... \right] \right] ++ \left[ \left[ a=-\left({{\sqrt{79}\,i-11}\over{4}}\right) , b={{\sqrt{79}\,i +9}\over{4}} , c={{\sqrt{79}\,i+1}\over{10}} \right] , \left[ a={{\sqrt{79} \,i+11}\over{4}} , b=-\left({{\sqrt{79}\,i-9}\over{4}}\right) , c=-\left({{ \sqrt{79}\,i-1}\over{10}}\right) \right] \right] + + To have the above appear onscreen via ``xdvi``, type + ``view(s)``. (TODO: For OS X should create pdf output +@@ -216,11 +216,11 @@ + :: + + sage: f = maxima('x^3 * %e^(k*x) * sin(w*x)'); f +- x^3*%e^(k*x)*sin(w*x) ++ %e^(k*x)*x^3*sin(w*x) + sage: f.diff('x') +- k*x^3*%e^(k*x)*sin(w*x)+3*x^2*%e^(k*x)*sin(w*x)+w*x^3*%e^(k*x) *cos(w*x) ++ %e^(k*x)*k*x^3*sin(w*x)+3*%e^(k*x)*x^2*sin(w*x)+%e^(k*x)*w*x^3 *cos(w*x) + sage: f.integrate('x') +- (((k*w^6+3*k^3*w^4+3*k^5*w^2+k^7)*x^3 +(3*w^6+3*k^2*w^4-3*k^4*w^2-3*k^6)*x^2+(...-...18*k*w^4)-12*k^3*w^2+6*k^5)*x-6*w^4 +36*k^2*w^2-6*k^4) *%e^(k*x)*sin(w*x) +((...-w^7...-3*k^2*w^5-3*k^4*w^3-k^6*w)*x^3...+(6*k*w^5+12*k^3*w^3+6*k^5*w)*x^2...+(6*w^5-12*k^2*w^3-18*k^4*w)*x-24*k*w^3 +24*k^3*w) *%e^(k*x)*cos(w*x)) /(w^8+4*k^2*w^6+6*k^4*w^4+4*k^6*w^2+k^8) ++ (((%e^(k*x)*k*w^6+3*%e^(k*x)*k^3*w^4+3*%e^(k*x)*k^5*w^2+%e^(k*x)*k^7)*x ^3 +(3*%e^(k*x)*w^6+3*%e^(k*x)*k^2*w^4-3*%e^(k*x)*k^4*w^2-3*%e^(k*x)*k^6)*x^2 +(-(18*%e^(k*x)*k*w^4)-12*%e^(k*x)*k^3*w^2+6*%e^(k*x)*k^5)*x-6*%e^(k*x)*w^4 +36*%e^(k*x)*k^2*w^2-6*%e^(k*x)*k^4) *sin(w*x) +((-(%e^(k*x)*w^7)-3*%e^(k*x)*k^2*w^5-3*%e^(k*x)*k^4*w^3-%e^(k*x)*k^6*w)*x^3 +(6*%e^(k*x)*k*w^5+12*%e^(k*x)*k^3*w^3+6*%e^(k*x)*k^5*w)*x^2 +(6*%e^(k*x)*w^5-12*%e^(k*x)*k^2*w^3-18*%e^(k*x)*k^4*w)*x-24*%e^(k*x)*k*w^3 +24*%e^(k*x)*k^3*w) *cos(w*x)) /(w^8+4*k^2*w^6+6*k^4*w^4+4*k^6*w^2+k^8) + + :: + +@@ -291,13 +291,14 @@ + + sage: _ = maxima.eval("f(t) := t^5*exp(t)*sin(t)") + sage: maxima("laplace(f(t),t,s)") +- (360*(2*s-2))/(s^2-2*s+2)^4-(480*(2*s-2)^3)/(s^2-2*s+2)^5 +(120*(2*s-2)^5)/(s^2-2*s+2)^6 ++ (720*s^5-3600*s^4+4800*s^3-2880*s+960) /(s^12-12*s^11+72*s^10-280*s^9+780*s^8-1632*s^7+2624*s^6-3264*s^5+3120*s^4 -2240*s^3+1152*s^2-384*s+64) + sage: print(maxima("laplace(f(t),t,s)")) +- 3 5 +- 360 (2 s - 2) 480 (2 s - 2) 120 (2 s - 2) +- --------------- - --------------- + --------------- +- 2 4 2 5 2 6 +- (s - 2 s + 2) (s - 2 s + 2) (s - 2 s + 2) ++ 5 4 3 ++ (720 s - 3600 s + 4800 s - 2880 s + 960) ++ 12 11 10 9 8 7 6 5 ++ /(s - 12 s + 72 s - 280 s + 780 s - 1632 s + 2624 s - 3264 s ++ 4 3 2 ++ + 3120 s - 2240 s + 1152 s - 384 s + 64) + + :: + +@@ -363,11 +364,11 @@ + + sage: S = maxima('nusum(exp(1+2*i/n),i,1,n)') + sage: print(S) +- 2/n + 3 2/n + 1 +- %e %e +- ----------------------- - ----------------------- +- 1/n 1/n 1/n 1/n +- (%e - 1) (%e + 1) (%e - 1) (%e + 1) ++ 2/n + 3 2/n + 1 ++ %e %e ++ ─────────────────────── - ─────────────────────── ++ 1/n 1/n 1/n 1/n ++ (%e - 1) (%e + 1) (%e - 1) (%e + 1) + + We formally compute the limit as `n\to\infty` of + `2S/n` as follows:: +@@ -418,7 +419,7 @@ + sage: from sage.interfaces.maxima import maxima + sage: g = maxima('exp(3*%i*x)/(6*%i) + exp(%i*x)/(2*%i) + c') + sage: latex(g) +- -...{{i\,e^{3\,i\,x}}\over{6}}...-{{i\,e^{i\,x}}\over{2}}+c ++ c-{{e^{3\,i\,x}\,i}\over{6}}-{{e^{i\,x}\,i}\over{2}} + + Long Input + ---------- +diff --git a/src/sage/interfaces/maxima_abstract.py b/src/sage/interfaces/maxima_abstract.py +index 5866b955bb0..e7c1da2a277 100644 +--- a/src/sage/interfaces/maxima_abstract.py ++++ b/src/sage/interfaces/maxima_abstract.py +@@ -866,11 +866,11 @@ def de_solve(self, de, vars, ics=None): + sage: maxima.de_solve('diff(y,x,2) + 3*x = y', ['x','y'], [1,1,1]) + y = 3*x-2*%e^(x-1) + sage: maxima.de_solve('diff(y,x,2) + 3*x = y', ['x','y']) +- y = %k1*%e^x+%k2*%e^-x+3*x ++ y = 3*x+%e^-x*%k2+%e^x*%k1 + sage: maxima.de_solve('diff(y,x) + 3*x = y', ['x','y']) +- y = (%c-3*(...-x...-1)*%e^-x)*%e^x ++ y = %e^x*(%c-3*%e^-x*(-x-1)) + sage: maxima.de_solve('diff(y,x) + 3*x = y', ['x','y'],[1,1]) +- y = -...%e^-1*(5*%e^x-3*%e*x-3*%e)... ++ y = %e^-1*(3*%e*x-5*%e^x+3*%e) + """ + if not isinstance(vars, str): + str_vars = '%s, %s' % (vars[1], vars[0]) +@@ -910,20 +910,20 @@ def de_solve_laplace(self, de, vars, ics=None): + sage: from sage.interfaces.maxima_lib import maxima + sage: maxima.clear('x'); maxima.clear('f') + sage: maxima.de_solve_laplace("diff(f(x),x,2) = 2*diff(f(x),x)-f(x)", ["x","f"], [0,1,2]) +- f(x) = x*%e^x+%e^x ++ f(x) = %e^x*x+%e^x + + :: + + sage: maxima.clear('x'); maxima.clear('f') + sage: f = maxima.de_solve_laplace("diff(f(x),x,2) = 2*diff(f(x),x)-f(x)", ["x","f"]) + sage: f +- f(x) = x*%e^x*('at('diff(f(x),x,1),x = 0))-f(0)*x*%e^x+f(0)*%e^x ++ f(x) = %e^x*x*('at('diff(f(x),x,1),x = 0))-%e^x*f(0)*x+%e^x*f(0) + sage: print(f) +- ! +- x d ! x x +- f(x) = x %e (-- (f(x))! ) - f(0) x %e + f(0) %e +- dx ! +- !x = 0 ++ │ ++ x d │ x x ++ f(x) = %e x (── (f(x))│ ) - %e f(0) x + %e f(0) ++ dx │ ++ │x = 0 + + .. NOTE:: + +@@ -1136,10 +1136,10 @@ def __str__(self): + sage: f = maxima('1/(x-1)^3'); f + 1/(x-1)^3 + sage: print(f) +- 1 +- -------- +- 3 +- (x - 1) ++ 1 ++ ──────── ++ 3 ++ (x - 1) + """ + return self.display2d(onscreen=False) + +@@ -1798,9 +1798,9 @@ def _latex_(self): + sage: y,d = var('y,d') + sage: f = function('f') + sage: latex(maxima(derivative(f(x*y), x))) +- \left(\left.{{{\it \partial}}\over{{\it \partial}\, {\it \_symbol}_{0}}}\,f\left( {\it \_symbol}_{0}\right)\right|_{ {\it \_symbol}_{0}={\it x}\, {\it y}}\right)\,{\it y} ++ \left(\left.{{{\it \partial}}\over{{\it \partial}\, {\it \_symbol}_{0}}}\,f\left({\it \_symbol}_{0} \right)\right|_{{\it \_symbol}_{0}={\it x}\, {\it y}}\right)\,{\it y} + sage: latex(maxima(derivative(f(x,y,d), d,x,x,y))) +- {{{\it \partial}^4}\over{{\it \partial}\,{\it d}\, {\it \partial}\,{\it x}^2\,{\it \partial}\, {\it y}}}\,f\left({\it x} , {\it y} , {\it d}\right) ++ {{{\it \partial}^4}\over{{\it \partial}\,{\it d}\, {\it \partial}\,{\it x}^2\,{\it \partial}\,{\it y} }}\,f\left({\it x} , {\it y} , {\it d} \right) + sage: latex(maxima(d/(d-2))) + {{{\it d}}\over{{\it d}-2}} + """ +@@ -1929,9 +1929,9 @@ def partial_fraction_decomposition(self, var='x'): + sage: f.partial_fraction_decomposition('x') + 1/(2*(x-1))-1/(2*(x+1)) + sage: print(f.partial_fraction_decomposition('x')) +- 1 1 +- --------- - --------- +- 2 (x - 1) 2 (x + 1) ++ 1 1 ++ ───────── - ───────── ++ 2 (x - 1) 2 (x + 1) + """ + return self.partfrac(var) + +diff --git a/src/sage/interfaces/maxima_lib.py b/src/sage/interfaces/maxima_lib.py +index 637ef29a6f2..fff2a6ee39c 100644 +--- a/src/sage/interfaces/maxima_lib.py ++++ b/src/sage/interfaces/maxima_lib.py +@@ -164,7 +164,7 @@ + ecl_eval("(setq $nolabels t))") + ecl_eval("(defun add-lineinfo (x) x)") + ecl_eval(r"(defun tex-derivative (x l r) (tex (if $derivabbrev (tex-dabbrev x) (tex-d x '\\partial)) l r lop rop ))") +-ecl_eval('(defun principal nil (cond ($noprincipal (diverg)) ((not pcprntd) (merror "Divergent Integral"))))') ++ecl_eval('(defun principal nil (cond ($noprincipal (diverg)) ((not *pcprntd*) (merror "Divergent Integral"))))') + ecl_eval("(remprop 'mfactorial 'grind)") # don't use ! for factorials (#11539) + ecl_eval("(setf $errormsg nil)") + +@@ -1224,6 +1224,8 @@ def reduce_load_MaximaLib(): + sage.functions.error.erf: "%ERF", + sage.functions.gamma.gamma_inc: "%GAMMA_INCOMPLETE", + sage.functions.other.conjugate: "$CONJUGATE", ++ sage.functions.other.imag_part: "%IMAGPART", ++ sage.functions.other.real_part: "%REALPART", + } + # we compile the dictionary + sage_op_dict = {k: EclObject(sage_op_dict[k]) for k in sage_op_dict} +diff --git a/src/sage/manifolds/chart.py b/src/sage/manifolds/chart.py +index 7232f0c4ddb..1240fe5ad83 100644 +--- a/src/sage/manifolds/chart.py ++++ b/src/sage/manifolds/chart.py +@@ -3761,7 +3761,7 @@ def set_inverse(self, *transformations, **kwds): + sage: spher_to_cart.set_inverse(sqrt(x^2+y^2), atan2(y,x)) + Check of the inverse coordinate transformation: + r == r *passed* +- ph == arctan2(r*sin(ph), r*cos(ph)) **failed** ++ ph == -2*pi*ceil(-1/2*(pi - ph)/pi) + ph **failed** + x == x *passed* + y == y *passed* + NB: a failed report can reflect a mere lack of simplification. +@@ -3798,8 +3798,8 @@ def set_inverse(self, *transformations, **kwds): + + sage: spher_to_cart.set_inverse(sqrt(x^3+y^2), atan2(y,x)) + Check of the inverse coordinate transformation: +- r == sqrt(r*cos(ph)^3 + sin(ph)^2)*r **failed** +- ph == arctan2(r*sin(ph), r*cos(ph)) **failed** ++ r == r*sqrt(abs(r*cos(ph)^3 + sin(ph)^2)) **failed** ++ ph == -2*pi*ceil(-1/2*(pi - ph)/pi) + ph **failed** + x == sqrt(x^3 + y^2)*x/sqrt(x^2 + y^2) **failed** + y == sqrt(x^3 + y^2)*y/sqrt(x^2 + y^2) **failed** + NB: a failed report can reflect a mere lack of simplification. +diff --git a/src/sage/manifolds/continuous_map.py b/src/sage/manifolds/continuous_map.py +index e673f0ced6d..bd9db2f3e2b 100644 +--- a/src/sage/manifolds/continuous_map.py ++++ b/src/sage/manifolds/continuous_map.py +@@ -1578,7 +1578,7 @@ def expr(self, chart1=None, chart2=None): + sage: ch_spher_cart.set_inverse(sqrt(x^2+y^2), atan2(y,x)) + Check of the inverse coordinate transformation: + r == r *passed* +- ph == arctan2(r*sin(ph), r*cos(ph)) **failed** ++ ph == -2*pi*ceil(-1/2*(pi - ph)/pi) + ph **failed** + x == x *passed* + y == y *passed* + NB: a failed report can reflect a mere lack of simplification. +@@ -1627,7 +1627,7 @@ def set_expr(self, chart1, chart2, coord_functions): + x == x *passed* + y == y *passed* + r == r *passed* +- ph == arctan2(r*sin(ph), r*cos(ph)) **failed** ++ ph == -2*pi*ceil(-1/2*(pi - ph)/pi) + ph **failed** + NB: a failed report can reflect a mere lack of simplification. + sage: rot = U.continuous_map(U, ((x - sqrt(3)*y)/2, (sqrt(3)*x + y)/2), + ....: name='R') +@@ -1681,7 +1681,7 @@ def set_expr(self, chart1, chart2, coord_functions): + x == x *passed* + y == y *passed* + r == r *passed* +- ph == arctan2(r*sin(ph), r*cos(ph)) **failed** ++ ph == -2*pi*ceil(-1/2*(pi - ph)/pi) + ph **failed** + NB: a failed report can reflect a mere lack of simplification. + sage: rot = U.continuous_map(U, ((x - sqrt(3)*y)/2, (sqrt(3)*x + y)/2), + ....: name='R') +@@ -1770,7 +1770,7 @@ def add_expr(self, chart1, chart2, coord_functions): + x == x *passed* + y == y *passed* + r == r *passed* +- ph == arctan2(r*sin(ph), r*cos(ph)) **failed** ++ ph == -2*pi*ceil(-1/2*(pi - ph)/pi) + ph **failed** + NB: a failed report can reflect a mere lack of simplification. + sage: rot = U.continuous_map(U, ((x - sqrt(3)*y)/2, (sqrt(3)*x + y)/2), + ....: name='R') +@@ -1784,7 +1784,7 @@ def add_expr(self, chart1, chart2, coord_functions): + + sage: rot.display(c_spher, c_spher) + R: U → U +- (r, ph) ↦ (r, arctan2(1/2*(sqrt(3)*cos(ph) + sin(ph))*r, -1/2*(sqrt(3)*sin(ph) - cos(ph))*r)) ++ (r, ph) ↦ (r, arctan2(1/2*sqrt(3)*cos(ph) + 1/2*sin(ph), -1/2*sqrt(3)*sin(ph) + 1/2*cos(ph))) + + Therefore, we use the method :meth:`add_expr` to set the + spherical-coordinate expression by hand:: +diff --git a/src/sage/manifolds/differentiable/automorphismfield_group.py b/src/sage/manifolds/differentiable/automorphismfield_group.py +index 45a2fad087a..11a548a0317 100644 +--- a/src/sage/manifolds/differentiable/automorphismfield_group.py ++++ b/src/sage/manifolds/differentiable/automorphismfield_group.py +@@ -535,8 +535,7 @@ class AutomorphismFieldParalGroup(FreeModuleLinearGroup): + Field of tangent-space automorphisms t^(-1) on the 2-dimensional + differentiable manifold M + sage: (t1^(-1)).display() +- t^(-1) = 1/(e^y + 1) ∂/∂x⊗dx - x*y/(x^2 + (x^2 + 1)*e^y + 1) ∂/∂x⊗dy +- + 1/(x^2 + 1) ∂/∂y⊗dy ++ t^(-1) = 1/(e^y + 1) ∂/∂x⊗dx - x*y/(x^2*(e^y + 1) + e^y + 1) ∂/∂x⊗dy + 1/(x^2 + 1) ∂/∂y⊗dy + + Since any automorphism field can be considered as a tensor field of + type-`(1,1)` on ``M``, there is a coercion map from ``G`` to the +diff --git a/src/sage/manifolds/differentiable/curve.py b/src/sage/manifolds/differentiable/curve.py +index 8a1cfc2e77e..9c1d518acc3 100644 +--- a/src/sage/manifolds/differentiable/curve.py ++++ b/src/sage/manifolds/differentiable/curve.py +@@ -466,7 +466,7 @@ def coord_expr(self, chart=None): + x == x *passed* + y == y *passed* + r == r *passed* +- ph == arctan2(r*sin(ph), r*cos(ph)) **failed** ++ ph == -2*pi*ceil(-1/2*(pi - ph)/pi) + ph **failed** + NB: a failed report can reflect a mere lack of simplification. + sage: R. = manifolds.RealLine() + sage: c = U.curve({c_spher: (1,t)}, (t, 0, 2*pi), name='c') +diff --git a/src/sage/manifolds/differentiable/metric.py b/src/sage/manifolds/differentiable/metric.py +index 01b48ef9724..43758ba7e73 100644 +--- a/src/sage/manifolds/differentiable/metric.py ++++ b/src/sage/manifolds/differentiable/metric.py +@@ -1556,9 +1556,9 @@ def sqrt_abs_det(self, frame=None): + [ 1/8*u^2 - 1/8*v^2 + 1/4*v + 1/2 1/4*u] + [ 1/4*u -1/8*u^2 + 1/8*v^2 + 1/4*v + 1/2] + sage: g.sqrt_abs_det(Y.frame()).expr() +- 1/2*sqrt(-x^2*y^2 - (x + 1)*y + x + 1) ++ 1/2*sqrt(abs(x^2*y^2 + (x + 1)*y - x - 1)) + sage: g.sqrt_abs_det(Y.frame()).expr(Y) +- 1/8*sqrt(-u^4 - v^4 + 2*(u^2 + 2)*v^2 - 4*u^2 + 16*v + 16) ++ 1/8*sqrt(abs(u^4 + v^4 - 2*(u^2 + 2)*v^2 + 4*u^2 - 16*v - 16)) + + A chart can be passed instead of a frame:: + +@@ -1578,9 +1578,9 @@ def sqrt_abs_det(self, frame=None): + sage: g.sqrt_abs_det().expr() + sqrt(-x**2*y**2 - x*y + x - y + 1) + sage: g.sqrt_abs_det(Y.frame()).expr() +- sqrt(-x**2*y**2 - x*y + x - y + 1)/2 ++ sqrt(Abs(x**2*y**2 + x*y - x + y - 1))/2 + sage: g.sqrt_abs_det(Y.frame()).expr(Y) +- sqrt(-u**4 + 2*u**2*v**2 - 4*u**2 - v**4 + 4*v**2 + 16*v + 16)/8 ++ sqrt(Abs(-u**4 + 2*u**2*v**2 - 4*u**2 - v**4 + 4*v**2 + 16*v + 16))/8 + """ + dom = self._domain + if frame is None: +diff --git a/src/sage/manifolds/differentiable/pseudo_riemannian_submanifold.py b/src/sage/manifolds/differentiable/pseudo_riemannian_submanifold.py +index 57dc1c99862..e7c7aaebeea 100644 +--- a/src/sage/manifolds/differentiable/pseudo_riemannian_submanifold.py ++++ b/src/sage/manifolds/differentiable/pseudo_riemannian_submanifold.py +@@ -819,8 +819,7 @@ def normal(self): + ....: atan2(-y,-x)+pi) + Check of the inverse coordinate transformation: + the == 2*arctan(sqrt(-cos(the) + 1)/sqrt(cos(the) + 1)) **failed** +- phi == pi + arctan2(sin(phi)*sin(the)/(cos(the) - 1), +- cos(phi)*sin(the)/(cos(the) - 1)) **failed** ++ phi == pi + arctan2(cos(the)*sin(phi) - sin(phi), cos(phi)*cos(the) - cos(phi)) **failed** + x == x *passed* + y == y *passed* + NB: a failed report can reflect a mere lack of simplification. +diff --git a/src/sage/manifolds/utilities.py b/src/sage/manifolds/utilities.py +index b1eed3b8b2e..57b35bef6cc 100644 +--- a/src/sage/manifolds/utilities.py ++++ b/src/sage/manifolds/utilities.py +@@ -225,10 +225,10 @@ class SimplifyAbsTrig(ExpressionTreeWalker): + sage: a = abs(cos(x)) + abs(sin(x)) + + The method :meth:`~sage.symbolic.expression.Expression.simplify_full()` +- is ineffective on such an expression:: ++ works on such an expression:: + + sage: a.simplify_full() +- abs(cos(x)) + abs(sin(x)) ++ -cos(x) + sin(x) + + We construct a :class:`SimplifyAbsTrig` object ``s`` from the symbolic + expression ``a``:: +@@ -436,9 +436,9 @@ def simplify_abs_trig(expr): + + sage: s = abs(sin(x)) + abs(sin(y)) + abs(sin(3*z)) + sage: s.simplify_trig() +- abs(4*cos(-z)^2 - 1)*abs(sin(-z)) + abs(sin(x)) + abs(sin(y)) ++ -4*sin(-z)^3 + abs(sin(x)) + sin(y) + 3*sin(-z) + sage: s.simplify_full() +- abs(4*cos(-z)^2 - 1)*abs(sin(-z)) + abs(sin(x)) + abs(sin(y)) ++ -4*sin(-z)^3 + abs(sin(x)) + sin(y) + 3*sin(-z) + + despite the following assumptions hold:: + +@@ -571,10 +571,10 @@ def simplify_chain_real(expr): + sage: s = abs(sin(pi*x)) + sage: simplify_chain_real(s) # correct output since x in (0,1) + sin(pi*x) +- sage: s.simplify_real() # unsimplified output +- abs(sin(pi*x)) +- sage: s.simplify_full() # unsimplified output +- abs(sin(pi*x)) ++ sage: s.simplify_real() # simplified output with maxima>=5.48 ++ sin(pi*x) ++ sage: s.simplify_full() # simplified output with maxima>=5.48 ++ sin(pi*x) + + :: + +diff --git a/src/sage/matrix/matrix2.pyx b/src/sage/matrix/matrix2.pyx +index 7ff5a3a95bc..6c057a23bbe 100644 +--- a/src/sage/matrix/matrix2.pyx ++++ b/src/sage/matrix/matrix2.pyx +@@ -16669,8 +16669,8 @@ cdef class Matrix(Matrix1): + sage: # needs sage.symbolic + sage: a = matrix([[1,2], [3,4]]) + sage: a.exp() +- [-1/22*((sqrt(33) - 11)*e^sqrt(33) - sqrt(33) - 11)*e^(-1/2*sqrt(33) + 5/2) 2/33*(sqrt(33)*e^sqrt(33) - sqrt(33))*e^(-1/2*sqrt(33) + 5/2)] +- [ 1/11*(sqrt(33)*e^sqrt(33) - sqrt(33))*e^(-1/2*sqrt(33) + 5/2) 1/22*((sqrt(33) + 11)*e^sqrt(33) - sqrt(33) + 11)*e^(-1/2*sqrt(33) + 5/2)] ++ [ 1/22*((sqrt(33) + 11)*e^2 - (sqrt(33) - 11)*e^(sqrt(33) + 2))*e^(-1/2*sqrt(33) + 1/2) -2/33*(sqrt(33)*e^2 - sqrt(33)*e^(sqrt(33) + 2))*e^(-1/2*sqrt(33) + 1/2)] ++ [ -1/11*(sqrt(33)*e^2 - sqrt(33)*e^(sqrt(33) + 2))*e^(-1/2*sqrt(33) + 1/2) -1/22*((sqrt(33) - 11)*e^2 - (sqrt(33) + 11)*e^(sqrt(33) + 2))*e^(-1/2*sqrt(33) + 1/2)] + + sage: type(a.exp()) # needs sage.symbolic + +diff --git a/src/sage/misc/functional.py b/src/sage/misc/functional.py +index 65a35b45a53..74ecc2198a6 100644 +--- a/src/sage/misc/functional.py ++++ b/src/sage/misc/functional.py +@@ -721,9 +721,7 @@ def integral(x, *args, **kwds): + real + sage: f = exp(-x) * sinh(sqrt(x)) + sage: t = integrate(f, x, 0, Infinity); t # long time +- 1/4*sqrt(pi)*(erf(1) - 1)*e^(1/4) +- - 1/4*(sqrt(pi)*(erf(1) - 1) - sqrt(pi) + 2*e^(-1) - 2)*e^(1/4) +- + 1/4*sqrt(pi)*e^(1/4) - 1/2*e^(1/4) + 1/2*e^(-3/4) ++ 1/2*sqrt(pi)*e^(1/4) + sage: t.canonicalize_radical() # long time + 1/2*sqrt(pi)*e^(1/4) + sage: sage.calculus.calculus.maxima('domain: complex') +@@ -932,7 +930,7 @@ def krull_dimension(x): + 0 + sage: ZZ.krull_dimension() + 1 +- sage: ZZ[sqrt(5)].krull_dimension() # needs sage.rings.number_field sage.symbolic ++ sage: ZZ[sqrt(5)].krull_dimension() # needs sage.rings.number_field sage.symbolic + 1 + sage: U. = PolynomialRing(ZZ, 3); U + Multivariate Polynomial Ring in x, y, z over Integer Ring +diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx +index 691acf2c947..07b191522c9 100644 +--- a/src/sage/symbolic/expression.pyx ++++ b/src/sage/symbolic/expression.pyx +@@ -13019,21 +13019,21 @@ cdef class Expression(Expression_abc): + Check that the sum in :issue:`10682` is done right:: + + sage: sum(binomial(n,k)*k^2, k, 2, n) +- 1/4*(n^2 + n)*2^n - n ++ 1/4*2^n*n^2 + 1/4*(2^n - 4)*n + + This sum used to give a wrong result (:issue:`9635`) but + now gives correct results with all relevant assumptions:: + + sage: (n,k,j)=var('n,k,j') + sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n) +- -(-1)^j*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n) ++ -sum((-1)^(-j + k)*binomial(k - 1, j)*binomial(n, k), k, j + 1, n) + sage: assume(j>-1) + sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n) + 1 + sage: forget() + sage: assume(n>=j) + sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n) +- -(-1)^j*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n) ++ -sum((-1)^(-j + k)*binomial(k - 1, j)*binomial(n, k), k, j + 1, n) + sage: forget() + sage: assume(j==-1) + sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n) +@@ -13041,7 +13041,7 @@ cdef class Expression(Expression_abc): + sage: forget() + sage: assume(j<-1) + sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n) +- -(-1)^j*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n) ++ -sum((-1)^(-j + k)*binomial(k - 1, j)*binomial(n, k), k, j + 1, n) + sage: forget() + + Check that :issue:`16176` is fixed:: +diff --git a/src/sage/symbolic/integration/external.py b/src/sage/symbolic/integration/external.py +index c99676c0b88..105e8e3bbbd 100644 +--- a/src/sage/symbolic/integration/external.py ++++ b/src/sage/symbolic/integration/external.py +@@ -31,12 +31,7 @@ def maxima_integrator(expression, v, a=None, b=None): + Check that :issue:`25817` is fixed:: + + sage: maxima_integrator(log(e^x*log(x)*sin(x))/x^2, x) +- 1/2*(x*(Ei(-log(x)) + conjugate(Ei(-log(x)))) +- - 2*x*integrate(sin(x)/(x*cos(x)^2 + x*sin(x)^2 +- + 2*x*cos(x) + x), x) + 2*x*integrate(sin(x)/(x*cos(x)^2 +- + x*sin(x)^2 - 2*x*cos(x) + x), x) + 2*x*log(x) + 2*log(2) +- - log(cos(x)^2 + sin(x)^2 + 2*cos(x) + 1) - log(cos(x)^2 +- + sin(x)^2 - 2*cos(x) + 1) - 2*log(log(x)))/x ++ -1/2*(2*x*integrate(sin(x)/(x*cos(x)^2 + x*sin(x)^2 + 2*x*cos(x) + x), x) - 2*x*integrate(sin(x)/(x*cos(x)^2 + x*sin(x)^2 - 2*x*cos(x) + x), x) - 2*x*log(x) - 2*x*real_part(Ei(-log(x))) - 2*log(2) + log(cos(x)^2 + sin(x)^2 + 2*cos(x) + 1) + log(cos(x)^2 + sin(x)^2 - 2*cos(x) + 1) + 2*log(log(x)))/x + """ + from sage.calculus.calculus import maxima + if not isinstance(expression, Expression): +diff --git a/src/sage/symbolic/integration/integral.py b/src/sage/symbolic/integration/integral.py +index b3d1dd1c2bf..1002343e884 100644 +--- a/src/sage/symbolic/integration/integral.py ++++ b/src/sage/symbolic/integration/integral.py +@@ -614,10 +614,7 @@ def integrate(expression, v=None, a=None, b=None, algorithm=None, hold=False): + x y + Sqrt[--] FresnelS[Sqrt[--] x] + 2 Pi + sage: print(f.integral(x)) +- x*y^z + 1/16*sqrt(pi)*((I + 1)*sqrt(2)*erf((1/2*I + 1/2)*sqrt(2)*x) +- + (I - 1)*sqrt(2)*erf((1/2*I - 1/2)*sqrt(2)*x) +- - (I - 1)*sqrt(2)*erf(sqrt(-I)*x) +- + (I + 1)*sqrt(2)*erf((-1)^(1/4)*x)) ++ x*y^z + 1/16*sqrt(pi)*((I + 1)*sqrt(2)*erf((1/2*I + 1/2)*sqrt(2)*x) - (I - 1)*sqrt(2)*erf(sqrt(-I)*x) - 2*sqrt(2)*imag_part(erf((-1)^(1/4)*x)) + 2*sqrt(2)*real_part(erf((-1)^(1/4)*x))) + + Alternatively, just use algorithm='mathematica_free' to integrate via Mathematica + over the internet (does NOT require a Mathematica license!):: +@@ -1011,8 +1008,8 @@ def integrate(expression, v=None, a=None, b=None, algorithm=None, hold=False): + sage: f = log(sin(x))*sin(x)^2 + sage: g = integrate(f, x) ; g + 1/4*I*x^2 ++ - 1/2*I*x*arctan2(-sin(x), -cos(x) + 1) + - 1/2*I*x*arctan2(sin(x), cos(x) + 1) +- + 1/2*I*x*arctan2(sin(x), -cos(x) + 1) + - 1/4*x*log(cos(x)^2 + sin(x)^2 + 2*cos(x) + 1) + - 1/4*x*log(cos(x)^2 + sin(x)^2 - 2*cos(x) + 1) + + 1/4*(2*x - sin(2*x))*log(sin(x)) +@@ -1036,7 +1033,7 @@ def integrate(expression, v=None, a=None, b=None, algorithm=None, hold=False): + sage: assume(a > 0) + sage: assume(a < 1) + sage: integrate(x*log(1/(a*x+(1-x)^2)), x, 0, 1, algorithm='maxima') +- 1/4*a^2*log(a) + 1/2*sqrt(-a^2 + 4*a)*a*arctan(sqrt(-a^2 + 4*a)*(a - 2)/(a^2 - 4*a)) - 1/2*sqrt(-a^2 + 4*a)*a*arctan(sqrt(-a^2 + 4*a)/(a - 4)) - a*log(a) - sqrt(-a^2 + 4*a)*arctan(sqrt(-a^2 + 4*a)*(a - 2)/(a^2 - 4*a)) + sqrt(-a^2 + 4*a)*arctan(sqrt(-a^2 + 4*a)/(a - 4)) - 1/2*a + 3/2 ++ 1/4*a^2*log(a) - 1/2*sqrt(-a^2 + 4*a)*a*arctan(sqrt(-a^2 + 4*a)/(a - 4)) + 1/2*sqrt(-a^2 + 4*a)*a*arctan(sqrt(-a^2 + 4*a)*(a - 2)/((a - 4)*a)) - a*log(a) + sqrt(-a^2 + 4*a)*arctan(sqrt(-a^2 + 4*a)/(a - 4)) - sqrt(-a^2 + 4*a)*arctan(sqrt(-a^2 + 4*a)*(a - 2)/((a - 4)*a)) - 1/2*a + 3/2 + + Check that :issue:`25905` is fixed:: + +diff --git a/src/sage/symbolic/relation.py b/src/sage/symbolic/relation.py +index 8fada2b4e9b..02cfc43f282 100644 +--- a/src/sage/symbolic/relation.py ++++ b/src/sage/symbolic/relation.py +@@ -1338,20 +1338,6 @@ def _solve_expression(f, x, explicit_solutions, multiplicities, + sage: (x^2>1).solve(x) + [[x < -1], [x > 1]] + +- Catch error message from Maxima:: +- +- sage: solve(acot(x),x) +- Traceback (most recent call last): +- ... +- TypeError: ECL says: cot: argument 0 isn't in the domain of cot. +- +- :: +- +- sage: solve(acot(x),x,to_poly_solve=True) +- Traceback (most recent call last): +- ... +- TypeError: ECL says: cot: argument 0 isn't in the domain of cot. +- + :issue:`7491` fixed:: + + sage: y = var('y') +diff --git a/src/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py b/src/sage/tests/books/computational-mathematics-with-sagemath/calculus_doctest.py +index b5531b112b4..15f74fe5779 100644 +--- a/src/sage/tests/books/computational_mathematics_with_sagemath/calculus_doctest.py ++++ b/src/sage/tests/books/computational_mathematics_with_sagemath/calculus_doctest.py +@@ -256,7 +256,7 @@ + Sage example in ./calculus.tex, line 1086:: + + sage: solve(x^(1/x)==(1/x)^x, x) +- [(1/x)^x == x^(1/x)] ++ [x^(1/x) == (1/x)^x] + + Sage example in ./calculus.tex, line 1124:: + diff --git a/srcpkgs/sagemath/patches/40816-Meson:_Build_docs_for_Maxima_as_well.patch b/srcpkgs/sagemath/patches/40816-Meson:_Build_docs_for_Maxima_as_well.patch deleted file mode 100644 index 8c3acbf3fee2da..00000000000000 --- a/srcpkgs/sagemath/patches/40816-Meson:_Build_docs_for_Maxima_as_well.patch +++ /dev/null @@ -1,113 +0,0 @@ -diff --git a/src/sage/config.py.in b/src/sage/config.py.in -index de5ad8b2169..f75e951f3b8 100644 ---- a/src/sage/config.py.in -+++ b/src/sage/config.py.in -@@ -21,7 +21,7 @@ MAXIMA = "@SAGE_MAXIMA@".replace("${prefix}", SAGE_LOCAL) - # Set this to the empty string if your ECL can load maxima without - # further prodding. - MAXIMA_FAS = "@SAGE_MAXIMA_FAS@".replace("${prefix}", SAGE_LOCAL) --MAXIMA_SHARE = "@SAGE_MAXIMA_SHARE@".replace("${prefix}", SAGE_LOCAL) -+MAXIMA_PREFIX = "@SAGE_MAXIMA_PREFIX@".replace("${prefix}", SAGE_LOCAL) - - # Delete this line if your ECL can load Kenzo without further prodding. - KENZO_FAS = "@SAGE_KENZO_FAS@".replace("${prefix}", SAGE_LOCAL) -diff --git a/src/sage/env.py b/src/sage/env.py -index c7c46bf4ec3..71e87c3f0f6 100644 ---- a/src/sage/env.py -+++ b/src/sage/env.py -@@ -204,7 +204,7 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st - PPLPY_DOCS = var("PPLPY_DOCS", join(SAGE_SHARE, "doc", "pplpy")) - MAXIMA = var("MAXIMA", "maxima") - MAXIMA_FAS = var("MAXIMA_FAS") --MAXIMA_SHARE = var("MAXIMA_SHARE") -+MAXIMA_PREFIX = var("MAXIMA_PREFIX") - KENZO_FAS = var("KENZO_FAS") - SAGE_NAUTY_BINS_PREFIX = var("SAGE_NAUTY_BINS_PREFIX", "") - SAGE_ECMBIN = var("SAGE_ECMBIN", "ecm") -diff --git a/src/sage/interfaces/maxima.py b/src/sage/interfaces/maxima.py -index 154a2cc34e0..9df024abf39 100644 ---- a/src/sage/interfaces/maxima.py -+++ b/src/sage/interfaces/maxima.py -@@ -515,7 +515,7 @@ - - import pexpect - --from sage.env import MAXIMA -+from sage.env import MAXIMA, MAXIMA_PREFIX - from sage.interfaces.expect import Expect, ExpectElement, gc_disabled - from sage.interfaces.maxima_abstract import ( - MaximaAbstract, -@@ -587,11 +587,16 @@ def __init__(self, script_subdirectory=None, logfile=None, server=None, - # See trac # 6818. - init_code.append('nolabels : true') - -+ env = {} -+ if MAXIMA_PREFIX: -+ env['MAXIMA_PREFIX'] = MAXIMA_PREFIX -+ - MaximaAbstract.__init__(self, "maxima") - Expect.__init__(self, - name='maxima', - prompt=r'\(\%i[0-9]+\) ', - command='{0} -p {1}'.format(MAXIMA, shlex.quote(STARTUP)), -+ env=env, - script_subdirectory=script_subdirectory, - restart_on_ctrlc=False, - verbose_start=False, -diff --git a/src/sage/interfaces/maxima_lib.py b/src/sage/interfaces/maxima_lib.py -index 637ef29a6f2..3d27bd834b5 100644 ---- a/src/sage/interfaces/maxima_lib.py -+++ b/src/sage/interfaces/maxima_lib.py -@@ -112,11 +112,12 @@ - # - # https://www.gnu.org/licenses/ - # **************************************************************************** -+import os - - import sage.rings.real_double - import sage.symbolic.expression - import sage.symbolic.integration.integral --from sage.env import MAXIMA_FAS, MAXIMA_SHARE -+from sage.env import MAXIMA_FAS, MAXIMA_PREFIX - from sage.interfaces.maxima_abstract import ( - MaximaAbstract, - MaximaAbstractElement, -@@ -141,6 +142,9 @@ - ecl_eval("(in-package :maxima)") - ecl_eval("(set-locale-subdir)") - -+if MAXIMA_PREFIX: -+ os.environ["MAXIMA_PREFIX"] = MAXIMA_PREFIX -+ - # This workaround has to happen before any call to (set-pathnames). - # To be safe please do not call anything other than - # (set-locale-subdir) before this block. -@@ -207,10 +211,10 @@ - - # Add search paths - # Keep these in sync with the default Maxima search paths defined in subprojects/maxima-/src/share-subdirs_autogenerated.lisp --if MAXIMA_SHARE: -+if MAXIMA_PREFIX: - import_packages = "{affine,algebra,algebra/charsets,algebra/solver,amatrix,bernstein,calculus,cobyla,cobyla/ex,cobyla/lisp,colnew,colnew/ex1,colnew/ex2,colnew/ex3,colnew/ex4,colnew/lisp,combinatorics,contrib,contrib/Eulix,contrib/Grobner,contrib/Zeilberger,contrib/alt-display,contrib/altsimp,contrib/binsplit,contrib/bitwise,contrib/boolsimp,contrib/coma,contrib/diffequations,contrib/diffequations/tests,contrib/elliptic_curves,contrib/elliptic_curves/figures,contrib/format,contrib/fresnel,contrib/gentran,contrib/gentran/man,contrib/gentran/test,contrib/gf,contrib/integration,contrib/levin,contrib/lurkmathml,contrib/maxima-odesolve,contrib/maximaMathML,contrib/mcclim,contrib/noninteractive,contrib/odes,contrib/operatingsystem,contrib/prim,contrib/rand,contrib/rkf45,contrib/sarag,contrib/smath,contrib/state,contrib/symplectic_ode,contrib/trigtools,contrib/unicodedata,contrib/unit,contrib/vector3d,descriptive,diff_form,diff_form/tests,diffequations,distrib,draw,dynamics,ezunits,fftpack5,fftpack5/lisp,finance,fourier_elim,fractals,graphs,hompack,hompack/lisp,hypergeometric,integequations,integer_sequence,integration,lapack,lapack/blas,lapack/lapack,lbfgs,linearalgebra,logic,lsquares,macro,matrix,minpack,minpack/lisp,misc,mnewton,multiadditive,nelder_mead,numeric,numericalio,odepack,odepack/src,orthopoly,pdiff,physics,pslq,pytranslate,quantum,simplex,simplex/Tests,simplification,solve_rat_ineq,solve_rec,sound,stats,stringproc,sym,tensor,tensor/tracefree-code,test_batch_encodings,to_poly_solve,translators,translators/m2mj,trigonometry,utils,vector,z_transform}" -- ecl_eval(f'#$file_search_maxima: append(file_search_maxima, ["{MAXIMA_SHARE}/###.{{mac,mc,wxm}}", "{MAXIMA_SHARE}/{import_packages}/###.{{mac,mc,wxm}}"])$') -- ecl_eval(f'#$file_search_lisp: append(file_search_lisp, ["{MAXIMA_SHARE}/###.{{fas,lisp,lsp}}", "{MAXIMA_SHARE}/{import_packages}/###.{{fas,lisp,lsp}}"])$') -+ ecl_eval(f'#$file_search_maxima: append(file_search_maxima, ["{MAXIMA_PREFIX}/###.{{mac,mc,wxm}}", "{MAXIMA_PREFIX}/{import_packages}/###.{{mac,mc,wxm}}"])$') -+ ecl_eval(f'#$file_search_lisp: append(file_search_lisp, ["{MAXIMA_PREFIX}/###.{{fas,lisp,lsp}}", "{MAXIMA_PREFIX}/../src/###.{{fas,lisp,lsp}}", "{MAXIMA_PREFIX}/{import_packages}/###.{{fas,lisp,lsp}}"])$') - - # Default options set in Maxima - # display2d -- no ascii art output -diff --git a/subprojects/packagefiles/maxima/build/doc/info/meson.build b/subprojects/packagefiles/maxima/build/doc/info/meson.build -new file mode 100644 -index 00000000000..e8c69f73526 -diff --git a/subprojects/packagefiles/maxima/build/doc/meson.build b/subprojects/packagefiles/maxima/build/doc/meson.build -new file mode 100644 -index 00000000000..eba36e4bdc3 -diff --git a/subprojects/packagefiles/maxima/build/meson.build b/subprojects/packagefiles/maxima/build/meson.build -new file mode 100644 -index 00000000000..4112780103d -diff --git a/subprojects/packagefiles/maxima/infodir.patch b/subprojects/packagefiles/maxima/infodir.patch -new file mode 100644 -index 00000000000..a4c037bb848 -diff --git a/subprojects/packagefiles/maxima/maxima_prefix_bin.patch b/subprojects/packagefiles/maxima/maxima_prefix_bin.patch -new file mode 100644 -index 00000000000..0fced388ea9 diff --git a/srcpkgs/sagemath/patches/41342-Fix_a_test_failure_with_numpy_2.4.patch b/srcpkgs/sagemath/patches/41342-Fix_a_test_failure_with_numpy_2.4.patch deleted file mode 100644 index 7b8241e9ecc130..00000000000000 --- a/srcpkgs/sagemath/patches/41342-Fix_a_test_failure_with_numpy_2.4.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/sage/calculus/desolvers.py b/src/sage/calculus/desolvers.py -index 7f6ba7967e1..89a56cb54e1 100644 ---- a/src/sage/calculus/desolvers.py -+++ b/src/sage/calculus/desolvers.py -@@ -1621,7 +1621,7 @@ def desolve_odeint_inner(ivar): - assert len(des) == 1 - dvar = dvars[0] - de = des[0] -- func = fast_float(de, dvar, ivar) -+ func = lambda y, t: fast_float(de, dvar, ivar)(y.item(), t) - if not compute_jac: - Dfun = None - else: diff --git a/srcpkgs/sagemath/patches/41346-Fix_execution_count_for_newer_ipython_version.patch b/srcpkgs/sagemath/patches/41346-Fix_execution_count_for_newer_ipython_version.patch deleted file mode 100644 index 8f95fa27e3f9ab..00000000000000 --- a/srcpkgs/sagemath/patches/41346-Fix_execution_count_for_newer_ipython_version.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/sage/repl/interpreter.py b/src/sage/repl/interpreter.py -index dca9c9a1146..d18ae9e2436 100644 ---- a/src/sage/repl/interpreter.py -+++ b/src/sage/repl/interpreter.py -@@ -679,7 +679,7 @@ def interface_shell_embed(interface): - sage: shell = interface_shell_embed(gap) # needs sage.libs.gap - sage: shell.run_cell('List( [1..10], IsPrime )') # needs sage.libs.gap - [ false, true, true, false, true, false, true, false, false, false ] -- -+ - """ - cfg = sage_ipython_config.copy() - ipshell = InteractiveShellEmbed(config=cfg, diff --git a/srcpkgs/sagemath/patches/41394-Fix_doctest_failure_with_python_3.14.patch b/srcpkgs/sagemath/patches/41394-Fix_doctest_failure_with_python_3.14.patch deleted file mode 100644 index f728fba9a1636f..00000000000000 --- a/srcpkgs/sagemath/patches/41394-Fix_doctest_failure_with_python_3.14.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/src/sage/doctest/test.py b/src/sage/doctest/test.py -index 8e7ecac8bbe..d68cc67c153 100644 ---- a/src/sage/doctest/test.py -+++ b/src/sage/doctest/test.py -@@ -257,8 +257,7 @@ - sage: subprocess.call(["python3", "-m", "sage.doctest", "--warn-long", "0", # long time - ....: "--random-seed=0", "--optional=sage", "interrupt.rst"], **kwds) - Running doctests... -- Doctesting 1 file. -- Killing test interrupt.rst -+ Doctesting 1 file... - ---------------------------------------------------------------------- - Doctests interrupted: 0/1 files tested - ---------------------------------------------------------------------- diff --git a/srcpkgs/sagemath/patches/41395-Fix_test_failures_with_pyparsing_3.3.patch b/srcpkgs/sagemath/patches/41395-Fix_test_failures_with_pyparsing_3.3.patch deleted file mode 100644 index 6bd2ae34b5cba4..00000000000000 --- a/srcpkgs/sagemath/patches/41395-Fix_test_failures_with_pyparsing_3.3.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/src/sage/topology/simplicial_set_examples.py b/src/sage/topology/simplicial_set_examples.py -index be7a4084be2..cd69adb9c5a 100644 ---- a/src/sage/topology/simplicial_set_examples.py -+++ b/src/sage/topology/simplicial_set_examples.py -@@ -655,7 +655,7 @@ def simplicial_data_from_kenzo_output(filename) -> dict: - sage: S4.homology(reduced=False) # needs pyparsing - {0: Z, 1: 0, 2: 0, 3: 0, 4: Z} - """ -- from pyparsing import OneOrMore, nestedExpr -+ from pyparsing import OneOrMore, nested_expr - - with open(filename) as f: - data = f.read() -@@ -675,7 +675,7 @@ def simplicial_data_from_kenzo_output(filename) -> dict: - end = new_dim_idx - if dim == 0: - simplex_string = data[data.find('Vertices :') + len('Vertices :'):end] -- vertices = OneOrMore(nestedExpr()).parseString(simplex_string).asList()[0] -+ vertices = OneOrMore(nested_expr()).parse_string(simplex_string).asList()[0] - for v in vertices: - vertex = AbstractSimplex(0, name=v) - simplex_data[vertex] = None diff --git a/srcpkgs/sagemath/patches/41433-Fix_test_failures_with_scipy_1.17.patch b/srcpkgs/sagemath/patches/41433-Fix_test_failures_with_scipy_1.17.patch deleted file mode 100644 index 69091a6c3077e9..00000000000000 --- a/srcpkgs/sagemath/patches/41433-Fix_test_failures_with_scipy_1.17.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/src/sage/matrix/matrix2.pyx b/src/sage/matrix/matrix2.pyx -index 7ff5a3a95bc..bdbb6805585 100644 ---- a/src/sage/matrix/matrix2.pyx -+++ b/src/sage/matrix/matrix2.pyx -@@ -367,7 +367,7 @@ cdef class Matrix(Matrix1): - sage: A.solve_left(b) # needs scipy - Traceback (most recent call last): - ... -- LinAlgError: Matrix is singular. -+ LinAlgError: ...singular. - - The vector of constants needs the correct degree:: - -@@ -762,7 +762,7 @@ cdef class Matrix(Matrix1): - sage: A.solve_right(b) - Traceback (most recent call last): - ... -- LinAlgError: Matrix is singular. -+ LinAlgError: ...singular. - - The vector of constants needs the correct degree. :: - diff --git a/srcpkgs/sagemath/patches/41469-Prevent_leaking_file_descriptors.patch b/srcpkgs/sagemath/patches/41469-Prevent_leaking_file_descriptors.patch deleted file mode 100644 index f5d0f608905711..00000000000000 --- a/srcpkgs/sagemath/patches/41469-Prevent_leaking_file_descriptors.patch +++ /dev/null @@ -1,98 +0,0 @@ -diff --git a/src/sage/databases/sql_db.py b/src/sage/databases/sql_db.py -index d86643bea21..f3548810be9 100644 ---- a/src/sage/databases/sql_db.py -+++ b/src/sage/databases/sql_db.py -@@ -1109,6 +1109,12 @@ def __init__(self, filename=None, read_only=None, skeleton=None): - raise RuntimeError('Cannot update skeleton of a read only ' - + 'database.') - -+ def __enter__(self): -+ return self -+ -+ def __exit__(self, exc_type, exc, tb): -+ self.__connection__.close() -+ - def __repr__(self): - """ - Override the print output to display useful info regarding the -diff --git a/src/sage/schemes/elliptic_curves/constructor.py b/src/sage/schemes/elliptic_curves/constructor.py -index fee15d24802..fde3a98b36f 100644 ---- a/src/sage/schemes/elliptic_curves/constructor.py -+++ b/src/sage/schemes/elliptic_curves/constructor.py -@@ -437,7 +437,8 @@ def create_key_and_extra_args(self, x=None, y=None, j=None, minimal_twist=True, - if isinstance(x, str): - # Interpret x as a Cremona or LMFDB label. - from sage.databases.cremona import CremonaDatabase -- x, data = CremonaDatabase().coefficients_and_data(x) -+ with CremonaDatabase() as D: -+ x, data = D.coefficients_and_data(x) - # data is only valid for elliptic curves over QQ. - if R not in (None, QQ): - data = {} -@@ -753,10 +754,11 @@ def coefficients_from_j(j, minimal_twist=True): - Elist = [E for E in Elist if E.conductor() == min_cond] - if len(Elist) > 1: - from sage.databases.cremona import CremonaDatabase, parse_cremona_label -- if min_cond <= CremonaDatabase().largest_conductor(): -- sorter = lambda E: parse_cremona_label(E.label(), numerical_class_code=True) -- else: -- sorter = lambda E: E.ainvs() -+ with CremonaDatabase() as D: -+ if min_cond <= D.largest_conductor(): -+ sorter = lambda E: parse_cremona_label(E.label(), numerical_class_code=True) -+ else: -+ sorter = lambda E: E.ainvs() - Elist.sort(key=sorter) - return Sequence(Elist[0].ainvs()) - -diff --git a/src/sage/schemes/elliptic_curves/ell_rational_field.py b/src/sage/schemes/elliptic_curves/ell_rational_field.py -index d7dba7acbfb..2d578e116a2 100644 ---- a/src/sage/schemes/elliptic_curves/ell_rational_field.py -+++ b/src/sage/schemes/elliptic_curves/ell_rational_field.py -@@ -686,12 +686,13 @@ def database_attributes(self): - LookupError: Cremona database does not contain entry for Elliptic Curve - defined by y^2 + 8*x*y + 21*y = x^3 + 13*x^2 + 34*x + 55 over Rational Field - """ -- from sage.databases.cremona import CremonaDatabase - ainvs = self.minimal_model().ainvs() -- try: -- return CremonaDatabase().data_from_coefficients(ainvs) -- except RuntimeError: -- raise LookupError("Cremona database does not contain entry for " + repr(self)) -+ with sage.databases.cremona.CremonaDatabase() as D: -+ try: -+ attrs = D.data_from_coefficients(ainvs) -+ return attrs -+ except RuntimeError: -+ raise LookupError("Cremona database does not contain entry for " + repr(self)) - - def database_curve(self): - r""" -@@ -718,10 +719,10 @@ def database_curve(self): - return self.__database_curve - except AttributeError: - verbose_verbose("Looking up %s in the database." % self) -- D = sage.databases.cremona.CremonaDatabase() - ainvs = list(self.minimal_model().ainvs()) - try: -- self.__database_curve = D.elliptic_curve_from_ainvs(ainvs) -+ with sage.databases.cremona.CremonaDatabase() as D: -+ self.__database_curve = D.elliptic_curve_from_ainvs(ainvs) - except RuntimeError: - raise RuntimeError("Elliptic curve %s not in the database." % self) - return self.__database_curve -diff --git a/src/sage/schemes/elliptic_curves/isogeny_class.py b/src/sage/schemes/elliptic_curves/isogeny_class.py -index 28043f56b95..c038caa8320 100644 ---- a/src/sage/schemes/elliptic_curves/isogeny_class.py -+++ b/src/sage/schemes/elliptic_curves/isogeny_class.py -@@ -1087,8 +1087,8 @@ def _compute(self): - label = self.E.cremona_label(space=False) - except RuntimeError: - raise RuntimeError("unable to find %s in the database" % self.E) -- db = sage.databases.cremona.CremonaDatabase() -- curves = db.isogeny_class(label) -+ with sage.databases.cremona.CremonaDatabase() as db: -+ curves = db.isogeny_class(label) - if not curves: - raise RuntimeError("unable to find %s in the database" % self.E) - # All curves will have the same conductor and isogeny class, diff --git a/srcpkgs/sagemath/patches/fix-cypari2-warning.patch b/srcpkgs/sagemath/patches/fix-cypari2-warning.patch new file mode 100644 index 00000000000000..5d4b06dab691e3 --- /dev/null +++ b/srcpkgs/sagemath/patches/fix-cypari2-warning.patch @@ -0,0 +1,30 @@ +diff --git a/src/sage/rings/factorint_pari.pyx b/src/sage/rings/factorint_pari.pyx +index 1774cbf0886..be0a500c2b6 100644 +--- a/src/sage/rings/factorint_pari.pyx ++++ b/src/sage/rings/factorint_pari.pyx +@@ -53,8 +53,6 @@ def factor_using_pari(n, int_=False, debug_level=0, proof=None): + sage: from sage.doctest.util import ensure_interruptible_after + sage: with ensure_interruptible_after(0.5): factor(2^1000 - 1, verbose=5) + ... +- doctest:warning... +- RuntimeWarning: cypari2 leaked ... bytes on the PARI stack + sage: pari.get_debug_level() + 0 + """ +diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx +index 358aac0339c..dc4dcc4866e 100644 +--- a/src/sage/rings/integer.pyx ++++ b/src/sage/rings/integer.pyx +@@ -7305,10 +7305,11 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement): + check for reliable interrupting, see :issue:`18919`:: + + sage: from cysignals import AlarmInterrupt ++ sage: from warnings import filterwarnings ++ sage: filterwarnings("ignore", r"cypari2 leaked \d+ bytes on the PARI stack") + sage: for i in [1..10]: # long time (5s) # needs sage.libs.pari + ....: with ensure_interruptible_after(i/11): + ....: (2^100).binomial(2^22, algorithm='pari') +- doctest:...: RuntimeWarning: cypari2 leaked ... bytes on the PARI stack... + """ + cdef Integer x + cdef Integer mm diff --git a/srcpkgs/sagemath/patches/fix-doctest-ipython-9.10.patch b/srcpkgs/sagemath/patches/fix-doctest-ipython-9.10.patch deleted file mode 100644 index 98d917bf2c1f19..00000000000000 --- a/srcpkgs/sagemath/patches/fix-doctest-ipython-9.10.patch +++ /dev/null @@ -1,12 +0,0 @@ -remove a test that breaks with ipython 9.10 - ---- a/src/sage/repl/interpreter.py -+++ b/src/sage/repl/interpreter.py -@@ -119,7 +119,6 @@ line:: - sage: from sage.repl.interpreter import get_test_shell - sage: shell = get_test_shell() - sage: shell.run_cell('sage: a = 123') # single line -- sage: shell.run_cell('sage: a = [\n... 123]') # old-style multi-line - sage: shell.run_cell('sage: a = [\n....: 123]') # new-style multi-line - - We test that :issue:`16196` is resolved:: diff --git a/srcpkgs/sagemath/patches/fix-doctest-ipython-9.12.patch b/srcpkgs/sagemath/patches/fix-doctest-ipython-9.12.patch new file mode 100644 index 00000000000000..000e50345e7ed3 --- /dev/null +++ b/srcpkgs/sagemath/patches/fix-doctest-ipython-9.12.patch @@ -0,0 +1,12 @@ +diff --git a/src/sage/doctest/test.py b/src/sage/doctest/test.py +index 8e7ecac8bbe..7831de313cc 100644 +--- a/src/sage/doctest/test.py ++++ b/src/sage/doctest/test.py +@@ -469,6 +469,7 @@ Test the ``--debug`` option:: + s...: b = 5 + s...: a + b + 8 ++ ... + sage: + + Returning to doctests... diff --git a/srcpkgs/sagemath/patches/get_patches b/srcpkgs/sagemath/patches/get_patches index d0093639f7d867..b3684d832c48ce 100755 --- a/srcpkgs/sagemath/patches/get_patches +++ b/srcpkgs/sagemath/patches/get_patches @@ -40,3 +40,5 @@ get_pr 41346 "Fix execution_count for newer ipython version" get_pr 41394 "Fix doctest failure with python 3.14" get_pr 41433 "Fix test failures with scipy 1.17" get_pr 41469 "Prevent leaking file descriptors" +get_pr 40679 "Update to maxima 5.49" +get_pr 41728 "Patch for mpmath 1.4" diff --git a/srcpkgs/sagemath/patches/sphinx.patch b/srcpkgs/sagemath/patches/sphinx.patch deleted file mode 100644 index 6c5d5799d5294f..00000000000000 --- a/srcpkgs/sagemath/patches/sphinx.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -68,7 +68,7 @@ - 'ptyprocess > 0.5', - 'requests >=2.13.0', - 'scipy >=1.11', -- 'sphinx >=6.2, <9', -+ 'sphinx >=6.2, <10', - 'sympy >=1.6, <2.0', - # TODO: Remove this once the migration to meson is complete - 'pkgconfig', diff --git a/srcpkgs/sagemath/patches/workaround-embed-positions.patch b/srcpkgs/sagemath/patches/workaround-embed-positions.patch index 1aa4e77dc687bd..fdd69c04b108dc 100644 --- a/srcpkgs/sagemath/patches/workaround-embed-positions.patch +++ b/srcpkgs/sagemath/patches/workaround-embed-positions.patch @@ -6,10 +6,10 @@ This should fix https://github.com/sagemath/sage/issues/39872#issuecomment-37377 --- a/src/sage/config.py.in +++ b/src/sage/config.py.in -@@ -11,6 +11,7 @@ VERSION = "@PACKAGE_VERSION@" +@@ -8,6 +8,7 @@ VERSION = "@PACKAGE_VERSION@" + # These variables come first so that other substituted variable values can refer # to it. SAGE_LOCAL = "@prefix@" - SAGE_ROOT = "@SAGE_ROOT@" +SAGE_BUILD_SRC = "@EDITABLE_SRC@/src" # The semicolon-separated list of GAP root paths. This is the list of diff --git a/srcpkgs/sagemath/template b/srcpkgs/sagemath/template index 3f27587fc5c170..26079ec9bd0ae3 100644 --- a/srcpkgs/sagemath/template +++ b/srcpkgs/sagemath/template @@ -1,6 +1,6 @@ # Template file for 'sagemath' pkgname=sagemath -version=10.8 +version=10.9 revision=1 _pypi_version=${version/.beta/b} _pypi_version=${_pypi_version/.rc/rc} @@ -38,7 +38,7 @@ license="GPL-2.0-or-later" homepage="https://www.sagemath.org/" changelog="https://github.com/sagemath/sage/releases" distfiles="${PYPI_SITE}/s/sagemath/sagemath-${_pypi_version}.tar.gz" -checksum=864c21a84bfad05f586ccdc45bf685552cd87a236bf56bc30163de474569f82c +checksum=5855626668197958372403dc6fa1878750b90ac7f113f49a5bc43ddaafd60591 nocross="due to fflas-ffpack, givaro, linbox, sympow, maxima" # parallel build @@ -51,6 +51,10 @@ do_check() { # this makes for nicer (shorter) relative paths in output cd ${testdir}/${py3_sitelib} + # there is a conflict between this conftest.py and the one in our builddir + # see https://github.com/sagemath/sage/pull/41709#issuecomment-4425750767 + rm "sage/conftest.py" + if [ -f ${XBPS_DISTDIR}/sagemath-check ] ; then _sed='s|#.*||;/^\s*$/d;s|^\s*\([^ ]*/\)\?sage/|sage/|g' \ _test_files=$(sed -e "$_sed" ${XBPS_DISTDIR}/sagemath-check)