code: def _new_alloc_handle(stype, shape, ctx, delay_alloc, dtype, aux_types, aux_shapes=None):
      
      hdl = NDArrayHandle()
      for aux_t in aux_types:
          if np.dtype(aux_t) != np.dtype("int64"):
              raise NotImplementedError("only int64 is supported for aux types")
      aux_type_ids = [int(_DTYPE_NP_TO_MX[np.dtype(aux_t).type]) for aux_t in aux_types]
      aux_shapes = [(0,) for aux_t in aux_types] if aux_shapes is None else aux_shapes
      aux_shape_lens = [len(aux_shape) for aux_shape in aux_shapes]
      aux_shapes = py_sum(aux_shapes, ())
      num_aux = mx_uint(len(aux_types))
      check_call(_LIB.MXNDArrayCreateSparseEx(
          ctypes.c_int(int(_STORAGE_TYPE_STR_TO_ID[stype])),
          c_array_buf(mx_uint, native_array('I', shape)),
          mx_uint(len(shape)),
          ctypes.c_int(ctx.device_typeid),
          ctypes.c_int(ctx.device_id),
          ctypes.c_int(int(delay_alloc)),
          ctypes.c_int(int(_DTYPE_NP_TO_MX[np.dtype(dtype).type])),
          num_aux,
          c_array_buf(ctypes.c_int, native_array('i', aux_type_ids)),
          c_array_buf(mx_uint, native_array('I', aux_shape_lens)),
          c_array_buf(mx_uint, native_array('I', aux_shapes)),
          ctypes.byref(hdl)))
      return hdl
docs: Return a new handle with specified storage type, shape, dtype and context.
  
      Empty handle is only used to hold results
  
      Returns
      -------
      handle
          A new empty ndarray handle