code: def make_node(self, pvals, unis):
      ctx_name = infer_context_name(pvals, unis)
      pvals = as_gpuarray_variable(pvals, ctx_name)
      unis = as_gpuarray_variable(unis, ctx_name)
      assert pvals.dtype in ["float32", "float16", "float64"]
      assert unis.dtype in ["float32", "float16", "float64"]
  
      if pvals.ndim != 2:
          raise NotImplementedError(
              "pvals ndim should be 2", pvals.ndim
          )
      if unis.ndim != 1:
          raise NotImplementedError("unis ndim should be 1", unis.ndim)
      if self.odtype == "auto":
          odtype = pvals.dtype
      else:
          odtype = self.odtype
      br = (pvals.broadcastable[1], pvals.broadcastable[0])
      out = GpuArrayType(
          broadcastable=br, dtype=odtype, context_name=ctx_name
      )()
  
      return Apply(self, [pvals, unis], [out])
  
imports: from __future__ import absolute_import, print_function, division
  import warnings
  import theano
  import theano.sandbox.multinomial
  from theano import Apply
  from theano.gof import Op
  from theano.tensor import NotScalarConstantError, get_scalar_constant_value
  from .basic_ops import as_gpuarray_variable, infer_context_name, GpuKernelBase, Kernel, gpuarray_helper_inc_dir
  from .opt import register_opt, op_lifter, register_opt2
  from .type import GpuArrayType
  from .elemwise import GpuDimShuffle
  from theano.scalar import as_scalar
  from .fp16_help import write_w, load_w, work_dtype
label_desc: Use image node_id 5 for calling the GPUAMultinomialFromUniform obj's underlying member method code with example usage: obj.make_node(pvals, unis) and returns: Apply