code: def depthwise_conv2d(
      x: Union[tf.Tensor, tf.Variable],
      filters: Union[tf.Tensor, tf.Variable],
      strides: Union[int, Tuple[int, int]],
      padding: Union[str, int, Sequence[Tuple[int, int]]],
      /,
      *,
      data_format: str = "NHWC",
      dilations: Union[int, Tuple[int, int]] = 1,
      out: Optional[Union[tf.Tensor, tf.Variable]] = None,
  ) -> Union[tf.Tensor, tf.Variable]:
      strides = [strides] * 2 if isinstance(strides, int) else strides
      dilations = (
          [dilations] * 2 if isinstance(dilations, int) else dilations
      )
      permuted_x = False
      if data_format == "NCHW" and ivy.dev(x) == "cpu":
          x = tf.transpose(x, (0, 2, 3, 1))
          data_format = "NHWC"
          permuted_x = True
      if tf.rank(filters) == 3:
          filters = tf.expand_dims(filters, -1)
      padding = _extend_2d_padding(padding, data_format)
      strides = [1, strides[0], strides[1], 1]
      res = tf.nn.depthwise_conv2d(
          x, filters, strides, padding, data_format, dilations
      )
      if permuted_x:
          res = tf.transpose(res, (0, 3, 1, 2))
      return res
  
imports: from typing import Optional, Tuple, Union, Sequence
  import tensorflow
  from tensorflow.python.types.core import Tensor
  import ivy
  from ivy.func_wrapper import with_supported_dtypes, with_unsupported_dtypes
  from .None import backend_version
  from ivy.functional.ivy.layers import _deconv_length, _get_x_data_format
label_desc: Use image node_id 11 for calling a global function with example usage: depthwise_conv2d() and returns: res