code: def poisson_nll_loss(
      input: JaxArray,
      target: JaxArray,
      *,
      log_input: bool = True,
      full: bool = False,
      eps: float = 1e-8,
      reduction: str = "mean",
  ) -> JaxArray:
      input_arr = jnp.asarray(input, dtype=input.dtype)
      target_arr = jnp.asarray(target, dtype=input.dtype)
  
      # check params
      _validate_poisson_nll_params(
          input_arr, target_arr, eps, reduction
      )
  
      if log_input:
          loss = jnp.exp(input_arr) - target_arr * input_arr
      else:
          loss = input_arr - target_arr * jnp.log(input_arr + eps)
  
      if full:
          point_five = jnp.array(0.5, dtype=target_arr.dtype)
          two_pi = jnp.array(2 * jnp.pi, dtype=target_arr.dtype)
          striling_approx_term = (
              (target_arr * jnp.log(target_arr))
              - target_arr
              + (point_five * jnp.log(two_pi * target_arr))
          )
          zeroes = jnp.zeros_like(target_arr, dtype=target_arr.dtype)
          ones = jnp.ones_like(target_arr, dtype=target_arr.dtype)
          cond = jnp.logical_and(
              target_arr >= zeroes, target_arr <= ones
          )
          loss = loss + jnp.where(cond, zeroes, striling_approx_term)
      return _apply_loss_reduction(loss, reduction)
  
file_path: ivy/ivy/functional/backends/jax/experimental/losses.py
imports: import jax.numpy
  from typing import Optional
  from ivy.functional.backends.jax import JaxArray
  from ivy.func_wrapper import with_supported_device_and_dtypes
  from .None import backend_version
label_desc: Use image node_id 6 for calling a global function with example usage: poisson_nll_loss(input, target) and returns: _apply_loss_reduction