Skip to content
This repository was archived by the owner on Jan 30, 2023. It is now read-only.

Commit c46eb46

Browse files
author
Matthias Koeppe
committedOct 25, 2021
Merge #32665
2 parents 0a1b9ac + 341337a commit c46eb46

File tree

17 files changed

+121
-62
lines changed

17 files changed

+121
-62
lines changed
 

‎src/sage/dynamics/arithmetic_dynamics/affine_ds.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ class initialization directly.
5656
from sage.schemes.affine.affine_subscheme import AlgebraicScheme_subscheme_affine
5757
from sage.schemes.generic.morphism import SchemeMorphism_polynomial
5858
from sage.structure.element import get_coercion_model
59-
from sage.symbolic.ring import is_SymbolicExpressionRing
60-
from sage.symbolic.ring import var
61-
from sage.symbolic.ring import SR
59+
60+
import sage.rings.abc
61+
6262

6363
class DynamicalSystem_affine(SchemeMorphism_polynomial_affine_space,
6464
DynamicalSystem):
@@ -275,7 +275,7 @@ def __classcall_private__(cls, morphism_or_polys, domain=None):
275275
else:
276276
polys = [PR(poly) for poly in polys]
277277
if domain is None:
278-
if PR is SR:
278+
if isinstance(PR, sage.rings.abc.SymbolicRing):
279279
raise TypeError("Symbolic Ring cannot be the base ring")
280280
if fraction_field:
281281
PR = PR.ring()
@@ -292,7 +292,7 @@ def __classcall_private__(cls, morphism_or_polys, domain=None):
292292
if len(polys) != domain.ambient_space().coordinate_ring().ngens():
293293
raise ValueError('Number of polys does not match dimension of {}'.format(domain))
294294
R = domain.base_ring()
295-
if R is SR:
295+
if isinstance(R, sage.rings.abc.SymbolicRing):
296296
raise TypeError("Symbolic Ring cannot be the base ring")
297297
if not is_AffineSpace(domain) and not isinstance(domain, AlgebraicScheme_subscheme_affine):
298298
raise ValueError('"domain" must be an affine scheme')
@@ -529,7 +529,8 @@ def dynatomic_polynomial(self, period):
529529
F = G.dynatomic_polynomial(period)
530530
T = G.domain().coordinate_ring()
531531
S = self.domain().coordinate_ring()
532-
if is_SymbolicExpressionRing(F.parent()):
532+
if isinstance(F.parent(), sage.rings.abc.SymbolicRing):
533+
from sage.symbolic.ring import var
533534
u = var(self.domain().coordinate_ring().variable_name())
534535
return F.subs({F.variables()[0]:u,F.variables()[1]:1})
535536
elif T(F.denominator()).degree() == 0:

‎src/sage/ext/fast_callable.pyx

