code: def _bench(self, *args, config, **meta):
      # check for conflicts, i.e. meta-parameters both provided
      # as kwargs and by the autotuner
      conflicts = meta.keys() & config.kwargs.keys()
      if conflicts:
          raise ValueError(
              f"Conflicting meta-parameters: {', '.join(conflicts)}."
              " Make sure that you don't re-define auto-tuned symbols."
          )
      # augment meta-parameters with tunable ones
      current = dict(meta, **config.kwargs)
      full_nargs = {**self.nargs, **current}
  
      def kernel_call():
          if config.pre_hook:
              config.pre_hook(full_nargs)
          self.pre_hook(args)
          self.fn.run(
              *args,
              num_warps=config.num_warps,
              num_stages=config.num_stages,
              num_ctas=config.num_ctas,
              enable_warp_specialization=config.enable_warp_specialization,
              # TODO: Make it configurable
              # enable_persistent=False,
              **current,
          )
          self.post_hook(args)
  
      try:
          return do_bench(
              kernel_call,
              warmup=self.num_warmups,
              rep=self.num_reps,
              quantiles=(0.5, 0.2, 0.8),
          )
      except OutOfResources:
          return [float("inf"), float("inf"), float("inf")]
  
imports: from __future__ import annotations
  import builtins
  import time
  from typing import Dict
  from ..testing import do_bench
  from .jit import KernelInterface
label_desc: Use image node_id 2 for calling the Autotuner obj's underlying member method code with example usage: obj._bench() and returns: do_bench, list