class_docstr: The coordinate descent tuner. Tune one field/coordinate at a time.
  
  TODO will it be necessary to tune multiple fields simultaneously.
  
  
  TODO: what if both increasing and decreasing a field can improve perf.
        i.e., there are multiple local optima..
class_docstr_tok: ["The","coordinate","descent","tuner",".","Tune","one","field\/coordinate","at","a","time",".","TODO","will","it","be","necessary","to","tune","multiple","fields","simultaneously",".","TODO",":","what","if","both","increasing","and","decreasing","a","field","can","improve","perf",".","i.e.",",","there","are","multiple","local","optima",".."]
code: def tunable_fields(self):
      out = [
          "XBLOCK",
          "YBLOCK",
          "ZBLOCK",
          # NOTE: we should not tune RBLOCK for persistent reduction.
          # We rely on the fact that persistent reduction's triton.Config
          # does not have the RBLOCK field to guarantee that.
          "RBLOCK",
          # the following 3 are for mm
          "BLOCK_M",
          "BLOCK_N",
          "BLOCK_K",
          "num_warps",
      ]
      if self.is_mm:
          out.append("num_stages")
  
      return out
  
imports: import copy
  import itertools
  import logging
  from typing import Callable, Optional
  from torch.utils._triton import has_triton
  from .utils import red_text, triton_config_to_hashable
  from .None import config
label_desc: Use image node_id 10 for calling the CoordescTuner obj's underlying member method code with example usage: obj.tunable_fields() and returns: out