def refine_root(f, s, t, eps=None, steps=None, fast=False): """Refine an isolating interval to the given precision. """ if not f.lev: return dup_refine_real_root(f.rep, s, t, f.dom, eps=eps, steps=steps, fast=fast) else: raise PolynomialError( "can't refine a root of a multivariate polynomial")
def test_dup_refine_real_root(): f = [1, 0, -2] assert dup_refine_real_root(f, QQ(1), QQ(1), ZZ, steps=1) == (QQ(1), QQ(1)) assert dup_refine_real_root(f, QQ(1), QQ(1), ZZ, steps=9) == (QQ(1), QQ(1)) raises(ValueError, "dup_refine_real_root(f, QQ(-2), QQ(2), ZZ)") s, t = QQ(1, 1), QQ(2, 1) assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(2, 1)) assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(1, 1), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(4, 3), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(10, 7)) s, t = QQ(1, 1), QQ(3, 2) assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(4, 3), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(7, 5), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(10, 7)) assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(17, 12)) s, t = QQ(1, 1), QQ(5, 3) assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(5, 3)) assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(1, 1), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(7, 5), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(13, 9)) assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(10, 7)) s, t = QQ(-1, 1), QQ(-2, 1) assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (-QQ(2, 1), -QQ(1, 1)) assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (-QQ(3, 2), -QQ(1, 1)) assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (-QQ(3, 2), -QQ(4, 3)) assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (-QQ(3, 2), -QQ(7, 5)) assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (-QQ(10, 7), -QQ(7, 5)) raises(RefinementFailed, "dup_refine_real_root(f, QQ(0), QQ(1), ZZ)") s, t, u, v, w = QQ(1), QQ(2), QQ(24, 17), QQ(17, 12), QQ(7, 5) assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1, 100)) == (u, v) assert dup_refine_real_root(f, s, t, ZZ, steps=6) == (u, v) assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1, 100), steps=5) == (w, v) assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1, 100), steps=6) == (u, v) assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1, 100), steps=7) == (u, v) s, t, u, v = QQ(-2), QQ(-1), QQ(-3, 2), QQ(-4, 3) assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=QQ(-5)) == (s, t) assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=-v) == (s, t) assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=v) == (u, v) s, t, u, v = QQ(1), QQ(2), QQ(4, 3), QQ(3, 2) assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=QQ(5)) == (s, t) assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=-u) == (s, t) assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=u) == (u, v)
def test_dup_refine_real_root(): f = [1,0,-2] assert dup_refine_real_root(f, QQ(1), QQ(1), ZZ, steps=1) == (QQ(1), QQ(1)) assert dup_refine_real_root(f, QQ(1), QQ(1), ZZ, steps=9) == (QQ(1), QQ(1)) raises(ValueError, "dup_refine_real_root(f, QQ(-2), QQ(2), ZZ)") s, t = QQ(1,1), QQ(2,1) assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(2, 1)) assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(1, 1), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(4, 3), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(10, 7)) s, t = QQ(1,1), QQ(3,2) assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(4, 3), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(7, 5), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(10, 7)) assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(17, 12)) s, t = QQ(1,1), QQ(5,3) assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(5, 3)) assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(1, 1), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(7, 5), QQ(3, 2)) assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(13, 9)) assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(10, 7)) s, t = QQ(-1,1), QQ(-2,1) assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (-QQ(2, 1), -QQ(1, 1)) assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (-QQ(3, 2), -QQ(1, 1)) assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (-QQ(3, 2), -QQ(4, 3)) assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (-QQ(3, 2), -QQ(7, 5)) assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (-QQ(10, 7), -QQ(7, 5)) raises(RefinementFailed, "dup_refine_real_root(f, QQ(0), QQ(1), ZZ)") s, t, u, v, w = QQ(1), QQ(2), QQ(24,17), QQ(17,12), QQ(7,5) assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1,100)) == (u, v) assert dup_refine_real_root(f, s, t, ZZ, steps=6) == (u, v) assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1,100), steps=5) == (w, v) assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1,100), steps=6) == (u, v) assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1,100), steps=7) == (u, v) s, t, u, v = QQ(-2), QQ(-1), QQ(-3,2), QQ(-4,3) assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=QQ(-5)) == (s, t) assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=-v) == (s, t) assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=v) == (u, v) s, t, u, v = QQ(1), QQ(2), QQ(4,3), QQ(3,2) assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=QQ(5)) == (s, t) assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=-u) == (s, t) assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=u) == (u, v)