From c3a097dc8df93dba8cad1bb2297ce34ca7b5176e Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Thu, 25 Jul 2024 10:57:49 +0100 Subject: [PATCH 1/4] Deprecate is_FunctionFieldElement --- src/sage/rings/function_field/element.pyx | 8 ++++++++ .../schemes/berkovich/berkovich_cp_element.py | 15 +++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/sage/rings/function_field/element.pyx b/src/sage/rings/function_field/element.pyx index 5e8254e8294..1d9d93ff8d1 100644 --- a/src/sage/rings/function_field/element.pyx +++ b/src/sage/rings/function_field/element.pyx @@ -76,10 +76,18 @@ def is_FunctionFieldElement(x): sage: t = FunctionField(QQ,'t').gen() sage: sage.rings.function_field.element.is_FunctionFieldElement(t) + doctest:warning... + DeprecationWarning: The function is_FunctionFieldElement is deprecated; + use '....parent() in FunctionFields()' instead. + See https://github.com/sagemath/sage/issues/38289 for details. True sage: sage.rings.function_field.element.is_FunctionFieldElement(0) False """ + from sage.misc.superseded import deprecation_cython + deprecation_cython(38289, + "The function is_FunctionFieldElement is deprecated; " + "use '....parent() in FunctionFields()' instead.") if isinstance(x, FunctionFieldElement): return True from sage.rings.function_field.function_field import is_FunctionField diff --git a/src/sage/schemes/berkovich/berkovich_cp_element.py b/src/sage/schemes/berkovich/berkovich_cp_element.py index 72111b32ab3..ba073d1df87 100644 --- a/src/sage/schemes/berkovich/berkovich_cp_element.py +++ b/src/sage/schemes/berkovich/berkovich_cp_element.py @@ -35,11 +35,12 @@ import sage.rings.abc +from sage.categories.function_fields import FunctionFields from sage.misc.lazy_import import lazy_import from sage.rings.infinity import Infinity from sage.rings.integer_ring import ZZ from sage.rings.rational_field import QQ -from sage.rings.real_mpfr import RR, RealNumber +from sage.rings.real_mpfr import RealNumber, RR from sage.schemes.projective.projective_point import SchemeMorphism_point_projective_field from sage.schemes.projective.projective_space import ProjectiveSpace from sage.structure.element import Element, Expression @@ -84,7 +85,6 @@ def __init__(self, parent, center, radius=None, power=None, prec=20, space_type= sage: B(4) Type I point centered at 4 + O(5^20) """ - from sage.rings.function_field.element import is_FunctionFieldElement from sage.rings.polynomial.polynomial_element import Polynomial from sage.rings.fraction_field_element import FractionFieldElement_1poly_field self._type = None @@ -109,8 +109,7 @@ def __init__(self, parent, center, radius=None, power=None, prec=20, space_type= if not error_check: return - # is_FunctionFieldElement calls .parent - elif hasattr(center, "parent") and hasattr(radius, 'parent'): + elif isinstance(center, Element) and isinstance(radius, Element): from sage.rings.polynomial.multi_polynomial import MPolynomial if isinstance(center, MPolynomial): try: @@ -119,10 +118,10 @@ def __init__(self, parent, center, radius=None, power=None, prec=20, space_type= raise TypeError('center was %s, a multivariable polynomial' % center) # check if the radius and the center are functions - center_func_check = is_FunctionFieldElement(center) or isinstance(center, Polynomial) or\ - isinstance(center, FractionFieldElement_1poly_field) or isinstance(center, Expression) - radius_func_check = is_FunctionFieldElement(radius) or isinstance(radius, Polynomial) or\ - isinstance(radius, FractionFieldElement_1poly_field) or isinstance(radius, Expression) + center_func_check = center.parent() in FunctionFields() or \ + isinstance(center, (Polynomial, FractionFieldElement_1poly_field, Expression)) + radius_func_check = radius.parent() in FunctionFields() or \ + isinstance(radius, (Polynomial, FractionFieldElement_1poly_field, Expression)) if center_func_check: # check that both center and radii are supported univariate function From 0e9d4ddeefcd2f4a0e8196a7464ae9163e757966 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Wed, 26 Jun 2024 17:01:52 -0700 Subject: [PATCH 2/4] Deprecate is_FunctionField --- src/sage/rings/function_field/element.pyx | 9 ++++++--- src/sage/rings/function_field/function_field.py | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/sage/rings/function_field/element.pyx b/src/sage/rings/function_field/element.pyx index 1d9d93ff8d1..817a74f0217 100644 --- a/src/sage/rings/function_field/element.pyx +++ b/src/sage/rings/function_field/element.pyx @@ -64,8 +64,9 @@ AUTHORS: # https://www.gnu.org/licenses/ # ***************************************************************************** -from sage.structure.element cimport FieldElement +from sage.categories.function_fields import FunctionFields from sage.misc.cachefunc import cached_method +from sage.structure.element cimport FieldElement def is_FunctionFieldElement(x): @@ -90,8 +91,10 @@ def is_FunctionFieldElement(x): "use '....parent() in FunctionFields()' instead.") if isinstance(x, FunctionFieldElement): return True - from sage.rings.function_field.function_field import is_FunctionField - return is_FunctionField(x.parent()) + from sage.rings.function_field.function_field import FunctionField + if isinstance(x.parent(), FunctionField): + return True + return x.parent() in FunctionFields() def make_FunctionFieldElement(parent, element_class, representing_element): diff --git a/src/sage/rings/function_field/function_field.py b/src/sage/rings/function_field/function_field.py index 315f58cdc39..a012b9a1943 100644 --- a/src/sage/rings/function_field/function_field.py +++ b/src/sage/rings/function_field/function_field.py @@ -263,10 +263,17 @@ def is_FunctionField(x): sage: from sage.rings.function_field.function_field import is_FunctionField sage: is_FunctionField(QQ) + doctest:warning... + DeprecationWarning: The function is_FunctionField is deprecated; use '... in FunctionFields()' instead. + See https://github.com/sagemath/sage/issues/38289 for details. False sage: is_FunctionField(FunctionField(QQ, 't')) True """ + from sage.misc.superseded import deprecation + deprecation(38289, + "The function is_FunctionField is deprecated; " + "use '... in FunctionFields()' instead.") if isinstance(x, FunctionField): return True return x in FunctionFields() From 54ef965731af17bd68dfea8458d2c8b5aa588fe6 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Wed, 26 Jun 2024 17:04:15 -0700 Subject: [PATCH 3/4] src/sage/dynamics/arithmetic_dynamics/projective_ds.py: Replace use of is_FunctionField --- src/sage/dynamics/arithmetic_dynamics/projective_ds.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index 2f62d674289..466b12c5ed0 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -89,7 +89,6 @@ class initialization directly. from sage.rings.finite_rings.integer_mod_ring import Zmod from sage.rings.fraction_field import FractionField, FractionField_generic, FractionField_1poly_field from sage.rings.fraction_field_element import FractionFieldElement -from sage.rings.function_field.function_field import is_FunctionField from sage.rings.integer import Integer from sage.rings.integer_ring import ZZ from sage.rings.polynomial.flatten import FlatteningMorphism, UnflatteningMorphism @@ -4539,7 +4538,7 @@ def preperiodic_points(self, m, n, **kwds): else: f_sub = self.change_ring(R) R = f_sub.base_ring() #in the case when R is an embedding - if isinstance(R, FractionField_1poly_field) or is_FunctionField(R): + if isinstance(R, FractionField_1poly_field) or R in FunctionFields(): raise NotImplementedError('Periodic points not implemented for function fields; ' 'clear denominators and use the polynomial ring instead') CR = f_sub.coordinate_ring() @@ -4877,7 +4876,7 @@ def periodic_points(self, n, minimal=True, formal=False, R=None, algorithm='vari else: f_sub = self.change_ring(R) R = f_sub.base_ring() #in the case when R is an embedding - if isinstance(R, FractionField_1poly_field) or is_FunctionField(R): + if isinstance(R, FractionField_1poly_field) or R in FunctionFields(): raise NotImplementedError('periodic points not implemented for fraction function fields; ' 'clear denominators and use the polynomial ring instead') if isinstance(R, FractionField_generic): From 53863a18037289e605927014d11da41115c85675 Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Wed, 26 Jun 2024 17:35:41 -0700 Subject: [PATCH 4/4] src/sage/rings/function_field/function_field.py: Fix up --- src/sage/rings/function_field/function_field.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/rings/function_field/function_field.py b/src/sage/rings/function_field/function_field.py index a012b9a1943..a415cd61f14 100644 --- a/src/sage/rings/function_field/function_field.py +++ b/src/sage/rings/function_field/function_field.py @@ -853,7 +853,7 @@ def _intermediate_fields(self, base): ... TypeError: base must be a function field """ - if not is_FunctionField(base): + if base not in FunctionFields(): raise TypeError("base must be a function field") ret = [self]