class_docstr: Specify the properties of an operator and
  construct the value combination of the arguments
  e.g., ldtype=["float32", "int32"], rdtype=["float16", "int16"],
  then the argument combination is
  [
      {"ldtype": "float32", "rdtype": "float16"},
      {"ldtype": "float32", "rdtype": "int16"},
      {"ldtype": "int32", "rdtype": "float16"},
      {"ldtype": "int32", "rdtype": "int16"},
  ]
  
  Parameters
  ----------
  func : function
       The function to define the operator (in tvm compute and schedule).
       It will get the argument combination extracted by this class.
  name : str
       function name.
  target : str
       {"cpu", "gpu", "cuda"}
  auto_broadcast : bool
       auto_broadcast=True allows one to implement broadcast computation
       without considering whether dimension size equals to one.
       TVM maps buffer[i][j][k] -> buffer[i][0][k] if dimension i's shape equals 1.
code: def invoke_all(self):
      for each_kwargs in self.arg_combination:
          if self.attrs_valid(**each_kwargs):
              name = self.name + "".join(
                  [
                      "{}_{}".format(key, each_kwargs[key])
                      for key in self.attrs
                  ]
              )
              if self.dispatchable is False:
                  sch, args = self.func(**each_kwargs)
                  yield sch, args, name
              else:
                  # register dispatch schedules
                  config_space = autotvm.ConfigSpace()
                  with autotvm.task.ApplyConfig(config_space):
                      sch, args = self.func(
                          fallback=False, **each_kwargs
                      )
                  for i in range(len(config_space)):
                      config_entity = config_space.get(i)
                      with autotvm.task.ApplyConfig(config_entity):
                          sch, args = self.func(
                              fallback=False, **each_kwargs
                          )
                      subname = name + "index_" + str(i)
                      yield sch, args, subname
                  # register fallback schedule
                  config_space = autotvm.ConfigSpace()
                  with autotvm.task.ApplyConfig(config_space):
                      sch, args = self.func(
                          fallback=True, **each_kwargs
                      )
                  subname = name + "fallback"
                  yield sch, args, subname
  
file_path: mxnet/contrib/tvmop/opdef.py
imports: import tvm
  import inspect
  from tvm import autotvm
  from itertools import product
label_desc: Use image node_id 3 for calling the OpDef obj's underlying member method code with example usage: obj.invoke_all() without return types