From 58d840dff2242e42183e920b36fcd08de31a4243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Mon, 28 Aug 2023 18:49:46 +0200 Subject: [PATCH 1/4] fix the 2 broken linters --- .../dynamical_semigroup.py | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py b/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py index ed0b571676d..4c11dc795d6 100644 --- a/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +++ b/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py @@ -9,15 +9,15 @@ - Dang Phan (August 6th, 2023): initial implementation """ -#***************************************************************************** +# **************************************************************************** # Dang Phan # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. -# http://www.gnu.org/licenses/ -#***************************************************************************** +# https://www.gnu.org/licenses/ +# **************************************************************************** from collections.abc import Collection from sage.categories.fields import Fields @@ -33,6 +33,7 @@ from sage.rings.rational_field import QQ from sage.structure.parent import Parent + class DynamicalSemigroup(Parent, metaclass=InheritComparisonClasscallMetaclass): r""" A dynamical semigroup defined by a multiple dynamical systems on projective or affine space. @@ -959,16 +960,15 @@ def __mul__(self, other_dynamical_semigroup): Traceback (most recent call last): ... ValueError: left dynamical semigroup's domain must equal right dynamical semigroup's codomain - """ - if type(self) != type(other_dynamical_semigroup): + if not isinstance(other_dynamical_semigroup, DynamicalSemigroup): raise TypeError("can only multiply dynamical semigroups with other dynamical semigroups of the same type") if self.domain() != other_dynamical_semigroup.codomain(): raise ValueError("left dynamical semigroup's domain must equal right dynamical semigroup's codomain") composite_systems = [] for f in self.defining_systems(): for g in other_dynamical_semigroup.defining_systems(): - composite_systems.append(DynamicalSystem(f*g)) + composite_systems.append(DynamicalSystem(f * g)) return DynamicalSemigroup(composite_systems) def __pow__(self, n): @@ -1200,12 +1200,13 @@ def __eq__(self, other): """ if isinstance(other, DynamicalSemigroup): if any(ds.degree() == 1 for ds in self.defining_systems()) or \ - any(ds.degree() == 1 for ds in other.defining_systems()): + any(ds.degree() == 1 for ds in other.defining_systems()): raise NotImplementedError("cannot compare dynamical semigroups with at least one generator of degree 1") return all(ds in other.defining_systems() for ds in self.defining_systems()) and \ all(ds in self.defining_systems() for ds in other.defining_systems()) return False + class DynamicalSemigroup_projective(DynamicalSemigroup): r""" A dynamical semigroup defined by a multiple dynamical systems on projective space. @@ -1248,7 +1249,7 @@ def __classcall_private__(cls, ds_data): raise ValueError(str(ds_datum) + " does not define a 'DynamicalSystem_projective' object") else: if isinstance(ds_data, DynamicalSystem_projective): - systems.append(ds_data) + systems.append(ds_data) else: try: systems.append(DynamicalSystem_projective(ds_data)) @@ -1327,12 +1328,15 @@ def dehomogenize(self, n): new_systems.append(new_system) return DynamicalSemigroup_affine(new_systems) + class DynamicalSemigroup_projective_field(DynamicalSemigroup_projective): pass + class DynamicalSemigroup_projective_finite_field(DynamicalSemigroup_projective_field): pass + class DynamicalSemigroup_affine(DynamicalSemigroup): r""" A dynamical semigroup defined by multiple dynamical systems on affine space. @@ -1374,7 +1378,7 @@ def __classcall_private__(cls, ds_data): raise ValueError(str(ds_datum) + " does not define a 'DynamicalSystem_affine' object") else: if isinstance(ds_data, DynamicalSystem_affine): - systems.append(ds_data) + systems.append(ds_data) else: try: systems.append(DynamicalSystem_affine(ds_data)) @@ -1435,12 +1439,15 @@ def homogenize(self, n): new_systems.append(ds.homogenize(n)) return DynamicalSemigroup_projective(new_systems) + class DynamicalSemigroup_affine_field(DynamicalSemigroup_affine): pass + class DynamicalSemigroup_affine_finite_field(DynamicalSemigroup_affine_field): pass + def _standardize_domains_of_(systems): r""" Coerces dynamical systems to the same domain and have the same generators. @@ -1509,7 +1516,7 @@ def _standardize_domains_of_(systems): for i in range(len(systems)): if systems[i].base_ring() != biggest_ring: - systems[i] = systems[i].change_ring(biggest_ring) + systems[i] = systems[i].change_ring(biggest_ring) domain = systems[0].domain() @@ -1531,4 +1538,4 @@ def _standardize_domains_of_(systems): new_polys.append(poly.subs(sub_dict)) systems[i] = DynamicalSystem(new_polys, domain) - return systems \ No newline at end of file + return systems From be265f3b0f399f53eca0920e374c8ed6582baeaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Mon, 28 Aug 2023 19:00:11 +0200 Subject: [PATCH 2/4] REALLY fix the linters --- src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py | 2 +- src/sage/rings/polynomial/polynomial_zz_pex.pyx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py b/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py index 4c11dc795d6..95929630c15 100644 --- a/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +++ b/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py @@ -982,7 +982,7 @@ def __pow__(self, n): OUTPUT: :class:`DynamicalSemigroup` - EXAMPLES: + EXAMPLES:: sage: A. = AffineSpace(QQ, 1) sage: f = DynamicalSystem(x^2, A) diff --git a/src/sage/rings/polynomial/polynomial_zz_pex.pyx b/src/sage/rings/polynomial/polynomial_zz_pex.pyx index 82145d1c992..01bbdda4bd3 100644 --- a/src/sage/rings/polynomial/polynomial_zz_pex.pyx +++ b/src/sage/rings/polynomial/polynomial_zz_pex.pyx @@ -547,7 +547,7 @@ cdef class Polynomial_ZZ_pEX(Polynomial_template): def inverse_series_trunc(self, prec): r""" Compute and return the inverse of self modulo `x^prec`. - + The constant term of self must be invertible. EXAMPLES:: From 25b65b8305ce10b646aa99590dd54ce94aa99b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Mon, 28 Aug 2023 19:39:58 +0200 Subject: [PATCH 3/4] detail --- src/sage/rings/polynomial/polynomial_zz_pex.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/rings/polynomial/polynomial_zz_pex.pyx b/src/sage/rings/polynomial/polynomial_zz_pex.pyx index 01bbdda4bd3..3cae5e13a48 100644 --- a/src/sage/rings/polynomial/polynomial_zz_pex.pyx +++ b/src/sage/rings/polynomial/polynomial_zz_pex.pyx @@ -546,9 +546,9 @@ cdef class Polynomial_ZZ_pEX(Polynomial_template): def inverse_series_trunc(self, prec): r""" - Compute and return the inverse of self modulo `x^prec`. + Compute and return the inverse of ``self`` modulo `x^{prec}`. - The constant term of self must be invertible. + The constant term of ``self`` must be invertible. EXAMPLES:: From 3bf709c2eda2877ad975db9d593b8528c8467988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Tue, 29 Aug 2023 07:35:32 +0200 Subject: [PATCH 4/4] Update dynamical_semigroup.py still compare types (beurk) --- src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py b/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py index 95929630c15..5b324ddbd9a 100644 --- a/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +++ b/src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py @@ -961,7 +961,7 @@ def __mul__(self, other_dynamical_semigroup): ... ValueError: left dynamical semigroup's domain must equal right dynamical semigroup's codomain """ - if not isinstance(other_dynamical_semigroup, DynamicalSemigroup): + if type(self) is not type(other_dynamical_semigroup): raise TypeError("can only multiply dynamical semigroups with other dynamical semigroups of the same type") if self.domain() != other_dynamical_semigroup.codomain(): raise ValueError("left dynamical semigroup's domain must equal right dynamical semigroup's codomain")