code: def pool(
      x: Union[tf.Tensor, tf.Variable],
      window_shape: Union[int, Tuple[int], Tuple[int, int]],
      pool_type: str,
      /,
      *,
      strides: Optional[Union[int, Tuple[int], Tuple[int, int]]] = None,
      padding: str = "VALID",
      data_format: Optional[str] = None,
      dilations: Optional[
          Union[int, Tuple[int], Tuple[int, int]]
      ] = None,
      ceil_mode: bool = False,
      out: Optional[Union[tf.Tensor, tf.Variable]] = None,
  ) -> Union[tf.Tensor, tf.Variable]:
      return tf.nn.pool(
          x,
          window_shape,
          pool_type,
          strides=strides,
          padding=padding,
          data_format=data_format,
          dilations=dilations,
      )
  
imports: import math
  from typing import Union, Optional, Tuple, List, Literal, Sequence, Callable
  import tensorflow
  from ivy.func_wrapper import inputs_to_ivy_arrays, output_to_native_arrays, with_unsupported_dtypes, with_supported_dtypes, with_supported_device_and_dtypes
  from ..None import backend_version
  import ivy
  from ivy.functional.ivy.layers import _handle_padding, _get_num_padded_values, _validate_max_pool_params, _depth_max_pooling_helper
  from ivy.functional.ivy.experimental.layers import _padding_ceil_mode, _get_size
label_desc: Use image node_id 9 for calling a global function with example usage: pool() and returns: tf