From ab0fbdeca8ebe7f30b88c826a4a03d0808396382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Sat, 11 May 2024 18:22:09 +0200 Subject: [PATCH 1/5] some ruff fixes in algebras and categories --- src/sage/algebras/cluster_algebra.py | 2 +- src/sage/algebras/fusion_rings/f_matrix.py | 99 +++++++++---------- .../lie_algebras/classical_lie_algebra.py | 4 +- .../algebras/lie_algebras/free_lie_algebra.py | 2 +- src/sage/algebras/lie_algebras/heisenberg.py | 6 +- src/sage/algebras/lie_algebras/lie_algebra.py | 6 +- .../algebras/lie_algebras/representation.py | 13 +-- .../finitely_freely_generated_lca.py | 6 +- .../lie_conformal_algebra_element.py | 4 +- src/sage/algebras/splitting_algebra.py | 6 +- .../algebras/steenrod/steenrod_algebra.py | 2 +- src/sage/categories/bimodules.py | 8 +- src/sage/categories/drinfeld_modules.py | 3 +- src/sage/categories/fields.py | 11 +-- src/sage/categories/pushout.py | 10 +- src/sage/categories/simplicial_sets.py | 3 +- 16 files changed, 85 insertions(+), 100 deletions(-) diff --git a/src/sage/algebras/cluster_algebra.py b/src/sage/algebras/cluster_algebra.py index 17bc36b1661..fba00aca3a6 100644 --- a/src/sage/algebras/cluster_algebra.py +++ b/src/sage/algebras/cluster_algebra.py @@ -1769,7 +1769,7 @@ def d_vector_to_g_vector(self, d) -> tuple: sage: A.d_vector_to_g_vector((1,0,-1)) (-1, 1, 2) """ - dm = vector((x if x < 0 else 0 for x in d)) + dm = vector(x if x < 0 else 0 for x in d) dp = vector(d) - dm return tuple(- dm - self.euler_matrix() * dp) diff --git a/src/sage/algebras/fusion_rings/f_matrix.py b/src/sage/algebras/fusion_rings/f_matrix.py index 47f5976cf03..81f6633724b 100644 --- a/src/sage/algebras/fusion_rings/f_matrix.py +++ b/src/sage/algebras/fusion_rings/f_matrix.py @@ -41,6 +41,7 @@ from sage.rings.polynomial.polydict import ETuple from sage.rings.qqbar import AA, QQbar, number_field_elements_from_algebraics + class FMatrix(SageObject): r""" An F-matrix for a :class:`FusionRing`. @@ -297,7 +298,7 @@ def __init__(self, fusion_ring, fusion_label="f", var_prefix='fx', inject_variab self.pool = None ####################### - ### Class utilities ### + # Class utilities # ####################### def _repr_(self): @@ -434,26 +435,22 @@ def fmat(self, a, b, c, d, x, y, data=True): (-zeta60^14 + zeta60^6 + zeta60^4 - 1), (zeta60^14 - zeta60^6 - zeta60^4 + 1)] """ - if (self._FR.Nk_ij(a, b, x) == 0 or self._FR.Nk_ij(x, c, d) == 0 - or self._FR.Nk_ij(b, c, y) == 0 or self._FR.Nk_ij(a, y, d) == 0): + if (self._FR.Nk_ij(a, b, x) == 0 + or self._FR.Nk_ij(x, c, d) == 0 + or self._FR.Nk_ij(b, c, y) == 0 + or self._FR.Nk_ij(a, y, d) == 0): return 0 # Some known zero F-symbols if a == self._FR.one(): - if x == b and y == d: - return 1 - else: - return 0 + return 1 if x == b and y == d else 0 + if b == self._FR.one(): - if x == a and y == c: - return 1 - else: - return 0 + return 1 if x == a and y == c else 0 + if c == self._FR.one(): - if x == d and y == b: - return 1 - else: - return 0 + return 1 if x == d and y == b else 0 + if data: # Better to use try/except for speed. Somewhat trivial, but worth # hours when method is called ~10^11 times @@ -461,8 +458,8 @@ def fmat(self, a, b, c, d, x, y, data=True): return self._fvars[a, b, c, d, x, y] except KeyError: return 0 - else: - return (a, b, c, d, x, y) + + return (a, b, c, d, x, y) def fmatrix(self, a, b, c, d): r""" @@ -583,7 +580,7 @@ def findcases(self, output=False): idx_map = {} ret = {} id_anyon = self._FR.one() - for (a, b, c, d) in product(self._FR.basis(), repeat=4): + for a, b, c, d in product(self._FR.basis(), repeat=4): if a == id_anyon or b == id_anyon or c == id_anyon: continue for x in self.f_from(a, b, c, d): @@ -593,10 +590,8 @@ def findcases(self, output=False): ret[(a, b, c, d, x, y)] = v idx_map[i] = (a, b, c, d, x, y) i += 1 - if output: - return idx_map, ret - else: - return i + + return idx_map, ret if output else i def f_from(self, a, b, c, d): r""" @@ -649,7 +644,7 @@ def f_to(self, a, b, c, d): if self._FR.Nk_ij(b, c, y) != 0 and self._FR.Nk_ij(a, y, d) != 0] #################### - ### Data getters ### + # Data getters # #################### def get_fvars(self): @@ -855,7 +850,7 @@ def get_radical_expression(self): return {sextuple: val.radical_expression() for sextuple, val in self.get_fvars_in_alg_field().items()} ####################### - ### Private helpers ### + # Private helpers # ####################### def _get_known_vals(self): @@ -894,12 +889,12 @@ def _get_known_nonz(self): 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100) """ nonz = {idx: 100 for idx in self._singles} - for idx, v in self._ks.items(): + for idx in self._ks: nonz[idx] = 100 return ETuple(nonz, self._poly_ring.ngens()) ############################## - ### Variables partitioning ### + # Variables partitioning # ############################## def largest_fmat_size(self): @@ -967,7 +962,7 @@ def get_fvars_by_size(self, n, indices=False): return var_set ############################ - ### Checkpoint utilities ### + # Checkpoint utilities # ############################ def save_fvars(self, filename): @@ -1009,12 +1004,10 @@ def save_fvars(self, filename): True sage: os.remove(filename) """ - final_state = [ - self._fvars, - self._non_cyc_roots, - self.get_coerce_map_from_fr_cyclotomic_field(), - self._qqbar_embedding, - ] + final_state = [self._fvars, + self._non_cyc_roots, + self.get_coerce_map_from_fr_cyclotomic_field(), + self._qqbar_embedding] with open(filename, 'wb') as f: pickle.dump(final_state, f) @@ -1212,7 +1205,7 @@ def _restore_state(self, filename): self._update_reduction_params() ################# - ### MapReduce ### + # MapReduce # ################# def start_worker_pool(self, processes=None): @@ -1275,7 +1268,7 @@ class methods. self._reset_solver_state() # Set up shared memory resource handlers n_proc = cpu_count() if processes is None else processes - self._pid_list = shared_memory.ShareableList([0]*(n_proc+1)) + self._pid_list = shared_memory.ShareableList([0] * (n_proc + 1)) pids_name = self._pid_list.shm.name self._solved = shared_memory.ShareableList(self._solved) s_name = self._solved.shm.name @@ -1304,7 +1297,7 @@ def init(fmats_id, solved_name, vd_name, ks_names, fvar_names, n_proc, pids_name self.pool = Pool(processes=n_proc, initializer=init, initargs=args) self._pid_list[0] = getpid() for i, p in enumerate(self.pool._pool): - self._pid_list[i+1] = p.pid + self._pid_list[i + 1] = p.pid # return True def shutdown_worker_pool(self): @@ -1394,7 +1387,7 @@ def _map_triv_reduce(self, mapper, input_iter, worker_pool=None, chunksize=None, return results ######################## - ### Equations set up ### + # Equations set up # ######################## def get_orthogonality_constraints(self, output=True): @@ -1494,7 +1487,9 @@ def get_defining_equations(self, option, output=True): self._reset_solver_state() n_proc = self.pool._processes if self.pool is not None else 1 params = [(child_id, n_proc, output) for child_id in range(n_proc)] - eqns = self._map_triv_reduce('get_reduced_'+option, params, worker_pool=self.pool, chunksize=1, mp_thresh=0) + eqns = self._map_triv_reduce('get_reduced_' + option, params, + worker_pool=self.pool, chunksize=1, + mp_thresh=0) if output: F = self._field for i, eq_tup in enumerate(eqns): @@ -1503,7 +1498,7 @@ def get_defining_equations(self, option, output=True): self.ideal_basis.extend(eqns) ############################ - ### Equations processing ### + # Equations processing # ############################ def _tup_to_fpoly(self, eq_tup): @@ -1611,7 +1606,7 @@ def _triangular_elim(self, eqns=None, verbose=True): self.ideal_basis = eqns ##################### - ### Graph methods ### + # Graph methods # ##################### def equations_graph(self, eqns=None): @@ -1820,7 +1815,7 @@ def _get_component_variety(self, var, eqns): return [{inv_idx_map[i]: value for i, (key, value) in enumerate(sorted(soln.items()))} for soln in var_in_R] ####################### - ### Solution method ### + # Solution method # ####################### # TODO: this can probably be improved by constructing a set of defining polynomials @@ -1919,7 +1914,7 @@ def _get_explicit_solution(self, eqns=None, verbose=True): for fx, rhs in self._ks.items(): if not self._solved[fx]: lt = (ETuple({fx: 2}, n), one) - eqns.append(((lt, (ETuple({}, n), -rhs)))) + eqns.append((lt, (ETuple({}, n), -rhs))) eqns_partition = self._partition_eqns(verbose=verbose) F = self._field @@ -1956,20 +1951,20 @@ def _get_explicit_solution(self, eqns=None, verbose=True): if self.attempt_number_field_computation(): if verbose: print("Computing appropriate NumberField...") - roots = [self._FR.field().gen()]+[r[1] for r in non_cyclotomic_roots] + roots = [self._FR.field().gen()] + [r[1] for r in non_cyclotomic_roots] self._field, bf_elts, self._qqbar_embedding = number_field_elements_from_algebraics(roots, minimal=True) else: self._field = QQbar bf_elts = [self._qqbar_embedding(F.gen())] bf_elts += [rhs for fx, rhs in non_cyclotomic_roots] - self._qqbar_embedding = lambda x : x + self._qqbar_embedding = lambda x: x self._non_cyc_roots = bf_elts[1:] # Embed cyclotomic field into newly constructed base field cyc_gen_as_bf_elt = bf_elts.pop(0) phi = self._FR.field().hom([cyc_gen_as_bf_elt], self._field) self._coerce_map_from_cyc_field = phi - numeric_fvars = {k : phi(v) for k, v in numeric_fvars.items()} + numeric_fvars = {k: phi(v) for k, v in numeric_fvars.items()} for i, elt in enumerate(bf_elts): numeric_fvars[non_cyclotomic_roots[i][0]] = elt # Update polynomial ring @@ -2114,7 +2109,7 @@ def find_orthogonal_solution(self, checkpoint=False, save_results="", warm_start print("Set up {} hex and orthogonality constraints...".format(len(self.ideal_basis))) # Unzip _fvars and link to shared_memory structure if using multiprocessing - if use_mp:# and loads_shared_memory: + if use_mp: # and loads_shared_memory: self._fvars = self._shared_fvars else: n = self._poly_ring.ngens() @@ -2164,12 +2159,12 @@ def find_orthogonal_solution(self, checkpoint=False, save_results="", warm_start self._chkpt_status = 7 self.clear_equations() if checkpoint: - remove("fmatrix_solver_checkpoint_"+self.get_fr_str()+".pickle") + remove("fmatrix_solver_checkpoint_" + self.get_fr_str() + ".pickle") if save_results: self.save_fvars(save_results) ######################### - ### Cyclotomic method ### + # Cyclotomic method # ######################### def _fix_gauge(self, algorithm=""): @@ -2202,8 +2197,8 @@ def _fix_gauge(self, algorithm=""): break # Fix var = 1, substitute, and solve equations - self.ideal_basis.add(var-1) - print("adding equation...", var-1) + self.ideal_basis.add(var - 1) + print("adding equation...", var - 1) self.ideal_basis = set(Ideal(list(self.ideal_basis)).groebner_basis(algorithm=algorithm)) self._substitute_degree_one() self._update_equations() @@ -2336,7 +2331,7 @@ def find_cyclotomic_solution(self, equations=None, algorithm="", verbose=True, o if equations is None: if verbose: print("Setting up hexagons and pentagons...") - equations = self.get_defining_equations("hexagons")+self.get_defining_equations("pentagons") + equations = self.get_defining_equations("hexagons") + self.get_defining_equations("pentagons") if verbose: print("Finding a Groebner basis...") self.ideal_basis = set(Ideal(equations).groebner_basis(algorithm=algorithm)) @@ -2352,7 +2347,7 @@ def find_cyclotomic_solution(self, equations=None, algorithm="", verbose=True, o return self._fvars ##################### - ### Verifications ### + # Verifications # ##################### def fmats_are_orthogonal(self): diff --git a/src/sage/algebras/lie_algebras/classical_lie_algebra.py b/src/sage/algebras/lie_algebras/classical_lie_algebra.py index fae28403d4f..88bf60e9950 100644 --- a/src/sage/algebras/lie_algebras/classical_lie_algebra.py +++ b/src/sage/algebras/lie_algebras/classical_lie_algebra.py @@ -447,8 +447,8 @@ def __init__(self, R, n): gens = [] for i in range(n): for j in range(n): - names.append('E_{0}_{1}'.format(i,j)) - mat = MS({(i,j):one}) + names.append('E_{}_{}'.format(i, j)) + mat = MS({(i, j): one}) mat.set_immutable() gens.append(mat) self._n = n diff --git a/src/sage/algebras/lie_algebras/free_lie_algebra.py b/src/sage/algebras/lie_algebras/free_lie_algebra.py index e641a9140e7..43818e4fc8b 100644 --- a/src/sage/algebras/lie_algebras/free_lie_algebra.py +++ b/src/sage/algebras/lie_algebras/free_lie_algebra.py @@ -80,7 +80,7 @@ def _repr_(self): sage: L.Lyndon() Free Lie algebra generated by (x, y) over Rational Field in the Lyndon basis """ - return "{0} in the {1} basis".format(self.realization_of(), self._basis_name) + return "{} in the {} basis".format(self.realization_of(), self._basis_name) def _repr_term(self, x): """ diff --git a/src/sage/algebras/lie_algebras/heisenberg.py b/src/sage/algebras/lie_algebras/heisenberg.py index 269965b91fd..76dd9931ab4 100644 --- a/src/sage/algebras/lie_algebras/heisenberg.py +++ b/src/sage/algebras/lie_algebras/heisenberg.py @@ -194,7 +194,8 @@ def step(self): class Element(LieAlgebraElement): pass -class HeisenbergAlgebra_fd(): + +class HeisenbergAlgebra_fd: """ Common methods for finite-dimensional Heisenberg algebras. """ @@ -417,7 +418,8 @@ def _repr_(self): sage: lie_algebras.Heisenberg(QQ, 3) Heisenberg algebra of rank 3 over Rational Field """ - return "Heisenberg algebra of rank {0} over {1}".format(self._n, self.base_ring()) + return "Heisenberg algebra of rank {} over {}".format(self._n, self.base_ring()) + class InfiniteHeisenbergAlgebra(HeisenbergAlgebra_abstract, LieAlgebraWithGenerators): r""" diff --git a/src/sage/algebras/lie_algebras/lie_algebra.py b/src/sage/algebras/lie_algebras/lie_algebra.py index 6c6757fcdd4..885dcf44f0d 100644 --- a/src/sage/algebras/lie_algebras/lie_algebra.py +++ b/src/sage/algebras/lie_algebras/lie_algebra.py @@ -894,7 +894,7 @@ def __init__(self, R, names=None, index_set=None, category=None): LieAlgebraWithGenerators.__init__(self, R, names, index_set, category) self.__ngens = len(self._indices) - def _repr_(self): + def _repr_(self) -> str: """ Return a string representation of ``self``. @@ -905,9 +905,9 @@ def _repr_(self): Lie algebra on 2 generators (x, y) over Rational Field """ if self.__ngens == 1: - return "Lie algebra on the generator {0} over {1}".format( + return "Lie algebra on the generator {} over {}".format( self.gen(0), self.base_ring()) - return "Lie algebra on {0} generators {1} over {2}".format( + return "Lie algebra on {} generators {} over {}".format( self.__ngens, self.gens(), self.base_ring()) @lazy_attribute diff --git a/src/sage/algebras/lie_algebras/representation.py b/src/sage/algebras/lie_algebras/representation.py index c6bd62dd0cc..b283bf3e694 100644 --- a/src/sage/algebras/lie_algebras/representation.py +++ b/src/sage/algebras/lie_algebras/representation.py @@ -16,13 +16,10 @@ # https://www.gnu.org/licenses/ # **************************************************************************** -from sage.misc.lazy_attribute import lazy_attribute -from sage.misc.cachefunc import cached_method from sage.sets.family import Family, AbstractFamily from sage.matrix.constructor import matrix from sage.combinat.free_module import CombinatorialFreeModule from sage.categories.modules import Modules -from copy import copy class Representation_abstract: @@ -590,7 +587,7 @@ def __init__(self, L, minimal=False): prev = LCS[-1] for D in reversed(LCS[:-1]): temp = [L(bred) for b in D.basis() if (bred := prev.reduce(L(b)))] - basis_by_deg[self._step-len(basis_by_deg)] = L.echelon_form(temp) + basis_by_deg[self._step - len(basis_by_deg)] = L.echelon_form(temp) prev = D L_basis = sum((basis_by_deg[deg] for deg in sorted(basis_by_deg)), []) @@ -602,7 +599,7 @@ def __init__(self, L, minimal=False): self._invcob = cob.inverse() scoeffs = {} for i, b in enumerate(L_basis): - for j, bp in enumerate(L_basis[i+1:], start=i+1): + for j, bp in enumerate(L_basis[i+1:], start=i + 1): scoeffs[i, j] = (self._invcob * b.bracket(bp)._vector_()).dict() index_set = tuple(range(L.dimension())) from sage.algebras.lie_algebras.lie_algebra import LieAlgebra @@ -617,7 +614,7 @@ def __init__(self, L, minimal=False): for n in range(self._step+1)]) if self._minimal: - X = set([tuple(index) for index in indices]) + X = {tuple(index) for index in indices} monoid = self._pbw._indices I = monoid._indices one = L.base_ring().one() @@ -642,7 +639,7 @@ def test_ideal(m, X): return False return True - to_remove = set([None]) + to_remove = {None} while to_remove: X -= to_remove to_remove = set() @@ -683,7 +680,7 @@ def _latex_(self): """ from sage.misc.latex import latex g = latex(self._lie_algebra) - ret = "U({0}) / U({0})^{{{1}}}".format(g, self._step+1) + ret = "U({0}) / U({0})^{{{1}}}".format(g, self._step + 1) if self._minimal: return "\\min " + ret return ret diff --git a/src/sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py b/src/sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py index 8aefdd9d3a6..425f35be158 100644 --- a/src/sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +++ b/src/sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py @@ -59,7 +59,7 @@ def __init__(self, R, index_set=None, central_elements=None, category=None, self._names = names self._latex_names = latex_names - def _repr_(self): + def _repr_(self) -> str: """ The name of this Lie conformal algebra. @@ -71,9 +71,9 @@ def _repr_(self): Lie conformal algebra with generators (a, K) over Rational Field """ if self._ngens == 1: - return "Lie conformal algebra generated by {0} over {1}".format( + return "Lie conformal algebra generated by {} over {}".format( self.gen(0), self.base_ring()) - return "Lie conformal algebra with generators {0} over {1}".format( + return "Lie conformal algebra with generators {} over {}".format( self.gens(), self.base_ring()) def _an_element_(self): diff --git a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py index 09fb63a0a4c..bf08362ae92 100644 --- a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +++ b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py @@ -222,12 +222,12 @@ def _latex_(self): except ValueError: names = None if names: - terms = [("T^{{({0})}}{1}".format(k1, names[p._index_to_pos[k0]]), v) if k1 > 1 + terms = [("T^{{({})}}{}".format(k1, names[p._index_to_pos[k0]]), v) if k1 > 1 else ("T{}".format(names[p._index_to_pos[k0]]), v) if k1 == 1 else ("{}".format(names[p._index_to_pos[k0]]), v) for (k0, k1), v in self.monomial_coefficients().items()] else: - terms = [("T^{{({0})}}{1}".format(k1, latex(k0)), v) if k1 > 1 + terms = [("T^{{({})}}{}".format(k1, latex(k0)), v) if k1 > 1 else ("T{}".format(latex(k0)), v) if k1 == 1 else ("{}".format(latex(k0)), v) for (k0, k1), v in self.monomial_coefficients().items()] diff --git a/src/sage/algebras/splitting_algebra.py b/src/sage/algebras/splitting_algebra.py index 991d6240a09..1ba73baf9cb 100644 --- a/src/sage/algebras/splitting_algebra.py +++ b/src/sage/algebras/splitting_algebra.py @@ -274,16 +274,16 @@ def __init__(self, monic_polynomial, names='X', iterate=True, warning=True): verbose("base_ring_step %s defined:" % (base_ring_step)) - # ------------------------------------------------------------------------------------ + # ------------------------------------------------------------- # splitting first root off - # ------------------------------------------------------------------------------------ + # ------------------------------------------------------------- from copy import copy root_names_reduces = copy(root_names) root_names_reduces.remove(root_name) P = base_ring_step[root_names_reduces[0]] p = P(monic_polynomial.dict()) - q, _ = p.quo_rem((P.gen() - first_root)) + q, _ = p.quo_rem(P.gen() - first_root) verbose("Invoking recursion with: %s" % (q,)) diff --git a/src/sage/algebras/steenrod/steenrod_algebra.py b/src/sage/algebras/steenrod/steenrod_algebra.py index 3f9153cf962..b4392261535 100644 --- a/src/sage/algebras/steenrod/steenrod_algebra.py +++ b/src/sage/algebras/steenrod/steenrod_algebra.py @@ -606,7 +606,7 @@ def __init__(self, p=2, basis='milnor', **kwds): base_ring = GF(p) self._profile = profile self._truncation_type = truncation_type - if ((not self._generic and ((profile and profile[0] < Infinity))) + if ((not self._generic and (profile and profile[0] < Infinity)) or (self._generic and profile != ((), ()) and profile[0] and profile[0][0] < Infinity) or (truncation_type < Infinity)): diff --git a/src/sage/categories/bimodules.py b/src/sage/categories/bimodules.py index 4e92f890cd0..3ebe5d3fd56 100644 --- a/src/sage/categories/bimodules.py +++ b/src/sage/categories/bimodules.py @@ -148,7 +148,7 @@ def right_base_ring(self): """ return self._right_base_ring - def _latex_(self): + def _latex_(self) -> str: r""" Return a latex representation of ``self``. @@ -158,9 +158,9 @@ def _latex_(self): {\mathbf{Bimodules}}_{\Bold{Q}, \Bold{Z}} """ from sage.misc.latex import latex - return "{{{0}}}_{{{1}, {2}}}".format(Category._latex_(self), - latex(self._left_base_ring), - latex(self._right_base_ring)) + return "{{{}}}_{{{}, {}}}".format(Category._latex_(self), + latex(self._left_base_ring), + latex(self._right_base_ring)) def super_categories(self): """ diff --git a/src/sage/categories/drinfeld_modules.py b/src/sage/categories/drinfeld_modules.py index 380318c37ff..4a19a91e4cc 100644 --- a/src/sage/categories/drinfeld_modules.py +++ b/src/sage/categories/drinfeld_modules.py @@ -549,8 +549,7 @@ def random_object(self, rank): K = self._base_field coeffs = [self._constant_coefficient] - for _ in range(rank-1): - coeffs.append(K.random_element()) + coeffs.extend(K.random_element() for _ in range(rank - 1)) dom_coeff = 0 while dom_coeff == 0: dom_coeff = K.random_element() diff --git a/src/sage/categories/fields.py b/src/sage/categories/fields.py index 7407632a93f..389cd662c67 100644 --- a/src/sage/categories/fields.py +++ b/src/sage/categories/fields.py @@ -494,19 +494,14 @@ def _squarefree_decomposition_univariate_polynomial(self, f): cur = cur.gcd(cur.derivative()) f.append(cur) - g = [] - for i in range(len(f) - 1): - g.append(f[i] // f[i+1]) - - a = [] - for i in range(len(g) - 1): - a.append(g[i] // g[i+1]) + g = [f[i] // f[i + 1] for i in range(len(f) - 1)] + a = [g[i] // g[i + 1] for i in range(len(g) - 1)] a.append(g[-1]) unit = f[-1] for i in range(len(a)): if a[i].degree() > 0: - factors.append((a[i], i+1)) + factors.append((a[i], i + 1)) else: unit = unit * a[i].constant_coefficient() ** (i + 1) diff --git a/src/sage/categories/pushout.py b/src/sage/categories/pushout.py index e8eee82998d..d8d25d16c91 100644 --- a/src/sage/categories/pushout.py +++ b/src/sage/categories/pushout.py @@ -1984,14 +1984,12 @@ def _apply_functor(self, R): name = self.name_mapping.get(R, None) latex_name = self.latex_name_mapping.get(R, None) if name is None: - for base_ring, name in self.name_mapping.items(): - name = f'{name}_base_ext' - break + name = next(iter(self.name_mapping.values())) + name = f'{name}_base_ext' if latex_name is None: from sage.misc.latex import latex - for base_ring, latex_name in self.latex_name_mapping.items(): - latex_name = fr'{latex_name} \otimes {latex(R)}' - break + latex_name = next(iter(self.latex_name_mapping.values())) + latex_name = fr'{latex_name} \otimes {latex(R)}' if name is None and latex_name is None: return FreeModule(R, self.n, sparse=self.is_sparse, inner_product_matrix=self.inner_product_matrix, with_basis=self.with_basis, basis_keys=self.basis_keys) diff --git a/src/sage/categories/simplicial_sets.py b/src/sage/categories/simplicial_sets.py index 7b7bbf827af..4eb27f085ca 100644 --- a/src/sage/categories/simplicial_sets.py +++ b/src/sage/categories/simplicial_sets.py @@ -509,8 +509,7 @@ def covering_map(self, character): lifted = h break grelems = [cells_dict[(f0.nondegenerate(), lifted)].apply_degeneracies(*f0.degeneracies())] - for f in faces[1:]: - grelems.append(cells_dict[(f.nondegenerate(), g)].apply_degeneracies(*f.degeneracies())) + grelems.extend(cells_dict[(f.nondegenerate(), g)].apply_degeneracies(*f.degeneracies()) for f in faces[1:]) faces_dict[cell] = grelems cover = SimplicialSet(faces_dict, base_point=cells_dict[(self.base_point(), G.one())]) cover_map_data = {c: s[0] for (s, c) in cells_dict.items()} From dd19177ea6304848bdbb6832f7c6fc5bb318f35f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Sat, 11 May 2024 20:35:49 +0200 Subject: [PATCH 2/5] fix pushout --- src/sage/categories/pushout.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/sage/categories/pushout.py b/src/sage/categories/pushout.py index d8d25d16c91..e8eee82998d 100644 --- a/src/sage/categories/pushout.py +++ b/src/sage/categories/pushout.py @@ -1984,12 +1984,14 @@ def _apply_functor(self, R): name = self.name_mapping.get(R, None) latex_name = self.latex_name_mapping.get(R, None) if name is None: - name = next(iter(self.name_mapping.values())) - name = f'{name}_base_ext' + for base_ring, name in self.name_mapping.items(): + name = f'{name}_base_ext' + break if latex_name is None: from sage.misc.latex import latex - latex_name = next(iter(self.latex_name_mapping.values())) - latex_name = fr'{latex_name} \otimes {latex(R)}' + for base_ring, latex_name in self.latex_name_mapping.items(): + latex_name = fr'{latex_name} \otimes {latex(R)}' + break if name is None and latex_name is None: return FreeModule(R, self.n, sparse=self.is_sparse, inner_product_matrix=self.inner_product_matrix, with_basis=self.with_basis, basis_keys=self.basis_keys) From 819d178147595bab6e8b1beee9ae399f639e78ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Sat, 11 May 2024 21:42:05 +0200 Subject: [PATCH 3/5] fix wrong change --- src/sage/algebras/fusion_rings/f_matrix.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/algebras/fusion_rings/f_matrix.py b/src/sage/algebras/fusion_rings/f_matrix.py index 81f6633724b..7043f2f3491 100644 --- a/src/sage/algebras/fusion_rings/f_matrix.py +++ b/src/sage/algebras/fusion_rings/f_matrix.py @@ -591,7 +591,7 @@ def findcases(self, output=False): idx_map[i] = (a, b, c, d, x, y) i += 1 - return idx_map, ret if output else i + return (idx_map, ret) if output else i def f_from(self, a, b, c, d): r""" From debb4179939145a7901a0f29d4605d7c4e4eaa24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Sun, 12 May 2024 08:08:23 +0200 Subject: [PATCH 4/5] fix another mistake --- src/sage/algebras/fusion_rings/f_matrix.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/algebras/fusion_rings/f_matrix.py b/src/sage/algebras/fusion_rings/f_matrix.py index 7043f2f3491..7bc57ebbaee 100644 --- a/src/sage/algebras/fusion_rings/f_matrix.py +++ b/src/sage/algebras/fusion_rings/f_matrix.py @@ -889,7 +889,7 @@ def _get_known_nonz(self): 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100) """ nonz = {idx: 100 for idx in self._singles} - for idx in self._ks: + for idx, _ in self._ks.items(): nonz[idx] = 100 return ETuple(nonz, self._poly_ring.ngens()) From 9ec8971af8eaab77ef8693d1f9db9a80b8b3ff59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Sun, 12 May 2024 10:53:54 +0200 Subject: [PATCH 5/5] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit two minor details Co-authored-by: Matthias Köppe --- src/sage/algebras/fusion_rings/f_matrix.py | 2 +- src/sage/algebras/steenrod/steenrod_algebra.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/algebras/fusion_rings/f_matrix.py b/src/sage/algebras/fusion_rings/f_matrix.py index 7bc57ebbaee..2e40be57df6 100644 --- a/src/sage/algebras/fusion_rings/f_matrix.py +++ b/src/sage/algebras/fusion_rings/f_matrix.py @@ -1268,7 +1268,7 @@ class methods. self._reset_solver_state() # Set up shared memory resource handlers n_proc = cpu_count() if processes is None else processes - self._pid_list = shared_memory.ShareableList([0] * (n_proc + 1)) + self._pid_list = shared_memory.ShareableList([0] * (n_proc+1)) pids_name = self._pid_list.shm.name self._solved = shared_memory.ShareableList(self._solved) s_name = self._solved.shm.name diff --git a/src/sage/algebras/steenrod/steenrod_algebra.py b/src/sage/algebras/steenrod/steenrod_algebra.py index b4392261535..8afcb5c6b66 100644 --- a/src/sage/algebras/steenrod/steenrod_algebra.py +++ b/src/sage/algebras/steenrod/steenrod_algebra.py @@ -606,7 +606,7 @@ def __init__(self, p=2, basis='milnor', **kwds): base_ring = GF(p) self._profile = profile self._truncation_type = truncation_type - if ((not self._generic and (profile and profile[0] < Infinity)) + if ((not self._generic and profile and profile[0] < Infinity) or (self._generic and profile != ((), ()) and profile[0] and profile[0][0] < Infinity) or (truncation_type < Infinity)):