code: def depthwise_conv2d(
      x: torch.Tensor,
      filters: torch.Tensor,
      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[torch.Tensor] = None,
  ) -> torch.Tensor:
      strides = [strides] * 2 if isinstance(strides, int) else strides
      dilations = (
          [dilations] * 2 if isinstance(dilations, int) else dilations
      )
      if data_format == "NHWC":
          x = x.permute(0, 3, 1, 2)
      filters = (
          ivy.squeeze(filters, axis=3).to_native()
          if filters.ndim == 4
          else filters
      )
      filters = torch.unsqueeze(filters, -1)
      dims_in = filters.shape[-2]
      filters = filters.permute(2, 3, 0, 1)
      x, padding = _pad_before_conv(
          x, filters, strides, padding, 2, dilations, "channel_first"
      )
      # noinspection PyArgumentEqualDefault
      res = torch.nn.functional.conv2d(
          x, filters, None, strides, padding, dilations, dims_in
      )
      if data_format == "NHWC":
          return res.permute(0, 2, 3, 1)
      return res
  
imports: from typing import Optional, Tuple, Union, Sequence
  import torch
  import ivy
  from ivy.func_wrapper import with_unsupported_dtypes, with_supported_dtypes
  from .None import backend_version
  from ivy.functional.ivy.layers import _get_embed_dim, _handle_padding, _deconv_length
label_desc: Use image node_id 13 for calling a global function with example usage: depthwise_conv2d() and returns: res, res