def test_dup_count_complex_roots_implicit(): f = [1, 0, 0, 0, -1, 0] # z*(z-1)*(z+1)*(z-I)*(z+I) assert dup_count_complex_roots(f, ZZ) == 5 assert dup_count_complex_roots(f, ZZ, sup=(0, 0)) == 3 assert dup_count_complex_roots(f, ZZ, inf=(0, 0)) == 3
def test_dup_count_complex_roots_implicit(): f = [1,0,0,0,-1,0] # z*(z-1)*(z+1)*(z-I)*(z+I) assert dup_count_complex_roots(f, ZZ) == 5 assert dup_count_complex_roots(f, ZZ, sup=(0, 0)) == 3 assert dup_count_complex_roots(f, ZZ, inf=(0, 0)) == 3
def test_dup_count_complex_roots_1(): # z-1 assert dup_count_complex_roots([1, -1], ZZ, a, b) == 1 assert dup_count_complex_roots([1, -1], ZZ, c, d) == 1 # z+1 assert dup_count_complex_roots([1, 1], ZZ, a, b) == 1 assert dup_count_complex_roots([1, 1], ZZ, c, d) == 0
def test_dup_count_complex_roots_1(): # z-1 assert dup_count_complex_roots([1,-1], ZZ, a, b) == 1 assert dup_count_complex_roots([1,-1], ZZ, c, d) == 1 # z+1 assert dup_count_complex_roots([1,1], ZZ, a, b) == 1 assert dup_count_complex_roots([1,1], ZZ, c, d) == 0
def test_dup_count_complex_roots_8(): # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*(z+1)*(z-I)*(z+I)*z assert dup_count_complex_roots([1,0,0,0,3,0,0,0,-4,0], ZZ, a, b) == 9 assert dup_count_complex_roots([1,0,0,0,3,0,0,0,-4,0], ZZ, c, d) == 4 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*(z+1)*(z-I)*(z+I)*(z**2-2)*z assert dup_count_complex_roots([1,0,-2,0,3,0,-6,0,-4,0,8,0], ZZ, a, b) == 9 assert dup_count_complex_roots([1,0,-2,0,3,0,-6,0,-4,0,8,0], ZZ, c, d) == 4
def test_dup_count_complex_roots_2(): # (z-1)*(z) assert dup_count_complex_roots([1, -1, 0], ZZ, a, b) == 2 assert dup_count_complex_roots([1, -1, 0], ZZ, c, d) == 2 # (z-1)*(-z) assert dup_count_complex_roots([-1, 1, 0], ZZ, a, b) == 2 assert dup_count_complex_roots([-1, 1, 0], ZZ, c, d) == 2 # (z+1)*(z) assert dup_count_complex_roots([1, 1, 0], ZZ, a, b) == 2 assert dup_count_complex_roots([1, 1, 0], ZZ, c, d) == 1 # (z+1)*(-z) assert dup_count_complex_roots([-1, -1, 0], ZZ, a, b) == 2 assert dup_count_complex_roots([-1, -1, 0], ZZ, c, d) == 1
def test_dup_count_complex_roots_2(): # (z-1)*(z) assert dup_count_complex_roots([1,-1,0], ZZ, a, b) == 2 assert dup_count_complex_roots([1,-1,0], ZZ, c, d) == 2 # (z-1)*(-z) assert dup_count_complex_roots([-1,1,0], ZZ, a, b) == 2 assert dup_count_complex_roots([-1,1,0], ZZ, c, d) == 2 # (z+1)*(z) assert dup_count_complex_roots([1,1,0], ZZ, a, b) == 2 assert dup_count_complex_roots([1,1,0], ZZ, c, d) == 1 # (z+1)*(-z) assert dup_count_complex_roots([-1,-1,0], ZZ, a, b) == 2 assert dup_count_complex_roots([-1,-1,0], ZZ, c, d) == 1
def test_dup_count_complex_roots_3(): # (z-1)*(z+1) assert dup_count_complex_roots(ZZ.map([1, 0, -1]), ZZ, a, b) == 2 assert dup_count_complex_roots(ZZ.map([1, 0, -1]), ZZ, c, d) == 1 # (z-1)*(z+1)*(z) assert dup_count_complex_roots(ZZ.map([1, 0, -1, 0]), ZZ, a, b) == 3 assert dup_count_complex_roots(ZZ.map([1, 0, -1, 0]), ZZ, c, d) == 2 # (z-1)*(z+1)*(-z) assert dup_count_complex_roots(ZZ.map([-1, 0, 1, 0]), ZZ, a, b) == 3 assert dup_count_complex_roots(ZZ.map([-1, 0, 1, 0]), ZZ, c, d) == 2
def test_dup_count_complex_roots_exclude(): f = [1, 0, 0, 0, -1, 0] # z*(z-1)*(z+1)*(z-I)*(z+I) a, b = (-QQ(1), QQ(0)), (QQ(1), QQ(1)) assert dup_count_complex_roots(f, ZZ, a, b) == 4 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['S']) == 3 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['N']) == 3 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['S', 'N']) == 2 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['E']) == 4 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['W']) == 4 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['E', 'W']) == 4 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['N', 'S', 'E', 'W']) == 2 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SW']) == 3 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SE']) == 3 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SW', 'SE']) == 2 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SW', 'SE', 'S']) == 1 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SW', 'SE', 'S', 'N']) == 0 a, b = (QQ(0), QQ(0)), (QQ(1), QQ(1)) assert dup_count_complex_roots(f, ZZ, a, b, exclude=True) == 1
def count_complex_roots(f, inf=None, sup=None): """Return the number of complex roots of ``f`` in ``[inf, sup]``. """ return dup_count_complex_roots(f.rep, f.dom, inf=inf, sup=sup)
def test_dup_count_complex_roots_7(): # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1) assert dup_count_complex_roots([1, 0, 0, 0, 4], ZZ, a, b) == 4 assert dup_count_complex_roots([1, 0, 0, 0, 4], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-2) assert dup_count_complex_roots([1, -2, 0, 0, 4, -8], ZZ, a, b) == 4 assert dup_count_complex_roots([1, -2, 0, 0, 4, -8], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z**2-2) assert dup_count_complex_roots([1, 0, -2, 0, 4, 0, -8], ZZ, a, b) == 4 assert dup_count_complex_roots([1, 0, -2, 0, 4, 0, -8], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1) assert dup_count_complex_roots([1, -1, 0, 0, 4, -4], ZZ, a, b) == 5 assert dup_count_complex_roots([1, -1, 0, 0, 4, -4], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*z assert dup_count_complex_roots([1, -1, 0, 0, 4, -4, 0], ZZ, a, b) == 6 assert dup_count_complex_roots([1, -1, 0, 0, 4, -4, 0], ZZ, c, d) == 3 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z+1) assert dup_count_complex_roots([1, 1, 0, 0, 4, 4], ZZ, a, b) == 5 assert dup_count_complex_roots([1, 1, 0, 0, 4, 4], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z+1)*z assert dup_count_complex_roots([1, 1, 0, 0, 4, 4, 0], ZZ, a, b) == 6 assert dup_count_complex_roots([1, 1, 0, 0, 4, 4, 0], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*(z+1) assert dup_count_complex_roots([1, 0, -1, 0, 4, 0, -4], ZZ, a, b) == 6 assert dup_count_complex_roots([1, 0, -1, 0, 4, 0, -4], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*(z+1)*z assert dup_count_complex_roots([1, 0, -1, 0, 4, 0, -4, 0], ZZ, a, b) == 7 assert dup_count_complex_roots([1, 0, -1, 0, 4, 0, -4, 0], ZZ, c, d) == 3 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*(z+1)*(z-I)*(z+I) assert dup_count_complex_roots([1, 0, 0, 0, 3, 0, 0, 0, -4], ZZ, a, b) == 8 assert dup_count_complex_roots([1, 0, 0, 0, 3, 0, 0, 0, -4], ZZ, c, d) == 3
def test_dup_count_complex_roots_6(): # (z-I-1)*(z+I-1) assert dup_count_complex_roots([1, -2, 2], ZZ, a, b) == 2 assert dup_count_complex_roots([1, -2, 2], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-1) assert dup_count_complex_roots([1, -3, 4, -2], ZZ, a, b) == 3 assert dup_count_complex_roots([1, -3, 4, -2], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-1)*z assert dup_count_complex_roots([1, -3, 4, -2, 0], ZZ, a, b) == 4 assert dup_count_complex_roots([1, -3, 4, -2, 0], ZZ, c, d) == 3 # (z-I-1)*(z+I-1)*(z+1) assert dup_count_complex_roots([1, -1, 0, 2], ZZ, a, b) == 3 assert dup_count_complex_roots([1, -1, 0, 2], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z+1)*z assert dup_count_complex_roots([1, -1, 0, 2, 0], ZZ, a, b) == 4 assert dup_count_complex_roots([1, -1, 0, 2, 0], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-1)*(z+1) assert dup_count_complex_roots([1, -2, 1, 2, -2], ZZ, a, b) == 4 assert dup_count_complex_roots([1, -2, 1, 2, -2], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-1)*(z+1)*z assert dup_count_complex_roots([1, -2, 1, 2, -2, 0], ZZ, a, b) == 5 assert dup_count_complex_roots([1, -2, 1, 2, -2, 0], ZZ, c, d) == 3
def test_dup_count_complex_roots_5(): # (z-I+1)*(z+I+1) assert dup_count_complex_roots([1, 2, 2], ZZ, a, b) == 2 assert dup_count_complex_roots([1, 2, 2], ZZ, c, d) == 0 # (z-I+1)*(z+I+1)*(z-1) assert dup_count_complex_roots([1, 1, 0, -2], ZZ, a, b) == 3 assert dup_count_complex_roots([1, 1, 0, -2], ZZ, c, d) == 1 # (z-I+1)*(z+I+1)*(z-1)*z assert dup_count_complex_roots([1, 1, 0, -2, 0], ZZ, a, b) == 4 assert dup_count_complex_roots([1, 1, 0, -2, 0], ZZ, c, d) == 2 # (z-I+1)*(z+I+1)*(z+1) assert dup_count_complex_roots([1, 3, 4, 2], ZZ, a, b) == 3 assert dup_count_complex_roots([1, 3, 4, 2], ZZ, c, d) == 0 # (z-I+1)*(z+I+1)*(z+1)*z assert dup_count_complex_roots([1, 3, 4, 2, 0], ZZ, a, b) == 4 assert dup_count_complex_roots([1, 3, 4, 2, 0], ZZ, c, d) == 1 # (z-I+1)*(z+I+1)*(z-1)*(z+1) assert dup_count_complex_roots([1, 2, 1, -2, -2], ZZ, a, b) == 4 assert dup_count_complex_roots([1, 2, 1, -2, -2], ZZ, c, d) == 1 # (z-I+1)*(z+I+1)*(z-1)*(z+1)*z assert dup_count_complex_roots([1, 2, 1, -2, -2, 0], ZZ, a, b) == 5 assert dup_count_complex_roots([1, 2, 1, -2, -2, 0], ZZ, c, d) == 2
def test_dup_count_complex_roots_4(): # (z-I)*(z+I) assert dup_count_complex_roots([1, 0, 1], ZZ, a, b) == 2 assert dup_count_complex_roots([1, 0, 1], ZZ, c, d) == 1 # (z-I)*(z+I)*(z) assert dup_count_complex_roots([1, 0, 1, 0], ZZ, a, b) == 3 assert dup_count_complex_roots([1, 0, 1, 0], ZZ, c, d) == 2 # (z-I)*(z+I)*(-z) assert dup_count_complex_roots([-1, 0, -1, 0], ZZ, a, b) == 3 assert dup_count_complex_roots([-1, 0, -1, 0], ZZ, c, d) == 2 # (z-I)*(z+I)*(z-1) assert dup_count_complex_roots([1, -1, 1, -1], ZZ, a, b) == 3 assert dup_count_complex_roots([1, -1, 1, -1], ZZ, c, d) == 2 # (z-I)*(z+I)*(z-1)*(z) assert dup_count_complex_roots([1, -1, 1, -1, 0], ZZ, a, b) == 4 assert dup_count_complex_roots([1, -1, 1, -1, 0], ZZ, c, d) == 3 # (z-I)*(z+I)*(z-1)*(-z) assert dup_count_complex_roots([-1, 1, -1, 1, 0], ZZ, a, b) == 4 assert dup_count_complex_roots([-1, 1, -1, 1, 0], ZZ, c, d) == 3 # (z-I)*(z+I)*(z-1)*(z+1) assert dup_count_complex_roots([1, 0, 0, 0, -1], ZZ, a, b) == 4 assert dup_count_complex_roots([1, 0, 0, 0, -1], ZZ, c, d) == 2 # (z-I)*(z+I)*(z-1)*(z+1)*(z) assert dup_count_complex_roots([1, 0, 0, 0, -1, 0], ZZ, a, b) == 5 assert dup_count_complex_roots([1, 0, 0, 0, -1, 0], ZZ, c, d) == 3 # (z-I)*(z+I)*(z-1)*(z+1)*(-z) assert dup_count_complex_roots([-1, 0, 0, 0, 1, 0], ZZ, a, b) == 5 assert dup_count_complex_roots([-1, 0, 0, 0, 1, 0], ZZ, c, d) == 3
def test_dup_count_complex_roots_4(): # (z-I)*(z+I) assert dup_count_complex_roots([1,0,1], ZZ, a, b) == 2 assert dup_count_complex_roots([1,0,1], ZZ, c, d) == 1 # (z-I)*(z+I)*(z) assert dup_count_complex_roots([1,0,1,0], ZZ, a, b) == 3 assert dup_count_complex_roots([1,0,1,0], ZZ, c, d) == 2 # (z-I)*(z+I)*(-z) assert dup_count_complex_roots([-1,0,-1,0], ZZ, a, b) == 3 assert dup_count_complex_roots([-1,0,-1,0], ZZ, c, d) == 2 # (z-I)*(z+I)*(z-1) assert dup_count_complex_roots([1,-1,1,-1], ZZ, a, b) == 3 assert dup_count_complex_roots([1,-1,1,-1], ZZ, c, d) == 2 # (z-I)*(z+I)*(z-1)*(z) assert dup_count_complex_roots([1,-1,1,-1,0], ZZ, a, b) == 4 assert dup_count_complex_roots([1,-1,1,-1,0], ZZ, c, d) == 3 # (z-I)*(z+I)*(z-1)*(-z) assert dup_count_complex_roots([-1,1,-1,1,0], ZZ, a, b) == 4 assert dup_count_complex_roots([-1,1,-1,1,0], ZZ, c, d) == 3 # (z-I)*(z+I)*(z-1)*(z+1) assert dup_count_complex_roots([1,0,0,0,-1], ZZ, a, b) == 4 assert dup_count_complex_roots([1,0,0,0,-1], ZZ, c, d) == 2 # (z-I)*(z+I)*(z-1)*(z+1)*(z) assert dup_count_complex_roots([1,0,0,0,-1,0], ZZ, a, b) == 5 assert dup_count_complex_roots([1,0,0,0,-1,0], ZZ, c, d) == 3 # (z-I)*(z+I)*(z-1)*(z+1)*(-z) assert dup_count_complex_roots([-1,0,0,0,1,0], ZZ, a, b) == 5 assert dup_count_complex_roots([-1,0,0,0,1,0], ZZ, c, d) == 3
def test_dup_count_complex_roots_5(): # (z-I+1)*(z+I+1) assert dup_count_complex_roots([1,2,2], ZZ, a, b) == 2 assert dup_count_complex_roots([1,2,2], ZZ, c, d) == 0 # (z-I+1)*(z+I+1)*(z-1) assert dup_count_complex_roots([1,1,0,-2], ZZ, a, b) == 3 assert dup_count_complex_roots([1,1,0,-2], ZZ, c, d) == 1 # (z-I+1)*(z+I+1)*(z-1)*z assert dup_count_complex_roots([1,1,0,-2,0], ZZ, a, b) == 4 assert dup_count_complex_roots([1,1,0,-2,0], ZZ, c, d) == 2 # (z-I+1)*(z+I+1)*(z+1) assert dup_count_complex_roots([1,3,4,2], ZZ, a, b) == 3 assert dup_count_complex_roots([1,3,4,2], ZZ, c, d) == 0 # (z-I+1)*(z+I+1)*(z+1)*z assert dup_count_complex_roots([1,3,4,2,0], ZZ, a, b) == 4 assert dup_count_complex_roots([1,3,4,2,0], ZZ, c, d) == 1 # (z-I+1)*(z+I+1)*(z-1)*(z+1) assert dup_count_complex_roots([1,2,1,-2,-2], ZZ, a, b) == 4 assert dup_count_complex_roots([1,2,1,-2,-2], ZZ, c, d) == 1 # (z-I+1)*(z+I+1)*(z-1)*(z+1)*z assert dup_count_complex_roots([1,2,1,-2,-2,0], ZZ, a, b) == 5 assert dup_count_complex_roots([1,2,1,-2,-2,0], ZZ, c, d) == 2
def test_dup_count_complex_roots_exclude(): f = [1,0,0,0,-1,0] # z*(z-1)*(z+1)*(z-I)*(z+I) a, b = (-QQ(1), QQ(0)), (QQ(1), QQ(1)) assert dup_count_complex_roots(f, ZZ, a, b) == 4 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['S']) == 3 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['N']) == 3 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['S', 'N']) == 2 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['E']) == 4 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['W']) == 4 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['E', 'W']) == 4 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['N', 'S', 'E', 'W']) == 2 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SW']) == 3 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SE']) == 3 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SW', 'SE']) == 2 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SW', 'SE', 'S']) == 1 assert dup_count_complex_roots(f, ZZ, a, b, exclude=['SW', 'SE', 'S', 'N']) == 0 a, b = (QQ(0), QQ(0)), (QQ(1), QQ(1)) assert dup_count_complex_roots(f, ZZ, a, b, exclude=True) == 1
def test_dup_count_complex_roots_6(): # (z-I-1)*(z+I-1) assert dup_count_complex_roots([1,-2,2], ZZ, a, b) == 2 assert dup_count_complex_roots([1,-2,2], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-1) assert dup_count_complex_roots([1,-3,4,-2], ZZ, a, b) == 3 assert dup_count_complex_roots([1,-3,4,-2], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-1)*z assert dup_count_complex_roots([1,-3,4,-2,0], ZZ, a, b) == 4 assert dup_count_complex_roots([1,-3,4,-2,0], ZZ, c, d) == 3 # (z-I-1)*(z+I-1)*(z+1) assert dup_count_complex_roots([1,-1,0,2], ZZ, a, b) == 3 assert dup_count_complex_roots([1,-1,0,2], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z+1)*z assert dup_count_complex_roots([1,-1,0,2,0], ZZ, a, b) == 4 assert dup_count_complex_roots([1,-1,0,2,0], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-1)*(z+1) assert dup_count_complex_roots([1,-2,1,2,-2], ZZ, a, b) == 4 assert dup_count_complex_roots([1,-2,1,2,-2], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-1)*(z+1)*z assert dup_count_complex_roots([1,-2,1,2,-2,0], ZZ, a, b) == 5 assert dup_count_complex_roots([1,-2,1,2,-2,0], ZZ, c, d) == 3
def test_dup_count_complex_roots_7(): # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1) assert dup_count_complex_roots([1,0,0,0,4], ZZ, a, b) == 4 assert dup_count_complex_roots([1,0,0,0,4], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-2) assert dup_count_complex_roots([1,-2,0,0,4,-8], ZZ, a, b) == 4 assert dup_count_complex_roots([1,-2,0,0,4,-8], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z**2-2) assert dup_count_complex_roots([1,0,-2,0,4,0,-8], ZZ, a, b) == 4 assert dup_count_complex_roots([1,0,-2,0,4,0,-8], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1) assert dup_count_complex_roots([1,-1,0,0,4,-4], ZZ, a, b) == 5 assert dup_count_complex_roots([1,-1,0,0,4,-4], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*z assert dup_count_complex_roots([1,-1,0,0,4,-4,0], ZZ, a, b) == 6 assert dup_count_complex_roots([1,-1,0,0,4,-4,0], ZZ, c, d) == 3 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z+1) assert dup_count_complex_roots([1,1,0,0,4,4], ZZ, a, b) == 5 assert dup_count_complex_roots([1,1,0,0,4,4], ZZ, c, d) == 1 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z+1)*z assert dup_count_complex_roots([1,1,0,0,4,4,0], ZZ, a, b) == 6 assert dup_count_complex_roots([1,1,0,0,4,4,0], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*(z+1) assert dup_count_complex_roots([1,0,-1,0,4,0,-4], ZZ, a, b) == 6 assert dup_count_complex_roots([1,0,-1,0,4,0,-4], ZZ, c, d) == 2 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*(z+1)*z assert dup_count_complex_roots([1,0,-1,0,4,0,-4,0], ZZ, a, b) == 7 assert dup_count_complex_roots([1,0,-1,0,4,0,-4,0], ZZ, c, d) == 3 # (z-I-1)*(z+I-1)*(z-I+1)*(z+I+1)*(z-1)*(z+1)*(z-I)*(z+I) assert dup_count_complex_roots([1,0,0,0,3,0,0,0,-4], ZZ, a, b) == 8 assert dup_count_complex_roots([1,0,0,0,3,0,0,0,-4], ZZ, c, d) == 3