code: def _call(a, b, acc_dtype, allow_tf32, fp8_fast_accum, output_dtype):
      device = a.device
      # handle non-contiguous inputs if necessary
      if a.stride(0) > 1 and a.stride(1) > 1:
          a = a.contiguous()
      if b.stride(0) > 1 and b.stride(1) > 1:
          b = b.contiguous()
      # checks constraints
      assert a.shape[1] == b.shape[0], "incompatible dimensions"
      M, K = a.shape
      _, N = b.shape
  
      # common type between a and b
      ab_dtype = get_higher_dtype(a.dtype, b.dtype)
  
      # allocates output
      if output_dtype is None:
          output_dtype = ab_dtype
  
      c = torch.empty((M, N), device=device, dtype=output_dtype)
  
      # Allowed types for acc_type given the types of a and b.
      supported_acc_dtypes = {
          torch.float16: (torch.float32, torch.float16),
          torch.bfloat16: (torch.float32, torch.bfloat16),
          torch.float32: (torch.float32,),
          torch.int8: (torch.int32,),
      }
  
      if acc_dtype is None:
          acc_dtype = supported_acc_dtypes[ab_dtype][0]
      else:
          assert isinstance(
              acc_dtype, torch.dtype
          ), "acc_dtype must be a torch.dtype"
          assert (
              acc_dtype in supported_acc_dtypes[a.dtype]
          ), "acc_dtype not compatible with the type of a"
          assert (
              acc_dtype in supported_acc_dtypes[b.dtype]
          ), "acc_dtype not compatible with the type of b"
  
      def to_tl_type(ty):
          return getattr(tl, str(ty).split(".")[-1])
  
      acc_dtype = to_tl_type(acc_dtype)
      ab_dtype = to_tl_type(ab_dtype)
      output_dtype = to_tl_type(output_dtype)
  
      # Tensor cores support input with mixed float8 types.
      if a.dtype in [tl.float8e4nv, tl.float8e5] and b.dtype in [
          tl.float8e4nv,
          tl.float8e5,
      ]:
          ab_dtype = None
      # launch kernel
      grid = lambda META: (
          cdiv(M, META["BLOCK_M"]) * cdiv(N, META["BLOCK_N"]),
          META["SPLIT_K"],
      )
      _kernel[grid](
          a,
          b,
          c,
          M,
          N,
          K,  #
          a.stride(0),
          a.stride(1),  #
          b.stride(0),
          b.stride(1),  #
          c.stride(0),
          c.stride(1),  #
          acc_dtype=acc_dtype,  #
          allow_tf32=allow_tf32,  #
          fp8_fast_accum=fp8_fast_accum,  #
          GROUP_M=8,
          AB_DTYPE=ab_dtype,
      )
      return c
  
file_path: triton/python/triton/ops/matmul.py
imports: import torch
  from ..None import Config, autotune, cdiv, heuristics, jit
  from ..None import language
  from .matmul_perf_model import early_config_prune, estimate_matmul_time
label_desc: Use image node_id 1 for calling the _matmul obj's underlying member method code with example usage: obj._call(a, b, acc_dtype, allow_tf32, fp8_fast_accum, output_dtype) and returns: c, getattr