53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
|
"""Tests for quotient rings."""
|
||
|
|
||
|
from sympy.polys.domains.integerring import ZZ
|
||
|
from sympy.polys.domains.rationalfield import QQ
|
||
|
from sympy.abc import x, y
|
||
|
|
||
|
from sympy.polys.polyerrors import NotReversible
|
||
|
|
||
|
from sympy.testing.pytest import raises
|
||
|
|
||
|
|
||
|
def test_QuotientRingElement():
|
||
|
R = QQ.old_poly_ring(x)/[x**10]
|
||
|
X = R.convert(x)
|
||
|
|
||
|
assert X*(X + 1) == R.convert(x**2 + x)
|
||
|
assert X*x == R.convert(x**2)
|
||
|
assert x*X == R.convert(x**2)
|
||
|
assert X + x == R.convert(2*x)
|
||
|
assert x + X == 2*X
|
||
|
assert X**2 == R.convert(x**2)
|
||
|
assert 1/(1 - X) == R.convert(sum(x**i for i in range(10)))
|
||
|
assert X**10 == R.zero
|
||
|
assert X != x
|
||
|
|
||
|
raises(NotReversible, lambda: 1/X)
|
||
|
|
||
|
|
||
|
def test_QuotientRing():
|
||
|
I = QQ.old_poly_ring(x).ideal(x**2 + 1)
|
||
|
R = QQ.old_poly_ring(x)/I
|
||
|
|
||
|
assert R == QQ.old_poly_ring(x)/[x**2 + 1]
|
||
|
assert R == QQ.old_poly_ring(x)/QQ.old_poly_ring(x).ideal(x**2 + 1)
|
||
|
assert R != QQ.old_poly_ring(x)
|
||
|
|
||
|
assert R.convert(1)/x == -x + I
|
||
|
assert -1 + I == x**2 + I
|
||
|
assert R.convert(ZZ(1), ZZ) == 1 + I
|
||
|
assert R.convert(R.convert(x), R) == R.convert(x)
|
||
|
|
||
|
X = R.convert(x)
|
||
|
Y = QQ.old_poly_ring(x).convert(x)
|
||
|
assert -1 + I == X**2 + I
|
||
|
assert -1 + I == Y**2 + I
|
||
|
assert R.to_sympy(X) == x
|
||
|
|
||
|
raises(ValueError, lambda: QQ.old_poly_ring(x)/QQ.old_poly_ring(x, y).ideal(x))
|
||
|
|
||
|
R = QQ.old_poly_ring(x, order="ilex")
|
||
|
I = R.ideal(x)
|
||
|
assert R.convert(1) + I == (R/I).convert(1)
|