code: def convolution(
      input,
      filters,
      strides=None,
      padding="VALID",
      data_format=None,
      dilations=None,
      name=None,
  ):
      num_spatial_dims = input.ndim - 2
      if data_format is None or not data_format.startswith("NC"):
          data_format = "channel_last"
      else:
          data_format = "channel_first"
  
      channel_index = -1 if data_format == "channel_last" else 1
      input_depth = ivy.shape(input)[channel_index]
      filters_depth = ivy.shape(filters)[-2]
  
      feature_group_count = 1
      if input_depth != filters_depth:
          if input_depth % filters_depth != 0:
              raise ValueError(
                  "input depth must be evenly divisible by filter depth: "
                  f"{input_depth} vs {filters_depth}"
              )
          feature_group_count = input_depth // filters_depth
      return ivy.conv_general_dilated(
          input,
          filters,
          strides,
          padding,
          dims=num_spatial_dims,
          data_format=data_format,
          dilations=dilations,
          feature_group_count=feature_group_count,
      )
  
imports: import ivy
  from ivy.functional.frontends.tensorflow.func_wrapper import to_ivy_arrays_and_back
  from ivy.func_wrapper import with_unsupported_dtypes, with_supported_dtypes
  from ivy.functional.frontends.tensorflow import check_tensorflow_casting
label_desc: Use image node_id 18 for calling a global function with example usage: convolution(input, filters, strides, padding, data_format, dilations, name) and returns: ivy