class_docstr: Implement CrossentropySoftmax1HotWithBiasDx on the gpu.
  
  Gradient wrt x of the CrossentropySoftmax1Hot Op.
code: def gpu_kernels(self, node, nodename):
      dtype_dnll = node.inputs[0].dtype
      dtype_sm = node.inputs[1].dtype
      dtype_y_idx = node.inputs[2].dtype
      dtype_dx = node.outputs[0].dtype
      work_dnll = work_dtype(dtype_dnll)
      load_dnll = load_w(dtype_dnll)
      load_sm = load_w(dtype_sm)
      write_dx = write_w(dtype_dx)
      flags = Kernel.get_flags(
          dtype_dnll, dtype_sm, dtype_y_idx, dtype_dx
      )
      wtype_dnll = gpuarray.dtype_to_ctype(work_dnll)
      type_dnll = gpuarray.dtype_to_ctype(dtype_dnll)
      type_sm = gpuarray.dtype_to_ctype(dtype_sm)
      type_y_idx = gpuarray.dtype_to_ctype(dtype_y_idx)
      type_dx = gpuarray.dtype_to_ctype(dtype_dx)
      kname = "kCrossEntropySoftmax1HotWithBiasDx"
      k_var = "kCrossEntropySoftmax1HotWithBiasDx_" + nodename
      params = [
          gpuarray.SIZE,
          gpuarray.SIZE,
          gpuarray.GpuArray,
          gpuarray.SIZE,
          gpuarray.SSIZE,
          gpuarray.GpuArray,
          gpuarray.SIZE,
          gpuarray.SSIZE,
          gpuarray.SSIZE,
          gpuarray.GpuArray,
          gpuarray.SIZE,
          gpuarray.SSIZE,
          gpuarray.GpuArray,
          gpuarray.SIZE,
          gpuarray.SSIZE,
          gpuarray.SSIZE,
      ]
      sio = StringIO()
      print(
          """#include "cluda.h"
  
          KERNEL void %(kname)s(
             const ga_size N, const ga_size K,
             GLOBAL_MEM const %(type_dnll)s* dnll, const ga_size offset_dnll, const ga_ssize dnll_s0,
             GLOBAL_MEM const %(type_sm)s* sm, const ga_size offset_sm, const ga_ssize sm_s0, const ga_ssize sm_s1,
             GLOBAL_MEM const %(type_y_idx)s* y_idx, const ga_size offset_y_idx, const ga_ssize y_idx_s0,
             GLOBAL_MEM %(type_dx)s* dx, const ga_size offset_dx, const ga_ssize dx_s0, const ga_ssize dx_s1)
          {
              dnll = (GLOBAL_MEM const %(type_dnll)s *)(((GLOBAL_MEM char *)dnll)+offset_dnll);
              sm = (GLOBAL_MEM const %(type_sm)s *)(((GLOBAL_MEM char *)sm)+offset_sm);
              y_idx = (GLOBAL_MEM const %(type_y_idx)s *)(((GLOBAL_MEM char *)y_idx)+offset_y_idx);
              dx = (GLOBAL_MEM %(type_dx)s *)(((GLOBAL_MEM char *)dx)+offset_dx);
              for (ga_int i = GID_0; i < N; i += GDIM_0)
              {
                  %(wtype_dnll)s dnll_i = %(load_dnll)s(dnll[i * dnll_s0]);
                  %(type_y_idx)s y_i = y_idx[i * y_idx_s0];
                  for (ga_int j = LID_0; j < K; j += LDIM_0)
                  {
                      if (y_i == j)
                      {
                          dx[i * dx_s0 + j * dx_s1] =
                              %(write_dx)s(dnll_i *
                                (%(load_sm)s(sm[i * sm_s0 + j * sm_s1]) - 1.0));
                      }
                      else
                      {
                          dx[i * dx_s0 + j * dx_s1] =
                              %(write_dx)s(dnll_i *
                                %(load_sm)s(sm[i * sm_s0 + j * sm_s1]));
                      }
                  }
              }
          }
          """
          % locals(),
          file=sio,
      )
      return [
          Kernel(
              code=sio.getvalue(),
              name=kname,
              params=params,
              flags=flags,
              objvar=k_var,
          )
      ]
  
imports: from __future__ import absolute_import, print_function, division
  import numpy
  from theano import Op, Apply
  from six import StringIO
  from .basic_ops import as_gpuarray_variable, GpuKernelBase, Kernel, gpuarray_helper_inc_dir, infer_context_name
  from .type import GpuArrayType
  from .fp16_help import work_dtype, load_w, write_w
label_desc: Use image node_id 5 for calling the GpuCrossentropySoftmax1HotWithBiasDx obj's underlying member method code with example usage: obj.gpu_kernels(node, nodename) and returns: list