class_docstr: The output is transposed compared to MultinomialWOReplacementFromUniform.
  We must insert a Transpose op after it.
  
  The optimization that moves it to the gpu does it.
class_docstr_tok: ["The","output","is","transposed","compared","to","MultinomialWOReplacementFromUniform",".","We","must","insert","a","Transpose","op","after","it",".","The","optimization","that","moves","it","to","the","gpu","does","it","."]
code: def __init__(self, odtype, replace=False):
      Op.__init__(self)
      self.odtype = odtype
      self.replace = replace
  
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 1 to create a new GPUAChoiceFromUniform object from inherited base classes: GpuKernelBase, Op with example: obj = GPUAChoiceFromUniform(odtype, replace)