code: def get_tv_grad_executor(img, ctx, tv_weight):
      
      if tv_weight <= 0.0:
          return None
      nchannel = img.shape[1]
      simg = mx.sym.Variable("img")
      skernel = mx.sym.Variable("kernel")
      channels = mx.sym.SliceChannel(simg, num_outputs=nchannel)
      out = mx.sym.Concat(*[
          mx.sym.Convolution(data=channels[i], weight=skernel,
                             num_filter=1,
                             kernel=(3, 3), pad=(1,1),
                             no_bias=True, stride=(1,1))
          for i in range(nchannel)])
      kernel = mx.nd.array(np.array([[0, -1, 0],
                                     [-1, 4, -1],
                                     [0, -1, 0]])
                           .reshape((1, 1, 3, 3)),
                           ctx) / 8.0
      out = out * tv_weight
      return out.bind(ctx, args={"img": img,
                                 "kernel": kernel})
docs: create TV gradient executor with input binded on img