code: def backprop_gelu(
      dY,
      X,
      *,
      inplace: bool = False,
      threshold=6.0,
      threads_per_block=128,
      num_blocks=128,
  ):
      _is_float_array(dY)
      _is_float_array(X, shape=dY.shape)
  
      out = dY
      if not inplace:
          out = _alloc_like(dY, zeros=False)
  
      if dY.dtype == "float32":
          backprop_gelu_kernel_float(
              (num_blocks,),
              (threads_per_block,),
              (out, dY, X, threshold, out.size),
          )
      else:
          backprop_gelu_kernel_double(
              (num_blocks,),
              (threads_per_block,),
              (out, dY, X, threshold, out.size),
          )
  
      return out
  
imports: import operator
  import re
  from collections import defaultdict
  from functools import reduce
  from pathlib import Path
  from typing import Callable, Optional, Tuple
  import numpy
  from ..compat import cupy, has_cupy_gpu
label_desc: Use image node_id 22 for calling a global function with example usage: backprop_gelu(dY, X) and returns: out