code: def poisson(
      lam: Union[float, JaxArray],
      *,
      shape: Optional[Union[ivy.NativeShape, Sequence[int]]] = None,
      device: Optional[jaxlib.xla_extension.Device] = None,
      dtype: Optional[jnp.dtype] = None,
      seed: Optional[int] = None,
      fill_value: Optional[Union[float, int]] = 0,
      out: Optional[JaxArray] = None,
  ) -> JaxArray:
      lam = jnp.array(lam)
      if seed:
          rng_input = jax.random.PRNGKey(seed)
      else:
          RNG_, rng_input = jax.random.split(_getRNG())
          _setRNG(RNG_)
      if shape is not None:
          shape = jnp.array(shape)
          list_shape = shape.tolist()
          _check_shapes_broadcastable(lam.shape, list_shape)
      else:
          list_shape = None
      if jnp.any(lam < 0):
          pos_lam = jnp.where(lam < 0, 0, lam)
          ret = jax.random.poisson(
              rng_input, pos_lam, shape=list_shape
          ).astype(dtype)
          ret = jnp.where(lam < 0, fill_value, ret)
      else:
          ret = jax.random.poisson(
              rng_input, lam, shape=list_shape
          ).astype(dtype)
      return ret
  
file_path: ivy/ivy/functional/backends/jax/experimental/random.py
imports: from typing import Optional, Union, Sequence
  import jax.numpy
  import jax
  import jaxlib.xla_extension
  import ivy
  from ivy.functional.backends.jax import JaxArray
  from ivy.functional.backends.jax.random import RNG, _setRNG, _getRNG
  from ivy.functional.ivy.random import _check_bounds_and_get_shape, _check_shapes_broadcastable
  from ivy.func_wrapper import with_unsupported_dtypes
  from ..None import backend_version
label_desc: Use image node_id 4 for calling a global function with example usage: poisson(lam) and returns: ret