code: def gamma(
      alpha: Union[float, tf.Tensor, tf.Variable],
      beta: Union[float, tf.Tensor, tf.Variable],
      /,
      *,
      shape: Optional[Union[ivy.NativeShape, Sequence[int]]] = None,
      device: Optional[str] = None,
      dtype: Optional[Union[DType, ivy.Dtype]] = None,
      seed: Optional[int] = None,
      out: Optional[Union[tf.Tensor, tf.Variable]] = None,
  ) -> Union[tf.Tensor, tf.Variable]:
      if not dtype:
          dtype = ivy.default_float_dtype()
      dtype = ivy.as_native_dtype(dtype)
      shape = _check_bounds_and_get_shape(alpha, beta, shape).shape
      alpha = tf.cast(alpha, dtype)
      beta = tf.cast(beta, dtype)
      return tfp.distributions.Gamma(alpha, beta).sample(
          shape, seed=seed
      )
  
file_path: ivy/ivy/functional/backends/tensorflow/sub_backends/tf_probability/experimental/random.py
imports: from ivy.func_wrapper import with_unsupported_dtypes
  from ivy.functional.ivy.random import _check_bounds_and_get_shape, _check_shapes_broadcastable
  import tensorflow_probability
  from tensorflow_probability import distributions
  import tensorflow
  from tensorflow.python.framework.dtypes import DType
  from typing import Optional, Sequence, Union
  from ....None import backend_version
  import ivy
label_desc: Use image node_id 2 for calling a global function with example usage: gamma() and returns: tfp