123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- """Tests for the PolynomialRing classes. """
- from sympy.polys.domains import QQ, ZZ
- from sympy.polys.polyerrors import ExactQuotientFailed, CoercionFailed, NotReversible
- from sympy.abc import x, y
- from sympy.testing.pytest import raises
- def test_build_order():
- R = QQ.old_poly_ring(x, y, order=(("lex", x), ("ilex", y)))
- assert R.order((1, 5)) == ((1,), (-5,))
- def test_globalring():
- Qxy = QQ.old_frac_field(x, y)
- R = QQ.old_poly_ring(x, y)
- X = R.convert(x)
- Y = R.convert(y)
- assert x in R
- assert 1/x not in R
- assert 1/(1 + x) not in R
- assert Y in R
- assert X.ring == R
- assert X * (Y**2 + 1) == R.convert(x * (y**2 + 1))
- assert X * y == X * Y == R.convert(x * y) == x * Y
- assert X + y == X + Y == R.convert(x + y) == x + Y
- assert X - y == X - Y == R.convert(x - y) == x - Y
- assert X + 1 == R.convert(x + 1)
- raises(ExactQuotientFailed, lambda: X/Y)
- raises(ExactQuotientFailed, lambda: x/Y)
- raises(ExactQuotientFailed, lambda: X/y)
- assert X**2 / X == X
- assert R.from_GlobalPolynomialRing(ZZ.old_poly_ring(x, y).convert(x), ZZ.old_poly_ring(x, y)) == X
- assert R.from_FractionField(Qxy.convert(x), Qxy) == X
- assert R.from_FractionField(Qxy.convert(x)/y, Qxy) is None
- assert R._sdm_to_vector(R._vector_to_sdm([X, Y], R.order), 2) == [X, Y]
- def test_localring():
- Qxy = QQ.old_frac_field(x, y)
- R = QQ.old_poly_ring(x, y, order="ilex")
- X = R.convert(x)
- Y = R.convert(y)
- assert x in R
- assert 1/x not in R
- assert 1/(1 + x) in R
- assert Y in R
- assert X.ring == R
- assert X*(Y**2 + 1)/(1 + X) == R.convert(x*(y**2 + 1)/(1 + x))
- assert X*y == X*Y
- raises(ExactQuotientFailed, lambda: X/Y)
- raises(ExactQuotientFailed, lambda: x/Y)
- raises(ExactQuotientFailed, lambda: X/y)
- assert X + y == X + Y == R.convert(x + y) == x + Y
- assert X - y == X - Y == R.convert(x - y) == x - Y
- assert X + 1 == R.convert(x + 1)
- assert X**2 / X == X
- assert R.from_GlobalPolynomialRing(ZZ.old_poly_ring(x, y).convert(x), ZZ.old_poly_ring(x, y)) == X
- assert R.from_FractionField(Qxy.convert(x), Qxy) == X
- raises(CoercionFailed, lambda: R.from_FractionField(Qxy.convert(x)/y, Qxy))
- raises(ExactQuotientFailed, lambda: X/Y)
- raises(NotReversible, lambda: X.invert())
- assert R._sdm_to_vector(
- R._vector_to_sdm([X/(X + 1), Y/(1 + X*Y)], R.order), 2) == \
- [X*(1 + X*Y), Y*(1 + X)]
- def test_conversion():
- L = QQ.old_poly_ring(x, y, order="ilex")
- G = QQ.old_poly_ring(x, y)
- assert L.convert(x) == L.convert(G.convert(x), G)
- assert G.convert(x) == G.convert(L.convert(x), L)
- raises(CoercionFailed, lambda: G.convert(L.convert(1/(1 + x)), L))
- def test_units():
- R = QQ.old_poly_ring(x)
- assert R.is_unit(R.convert(1))
- assert R.is_unit(R.convert(2))
- assert not R.is_unit(R.convert(x))
- assert not R.is_unit(R.convert(1 + x))
- R = QQ.old_poly_ring(x, order='ilex')
- assert R.is_unit(R.convert(1))
- assert R.is_unit(R.convert(2))
- assert not R.is_unit(R.convert(x))
- assert R.is_unit(R.convert(1 + x))
- R = ZZ.old_poly_ring(x)
- assert R.is_unit(R.convert(1))
- assert not R.is_unit(R.convert(2))
- assert not R.is_unit(R.convert(x))
- assert not R.is_unit(R.convert(1 + x))
|