code: def create_vprim(name: str, impl, abstract_eval, jvp, transpose):
      prim = jax.core.Primitive(name)
      prim.multiple_results = True
  
      def batch_rule(
          axis_size, axis_name, trace_type, inputs, batch_axes, **params
      ):
          del trace_type
          # delegates batching to `_vprim_p`
          out = _vprim_p.bind(
              *inputs,
              prim=prim,
              __axis_size=axis_size,
              __axis_name=axis_name,
              __batch_axes=batch_axes,
              params=params,
          )
          batch_axes_out = jtu.tree_map(lambda _: 0, out)
          return out, batch_axes_out
  
      prim.def_impl(impl)
      prim.def_abstract_eval(abstract_eval)
      ad.primitive_jvps[prim] = jvp
      ad.primitive_transposes[prim] = transpose
      batching.axis_primitive_batchers[prim] = batch_rule
      mlir.register_lowering(
          prim, mlir.lower_fun(impl, multiple_results=True)
      )
      _vprim_impl_registry[prim] = impl
      _vprim_abstract_eval_registry[prim] = abstract_eval
      _vprim_jvp_registry[prim] = jvp
      _vprim_transpose_registry[prim] = transpose
      return prim
  
imports: import functools
  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 jaxtyping import PyTree
  from .._filters import combine, is_array, is_array_like, partition
  from .._tree import tree_equal
label_desc: Use image node_id 16 for calling a global function with example usage: create_vprim(name, impl, abstract_eval, jvp, transpose) and returns: prim, out,  batch_axes_out