code: def product(*args, **kwargs):
      r"""
      Compute the product.
  
      Explanation
      ===========
  
      The notation for symbols is similar to the notation used in Sum or
      Integral. product(f, (i, a, b)) computes the product of f with
      respect to i from a to b, i.e.,
  
      ::
  
                                       b
                                     _____
          product(f(n), (i, a, b)) = |   | f(n)
                                     |   |
                                     i = a
  
      If it cannot compute the product, it returns an unevaluated Product object.
      Repeated products can be computed by introducing additional symbols tuples::
  
      Examples
      ========
  
      >>> from sympy import product, symbols
      >>> i, n, m, k = symbols('i n m k', integer=True)
  
      >>> product(i, (i, 1, k))
      factorial(k)
      >>> product(m, (i, 1, k))
      m**k
      >>> product(i, (i, 1, k), (k, 1, n))
      Product(factorial(k), (k, 1, n))
  
      """
  
      prod = Product(*args, **kwargs)
  
      if isinstance(prod, Product):
          return prod.doit(deep=False)
      else:
          return prod
  
imports: from typing import Tuple
  from .expr_with_intlimits import ExprWithIntLimits
  from .summations import Sum, summation, _dummy_with_inherited_properties_concrete
  from sympy.core.expr import Expr
  from sympy.core.exprtools import factor_terms
  from sympy.core.function import Derivative
  from sympy.core.mul import Mul
  from sympy.core.singleton import S
  from sympy.core.symbol import Dummy, Symbol
  from sympy.functions.combinatorial.factorials import RisingFactorial
  from sympy.functions.elementary.exponential import exp, log
  from sympy.functions.special.tensor_functions import KroneckerDelta
  from sympy.polys import quo, roots
label_desc: Use image node_id 1 for calling a global function with example usage: product() and returns: prod, prod