code: def _depthwise_conv2d_infer_layout(workload, _):
      """Infer input/output shapes and layouts from a workload and cfg.
  
      Parameters
      ----------
      workload : tuple
          conv2d workload
  
      cfg : tuple
          tvm.autotvm config
  
      Returns
      -------
      Output : [tuple of tuple and str, tuple of tuple and str]
          Input shapes and layouts, and output shapes and layouts
      """
      _, data, kernel, strides, padding, _, _ = workload
      batch_size, in_channel, in_height, in_width = data[1]
      filter_channel, channel_multiplier, k_height, k_width = kernel[1]
      out_channel = filter_channel * channel_multiplier
      out_height = (in_height + 2 * padding[0] - k_height) // strides[
          0
      ] + 1
      out_width = (in_width + 2 * padding[1] - k_width) // strides[
          1
      ] + 1
      in_shape = (batch_size, in_channel, in_height, in_width)
      out_shape = (batch_size, out_channel, out_height, out_width)
      in_layout = out_layout = "NCHW"
      return ((in_shape, in_layout),), ((out_shape, out_layout),)
  
file_path: tvm/python/tvm/topi/intel_graphics/depthwise_conv2d.py
imports: import tvm
  from tvm import te
  from tvm import autotvm
  from ..utils import traverse_inline
  from ..None import nn
  from ..nn.depthwise_conv2d import depthwise_conv2d_infer_layout
label_desc: Use image node_id 3 for calling a global function with example usage: _depthwise_conv2d_infer_layout(workload, _) and returns: in_shape,  in_layout,  out_shape,  out_layout