code: def _jvp(p, t, *, stack, name, intermediates, announce):
      if intermediates:
          _stack = stack + ("jvp",)
          announce(name + ":".join(_stack))
      p_stack = stack + ("jvp_p",)
      t_stack = stack + ("jvp_t",)
      p_out = announce_jaxpr_p.bind(
          *p,
          stack=p_stack,
          name=name,
          intermediates=intermediates,
          announce=announce,
      )
      t_nonzero = [ti for ti in t if type(ti) is not ad.Zero]
      if len(t_nonzero) > 0:
          t_nonzero_out = announce_jaxpr_p.bind(
              *t_nonzero,
              stack=t_stack,
              name=name,
              intermediates=intermediates,
              announce=announce,
          )
      else:
          t_nonzero_out = []
      t_nonzero_out = iter(t_nonzero_out)
      t_out = [
          ti if type(ti) is ad.Zero else next(t_nonzero_out) for ti in t
      ]
      assert next(t_nonzero_out, None) is None
      return p_out, t_out
  
file_path: equinox/equinox/debug/_announce_transform.py
imports: from collections.abc import Callable
  from typing import Any
  import jax
  import jax.core
  import jax.interpreters.ad
  import jax.interpreters.batching
  import jax.interpreters.mlir
  import jax.tree_util
  from .._filters import combine, is_array, partition
label_desc: Use image node_id 4 for calling a global function with example usage: _jvp(p, t) and returns: p_out,  t_out