+2-5
Original file line numberDiff line numberDiff line change
@@ -428,19 +428,16 @@ def fast_callable(x, domain=None, vars=None,
428428
et = x
429429
vars = et._etb._vars
430430
else:
431-
from sage.symbolic.callable import is_CallableSymbolicExpression
432-
433431
if not vars:
434432
# fast_float passes empty list/tuple
435433
vars = None
436434

437-
if is_CallableSymbolicExpression(x):
435+
if isinstance(x, Expression_abc) and x.is_callable():
438436
if vars is None:
439437
vars = x.arguments()
440438
if expect_one_var and len(vars) != 1:
441439
raise ValueError(f"passed expect_one_var=True, but the callable expression takes {len(vars)} arguments")
442440
elif isinstance(x, Expression_abc):
443-
from sage.symbolic.ring import is_SymbolicVariable
444441
if vars is None:
445442
vars = x.variables()
446443
if expect_one_var and len(vars) <= 1:
@@ -449,7 +446,7 @@ def fast_callable(x, domain=None, vars=None,
449446
else:
450447
raise ValueError("list of variables must be specified for symbolic expressions")
451448
def to_var(var):
452-
if is_SymbolicVariable(var):
449+
if isinstance(var, Expression_abc) and var.is_symbol():
453450
return var
454451
from sage.symbolic.ring import SR
455452
return SR.var(var)

‎src/sage/interfaces/qepcad.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -1924,11 +1924,9 @@ def atomic(self, lhs, op='=', rhs=0):
19241924
if isinstance(lhs, qformula):
19251925
return lhs
19261926

1927-
from sage.symbolic.expression import is_SymbolicEquation
1928-
if is_SymbolicEquation(lhs):
1929-
rhs = lhs.rhs()
1930-
op = lhs.operator()
1931-
lhs = lhs.lhs()
1927+
from sage.structure.element import Expression
1928+
if isinstance(lhs, Expression) and lhs.is_relational():
1929+
lhs, op, rhs = lhs.lhs(), lhs.operator(), lhs.rhs()
19321930

19331931
op = self._normalize_op(op)
19341932

‎src/sage/matrix/matrix2.pyx

+1-3
Original file line numberDiff line numberDiff line change
@@ -1985,8 +1985,6 @@ cdef class Matrix(Matrix1):
19851985
sage: A.determinant() == B.determinant()
19861986
True
19871987
"""
1988-
from sage.symbolic.ring import is_SymbolicExpressionRing
1989-
19901988
cdef Py_ssize_t n
19911989
n = self._ncols
19921990

@@ -2075,7 +2073,7 @@ cdef class Matrix(Matrix1):
20752073
# is then assumed to not be a variable in the symbolic ring. But this
20762074
# resulted in further exceptions/ errors.
20772075

2078-
var = 'A0123456789' if is_SymbolicExpressionRing(R) else 'x'
2076+
var = 'A0123456789' if isinstance(R, sage.rings.abc.SymbolicRing) else 'x'
20792077
try:
20802078
charp = self.charpoly(var, algorithm="df")
20812079
except ValueError:

‎src/sage/modules/free_module.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -7448,12 +7448,12 @@ def element_class(R, is_sparse):
74487448
return sage.modules.vector_real_double_dense.Vector_real_double_dense
74497449
elif isinstance(R, sage.rings.abc.ComplexDoubleField) and not is_sparse:
74507450
return sage.modules.vector_complex_double_dense.Vector_complex_double_dense
7451-
elif sage.symbolic.ring.is_SymbolicExpressionRing(R) and not is_sparse:
7452-
import sage.modules.vector_symbolic_dense
7453-
return sage.modules.vector_symbolic_dense.Vector_symbolic_dense
7454-
elif sage.symbolic.callable.is_CallableSymbolicExpressionRing(R) and not is_sparse:
7451+
elif isinstance(R, sage.rings.abc.CallableSymbolicExpressionRing) and not is_sparse:
74557452
import sage.modules.vector_callable_symbolic_dense
74567453
return sage.modules.vector_callable_symbolic_dense.Vector_callable_symbolic_dense
7454+
elif isinstance(R, sage.rings.abc.SymbolicRing) and not is_sparse:
7455+
import sage.modules.vector_symbolic_dense
7456+
return sage.modules.vector_symbolic_dense.Vector_symbolic_dense
74577457
else:
74587458
if is_sparse:
74597459
return free_module_element.FreeModuleElement_generic_sparse

‎src/sage/modules/free_module_element.pyx

+3-3
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ from sage.structure.element cimport Element, ModuleElement, RingElement, Vector
118118
from sage.structure.element import canonical_coercion
119119
from sage.structure.richcmp cimport richcmp_not_equal, richcmp, rich_to_bool
120120

121+
import sage.rings.abc
121122
from sage.rings.ring import is_Ring
122123
from sage.rings.infinity import Infinity, AnInfinity
123124
from sage.rings.integer_ring import ZZ
@@ -3933,9 +3934,8 @@ cdef class FreeModuleElement(Vector): # abstract base class
39333934
(r, theta) |--> r*cos(theta)^2 + r*sin(theta)^2
39343935
"""
39353936
if var is None:
3936-
from sage.symbolic.callable import is_CallableSymbolicExpressionRing
3937-
from sage.calculus.all import jacobian
3938-
if is_CallableSymbolicExpressionRing(self.coordinate_ring()):
3937+
if isinstance(self.coordinate_ring(), sage.rings.abc.CallableSymbolicExpressionRing):
3938+
from sage.calculus.all import jacobian
39393939
return jacobian(self, self.coordinate_ring().arguments())
39403940
else:
39413941
raise ValueError("No differentiation variable specified.")

‎src/sage/plot/contour_plot.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1195,8 +1195,8 @@ def f(x,y):
11951195
...
11961196
ValueError: only one of color or rgbcolor should be specified
11971197
"""
1198-
from sage.symbolic.expression import is_SymbolicEquation
1199-
if is_SymbolicEquation(f):
1198+
from sage.structure.element import Expression
1199+
if isinstance(f, Expression) and f.is_relational():
12001200
if f.operator() != operator.eq:
12011201
raise ValueError("input to implicit plot must be function "
12021202
"or equation")

‎src/sage/plot/misc.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
from sage.ext.fast_eval import fast_float
1717

18-
from sage.structure.element import is_Vector
18+
from sage.structure.element import is_Vector, Expression
1919

2020
def setup_for_eval_on_grid(funcs, ranges, plot_points=None, return_vars=False):
2121
"""
@@ -187,15 +187,13 @@ def unify_arguments(funcs):
187187
sage: sage.plot.misc.unify_arguments((x+y,x-y))
188188
((x, y), (x, y))
189189
"""
190-
from sage.symbolic.callable import is_CallableSymbolicExpression
191-
192190
vars=set()
193191
free_variables=set()
194192
if not isinstance(funcs, (list, tuple)):
195193
funcs = [funcs]
196194

197195
for f in funcs:
198-
if is_CallableSymbolicExpression(f):
196+
if isinstance(f, Expression) and f.is_callable():
199197
f_args = set(f.arguments())
200198
vars.update(f_args)
201199
else:

‎src/sage/plot/plot3d/plot3d.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1046,13 +1046,13 @@ def plot3d(f, urange, vrange, adaptive=False, transformation=None, **kwds):
10461046
Graphics3d Object
10471047
"""
10481048
if transformation is not None:
1049-
params=None
1050-
from sage.symbolic.callable import is_CallableSymbolicExpression
1049+
params = None
1050+
from sage.structure.element import Expression
10511051
# First, determine the parameters for f (from the first item of urange
10521052
# and vrange, preferably).
10531053
if len(urange) == 3 and len(vrange) == 3:
10541054
params = (urange[0], vrange[0])
1055-
elif is_CallableSymbolicExpression(f):
1055+
elif isinstance(f, Expression) and f.is_callable():
10561056
params = f.variables()
10571057

10581058
from sage.modules.vector_callable_symbolic_dense import Vector_callable_symbolic_dense

‎src/sage/rings/abc.pxd

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .ring cimport Field
1+
from .ring cimport CommutativeRing, Field
22

33
cdef class RealField(Field):
44

@@ -23,3 +23,8 @@ cdef class ComplexField(Field):
2323
cdef class ComplexDoubleField(Field):
2424

2525
pass
26+
27+
28+
cdef class SymbolicRing(CommutativeRing):
29+
30+
pass

‎src/sage/rings/abc.pyx

+17
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class IntegerModRing:
7575

7676
pass
7777

78+
7879
class Order:
7980
r"""
8081
Abstract base class for :class:`~sage.rings.number_field.order.Order`.
@@ -97,3 +98,19 @@ class pAdicField(Field):
9798
"""
9899

99100
pass
101+
102+
103+
cdef class SymbolicRing(CommutativeRing):
104+
r"""
105+
Abstract base class for :class:`~sage.rings.symbolic.ring.SymbolicRing`.
106+
"""
107+
108+
pass
109+
110+
111+
class CallableSymbolicExpressionRing(SymbolicRing):
112+
r"""
113+
Abstract base class for :class:`~sage.rings.symbolic.callable.CallableSymbolicExpressionRing_class`.
114+
"""
115+
116+
pass

‎src/sage/schemes/elliptic_curves/constructor.py

+20-5
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,8 @@
3636
_Fields = Fields()
3737

3838
from sage.structure.sequence import Sequence
39-
from sage.structure.element import parent
39+
from sage.structure.element import parent, Expression
4040
from sage.structure.factory import UniqueFactory
41-
from sage.symbolic.ring import SR
42-
from sage.symbolic.expression import is_SymbolicEquation
4341

4442

4543
class EllipticCurveFactory(UniqueFactory):
@@ -385,6 +383,20 @@ def create_key_and_extra_args(self, x=None, y=None, j=None, minimal_twist=True,
385383
incorrect data may lead to wrong results of computations
386384
instead of errors or warnings.
387385
386+
TESTS::
387+
388+
sage: var('x', 'y', 'v', 'w')
389+
(x, y, v, w)
390+
sage: EllipticCurve(y^2 + y > x^3 + x - 9)
391+
Traceback (most recent call last):
392+
...
393+
ValueError: no symbolic relations other than equalities are allowed
394+
sage: E = EllipticCurve(y^2 + y == x^3 + x - 9)
395+
sage: E is EllipticCurve(y^2 + y - ( x^3 + x - 9 ))
396+
True
397+
sage: R.<x,y> = QQ[]
398+
sage: E is EllipticCurve(y^2 + y - ( x^3 + x - 9 ))
399+
True
388400
"""
389401
R = None
390402
if is_Ring(x):
@@ -400,10 +412,13 @@ def create_key_and_extra_args(self, x=None, y=None, j=None, minimal_twist=True,
400412
raise ValueError("First parameter (if present) must be a ring when j is specified")
401413
x = coefficients_from_j(j, minimal_twist)
402414

403-
if is_SymbolicEquation(x):
415+
if isinstance(x, Expression) and x.is_relational():
416+
import operator
417+
if x.operator() != operator.eq:
418+
raise ValueError("no symbolic relations other than equalities are allowed")
404419
x = x.lhs() - x.rhs()
405420

406-
if parent(x) is SR:
421+
if isinstance(parent(x), sage.rings.abc.SymbolicRing):
407422
x = x._polynomial_(rings.QQ['x', 'y'])
408423

409424
if is_MPolynomial(x):

‎src/sage/sets/condition_set.py

+4-9
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,9 @@
2020
from sage.misc.cachefunc import cached_method
2121
from sage.misc.misc import _stable_uniq
2222
from sage.structure.element import Expression
23-
24-
try:
25-
from sage.symbolic.callable import is_CallableSymbolicExpression
26-
except ImportError:
27-
is_CallableSymbolicExpression = lambda x: False
28-
2923
from .set import Set, Set_base, Set_boolean_operators, Set_add_sub_operators
3024

25+
3126
class ConditionSet(Set_generic, Set_base, Set_boolean_operators, Set_add_sub_operators,
3227
UniqueRepresentation):
3328
r"""
@@ -160,7 +155,7 @@ def __classcall_private__(cls, universe, *predicates, vars=None, names=None, cat
160155
other_predicates = []
161156

162157
for predicate in predicates:
163-
if is_CallableSymbolicExpression(predicate):
158+
if isinstance(predicate, Expression) and predicate.is_callable():
164159
if names is None:
165160
names = tuple(str(var) for var in predicate.args())
166161
elif len(names) != len(predicate.args()):
@@ -271,7 +266,7 @@ def _repr_condition(self, predicate):
271266
sage: ZeroDimButNotNullary._repr_condition(ZeroDimButNotNullary._predicates[0])
272267
't > 0'
273268
"""
274-
if is_CallableSymbolicExpression(predicate):
269+
if isinstance(predicate, Expression) and predicate.is_callable():
275270
args = self.arguments()
276271
if len(args) == 1:
277272
args = args[0]
@@ -364,7 +359,7 @@ def _call_predicate(self, predicate, element):
364359
sage: Nullary._call_predicate(predicate, element)
365360
t > 0
366361
"""
367-
if is_CallableSymbolicExpression(predicate):
362+
if isinstance(predicate, Expression) and predicate.is_callable():
368363
if len(predicate.arguments()) != 1:
369364
return predicate(*element)
370365
return predicate(element)

‎src/sage/symbolic/callable.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
SyntaxError: can...t assign to function call
6262
"""
6363

64+
import sage.rings.abc
6465
from sage.symbolic.ring import SymbolicRing, SR
6566
from sage.categories.pushout import ConstructionFunctor
6667

@@ -81,12 +82,18 @@ def is_CallableSymbolicExpressionRing(x):
8182
8283
sage: from sage.symbolic.callable import is_CallableSymbolicExpressionRing
8384
sage: is_CallableSymbolicExpressionRing(QQ)
85+
doctest:warning...
86+
DeprecationWarning: is_CallableSymbolicExpressionRing is deprecated;
87+
use isinstance(..., sage.rings.abc.CallableSymbolicExpressionRing instead
88+
See https://trac.sagemath.org/32665 for details.
8489
False
8590
sage: var('x,y,z')
8691
(x, y, z)
8792
sage: is_CallableSymbolicExpressionRing(CallableSymbolicExpressionRing((x,y,z)))
8893
True
8994
"""
95+
from sage.misc.superseded import deprecation
96+
deprecation(32665, 'is_CallableSymbolicExpressionRing is deprecated; use isinstance(..., sage.rings.abc.CallableSymbolicExpressionRing instead')
9097
return isinstance(x, CallableSymbolicExpressionRing_class)
9198

9299
def is_CallableSymbolicExpression(x):
@@ -267,7 +274,7 @@ def unify_arguments(self, x):
267274
return tuple(new_list)
268275

269276

270-
class CallableSymbolicExpressionRing_class(SymbolicRing):
277+
class CallableSymbolicExpressionRing_class(SymbolicRing, sage.rings.abc.CallableSymbolicExpressionRing):
271278
def __init__(self, arguments):
272279
"""
273280
EXAMPLES:
@@ -300,7 +307,7 @@ def _coerce_map_from_(self, R):
300307
sage: g.parent().has_coerce_map_from(f.parent())
301308
True
302309
"""
303-
if is_CallableSymbolicExpressionRing(R):
310+
if isinstance(R, CallableSymbolicExpressionRing_class):
304311
args = self.arguments()
305312
if all(a in args for a in R.arguments()):
306313
return True

0 commit comments

Comments
 (0)
This repository has been archived.