|
"""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() |
|
|