code: def poisson(
      lam: Union[float, tf.Tensor, tf.Variable],
      *,
      shape: Optional[Union[ivy.NativeShape, Sequence[int]]] = None,
      device: Optional[str] = None,
      dtype: DType,
      seed: Optional[int] = None,
      fill_value: Optional[Union[float, int]] = 0,
      out: Optional[Union[tf.Tensor, tf.Variable]] = None,
  ) -> Union[tf.Tensor, tf.Variable]:
      lam = tf.cast(lam, "float32")
      if seed:
          tf.random.set_seed(seed)
      if shape is None:
          return tf.random.poisson((), lam, dtype=dtype, seed=seed)
      shape = tf.cast(shape, "int32")
      _check_shapes_broadcastable(lam.shape, shape)
      lam = tf.broadcast_to(lam, tuple(shape))
      ret = tf.random.poisson((), lam, dtype=dtype, seed=seed)
      if tf.reduce_any(lam < 0):
          return tf.where(lam < 0, fill_value, ret)
      return ret
  
file_path: ivy/ivy/functional/backends/tensorflow/experimental/random.py
imports: from typing import Union, Optional, Sequence
  import tensorflow
  from tensorflow.python.framework.dtypes import DType
  import ivy
  from ..None import backend_version
  from ivy.func_wrapper import with_unsupported_dtypes
  from ivy.functional.ivy.random import _check_shapes_broadcastable
label_desc: Use image node_id 4 for calling a global function with example usage: poisson(lam) and returns: ret, tf, tf