code: def register_unary_op(op):
      """
      Register a lowering implementation for the
      unary op `op`.
  
      Because the lowering implementations compile the final
      op separately using a lambda and compile_internal, `op`
      needs to be tied to each lowering implementation using
      a closure.
  
      This function makes and lowers a closure for one op.
  
      """
      to_lower_op = make_unary_op(op)
      cuda_lower(op, MaskedType)(to_lower_op)
  
imports: import operator
  from llvmlite import ir
  from numba.core import cgutils
  from numba.core.typing import signature
  from numba.cuda.cudaimpl import lower, registry
  from numba.extending import lower_builtin, types
  from cudf.core.udf import api
  from cudf.core.udf._ops import arith_ops, bitwise_ops, comparison_ops, unary_ops
  from cudf.core.udf.masked_typing import MaskedType, NAType, _supported_masked_types
label_desc: Use image node_id 5 for calling a global function with example usage: register_unary_op(op) without return types