58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
"""Implementation of :class:`ExpressionRawDomain` class. """
|
|
|
|
|
|
from sympy.core import Expr, S, sympify, Add
|
|
from sympy.polys.domains.characteristiczero import CharacteristicZero
|
|
from sympy.polys.domains.field import Field
|
|
from sympy.polys.domains.simpledomain import SimpleDomain
|
|
from sympy.polys.polyerrors import CoercionFailed
|
|
from sympy.utilities import public
|
|
|
|
|
|
@public
|
|
class ExpressionRawDomain(Field, CharacteristicZero, SimpleDomain):
|
|
"""A class for arbitrary expressions but without automatic simplification. """
|
|
|
|
is_SymbolicRawDomain = is_EXRAW = True
|
|
|
|
dtype = Expr
|
|
|
|
zero = S.Zero
|
|
one = S.One
|
|
|
|
rep = 'EXRAW'
|
|
|
|
has_assoc_Ring = False
|
|
has_assoc_Field = True
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
@classmethod
|
|
def new(self, a):
|
|
return sympify(a)
|
|
|
|
def to_sympy(self, a):
|
|
"""Convert ``a`` to a SymPy object. """
|
|
return a
|
|
|
|
def from_sympy(self, a):
|
|
"""Convert SymPy's expression to ``dtype``. """
|
|
if not isinstance(a, Expr):
|
|
raise CoercionFailed(f"Expecting an Expr instance but found: {type(a).__name__}")
|
|
return a
|
|
|
|
def convert_from(self, a, K):
|
|
"""Convert a domain element from another domain to EXRAW"""
|
|
return K.to_sympy(a)
|
|
|
|
def get_field(self):
|
|
"""Returns a field associated with ``self``. """
|
|
return self
|
|
|
|
def sum(self, items):
|
|
return Add(*items)
|
|
|
|
|
|
EXRAW = ExpressionRawDomain()
|