code: def vjp(func: Callable, *primals):
      def grad_fn(*x_in):
          return ivy.to_native(
              func(*ivy.to_ivy(x_in, nested=True)),
              nested=True,
              include_derived=True,
          )
  
      primals_out, _vjpfun = ivy.outputs_to_ivy_arrays(jax.vjp)(
          grad_fn, *ivy.to_native(primals, nested=True)
      )
  
      def vjpfun(x_in):
          return ivy.to_ivy(
              _vjpfun(ivy.to_native(x_in, nested=True)),
              nested=True,
              include_derived=True,
          )
  
      return (primals_out, vjpfun)
  
imports: import jax
  from typing import Callable
  import ivy
  from ivy.func_wrapper import inputs_to_native_arrays
label_desc: Use image node_id 2 for calling a global function with example usage: vjp(func) and returns: primals_out,  vjpfun, ivy, ivy