def test_DMP_arithmetics(): f = DMP([[2],[2,0]], ZZ) assert f.mul_ground(2) == DMP([[4],[4,0]], ZZ) assert f.exquo_ground(2) == DMP([[1],[1,0]], ZZ) raises(ExactQuotientFailed, 'f.quo_ground(3)') f = DMP([[-5]], ZZ) g = DMP([[5]], ZZ) assert f.abs() == g assert abs(f) == g assert g.neg() == f assert -g == f h = DMP([[]], ZZ) assert f.add(g) == h assert f + g == h assert g + f == h assert f + 5 == h assert 5 + f == h h = DMP([[-10]], ZZ) assert f.sub(g) == h assert f - g == h assert g - f == -h assert f - 5 == h assert 5 - f == -h h = DMP([[-25]], ZZ) assert f.mul(g) == h assert f * g == h assert g * f == h assert f * 5 == h assert 5 * f == h h = DMP([[25]], ZZ) assert f.sqr() == h assert f.pow(2) == h assert f**2 == h raises(TypeError, "f.pow('x')") f = DMP([[1],[],[1,0,0]], ZZ) g = DMP([[2],[-2,0]], ZZ) q = DMP([[2],[2,0]], ZZ) r = DMP([[8,0,0]], ZZ) assert f.pdiv(g) == (q, r) assert f.pexquo(g) == q assert f.prem(g) == r raises(ExactQuotientFailed, 'f.pquo(g)') f = DMP([[1],[],[1,0,0]], ZZ) g = DMP([[1],[-1,0]], ZZ) q = DMP([[1],[1,0]], ZZ) r = DMP([[2,0,0]], ZZ) assert f.div(g) == (q, r) assert f.exquo(g) == q assert f.rem(g) == r assert divmod(f, g) == (q, r) assert f // g == q assert f % g == r raises(ExactQuotientFailed, 'f.quo(g)')