code: def test_simple_products():
      assert product(2, (k, a, n)) == 2 ** (n - a + 1)
      assert product(k, (k, 1, n)) == factorial(n)
      assert product(k**3, (k, 1, n)) == factorial(n) ** 3
  
      assert product(k + 1, (k, 0, n - 1)) == factorial(n)
      assert product(k + 1, (k, a, n - 1)) == rf(1 + a, n - a)
  
      assert product(cos(k), (k, 0, 5)) == cos(1) * cos(2) * cos(
          3
      ) * cos(4) * cos(5)
      assert product(cos(k), (k, 3, 5)) == cos(3) * cos(4) * cos(5)
      assert product(cos(k), (k, 1, Rational(5, 2))) != cos(1) * cos(2)
  
      assert isinstance(product(k**k, (k, 1, n)), Product)
  
      assert Product(x**k, (k, 1, n)).variables == [k]
  
      raises(ValueError, lambda: Product(n))
      raises(ValueError, lambda: Product(n, k))
      raises(ValueError, lambda: Product(n, k, 1))
      raises(ValueError, lambda: Product(n, k, 1, 10))
      raises(ValueError, lambda: Product(n, (k, 1)))
  
      assert product(1, (n, 1, oo)) == 1  # issue 8301
      assert product(2, (n, 1, oo)) is oo
      assert product(-1, (n, 1, oo)).func is Product
  
imports: from sympy.concrete.products import Product, product
  from sympy.concrete.summations import Sum
  from sympy.core.function import Derivative, Function, diff
  from sympy.core.numbers import Rational, oo, pi
  from sympy.core.singleton import S
  from sympy.core.symbol import Dummy, Symbol, symbols
  from sympy.functions.combinatorial.factorials import rf, factorial
  from sympy.functions.elementary.exponential import exp, log
  from sympy.functions.elementary.miscellaneous import sqrt
  from sympy.functions.elementary.trigonometric import cos, sin
  from sympy.functions.special.tensor_functions import KroneckerDelta
  from sympy.simplify.combsimp import combsimp
  from sympy.simplify.simplify import simplify
  from sympy.testing.pytest import raises
label_desc: Use image node_id 4 for calling a global function with example usage: test_simple_products() without return types