class_docstr: Ufunc or elementwise kernel with types.
      
code: def __init__(self, ufunc_routines, in_params, out_params, ashape):
      # The `in_params` and `out_params` should be already broadcasted to
      # `ashape`, but they don't guarantee to be exactly same as
      # `param.ashape`.
  
      _fusion_thread_local.check_not_runtime()
      assert isinstance(ufunc_routines, list)
      assert all(isinstance(r, _UfuncRoutine) for r in ufunc_routines)
      assert isinstance(ashape, tuple)
  
      self.ops = ufunc_routines
      self.in_params = _VariableSet(*in_params)
      self.out_params = _VariableSet(*out_params)
      self.ashape = ashape
  
imports: import string
  import numpy
  from cupy._core import _codeblock
  from cupy._core._fusion_variable import _TraceVariable
  from cupy._core._fusion_variable import _TraceArray
  from cupy._core._fusion_variable import _VariableSet
  from cupy._core import _fusion_thread_local
  from cupy._core import _kernel
  from cupy._core import _reduction
  from cupy._core._scalar import get_typename
label_desc: Use image node_id 1 to create a new _ElementwiseTraceOp object  with example: obj = _ElementwiseTraceOp(ufunc_routines, in_params, out_params, ashape)