code: def gather(
      env, exec_policy, map_first, map_last, input_first, result
  ):
      """Copies elements from source into destination  according to a map."""
      _assert_exec_policy_type(exec_policy)
      _assert_pointer_type(map_first)
      _assert_same_type(map_first, map_last)
      _assert_same_pointer_type(input_first, result)
      args = [exec_policy, map_first, map_last, input_first, result]
      params = ", ".join([a.code for a in args])
      return _Data(f"thrust::gather({params})", result.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 17 for calling a global function with example usage: gather(env, exec_policy, map_first, map_last, input_first, result) and returns: _Data