switching to high quality piper tts and added label translations
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
"""Implementation of :class:`Field` class. """
|
||||
|
||||
|
||||
from sympy.polys.domains.ring import Ring
|
||||
from sympy.polys.polyerrors import NotReversible, DomainError
|
||||
from sympy.utilities import public
|
||||
|
||||
@public
|
||||
class Field(Ring):
|
||||
"""Represents a field domain. """
|
||||
|
||||
is_Field = True
|
||||
is_PID = True
|
||||
|
||||
def get_ring(self):
|
||||
"""Returns a ring associated with ``self``. """
|
||||
raise DomainError('there is no ring associated with %s' % self)
|
||||
|
||||
def get_field(self):
|
||||
"""Returns a field associated with ``self``. """
|
||||
return self
|
||||
|
||||
def exquo(self, a, b):
|
||||
"""Exact quotient of ``a`` and ``b``, implies ``__truediv__``. """
|
||||
return a / b
|
||||
|
||||
def quo(self, a, b):
|
||||
"""Quotient of ``a`` and ``b``, implies ``__truediv__``. """
|
||||
return a / b
|
||||
|
||||
def rem(self, a, b):
|
||||
"""Remainder of ``a`` and ``b``, implies nothing. """
|
||||
return self.zero
|
||||
|
||||
def div(self, a, b):
|
||||
"""Division of ``a`` and ``b``, implies ``__truediv__``. """
|
||||
return a / b, self.zero
|
||||
|
||||
def gcd(self, a, b):
|
||||
"""
|
||||
Returns GCD of ``a`` and ``b``.
|
||||
|
||||
This definition of GCD over fields allows to clear denominators
|
||||
in `primitive()`.
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
>>> from sympy.polys.domains import QQ
|
||||
>>> from sympy import S, gcd, primitive
|
||||
>>> from sympy.abc import x
|
||||
|
||||
>>> QQ.gcd(QQ(2, 3), QQ(4, 9))
|
||||
2/9
|
||||
>>> gcd(S(2)/3, S(4)/9)
|
||||
2/9
|
||||
>>> primitive(2*x/3 + S(4)/9)
|
||||
(2/9, 3*x + 2)
|
||||
|
||||
"""
|
||||
try:
|
||||
ring = self.get_ring()
|
||||
except DomainError:
|
||||
return self.one
|
||||
|
||||
p = ring.gcd(self.numer(a), self.numer(b))
|
||||
q = ring.lcm(self.denom(a), self.denom(b))
|
||||
|
||||
return self.convert(p, ring)/q
|
||||
|
||||
def gcdex(self, a, b):
|
||||
"""
|
||||
Returns x, y, g such that a * x + b * y == g == gcd(a, b)
|
||||
"""
|
||||
d = self.gcd(a, b)
|
||||
|
||||
if a == self.zero:
|
||||
if b == self.zero:
|
||||
return self.zero, self.one, self.zero
|
||||
else:
|
||||
return self.zero, d/b, d
|
||||
else:
|
||||
return d/a, self.zero, d
|
||||
|
||||
def lcm(self, a, b):
|
||||
"""
|
||||
Returns LCM of ``a`` and ``b``.
|
||||
|
||||
>>> from sympy.polys.domains import QQ
|
||||
>>> from sympy import S, lcm
|
||||
|
||||
>>> QQ.lcm(QQ(2, 3), QQ(4, 9))
|
||||
4/3
|
||||
>>> lcm(S(2)/3, S(4)/9)
|
||||
4/3
|
||||
|
||||
"""
|
||||
|
||||
try:
|
||||
ring = self.get_ring()
|
||||
except DomainError:
|
||||
return a*b
|
||||
|
||||
p = ring.lcm(self.numer(a), self.numer(b))
|
||||
q = ring.gcd(self.denom(a), self.denom(b))
|
||||
|
||||
return self.convert(p, ring)/q
|
||||
|
||||
def revert(self, a):
|
||||
"""Returns ``a**(-1)`` if possible. """
|
||||
if a:
|
||||
return 1/a
|
||||
else:
|
||||
raise NotReversible('zero is not reversible')
|
||||
|
||||
def is_unit(self, a):
|
||||
"""Return true if ``a`` is a invertible"""
|
||||
return bool(a)
|
||||
Reference in New Issue
Block a user