code: def __init__(self, fn, arg_names, grid):
      from .jit import _normalize_ty  # TODO: modularize
  
      self.fn = fn
      self.arg_names = arg_names
      self.grid = grid
      __annotations__ = {
          name: _normalize_ty(ty)
          for name, ty in fn.__annotations__.items()
      }
      self.constexprs = [
          name
          for name in arg_names
          if __annotations__.get(name) == "constexpr"
      ]
  
imports: import inspect
  import numpy
  import triton
  import triton.language
  from .._C.libtriton import interpreter
label_desc: Use image node_id 1 to create a new GridExecutor object  with example: obj = GridExecutor(fn, arg_names, grid)