code: def poisson(
      lam: Union[float, np.ndarray],
      *,
      shape: Optional[Union[ivy.NativeShape, Sequence[int]]] = None,
      device: Optional[str] = None,
      dtype: Optional[np.dtype] = None,
      seed: Optional[int] = None,
      fill_value: Optional[Union[float, int]] = 0,
      out: Optional[np.ndarray] = None,
  ) -> np.ndarray:
      lam = np.array(lam)
  
      if seed:
          np.random.seed(seed)
      if shape is not None:
          _check_shapes_broadcastable(lam.shape, shape)
      if np.any(lam < 0):
          pos_lam = np.where(lam < 0, 0, lam)
          ret = np.random.poisson(pos_lam, shape)
          ret = np.where(lam < 0, fill_value, ret)
      else:
          ret = np.random.poisson(lam, shape)
      return np.asarray(ret, dtype=dtype)
  
file_path: ivy/ivy/functional/backends/numpy/experimental/random.py
imports: from typing import Optional, Union, Sequence
  import numpy
  import ivy
  from ivy.functional.ivy.random import _check_bounds_and_get_shape, _check_shapes_broadcastable
label_desc: Use image node_id 4 for calling a global function with example usage: poisson(lam) and returns: np