code: def inner_product(
      env,
      exec_policy,
      first1,
      last1,
      first2,
      init,
      binary_op1=None,
      binary_op2=None,
  ):
      """Calculates an inner product of the ranges."""
      _assert_exec_policy_type(exec_policy)
      _assert_same_type(first1, last1)
      _assert_same_pointer_type(first1, first2)
      if binary_op1 is not None:
          raise NotImplementedError(
              "binary_op1 option is not supported"
          )
      if binary_op2 is not None:
          raise NotImplementedError(
              "binary_op2 option is not supported"
          )
      args = [exec_policy, first1, last1, first2, init]
      params = ", ".join([a.code for a in args])
      return _Data(f"thrust::inner_product({params})", init.ctype)
  
imports: from cupyx.jit import _internal_types
  from cupyx.jit import _cuda_types
  from cupyx.jit._internal_types import Data
label_desc: Use image node_id 20 for calling a global function with example usage: inner_product(env, exec_policy, first1, last1, first2, init, binary_op1, binary_op2) and returns: _Data