From 98562b3608d372348df0e6b9d79d0d98b854da2c Mon Sep 17 00:00:00 2001 From: dkwo Date: Thu, 15 Jan 2026 11:52:20 +0800 Subject: [PATCH 01/19] python3-Cython: patch for sage --- srcpkgs/python3-Cython/patches/6755.patch | 146 ++++++++++++++++++++++ srcpkgs/python3-Cython/template | 2 +- 2 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/python3-Cython/patches/6755.patch diff --git a/srcpkgs/python3-Cython/patches/6755.patch b/srcpkgs/python3-Cython/patches/6755.patch new file mode 100644 index 00000000000000..75757e449f2ab2 --- /dev/null +++ b/srcpkgs/python3-Cython/patches/6755.patch @@ -0,0 +1,146 @@ +From ba6614981a39ee5b72ceb0c9424fd83443e1d6ba Mon Sep 17 00:00:00 2001 +From: Tobias Diez +Date: Sun, 23 Mar 2025 15:13:19 +0000 +Subject: [PATCH] Don't include absolute paths when using `--embed-positions` + +--- + Cython/Compiler/ExprNodes.py | 6 ++---- + Cython/Compiler/ModuleNode.py | 6 +----- + Cython/Compiler/Nodes.py | 2 +- + Cython/Compiler/Scanning.py | 21 +++++++++++++++++---- + tests/build/run_cython_not_in_cwd.srctree | 4 ++-- + 5 files changed, 23 insertions(+), 16 deletions(-) + +diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py +index 56af22981..a7da319ec 100644 +--- a/Cython/Compiler/ExprNodes.py ++++ b/Cython/Compiler/ExprNodes.py +@@ -10696,11 +10696,9 @@ class CodeObjectNode(ExprNode): + + func_name_result = code.get_py_string_const(func.name, identifier=True) + # FIXME: better way to get the module file path at module init time? Encoding to use? +- file_path = func.pos[0].get_filenametable_entry() +- if os.path.isabs(file_path): +- file_path = func.pos[0].get_description() ++ file_path = func.pos[0].get_relative_path() + # Always use / as separator +- file_path = StringEncoding.EncodedString(pathlib.Path(file_path).as_posix()) ++ file_path = StringEncoding.EncodedString(file_path.as_posix()) + file_path_result = code.get_py_string_const(file_path) + + if func.node_positions: +diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py +index fa8ac5c28..1c9486aa3 100644 +--- a/Cython/Compiler/ModuleNode.py ++++ b/Cython/Compiler/ModuleNode.py +@@ -1080,12 +1080,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): + code.putln("static const char* const %s[] = {" % Naming.filetable_cname) + if code.globalstate.filename_list: + for source_desc in code.globalstate.filename_list: +- file_path = source_desc.get_filenametable_entry() +- if isabs(file_path): +- # never include absolute paths +- file_path = source_desc.get_description() + # Always use / as separator +- file_path = pathlib.Path(file_path).as_posix() ++ file_path = source_desc.get_relative_path().as_posix() + escaped_filename = as_encoded_filename(file_path) + code.putln('%s,' % escaped_filename.as_c_string_literal()) + else: +diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py +index 520ca8f2f..4472e3a08 100644 +--- a/Cython/Compiler/Nodes.py ++++ b/Cython/Compiler/Nodes.py +@@ -46,7 +46,7 @@ class NoGilState(enum.IntEnum): + + + def relative_position(pos): +- return (pos[0].get_filenametable_entry(), pos[1]) ++ return (pos[0].get_relative_path().as_posix(), pos[1]) + + + def embed_position(pos, docstring): +diff --git a/Cython/Compiler/Scanning.py b/Cython/Compiler/Scanning.py +index 9bad7706f..78942f247 100644 +--- a/Cython/Compiler/Scanning.py ++++ b/Cython/Compiler/Scanning.py +@@ -5,21 +5,24 @@ + + + import cython ++ + cython.declare(make_lexicon=object, lexicon=object, + print_function=object, error=object, warning=object, +- os=object, platform=object) ++ os=object, platform=object, Path=object) + + import os + import platform +-from unicodedata import normalize + from contextlib import contextmanager ++from pathlib import Path ++from unicodedata import normalize + + from .. import Utils +-from ..Plex.Scanners import Scanner + from ..Plex.Errors import UnrecognizedInput ++from ..Plex.Scanners import Scanner + from .Errors import error, warning, hold_errors, release_errors, CompileError + from .Lexicon import any_string_prefix, ft_string_prefixes, make_lexicon, IDENT + from .Future import print_function ++from .Lexicon import IDENT, any_string_prefix, make_lexicon + + debug_scanner = 0 + trace_scanner = 0 +@@ -222,6 +225,13 @@ class FileSourceDescriptor(SourceDescriptor): + def get_description(self): + return self._short_path_description + ++ def get_relative_path(self) -> Path: ++ file_path = Path(self.file_path) ++ if file_path.is_absolute(): ++ return Path(self.get_description()) ++ else: ++ return file_path ++ + def get_error_description(self): + path = self.filename + cwd = Utils.decode_filename(os.getcwd() + os.path.sep) +@@ -263,6 +273,9 @@ class StringSourceDescriptor(SourceDescriptor): + def get_description(self): + return self.name + ++ def get_relative_path(self): ++ return Path(self.get_description()) ++ + get_error_description = get_description + + def get_filenametable_entry(self): +@@ -649,7 +662,7 @@ def tentatively_scan(scanner: PyrexScanner): + initial_state = (scanner.sy, scanner.systring, scanner.position()) + try: + yield errors +- except CompileError as e: ++ except CompileError: + pass + finally: + if errors: +diff --git a/tests/build/run_cython_not_in_cwd.srctree b/tests/build/run_cython_not_in_cwd.srctree +index 4eaa60b38..9b546f052 100644 +--- a/tests/build/run_cython_not_in_cwd.srctree ++++ b/tests/build/run_cython_not_in_cwd.srctree +@@ -5,9 +5,9 @@ + # relative paths from CWD. + # + +-CYTHON src/pkg/mod.pyx -o build/src/pkg/mod1.pyx.c ++CYTHON src/pkg/mod.pyx --embed-positions -o build/src/pkg/mod1.pyx.c + CD build +-CYTHON ../src/pkg/mod.pyx -o src/pkg/mod2.pyx.c ++CYTHON ../src/pkg/mod.pyx --embed-positions -o src/pkg/mod2.pyx.c + CD .. + PYTHON check_paths_from_cython.py + +-- +2.51.2 + diff --git a/srcpkgs/python3-Cython/template b/srcpkgs/python3-Cython/template index acfcc9f3a0a7ca..02871c4b3319eb 100644 --- a/srcpkgs/python3-Cython/template +++ b/srcpkgs/python3-Cython/template @@ -1,7 +1,7 @@ # Template file for 'python3-Cython' pkgname=python3-Cython version=3.2.4 -revision=1 +revision=2 build_style=python3-module hostmakedepends="python3-setuptools" makedepends="python3-devel" From c843943e166dcd409fe6edb2982bef586733f8c1 Mon Sep 17 00:00:00 2001 From: dkwo Date: Mon, 5 Jan 2026 14:14:13 +0800 Subject: [PATCH 02/19] sagemath: update to 10.8. --- ...20-Use_accelerate_for_Conda_on_macos.patch | 2003 +++++++++++++++++ .../40594-Fix_segfault_in_libgap.patch | 51 - ...Meson:_Build_docs_for_Maxima_as_well.patch | 113 + .../sagemath/patches/40816-forgotten.patch | 41 + ...-Refactor_atexit.pyx_for_python_3.14.patch | 138 -- .../patches/41141-Fix_ipython_9.7.0.patch | 32 - ...42-Fix_a_test_failure_with_numpy_2.4.patch | 13 + ...tion_count_for_newer_ipython_version.patch | 13 + ...Fix_test_failures_with_pyparsing_3.3.patch | 22 + ...33-Fix_test_failures_with_scipy_1.17.patch | 22 + srcpkgs/sagemath/patches/get_patches | 14 +- srcpkgs/sagemath/patches/sphinx.patch | 33 - srcpkgs/sagemath/template | 29 +- 13 files changed, 2250 insertions(+), 274 deletions(-) create mode 100644 srcpkgs/sagemath/patches/40520-Use_accelerate_for_Conda_on_macos.patch delete mode 100644 srcpkgs/sagemath/patches/40594-Fix_segfault_in_libgap.patch create mode 100644 srcpkgs/sagemath/patches/40816-Meson:_Build_docs_for_Maxima_as_well.patch create mode 100644 srcpkgs/sagemath/patches/40816-forgotten.patch delete mode 100644 srcpkgs/sagemath/patches/41021-Refactor_atexit.pyx_for_python_3.14.patch delete mode 100644 srcpkgs/sagemath/patches/41141-Fix_ipython_9.7.0.patch create mode 100644 srcpkgs/sagemath/patches/41342-Fix_a_test_failure_with_numpy_2.4.patch create mode 100644 srcpkgs/sagemath/patches/41346-Fix_execution_count_for_newer_ipython_version.patch create mode 100644 srcpkgs/sagemath/patches/41395-Fix_test_failures_with_pyparsing_3.3.patch create mode 100644 srcpkgs/sagemath/patches/41433-Fix_test_failures_with_scipy_1.17.patch delete mode 100644 srcpkgs/sagemath/patches/sphinx.patch 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 new file mode 100644 index 00000000000000..43d0dc9938bb7d --- /dev/null +++ b/srcpkgs/sagemath/patches/40520-Use_accelerate_for_Conda_on_macos.patch @@ -0,0 +1,2003 @@ +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/40594-Fix_segfault_in_libgap.patch b/srcpkgs/sagemath/patches/40594-Fix_segfault_in_libgap.patch deleted file mode 100644 index b26ac2f691c429..00000000000000 --- a/srcpkgs/sagemath/patches/40594-Fix_segfault_in_libgap.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/src/sage/libs/gap/element.pyx b/src/sage/libs/gap/element.pyx -index f52a73c2ded..2ef40fd0a69 100644 ---- a/src/sage/libs/gap/element.pyx -+++ b/src/sage/libs/gap/element.pyx -@@ -2498,11 +2498,17 @@ cdef class GapElement_Function(GapElement): - cdef Obj result = NULL - cdef Obj arg_list - cdef int n = len(args) -- cdef volatile Obj v2 -- -- if n > 0 and n <= 3: -- libgap = self.parent() -- a = [x if isinstance(x, GapElement) else libgap(x) for x in args] -+ cdef Obj a[3] -+ -+ if n <= 3: -+ if not all(isinstance(x, GapElement) for x in args): -+ libgap = self.parent() -+ args = tuple(x if isinstance(x, GapElement) else libgap(x) for x in args) -+ for i in range(n): -+ x = args[i] -+ a[i] = (x).value -+ else: -+ arg_list = make_gap_list(args) - - try: - sig_GAP_Enter() -@@ -2510,20 +2516,12 @@ cdef class GapElement_Function(GapElement): - if n == 0: - result = GAP_CallFunc0Args(self.value) - elif n == 1: -- result = GAP_CallFunc1Args(self.value, -- (a[0]).value) -+ result = GAP_CallFunc1Args(self.value, a[0]) - elif n == 2: -- result = GAP_CallFunc2Args(self.value, -- (a[0]).value, -- (a[1]).value) -+ result = GAP_CallFunc2Args(self.value, a[0], a[1]) - elif n == 3: -- v2 = (a[2]).value -- result = GAP_CallFunc3Args(self.value, -- (a[0]).value, -- (a[1]).value, -- v2) -+ result = GAP_CallFunc3Args(self.value, a[0], a[1], a[2]) - else: -- arg_list = make_gap_list(args) - result = GAP_CallFuncList(self.value, arg_list) - sig_off() - finally: 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 new file mode 100644 index 00000000000000..8c3acbf3fee2da --- /dev/null +++ b/srcpkgs/sagemath/patches/40816-Meson:_Build_docs_for_Maxima_as_well.patch @@ -0,0 +1,113 @@ +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/40816-forgotten.patch b/srcpkgs/sagemath/patches/40816-forgotten.patch new file mode 100644 index 00000000000000..3409b9681679ce --- /dev/null +++ b/srcpkgs/sagemath/patches/40816-forgotten.patch @@ -0,0 +1,41 @@ +From 5de75421e8c61eb1e7f64cb0cd6075c8b74209d8 Mon Sep 17 00:00:00 2001 +From: Chenxin Zhong +Date: Sat, 13 Dec 2025 03:31:46 +0800 +Subject: [PATCH] Fix GCD assertion in MacLaneLimitValuation to handle mutable + cached limit valuations + +--- + src/sage/rings/valuation/limit_valuation.py | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) + +diff --git a/src/sage/rings/valuation/limit_valuation.py b/src/sage/rings/valuation/limit_valuation.py +index c2555a327b6..063411d8110 100644 +--- a/src/sage/rings/valuation/limit_valuation.py ++++ b/src/sage/rings/valuation/limit_valuation.py +@@ -698,7 +698,25 @@ def _ge_(self, other): + self._improve_approximation_for_call(other._G) + other._improve_approximation_for_call(self._G) + if self._G != other._G: +- assert self._G.gcd(other._G).is_one() ++ gcd = self._G.gcd(other._G) ++ if not gcd.is_one(): ++ # Cached limit valuations are mutable: earlier calls ++ # to ``_improve_approximation_for_call`` may already ++ # have replaced ``_G`` by the factor with infinite ++ # valuation. This can leave one instance with a proper ++ # factor of the other's ``_G``. ++ # ++ # In this situation, force both instances to reduce ++ # further by calling with the complementary factor. ++ # (Calling with the common factor itself may be an ++ # equivalence unit and thus not trigger any reduction.) ++ if gcd != self._G: ++ self._improve_approximation_for_call(self._G // gcd) ++ if gcd != other._G: ++ other._improve_approximation_for_call(other._G // gcd) ++ # Recompute after possible reductions. ++ gcd = self._G.gcd(other._G) ++ assert gcd.is_one() + return False + + # If the valuations are comparable, they must approximate the diff --git a/srcpkgs/sagemath/patches/41021-Refactor_atexit.pyx_for_python_3.14.patch b/srcpkgs/sagemath/patches/41021-Refactor_atexit.pyx_for_python_3.14.patch deleted file mode 100644 index 2adf116fcf59d6..00000000000000 --- a/srcpkgs/sagemath/patches/41021-Refactor_atexit.pyx_for_python_3.14.patch +++ /dev/null @@ -1,138 +0,0 @@ -diff --git a/src/sage/cpython/atexit.pyx b/src/sage/cpython/atexit.pyx -index c74c1d0308a..e6ecad9eadc 100644 ---- a/src/sage/cpython/atexit.pyx -+++ b/src/sage/cpython/atexit.pyx -@@ -144,51 +144,99 @@ cdef class restore_atexit: - _set_exithandlers(self._exithandlers) - - from cpython.ref cimport PyObject -+import sys - --# Implement "_atexit_callbacks()" for each supported python version -+# Implement a uniform interface for getting atexit callbacks - cdef extern from *: - """ -+ #ifndef Py_BUILD_CORE - #define Py_BUILD_CORE -+ #endif - #undef _PyGC_FINALIZED - #include "internal/pycore_interp.h" - #include "internal/pycore_pystate.h" -- #if PY_VERSION_HEX >= 0x030c0000 -- // struct atexit_callback was renamed in 3.12 to atexit_py_callback -- #define atexit_callback atexit_py_callback -- #endif -- static atexit_callback ** _atexit_callbacks(PyObject *self) { -+ -+ // Always define this struct for Cython's use -+ typedef struct { -+ PyObject *func; -+ PyObject *args; -+ PyObject *kwargs; -+ } atexit_callback_struct; -+ -+ #if PY_VERSION_HEX >= 0x030e0000 -+ // Python 3.14+: atexit uses a PyList -+ static PyObject* get_atexit_callbacks_list(PyObject *self) { - PyInterpreterState *interp = _PyInterpreterState_GET(); - struct atexit_state state = interp->atexit; - return state.callbacks; - } -+ -+ // Dummy function for Python 3.14+ (never called) -+ static atexit_callback_struct** get_atexit_callbacks_array(PyObject *self) { -+ PyErr_SetString(PyExc_RuntimeError, "Python >= 3.14 has no atexit array"); -+ return NULL; -+ } -+ #else -+ // Python < 3.14: atexit uses C array -+ static atexit_callback_struct** get_atexit_callbacks_array(PyObject *self) { -+ PyInterpreterState *interp = _PyInterpreterState_GET(); -+ struct atexit_state state = interp->atexit; -+ // Cast from atexit_callback** to our struct type -+ return (atexit_callback_struct**)state.callbacks; -+ } -+ -+ // Dummy function for Python < 3.14 (never called) -+ static PyObject* get_atexit_callbacks_list(PyObject *self) { -+ PyErr_SetString(PyExc_RuntimeError, "Python < 3.14 has no atexit list"); -+ return NULL; -+ } -+ #endif - """ -- ctypedef struct atexit_callback: -+ # Declare both functions - they exist in all Python versions (one is dummy) -+ object get_atexit_callbacks_list(object module) -+ -+ ctypedef struct atexit_callback_struct: - PyObject* func - PyObject* args - PyObject* kwargs -- atexit_callback** _atexit_callbacks(object module) -+ atexit_callback_struct** get_atexit_callbacks_array(object module) except NULL - - - def _get_exithandlers(): - """Return list of exit handlers registered with the atexit module.""" -- cdef atexit_callback ** callbacks -- cdef atexit_callback callback -- cdef list exithandlers -+ cdef list exithandlers = [] -+ cdef atexit_callback_struct ** callbacks -+ cdef atexit_callback_struct callback - cdef int idx - cdef object kwargs -- -- exithandlers = [] -- callbacks = _atexit_callbacks(atexit) -- -- for idx in range(atexit._ncallbacks()): -- callback = callbacks[idx][0] -- if callback.kwargs: -- kwargs = callback.kwargs -- else: -- kwargs = {} -- exithandlers.append((callback.func, -- callback.args, -- kwargs)) -+ -+ # Python 3.14+ uses a PyList directly -+ if sys.version_info >= (3, 14): -+ callbacks_list = get_atexit_callbacks_list(atexit) -+ if callbacks_list is None: -+ return exithandlers -+ # callbacks is a list of tuples: [(func, args, kwargs), ...] -+ # Normalize kwargs to ensure it's always a dict (not None) -+ # Note: In Python 3.14+, atexit stores callbacks in LIFO order -+ # (most recently registered first), but we return them in FIFO -+ # order (registration order) for consistency with earlier versions -+ for item in reversed(callbacks_list): -+ func, args, kwargs = item -+ if kwargs is None: -+ kwargs = {} -+ exithandlers.append((func, args, kwargs)) -+ else: -+ # Python < 3.14 uses C array -+ callbacks = get_atexit_callbacks_array(atexit) -+ for idx in range(atexit._ncallbacks()): -+ callback = callbacks[idx][0] -+ if callback.kwargs: -+ kwargs = callback.kwargs -+ else: -+ kwargs = {} -+ exithandlers.append((callback.func, -+ callback.args, -+ kwargs)) - return exithandlers - - -@@ -203,6 +251,9 @@ def _set_exithandlers(exithandlers): - - # We could do this more efficiently by directly rebuilding the array - # of atexit_callbacks, but this is much simpler -+ # Note: exithandlers is in registration order (FIFO). -+ # In Python 3.14+, atexit.register prepends to the list (LIFO), -+ # so registering in forward order gives us the correct execution order. - for callback in exithandlers: - atexit.register(callback[0], *callback[1], **callback[2]) - diff --git a/srcpkgs/sagemath/patches/41141-Fix_ipython_9.7.0.patch b/srcpkgs/sagemath/patches/41141-Fix_ipython_9.7.0.patch deleted file mode 100644 index 5f05574f06a237..00000000000000 --- a/srcpkgs/sagemath/patches/41141-Fix_ipython_9.7.0.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 18efb69e53590586b22dd0f63559845d4676feeb Mon Sep 17 00:00:00 2001 -From: Chenxin Zhong -Date: Thu, 6 Nov 2025 21:56:57 +0800 -Subject: [PATCH] Removed the unicode_to_str conversion from the - SagePrettyPrinter initialization. - -Removed the unicode_to_str conversion from the SagePrettyPrinter initialization. ---- - src/sage/repl/display/formatter.py | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/sage/repl/display/formatter.py b/src/sage/repl/display/formatter.py -index 3b73674dd48..ceea50f36eb 100644 ---- a/src/sage/repl/display/formatter.py -+++ b/src/sage/repl/display/formatter.py -@@ -62,7 +62,6 @@ - from io import StringIO - - from IPython.core.formatters import DisplayFormatter, PlainTextFormatter --from IPython.utils.py3compat import unicode_to_str - from IPython.core.display import DisplayObject - - from ipywidgets import Widget -@@ -311,7 +310,7 @@ def __call__(self, obj): - print('---- calling ipython formatter ----') - stream = StringIO() - printer = SagePrettyPrinter( -- stream, self.max_width, unicode_to_str(self.newline)) -+ stream, self.max_width, self.newline) - printer.pretty(obj) - printer.flush() - return stream.getvalue() 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 new file mode 100644 index 00000000000000..7b8241e9ecc130 --- /dev/null +++ b/srcpkgs/sagemath/patches/41342-Fix_a_test_failure_with_numpy_2.4.patch @@ -0,0 +1,13 @@ +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 new file mode 100644 index 00000000000000..8f95fa27e3f9ab --- /dev/null +++ b/srcpkgs/sagemath/patches/41346-Fix_execution_count_for_newer_ipython_version.patch @@ -0,0 +1,13 @@ +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/41395-Fix_test_failures_with_pyparsing_3.3.patch b/srcpkgs/sagemath/patches/41395-Fix_test_failures_with_pyparsing_3.3.patch new file mode 100644 index 00000000000000..6bd2ae34b5cba4 --- /dev/null +++ b/srcpkgs/sagemath/patches/41395-Fix_test_failures_with_pyparsing_3.3.patch @@ -0,0 +1,22 @@ +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 new file mode 100644 index 00000000000000..69091a6c3077e9 --- /dev/null +++ b/srcpkgs/sagemath/patches/41433-Fix_test_failures_with_scipy_1.17.patch @@ -0,0 +1,22 @@ +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/get_patches b/srcpkgs/sagemath/patches/get_patches index 91a07391d35cd4..fd7662a1127ee2 100755 --- a/srcpkgs/sagemath/patches/get_patches +++ b/srcpkgs/sagemath/patches/get_patches @@ -1,6 +1,6 @@ #! /bin/sh -version=10.7 +version=10.8 URL_BASE_PR="https://github.com/sagemath/sage/pull/" URL_BASE_COMPARE="https://github.com/sagemath/sage/compare/${version}..." @@ -30,7 +30,11 @@ get_pr() { # run from patches dir cd $(dirname "$0") -# positive review -get_pr 40594 "Fix segfault in libgap" -get_pr 41021 "Refactor atexit.pyx for python 3.14" -get_pr 41141 "Fix compatibility issue for ipython 9.7.0" +# merged/positive review + +get_pr 40520 "Use accelerate for Conda on macos" +get_pr 41395 "Fix test failures with pyparsing 3.3" +get_pr 41342 "Fix a test failure with numpy 2.4" +get_pr 40816 "Meson: Build docs for Maxima as well" +get_pr 41346 "Fix execution_count for newer ipython version" +get_pr 41433 "Fix test failures with scipy 1.17" diff --git a/srcpkgs/sagemath/patches/sphinx.patch b/srcpkgs/sagemath/patches/sphinx.patch deleted file mode 100644 index be52a132cbcd16..00000000000000 --- a/srcpkgs/sagemath/patches/sphinx.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- a/sage/sagemath_standard.egg-info/PKG-INFO -+++ b/sage/sagemath_standard.egg-info/PKG-INFO -@@ -39,7 +39,7 @@ Requires-Dist: requests>=2.13.0 - Requires-Dist: typing_extensions>=4.4.0; python_version < "3.11" - Requires-Dist: ipython>=7.13.0 - Requires-Dist: pexpect>=4.8.0 --Requires-Dist: sphinx<9,>=5.2 -+Requires-Dist: sphinx<10,>=5.2 - Requires-Dist: networkx>=2.4 - Requires-Dist: scipy>=1.12 - Requires-Dist: sympy<2.0,>=1.6 ---- a/sage/sagemath_standard.egg-info/requires.txt -+++ b/sage/sagemath_standard.egg-info/requires.txt -@@ -12,7 +12,7 @@ primecountpy>=0.1.1 - requests>=2.13.0 - ipython>=7.13.0 - pexpect>=4.8.0 --sphinx<9,>=5.2 -+sphinx<10,>=5.2 - networkx>=2.4 - scipy>=1.12 - sympy<2.0,>=1.6 ---- a/sage/setup.cfg -+++ b/sage/setup.cfg -@@ -46,7 +46,7 @@ install_requires = - typing_extensions >= 4.4.0; python_version<'3.11' - ipython >=7.13.0 - pexpect >=4.8.0 -- sphinx >=5.2, <9 -+ sphinx >=5.2, <10 - networkx >=2.4 - scipy >=1.12 - sympy >=1.6, <2.0 diff --git a/srcpkgs/sagemath/template b/srcpkgs/sagemath/template index 800fe7adf4448e..5231b46cb58eb5 100644 --- a/srcpkgs/sagemath/template +++ b/srcpkgs/sagemath/template @@ -1,14 +1,15 @@ # Template file for 'sagemath' pkgname=sagemath -version=10.7 -revision=4 +version=10.8 +revision=1 _pypi_version=${version/.beta/b} _pypi_version=${_pypi_version/.rc/rc} build_style=python3-pep517 +make_build_args="-C setup-args=-Dbuild-docs=false" hostmakedepends="pkg-config python3-Cython python3-Jinja2 python3-pkgconfig python3-setuptools python3-wheel python3-gmpy2 python3-memory_allocator python3-numpy ecl - python3-cypari2 python3-cysignals python3-devel" + python3-cypari2 python3-cysignals python3-devel python3-meson-python" makedepends="boost-headers brial-devel cliquer-devel ecl eclib-devel ecm-devel fflas-ffpack flintlib-devel gap-devel gd-devel glpk-devel gsl-devel iml-devel lcalc-devel libbraiding-devel libhomfly-devel libmpc-devel @@ -17,7 +18,7 @@ makedepends="boost-headers brial-devel cliquer-devel ecl eclib-devel python3-cysignals python3-devel python3-gmpy2 python3-memory_allocator python3-numpy rankwidth-devel singular symmetrica-devel" depends="eclib-devel fflas-ffpack flintlib-devel gcc-fortran meson gd-devel - gfan gsl-devel gzip libpng-devel linbox-devel m4ri-devel maxima-ecl + gfan gsl-devel gzip libpng-devel linbox-devel m4ri-devel maxima-ecl maxima-src mpfr-devel nauty ntl-devel palp pari-devel pari-elldata-small pari-galdata pari-galpol-small pari-seadata-small pkg-config python3-Cython python3-cypari2 python3-cysignals python3-devel python3-fpylll python3-ipython python3-lrcalc @@ -28,22 +29,20 @@ depends="eclib-devel fflas-ffpack flintlib-devel gcc-fortran meson gd-devel python3-conway-polynomials sage-data-elliptic_curves sage-data-graphs sage-data-polytopes_db sympow tachyon threejs-sage python3-six python3-gmpy2 python3-numpy python3-pexpect python3-Sphinx - python3-Pillow python3-mpmath python3-jupyter_client python3-ptyprocess" -checkdepends="$depends python3-pytest pythran python3-Sphinx gdb" + python3-Pillow python3-mpmath python3-jupyter_client python3-ptyprocess + python3-platformdirs" +checkdepends="${depends} python3-pytest pythran python3-Sphinx gdb" short_desc="Open source mathematics software" maintainer="Gonzalo Tornaría " license="GPL-2.0-or-later" homepage="https://www.sagemath.org/" changelog="https://github.com/sagemath/sage/releases" -distfiles="${PYPI_SITE}/s/sagemath-standard/sagemath_standard-${_pypi_version}.tar.gz" -checksum=f6ec41913a745b94e20ceae69c2c54a7c8e549b3dc8b4a01dbd874c772924149 +distfiles="${PYPI_SITE}/s/sagemath/sagemath-${_pypi_version}.tar.gz" +checksum=864c21a84bfad05f586ccdc45bf685552cd87a236bf56bc30163de474569f82c nocross="due to ntl (eclib, singular), fflas-ffpack, givaro, linbox, sympow, maxima" -# main repo `.../src/sage/` is `.../sage/` here -patch_args=-Np2 - # parallel build -export SAGE_NUM_THREADS="$XBPS_MAKEJOBS" +export SAGE_NUM_THREADS="${XBPS_MAKEJOBS}" post_install() { # move scripts to /usr/libexec @@ -74,16 +73,16 @@ do_check() { fi cp ${FILESDIR}/timings2.json . _test_args="--stats_path=timings2.json" - if [ "$XBPS_CHECK_PKGS" = full ]; then + if [ "${XBPS_CHECK_PKGS}" = full ]; then _test_args+=" --long --warn-long 30.0" else _test_args+=" --warn-long 10.0" fi - if [ "$XBPS_BUILD_ENVIRONMENT" = "void-packages-ci" ]; then + if [ "${XBPS_BUILD_ENVIRONMENT}" = "void-packages-ci" ]; then # for CI use a predictable random seed _test_args+=" --random-seed=0" fi PATH="${testdir}/usr/bin:${PATH}" PYTHONPATH="${testdir}/${py3_sitelib}" \ - sage -tp ${XBPS_MAKEJOBS} ${_test_args} ${_test_files} + python3 -m sage.doctest -p ${XBPS_MAKEJOBS} ${_test_args} ${_test_files} } From 5c3bad37124623eb40cfb7621e1dbae0402d6747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 15:51:17 -0300 Subject: [PATCH 03/19] python3-cysignals: update to 1.12.6. --- srcpkgs/python3-cysignals/template | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/srcpkgs/python3-cysignals/template b/srcpkgs/python3-cysignals/template index eff940c8c2fc2d..589b5d3159213a 100644 --- a/srcpkgs/python3-cysignals/template +++ b/srcpkgs/python3-cysignals/template @@ -1,25 +1,20 @@ # Template file for 'python3-cysignals' pkgname=python3-cysignals -version=1.12.4 -revision=2 +version=1.12.6 +revision=1 build_style=python3-pep517 build_helper=meson hostmakedepends="python3-meson-python python3-Cython" makedepends="python3-devel" depends="python3" -checkdepends="python3-pytest gdb" +checkdepends="python3-pytest gdb python3-cypari2" short_desc="Interrupt and signal handling for Cython" maintainer="Gonzalo Tornaría " license="LGPL-3.0-or-later" homepage="https://github.com/sagemath/cysignals" changelog="https://github.com/sagemath/cysignals/releases" distfiles="${PYPI_SITE}/c/cysignals/cysignals-${version}.tar.gz" -checksum=4aefa3b35eb036cb40b2b948df84725976b987895338204f64550e2d63891f5f +checksum=3ef3a37bdb244821b85475a08e2762ca1019570b369e321504995fa9a54675ce # cysignals must be compiled without _FORTIFY_SOURCE CFLAGS="-U_FORTIFY_SOURCE" - -if [ "$XBPS_CHECK_PKGS" = full ]; then - # this would cause a build-time circular dependency - checkdepends+=" python3-cypari2" -fi From 8e1c4281dac4dcb10495170ee2460fe83669579c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 15:51:22 -0300 Subject: [PATCH 04/19] python3-cypari2: update to 2.2.4. --- ...42e8292b89db602757510e367766685cc38b.patch | 23 +++++++++++++++++++ srcpkgs/python3-cypari2/template | 15 +++++++----- srcpkgs/python3-cypari2/update | 1 - 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 srcpkgs/python3-cypari2/patches/0a3e42e8292b89db602757510e367766685cc38b.patch delete mode 100644 srcpkgs/python3-cypari2/update diff --git a/srcpkgs/python3-cypari2/patches/0a3e42e8292b89db602757510e367766685cc38b.patch b/srcpkgs/python3-cypari2/patches/0a3e42e8292b89db602757510e367766685cc38b.patch new file mode 100644 index 00000000000000..cd97eff8778084 --- /dev/null +++ b/srcpkgs/python3-cypari2/patches/0a3e42e8292b89db602757510e367766685cc38b.patch @@ -0,0 +1,23 @@ +From 0a3e42e8292b89db602757510e367766685cc38b Mon Sep 17 00:00:00 2001 +From: Dima Pasechnik +Date: Fri, 12 Dec 2025 18:18:11 -0600 +Subject: [PATCH] correct cypari2.py(.in) -> cypari2.pc(.in) + +--- + cypari2/meson.build | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/cypari2/meson.build b/cypari2/meson.build +index 4c37553..de1257a 100644 +--- a/cypari2/meson.build ++++ b/cypari2/meson.build +@@ -49,8 +49,8 @@ endforeach + config_data = configuration_data() + config_data.set('version', meson.project_version()) + configure_file( + input: 'cypari2.py.in', +- output: 'cypari2.py', ++ output: 'cypari2.pc', + configuration: config_data, + install: true, + install_dir: py.get_install_dir() / 'cypari2' diff --git a/srcpkgs/python3-cypari2/template b/srcpkgs/python3-cypari2/template index a39cec2b155d3a..eb7bb68ea01f2c 100644 --- a/srcpkgs/python3-cypari2/template +++ b/srcpkgs/python3-cypari2/template @@ -1,9 +1,9 @@ # Template file for 'python3-cypari2' pkgname=python3-cypari2 -version=2.2.2 -revision=2 +version=2.2.4 +revision=1 build_style=python3-pep517 -hostmakedepends="python3-setuptools python3-wheel python3-Cython +hostmakedepends="python3-meson-python python3-Cython python3-cysignals pari perl" makedepends="python3-devel pari-devel gmp-devel" depends="python3-cysignals" @@ -14,10 +14,13 @@ license="GPL-2.0-or-later" homepage="https://github.com/sagemath/cypari2" changelog="https://github.com/sagemath/cypari2/releases" distfiles="https://github.com/sagemath/cypari2/archive/refs/tags/${version}.tar.gz" -checksum=d23c96e1e160e1c23a282d33c70e8facf352c437b6632e3eafcbc3c1d6d30a5d - +checksum=346fa1c44dbd13fd52baf30c79582c690456e7cb43499ff8d4b9f26d7dcdff6c do_check() { + local testdir="${wrksrc}/.xbps-testdir/$(date +%s)" + python3 -m installer --destdir "${testdir}" \ + ${make_install_args} ${make_install_target:-dist/*.whl} + # Please do not disable this custom check; # This will run many more tests than just running pytest - PYTHONPATH=$(cd build/lib* && pwd) make check + PYTHONPATH="${testdir}/${py3_sitelib}" make check } diff --git a/srcpkgs/python3-cypari2/update b/srcpkgs/python3-cypari2/update deleted file mode 100644 index 25ef51d109a4fd..00000000000000 --- a/srcpkgs/python3-cypari2/update +++ /dev/null @@ -1 +0,0 @@ -ignore="*a* *b* *rc*" From b08b2a1152f89d86d1fbf0472669d368017b86ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 15:59:28 -0300 Subject: [PATCH 05/19] python3-gmpy2: update to 2.2.2. --- srcpkgs/python3-gmpy2/template | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/srcpkgs/python3-gmpy2/template b/srcpkgs/python3-gmpy2/template index b8ae5547334fda..24f14d56dd41aa 100644 --- a/srcpkgs/python3-gmpy2/template +++ b/srcpkgs/python3-gmpy2/template @@ -1,21 +1,16 @@ # Template file for 'python3-gmpy2' pkgname=python3-gmpy2 -version=2.2.1 -revision=3 +version=2.2.2 +revision=1 build_style=python3-pep517 hostmakedepends="python3-setuptools python3-wheel" makedepends="python3-devel gmp-devel mpfr-devel libmpc-devel" depends="python3" -checkdepends="python3-pytest python3-hypothesis" +checkdepends="python3-pytest python3-hypothesis python3-mpmath" short_desc="Python3 interface to GMP, MPFR and MPC libraries" maintainer="Gonzalo Tornaría " license="LGPL-3.0-or-later" homepage="https://github.com/aleaxit/gmpy" changelog="https://github.com/aleaxit/gmpy/releases" distfiles="${PYPI_SITE}/g/gmpy2/gmpy2-${version%r}.tar.gz" -checksum=e83e07567441b78cb87544910cb3cc4fe94e7da987e93ef7622e76fb96650432 - -if [ "$XBPS_CHECK_PKGS" = full ]; then - # this would cause a build-time circular dependency - checkdepends+=" python3-mpmath" -fi +checksum=d9b8c81e0f5e1a3cabf1ea8d154b29b5ef6e33b8f4e4c37b3da957b2dd6a3fa8 From bb35d3d279fbcb9581d2f81f9aba7137827613e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 15:03:11 -0300 Subject: [PATCH 06/19] python3-memory_allocator: update to 0.2.0. --- srcpkgs/python3-memory_allocator/template | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/srcpkgs/python3-memory_allocator/template b/srcpkgs/python3-memory_allocator/template index c7cd49c2bb9b98..a3491788c848fe 100644 --- a/srcpkgs/python3-memory_allocator/template +++ b/srcpkgs/python3-memory_allocator/template @@ -1,15 +1,23 @@ # Template file for 'python3-memory_allocator' pkgname=python3-memory_allocator -version=0.1.4 -revision=3 +version=0.2.0 +revision=1 build_style=python3-pep517 -hostmakedepends="python3-setuptools python3-wheel python3-Cython" +hostmakedepends="python3-meson-python python3-Cython" makedepends="python3-devel" depends="python3" short_desc="Extension class to allocate memory easily with cython" maintainer="Gonzalo Tornaría " license="GPL-3.0-or-later" homepage="https://github.com/sagemath/memory_allocator" -changelog="https://github.com/sagemath/memory_allocator#changelog" +changelog="https://github.com/sagemath/memory_allocator/releases" distfiles="${PYPI_SITE}/m/memory_allocator/memory_allocator-${version}.tar.gz" -checksum=d609216b03031967e2b45a804b12ff9029578f4ec019fde42cf6aed6ca09efe4 +checksum=675d3c91019db98c97441de73d5c648821e5ae813f3f54cd09863d474b48fe26 + +do_check() { + local testdir="${wrksrc}/.xbps-testdir/$(date +%s)" + python3 -m installer --destdir "${testdir}" \ + ${make_install_args} ${make_install_target:-dist/*.whl} + + PYTHONPATH="${testdir}/${py3_sitelib}" python test.py +} From 4d3a3ad0de7a0ab4f6d7a169901807f8b6f4809a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 16:54:35 -0300 Subject: [PATCH 07/19] m4ri: update to 20251207. --- .../m4ri/patches/28-fix-overflow-32bit.patch | 45 ------------------- srcpkgs/m4ri/template | 6 +-- 2 files changed, 3 insertions(+), 48 deletions(-) delete mode 100644 srcpkgs/m4ri/patches/28-fix-overflow-32bit.patch diff --git a/srcpkgs/m4ri/patches/28-fix-overflow-32bit.patch b/srcpkgs/m4ri/patches/28-fix-overflow-32bit.patch deleted file mode 100644 index 6ad64573693a63..00000000000000 --- a/srcpkgs/m4ri/patches/28-fix-overflow-32bit.patch +++ /dev/null @@ -1,45 +0,0 @@ -From b178ed36bdd841a76b6595edb77631886e099406 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= -Date: Mon, 3 Feb 2025 17:19:37 -0300 -Subject: [PATCH] Fix overflows in `mzd_init()` - ---- - m4ri/mmc.h | 4 ++++ - m4ri/mzd.c | 5 ++--- - 2 files changed, 6 insertions(+), 3 deletions(-) - -diff --git a/m4ri/mmc.h b/m4ri/mmc.h -index e6db4ca..3e97391 100644 ---- a/m4ri/mmc.h -+++ b/m4ri/mmc.h -@@ -72,6 +72,10 @@ typedef struct _mm_block { - * \return Pointer to allocated memory block. - */ - static inline void *m4ri_mmc_calloc(size_t count, size_t size) { -+ if (size && count > SIZE_MAX/size) { -+ m4ri_die("m4ri_mmc_calloc: overflow in multiplication\n"); -+ return NULL; /* unreachable */ -+ } - size_t total_size = count * size; - void *ret = m4ri_mmc_malloc(total_size); - memset((char *)ret, 0, total_size); -diff --git a/m4ri/mzd.c b/m4ri/mzd.c -index ba04b7c..ac62c5c 100644 ---- a/m4ri/mzd.c -+++ b/m4ri/mzd.c -@@ -144,13 +144,12 @@ mzd_t *mzd_init(rci_t r, rci_t c) { - mzd_t *A = mzd_t_malloc(); - A->nrows = r; - A->ncols = c; -- A->width = (c + m4ri_radix - 1) / m4ri_radix; -+ A->width = c > 0 ? (c - 1) / m4ri_radix + 1 : 0; - A->rowstride = ((A->width & 1) == 0) ? A->width : A->width + 1; - A->high_bitmask = __M4RI_LEFT_BITMASK(c % m4ri_radix); - A->flags = (A->high_bitmask != m4ri_ffff) ? mzd_flag_nonzero_excess : 0; - if (r && c) { -- size_t block_words = r * A->rowstride; -- A->data = m4ri_mmc_calloc(block_words, sizeof(word)); -+ A->data = m4ri_mmc_calloc(r, sizeof(word) * A->rowstride); - } else { - A->data = NULL; - } diff --git a/srcpkgs/m4ri/template b/srcpkgs/m4ri/template index 2d7041d9591440..e3f9765447408d 100644 --- a/srcpkgs/m4ri/template +++ b/srcpkgs/m4ri/template @@ -1,6 +1,6 @@ # Template file for 'm4ri' pkgname=m4ri -version=20250128 +version=20251207 revision=1 build_style=gnu-configure # use defaults for cache sizes instead of build machine @@ -11,9 +11,9 @@ short_desc="Library for fast arithmetic with dense matrices over GF(2)" maintainer="Eloi Torrents " license="GPL-2.0-or-later" homepage="https://github.com/malb/m4ri" -changelog="https://github.com/malb/m4ri#history" +changelog="https://github.com/malb/m4ri/releases" distfiles="https://github.com/malb/m4ri/releases/download/${version}/m4ri-${version}.tar.gz" -checksum=b4098db651483c0e1506c16f79091eba02f41dadbacf1bb25be8eb97e5515f96 +checksum=7b195a4d88fa827b9ec6d087c3cac739ab6e5100da05faaed3a1d2c20ca3a930 pre_check() { # the testsuite is very slow when run in parallel! From ff4e8273cdaffe3a2ba78432907469a6428f7199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 16:59:47 -0300 Subject: [PATCH 08/19] m4rie: better changelog --- srcpkgs/m4rie/template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srcpkgs/m4rie/template b/srcpkgs/m4rie/template index f327a02526a0b4..c8e42849e1a5d0 100644 --- a/srcpkgs/m4rie/template +++ b/srcpkgs/m4rie/template @@ -9,7 +9,7 @@ short_desc="Library for fast arithmetic with dense matrices over GF(2^e)" maintainer="Eloi Torrents " license="GPL-2.0-or-later" homepage="https://github.com/malb/m4rie" -changelog="https://github.com/malb/m4rie#history" +changelog="https://github.com/malb/m4rie/releases" distfiles="https://github.com/malb/m4rie/releases/download/${version}/m4rie-${version}.tar.gz" checksum=96f1adafd50e6a0b51dc3aa1cb56cb6c1361ae7c10d97dc35c3fa70822a55bd7 From 7f57e8c2ca720b903f22574eecc49a143b635e37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 17:11:29 -0300 Subject: [PATCH 09/19] m4ri: update to 20260122. --- common/shlibs | 2 +- srcpkgs/m4ri/template | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/shlibs b/common/shlibs index df63a256979cd8..d910e2645e41b4 100644 --- a/common/shlibs +++ b/common/shlibs @@ -4249,7 +4249,7 @@ libpolys-4.4.1.so singular-4.4.1_1 libsingular_resources-4.4.1.so singular-4.4.1_1 libbrial.so.3 brial-1.2.10_1 libbrial_groebner.so.3 brial-1.2.10_1 -libm4ri.so.1 m4ri-20250128_1 +libm4ri.so.2 m4ri-20260122_1 libm4rie.so.1 m4rie-20250128_1 libptytty.so.0 libptytty-2.0_1 libcoeurl.so.0.3 coeurl-0.3.0_1 diff --git a/srcpkgs/m4ri/template b/srcpkgs/m4ri/template index e3f9765447408d..8e94c22813a596 100644 --- a/srcpkgs/m4ri/template +++ b/srcpkgs/m4ri/template @@ -1,6 +1,6 @@ # Template file for 'm4ri' pkgname=m4ri -version=20251207 +version=20260122 revision=1 build_style=gnu-configure # use defaults for cache sizes instead of build machine @@ -13,7 +13,7 @@ license="GPL-2.0-or-later" homepage="https://github.com/malb/m4ri" changelog="https://github.com/malb/m4ri/releases" distfiles="https://github.com/malb/m4ri/releases/download/${version}/m4ri-${version}.tar.gz" -checksum=7b195a4d88fa827b9ec6d087c3cac739ab6e5100da05faaed3a1d2c20ca3a930 +checksum=7e033ca1fd36be8861e2f67d9d124c398fc0d830209bb0226462485876346404 pre_check() { # the testsuite is very slow when run in parallel! From 7451ea7c619316d59b6af973760185af609116ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 17:40:49 -0300 Subject: [PATCH 10/19] m4rie: rebuild for m4ri-20260122. --- srcpkgs/m4rie/template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srcpkgs/m4rie/template b/srcpkgs/m4rie/template index c8e42849e1a5d0..8e7860d7cf8217 100644 --- a/srcpkgs/m4rie/template +++ b/srcpkgs/m4rie/template @@ -1,7 +1,7 @@ # Template file for 'm4rie' pkgname=m4rie version=20250128 -revision=1 +revision=2 build_style=gnu-configure hostmakedepends="pkg-config" makedepends="m4ri-devel" From b245155770ec7e85c07af19d88219fbd4b33ad40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 17:38:48 -0300 Subject: [PATCH 11/19] brial: update to 1.2.15. --- srcpkgs/brial/template | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srcpkgs/brial/template b/srcpkgs/brial/template index 9c5773f9f3309b..87f0f906c224ea 100644 --- a/srcpkgs/brial/template +++ b/srcpkgs/brial/template @@ -1,6 +1,6 @@ # Template file for 'brial' pkgname=brial -version=1.2.14 +version=1.2.15 revision=1 build_style=gnu-configure hostmakedepends="pkg-config" @@ -12,7 +12,7 @@ license="GPL-2.0-or-later" homepage="https://github.com/BRiAl/BRiAl" changelog="https://github.com/BRiAl/BRiAl/releases" distfiles="https://github.com/BRiAl/BRiAl/releases/download/$version/brial-$version.tar.bz2" -checksum=48cd95f167381699e2c538bfbf6eac35ca046dee79f797059f3879abdf5b7e66 +checksum=1d0e7de01b1b60ad892dee6c02503f5932e2ed211f3f8dbdf1a3216c696ef201 if [ -n "$CROSS_BUILD" ]; then configure_args+=" --with-boost-unit-test-framework=no" From f6addac97af8aee7fc824a7126329b2dad670680 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 17:09:49 -0300 Subject: [PATCH 12/19] ntl: update to 11.6.0. --- common/shlibs | 2 +- srcpkgs/ntl/template | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/common/shlibs b/common/shlibs index d910e2645e41b4..ee86db0eaba585 100644 --- a/common/shlibs +++ b/common/shlibs @@ -4194,7 +4194,7 @@ libgap.so.9 gap-4.13.0_1 libgtkdatabox.so.1 gtkdatabox3-1.0.0_1 libxcvt.so.0 libxcvt-0.1.1_1 libgf2x.so.3 gf2x-1.3.0_1 -libntl.so.44 ntl-11.5.1_1 +libntl.so.45 ntl-11.6.0_1 libflint.so.21 flintlib-3.3.1_1 libec.so.14 eclib-20241112_1 libsymmetrica.so.3 symmetrica-3.1.0_1 diff --git a/srcpkgs/ntl/template b/srcpkgs/ntl/template index e4b84a45cd3de6..1ee21b69223733 100644 --- a/srcpkgs/ntl/template +++ b/srcpkgs/ntl/template @@ -1,6 +1,6 @@ # Template file for 'ntl' pkgname=ntl -version=11.5.1 +version=11.6.0 revision=1 build_wrksrc="src" build_style=configure @@ -10,8 +10,9 @@ short_desc="Library for doing Number Theory" maintainer="Gonzalo Tornaría " license="LGPL-2.1-or-later" homepage="https://libntl.org" +changelog="https://github.com/libntl/ntl/releases" distfiles="https://libntl.org/ntl-${version}.tar.gz" -checksum=210d06c31306cbc6eaf6814453c56c776d9d8e8df36d74eb306f6a523d1c6a8a +checksum=bc0ef9aceb075a6a0673ac8d8f47d5f8458c72fe806e4468fbd5d3daff056182 nocross=yes # runs binaries built for target build_options="native_build" @@ -28,6 +29,7 @@ ntl-devel_package() { short_desc+=" - development files" pkg_install() { vmove usr/include + vmove usr/lib/pkgconfig vmove "usr/lib/*.a" vmove "usr/lib/*.so" vmove usr/share From 4b124beb09474c85caf8fe749ea12a8d9871f6b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 18:51:52 -0300 Subject: [PATCH 13/19] ntl: cross build. --- srcpkgs/ntl/patches/cross.patch | 51 +++++++++++++++++++++++++++++++++ srcpkgs/ntl/template | 29 ++++++++++++++++--- 2 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 srcpkgs/ntl/patches/cross.patch diff --git a/srcpkgs/ntl/patches/cross.patch b/srcpkgs/ntl/patches/cross.patch new file mode 100644 index 00000000000000..8d20e5bd978e4a --- /dev/null +++ b/srcpkgs/ntl/patches/cross.patch @@ -0,0 +1,51 @@ +--- a/src/DoConfig ++++ b/src/DoConfig +@@ -571,7 +571,7 @@ + # icc just gives warnings for bad command line args + RemoveProg("$name") and return 0; + } +- system("./$name") and RemoveProg("$name") and return 0; ++ system("\$RUNTEST ./$name") and RemoveProg("$name") and return 0; + RemoveProg("$name") and return 1; + } + +@@ -763,7 +763,7 @@ + die "Goodbye!\n"; + } + +-my $config_info = `./GenConfigInfo`; ++my $config_info = `\$RUNTEST ./GenConfigInfo`; + + my ($compiler_name, $language_standard, $cpu_type, $os_name); + ($compiler_name, $language_standard, $cpu_type, $os_name) = +--- a/src/MakeCheckFeatures ++++ b/src/MakeCheckFeatures +@@ -14,7 +14,7 @@ + + if test -f CheckFeatures + then +- if ./CheckFeatures ++ if $RUNTEST ./CheckFeatures + then + echo "[yes]" + echo "#ifndef NTL_HAVE_$f" > "../include/NTL/HAVE_$f.h" +--- a/src/mfile ++++ b/src/mfile +@@ -354,7 +354,7 @@ + setup1: + $(COMPILE) MakeDescAux.cpp + $(LINK) -o MakeDesc MakeDesc.cpp MakeDescAux.o $(LDLIBS) +- ./MakeDesc ++ $(RUNTEST) ./MakeDesc + mv mach_desc.h ../include/NTL/mach_desc.h + + +@@ -378,7 +378,7 @@ + + setup3: + $(LINK) $(GMP_OPT_INCDIR) -o gen_gmp_aux gen_gmp_aux.cpp $(GMP_OPT_LIBPATH) $(GMP_OPT_LIB) $(LDLIBS) +- ./gen_gmp_aux > ../include/NTL/gmp_aux.h ++ $(RUNTEST) ./gen_gmp_aux > ../include/NTL/gmp_aux.h + $(LINK) $(GF2X_OPT_INCDIR) -o gf2x_version_1_2_or_later_required gf2x_version_1_2_or_later_required.cpp $(GF2X_OPT_LIBPATH) $(GF2X_OPT_LIB) $(LDLIBS) + + # setup4 runs the wizard diff --git a/srcpkgs/ntl/template b/srcpkgs/ntl/template index 1ee21b69223733..b60b66e1a83d37 100644 --- a/srcpkgs/ntl/template +++ b/srcpkgs/ntl/template @@ -4,8 +4,9 @@ version=11.6.0 revision=1 build_wrksrc="src" build_style=configure -hostmakedepends="perl libtool" -makedepends="gmp-devel gf2x-devel" +build_helper=qemu +hostmakedepends="perl libtool autoconf automake" +makedepends="gmp-devel gf2x-devel libtool" short_desc="Library for doing Number Theory" maintainer="Gonzalo Tornaría " license="LGPL-2.1-or-later" @@ -13,13 +14,33 @@ homepage="https://libntl.org" changelog="https://github.com/libntl/ntl/releases" distfiles="https://libntl.org/ntl-${version}.tar.gz" checksum=bc0ef9aceb075a6a0673ac8d8f47d5f8458c72fe806e4468fbd5d3daff056182 -nocross=yes # runs binaries built for target build_options="native_build" +if [ "$CROSS_BUILD" ]; then + export RUNTEST="/usr/bin/qemu-$XBPS_TARGET_QEMU_MACHINE-static" +fi + +pre_configure() { + # project uses libtool without autoconf, which is not really viable + # since autoconf is supposed to configure libtool. + mkdir -p hack + cat <<-EOF >hack/configure.ac + AC_INIT + LT_INIT + AC_CONFIG_MACRO_DIRS([m4]) + AC_LANG([C]) + AC_LANG([C++]) + LT_LANG([C]) + LT_LANG([C++]) + AC_OUTPUT + EOF + (cd hack; autoreconf -fi; libtoolize -i; ./configure --host=$XBPS_CROSS_TRIPLET --build=$XBPS_TRIPLET --with-libtool-sysroot=$XBPS_CROSS_BASE) +} + do_configure() { # see http://www.shoup.net/ntl/doc/tour-unix.html - ./configure CXX="$CXX" CXXFLAGS="$CXXFLAGS" LIBTOOL="libtool" \ + ./configure CXX="$CXX" CXXFLAGS="$CXXFLAGS" LIBTOOL="./hack/libtool" \ PREFIX="/usr" SHARED="on" NTL_GF2X_LIB="on" \ NATIVE="$(vopt_if native_build 'on' 'off')" } From 1e6a95caa92344d63dd3f1729c7d6615d5c8e927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 18:51:47 -0300 Subject: [PATCH 14/19] flintlib: update to 3.4.0. --- common/shlibs | 2 +- srcpkgs/flintlib/template | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/shlibs b/common/shlibs index ee86db0eaba585..b58b188714f7d7 100644 --- a/common/shlibs +++ b/common/shlibs @@ -4195,7 +4195,7 @@ libgtkdatabox.so.1 gtkdatabox3-1.0.0_1 libxcvt.so.0 libxcvt-0.1.1_1 libgf2x.so.3 gf2x-1.3.0_1 libntl.so.45 ntl-11.6.0_1 -libflint.so.21 flintlib-3.3.1_1 +libflint.so.22 flintlib-3.4.0_1 libec.so.14 eclib-20241112_1 libsymmetrica.so.3 symmetrica-3.1.0_1 libLfunction.so.2 lcalc-2.1.0_1 diff --git a/srcpkgs/flintlib/template b/srcpkgs/flintlib/template index b3a3c8332f0de0..c8784806df8205 100644 --- a/srcpkgs/flintlib/template +++ b/srcpkgs/flintlib/template @@ -1,6 +1,6 @@ # Template file for 'flintlib' pkgname=flintlib -version=3.3.1 +version=3.4.0 revision=1 build_style=gnu-configure configure_args="--prefix=/usr --disable-arch $(vopt_with ntl) @@ -14,7 +14,7 @@ license="LGPL-3.0-or-later" homepage="https://flintlib.org" changelog="https://raw.githubusercontent.com/flintlib/flint/refs/heads/main/doc/source/history.rst" distfiles="https://github.com/flintlib/flint/releases/download/v${version/+/-}/flint-${version/+/-}.tar.xz" -checksum=5ee67f09ce810a0ab9f3a9de99945521b864e02064b09d6f178c60e743a8df62 +checksum=0550623c85aa37897638a6b10d267c311a788d137509692d8d858fba10a852da build_options="ntl openblas" desc_option_ntl="enable NTL support" From b389d3926dfe6c36d71d6147d94a178337c4ad61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 20:39:54 -0300 Subject: [PATCH 15/19] gap: update to 4.15.1. --- common/shlibs | 2 +- srcpkgs/gap/template | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/shlibs b/common/shlibs index b58b188714f7d7..a485121483bea9 100644 --- a/common/shlibs +++ b/common/shlibs @@ -4190,7 +4190,7 @@ liblinbox.so.0 linbox-1.6.3_1 libpari-gmp-tls.so.9 pari-2.17.0_1 libtree-sitter.so.0.25 tree-sitter-0.25.2_1 libplanarity.so.2 planarity-4.0.0.0_1 -libgap.so.9 gap-4.13.0_1 +libgap.so.10 gap-4.15.1_1 libgtkdatabox.so.1 gtkdatabox3-1.0.0_1 libxcvt.so.0 libxcvt-0.1.1_1 libgf2x.so.3 gf2x-1.3.0_1 diff --git a/srcpkgs/gap/template b/srcpkgs/gap/template index 85b2617c1b3d11..b9faa2888fccbe 100644 --- a/srcpkgs/gap/template +++ b/srcpkgs/gap/template @@ -1,6 +1,6 @@ # Template file for 'gap' pkgname=gap -version=4.14.0 +version=4.15.1 revision=1 build_style=gnu-configure makedepends="gmp-devel zlib-devel readline-devel" @@ -11,7 +11,7 @@ license="GPL-2.0-or-later" homepage="https://www.gap-system.org/" changelog="https://raw.githubusercontent.com/gap-system/gap/master/CHANGES.md" distfiles="https://github.com/gap-system/gap/releases/download/v${version}/gap-${version}.tar.gz" -checksum=845f5272c26feb1b8eb9ef294bf0545f264c1fe5a19b0601bbc65d79d9506487 +checksum=6049d53e99b12e25c2d848db21ac4a06380a46fe4c4157243d556fe06930042c if [ "$XBPS_CHECK_PKGS" = full ]; then do_check() { From f18e6055b7107181a57d8093031a8e7396fcc124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 21:16:56 -0300 Subject: [PATCH 16/19] eclib: rebuild for ntl and flintlib --- srcpkgs/eclib/template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srcpkgs/eclib/template b/srcpkgs/eclib/template index 70097823f40291..c6ab34d9027734 100644 --- a/srcpkgs/eclib/template +++ b/srcpkgs/eclib/template @@ -1,7 +1,7 @@ # Template file for 'eclib' pkgname=eclib version=20250627 -revision=3 +revision=4 build_style=gnu-configure configure_args="--with-flint --with-boost --with-boost-system=c" makedepends="pari-devel ntl-devel flintlib-devel boost-devel-minimal From 39851ece83fe91527f482df85af1dd9e67b31de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 22 Jan 2026 21:31:39 -0300 Subject: [PATCH 17/19] singular: rebuild for ntl and flintlib --- srcpkgs/singular/template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srcpkgs/singular/template b/srcpkgs/singular/template index 77951481a8aa68..808dc7d24d8dc5 100644 --- a/srcpkgs/singular/template +++ b/srcpkgs/singular/template @@ -1,7 +1,7 @@ # Template file for 'singular' pkgname=singular version=4.4.1 -revision=3 +revision=4 _majver=${version%p*} build_style=gnu-configure configure_args="--with-readline=ncurses From 2c5332dc975cdc6e091317173e5b5d549b2f586c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Fri, 23 Jan 2026 01:10:55 -0300 Subject: [PATCH 18/19] sagemath: fix some tests --- ...Fix_doctest_failure_with_python_3.14.patch | 14 +++ ...469-Prevent_leaking_file_descriptors.patch | 98 +++++++++++++++++++ srcpkgs/sagemath/patches/get_patches | 2 + 3 files changed, 114 insertions(+) create mode 100644 srcpkgs/sagemath/patches/41394-Fix_doctest_failure_with_python_3.14.patch create mode 100644 srcpkgs/sagemath/patches/41469-Prevent_leaking_file_descriptors.patch 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 new file mode 100644 index 00000000000000..f728fba9a1636f --- /dev/null +++ b/srcpkgs/sagemath/patches/41394-Fix_doctest_failure_with_python_3.14.patch @@ -0,0 +1,14 @@ +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/41469-Prevent_leaking_file_descriptors.patch b/srcpkgs/sagemath/patches/41469-Prevent_leaking_file_descriptors.patch new file mode 100644 index 00000000000000..f5d0f608905711 --- /dev/null +++ b/srcpkgs/sagemath/patches/41469-Prevent_leaking_file_descriptors.patch @@ -0,0 +1,98 @@ +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/get_patches b/srcpkgs/sagemath/patches/get_patches index fd7662a1127ee2..d0093639f7d867 100755 --- a/srcpkgs/sagemath/patches/get_patches +++ b/srcpkgs/sagemath/patches/get_patches @@ -37,4 +37,6 @@ get_pr 41395 "Fix test failures with pyparsing 3.3" get_pr 41342 "Fix a test failure with numpy 2.4" get_pr 40816 "Meson: Build docs for Maxima as well" 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" From 0b9d78df5703cb16ce043f47b87071f302964e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Sat, 24 Jan 2026 09:13:24 -0300 Subject: [PATCH 19/19] sagemath: change sphinx --- srcpkgs/sagemath/patches/sphinx.patch | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 srcpkgs/sagemath/patches/sphinx.patch diff --git a/srcpkgs/sagemath/patches/sphinx.patch b/srcpkgs/sagemath/patches/sphinx.patch new file mode 100644 index 00000000000000..6c5d5799d5294f --- /dev/null +++ b/srcpkgs/sagemath/patches/sphinx.patch @@ -0,0 +1,11 @@ +--- 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',