From d745084f9cc2b65b930d8ce69001b0e8daaab925 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Thu, 9 Nov 2023 10:17:32 -0800 Subject: [PATCH] Incidental edits from #36372 (Fix/ignore all remaining test failures when run under conda) --- src/sage/crypto/mq/sr.py | 20 ++-- .../matrix_gps/finitely_generated_gap.py | 7 +- src/sage/parallel/map_reduce.py | 10 +- src/sage/repl/ipython_kernel/install.py | 8 +- .../polynomial/multi_polynomial_ideal.py | 92 +++++++++++-------- .../polynomial/multi_polynomial_sequence.py | 32 ++++--- src/sage/rings/polynomial/pbori/fglm.py | 4 +- src/sage_setup/clean.py | 4 +- 8 files changed, 104 insertions(+), 73 deletions(-) diff --git a/src/sage/crypto/mq/sr.py b/src/sage/crypto/mq/sr.py index c4293c5a0e2..49b7d67374d 100644 --- a/src/sage/crypto/mq/sr.py +++ b/src/sage/crypto/mq/sr.py @@ -308,23 +308,21 @@ - [MR2002]_ """ -from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF -from sage.rings.integer_ring import ZZ -from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing, BooleanPolynomialRing_constructor as BooleanPolynomialRing - -from sage.structure.element import is_Matrix from sage.matrix.constructor import Matrix, random_matrix from sage.matrix.matrix_space import MatrixSpace - -from sage.misc.verbose import get_verbose from sage.misc.flatten import flatten - +from sage.misc.verbose import get_verbose from sage.modules.vector_modn_dense import Vector_modn_dense - +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF +from sage.rings.integer_ring import ZZ from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence -from .mpolynomialsystemgenerator import MPolynomialSystemGenerator - +from sage.rings.polynomial.polynomial_ring_constructor import \ + BooleanPolynomialRing_constructor as BooleanPolynomialRing +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.polynomial.term_order import TermOrder +from sage.structure.element import is_Matrix + +from .mpolynomialsystemgenerator import MPolynomialSystemGenerator def SR(n=1, r=1, c=1, e=4, star=False, **kwargs): diff --git a/src/sage/groups/matrix_gps/finitely_generated_gap.py b/src/sage/groups/matrix_gps/finitely_generated_gap.py index fcfb223b58d..af676af3673 100644 --- a/src/sage/groups/matrix_gps/finitely_generated_gap.py +++ b/src/sage/groups/matrix_gps/finitely_generated_gap.py @@ -34,9 +34,9 @@ from sage.modules.free_module_element import vector from sage.rings.fraction_field import FractionField from sage.rings.integer_ring import ZZ +from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.rings.power_series_ring import PowerSeriesRing -from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence class FinitelyGeneratedMatrixGroup_gap(MatrixGroup_gap): @@ -313,8 +313,9 @@ def invariant_generators(self): - S. King, "Minimal Generating Sets of non-modular invariant rings of finite groups", :arxiv:`math/0703035`. """ - from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing from sage.interfaces.singular import singular + from sage.rings.polynomial.polynomial_ring_constructor import \ + PolynomialRing gens = self.gens() singular.LIB("finvar.lib") n = self.degree() # len((gens[0].matrix()).rows()) @@ -755,6 +756,7 @@ def reynolds_operator(self, poly, chi=None): if chi is None: # then this is the trivial character if R.characteristic() == 0: from sage.rings.qqbar import QQbar + # non-modular case if C == QQbar or R == QQbar: L = QQbar @@ -788,6 +790,7 @@ def reynolds_operator(self, poly, chi=None): K = chi.values()[0].parent() if R.characteristic() == 0: from sage.rings.qqbar import QQbar + # extend base_ring to compositum if C == QQbar or K == QQbar or R == QQbar: L = QQbar diff --git a/src/sage/parallel/map_reduce.py b/src/sage/parallel/map_reduce.py index a7b610b10e1..66fea7f394f 100644 --- a/src/sage/parallel/map_reduce.py +++ b/src/sage/parallel/map_reduce.py @@ -548,17 +548,17 @@ # https://www.gnu.org/licenses/ # **************************************************************************** import copy -import sys -import random -import queue import ctypes import logging import multiprocessing as mp +import queue +import random +import sys from collections import deque from threading import Thread -from sage.sets.recursively_enumerated_set import RecursivelyEnumeratedSet # _generic from sage.misc.lazy_attribute import lazy_attribute +from sage.sets.recursively_enumerated_set import RecursivelyEnumeratedSet # _generic logger = logging.getLogger(__name__) logger.__doc__ = (""" @@ -1895,8 +1895,8 @@ def __init__(self, maxl=9): """ RESetMapReduce.__init__(self) - from sage.rings.polynomial.polynomial_ring import polygen from sage.rings.integer_ring import ZZ + from sage.rings.polynomial.polynomial_ring import polygen self.x = polygen(ZZ, 'x') self.maxl = maxl diff --git a/src/sage/repl/ipython_kernel/install.py b/src/sage/repl/ipython_kernel/install.py index 081599b3452..0adeab04bcd 100644 --- a/src/sage/repl/ipython_kernel/install.py +++ b/src/sage/repl/ipython_kernel/install.py @@ -14,12 +14,14 @@ """ -import os import errno +import os import warnings from sage.env import ( - SAGE_DOC, SAGE_VENV, SAGE_EXTCODE, + SAGE_DOC, + SAGE_EXTCODE, + SAGE_VENV, SAGE_VERSION, THREEJS_DIR, ) @@ -257,7 +259,7 @@ def check(cls): sage: from sage.repl.ipython_kernel.install import SageKernelSpec sage: SageKernelSpec.check() # random """ - from jupyter_client.kernelspec import get_kernel_spec, NoSuchKernel + from jupyter_client.kernelspec import NoSuchKernel, get_kernel_spec ident = cls.identifier() try: spec = get_kernel_spec(ident) diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py index a752af29e75..4b460f244d6 100644 --- a/src/sage/rings/polynomial/multi_polynomial_ideal.py +++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py @@ -238,33 +238,34 @@ import sage.rings.abc import sage.rings.polynomial.toy_buchberger as toy_buchberger -import sage.rings.polynomial.toy_variety as toy_variety import sage.rings.polynomial.toy_d_basis as toy_d_basis - +import sage.rings.polynomial.toy_variety as toy_variety from sage.misc.cachefunc import cached_method from sage.misc.method_decorator import MethodDecorator from sage.misc.misc_c import prod -from sage.misc.verbose import verbose, get_verbose +from sage.misc.verbose import get_verbose, verbose from sage.rings.ideal import Ideal_generic from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.noncommutative_ideals import Ideal_nc from sage.rings.qqbar_decorators import handle_AA_and_QQbar +from sage.structure.richcmp import (op_EQ, op_GE, op_GT, op_LE, op_LT, op_NE, + rich_to_bool, richcmp_method) from sage.structure.sequence import Sequence -from sage.structure.richcmp import (richcmp_method, op_EQ, op_NE, - op_LT, op_GT, op_LE, op_GE, rich_to_bool) - try: from sage.interfaces.expect import StdOutContext - from sage.interfaces.singular import singular as singular_default, singular_gb_standard_options - from sage.libs.singular.standard_options import libsingular_gb_standard_options + from sage.interfaces.singular import singular as singular_default + from sage.interfaces.singular import singular_gb_standard_options + from sage.libs.singular.standard_options import \ + libsingular_gb_standard_options except ImportError: singular_default = None singular_gb_standard_options = libsingular_gb_standard_options = MethodDecorator try: - from sage.interfaces.magma import magma as magma_default, magma_gb_standard_options + from sage.interfaces.magma import magma as magma_default + from sage.interfaces.magma import magma_gb_standard_options except ImportError: magma_default = None magma_gb_standard_options = MethodDecorator @@ -439,7 +440,8 @@ def _groebner_basis_magma(self, deg_bound=None, prot=False, magma=magma_default) a = str(R.base_ring().gen()) mgb = [e.replace("$.1",a) for e in mgb] - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence B = PolynomialSequence([R(e) for e in mgb], R, immutable=True) return B @@ -531,11 +533,11 @@ def _groebner_basis_libsingular(self, algorithm="groebner", *args, **kwds): sage: len(gI.gens()) 3 """ - from sage.rings.polynomial.multi_polynomial_ideal_libsingular import std_libsingular, slimgb_libsingular from sage.libs.singular.function import singular_function - from sage.libs.singular.option import opt - from sage.libs.singular.function_factory import ff + from sage.libs.singular.option import opt + from sage.rings.polynomial.multi_polynomial_ideal_libsingular import ( + slimgb_libsingular, std_libsingular) groebner = ff.groebner if get_verbose() >= 2: @@ -592,14 +594,15 @@ def _groebner_cover(self): [[1], [1], [[[(2*a + 3)], [[1]]]]]] """ from sage.rings.fraction_field import FractionField_generic - from sage.rings.polynomial.multi_polynomial_ring_base import is_MPolynomialRing + from sage.rings.polynomial.multi_polynomial_ring_base import \ + is_MPolynomialRing from sage.rings.polynomial.polynomial_ring import is_PolynomialRing F = self.base_ring() if (not isinstance(F, FractionField_generic) or (not is_MPolynomialRing(F.ring()) and not is_PolynomialRing(F.ring()))): raise TypeError("the base ring must be a field with parameters") - from sage.libs.singular.function import singular_function, lib from sage.arith.functions import lcm + from sage.libs.singular.function import lib, singular_function lib("grobcov.lib") grobcov = singular_function("grobcov") polynomials = [] @@ -1142,8 +1145,8 @@ def triangular_decomposition(self, algorithm=None, singular=singular_default): if I.dimension() != 0: raise TypeError("dimension must be zero") - from sage.libs.singular.function import singular_function from sage.libs.singular.function import lib as singular_lib + from sage.libs.singular.function import singular_function singular_lib('triang.lib') @@ -1471,7 +1474,8 @@ def _groebner_basis_singular(self, algorithm="groebner", *args, **kwds): This method is called by the :meth:`.groebner_basis` method and the user usually doesn't need to bother with this one. """ - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence R = self.ring() S = self._groebner_basis_singular_raw(algorithm=algorithm, *args, **kwds) @@ -1806,7 +1810,8 @@ def integral_closure(self, p=0, r=True, singular=singular_default): Uses libSINGULAR. """ - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence R = self.ring() from sage.libs.singular.function_factory import ff @@ -1895,9 +1900,11 @@ def free_resolution(self, *args, **kwds): ... NotImplementedError: the ring must be a polynomial ring using Singular """ - from sage.rings.polynomial.multi_polynomial_libsingular import MPolynomialRing_libsingular + from sage.rings.polynomial.multi_polynomial_libsingular import \ + MPolynomialRing_libsingular if isinstance(self.ring(), MPolynomialRing_libsingular): - from sage.homology.free_resolution import FiniteFreeResolution_singular + from sage.homology.free_resolution import \ + FiniteFreeResolution_singular return FiniteFreeResolution_singular(self, *args, **kwds) raise NotImplementedError("the ring must be a polynomial ring using Singular") @@ -1934,9 +1941,11 @@ def graded_free_resolution(self, *args, **kwds): ... NotImplementedError: the ring must be a polynomial ring using Singular """ - from sage.rings.polynomial.multi_polynomial_libsingular import MPolynomialRing_libsingular + from sage.rings.polynomial.multi_polynomial_libsingular import \ + MPolynomialRing_libsingular if isinstance(self.ring(), MPolynomialRing_libsingular): - from sage.homology.graded_resolution import GradedFiniteFreeResolution_singular + from sage.homology.graded_resolution import \ + GradedFiniteFreeResolution_singular return GradedFiniteFreeResolution_singular(self, *args, **kwds) raise NotImplementedError("the ring must be a polynomial ring using Singular") @@ -2110,9 +2119,9 @@ def basis_is_groebner(self, singular=singular_default): sage: I2.basis_is_groebner() True """ - from sage.matrix.constructor import matrix - from sage.libs.singular.option import opt_verb_ctx from sage.libs.singular.function_factory import ff + from sage.libs.singular.option import opt_verb_ctx + from sage.matrix.constructor import matrix sing_reduce = ff.reduce syz = ff.syz @@ -2220,7 +2229,8 @@ def transformed_basis(self, algorithm="gwalk", other_ring=None, singular=singula sage: J = Ideal(I.transformed_basis('fglm', other_ring=S)) # known bug sage: J # known bug """ - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence R = self.ring() if self.basis_is_groebner(): @@ -2229,8 +2239,7 @@ def transformed_basis(self, algorithm="gwalk", other_ring=None, singular=singula I = R.ideal(self.groebner_basis()) if algorithm in ("gwalk","awalk1","awalk2","twalk","fwalk"): - from sage.libs.singular.function import lib - from sage.libs.singular.function import singular_function + from sage.libs.singular.function import lib, singular_function lib("grwalk.lib") gb = singular_function(algorithm)(I) return PolynomialSequence(R, sorted(gb,reverse=True), immutable=True) @@ -2468,6 +2477,7 @@ def saturation(self, other): (Ideal (y, x^5) of Multivariate Polynomial Ring in x, y, z over Algebraic Field, 4) """ from sage.libs.singular.function_factory import ff + # function renamed in singular > 4.3.2p4, see issue #35980 try: sat = ff.elim__lib.sat_with_exp @@ -3242,8 +3252,10 @@ def _normal_basis_libsingular(self, degree, weights=None): sage: I.normal_basis() [k, 1] """ - from sage.rings.polynomial.multi_polynomial_ideal_libsingular import kbase_libsingular - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence + from sage.rings.polynomial.multi_polynomial_ideal_libsingular import \ + kbase_libsingular + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence gb = self._groebner_basis_libsingular() J = self.ring().ideal(gb) if weights is None or degree is None: @@ -3330,7 +3342,8 @@ def normal_basis(self, degree=None, algorithm='libsingular', sage: S.ideal(x^6 + y^3 + z^2).normal_basis(6, algorithm='singular') # needs sage.rings.finite_rings [x^4*y, x^2*y^2, y^3, x^3*z, x*y*z, z^2] """ - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence weights = tuple(x.degree() for x in self.ring().gens()) if all(w == 1 for w in weights): @@ -3427,7 +3440,8 @@ def _groebner_basis_macaulay2(self, strategy=None): ... ValueError: unsupported Macaulay2 strategy """ - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence I = self._macaulay2_() if strategy == "gb" or strategy is None: @@ -3904,7 +3918,8 @@ def gens(self): sage: I.gens() [x, y + 1] """ - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence return PolynomialSequence(self.ring(), Ideal_generic.gens(self), immutable=True) @property @@ -4636,8 +4651,10 @@ def groebner_basis(self, algorithm='', deg_bound=None, mult_bound=None, prot=Fal ... NotImplementedError: msolve only supports the degrevlex order (use transformed_basis()) """ - from sage.rings.polynomial.multi_polynomial_sequence import PolynomialSequence - from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing + from sage.rings.polynomial.multi_polynomial_sequence import \ + PolynomialSequence + from sage.rings.polynomial.polynomial_ring_constructor import \ + PolynomialRing if algorithm.lower() == "magma": algorithm = "magma:GroebnerBasis" @@ -5144,9 +5161,9 @@ def degree_of_semi_regularity(self): if m <= n: raise ValueError("This function requires an overdefined system of polynomials.") - from sage.rings.rational_field import QQ from sage.misc.misc_c import prod from sage.rings.power_series_ring import PowerSeriesRing + from sage.rings.rational_field import QQ z = PowerSeriesRing(QQ, 'z', default_prec=sum(degs)).gen() s = prod([1-z**d for d in degs]) / (1-z)**n @@ -5220,8 +5237,8 @@ def plot(self, *args, **kwds): Graphics object consisting of 1 graphics primitive """ - from sage.rings.real_mpfr import RR from sage.plot.all import implicit_plot + from sage.rings.real_mpfr import RR K = self.base_ring() if not RR.has_coerce_map_from(K): @@ -5538,7 +5555,8 @@ def weil_restriction(self): Based on a Singular implementation by Michael Brickenstein """ - from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing + from sage.rings.polynomial.polynomial_ring_constructor import \ + PolynomialRing R = self.ring() nvars = R.ngens() diff --git a/src/sage/rings/polynomial/multi_polynomial_sequence.py b/src/sage/rings/polynomial/multi_polynomial_sequence.py index b52fb34f721..9f0c7712d58 100644 --- a/src/sage/rings/polynomial/multi_polynomial_sequence.py +++ b/src/sage/rings/polynomial/multi_polynomial_sequence.py @@ -173,10 +173,10 @@ from sage.rings.quotient_ring import is_QuotientRing from sage.structure.sequence import Sequence_generic - try: from sage.interfaces.singular import singular, singular_gb_standard_options - from sage.libs.singular.standard_options import libsingular_gb_standard_options + from sage.libs.singular.standard_options import \ + libsingular_gb_standard_options except ImportError: singular = None singular_gb_standard_options = libsingular_gb_standard_options = MethodDecorator @@ -1151,8 +1151,10 @@ def reduced(self): [y^3 + z, x*y + (1 + 2 + O(2^20))*z, x*z - z] """ - from sage.rings.polynomial.multi_polynomial_ideal_libsingular import interred_libsingular - from sage.rings.polynomial.multi_polynomial_libsingular import MPolynomialRing_libsingular + from sage.rings.polynomial.multi_polynomial_ideal_libsingular import \ + interred_libsingular + from sage.rings.polynomial.multi_polynomial_libsingular import \ + MPolynomialRing_libsingular R = self.ring() @@ -1169,7 +1171,8 @@ def reduced(self): ret.append(f.lc()**(-1)*f) # lead coeffs are not reduced by interred s.option("set",o) except TypeError: - from sage.rings.polynomial.toy_buchberger import inter_reduction + from sage.rings.polynomial.toy_buchberger import \ + inter_reduction ret = inter_reduction(self) ret = sorted(ret, reverse=True) @@ -1327,15 +1330,17 @@ def eliminate_linear_variables(self, maxlength=Infinity, skip=None, return_reduc This is called "massaging" in [BCJ2007]_. """ - from sage.rings.polynomial.multi_polynomial_ring_base import BooleanPolynomialRing_base + from sage.rings.polynomial.multi_polynomial_ring_base import \ + BooleanPolynomialRing_base R = self.ring() if not isinstance(R, BooleanPolynomialRing_base): raise NotImplementedError("Only BooleanPolynomialRing's are supported.") + from sage.rings.polynomial.pbori.ll import (eliminate, ll_encode, + ll_red_nf_redsb) from sage.rings.polynomial.pbori.pbori import gauss_on_polys - from sage.rings.polynomial.pbori.ll import eliminate, ll_encode, ll_red_nf_redsb F = self reductors = [] @@ -1413,7 +1418,8 @@ def _groebner_strategy(self): sage: F._groebner_strategy() """ - from sage.rings.polynomial.multi_polynomial_ring_base import BooleanPolynomialRing_base + from sage.rings.polynomial.multi_polynomial_ring_base import \ + BooleanPolynomialRing_base R = self.ring() @@ -1537,7 +1543,8 @@ def solve(self, algorithm='polybori', n=1, eliminate_linear_variables=True, ver if eliminate_linear_variables: T, reductors = self.eliminate_linear_variables(return_reductors=True) if T.variables() != (): - from sage.rings.polynomial.pbori.pbori import BooleanPolynomialRing + from sage.rings.polynomial.pbori.pbori import \ + BooleanPolynomialRing R_solving = BooleanPolynomialRing( T.nvariables(), [str(_) for _ in list(T.variables())] ) S = PolynomialSequence( R_solving, [ R_solving(f) for f in T] ) @@ -1621,12 +1628,14 @@ def reduced(self): ....: assert g[i].lt() not in t.divisors() """ - from sage.rings.polynomial.multi_polynomial_ring_base import BooleanPolynomialRing_base + from sage.rings.polynomial.multi_polynomial_ring_base import \ + BooleanPolynomialRing_base R = self.ring() if isinstance(R, BooleanPolynomialRing_base): - from sage.rings.polynomial.pbori.interred import interred as inter_red + from sage.rings.polynomial.pbori.interred import \ + interred as inter_red l = [p for p in self if not p == 0] l = sorted(inter_red(l, completely=True), reverse=True) @@ -1683,5 +1692,6 @@ def weil_restriction(self): from sage.misc.persist import register_unpickle_override + register_unpickle_override("sage.crypto.mq.mpolynomialsystem","MPolynomialSystem_generic", PolynomialSequence_generic) register_unpickle_override("sage.crypto.mq.mpolynomialsystem","MPolynomialRoundSystem_generic", PolynomialSequence_generic) diff --git a/src/sage/rings/polynomial/pbori/fglm.py b/src/sage/rings/polynomial/pbori/fglm.py index dc60adef14c..60559b31b85 100644 --- a/src/sage/rings/polynomial/pbori/fglm.py +++ b/src/sage/rings/polynomial/pbori/fglm.py @@ -1,5 +1,5 @@ -from .PyPolyBoRi import Polynomial, BoolePolynomialVector -from .pbori import FGLMStrategy, BooleSet +from .pbori import BooleSet, FGLMStrategy +from .PyPolyBoRi import BoolePolynomialVector, Polynomial def _fglm(I, from_ring, to_ring): diff --git a/src/sage_setup/clean.py b/src/sage_setup/clean.py index 3cf0d08a353..e9c81c9ed1a 100644 --- a/src/sage_setup/clean.py +++ b/src/sage_setup/clean.py @@ -15,11 +15,11 @@ #***************************************************************************** -import os import importlib.util +import os from sage.misc.package_dir import SourceDistributionFilter -from sage_setup.find import installed_files_by_module, get_extensions +from sage_setup.find import get_extensions, installed_files_by_module def _remove(file_set, module_base, to_remove):