code: def test_dup_count_complex_roots_5():
      R, x = ring("x", ZZ)
  
      # (z-I+1)*(z+I+1)
      f = x**2 + 2 * x + 2
      assert R.dup_count_complex_roots(f, a, b) == 2
      assert R.dup_count_complex_roots(f, c, d) == 0
  
      # (z-I+1)*(z+I+1)*(z-1)
      f = x**3 + x**2 - 2
      assert R.dup_count_complex_roots(f, a, b) == 3
      assert R.dup_count_complex_roots(f, c, d) == 1
  
      # (z-I+1)*(z+I+1)*(z-1)*z
      f = x**4 + x**3 - 2 * x
      assert R.dup_count_complex_roots(f, a, b) == 4
      assert R.dup_count_complex_roots(f, c, d) == 2
  
      # (z-I+1)*(z+I+1)*(z+1)
      f = x**3 + 3 * x**2 + 4 * x + 2
      assert R.dup_count_complex_roots(f, a, b) == 3
      assert R.dup_count_complex_roots(f, c, d) == 0
  
      # (z-I+1)*(z+I+1)*(z+1)*z
      f = x**4 + 3 * x**3 + 4 * x**2 + 2 * x
      assert R.dup_count_complex_roots(f, a, b) == 4
      assert R.dup_count_complex_roots(f, c, d) == 1
  
      # (z-I+1)*(z+I+1)*(z-1)*(z+1)
      f = x**4 + 2 * x**3 + x**2 - 2 * x - 2
      assert R.dup_count_complex_roots(f, a, b) == 4
      assert R.dup_count_complex_roots(f, c, d) == 1
  
      # (z-I+1)*(z+I+1)*(z-1)*(z+1)*z
      f = x**5 + 2 * x**4 + x**3 - 2 * x**2 - 2 * x
      assert R.dup_count_complex_roots(f, a, b) == 5
      assert R.dup_count_complex_roots(f, c, d) == 2
  
imports: from sympy.polys.rings import ring
  from sympy.polys.domains import ZZ, QQ, ZZ_I, EX
  from sympy.polys.polyerrors import DomainError, RefinementFailed, PolynomialError
  from sympy.polys.rootisolation import dup_cauchy_upper_bound, dup_cauchy_lower_bound, dup_mignotte_sep_bound_squared
  from sympy.testing.pytest import raises
label_desc: Use image node_id 15 for calling a global function with example usage: test_dup_count_complex_roots_5() without return types