code: def ref_swap(
      ref_or_view: AbstractRef | RefView,
      idx: Indexer | None,
      value: Array,
      _function_name: str = "ref_swap",
  ) -> Array:
      """Sets a `Ref`'s value and returns the original value."""
      ref, indexers = get_ref_and_indexers(
          ref_or_view, idx, _function_name
      )
      flat_indexers, tree = tree_util.tree_flatten(indexers)
      return swap_p.bind(ref, value, *flat_indexers, tree=tree)
  
imports: from __future__ import annotations
  from functools import partial
  from typing import Any, Union
  import numpy
  from jax._src import ad_util
  from jax._src import core
  from jax._src import pretty_printer
  from jax._src import tree_util
  from jax._src.interpreters import ad
  from jax._src.interpreters import batching
  from jax._src.interpreters import partial_eval
  from jax._src.interpreters import mlir
  from jax._src.lax import lax
  from jax._src.typing import Array
  from jax._src.state import indexing
  from jax._src.state.types import AbstractRef, RefView, ReadEffect, WriteEffect, AccumEffect
  from jax._src.util import safe_map, safe_zip
label_desc: Use image node_id 6 for calling a global function with example usage: ref_swap(ref_or_view, idx, value, _function_name) and returns: swap_p